diff --git a/integration/typings_test_ts49/BUILD.bazel b/integration/typings_test_ts49/BUILD.bazel new file mode 100644 index 00000000000000..84bc018155fa2b --- /dev/null +++ b/integration/typings_test_ts49/BUILD.bazel @@ -0,0 +1,9 @@ +load("//integration:index.bzl", "ng_integration_test") + +ng_integration_test( + name = "test", + # Special case for `typings_test_ts49` test as we want to pin + # `typescript` at version 4.9.x for that test and not link to the + # root @npm//typescript package. + pinned_npm_packages = ["typescript"], +) diff --git a/integration/typings_test_ts49/include-all.ts b/integration/typings_test_ts49/include-all.ts new file mode 100644 index 00000000000000..925e0ef07853a4 --- /dev/null +++ b/integration/typings_test_ts49/include-all.ts @@ -0,0 +1,71 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + + +import * as animations from '@angular/animations'; +import * as animationsBrowser from '@angular/animations/browser'; +import * as animationsBrowserTesting from '@angular/animations/browser/testing'; +import * as common from '@angular/common'; +import * as commonHttp from '@angular/common/http'; +import * as commonTesting from '@angular/common/testing'; +import * as commonHttpTesting from '@angular/common/testing'; +import * as compiler from '@angular/compiler'; +import * as compilerTesting from '@angular/compiler/testing'; +import * as core from '@angular/core'; +import * as coreTesting from '@angular/core/testing'; +import * as elements from '@angular/elements'; +import * as forms from '@angular/forms'; +import * as localize from '@angular/localize'; +import * as platformBrowser from '@angular/platform-browser'; +import * as platformBrowserDynamic from '@angular/platform-browser-dynamic'; +import * as platformBrowserDynamicTesting from '@angular/platform-browser-dynamic/testing'; +import * as platformBrowserAnimations from '@angular/platform-browser/animations'; +import * as platformBrowserTesting from '@angular/platform-browser/testing'; +import * as platformServer from '@angular/platform-server'; +import * as platformServerInit from '@angular/platform-server/init'; +import * as platformServerTesting from '@angular/platform-server/testing'; +import * as router from '@angular/router'; +import * as routerTesting from '@angular/router/testing'; +import * as routerUpgrade from '@angular/router/upgrade'; +import * as serviceWorker from '@angular/service-worker'; +import * as upgrade from '@angular/upgrade'; +import * as upgradeStatic from '@angular/upgrade/static'; +import * as upgradeTesting from '@angular/upgrade/static/testing'; + +export default { + animations, + animationsBrowser, + animationsBrowserTesting, + common, + commonTesting, + commonHttp, + commonHttpTesting, + compiler, + compilerTesting, + core, + coreTesting, + elements, + forms, + localize, + platformBrowser, + platformBrowserTesting, + platformBrowserDynamic, + platformBrowserDynamicTesting, + platformBrowserAnimations, + platformServer, + platformServerInit, + platformServerTesting, + router, + routerTesting, + routerUpgrade, + serviceWorker, + upgrade, + upgradeStatic, + upgradeTesting, +}; diff --git a/integration/typings_test_ts49/package.json b/integration/typings_test_ts49/package.json new file mode 100644 index 00000000000000..ba6e98a23e7170 --- /dev/null +++ b/integration/typings_test_ts49/package.json @@ -0,0 +1,29 @@ +{ + "name": "angular-integration", + "description": "Assert that users with TypeScript 4.9 can type-check an Angular application", + "version": "0.0.0", + "license": "MIT", + "dependencies": { + "@angular/animations": "file:../../dist/packages-dist/animations", + "@angular/common": "file:../../dist/packages-dist/common", + "@angular/compiler": "file:../../dist/packages-dist/compiler", + "@angular/compiler-cli": "file:../../dist/packages-dist/compiler-cli", + "@angular/core": "file:../../dist/packages-dist/core", + "@angular/elements": "file:../../dist/packages-dist/elements", + "@angular/forms": "file:../../dist/packages-dist/forms", + "@angular/localize": "file:../../dist/packages-dist/localize", + "@angular/platform-browser": "file:../../dist/packages-dist/platform-browser", + "@angular/platform-browser-dynamic": "file:../../dist/packages-dist/platform-browser-dynamic", + "@angular/platform-server": "file:../../dist/packages-dist/platform-server", + "@angular/router": "file:../../dist/packages-dist/router", + "@angular/service-worker": "file:../../dist/packages-dist/service-worker", + "@angular/upgrade": "file:../../dist/packages-dist/upgrade", + "@types/jasmine": "file:../../node_modules/@types/jasmine", + "rxjs": "file:../../node_modules/rxjs", + "typescript": "~4.9.2-rc", + "zone.js": "file:../../dist/zone.js-dist/archive/zone.js.tgz" + }, + "scripts": { + "test": "tsc" + } +} diff --git a/integration/typings_test_ts49/tsconfig.json b/integration/typings_test_ts49/tsconfig.json new file mode 100644 index 00000000000000..30e25c22097341 --- /dev/null +++ b/integration/typings_test_ts49/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "experimentalDecorators": true, + "module": "commonjs", + "moduleResolution": "node", + "outDir": "./dist/out-tsc", + "rootDir": ".", + "target": "es5", + "lib": [ + "es5", + "dom", + "es2015.collection", + "es2015.iterable", + "es2015.promise" + ], + "types": [], + }, + "files": [ + "include-all.ts", + "node_modules/@types/jasmine/index.d.ts" + ] +} diff --git a/integration/typings_test_ts49/yarn.lock b/integration/typings_test_ts49/yarn.lock new file mode 100644 index 00000000000000..238bb3ba6e9e11 --- /dev/null +++ b/integration/typings_test_ts49/yarn.lock @@ -0,0 +1,824 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@angular/animations@file:../../dist/packages-dist/animations": + version "15.0.0-next.5" + dependencies: + tslib "^2.3.0" + +"@angular/common@file:../../dist/packages-dist/common": + version "15.0.0-next.5" + dependencies: + tslib "^2.3.0" + +"@angular/compiler-cli@file:../../dist/packages-dist/compiler-cli": + version "15.0.0-next.5" + dependencies: + "@babel/core" "^7.17.2" + chokidar "^3.0.0" + convert-source-map "^1.5.1" + dependency-graph "^0.11.0" + magic-string "^0.26.0" + reflect-metadata "^0.1.2" + semver "^7.0.0" + sourcemap-codec "^1.4.8" + tslib "^2.3.0" + yargs "^17.2.1" + +"@angular/compiler@file:../../dist/packages-dist/compiler": + version "15.0.0-next.5" + dependencies: + tslib "^2.3.0" + +"@angular/core@file:../../dist/packages-dist/core": + version "15.0.0-next.5" + dependencies: + tslib "^2.3.0" + +"@angular/elements@file:../../dist/packages-dist/elements": + version "15.0.0-next.5" + dependencies: + tslib "^2.3.0" + +"@angular/forms@file:../../dist/packages-dist/forms": + version "15.0.0-next.5" + dependencies: + tslib "^2.3.0" + +"@angular/localize@file:../../dist/packages-dist/localize": + version "15.0.0-next.5" + dependencies: + "@babel/core" "7.18.9" + glob "8.0.3" + yargs "^17.2.1" + +"@angular/platform-browser-dynamic@file:../../dist/packages-dist/platform-browser-dynamic": + version "15.0.0-next.5" + dependencies: + tslib "^2.3.0" + +"@angular/platform-browser@file:../../dist/packages-dist/platform-browser": + version "15.0.0-next.5" + dependencies: + tslib "^2.3.0" + +"@angular/platform-server@file:../../dist/packages-dist/platform-server": + version "15.0.0-next.5" + dependencies: + domino "^2.1.2" + tslib "^2.3.0" + xhr2 "^0.2.0" + +"@angular/router@file:../../dist/packages-dist/router": + version "15.0.0-next.5" + dependencies: + tslib "^2.3.0" + +"@angular/service-worker@file:../../dist/packages-dist/service-worker": + version "15.0.0-next.5" + dependencies: + tslib "^2.3.0" + +"@angular/upgrade@file:../../dist/packages-dist/upgrade": + version "15.0.0-next.5" + dependencies: + tslib "^2.3.0" + +"@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.18.8": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.13.tgz#6aff7b350a1e8c3e40b029e46cbe78e24a913483" + integrity sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw== + +"@babel/core@7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" + integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/core@^7.17.2": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.13.tgz#9be8c44512751b05094a4d3ab05fc53a47ce00ac" + integrity sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.13" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.13" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.13" + "@babel/types" "^7.18.13" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@^7.18.13", "@babel/generator@^7.18.9": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.13.tgz#59550cbb9ae79b8def15587bdfbaa388c4abf212" + integrity sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ== + dependencies: + "@babel/types" "^7.18.13" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.18.10", "@babel/parser@^7.18.13", "@babel/parser@^7.18.9": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.13.tgz#5b2dd21cae4a2c5145f1fbd8ca103f9313d3b7e4" + integrity sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg== + +"@babel/template@^7.18.10", "@babel/template@^7.18.6": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.18.13", "@babel/traverse@^7.18.9": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.13.tgz#5ab59ef51a997b3f10c4587d648b9696b6cb1a68" + integrity sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.13" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.13" + "@babel/types" "^7.18.13" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.18.10", "@babel/types@^7.18.13", "@babel/types@^7.18.6", "@babel/types@^7.18.9": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.13.tgz#30aeb9e514f4100f7c1cb6e5ba472b30e48f519a" + integrity sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ== + dependencies: + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@types/jasmine@file:../../node_modules/@types/jasmine": + version "4.0.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.20.2: + version "4.21.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" + integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== + dependencies: + caniuse-lite "^1.0.30001370" + electron-to-chromium "^1.4.202" + node-releases "^2.0.6" + update-browserslist-db "^1.0.5" + +caniuse-lite@^1.0.30001370: + version "1.0.30001383" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001383.tgz#aecf317ccd940690725ae3ae4f28293c5fb8050e" + integrity sha512-swMpEoTp5vDoGBZsYZX7L7nXHe6dsHxi9o6/LKf/f0LukVtnrxly5GVb/fWdCDTqi/yw6Km6tiJ0pmBacm0gbg== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^3.0.0: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +convert-source-map@^1.5.1, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +debug@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +dependency-graph@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" + integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== + +domino@^2.1.2: + version "2.1.6" + resolved "https://registry.yarnpkg.com/domino/-/domino-2.1.6.tgz#fe4ace4310526e5e7b9d12c7de01b7f485a57ffe" + integrity sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ== + +electron-to-chromium@^1.4.202: + version "1.4.230" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.230.tgz#666909fdf5765acb1348b69752ee9955dc1664b7" + integrity sha512-3pwjAK0qHSDN9+YAF4fJknsSruP7mpjdWzUSruIJD/JCH77pEh0SorEyb3xVaKkfwk2tzjOt2D8scJ0KAdfXLA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.26.0: + version "0.26.2" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.2.tgz#5331700e4158cd6befda738bb6b0c7b93c0d4432" + integrity sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A== + dependencies: + sourcemap-codec "^1.4.8" + +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +reflect-metadata@^0.1.2: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +"rxjs@file:../../node_modules/rxjs": + version "6.6.7" + dependencies: + tslib "^1.9.0" + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.0.0: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +typescript@~4.9.2-rc: + version "4.9.2-rc" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.2-rc.tgz#3525dbeb8458a8c98ce7d60724e4a9380d7b46e7" + integrity sha512-Ly9UUxJBfiiFjfegI1gsW9FI8Xhw1cuwRMBJ4wdYg+UXZR4VnZvD1OnBDj/iQ2U+tWbWEjYqJ5xx1Cwr4Vsa4w== + +update-browserslist-db@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +xhr2@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.2.1.tgz#4e73adc4f9cfec9cbd2157f73efdce3a5f108a93" + integrity sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^21.0.0: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.2.1: + version "17.5.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + +"zone.js@file:../../dist/zone.js-dist/archive/zone.js.tgz": + version "0.11.7" + resolved "file:../../dist/zone.js-dist/archive/zone.js.tgz#60e9a1429019819065ae677295f73279a854a84f" + dependencies: + tslib "^2.3.0" diff --git a/package.json b/package.json index 11f5632dbaa680..be199f4937f055 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "@types/jasmine-ajax": "^3.3.1", "@types/jasminewd2": "^2.0.8", "@types/multimatch": "^4.0.0", - "@types/node": "^14.15.0", + "@types/node": "^16.11.7", "@types/resize-observer-browser": "^0.1.5", "@types/selenium-webdriver": "3.0.7", "@types/semver": "^7.3.4", @@ -172,7 +172,7 @@ "tsickle": "0.46.3", "tslib": "^2.3.0", "tslint": "6.1.3", - "typescript": "~4.8.2", + "typescript": "~4.9.2-rc", "webtreemap": "^2.0.1", "xhr2": "0.2.1", "yargs": "^17.2.1" diff --git a/packages/bazel/package.json b/packages/bazel/package.json index 13f90c8dcd1a24..6403b30b8cc5fd 100644 --- a/packages/bazel/package.json +++ b/packages/bazel/package.json @@ -36,7 +36,7 @@ "rollup": "^2.56.3", "rollup-plugin-sourcemaps": "^0.6.3", "terser": "^5.9.0", - "typescript": ">=4.8.2 <4.9" + "typescript": ">=4.8.2 <5.0" }, "peerDependenciesMeta": { "terser": { diff --git a/packages/compiler-cli/linker/src/ast/ast_value.ts b/packages/compiler-cli/linker/src/ast/ast_value.ts index 3e3de6943cdc39..05ec24210b3e0b 100644 --- a/packages/compiler-cli/linker/src/ast/ast_value.ts +++ b/packages/compiler-cli/linker/src/ast/ast_value.ts @@ -6,7 +6,9 @@ * found in the LICENSE file at https://angular.io/license */ import * as o from '@angular/compiler'; + import {FatalLinkerError} from '../fatal_linker_error'; + import {AstHost, Range} from './ast_host'; /** @@ -30,13 +32,6 @@ type ArrayValueType = T extends Array? R : never; */ type ConformsTo = Actual extends Expected ? This : never; -/** - * Ensures that `This` is an `AstValue` whose generic type conforms to `Expected`, to disallow - * calling a method if the value's type does not conform. - */ -type HasValueType = - This extends AstValue? ConformsTo: never; - /** * Represents only the string keys of type `T`. */ @@ -62,7 +57,7 @@ export class AstObject { static parse(expression: TExpression, host: AstHost): AstObject { const obj = host.parseObjectLiteral(expression); - return new AstObject(expression, obj, host); + return new AstObject(expression, obj, host); } private constructor( @@ -115,7 +110,7 @@ export class AstObject { AstObject, TExpression> { const expr = this.getRequiredProperty(propertyName); const obj = this.host.parseObjectLiteral(expr); - return new AstObject(expr, obj, this.host); + return new AstObject, TExpression>(expr, obj, this.host); } /** @@ -126,7 +121,7 @@ export class AstObject { getArray>(this: ConformsTo, propertyName: K): AstValue, TExpression>[] { const arr = this.host.parseArrayLiteral(this.getRequiredProperty(propertyName)); - return arr.map(entry => new AstValue(entry, this.host)); + return arr.map(entry => new AstValue, TExpression>(entry, this.host)); } /** @@ -154,7 +149,7 @@ export class AstObject { * Throws an error if there is no such property. */ getValue>(propertyName: K): AstValue { - return new AstValue(this.getRequiredProperty(propertyName), this.host); + return new AstValue(this.getRequiredProperty(propertyName), this.host); } /** @@ -164,7 +159,7 @@ export class AstObject { toLiteral(mapper: (value: AstValue, TExpression>) => V): Record { const result: Record = {}; for (const [key, expression] of this.obj) { - result[key] = mapper(new AstValue(expression, this.host)); + result[key] = mapper(new AstValue, TExpression>(expression, this.host)); } return result; } @@ -176,7 +171,7 @@ export class AstObject { toMap(mapper: (value: AstValue, TExpression>) => V): Map { const result = new Map(); for (const [key, expression] of this.obj) { - result.set(key, mapper(new AstValue(expression, this.host))); + result.set(key, mapper(new AstValue, TExpression>(expression, this.host))); } return result; } @@ -219,7 +214,7 @@ export class AstValue { /** * Parse the number from this value, or error if it is not a number. */ - getNumber(this: HasValueType): number { + getNumber(this: ConformsTo): number { return this.host.parseNumericLiteral(this.expression); } @@ -233,7 +228,7 @@ export class AstValue { /** * Parse the string from this value, or error if it is not a string. */ - getString(this: HasValueType): string { + getString(this: ConformsTo): string { return this.host.parseStringLiteral(this.expression); } @@ -247,7 +242,7 @@ export class AstValue { /** * Parse the boolean from this value, or error if it is not a boolean. */ - getBoolean(this: HasValueType): boolean { + getBoolean(this: ConformsTo): boolean { return this.host.parseBooleanLiteral(this.expression); } @@ -261,8 +256,8 @@ export class AstValue { /** * Parse this value into an `AstObject`, or error if it is not an object literal. */ - getObject(this: HasValueType): AstObject, TExpression> { - return AstObject.parse(this.expression, this.host); + getObject(this: ConformsTo): AstObject, TExpression> { + return AstObject.parse, TExpression>(this.expression, this.host); } /** @@ -275,9 +270,9 @@ export class AstValue { /** * Parse this value into an array of `AstValue` objects, or error if it is not an array literal. */ - getArray(this: HasValueType): AstValue, TExpression>[] { + getArray(this: ConformsTo): AstValue, TExpression>[] { const arr = this.host.parseArrayLiteral(this.expression); - return arr.map(entry => new AstValue(entry, this.host)); + return arr.map(entry => new AstValue, TExpression>(entry, this.host)); } /** @@ -291,7 +286,7 @@ export class AstValue { * Extract the return value as an `AstValue` from this value as a function expression, or error if * it is not a function expression. */ - getFunctionReturnValue(this: HasValueType): AstValue { + getFunctionReturnValue(this: ConformsTo): AstValue { return new AstValue(this.host.parseReturnValue(this.expression), this.host); } diff --git a/packages/compiler-cli/ngcc/src/execution/cluster/master.ts b/packages/compiler-cli/ngcc/src/execution/cluster/master.ts index 717460d1b1e2dc..a0b8b7a7634625 100644 --- a/packages/compiler-cli/ngcc/src/execution/cluster/master.ts +++ b/packages/compiler-cli/ngcc/src/execution/cluster/master.ts @@ -8,7 +8,7 @@ /// -import cluster from 'cluster'; +import cluster, {Worker} from 'cluster'; import module from 'module'; import {AbsoluteFsPath, PathManipulation} from '../../../../src/ngtsc/file_system'; @@ -112,7 +112,7 @@ export class ClusterMaster { } if (!isWorkerAvailable) { - const spawnedWorkerCount = Object.keys(cluster.workers).length; + const spawnedWorkerCount = cluster.workers ? Object.keys(cluster.workers).length : 0; if (spawnedWorkerCount < this.maxWorkerCount) { this.logger.debug('Spawning another worker process as there is more work to be done.'); cluster.fork(); @@ -144,7 +144,7 @@ export class ClusterMaster { } /** Handle a worker's exiting. (Might be intentional or not.) */ - private onWorkerExit(worker: cluster.Worker, code: number|null, signal: string|null): void { + private onWorkerExit(worker: Worker, code: number|null, signal: string|null): void { // If the worker's exiting was intentional, nothing to do. if (worker.exitedAfterDisconnect) return; @@ -182,7 +182,7 @@ export class ClusterMaster { // The crashing might be a result of increased memory consumption by ngcc. // Do not spawn another process, unless this was the last worker process. - const spawnedWorkerCount = Object.keys(cluster.workers).length; + const spawnedWorkerCount = cluster.workers ? Object.keys(cluster.workers).length : 0; if (spawnedWorkerCount > 0) { this.logger.debug(`Not spawning another worker process to replace #${ worker.id}. Continuing with ${spawnedWorkerCount} workers...`); @@ -318,11 +318,13 @@ export class ClusterMaster { /** Stop all workers and stop listening on cluster events. */ private stopWorkers(): void { - const workers = Object.values(cluster.workers) as cluster.Worker[]; - this.logger.debug(`Stopping ${workers.length} workers...`); + if (cluster.workers) { + const workers = Object.values(cluster.workers) as Worker[]; + this.logger.debug(`Stopping ${workers.length} workers...`); - cluster.removeAllListeners(); - workers.forEach(worker => worker.kill()); + cluster.removeAllListeners(); + workers.forEach(worker => worker.kill()); + } } /** diff --git a/packages/compiler-cli/ngcc/src/execution/cluster/utils.ts b/packages/compiler-cli/ngcc/src/execution/cluster/utils.ts index 24d27e6efdaec5..c9b4acb4212208 100644 --- a/packages/compiler-cli/ngcc/src/execution/cluster/utils.ts +++ b/packages/compiler-cli/ngcc/src/execution/cluster/utils.ts @@ -74,14 +74,14 @@ export const sendMessageToWorker = (workerId: number, msg: MessageToWorker): Pro throw new Error('Unable to send message to worker process: Sender is not the master process.'); } - const worker = cluster.workers[workerId]; + const worker = cluster.workers?.[workerId]; - if ((worker === undefined) || worker.isDead() || !worker.isConnected()) { + if (worker === undefined || worker.isDead() || !worker.isConnected()) { throw new Error( 'Unable to send message to worker process: Recipient does not exist or has disconnected.'); } return new Promise((resolve, reject) => { - worker.send(msg, undefined, (err: Error|null) => (err === null) ? resolve() : reject(err)); + worker.send(msg, (err: Error|null) => (err === null) ? resolve() : reject(err)); }); }; diff --git a/packages/compiler-cli/ngcc/src/execution/cluster/worker.ts b/packages/compiler-cli/ngcc/src/execution/cluster/worker.ts index 81f2946183a03f..30e7d08ac17235 100644 --- a/packages/compiler-cli/ngcc/src/execution/cluster/worker.ts +++ b/packages/compiler-cli/ngcc/src/execution/cluster/worker.ts @@ -17,10 +17,11 @@ import {MessageToWorker} from './api'; import {sendMessageToMaster} from './utils'; export async function startWorker(logger: Logger, createCompileFn: CreateCompileFn): Promise { - if (cluster.isMaster) { + if (cluster.isMaster || !cluster.worker) { throw new Error('Tried to run cluster worker on the master process.'); } + const worker = cluster.worker; const compile = createCompileFn( transformedFiles => sendMessageToMaster({ type: 'transformed-files', @@ -29,16 +30,15 @@ export async function startWorker(logger: Logger, createCompileFn: CreateCompile (_task, outcome, message) => sendMessageToMaster({type: 'task-completed', outcome, message})); // Listen for `ProcessTaskMessage`s and process tasks. - cluster.worker.on('message', async (msg: MessageToWorker) => { + worker.on('message', async (msg: MessageToWorker) => { try { switch (msg.type) { case 'process-task': - logger.debug( - `[Worker #${cluster.worker.id}] Processing task: ${stringifyTask(msg.task)}`); + logger.debug(`[Worker #${worker.id}] Processing task: ${stringifyTask(msg.task)}`); return await compile(msg.task); default: throw new Error( - `[Worker #${cluster.worker.id}] Invalid message received: ${JSON.stringify(msg)}`); + `[Worker #${worker.id}] Invalid message received: ${JSON.stringify(msg)}`); } } catch (err: any) { switch (err && err.code) { @@ -48,7 +48,7 @@ export async function startWorker(logger: Logger, createCompileFn: CreateCompile // simultaneously. // // Exit with an error and let the cluster master decide how to handle this. - logger.warn(`[Worker #${cluster.worker.id}] ${err.stack || err.message}`); + logger.warn(`[Worker #${worker.id}] ${err.stack || err.message}`); return process.exit(1); default: await sendMessageToMaster({ diff --git a/packages/compiler-cli/ngcc/test/execution/cluster/worker_spec.ts b/packages/compiler-cli/ngcc/test/execution/cluster/worker_spec.ts index 4b22d53f411887..712db71c1184aa 100644 --- a/packages/compiler-cli/ngcc/test/execution/cluster/worker_spec.ts +++ b/packages/compiler-cli/ngcc/test/execution/cluster/worker_spec.ts @@ -8,7 +8,7 @@ /// -import cluster from 'cluster'; +import cluster, {Worker} from 'cluster'; import {EventEmitter} from 'events'; import {AbsoluteFsPath} from '../../../../src/ngtsc/file_system'; @@ -55,7 +55,7 @@ describe('startWorker()', () => { beforeEach(() => { runAsClusterMaster(false); - mockClusterWorker(Object.assign(new EventEmitter(), {id: 42}) as cluster.Worker); + mockClusterWorker(Object.assign(new EventEmitter(), {id: 42}) as Worker); }); it('should create the `compileFn()`', () => { @@ -141,7 +141,7 @@ describe('startWorker()', () => { } as unknown as Task; startWorker(mockLogger, createCompileFnSpy); - cluster.worker.emit('message', {type: 'process-task', task: mockTask}); + cluster.worker!.emit('message', {type: 'process-task', task: mockTask}); expect(compileFnSpy).toHaveBeenCalledWith(mockTask); expect(processSendSpy).toHaveBeenCalledOnceWith({type: 'ready'}, jasmine.any(Function)); @@ -166,12 +166,12 @@ describe('startWorker()', () => { startWorker(mockLogger, createCompileFnSpy); err = 'Error string.'; - cluster.worker.emit('message', {type: 'process-task', task: mockTask}); + cluster.worker!.emit('message', {type: 'process-task', task: mockTask}); expect(processSendSpy) .toHaveBeenCalledWith({type: 'error', error: err}, jasmine.any(Function)); err = new Error('Error object.'); - cluster.worker.emit('message', {type: 'process-task', task: mockTask}); + cluster.worker!.emit('message', {type: 'process-task', task: mockTask}); expect(processSendSpy) .toHaveBeenCalledWith({type: 'error', error: err.stack}, jasmine.any(Function)); }); @@ -198,7 +198,7 @@ describe('startWorker()', () => { compileFnSpy.and.throwError(noMemError); startWorker(mockLogger, createCompileFnSpy); - cluster.worker.emit('message', {type: 'process-task', task: mockTask}); + cluster.worker!.emit('message', {type: 'process-task', task: mockTask}); expect(mockLogger.logs.warn).toEqual([[`[Worker #42] ${noMemError.stack}`]]); expect(processExitSpy).toHaveBeenCalledWith(1); @@ -210,7 +210,7 @@ describe('startWorker()', () => { it('should throw, when an unknown message type is received', () => { startWorker(mockLogger, createCompileFnSpy); - cluster.worker.emit('message', {type: 'unknown', foo: 'bar'}); + cluster.worker!.emit('message', {type: 'unknown', foo: 'bar'}); expect(compileFnSpy).not.toHaveBeenCalled(); expect(processSendSpy) diff --git a/packages/compiler-cli/ngcc/test/utils_spec.ts b/packages/compiler-cli/ngcc/test/utils_spec.ts index baedd52b1bd2eb..932a15cff1424b 100644 --- a/packages/compiler-cli/ngcc/test/utils_spec.ts +++ b/packages/compiler-cli/ngcc/test/utils_spec.ts @@ -58,7 +58,7 @@ describe('FactoryMap', () => { describe('getTsHelperFnFromDeclaration()', () => { const createFunctionDeclaration = (fnName?: string) => ts.factory.createFunctionDeclaration( - undefined, undefined, undefined, fnName, undefined, [], undefined, undefined); + undefined, undefined, fnName, undefined, [], undefined, undefined); const createVariableDeclaration = (varName: string) => ts.factory.createVariableDeclaration(varName, undefined, undefined, undefined); diff --git a/packages/compiler-cli/package.json b/packages/compiler-cli/package.json index 506f29ba9e91a3..e9222124cd6c7b 100644 --- a/packages/compiler-cli/package.json +++ b/packages/compiler-cli/package.json @@ -66,7 +66,7 @@ }, "peerDependencies": { "@angular/compiler": "0.0.0-PLACEHOLDER", - "typescript": ">=4.8.2 <4.9" + "typescript": ">=4.8.2 <5.0" }, "repository": { "type": "git", diff --git a/packages/compiler-cli/src/ngtsc/partial_evaluator/test/diagnostics_spec.ts b/packages/compiler-cli/src/ngtsc/partial_evaluator/test/diagnostics_spec.ts index bba9e84c945def..3124fb98b833f0 100644 --- a/packages/compiler-cli/src/ngtsc/partial_evaluator/test/diagnostics_spec.ts +++ b/packages/compiler-cli/src/ngtsc/partial_evaluator/test/diagnostics_spec.ts @@ -49,7 +49,6 @@ runInEachFileSystem(os => { it('should describe references', () => { const namedFn = ts.factory.createFunctionDeclaration( - /* decorators */ undefined, /* modifiers */ undefined, /* asteriskToken */ undefined, /* name */ 'test', @@ -61,7 +60,6 @@ runInEachFileSystem(os => { expect(describeResolvedType(new Reference(namedFn))).toBe('test'); const anonymousFn = ts.factory.createFunctionDeclaration( - /* decorators */ undefined, /* modifiers */ undefined, /* asteriskToken */ undefined, /* name */ undefined, diff --git a/packages/compiler-cli/src/ngtsc/transform/src/utils.ts b/packages/compiler-cli/src/ngtsc/transform/src/utils.ts index 7ab204591a4bbb..4730a126b325a9 100644 --- a/packages/compiler-cli/src/ngtsc/transform/src/utils.ts +++ b/packages/compiler-cli/src/ngtsc/transform/src/utils.ts @@ -8,6 +8,7 @@ import ts from 'typescript'; import {ImportManager} from '../../translator'; +import {createImportDeclaration} from '../../ts_compatibility'; /** * Adds extra imports in the import manage for this source file, after the existing imports @@ -24,8 +25,7 @@ export function addImports( /* isTypeOnly */ false, /* name */ undefined, /* namedBindings */ ts.factory.createNamespaceImport(qualifier)); - const decl = ts.factory.createImportDeclaration( - /* decorators */ undefined, + const decl = createImportDeclaration( /* modifiers */ undefined, /* importClause */ importClause, /* moduleSpecifier */ ts.factory.createStringLiteral(i.specifier)); diff --git a/packages/compiler-cli/src/ngtsc/translator/BUILD.bazel b/packages/compiler-cli/src/ngtsc/translator/BUILD.bazel index 351b1a75138f39..db867d26b29ff4 100644 --- a/packages/compiler-cli/src/ngtsc/translator/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/translator/BUILD.bazel @@ -9,6 +9,7 @@ ts_library( "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/imports", + "//packages/compiler-cli/src/ngtsc/ts_compatibility", "//packages/compiler-cli/src/ngtsc/util", "@npm//typescript", ], diff --git a/packages/compiler-cli/src/ngtsc/translator/src/type_translator.ts b/packages/compiler-cli/src/ngtsc/translator/src/type_translator.ts index 3c243906a48dca..b9a008ef652b89 100644 --- a/packages/compiler-cli/src/ngtsc/translator/src/type_translator.ts +++ b/packages/compiler-cli/src/ngtsc/translator/src/type_translator.ts @@ -9,6 +9,8 @@ import * as o from '@angular/compiler'; import ts from 'typescript'; +import {createIndexSignature, createParameterDeclaration} from '../../ts_compatibility'; + import {Context} from './context'; import {ImportManager} from './import_manager'; @@ -61,14 +63,13 @@ export class TypeTranslatorVisitor implements o.ExpressionVisitor, o.TypeVisitor } visitMapType(type: o.MapType, context: Context): ts.TypeLiteralNode { - const parameter = ts.factory.createParameterDeclaration( - undefined, undefined, undefined, 'key', undefined, + const parameter = createParameterDeclaration( + undefined, undefined, 'key', undefined, ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)); const typeArgs = type.valueType !== null ? this.translateType(type.valueType, context) : ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword); - const indexSignature = - ts.factory.createIndexSignature(undefined, undefined, [parameter], typeArgs); + const indexSignature = createIndexSignature(undefined, [parameter], typeArgs); return ts.factory.createTypeLiteralNode([indexSignature]); } diff --git a/packages/compiler-cli/src/ngtsc/translator/src/typescript_ast_factory.ts b/packages/compiler-cli/src/ngtsc/translator/src/typescript_ast_factory.ts index 9ed4ff2430ed59..53c4db9e8af780 100644 --- a/packages/compiler-cli/src/ngtsc/translator/src/typescript_ast_factory.ts +++ b/packages/compiler-cli/src/ngtsc/translator/src/typescript_ast_factory.ts @@ -7,6 +7,8 @@ */ import ts from 'typescript'; +import {createFunctionDeclaration, createParameterDeclaration} from '../../ts_compatibility'; + import {AstFactory, BinaryOperator, LeadingComment, ObjectLiteralProperty, SourceMapRange, TemplateLiteral, UnaryOperator, VariableDeclarationType} from './api/ast_factory'; /** @@ -108,11 +110,10 @@ export class TypeScriptAstFactory implements AstFactory ts.factory.createParameterDeclaration(undefined, undefined, undefined, param)), - undefined, body); + return createFunctionDeclaration( + undefined, undefined, functionName, undefined, + parameters.map(param => createParameterDeclaration(undefined, undefined, param)), undefined, + body); } createFunctionExpression(functionName: string|null, parameters: string[], body: ts.Statement): @@ -122,9 +123,8 @@ export class TypeScriptAstFactory implements AstFactory ts.factory.createParameterDeclaration(undefined, undefined, undefined, param)), - undefined, body); + parameters.map(param => createParameterDeclaration(undefined, undefined, param)), undefined, + body); } createIdentifier = ts.factory.createIdentifier; diff --git a/packages/compiler-cli/src/ngtsc/ts_compatibility/src/ts_cross_version_utils.ts b/packages/compiler-cli/src/ngtsc/ts_compatibility/src/ts_cross_version_utils.ts index 307cb70a8c21f0..dc021ab7eded1a 100644 --- a/packages/compiler-cli/src/ngtsc/ts_compatibility/src/ts_cross_version_utils.ts +++ b/packages/compiler-cli/src/ngtsc/ts_compatibility/src/ts_cross_version_utils.ts @@ -11,6 +11,9 @@ import ts from 'typescript'; /** Whether the current TypeScript version is after 4.8. */ const IS_AFTER_TS_48 = isAfterVersion(4, 8); +/** Whether the current TypeScript version is after 4.9. */ +const IS_AFTER_TS_49 = isAfterVersion(4, 9); + /** Equivalent of `ts.ModifierLike` which is only present in TS 4.8+. */ export type ModifierLike = ts.Modifier|ts.Decorator; @@ -275,6 +278,78 @@ export const getDecorators: (node: ts.Node) => readonly ts.Decorator[] | undefin export const getModifiers: (node: ts.Node) => readonly ts.Modifier[] | undefined = IS_AFTER_TS_48 ? (ts as any).getModifiers : node => node.modifiers; +/** Type of `ts.factory.CreateParameterDeclaration` in TS 4.9+. */ +type Ts49CreateParameterDeclarationFn = + (modifiers: readonly ModifierLike[]|undefined, dotDotDotToken: ts.DotDotDotToken|undefined, + name: string|ts.BindingName, questionToken?: ts.QuestionToken|undefined, + type?: ts.TypeNode|undefined, initializer?: ts.Expression) => ts.ParameterDeclaration; + +/** + * Creates a `ts.ParameterDeclaration` declaration. + * + * TODO(crisbeto): this is a backwards-compatibility layer for versions of TypeScript less than 4.9. + * We should remove it once we have dropped support for the older versions. + */ +export const createParameterDeclaration: Ts49CreateParameterDeclarationFn = IS_AFTER_TS_49 ? + (ts.factory.createParameterDeclaration as any) : + (modifiers, dotDotDotToken, name, questionToken, type, initializer) => + (ts.factory.createParameterDeclaration as any)( + ...splitModifiers(modifiers), dotDotDotToken, name, questionToken, type, initializer); + +/** Type of `ts.factory.createImportDeclaration` in TS 4.9+. */ +type Ts49CreateImportDeclarationFn = + (modifiers: readonly ts.Modifier[]|undefined, importClause: ts.ImportClause|undefined, + moduleSpecifier: ts.Expression, assertClause?: ts.AssertClause) => ts.ImportDeclaration; + +/** + * Creates a `ts.ImportDeclaration` declaration. + * + * TODO(crisbeto): this is a backwards-compatibility layer for versions of TypeScript less than 4.9. + * We should remove it once we have dropped support for the older versions. + */ +export const createImportDeclaration: Ts49CreateImportDeclarationFn = IS_AFTER_TS_49 ? + (ts.factory.createImportDeclaration as any) : + (modifiers, importClause, moduleSpecifier, assertClause) => + (ts.factory.createImportDeclaration as any)( + undefined, modifiers, importClause, moduleSpecifier, assertClause); + +/** Type of `ts.factory.createFunctionDeclaration` in TS 4.9+. */ +type Ts49CreateFunctionDeclarationFn = + (modifiers: readonly ModifierLike[]|undefined, asteriskToken: ts.AsteriskToken|undefined, + name: string|ts.Identifier|undefined, + typeParameters: readonly ts.TypeParameterDeclaration[]|undefined, + parameters: readonly ts.ParameterDeclaration[], type: ts.TypeNode|undefined, + body: ts.Block|undefined) => ts.FunctionDeclaration; + +/** + * Creates a `ts.FunctionDeclaration` declaration. + * + * TODO(crisbeto): this is a backwards-compatibility layer for versions of TypeScript less than 4.9. + * We should remove it once we have dropped support for the older versions. + */ +export const createFunctionDeclaration: Ts49CreateFunctionDeclarationFn = IS_AFTER_TS_49 ? + (ts.factory.createFunctionDeclaration as any) : + (modifiers, asteriskToken, name, typeParameters, parameters, type, body) => ( + ts.factory.createFunctionDeclaration as any)( + ...splitModifiers(modifiers), asteriskToken, name, typeParameters, parameters, type, body); + + +/** Type of `ts.factory.createIndexSignature` in TS 4.9+. */ +type Ts49CreateIndexSignatureFn = + (modifiers: readonly ts.Modifier[]|undefined, parameters: readonly ts.ParameterDeclaration[], + type: ts.TypeNode) => ts.IndexSignatureDeclaration; + +/** + * Creates a `ts.IndexSignatureDeclaration` declaration. + * + * TODO(crisbeto): this is a backwards-compatibility layer for versions of TypeScript less than 4.9. + * We should remove it once we have dropped support for the older versions. + */ +export const createIndexSignature: Ts49CreateIndexSignatureFn = IS_AFTER_TS_49 ? + (ts.factory.createIndexSignature as any) : + (modifiers, parameters, type) => + (ts.factory.createIndexSignature as any)(modifiers, parameters, type); + /** * Combines an optional array of decorators with an optional array of modifiers into a single * `ts.ModifierLike` array. Used in version of TypeScript after 4.8 where the `decorators` and diff --git a/packages/compiler-cli/src/ngtsc/typecheck/src/type_check_block.ts b/packages/compiler-cli/src/ngtsc/typecheck/src/type_check_block.ts index a98633589d8f3d..11516d94495c85 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/src/type_check_block.ts +++ b/packages/compiler-cli/src/ngtsc/typecheck/src/type_check_block.ts @@ -12,6 +12,7 @@ import ts from 'typescript'; import {Reference} from '../../imports'; import {ClassPropertyName} from '../../metadata'; import {ClassDeclaration} from '../../reflection'; +import {createFunctionDeclaration, createParameterDeclaration} from '../../ts_compatibility'; import {TemplateId, TypeCheckableDirectiveMeta, TypeCheckBlockMetadata} from '../api'; import {addExpressionIdentifier, ExpressionIdentifier, markIgnoreDiagnostics} from './comments'; @@ -118,7 +119,7 @@ export function generateTypeCheckBlock( } } - const paramList = [tcbThisParam(ref.node, ctxRawType.typeName, typeArguments)]; + const paramList = [tcbThisParam(ctxRawType.typeName, typeArguments)]; const scopeStatements = scope.render(); const innerBody = ts.factory.createBlock([ @@ -130,8 +131,7 @@ export function generateTypeCheckBlock( // the `ts.Printer` to format the type-check block nicely. const body = ts.factory.createBlock( [ts.factory.createIfStatement(ts.factory.createTrue(), innerBody, undefined)]); - const fnDecl = ts.factory.createFunctionDeclaration( - /* decorators */ undefined, + const fnDecl = createFunctionDeclaration( /* modifiers */ undefined, /* asteriskToken */ undefined, /* name */ name, @@ -1652,16 +1652,13 @@ interface TcbBoundInput { * arguments. */ function tcbThisParam( - node: ClassDeclaration, name: ts.EntityName, - typeArguments: ts.TypeNode[]|undefined): ts.ParameterDeclaration { - const type = ts.factory.createTypeReferenceNode(name, typeArguments); - return ts.factory.createParameterDeclaration( - /* decorators */ undefined, + name: ts.EntityName, typeArguments: ts.TypeNode[]|undefined): ts.ParameterDeclaration { + return createParameterDeclaration( /* modifiers */ undefined, /* dotDotDotToken */ undefined, /* name */ 'this', /* questionToken */ undefined, - /* type */ type, + /* type */ ts.factory.createTypeReferenceNode(name, typeArguments), /* initializer */ undefined); } @@ -1989,8 +1986,7 @@ function tcbCreateEventHandler( body = ts.factory.createIfStatement(guards, body); } - const eventParam = ts.factory.createParameterDeclaration( - /* decorators */ undefined, + const eventParam = createParameterDeclaration( /* modifiers */ undefined, /* dotDotDotToken */ undefined, /* name */ EVENT_PARAMETER, diff --git a/packages/compiler-cli/src/ngtsc/typecheck/src/type_constructor.ts b/packages/compiler-cli/src/ngtsc/typecheck/src/type_constructor.ts index 560d6ca533f49d..6470b9c1e4958b 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/src/type_constructor.ts +++ b/packages/compiler-cli/src/ngtsc/typecheck/src/type_constructor.ts @@ -9,6 +9,7 @@ import ts from 'typescript'; import {ClassDeclaration, ReflectionHost} from '../../reflection'; +import {createFunctionDeclaration, createParameterDeclaration} from '../../ts_compatibility'; import {TypeCtorMetadata} from '../api'; import {checkIfGenericTypeBoundsCanBeEmitted, ReferenceEmitEnvironment} from './tcb_util'; @@ -41,8 +42,7 @@ export function generateTypeCtorDeclarationFn( /* modifiers */ undefined, /* declarationList */ declList); } else { - return ts.factory.createFunctionDeclaration( - /* decorators */ undefined, + return createFunctionDeclaration( /* modifiers */[ts.factory.createModifier(ts.SyntaxKind.DeclareKeyword)], /* asteriskToken */ undefined, /* name */ meta.fnName, @@ -172,8 +172,7 @@ function constructTypeCtorParameter( } // Create the 'init' parameter itself. - return ts.factory.createParameterDeclaration( - /* decorators */ undefined, + return createParameterDeclaration( /* modifiers */ undefined, /* dotDotDotToken */ undefined, /* name */ 'init', diff --git a/packages/compiler-cli/src/typescript_support.ts b/packages/compiler-cli/src/typescript_support.ts index b5c5d595ea1338..4542bd70bbba48 100644 --- a/packages/compiler-cli/src/typescript_support.ts +++ b/packages/compiler-cli/src/typescript_support.ts @@ -26,7 +26,7 @@ const MIN_TS_VERSION = '4.8.2'; * Note: this check is disabled in g3, search for * `angularCompilerOptions.disableTypeScriptVersionCheck` config param value in g3. */ -const MAX_TS_VERSION = '4.9.0'; +const MAX_TS_VERSION = '5.0.0'; /** * The currently used version of TypeScript, which can be adjusted for testing purposes using diff --git a/packages/compiler-cli/test/test_support.ts b/packages/compiler-cli/test/test_support.ts index b724ff8978365d..7e5423d5fee6ff 100644 --- a/packages/compiler-cli/test/test_support.ts +++ b/packages/compiler-cli/test/test_support.ts @@ -48,7 +48,7 @@ function createTestSupportFor(basePath: string) { 'skipLibCheck': true, 'strict': true, 'strictPropertyInitialization': false, - 'types': Object.freeze([]) as string[], + 'types': Object.freeze([] as string[]) as string[], 'outDir': path.resolve(basePath, 'built'), 'rootDir': basePath, 'baseUrl': basePath, diff --git a/packages/core/schematics/utils/import_manager.ts b/packages/core/schematics/utils/import_manager.ts index 6c26657248c54c..e5c0d1a2bc4ae6 100644 --- a/packages/core/schematics/utils/import_manager.ts +++ b/packages/core/schematics/utils/import_manager.ts @@ -9,6 +9,9 @@ import {dirname, resolve} from 'path'; import ts from 'typescript'; +/** Whether the current TypeScript version is after 4.9. */ +const IS_AFTER_TS_49 = isAfterVersion(4, 9); + /** Update recorder for managing imports. */ export interface ImportManagerUpdateRecorder { addNewImport(start: number, importText: string): void; @@ -147,8 +150,8 @@ export class ImportManager { const needsGeneratedUniqueName = generatedUniqueIdentifier.text !== symbolName; identifier = needsGeneratedUniqueName ? generatedUniqueIdentifier : propertyIdentifier; - newImport = ts.factory.createImportDeclaration( - undefined, undefined, + newImport = createImportDeclaration( + undefined, ts.factory.createImportClause( false, undefined, ts.factory.createNamedImports([ts.factory.createImportSpecifier( @@ -156,8 +159,8 @@ export class ImportManager { ts.factory.createStringLiteral(moduleName)); } else { identifier = this._getUniqueIdentifier(sourceFile, 'defaultExport'); - newImport = ts.factory.createImportDeclaration( - undefined, undefined, ts.factory.createImportClause(false, identifier, undefined), + newImport = createImportDeclaration( + undefined, ts.factory.createImportClause(false, identifier, undefined), ts.factory.createStringLiteral(moduleName)); } @@ -258,3 +261,29 @@ export class ImportManager { return commentRanges[commentRanges.length - 1]!.end; } } + +/** + * Creates a `ts.ImportDeclaration` declaration. + * + * TODO(crisbeto): this is a backwards-compatibility layer for versions of TypeScript less than 4.9. + * We should remove it once we have dropped support for the older versions. + */ +function createImportDeclaration( + modifiers: readonly ts.Modifier[]|undefined, importClause: ts.ImportClause|undefined, + moduleSpecifier: ts.Expression, assertClause?: ts.AssertClause): ts.ImportDeclaration { + return IS_AFTER_TS_49 ? (ts.factory.createImportDeclaration as any)( + modifiers, importClause, moduleSpecifier, assertClause) : + (ts.factory.createImportDeclaration as any)( + undefined, modifiers, importClause, moduleSpecifier, assertClause); +} + +/** Checks if the current version of TypeScript is after the specified major/minor versions. */ +function isAfterVersion(targetMajor: number, targetMinor: number): boolean { + const [major, minor] = ts.versionMajorMinor.split('.').map(part => parseInt(part)); + + if (major < targetMajor) { + return false; + } + + return major === targetMajor ? minor >= targetMinor : true; +} diff --git a/packages/platform-server/init/test/shims_spec.ts b/packages/platform-server/init/test/shims_spec.ts index 3bc8b90d22e02a..345afa130338e7 100644 --- a/packages/platform-server/init/test/shims_spec.ts +++ b/packages/platform-server/init/test/shims_spec.ts @@ -15,10 +15,10 @@ describe('applyShims()', () => { afterEach(() => { // Un-patch `global`. - const currentProps = Object.keys(global) as (keyof NodeJS.Global)[]; + const currentProps = Object.keys(global); for (const prop of currentProps) { if (globalClone.hasOwnProperty(prop)) { - (global as any)[prop] = globalClone[prop]; + (global as any)[prop] = (globalClone as any)[prop]; } else { delete (global as any)[prop]; } diff --git a/packages/private/testing/src/utils.ts b/packages/private/testing/src/utils.ts index 8e2c143d695ff2..700ca2f1550798 100644 --- a/packages/private/testing/src/utils.ts +++ b/packages/private/testing/src/utils.ts @@ -150,7 +150,7 @@ export function ensureDocument(): void { (global as any).Node = domino.impl.Node; savedRequestAnimationFrame = (global as any).requestAnimationFrame; - (global as any).requestAnimationFrame = function(cb: FrameRequestCallback): number { + (global as any).requestAnimationFrame = function(cb: () => void): number { setImmediate(cb); return requestAnimationFrameCount++; }; diff --git a/packages/zone.js/package.json b/packages/zone.js/package.json index 1e13ba3bdbb955..fde0928395c076 100644 --- a/packages/zone.js/package.json +++ b/packages/zone.js/package.json @@ -21,7 +21,7 @@ "mocha": "^10.0.0", "mock-require": "3.0.3", "promises-aplus-tests": "^2.1.2", - "typescript": "~4.8.2" + "typescript": "~4.9.2-rc" }, "scripts": { "closuretest": "./scripts/closure/closure_compiler.sh", diff --git a/packages/zone.js/test/typings/package.json b/packages/zone.js/test/typings/package.json index bbafc788af47fc..0af0104068bfaa 100644 --- a/packages/zone.js/test/typings/package.json +++ b/packages/zone.js/test/typings/package.json @@ -14,6 +14,6 @@ "zone.js": "file:../../../../dist/bin/packages/zone.js/npm_package" }, "devDependencies": { - "typescript": "~4.8.2" + "typescript": "~4.9.2-rc" } } diff --git a/packages/zone.js/yarn.lock b/packages/zone.js/yarn.lock index c1440a0e91408f..6eef30c5fdb98e 100644 --- a/packages/zone.js/yarn.lock +++ b/packages/zone.js/yarn.lock @@ -3379,10 +3379,10 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -typescript@~4.8.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.2.tgz#e3b33d5ccfb5914e4eeab6699cf208adee3fd790" - integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== +typescript@~4.9.2-rc: + version "4.9.2-rc" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.2-rc.tgz#3525dbeb8458a8c98ce7d60724e4a9380d7b46e7" + integrity sha512-Ly9UUxJBfiiFjfegI1gsW9FI8Xhw1cuwRMBJ4wdYg+UXZR4VnZvD1OnBDj/iQ2U+tWbWEjYqJ5xx1Cwr4Vsa4w== unbox-primitive@^1.0.2: version "1.0.2" diff --git a/yarn.lock b/yarn.lock index 571111b56771d9..c9abd39923495b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -152,7 +152,6 @@ "@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#51f13a0f64d44abb406f1a79c0a9587d5c9a2182": version "0.0.0-d87b1b56a970132f90301624cea6b6d70b6d9489" - uid "51f13a0f64d44abb406f1a79c0a9587d5c9a2182" resolved "https://github.com/angular/dev-infra-private-build-tooling-builds.git#51f13a0f64d44abb406f1a79c0a9587d5c9a2182" dependencies: "@angular-devkit/build-angular" "15.0.0-rc.0" @@ -259,7 +258,6 @@ "@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#60bcee1fbdce4933102f6b434c82079dd0be9af9": version "0.0.0-d87b1b56a970132f90301624cea6b6d70b6d9489" - uid "60bcee1fbdce4933102f6b434c82079dd0be9af9" resolved "https://github.com/angular/dev-infra-private-ng-dev-builds.git#60bcee1fbdce4933102f6b434c82079dd0be9af9" dependencies: "@yarnpkg/lockfile" "^1.1.0" @@ -2762,10 +2760,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.54.tgz#59ed60e7b0d56905a654292e8d73275034eb6283" integrity sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g== -"@types/node@^14.15.0": - version "14.18.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.21.tgz#0155ee46f6be28b2ff0342ca1a9b9fd4468bef41" - integrity sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q== +"@types/node@^16.11.7": + version "16.18.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.3.tgz#d7f7ba828ad9e540270f01ce00d391c54e6e0abc" + integrity sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -14686,11 +14684,16 @@ typescript@~4.6.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9" integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== -typescript@~4.8.0, typescript@~4.8.2: +typescript@~4.8.0: version "4.8.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.2.tgz#e3b33d5ccfb5914e4eeab6699cf208adee3fd790" integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== +typescript@~4.9.2-rc: + version "4.9.2-rc" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.2-rc.tgz#3525dbeb8458a8c98ce7d60724e4a9380d7b46e7" + integrity sha512-Ly9UUxJBfiiFjfegI1gsW9FI8Xhw1cuwRMBJ4wdYg+UXZR4VnZvD1OnBDj/iQ2U+tWbWEjYqJ5xx1Cwr4Vsa4w== + ua-parser-js@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.2.tgz#e2976c34dbfb30b15d2c300b2a53eac87c57a775"