@angular/build 21.0.0-next.0 → 21.0.0-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +1 -0
- package/index.js.map +1 -0
- package/package.json +18 -18
- package/private/index.js +1 -0
- package/private/index.js.map +1 -0
- package/src/builders/application/build-action.js +1 -0
- package/src/builders/application/build-action.js.map +1 -0
- package/src/builders/application/chunk-optimizer.js +3 -1
- package/src/builders/application/chunk-optimizer.js.map +1 -0
- package/src/builders/application/execute-build.js +1 -0
- package/src/builders/application/execute-build.js.map +1 -0
- package/src/builders/application/execute-post-bundle.js +1 -0
- package/src/builders/application/execute-post-bundle.js.map +1 -0
- package/src/builders/application/i18n.js +1 -0
- package/src/builders/application/i18n.js.map +1 -0
- package/src/builders/application/index.js +42 -1
- package/src/builders/application/index.js.map +1 -0
- package/src/builders/application/options.d.ts +4 -1
- package/src/builders/application/options.js +1 -0
- package/src/builders/application/options.js.map +1 -0
- package/src/builders/application/results.js +1 -0
- package/src/builders/application/results.js.map +1 -0
- package/src/builders/application/schema.d.ts +14 -1
- package/src/builders/application/schema.js +7 -0
- package/src/builders/application/schema.js.map +1 -0
- package/src/builders/application/schema.json +2 -2
- package/src/builders/application/setup-bundling.js +1 -0
- package/src/builders/application/setup-bundling.js.map +1 -0
- package/src/builders/dev-server/builder.js +1 -0
- package/src/builders/dev-server/builder.js.map +1 -0
- package/src/builders/dev-server/index.js +1 -0
- package/src/builders/dev-server/index.js.map +1 -0
- package/src/builders/dev-server/internal.js +1 -0
- package/src/builders/dev-server/internal.js.map +1 -0
- package/src/builders/dev-server/options.d.ts +3 -0
- package/src/builders/dev-server/options.js +3 -1
- package/src/builders/dev-server/options.js.map +1 -0
- package/src/builders/dev-server/output.js +1 -0
- package/src/builders/dev-server/output.js.map +1 -0
- package/src/builders/dev-server/schema.d.ts +9 -0
- package/src/builders/dev-server/schema.js +1 -0
- package/src/builders/dev-server/schema.js.map +1 -0
- package/src/builders/dev-server/schema.json +7 -0
- package/src/builders/dev-server/vite/hmr.js +1 -0
- package/src/builders/dev-server/vite/hmr.js.map +1 -0
- package/src/builders/dev-server/vite/index.js +14 -5
- package/src/builders/dev-server/vite/index.js.map +1 -0
- package/src/builders/dev-server/vite/server.js +2 -4
- package/src/builders/dev-server/vite/server.js.map +1 -0
- package/src/builders/dev-server/vite/utils.js +1 -0
- package/src/builders/dev-server/vite/utils.js.map +1 -0
- package/src/builders/extract-i18n/application-extraction.js +1 -0
- package/src/builders/extract-i18n/application-extraction.js.map +1 -0
- package/src/builders/extract-i18n/builder.js +2 -3
- package/src/builders/extract-i18n/builder.js.map +1 -0
- package/src/builders/extract-i18n/index.js +1 -0
- package/src/builders/extract-i18n/index.js.map +1 -0
- package/src/builders/extract-i18n/options.js +1 -0
- package/src/builders/extract-i18n/options.js.map +1 -0
- package/src/builders/extract-i18n/schema.js +1 -0
- package/src/builders/extract-i18n/schema.js.map +1 -0
- package/src/builders/karma/application_builder.d.ts +0 -2
- package/src/builders/karma/application_builder.js +52 -350
- package/src/builders/karma/application_builder.js.map +1 -0
- package/src/builders/karma/assets-middleware.d.ts +26 -0
- package/src/builders/karma/assets-middleware.js +66 -0
- package/src/builders/karma/assets-middleware.js.map +1 -0
- package/src/builders/karma/coverage.d.ts +9 -0
- package/src/builders/karma/coverage.js +32 -0
- package/src/builders/karma/coverage.js.map +1 -0
- package/src/builders/karma/find-tests.d.ts +1 -8
- package/src/builders/karma/find-tests.js +7 -102
- package/src/builders/karma/find-tests.js.map +1 -0
- package/src/builders/karma/index.js +1 -0
- package/src/builders/karma/index.js.map +1 -0
- package/src/builders/karma/karma-config.d.ts +11 -0
- package/src/builders/karma/karma-config.js +80 -0
- package/src/builders/karma/karma-config.js.map +1 -0
- package/src/builders/karma/options.js +1 -0
- package/src/builders/karma/options.js.map +1 -0
- package/src/builders/karma/polyfills-plugin.d.ts +13 -0
- package/src/builders/karma/polyfills-plugin.js +75 -0
- package/src/builders/karma/polyfills-plugin.js.map +1 -0
- package/src/builders/karma/progress-reporter.d.ts +17 -0
- package/src/builders/karma/progress-reporter.js +76 -0
- package/src/builders/karma/progress-reporter.js.map +1 -0
- package/src/builders/karma/schema.js +1 -0
- package/src/builders/karma/schema.js.map +1 -0
- package/src/builders/karma/utils.d.ts +17 -0
- package/src/builders/karma/utils.js +67 -0
- package/src/builders/karma/utils.js.map +1 -0
- package/src/builders/ng-packagr/builder.js +1 -0
- package/src/builders/ng-packagr/builder.js.map +1 -0
- package/src/builders/ng-packagr/index.js +1 -0
- package/src/builders/ng-packagr/index.js.map +1 -0
- package/src/builders/ng-packagr/schema.js +1 -0
- package/src/builders/ng-packagr/schema.js.map +1 -0
- package/src/builders/unit-test/builder.js +158 -44
- package/src/builders/unit-test/builder.js.map +1 -0
- package/src/builders/unit-test/index.js +1 -0
- package/src/builders/unit-test/index.js.map +1 -0
- package/src/builders/unit-test/options.d.ts +25 -6
- package/src/builders/unit-test/options.js +61 -13
- package/src/builders/unit-test/options.js.map +1 -0
- package/src/builders/unit-test/runners/api.d.ts +19 -1
- package/src/builders/unit-test/runners/api.js +1 -0
- package/src/builders/unit-test/runners/api.js.map +1 -0
- package/src/builders/unit-test/runners/dependency-checker.d.ts +43 -0
- package/src/builders/unit-test/runners/dependency-checker.js +83 -0
- package/src/builders/unit-test/runners/dependency-checker.js.map +1 -0
- package/src/builders/unit-test/runners/karma/executor.js +72 -5
- package/src/builders/unit-test/runners/karma/executor.js.map +1 -0
- package/src/builders/unit-test/runners/karma/index.js +18 -0
- package/src/builders/unit-test/runners/karma/index.js.map +1 -0
- package/src/builders/unit-test/runners/vitest/browser-provider.d.ts +8 -3
- package/src/builders/unit-test/runners/vitest/browser-provider.js +71 -17
- package/src/builders/unit-test/runners/vitest/browser-provider.js.map +1 -0
- package/src/builders/unit-test/runners/vitest/build-options.js +48 -9
- package/src/builders/unit-test/runners/vitest/build-options.js.map +1 -0
- package/src/builders/unit-test/runners/vitest/configuration.d.ts +15 -0
- package/src/builders/unit-test/runners/vitest/configuration.js +57 -0
- package/src/builders/unit-test/runners/vitest/configuration.js.map +1 -0
- package/src/builders/unit-test/runners/vitest/executor.d.ts +7 -4
- package/src/builders/unit-test/runners/vitest/executor.js +183 -89
- package/src/builders/unit-test/runners/vitest/executor.js.map +1 -0
- package/src/builders/unit-test/runners/vitest/index.js +25 -2
- package/src/builders/unit-test/runners/vitest/index.js.map +1 -0
- package/src/builders/unit-test/runners/vitest/plugins.d.ts +23 -0
- package/src/builders/unit-test/runners/vitest/plugins.js +141 -0
- package/src/builders/unit-test/runners/vitest/plugins.js.map +1 -0
- package/src/builders/unit-test/schema.d.ts +163 -39
- package/src/builders/unit-test/schema.js +14 -13
- package/src/builders/unit-test/schema.js.map +1 -0
- package/src/builders/unit-test/schema.json +186 -40
- package/src/builders/unit-test/test-discovery.d.ts +29 -1
- package/src/builders/unit-test/test-discovery.js +215 -5
- package/src/builders/unit-test/test-discovery.js.map +1 -0
- package/src/index.js +1 -0
- package/src/index.js.map +1 -0
- package/src/private.js +1 -0
- package/src/private.js.map +1 -0
- package/src/tools/angular/angular-host.js +1 -0
- package/src/tools/angular/angular-host.js.map +1 -0
- package/src/tools/angular/compilation/angular-compilation.js +2 -5
- package/src/tools/angular/compilation/angular-compilation.js.map +1 -0
- package/src/tools/angular/compilation/aot-compilation.js +1 -0
- package/src/tools/angular/compilation/aot-compilation.js.map +1 -0
- package/src/tools/angular/compilation/factory.js +1 -0
- package/src/tools/angular/compilation/factory.js.map +1 -0
- package/src/tools/angular/compilation/hmr-candidates.js +1 -0
- package/src/tools/angular/compilation/hmr-candidates.js.map +1 -0
- package/src/tools/angular/compilation/index.js +1 -0
- package/src/tools/angular/compilation/index.js.map +1 -0
- package/src/tools/angular/compilation/jit-compilation.js +35 -2
- package/src/tools/angular/compilation/jit-compilation.js.map +1 -0
- package/src/tools/angular/compilation/noop-compilation.js +1 -0
- package/src/tools/angular/compilation/noop-compilation.js.map +1 -0
- package/src/tools/angular/compilation/parallel-compilation.js +1 -0
- package/src/tools/angular/compilation/parallel-compilation.js.map +1 -0
- package/src/tools/angular/compilation/parallel-worker.js +1 -0
- package/src/tools/angular/compilation/parallel-worker.js.map +1 -0
- package/src/tools/angular/transformers/jit-bootstrap-transformer.js +2 -1
- package/src/tools/angular/transformers/jit-bootstrap-transformer.js.map +1 -0
- package/src/tools/angular/transformers/jit-resource-transformer.js +2 -1
- package/src/tools/angular/transformers/jit-resource-transformer.js.map +1 -0
- package/src/tools/angular/transformers/lazy-routes-transformer.js +1 -0
- package/src/tools/angular/transformers/lazy-routes-transformer.js.map +1 -0
- package/src/tools/angular/transformers/web-worker-transformer.js +1 -0
- package/src/tools/angular/transformers/web-worker-transformer.js.map +1 -0
- package/src/tools/angular/uri.js +1 -0
- package/src/tools/angular/uri.js.map +1 -0
- package/src/tools/babel/plugins/add-code-coverage.js +1 -0
- package/src/tools/babel/plugins/add-code-coverage.js.map +1 -0
- package/src/tools/babel/plugins/adjust-static-class-members.js +1 -0
- package/src/tools/babel/plugins/adjust-static-class-members.js.map +1 -0
- package/src/tools/babel/plugins/adjust-typescript-enums.js +1 -0
- package/src/tools/babel/plugins/adjust-typescript-enums.js.map +1 -0
- package/src/tools/babel/plugins/elide-angular-metadata.js +1 -0
- package/src/tools/babel/plugins/elide-angular-metadata.js.map +1 -0
- package/src/tools/babel/plugins/index.js +1 -0
- package/src/tools/babel/plugins/index.js.map +1 -0
- package/src/tools/babel/plugins/pure-toplevel-functions.d.ts +0 -1
- package/src/tools/babel/plugins/pure-toplevel-functions.js +22 -5
- package/src/tools/babel/plugins/pure-toplevel-functions.js.map +1 -0
- package/src/tools/esbuild/angular/compilation-state.js +1 -0
- package/src/tools/esbuild/angular/compilation-state.js.map +1 -0
- package/src/tools/esbuild/angular/compiler-plugin.js +44 -16
- package/src/tools/esbuild/angular/compiler-plugin.js.map +1 -0
- package/src/tools/esbuild/angular/component-stylesheets.js +1 -0
- package/src/tools/esbuild/angular/component-stylesheets.js.map +1 -0
- package/src/tools/esbuild/angular/diagnostics.js +1 -0
- package/src/tools/esbuild/angular/diagnostics.js.map +1 -0
- package/src/tools/esbuild/angular/file-reference-tracker.js +1 -0
- package/src/tools/esbuild/angular/file-reference-tracker.js.map +1 -0
- package/src/tools/esbuild/angular/jit-plugin-callbacks.js +1 -0
- package/src/tools/esbuild/angular/jit-plugin-callbacks.js.map +1 -0
- package/src/tools/esbuild/angular/rewrite-bazel-paths.d.ts +8 -0
- package/src/tools/esbuild/angular/rewrite-bazel-paths.js +28 -0
- package/src/tools/esbuild/angular/rewrite-bazel-paths.js.map +1 -0
- package/src/tools/esbuild/angular/source-file-cache.js +1 -0
- package/src/tools/esbuild/angular/source-file-cache.js.map +1 -0
- package/src/tools/esbuild/angular-localize-init-warning-plugin.js +1 -0
- package/src/tools/esbuild/angular-localize-init-warning-plugin.js.map +1 -0
- package/src/tools/esbuild/application-code-bundle.js +2 -1
- package/src/tools/esbuild/application-code-bundle.js.map +1 -0
- package/src/tools/esbuild/budget-stats.js +1 -0
- package/src/tools/esbuild/budget-stats.js.map +1 -0
- package/src/tools/esbuild/bundler-context.js +1 -0
- package/src/tools/esbuild/bundler-context.js.map +1 -0
- package/src/tools/esbuild/bundler-execution-result.js +1 -0
- package/src/tools/esbuild/bundler-execution-result.js.map +1 -0
- package/src/tools/esbuild/cache.js +1 -0
- package/src/tools/esbuild/cache.js.map +1 -0
- package/src/tools/esbuild/commonjs-checker.js +1 -0
- package/src/tools/esbuild/commonjs-checker.js.map +1 -0
- package/src/tools/esbuild/compiler-plugin-options.js +1 -0
- package/src/tools/esbuild/compiler-plugin-options.js.map +1 -0
- package/src/tools/esbuild/external-packages-plugin.js +1 -0
- package/src/tools/esbuild/external-packages-plugin.js.map +1 -0
- package/src/tools/esbuild/global-scripts.js +1 -0
- package/src/tools/esbuild/global-scripts.js.map +1 -0
- package/src/tools/esbuild/global-styles.js +1 -0
- package/src/tools/esbuild/global-styles.js.map +1 -0
- package/src/tools/esbuild/i18n-inliner-worker.js +35 -2
- package/src/tools/esbuild/i18n-inliner-worker.js.map +1 -0
- package/src/tools/esbuild/i18n-inliner.js +1 -0
- package/src/tools/esbuild/i18n-inliner.js.map +1 -0
- package/src/tools/esbuild/i18n-locale-plugin.js +34 -15
- package/src/tools/esbuild/i18n-locale-plugin.js.map +1 -0
- package/src/tools/esbuild/index-html-generator.js +1 -0
- package/src/tools/esbuild/index-html-generator.js.map +1 -0
- package/src/tools/esbuild/javascript-transformer-worker.js +5 -10
- package/src/tools/esbuild/javascript-transformer-worker.js.map +1 -0
- package/src/tools/esbuild/javascript-transformer.js +1 -0
- package/src/tools/esbuild/javascript-transformer.js.map +1 -0
- package/src/tools/esbuild/license-extractor.js +1 -0
- package/src/tools/esbuild/license-extractor.js.map +1 -0
- package/src/tools/esbuild/lmdb-cache-store.js +1 -0
- package/src/tools/esbuild/lmdb-cache-store.js.map +1 -0
- package/src/tools/esbuild/load-result-cache.js +1 -0
- package/src/tools/esbuild/load-result-cache.js.map +1 -0
- package/src/tools/esbuild/loader-import-attribute-plugin.js +1 -0
- package/src/tools/esbuild/loader-import-attribute-plugin.js.map +1 -0
- package/src/tools/esbuild/profiling.js +1 -0
- package/src/tools/esbuild/profiling.js.map +1 -0
- package/src/tools/esbuild/rxjs-esm-resolution-plugin.js +1 -0
- package/src/tools/esbuild/rxjs-esm-resolution-plugin.js.map +1 -0
- package/src/tools/esbuild/server-bundle-metadata-plugin.js +1 -0
- package/src/tools/esbuild/server-bundle-metadata-plugin.js.map +1 -0
- package/src/tools/esbuild/sourcemap-ignorelist-plugin.js +1 -0
- package/src/tools/esbuild/sourcemap-ignorelist-plugin.js.map +1 -0
- package/src/tools/esbuild/stylesheets/bundle-options.d.ts +4 -1
- package/src/tools/esbuild/stylesheets/bundle-options.js +1 -0
- package/src/tools/esbuild/stylesheets/bundle-options.js.map +1 -0
- package/src/tools/esbuild/stylesheets/css-inline-fonts-plugin.js +1 -0
- package/src/tools/esbuild/stylesheets/css-inline-fonts-plugin.js.map +1 -0
- package/src/tools/esbuild/stylesheets/css-language.js +1 -0
- package/src/tools/esbuild/stylesheets/css-language.js.map +1 -0
- package/src/tools/esbuild/stylesheets/css-resource-plugin.js +1 -0
- package/src/tools/esbuild/stylesheets/css-resource-plugin.js.map +1 -0
- package/src/tools/esbuild/stylesheets/less-language.js +3 -26
- package/src/tools/esbuild/stylesheets/less-language.js.map +1 -0
- package/src/tools/esbuild/stylesheets/sass-language.js +1 -0
- package/src/tools/esbuild/stylesheets/sass-language.js.map +1 -0
- package/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.d.ts +4 -1
- package/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.js +8 -3
- package/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.js.map +1 -0
- package/src/tools/esbuild/utils.js +1 -0
- package/src/tools/esbuild/utils.js.map +1 -0
- package/src/tools/esbuild/virtual-module-plugin.js +1 -0
- package/src/tools/esbuild/virtual-module-plugin.js.map +1 -0
- package/src/tools/esbuild/wasm-plugin.js +1 -0
- package/src/tools/esbuild/wasm-plugin.js.map +1 -0
- package/src/tools/esbuild/watcher.js +1 -0
- package/src/tools/esbuild/watcher.js.map +1 -0
- package/src/tools/sass/lexer.js +1 -0
- package/src/tools/sass/lexer.js.map +1 -0
- package/src/tools/sass/rebasing-importer.js +1 -0
- package/src/tools/sass/rebasing-importer.js.map +1 -0
- package/src/tools/sass/sass-service.js +1 -0
- package/src/tools/sass/sass-service.js.map +1 -0
- package/src/tools/sass/worker.js +1 -0
- package/src/tools/sass/worker.js.map +1 -0
- package/src/tools/vite/middlewares/assets-middleware.d.ts +2 -0
- package/src/tools/vite/middlewares/assets-middleware.js +32 -0
- package/src/tools/vite/middlewares/assets-middleware.js.map +1 -0
- package/src/tools/vite/middlewares/chrome-devtools-middleware.js +1 -0
- package/src/tools/vite/middlewares/chrome-devtools-middleware.js.map +1 -0
- package/src/tools/vite/middlewares/component-middleware.js +1 -0
- package/src/tools/vite/middlewares/component-middleware.js.map +1 -0
- package/src/tools/vite/middlewares/headers-middleware.js +1 -0
- package/src/tools/vite/middlewares/headers-middleware.js.map +1 -0
- package/src/tools/vite/middlewares/html-fallback-middleware.js +1 -0
- package/src/tools/vite/middlewares/html-fallback-middleware.js.map +1 -0
- package/src/tools/vite/middlewares/index-html-middleware.js +1 -0
- package/src/tools/vite/middlewares/index-html-middleware.js.map +1 -0
- package/src/tools/vite/middlewares/index.js +1 -0
- package/src/tools/vite/middlewares/index.js.map +1 -0
- package/src/tools/vite/middlewares/ssr-middleware.js +42 -5
- package/src/tools/vite/middlewares/ssr-middleware.js.map +1 -0
- package/src/tools/vite/plugins/angular-memory-plugin.js +35 -2
- package/src/tools/vite/plugins/angular-memory-plugin.js.map +1 -0
- package/src/tools/vite/plugins/id-prefix-plugin.js +1 -0
- package/src/tools/vite/plugins/id-prefix-plugin.js.map +1 -0
- package/src/tools/vite/plugins/index.d.ts +0 -1
- package/src/tools/vite/plugins/index.js +2 -3
- package/src/tools/vite/plugins/index.js.map +1 -0
- package/src/tools/vite/plugins/setup-middlewares-plugin.js +35 -2
- package/src/tools/vite/plugins/setup-middlewares-plugin.js.map +1 -0
- package/src/tools/vite/plugins/ssr-transform-plugin.js +35 -2
- package/src/tools/vite/plugins/ssr-transform-plugin.js.map +1 -0
- package/src/tools/vite/utils.js +1 -0
- package/src/tools/vite/utils.js.map +1 -0
- package/src/utils/bundle-calculator.js +1 -0
- package/src/utils/bundle-calculator.js.map +1 -0
- package/src/utils/check-port.js +1 -0
- package/src/utils/check-port.js.map +1 -0
- package/src/utils/color.js +1 -0
- package/src/utils/color.js.map +1 -0
- package/src/utils/delete-output-dir.js +1 -0
- package/src/utils/delete-output-dir.js.map +1 -0
- package/src/utils/environment-options.d.ts +1 -0
- package/src/utils/environment-options.js +7 -1
- package/src/utils/environment-options.js.map +1 -0
- package/src/utils/error.js +1 -0
- package/src/utils/error.js.map +1 -0
- package/src/utils/format-bytes.js +1 -0
- package/src/utils/format-bytes.js.map +1 -0
- package/src/utils/i18n-options.js +1 -0
- package/src/utils/i18n-options.js.map +1 -0
- package/src/utils/index-file/add-event-dispatch-contract.js +1 -0
- package/src/utils/index-file/add-event-dispatch-contract.js.map +1 -0
- package/src/utils/index-file/augment-index-html.js +35 -2
- package/src/utils/index-file/augment-index-html.js.map +1 -0
- package/src/utils/index-file/auto-csp.js +1 -0
- package/src/utils/index-file/auto-csp.js.map +1 -0
- package/src/utils/index-file/html-rewriting-stream.js +35 -2
- package/src/utils/index-file/html-rewriting-stream.js.map +1 -0
- package/src/utils/index-file/index-html-generator.js +1 -0
- package/src/utils/index-file/index-html-generator.js.map +1 -0
- package/src/utils/index-file/inline-critical-css.js +1 -0
- package/src/utils/index-file/inline-critical-css.js.map +1 -0
- package/src/utils/index-file/inline-fonts.js +1 -0
- package/src/utils/index-file/inline-fonts.js.map +1 -0
- package/src/utils/index-file/ngcm-attribute.js +1 -0
- package/src/utils/index-file/ngcm-attribute.js.map +1 -0
- package/src/utils/index-file/nonce.js +1 -0
- package/src/utils/index-file/nonce.js.map +1 -0
- package/src/utils/index-file/valid-self-closing-tags.js +1 -0
- package/src/utils/index-file/valid-self-closing-tags.js.map +1 -0
- package/src/utils/index.js +1 -0
- package/src/utils/index.js.map +1 -0
- package/src/utils/load-esm.js +1 -0
- package/src/utils/load-esm.js.map +1 -0
- package/src/utils/load-proxy-config.js +8 -21
- package/src/utils/load-proxy-config.js.map +1 -0
- package/src/utils/load-translations.js +2 -2
- package/src/utils/load-translations.js.map +1 -0
- package/src/utils/normalize-asset-patterns.js +1 -0
- package/src/utils/normalize-asset-patterns.js.map +1 -0
- package/src/utils/normalize-cache.js +2 -1
- package/src/utils/normalize-cache.js.map +1 -0
- package/src/utils/normalize-optimization.js +1 -0
- package/src/utils/normalize-optimization.js.map +1 -0
- package/src/utils/normalize-source-maps.js +1 -0
- package/src/utils/normalize-source-maps.js.map +1 -0
- package/src/utils/path.js +1 -0
- package/src/utils/path.js.map +1 -0
- package/src/utils/postcss-configuration.d.ts +4 -1
- package/src/utils/postcss-configuration.js +3 -2
- package/src/utils/postcss-configuration.js.map +1 -0
- package/src/utils/project-metadata.js +1 -0
- package/src/utils/project-metadata.js.map +1 -0
- package/src/utils/purge-cache.js +1 -0
- package/src/utils/purge-cache.js.map +1 -0
- package/src/utils/resolve-assets.js +1 -0
- package/src/utils/resolve-assets.js.map +1 -0
- package/src/utils/server-rendering/esm-in-memory-loader/loader-hooks.js +3 -13
- package/src/utils/server-rendering/esm-in-memory-loader/loader-hooks.js.map +1 -0
- package/src/utils/server-rendering/esm-in-memory-loader/register-hooks.js +1 -0
- package/src/utils/server-rendering/esm-in-memory-loader/register-hooks.js.map +1 -0
- package/src/utils/server-rendering/esm-in-memory-loader/utils.js +1 -0
- package/src/utils/server-rendering/esm-in-memory-loader/utils.js.map +1 -0
- package/src/utils/server-rendering/fetch-patch.js +1 -0
- package/src/utils/server-rendering/fetch-patch.js.map +1 -0
- package/src/utils/server-rendering/launch-server.js +37 -2
- package/src/utils/server-rendering/launch-server.js.map +1 -0
- package/src/utils/server-rendering/load-esm-from-memory.d.ts +2 -1
- package/src/utils/server-rendering/load-esm-from-memory.js +1 -0
- package/src/utils/server-rendering/load-esm-from-memory.js.map +1 -0
- package/src/utils/server-rendering/manifest.js +1 -0
- package/src/utils/server-rendering/manifest.js.map +1 -0
- package/src/utils/server-rendering/models.js +1 -0
- package/src/utils/server-rendering/models.js.map +1 -0
- package/src/utils/server-rendering/prerender.js +3 -25
- package/src/utils/server-rendering/prerender.js.map +1 -0
- package/src/utils/server-rendering/render-worker.js +43 -1
- package/src/utils/server-rendering/render-worker.js.map +1 -0
- package/src/utils/server-rendering/routes-extractor-worker.js +37 -0
- package/src/utils/server-rendering/routes-extractor-worker.js.map +1 -0
- package/src/utils/server-rendering/utils.d.ts +11 -1
- package/src/utils/server-rendering/utils.js +26 -0
- package/src/utils/server-rendering/utils.js.map +1 -0
- package/src/utils/service-worker.d.ts +1 -1
- package/src/utils/service-worker.js +4 -6
- package/src/utils/service-worker.js.map +1 -0
- package/src/utils/stats-table.js +1 -0
- package/src/utils/stats-table.js.map +1 -0
- package/src/utils/supported-browsers.js +8 -3
- package/src/utils/supported-browsers.js.map +1 -0
- package/src/utils/test-files.d.ts +17 -0
- package/src/utils/test-files.js +83 -0
- package/src/utils/test-files.js.map +1 -0
- package/src/utils/tty.js +1 -0
- package/src/utils/tty.js.map +1 -0
- package/src/utils/url.js +1 -0
- package/src/utils/url.js.map +1 -0
- package/src/utils/version.js +1 -0
- package/src/utils/version.js.map +1 -0
- package/src/utils/worker-pool.js +1 -0
- package/src/utils/worker-pool.js.map +1 -0
- package/.browserslistrc +0 -7
- package/src/tools/vite/plugins/i18n-locale-plugin.d.ts +0 -14
- package/src/tools/vite/plugins/i18n-locale-plugin.js +0 -54
- package/src/typings.d.ts +0 -19
|
@@ -44,202 +44,34 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
44
44
|
};
|
|
45
45
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
46
|
exports.execute = execute;
|
|
47
|
-
exports.writeTestFiles = writeTestFiles;
|
|
48
47
|
const node_crypto_1 = require("node:crypto");
|
|
48
|
+
const node_fs_1 = require("node:fs");
|
|
49
49
|
const fs = __importStar(require("node:fs/promises"));
|
|
50
|
-
const node_module_1 = require("node:module");
|
|
51
50
|
const node_path_1 = __importDefault(require("node:path"));
|
|
52
|
-
const
|
|
53
|
-
const bundler_context_1 = require("../../tools/esbuild/bundler-context");
|
|
54
|
-
const utils_1 = require("../../tools/esbuild/utils");
|
|
51
|
+
const web_1 = require("node:stream/web");
|
|
55
52
|
const virtual_module_plugin_1 = require("../../tools/esbuild/virtual-module-plugin");
|
|
56
|
-
const
|
|
53
|
+
const test_files_1 = require("../../utils/test-files");
|
|
57
54
|
const index_1 = require("../application/index");
|
|
58
55
|
const results_1 = require("../application/results");
|
|
59
56
|
const schema_1 = require("../application/schema");
|
|
60
|
-
const
|
|
57
|
+
const assets_middleware_1 = require("./assets-middleware");
|
|
58
|
+
const coverage_1 = require("./coverage");
|
|
59
|
+
const karma_config_1 = require("./karma-config");
|
|
61
60
|
const options_1 = require("./options");
|
|
62
|
-
const
|
|
63
|
-
const
|
|
61
|
+
const polyfills_plugin_1 = require("./polyfills-plugin");
|
|
62
|
+
const progress_reporter_1 = require("./progress-reporter");
|
|
63
|
+
const utils_1 = require("./utils");
|
|
64
64
|
class ApplicationBuildError extends Error {
|
|
65
65
|
constructor(message) {
|
|
66
66
|
super(message);
|
|
67
67
|
this.name = 'ApplicationBuildError';
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
const LATEST_BUILD_FILES_TOKEN = 'angularLatestBuildFiles';
|
|
71
|
-
class AngularAssetsMiddleware {
|
|
72
|
-
serveFile;
|
|
73
|
-
latestBuildFiles;
|
|
74
|
-
static $inject = ['serveFile', LATEST_BUILD_FILES_TOKEN];
|
|
75
|
-
static NAME = 'angular-test-assets';
|
|
76
|
-
constructor(serveFile, latestBuildFiles) {
|
|
77
|
-
this.serveFile = serveFile;
|
|
78
|
-
this.latestBuildFiles = latestBuildFiles;
|
|
79
|
-
}
|
|
80
|
-
handle(req, res, next) {
|
|
81
|
-
const url = new URL(`http://${req.headers['host']}${req.url}`);
|
|
82
|
-
// Remove the leading slash from the URL path and convert to platform specific.
|
|
83
|
-
// The latest build files will use the platform path separator.
|
|
84
|
-
let pathname = url.pathname.slice(1);
|
|
85
|
-
if (isWindows) {
|
|
86
|
-
pathname = pathname.replaceAll(node_path_1.default.posix.sep, node_path_1.default.win32.sep);
|
|
87
|
-
}
|
|
88
|
-
const file = this.latestBuildFiles.files[pathname];
|
|
89
|
-
if (!file) {
|
|
90
|
-
next();
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
// Implementation of serverFile can be found here:
|
|
94
|
-
// https://github.com/karma-runner/karma/blob/84f85e7016efc2266fa6b3465f494a3fa151c85c/lib/middleware/common.js#L10
|
|
95
|
-
switch (file.origin) {
|
|
96
|
-
case 'disk':
|
|
97
|
-
this.serveFile(file.inputPath, undefined, res, undefined, undefined, /* doNotCache */ true);
|
|
98
|
-
break;
|
|
99
|
-
case 'memory':
|
|
100
|
-
// Include pathname to help with Content-Type headers.
|
|
101
|
-
this.serveFile(`/unused/${url.pathname}`, undefined, res, undefined, file.contents,
|
|
102
|
-
/* doNotCache */ false);
|
|
103
|
-
break;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
static createPlugin(initialFiles) {
|
|
107
|
-
return {
|
|
108
|
-
[LATEST_BUILD_FILES_TOKEN]: ['value', { files: { ...initialFiles.files } }],
|
|
109
|
-
[`middleware:${AngularAssetsMiddleware.NAME}`]: [
|
|
110
|
-
'factory',
|
|
111
|
-
Object.assign((...args) => {
|
|
112
|
-
const inst = new AngularAssetsMiddleware(...args);
|
|
113
|
-
return inst.handle.bind(inst);
|
|
114
|
-
}, AngularAssetsMiddleware),
|
|
115
|
-
],
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
class AngularPolyfillsPlugin {
|
|
120
|
-
static $inject = ['config.files'];
|
|
121
|
-
static NAME = 'angular-polyfills';
|
|
122
|
-
static createPlugin(polyfillsFile, jasmineCleanupFiles, scriptsFiles) {
|
|
123
|
-
return {
|
|
124
|
-
// This has to be a "reporter" because reporters run _after_ frameworks
|
|
125
|
-
// and karma-jasmine-html-reporter injects additional scripts that may
|
|
126
|
-
// depend on Jasmine but aren't modules - which means that they would run
|
|
127
|
-
// _before_ all module code (including jasmine).
|
|
128
|
-
[`reporter:${AngularPolyfillsPlugin.NAME}`]: [
|
|
129
|
-
'factory',
|
|
130
|
-
Object.assign((files) => {
|
|
131
|
-
// The correct order is zone.js -> jasmine -> zone.js/testing.
|
|
132
|
-
// Jasmine has to see the patched version of the global `setTimeout`
|
|
133
|
-
// function so it doesn't cache the unpatched version. And /testing
|
|
134
|
-
// needs to see the global `jasmine` object so it can patch it.
|
|
135
|
-
const polyfillsIndex = 0;
|
|
136
|
-
files.splice(polyfillsIndex, 0, polyfillsFile);
|
|
137
|
-
// Insert just before test_main.js.
|
|
138
|
-
const zoneTestingIndex = files.findIndex((f) => {
|
|
139
|
-
if (typeof f === 'string') {
|
|
140
|
-
return false;
|
|
141
|
-
}
|
|
142
|
-
return f.pattern.endsWith('/test_main.js');
|
|
143
|
-
});
|
|
144
|
-
if (zoneTestingIndex === -1) {
|
|
145
|
-
throw new Error('Could not find test entrypoint file.');
|
|
146
|
-
}
|
|
147
|
-
files.splice(zoneTestingIndex, 0, jasmineCleanupFiles);
|
|
148
|
-
// We need to ensure that all files are served as modules, otherwise
|
|
149
|
-
// the order in the files list gets really confusing: Karma doesn't
|
|
150
|
-
// set defer on scripts, so all scripts with type=js will run first,
|
|
151
|
-
// even if type=module files appeared earlier in `files`.
|
|
152
|
-
for (const f of files) {
|
|
153
|
-
if (typeof f === 'string') {
|
|
154
|
-
throw new Error(`Unexpected string-based file: "${f}"`);
|
|
155
|
-
}
|
|
156
|
-
if (f.included === false) {
|
|
157
|
-
// Don't worry about files that aren't included on the initial
|
|
158
|
-
// page load. `type` won't affect them.
|
|
159
|
-
continue;
|
|
160
|
-
}
|
|
161
|
-
if (f.pattern.endsWith('.js') && 'js' === (f.type ?? 'js')) {
|
|
162
|
-
f.type = 'module';
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
// Add "scripts" option files as classic scripts
|
|
166
|
-
files.unshift(...scriptsFiles);
|
|
167
|
-
// Add browser sourcemap support as a classic script
|
|
168
|
-
files.unshift({
|
|
169
|
-
pattern: localResolve('source-map-support/browser-source-map-support.js'),
|
|
170
|
-
included: true,
|
|
171
|
-
watched: false,
|
|
172
|
-
});
|
|
173
|
-
}, AngularPolyfillsPlugin),
|
|
174
|
-
],
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
function injectKarmaReporter(buildOptions, buildIterator, karmaConfig, controller) {
|
|
179
|
-
const reporterName = 'angular-progress-notifier';
|
|
180
|
-
class ProgressNotifierReporter {
|
|
181
|
-
emitter;
|
|
182
|
-
latestBuildFiles;
|
|
183
|
-
static $inject = ['emitter', LATEST_BUILD_FILES_TOKEN];
|
|
184
|
-
constructor(emitter, latestBuildFiles) {
|
|
185
|
-
this.emitter = emitter;
|
|
186
|
-
this.latestBuildFiles = latestBuildFiles;
|
|
187
|
-
this.startWatchingBuild();
|
|
188
|
-
}
|
|
189
|
-
startWatchingBuild() {
|
|
190
|
-
void (async () => {
|
|
191
|
-
// This is effectively "for await of but skip what's already consumed".
|
|
192
|
-
let isDone = false; // to mark the loop condition as "not constant".
|
|
193
|
-
while (!isDone) {
|
|
194
|
-
const { done, value: buildOutput } = await buildIterator.next();
|
|
195
|
-
if (done) {
|
|
196
|
-
isDone = true;
|
|
197
|
-
break;
|
|
198
|
-
}
|
|
199
|
-
if (buildOutput.kind === results_1.ResultKind.Failure) {
|
|
200
|
-
controller.enqueue({ success: false, message: 'Build failed' });
|
|
201
|
-
}
|
|
202
|
-
else if (buildOutput.kind === results_1.ResultKind.Incremental ||
|
|
203
|
-
buildOutput.kind === results_1.ResultKind.Full) {
|
|
204
|
-
if (buildOutput.kind === results_1.ResultKind.Full) {
|
|
205
|
-
this.latestBuildFiles.files = buildOutput.files;
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
this.latestBuildFiles.files = {
|
|
209
|
-
...this.latestBuildFiles.files,
|
|
210
|
-
...buildOutput.files,
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
await writeTestFiles(buildOutput.files, buildOptions.outputPath);
|
|
214
|
-
this.emitter.refreshFiles();
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
})();
|
|
218
|
-
}
|
|
219
|
-
onRunComplete = function (_browsers, results) {
|
|
220
|
-
if (results.exitCode === 0) {
|
|
221
|
-
controller.enqueue({ success: true });
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
controller.enqueue({ success: false });
|
|
225
|
-
}
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
karmaConfig.reporters ??= [];
|
|
229
|
-
karmaConfig.reporters.push(reporterName);
|
|
230
|
-
karmaConfig.plugins ??= [];
|
|
231
|
-
karmaConfig.plugins.push({
|
|
232
|
-
[`reporter:${reporterName}`]: [
|
|
233
|
-
'factory',
|
|
234
|
-
Object.assign((...args) => new ProgressNotifierReporter(...args), ProgressNotifierReporter),
|
|
235
|
-
],
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
70
|
function execute(options, context, transforms) {
|
|
239
71
|
const normalizedOptions = (0, options_1.normalizeOptions)(context, options);
|
|
240
|
-
const karmaOptions = getBaseKarmaOptions(normalizedOptions, context);
|
|
72
|
+
const karmaOptions = (0, karma_config_1.getBaseKarmaOptions)(normalizedOptions, context);
|
|
241
73
|
let karmaServer;
|
|
242
|
-
return new ReadableStream({
|
|
74
|
+
return new web_1.ReadableStream({
|
|
243
75
|
async start(controller) {
|
|
244
76
|
let init;
|
|
245
77
|
try {
|
|
@@ -257,7 +89,7 @@ function execute(options, context, transforms) {
|
|
|
257
89
|
// If `--watch` is explicitly enabled or if we are keeping the Karma
|
|
258
90
|
// process running, we should hook Karma into the build.
|
|
259
91
|
if (buildIterator) {
|
|
260
|
-
injectKarmaReporter(buildOptions, buildIterator, karmaConfig, controller);
|
|
92
|
+
(0, progress_reporter_1.injectKarmaReporter)(buildOptions, buildIterator, karmaConfig, controller);
|
|
261
93
|
}
|
|
262
94
|
// Close the stream once the Karma server returns.
|
|
263
95
|
karmaServer = new karma.Server(karmaConfig, (exitCode) => {
|
|
@@ -271,43 +103,24 @@ function execute(options, context, transforms) {
|
|
|
271
103
|
},
|
|
272
104
|
});
|
|
273
105
|
}
|
|
274
|
-
async function getProjectSourceRoot(context) {
|
|
275
|
-
// We have already validated that the project name is set before calling this function.
|
|
276
|
-
const projectName = context.target?.project;
|
|
277
|
-
if (!projectName) {
|
|
278
|
-
return context.workspaceRoot;
|
|
279
|
-
}
|
|
280
|
-
const projectMetadata = await context.getProjectMetadata(projectName);
|
|
281
|
-
const { projectSourceRoot } = (0, project_metadata_1.getProjectRootPaths)(context.workspaceRoot, projectMetadata);
|
|
282
|
-
return projectSourceRoot;
|
|
283
|
-
}
|
|
284
|
-
function normalizePolyfills(polyfills = []) {
|
|
285
|
-
const jasmineGlobalEntryPoint = localResolve('./polyfills/jasmine_global.js');
|
|
286
|
-
const jasmineGlobalCleanupEntrypoint = localResolve('./polyfills/jasmine_global_cleanup.js');
|
|
287
|
-
const sourcemapEntrypoint = localResolve('./polyfills/init_sourcemaps.js');
|
|
288
|
-
const zoneTestingEntryPoint = 'zone.js/testing';
|
|
289
|
-
const polyfillsExludingZoneTesting = polyfills.filter((p) => p !== zoneTestingEntryPoint);
|
|
290
|
-
return [
|
|
291
|
-
polyfillsExludingZoneTesting.concat([jasmineGlobalEntryPoint, sourcemapEntrypoint]),
|
|
292
|
-
polyfillsExludingZoneTesting.length === polyfills.length
|
|
293
|
-
? [jasmineGlobalCleanupEntrypoint]
|
|
294
|
-
: [jasmineGlobalCleanupEntrypoint, zoneTestingEntryPoint],
|
|
295
|
-
];
|
|
296
|
-
}
|
|
297
|
-
async function collectEntrypoints(options, context, projectSourceRoot) {
|
|
298
|
-
// Glob for files to test.
|
|
299
|
-
const testFiles = await (0, find_tests_1.findTests)(options.include, options.exclude, context.workspaceRoot, projectSourceRoot);
|
|
300
|
-
return (0, find_tests_1.getTestEntrypoints)(testFiles, { projectSourceRoot, workspaceRoot: context.workspaceRoot });
|
|
301
|
-
}
|
|
302
|
-
// eslint-disable-next-line max-lines-per-function
|
|
303
106
|
async function initializeApplication(options, context, karmaOptions, transforms) {
|
|
107
|
+
const karma = await Promise.resolve().then(() => __importStar(require('karma')));
|
|
108
|
+
const projectSourceRoot = await (0, utils_1.getProjectSourceRoot)(context);
|
|
109
|
+
// Setup temporary output path and ensure it is empty
|
|
304
110
|
const outputPath = node_path_1.default.join(context.workspaceRoot, 'dist/test-out', (0, node_crypto_1.randomUUID)());
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
111
|
+
await fs.rm(outputPath, { recursive: true, force: true });
|
|
112
|
+
// Setup exit cleanup for temporary directory
|
|
113
|
+
const handleProcessExit = () => (0, node_fs_1.rmSync)(outputPath, { recursive: true, force: true });
|
|
114
|
+
process.once('exit', handleProcessExit);
|
|
115
|
+
process.once('SIGINT', handleProcessExit);
|
|
116
|
+
process.once('uncaughtException', handleProcessExit);
|
|
117
|
+
const { buildOptions, mainName } = await setupBuildOptions(options, context, projectSourceRoot, outputPath);
|
|
118
|
+
const [buildOutput, buildIterator] = await runEsbuild(buildOptions, context, projectSourceRoot);
|
|
119
|
+
const karmaConfig = await configureKarma(karma, context, karmaOptions, options, buildOptions, buildOutput, mainName, transforms);
|
|
120
|
+
return [karma, karmaConfig, buildOptions, buildIterator];
|
|
121
|
+
}
|
|
122
|
+
async function setupBuildOptions(options, context, projectSourceRoot, outputPath) {
|
|
123
|
+
const entryPoints = await (0, utils_1.collectEntrypoints)(options, context, projectSourceRoot);
|
|
311
124
|
const mainName = 'test_main';
|
|
312
125
|
if (options.main) {
|
|
313
126
|
entryPoints.set(mainName, options.main);
|
|
@@ -316,9 +129,9 @@ async function initializeApplication(options, context, karmaOptions, transforms)
|
|
|
316
129
|
entryPoints.set(mainName, 'angular:test-bed-init');
|
|
317
130
|
}
|
|
318
131
|
const instrumentForCoverage = options.codeCoverage
|
|
319
|
-
? createInstrumentationFilter(projectSourceRoot, getInstrumentationExcludedPaths(context.workspaceRoot, options.codeCoverageExclude ?? []))
|
|
132
|
+
? (0, coverage_1.createInstrumentationFilter)(projectSourceRoot, (0, coverage_1.getInstrumentationExcludedPaths)(context.workspaceRoot, options.codeCoverageExclude ?? []))
|
|
320
133
|
: undefined;
|
|
321
|
-
const [polyfills, jasmineCleanup] = normalizePolyfills(options.polyfills);
|
|
134
|
+
const [polyfills, jasmineCleanup] = (0, utils_1.normalizePolyfills)(options.polyfills);
|
|
322
135
|
for (let idx = 0; idx < jasmineCleanup.length; ++idx) {
|
|
323
136
|
entryPoints.set(`jasmine-cleanup-${idx}`, jasmineCleanup[idx]);
|
|
324
137
|
}
|
|
@@ -346,17 +159,24 @@ async function initializeApplication(options, context, karmaOptions, transforms)
|
|
|
346
159
|
loader: options.loader,
|
|
347
160
|
externalDependencies: options.externalDependencies,
|
|
348
161
|
};
|
|
162
|
+
return { buildOptions, mainName };
|
|
163
|
+
}
|
|
164
|
+
async function runEsbuild(buildOptions, context, projectSourceRoot) {
|
|
165
|
+
const usesZoneJS = buildOptions.polyfills?.includes('zone.js');
|
|
349
166
|
const virtualTestBedInit = (0, virtual_module_plugin_1.createVirtualModulePlugin)({
|
|
350
167
|
namespace: 'angular:test-bed-init',
|
|
351
168
|
loadContent: async () => {
|
|
352
169
|
const contents = [
|
|
353
170
|
// Initialize the Angular testing environment
|
|
171
|
+
`import { NgModule${usesZoneJS ? ', provideZoneChangeDetection' : ''} } from '@angular/core';`,
|
|
354
172
|
`import { getTestBed } from '@angular/core/testing';`,
|
|
355
173
|
`import { BrowserTestingModule, platformBrowserTesting } from '@angular/platform-browser/testing';`,
|
|
356
|
-
|
|
174
|
+
`@NgModule({ providers: [${usesZoneJS ? 'provideZoneChangeDetection(), ' : ''}], })`,
|
|
175
|
+
`export class TestModule {}`,
|
|
176
|
+
`getTestBed().initTestEnvironment([BrowserTestingModule, TestModule], platformBrowserTesting(), {`,
|
|
357
177
|
` errorOnUnknownElements: true,`,
|
|
358
178
|
` errorOnUnknownProperties: true,`,
|
|
359
|
-
|
|
179
|
+
`});`,
|
|
360
180
|
];
|
|
361
181
|
return {
|
|
362
182
|
contents: contents.join('\n'),
|
|
@@ -366,7 +186,7 @@ async function initializeApplication(options, context, karmaOptions, transforms)
|
|
|
366
186
|
},
|
|
367
187
|
});
|
|
368
188
|
// Build tests with `application` builder, using test files as entry points.
|
|
369
|
-
const [buildOutput, buildIterator] = await first((0, index_1.buildApplicationInternal)(buildOptions, context, { codePlugins: [virtualTestBedInit] }), { cancel: !buildOptions.watch });
|
|
189
|
+
const [buildOutput, buildIterator] = await (0, utils_1.first)((0, index_1.buildApplicationInternal)(buildOptions, context, { codePlugins: [virtualTestBedInit] }), { cancel: !buildOptions.watch });
|
|
370
190
|
if (buildOutput.kind === results_1.ResultKind.Failure) {
|
|
371
191
|
throw new ApplicationBuildError('Build failed');
|
|
372
192
|
}
|
|
@@ -374,7 +194,11 @@ async function initializeApplication(options, context, karmaOptions, transforms)
|
|
|
374
194
|
throw new ApplicationBuildError('A full build result is required from the application builder.');
|
|
375
195
|
}
|
|
376
196
|
// Write test files
|
|
377
|
-
await writeTestFiles(buildOutput.files, buildOptions.outputPath);
|
|
197
|
+
await (0, test_files_1.writeTestFiles)(buildOutput.files, buildOptions.outputPath);
|
|
198
|
+
return [buildOutput, buildIterator];
|
|
199
|
+
}
|
|
200
|
+
async function configureKarma(karma, context, karmaOptions, options, buildOptions, buildOutput, mainName, transforms) {
|
|
201
|
+
const outputPath = buildOptions.outputPath;
|
|
378
202
|
// We need to add this to the beginning *after* the testing framework has
|
|
379
203
|
// prepended its files. The output path is required for each since they are
|
|
380
204
|
// added later in the test process via a plugin.
|
|
@@ -420,7 +244,7 @@ async function initializeApplication(options, context, karmaOptions, transforms)
|
|
|
420
244
|
{ pattern: `*.map`, included: false, watched: false },
|
|
421
245
|
// These are the test entrypoints.
|
|
422
246
|
{ pattern: `spec-*.js`, type: 'module', watched: false });
|
|
423
|
-
if (hasChunkOrWorkerFiles(buildOutput.files)) {
|
|
247
|
+
if ((0, utils_1.hasChunkOrWorkerFiles)(buildOutput.files)) {
|
|
424
248
|
karmaOptions.files.push(
|
|
425
249
|
// Allow loading of chunk-* files but don't include them all on load.
|
|
426
250
|
{
|
|
@@ -460,12 +284,12 @@ async function initializeApplication(options, context, karmaOptions, transforms)
|
|
|
460
284
|
if (pluginLengthBefore !== pluginLengthAfter) {
|
|
461
285
|
context.logger.warn(`Ignoring framework "@angular-devkit/build-angular" from karma config file because it's not compatible with the application builder.`);
|
|
462
286
|
}
|
|
463
|
-
parsedKarmaConfig.plugins.push(AngularAssetsMiddleware.createPlugin(buildOutput));
|
|
287
|
+
parsedKarmaConfig.plugins.push(assets_middleware_1.AngularAssetsMiddleware.createPlugin(buildOutput));
|
|
464
288
|
parsedKarmaConfig.middleware ??= [];
|
|
465
|
-
parsedKarmaConfig.middleware.push(AngularAssetsMiddleware.NAME);
|
|
466
|
-
parsedKarmaConfig.plugins.push(AngularPolyfillsPlugin.createPlugin(polyfillsFile, jasmineCleanupFiles, scriptsFiles));
|
|
289
|
+
parsedKarmaConfig.middleware.push(assets_middleware_1.AngularAssetsMiddleware.NAME);
|
|
290
|
+
parsedKarmaConfig.plugins.push(polyfills_plugin_1.AngularPolyfillsPlugin.createPlugin(polyfillsFile, jasmineCleanupFiles, scriptsFiles));
|
|
467
291
|
parsedKarmaConfig.reporters ??= [];
|
|
468
|
-
parsedKarmaConfig.reporters.push(AngularPolyfillsPlugin.NAME);
|
|
292
|
+
parsedKarmaConfig.reporters.push(polyfills_plugin_1.AngularPolyfillsPlugin.NAME);
|
|
469
293
|
// Adjust karma junit reporter outDir location to maintain previous (devkit) behavior
|
|
470
294
|
// The base path for the reporter was previously the workspace root.
|
|
471
295
|
// To keep the files in the same location, the reporter's output directory is adjusted
|
|
@@ -495,128 +319,6 @@ async function initializeApplication(options, context, karmaOptions, transforms)
|
|
|
495
319
|
!parsedKarmaConfig.reporters?.some((r) => r === 'coverage' || r === 'coverage-istanbul')) {
|
|
496
320
|
parsedKarmaConfig.reporters = (parsedKarmaConfig.reporters ?? []).concat(['coverage']);
|
|
497
321
|
}
|
|
498
|
-
return
|
|
499
|
-
}
|
|
500
|
-
function hasChunkOrWorkerFiles(files) {
|
|
501
|
-
return Object.keys(files).some((filename) => {
|
|
502
|
-
return /(?:^|\/)(?:worker|chunk)[^/]+\.js$/.test(filename);
|
|
503
|
-
});
|
|
504
|
-
}
|
|
505
|
-
async function writeTestFiles(files, testDir) {
|
|
506
|
-
const directoryExists = new Set();
|
|
507
|
-
// Writes the test related output files to disk and ensures the containing directories are present
|
|
508
|
-
await (0, utils_1.emitFilesToDisk)(Object.entries(files), async ([filePath, file]) => {
|
|
509
|
-
if (file.type !== bundler_context_1.BuildOutputFileType.Browser && file.type !== bundler_context_1.BuildOutputFileType.Media) {
|
|
510
|
-
return;
|
|
511
|
-
}
|
|
512
|
-
const fullFilePath = node_path_1.default.join(testDir, filePath);
|
|
513
|
-
// Ensure output subdirectories exist
|
|
514
|
-
const fileBasePath = node_path_1.default.dirname(fullFilePath);
|
|
515
|
-
if (fileBasePath && !directoryExists.has(fileBasePath)) {
|
|
516
|
-
await fs.mkdir(fileBasePath, { recursive: true });
|
|
517
|
-
directoryExists.add(fileBasePath);
|
|
518
|
-
}
|
|
519
|
-
if (file.origin === 'memory') {
|
|
520
|
-
// Write file contents
|
|
521
|
-
await fs.writeFile(fullFilePath, file.contents);
|
|
522
|
-
}
|
|
523
|
-
else {
|
|
524
|
-
// Copy file contents
|
|
525
|
-
await fs.copyFile(file.inputPath, fullFilePath, fs.constants.COPYFILE_FICLONE);
|
|
526
|
-
}
|
|
527
|
-
});
|
|
528
|
-
}
|
|
529
|
-
/** Returns the first item yielded by the given generator and cancels the execution. */
|
|
530
|
-
async function first(generator, { cancel }) {
|
|
531
|
-
if (!cancel) {
|
|
532
|
-
const iterator = generator[Symbol.asyncIterator]();
|
|
533
|
-
const firstValue = await iterator.next();
|
|
534
|
-
if (firstValue.done) {
|
|
535
|
-
throw new Error('Expected generator to emit at least once.');
|
|
536
|
-
}
|
|
537
|
-
return [firstValue.value, iterator];
|
|
538
|
-
}
|
|
539
|
-
for await (const value of generator) {
|
|
540
|
-
return [value, null];
|
|
541
|
-
}
|
|
542
|
-
throw new Error('Expected generator to emit at least once.');
|
|
543
|
-
}
|
|
544
|
-
function createInstrumentationFilter(includedBasePath, excludedPaths) {
|
|
545
|
-
return (request) => {
|
|
546
|
-
return (!excludedPaths.has(request) &&
|
|
547
|
-
!/\.(e2e|spec)\.tsx?$|[\\/]node_modules[\\/]/.test(request) &&
|
|
548
|
-
request.startsWith(includedBasePath));
|
|
549
|
-
};
|
|
550
|
-
}
|
|
551
|
-
function getInstrumentationExcludedPaths(root, excludedPaths) {
|
|
552
|
-
const excluded = new Set();
|
|
553
|
-
for (const excludeGlob of excludedPaths) {
|
|
554
|
-
const excludePath = excludeGlob[0] === '/' ? excludeGlob.slice(1) : excludeGlob;
|
|
555
|
-
(0, tinyglobby_1.globSync)(excludePath, { cwd: root }).forEach((p) => excluded.add(node_path_1.default.join(root, p)));
|
|
556
|
-
}
|
|
557
|
-
return excluded;
|
|
558
|
-
}
|
|
559
|
-
function getBaseKarmaOptions(options, context) {
|
|
560
|
-
// Determine project name from builder context target
|
|
561
|
-
const projectName = context.target?.project;
|
|
562
|
-
if (!projectName) {
|
|
563
|
-
throw new Error(`The 'karma' builder requires a target to be specified.`);
|
|
564
|
-
}
|
|
565
|
-
const karmaOptions = options.karmaConfig
|
|
566
|
-
? {}
|
|
567
|
-
: getBuiltInKarmaConfig(context.workspaceRoot, projectName);
|
|
568
|
-
const singleRun = !options.watch;
|
|
569
|
-
karmaOptions.singleRun = singleRun;
|
|
570
|
-
// Workaround https://github.com/angular/angular-cli/issues/28271, by clearing context by default
|
|
571
|
-
// for single run executions. Not clearing context for multi-run (watched) builds allows the
|
|
572
|
-
// Jasmine Spec Runner to be visible in the browser after test execution.
|
|
573
|
-
karmaOptions.client ??= {};
|
|
574
|
-
karmaOptions.client.clearContext ??= singleRun;
|
|
575
|
-
// Convert browsers from a string to an array
|
|
576
|
-
if (options.browsers) {
|
|
577
|
-
karmaOptions.browsers = options.browsers;
|
|
578
|
-
}
|
|
579
|
-
if (options.reporters) {
|
|
580
|
-
karmaOptions.reporters = options.reporters;
|
|
581
|
-
}
|
|
582
|
-
return karmaOptions;
|
|
583
|
-
}
|
|
584
|
-
function getBuiltInKarmaConfig(workspaceRoot, projectName) {
|
|
585
|
-
let coverageFolderName = projectName.charAt(0) === '@' ? projectName.slice(1) : projectName;
|
|
586
|
-
coverageFolderName = coverageFolderName.toLowerCase();
|
|
587
|
-
const workspaceRootRequire = (0, node_module_1.createRequire)(workspaceRoot + '/');
|
|
588
|
-
// Any changes to the config here need to be synced to: packages/schematics/angular/config/files/karma.conf.js.template
|
|
589
|
-
return {
|
|
590
|
-
basePath: '',
|
|
591
|
-
frameworks: ['jasmine'],
|
|
592
|
-
plugins: [
|
|
593
|
-
'karma-jasmine',
|
|
594
|
-
'karma-chrome-launcher',
|
|
595
|
-
'karma-jasmine-html-reporter',
|
|
596
|
-
'karma-coverage',
|
|
597
|
-
].map((p) => workspaceRootRequire(p)),
|
|
598
|
-
jasmineHtmlReporter: {
|
|
599
|
-
suppressAll: true, // removes the duplicated traces
|
|
600
|
-
},
|
|
601
|
-
coverageReporter: {
|
|
602
|
-
dir: node_path_1.default.join(workspaceRoot, 'coverage', coverageFolderName),
|
|
603
|
-
subdir: '.',
|
|
604
|
-
reporters: [{ type: 'html' }, { type: 'text-summary' }],
|
|
605
|
-
},
|
|
606
|
-
reporters: ['progress', 'kjhtml'],
|
|
607
|
-
browsers: ['Chrome'],
|
|
608
|
-
customLaunchers: {
|
|
609
|
-
// Chrome configured to run in a bazel sandbox.
|
|
610
|
-
// Disable the use of the gpu and `/dev/shm` because it causes Chrome to
|
|
611
|
-
// crash on some environments.
|
|
612
|
-
// See:
|
|
613
|
-
// https://github.com/puppeteer/puppeteer/blob/v1.0.0/docs/troubleshooting.md#tips
|
|
614
|
-
// https://stackoverflow.com/questions/50642308/webdriverexception-unknown-error-devtoolsactiveport-file-doesnt-exist-while-t
|
|
615
|
-
ChromeHeadlessNoSandbox: {
|
|
616
|
-
base: 'ChromeHeadless',
|
|
617
|
-
flags: ['--no-sandbox', '--headless', '--disable-gpu', '--disable-dev-shm-usage'],
|
|
618
|
-
},
|
|
619
|
-
},
|
|
620
|
-
restartOnFileChange: true,
|
|
621
|
-
};
|
|
322
|
+
return parsedKarmaConfig;
|
|
622
323
|
}
|
|
324
|
+
//# sourceMappingURL=application_builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application_builder.js","sourceRoot":"","sources":["application_builder.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CH,0BA8CC;AArFD,6CAAyC;AACzC,qCAAiC;AACjC,qDAAuC;AACvC,0DAA6B;AAC7B,yCAAiD;AACjD,qFAAsF;AACtF,uDAAwD;AACxD,gDAAgE;AAEhE,oDAA4D;AAC5D,kDAAsD;AACtD,2DAA8D;AAC9D,yCAA0F;AAC1F,iDAAqD;AACrD,uCAA4E;AAC5E,yDAA4D;AAC5D,2DAA0D;AAE1D,mCAMiB;AAQjB,MAAM,qBAAsB,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,SAAgB,OAAO,CACrB,OAA4B,EAC5B,OAAuB,EACvB,UAA0C;IAE1C,MAAM,iBAAiB,GAAG,IAAA,0BAAgB,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,IAAA,kCAAmB,EAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAErE,IAAI,WAAmB,CAAC;IAExB,OAAO,IAAI,oBAAc,CAAC;QACxB,KAAK,CAAC,KAAK,CAAC,UAAU;YACpB,IAAI,IAAI,CAAC;YACT,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,qBAAqB,CAAC,iBAAiB,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;YAC3F,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;oBACzC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC7D,UAAU,CAAC,KAAK,EAAE,CAAC;oBAEnB,OAAO;gBACT,CAAC;gBAED,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC;YAE/D,oEAAoE;YACpE,wDAAwD;YACxD,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAA,uCAAmB,EAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YAC5E,CAAC;YAED,kDAAkD;YAClD,WAAW,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,WAAqB,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACjE,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;gBAChD,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,MAAM;YACV,MAAM,WAAW,EAAE,IAAI,EAAE,CAAC;QAC5B,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAAsC,EACtC,OAAuB,EACvB,YAA2B,EAC3B,UAA0C;IAI1C,MAAM,KAAK,GAAG,wDAAa,OAAO,GAAC,CAAC;IACpC,MAAM,iBAAiB,GAAG,MAAM,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;IAE9D,qDAAqD;IACrD,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,EAAE,IAAA,wBAAU,GAAE,CAAC,CAAC;IACnF,MAAM,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,6CAA6C;IAC7C,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,IAAA,gBAAM,EAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrF,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IAErD,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,MAAM,iBAAiB,CACxD,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,UAAU,CACX,CAAC;IAEF,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAEhG,MAAM,WAAW,GAAG,MAAM,cAAc,CACtC,KAAK,EACL,OAAO,EACP,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,UAAU,CACX,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAAsC,EACtC,OAAuB,EACvB,iBAAyB,EACzB,UAAkB;IAElB,MAAM,WAAW,GAAG,MAAM,IAAA,0BAAkB,EAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAElF,MAAM,QAAQ,GAAG,WAAW,CAAC;IAC7B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,qBAAqB,GAAG,OAAO,CAAC,YAAY;QAChD,CAAC,CAAC,IAAA,sCAA2B,EACzB,iBAAiB,EACjB,IAAA,0CAA+B,EAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAC1F;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,GAAG,IAAA,0BAAkB,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1E,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC;QACrD,WAAW,CAAC,GAAG,CAAC,mBAAmB,GAAG,EAAE,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,YAAY,GAAiB;QACjC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW;QACX,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU;QACV,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,KAAK;QACZ,aAAa,EAAE,sBAAa,CAAC,IAAI;QACjC,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,qBAAqB;QACrB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS;QACT,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;QAC1D,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;KACnD,CAAC;IAEF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,YAA0B,EAC1B,OAAuB,EACvB,iBAAyB;IAEzB,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/D,MAAM,kBAAkB,GAAG,IAAA,iDAAyB,EAAC;QACnD,SAAS,EAAE,uBAAuB;QAClC,WAAW,EAAE,KAAK,IAAI,EAAE;YACtB,MAAM,QAAQ,GAAa;gBACzB,6CAA6C;gBAC7C,oBAAoB,UAAU,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,0BAA0B;gBAC9F,qDAAqD;gBACrD,mGAAmG;gBACnG,2BAA2B,UAAU,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE,OAAO;gBACpF,4BAA4B;gBAC5B,kGAAkG;gBAClG,iCAAiC;gBACjC,mCAAmC;gBACnC,KAAK;aACN,CAAC;YAEF,OAAO;gBACL,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC7B,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,iBAAiB;aAC9B,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,4EAA4E;IAC5E,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG,MAAM,IAAA,aAAK,EAC9C,IAAA,gCAAwB,EAAC,YAAY,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,EACtF,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAChC,CAAC;IACF,IAAI,WAAW,CAAC,IAAI,KAAK,oBAAU,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,IAAI,qBAAqB,CAAC,cAAc,CAAC,CAAC;IAClD,CAAC;SAAM,IAAI,WAAW,CAAC,IAAI,KAAK,oBAAU,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,qBAAqB,CAC7B,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,mBAAmB;IACnB,MAAM,IAAA,2BAAc,EAAC,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IAEjE,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,KAA6B,EAC7B,OAAuB,EACvB,YAA2B,EAC3B,OAAsC,EACtC,YAA0B,EAC1B,WAA+C,EAC/C,QAAgB,EAChB,UAA0C;IAE1C,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;IAE3C,yEAAyE;IACzE,2EAA2E;IAC3E,gDAAgD;IAChD,MAAM,aAAa,GAAgB;QACjC,OAAO,EAAE,GAAG,UAAU,eAAe;QACrC,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,KAAK;KACf,CAAC;IACF,MAAM,mBAAmB,GAAgB;QACvC,OAAO,EAAE,GAAG,UAAU,uBAAuB;QAC7C,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,YAAY,CAAC,QAAQ,GAAG,UAAU,CAAC;IAEnC,MAAM,YAAY,GAAkB,EAAE,CAAC;IACvC,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC5B,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,UAAU,GACd,OAAO,WAAW,KAAK,QAAQ;gBAC7B,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,GAAG,WAAW,CAAC,UAAU,IAAI,SAAS,KAAK,CAAC;YAElD,IAAI,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClC,SAAS;YACX,CAAC;YACD,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC;gBAChB,OAAO,EAAE,GAAG,UAAU,IAAI,UAAU,EAAE;gBACtC,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,KAAK;gBAC/E,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,YAAY,CAAC,KAAK,KAAK,EAAE,CAAC;IAC1B,YAAY,CAAC,KAAK,CAAC,IAAI;IACrB,6BAA6B;IAC7B,EAAE,OAAO,EAAE,GAAG,QAAQ,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;IAC7D,yBAAyB;IACzB,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACrD,kCAAkC;IAClC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CACzD,CAAC;IAEF,IAAI,IAAA,6BAAqB,EAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,YAAY,CAAC,KAAK,CAAC,IAAI;QACrB,qEAAqE;QACrE;YACE,OAAO,EAAE,qBAAqB;YAC9B,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,KAAK;SACf,CACF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAC3B,+DAA+D;QAC/D,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,iBAAiB,GAA2B,MAAM,KAAK,CAAC,MAAM,CAAC,WAAW,CAC9E,OAAO,CAAC,WAAW,EACnB,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,EACrF,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAC3C,CAAC;IAEF,gEAAgE;IAChE,gDAAgD;IAChD,MAAM,eAAe,GAAG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IAC7F,IAAI,iBAAiB,CAAC,QAAQ,EAAE,MAAM,KAAK,eAAe,EAAE,MAAM,EAAE,CAAC;QACnE,iBAAiB,CAAC,QAAQ,GAAG,eAAe,CAAC;QAC7C,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,mFAAmF;YACjF,iEAAiE,CACpE,CAAC;IACJ,CAAC;IAED,uCAAuC;IACvC,gFAAgF;IAChF,uCAAuC;IACvC,iBAAiB,CAAC,OAAO,KAAK,EAAE,CAAC;IACjC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5D,iBAAiB,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAC1D,CAAC,MAAgC,EAAE,EAAE;QACnC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,MAAM,KAAK,yCAAyC,CAAC;QAC9D,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC;IAC5D,CAAC,CACF,CAAC;IACF,iBAAiB,CAAC,UAAU,KAAK,EAAE,CAAC;IACpC,iBAAiB,CAAC,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAChE,CAAC,SAAiB,EAAE,EAAE,CAAC,SAAS,KAAK,+BAA+B,CACrE,CAAC;IACF,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC;IAC3D,IAAI,kBAAkB,KAAK,iBAAiB,EAAE,CAAC;QAC7C,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,qIAAqI,CACtI,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,2CAAuB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;IAClF,iBAAiB,CAAC,UAAU,KAAK,EAAE,CAAC;IACpC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,2CAAuB,CAAC,IAAI,CAAC,CAAC;IAEhE,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAC5B,yCAAsB,CAAC,YAAY,CAAC,aAAa,EAAE,mBAAmB,EAAE,YAAY,CAAC,CACtF,CAAC;IACF,iBAAiB,CAAC,SAAS,KAAK,EAAE,CAAC;IACnC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,yCAAsB,CAAC,IAAI,CAAC,CAAC;IAE9D,qFAAqF;IACrF,oEAAoE;IACpE,sFAAsF;IACtF,yDAAyD;IACzD,IAAI,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,CAAC;QAC1E,IAAI,eAAe,IAAI,iBAAiB,EAAE,CAAC;YACzC,8DAA8D;YAC9D,MAAM,oBAAoB,GAAI,iBAAyB,CAAC,eAAe,CAEtE,CAAC;YACF,IAAI,oBAAoB,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;gBAChD,oBAAoB,CAAC,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;YACzD,CAAC;iBAAM,IACL,OAAO,oBAAoB,CAAC,SAAS,KAAK,QAAQ;gBAClD,CAAC,mBAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAChD,CAAC;gBACD,oBAAoB,CAAC,SAAS,GAAG,mBAAI,CAAC,IAAI,CACxC,OAAO,CAAC,aAAa,EACrB,oBAAoB,CAAC,SAAS,CAC/B,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,8DAA8D;YAC7D,iBAAyB,CAAC,eAAe,CAAC,GAAG;gBAC5C,SAAS,EAAE,OAAO,CAAC,aAAa;aACjC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,yDAAyD;IACzD,IACE,OAAO,CAAC,YAAY;QACpB,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,mBAAmB,CAAC,EAChG,CAAC;QACD,iBAAiB,CAAC,SAAS,GAAG,CAAC,iBAAiB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
7
|
+
*/
|
|
8
|
+
import type { InlinePluginDef } from 'karma';
|
|
9
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
10
|
+
import type { ResultFile } from '../application/results';
|
|
11
|
+
interface ServeFileFunction {
|
|
12
|
+
(filepath: string, rangeHeader: string | string[] | undefined, response: ServerResponse, transform?: (c: string | Uint8Array) => string | Uint8Array, content?: string | Uint8Array, doNotCache?: boolean): void;
|
|
13
|
+
}
|
|
14
|
+
export interface LatestBuildFiles {
|
|
15
|
+
files: Record<string, ResultFile | undefined>;
|
|
16
|
+
}
|
|
17
|
+
export declare class AngularAssetsMiddleware {
|
|
18
|
+
private readonly serveFile;
|
|
19
|
+
private readonly latestBuildFiles;
|
|
20
|
+
static readonly $inject: string[];
|
|
21
|
+
static readonly NAME = "angular-test-assets";
|
|
22
|
+
constructor(serveFile: ServeFileFunction, latestBuildFiles: LatestBuildFiles);
|
|
23
|
+
handle(req: IncomingMessage, res: ServerResponse, next: (err?: unknown) => unknown): void;
|
|
24
|
+
static createPlugin(initialFiles: LatestBuildFiles): InlinePluginDef;
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.AngularAssetsMiddleware = void 0;
|
|
14
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
15
|
+
const isWindows = process.platform === 'win32';
|
|
16
|
+
const LATEST_BUILD_FILES_TOKEN = 'angularLatestBuildFiles';
|
|
17
|
+
class AngularAssetsMiddleware {
|
|
18
|
+
serveFile;
|
|
19
|
+
latestBuildFiles;
|
|
20
|
+
static $inject = ['serveFile', LATEST_BUILD_FILES_TOKEN];
|
|
21
|
+
static NAME = 'angular-test-assets';
|
|
22
|
+
constructor(serveFile, latestBuildFiles) {
|
|
23
|
+
this.serveFile = serveFile;
|
|
24
|
+
this.latestBuildFiles = latestBuildFiles;
|
|
25
|
+
}
|
|
26
|
+
handle(req, res, next) {
|
|
27
|
+
const url = new URL(`http://${req.headers['host'] ?? ''}${req.url ?? ''}`);
|
|
28
|
+
// Remove the leading slash from the URL path and convert to platform specific.
|
|
29
|
+
// The latest build files will use the platform path separator.
|
|
30
|
+
let pathname = url.pathname.slice(1);
|
|
31
|
+
if (isWindows) {
|
|
32
|
+
pathname = pathname.replaceAll(node_path_1.default.posix.sep, node_path_1.default.win32.sep);
|
|
33
|
+
}
|
|
34
|
+
const file = this.latestBuildFiles.files[pathname];
|
|
35
|
+
if (!file) {
|
|
36
|
+
next();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// Implementation of serverFile can be found here:
|
|
40
|
+
// https://github.com/karma-runner/karma/blob/84f85e7016efc2266fa6b3465f494a3fa151c85c/lib/middleware/common.js#L10
|
|
41
|
+
switch (file.origin) {
|
|
42
|
+
case 'disk':
|
|
43
|
+
this.serveFile(file.inputPath, undefined, res, undefined, undefined, /* doNotCache */ true);
|
|
44
|
+
break;
|
|
45
|
+
case 'memory':
|
|
46
|
+
// Include pathname to help with Content-Type headers.
|
|
47
|
+
this.serveFile(`/unused/${url.pathname}`, undefined, res, undefined, file.contents,
|
|
48
|
+
/* doNotCache */ false);
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
static createPlugin(initialFiles) {
|
|
53
|
+
return {
|
|
54
|
+
[LATEST_BUILD_FILES_TOKEN]: ['value', { files: { ...initialFiles.files } }],
|
|
55
|
+
[`middleware:${AngularAssetsMiddleware.NAME}`]: [
|
|
56
|
+
'factory',
|
|
57
|
+
Object.assign((...args) => {
|
|
58
|
+
const inst = new AngularAssetsMiddleware(...args);
|
|
59
|
+
return inst.handle.bind(inst);
|
|
60
|
+
}, AngularAssetsMiddleware),
|
|
61
|
+
],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.AngularAssetsMiddleware = AngularAssetsMiddleware;
|
|
66
|
+
//# sourceMappingURL=assets-middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets-middleware.js","sourceRoot":"","sources":["assets-middleware.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;AAIH,0DAA6B;AAG7B,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AAiB/C,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAE3D,MAAa,uBAAuB;IAMf;IACA;IANnB,MAAM,CAAU,OAAO,GAAG,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;IAElE,MAAM,CAAU,IAAI,GAAG,qBAAqB,CAAC;IAE7C,YACmB,SAA4B,EAC5B,gBAAkC;QADlC,cAAS,GAAT,SAAS,CAAmB;QAC5B,qBAAgB,GAAhB,gBAAgB,CAAkB;IAClD,CAAC;IAEJ,MAAM,CAAC,GAAoB,EAAE,GAAmB,EAAE,IAAgC;QAChF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3E,+EAA+E;QAC/E,+DAA+D;QAC/D,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,mBAAI,CAAC,KAAK,CAAC,GAAG,EAAE,mBAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,EAAE,CAAC;YAEP,OAAO;QACT,CAAC;QAED,kDAAkD;QAClD,mHAAmH;QACnH,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,MAAM;gBACT,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAC5F,MAAM;YACR,KAAK,QAAQ;gBACX,sDAAsD;gBACtD,IAAI,CAAC,SAAS,CACZ,WAAW,GAAG,CAAC,QAAQ,EAAE,EACzB,SAAS,EACT,GAAG,EACH,SAAS,EACT,IAAI,CAAC,QAAQ;gBACb,gBAAgB,CAAC,KAAK,CACvB,CAAC;gBACF,MAAM;QACV,CAAC;IACH,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,YAA8B;QAChD,OAAO;YACL,CAAC,wBAAwB,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;YAE3E,CAAC,cAAc,uBAAuB,CAAC,IAAI,EAAE,CAAC,EAAE;gBAC9C,SAAS;gBACT,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAA2D,EAAE,EAAE;oBAC/E,MAAM,IAAI,GAAG,IAAI,uBAAuB,CAAC,GAAG,IAAI,CAAC,CAAC;oBAElD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChC,CAAC,EAAE,uBAAuB,CAAC;aAC5B;SACF,CAAC;IACJ,CAAC;;AA3DH,0DA4DC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
7
|
+
*/
|
|
8
|
+
export declare function createInstrumentationFilter(includedBasePath: string, excludedPaths: Set<string>): (request: string) => boolean;
|
|
9
|
+
export declare function getInstrumentationExcludedPaths(root: string, excludedPaths: string[]): Set<string>;
|