@angular/build 19.2.2 → 20.0.0-next.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/build",
3
- "version": "19.2.2",
3
+ "version": "20.0.0-next.1",
4
4
  "description": "Official build system for Angular",
5
5
  "keywords": [
6
6
  "Angular CLI",
@@ -23,17 +23,16 @@
23
23
  "builders": "builders.json",
24
24
  "dependencies": {
25
25
  "@ampproject/remapping": "2.3.0",
26
- "@angular-devkit/architect": "0.1902.2",
27
- "@babel/core": "7.26.9",
26
+ "@angular-devkit/architect": "0.2000.0-next.1",
27
+ "@babel/core": "7.26.10",
28
28
  "@babel/helper-annotate-as-pure": "7.25.9",
29
29
  "@babel/helper-split-export-declaration": "7.24.7",
30
30
  "@babel/plugin-syntax-import-attributes": "7.26.0",
31
- "@inquirer/confirm": "5.1.6",
32
- "@vitejs/plugin-basic-ssl": "1.2.0",
31
+ "@inquirer/confirm": "5.1.7",
32
+ "@vitejs/plugin-basic-ssl": "2.0.0",
33
33
  "beasties": "0.2.0",
34
34
  "browserslist": "^4.23.0",
35
35
  "esbuild": "0.25.1",
36
- "fast-glob": "3.3.3",
37
36
  "https-proxy-agent": "7.0.6",
38
37
  "istanbul-lib-instrument": "6.0.3",
39
38
  "listr2": "8.2.5",
@@ -42,29 +41,30 @@
42
41
  "parse5-html-rewriting-stream": "7.0.0",
43
42
  "picomatch": "4.0.2",
44
43
  "piscina": "4.8.0",
45
- "rollup": "4.34.8",
46
- "sass": "1.85.0",
44
+ "rollup": "4.35.0",
45
+ "sass": "1.85.1",
47
46
  "semver": "7.7.1",
48
47
  "source-map-support": "0.5.21",
49
- "vite": "6.2.0",
48
+ "tinyglobby": "0.2.12",
49
+ "vite": "6.2.1",
50
50
  "watchpack": "2.4.2"
51
51
  },
52
52
  "optionalDependencies": {
53
53
  "lmdb": "3.2.6"
54
54
  },
55
55
  "peerDependencies": {
56
- "@angular/compiler": "^19.0.0 || ^19.2.0-next.0",
57
- "@angular/compiler-cli": "^19.0.0 || ^19.2.0-next.0",
58
- "@angular/localize": "^19.0.0 || ^19.2.0-next.0",
59
- "@angular/platform-server": "^19.0.0 || ^19.2.0-next.0",
60
- "@angular/service-worker": "^19.0.0 || ^19.2.0-next.0",
61
- "@angular/ssr": "^19.2.2",
56
+ "@angular/compiler": "^20.0.0 || ^20.0.0-next.0",
57
+ "@angular/compiler-cli": "^20.0.0 || ^20.0.0-next.0",
58
+ "@angular/localize": "^20.0.0 || ^20.0.0-next.0",
59
+ "@angular/platform-server": "^20.0.0 || ^20.0.0-next.0",
60
+ "@angular/service-worker": "^20.0.0 || ^20.0.0-next.0",
61
+ "@angular/ssr": "^20.0.0-next.1",
62
62
  "karma": "^6.4.0",
63
63
  "less": "^4.2.0",
64
- "ng-packagr": "^19.0.0 || ^19.2.0-next.0",
64
+ "ng-packagr": "^20.0.0 || ^20.0.0-next.0",
65
65
  "postcss": "^8.4.0",
66
66
  "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0",
67
- "typescript": ">=5.5 <5.9"
67
+ "typescript": ">=5.8 <5.9"
68
68
  },
69
69
  "peerDependenciesMeta": {
70
70
  "@angular/localize": {
@@ -101,7 +101,7 @@
101
101
  },
102
102
  "packageManager": "pnpm@9.15.6",
103
103
  "engines": {
104
- "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
104
+ "node": "^20.11.1 || >=22.0.0",
105
105
  "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
106
106
  "yarn": ">= 1.13.0"
107
107
  },
@@ -5,7 +5,7 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.dev/license
7
7
  */
8
- export { type BuildOutputFile, BuildOutputFileType } from '@angular/build';
8
+ export { type BuildOutputFile, BuildOutputFileType } from '../../tools/esbuild/bundler-context';
9
9
  export { createRxjsEsmResolutionPlugin } from '../../tools/esbuild/rxjs-esm-resolution-plugin';
10
10
  export { JavaScriptTransformer } from '../../tools/esbuild/javascript-transformer';
11
11
  export { getFeatureSupport, isZonelessApp } from '../../tools/esbuild/utils';
@@ -8,8 +8,8 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.buildApplicationInternal = exports.transformSupportedBrowsersToTargets = exports.getSupportedBrowsers = exports.purgeStaleBuildCache = exports.isZonelessApp = exports.getFeatureSupport = exports.JavaScriptTransformer = exports.createRxjsEsmResolutionPlugin = exports.BuildOutputFileType = void 0;
11
- var build_1 = require("@angular/build");
12
- Object.defineProperty(exports, "BuildOutputFileType", { enumerable: true, get: function () { return build_1.BuildOutputFileType; } });
11
+ var bundler_context_1 = require("../../tools/esbuild/bundler-context");
12
+ Object.defineProperty(exports, "BuildOutputFileType", { enumerable: true, get: function () { return bundler_context_1.BuildOutputFileType; } });
13
13
  var rxjs_esm_resolution_plugin_1 = require("../../tools/esbuild/rxjs-esm-resolution-plugin");
14
14
  Object.defineProperty(exports, "createRxjsEsmResolutionPlugin", { enumerable: true, get: function () { return rxjs_esm_resolution_plugin_1.createRxjsEsmResolutionPlugin; } });
15
15
  var javascript_transformer_1 = require("../../tools/esbuild/javascript-transformer");
@@ -671,6 +671,7 @@ async function setupServer(serverOptions, outputFiles, assets, preserveSymlinks,
671
671
  templateUpdates,
672
672
  ssrMode,
673
673
  resetComponentUpdates: () => templateUpdates.clear(),
674
+ projectRoot: serverOptions.projectRoot,
674
675
  }),
675
676
  (0, plugins_1.createRemoveIdPrefixPlugin)(externalMetadata.explicitBrowser),
676
677
  await (0, plugins_1.createAngularSsrTransformPlugin)(serverOptions.workspaceRoot),
@@ -27,6 +27,9 @@ async function extractMessages(options, builderName, context, extractorConstruct
27
27
  buildOptions.index = false;
28
28
  buildOptions.serviceWorker = false;
29
29
  buildOptions.outputMode = schema_1.OutputMode.Static;
30
+ buildOptions.appShell = undefined;
31
+ buildOptions.ssr = undefined;
32
+ buildOptions.prerender = undefined;
30
33
  buildOptions.server = undefined;
31
34
  // Build the application with the build options
32
35
  const builderResult = await first((0, application_1.buildApplicationInternal)(buildOptions, context, extensions));
@@ -5,9 +5,9 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.dev/license
7
7
  */
8
- import { ResultFile } from '@angular/build/private';
9
8
  import type { BuilderContext, BuilderOutput } from '@angular-devkit/architect';
10
9
  import type { ConfigOptions } from 'karma';
10
+ import { ResultFile } from '../application/results';
11
11
  import { Schema as KarmaBuilderOptions } from './schema';
12
12
  export declare function execute(options: KarmaBuilderOptions, context: BuilderContext, karmaOptions: ConfigOptions, transforms?: {
13
13
  karmaOptions?: (options: ConfigOptions) => ConfigOptions;
@@ -39,19 +39,18 @@ var __importStar = (this && this.__importStar) || (function () {
39
39
  return result;
40
40
  };
41
41
  })();
42
- var __importDefault = (this && this.__importDefault) || function (mod) {
43
- return (mod && mod.__esModule) ? mod : { "default": mod };
44
- };
45
42
  Object.defineProperty(exports, "__esModule", { value: true });
46
43
  exports.execute = execute;
47
44
  exports.writeTestFiles = writeTestFiles;
48
- const private_1 = require("@angular/build/private");
49
- const fast_glob_1 = __importDefault(require("fast-glob"));
50
45
  const node_crypto_1 = require("node:crypto");
51
46
  const fs = __importStar(require("node:fs/promises"));
52
47
  const node_module_1 = require("node:module");
53
48
  const path = __importStar(require("node:path"));
49
+ const tinyglobby_1 = require("tinyglobby");
54
50
  const bundler_context_1 = require("../../tools/esbuild/bundler-context");
51
+ const utils_1 = require("../../tools/esbuild/utils");
52
+ const index_1 = require("../application/index");
53
+ const results_1 = require("../application/results");
55
54
  const schema_1 = require("../application/schema");
56
55
  const find_tests_1 = require("./find-tests");
57
56
  const localResolve = (0, node_module_1.createRequire)(__filename).resolve;
@@ -182,12 +181,12 @@ function injectKarmaReporter(buildOptions, buildIterator, karmaConfig, controlle
182
181
  isDone = true;
183
182
  break;
184
183
  }
185
- if (buildOutput.kind === private_1.ResultKind.Failure) {
184
+ if (buildOutput.kind === results_1.ResultKind.Failure) {
186
185
  controller.enqueue({ success: false, message: 'Build failed' });
187
186
  }
188
- else if (buildOutput.kind === private_1.ResultKind.Incremental ||
189
- buildOutput.kind === private_1.ResultKind.Full) {
190
- if (buildOutput.kind === private_1.ResultKind.Full) {
187
+ else if (buildOutput.kind === results_1.ResultKind.Incremental ||
188
+ buildOutput.kind === results_1.ResultKind.Full) {
189
+ if (buildOutput.kind === results_1.ResultKind.Full) {
191
190
  this.latestBuildFiles.files = buildOutput.files;
192
191
  }
193
192
  else {
@@ -341,11 +340,11 @@ async function initializeApplication(options, context, karmaOptions, transforms
341
340
  externalDependencies: options.externalDependencies,
342
341
  };
343
342
  // Build tests with `application` builder, using test files as entry points.
344
- const [buildOutput, buildIterator] = await first((0, private_1.buildApplicationInternal)(buildOptions, context), { cancel: !buildOptions.watch });
345
- if (buildOutput.kind === private_1.ResultKind.Failure) {
343
+ const [buildOutput, buildIterator] = await first((0, index_1.buildApplicationInternal)(buildOptions, context), { cancel: !buildOptions.watch });
344
+ if (buildOutput.kind === results_1.ResultKind.Failure) {
346
345
  throw new ApplicationBuildError('Build failed');
347
346
  }
348
- else if (buildOutput.kind !== private_1.ResultKind.Full) {
347
+ else if (buildOutput.kind !== results_1.ResultKind.Full) {
349
348
  throw new ApplicationBuildError('A full build result is required from the application builder.');
350
349
  }
351
350
  // Write test files
@@ -437,7 +436,7 @@ function hasChunkOrWorkerFiles(files) {
437
436
  async function writeTestFiles(files, testDir) {
438
437
  const directoryExists = new Set();
439
438
  // Writes the test related output files to disk and ensures the containing directories are present
440
- await (0, private_1.emitFilesToDisk)(Object.entries(files), async ([filePath, file]) => {
439
+ await (0, utils_1.emitFilesToDisk)(Object.entries(files), async ([filePath, file]) => {
441
440
  if (file.type !== bundler_context_1.BuildOutputFileType.Browser && file.type !== bundler_context_1.BuildOutputFileType.Media) {
442
441
  return;
443
442
  }
@@ -484,7 +483,7 @@ function getInstrumentationExcludedPaths(root, excludedPaths) {
484
483
  const excluded = new Set();
485
484
  for (const excludeGlob of excludedPaths) {
486
485
  const excludePath = excludeGlob[0] === '/' ? excludeGlob.slice(1) : excludeGlob;
487
- fast_glob_1.default.sync(excludePath, { cwd: root }).forEach((p) => excluded.add(path.join(root, p)));
486
+ (0, tinyglobby_1.globSync)(excludePath, { cwd: root }).forEach((p) => excluded.add(path.join(root, p)));
488
487
  }
489
488
  return excluded;
490
489
  }
@@ -6,45 +6,12 @@
6
6
  * Use of this source code is governed by an MIT-style license that can be
7
7
  * found in the LICENSE file at https://angular.dev/license
8
8
  */
9
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- var desc = Object.getOwnPropertyDescriptor(m, k);
12
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
- desc = { enumerable: true, get: function() { return m[k]; } };
14
- }
15
- Object.defineProperty(o, k2, desc);
16
- }) : (function(o, m, k, k2) {
17
- if (k2 === undefined) k2 = k;
18
- o[k2] = m[k];
19
- }));
20
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
- Object.defineProperty(o, "default", { enumerable: true, value: v });
22
- }) : function(o, v) {
23
- o["default"] = v;
24
- });
25
- var __importStar = (this && this.__importStar) || (function () {
26
- var ownKeys = function(o) {
27
- ownKeys = Object.getOwnPropertyNames || function (o) {
28
- var ar = [];
29
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
- return ar;
31
- };
32
- return ownKeys(o);
33
- };
34
- return function (mod) {
35
- if (mod && mod.__esModule) return mod;
36
- var result = {};
37
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
- __setModuleDefault(result, mod);
39
- return result;
40
- };
41
- })();
42
9
  Object.defineProperty(exports, "__esModule", { value: true });
43
10
  exports.findTests = findTests;
44
11
  exports.getTestEntrypoints = getTestEntrypoints;
45
- const fast_glob_1 = __importStar(require("fast-glob"));
46
12
  const node_fs_1 = require("node:fs");
47
13
  const node_path_1 = require("node:path");
14
+ const tinyglobby_1 = require("tinyglobby");
48
15
  /* Go through all patterns and find unique list of files */
49
16
  async function findTests(include, exclude, workspaceRoot, projectSourceRoot) {
50
17
  const matchingTestsPromises = include.map((pattern) => findMatchingTests(pattern, exclude, workspaceRoot, projectSourceRoot));
@@ -102,7 +69,7 @@ async function findMatchingTests(pattern, ignore, workspaceRoot, projectSourceRo
102
69
  // such paths are easy to get when running scripts via IDEs
103
70
  normalizedPattern = removeRelativeRoot(normalizedPattern, relativeProjectRoot);
104
71
  // special logic when pattern does not look like a glob
105
- if (!(0, fast_glob_1.isDynamicPattern)(normalizedPattern)) {
72
+ if (!(0, tinyglobby_1.isDynamicPattern)(normalizedPattern)) {
106
73
  if (await isDirectory((0, node_path_1.join)(projectSourceRoot, normalizedPattern))) {
107
74
  normalizedPattern = `${normalizedPattern}/**/*.spec.@(ts|tsx)`;
108
75
  }
@@ -118,7 +85,7 @@ async function findMatchingTests(pattern, ignore, workspaceRoot, projectSourceRo
118
85
  }
119
86
  // normalize the patterns in the ignore list
120
87
  const normalizedIgnorePatternList = ignore.map((pattern) => removeRelativeRoot(removeLeadingSlash(normalizePath(pattern)), relativeProjectRoot));
121
- return (0, fast_glob_1.default)(normalizedPattern, {
88
+ return (0, tinyglobby_1.glob)(normalizedPattern, {
122
89
  cwd: projectSourceRoot,
123
90
  absolute: true,
124
91
  ignore: ['**/node_modules/**', ...normalizedIgnorePatternList],
@@ -50,6 +50,7 @@ function generateJitFileUri(file, type) {
50
50
  * @returns A string containing the full JIT namespace URI.
51
51
  */
52
52
  function generateJitInlineUri(data, type) {
53
+ // Node.js types do not allow a string even though this is valid.
53
54
  return `${JIT_BASE_NAMESPACE}:${type}:inline;${Buffer.from(data).toString('base64')}`;
54
55
  }
55
56
  /**
@@ -44,10 +44,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
44
44
  };
45
45
  Object.defineProperty(exports, "__esModule", { value: true });
46
46
  exports.StylesheetPluginFactory = void 0;
47
- const fast_glob_1 = __importDefault(require("fast-glob"));
48
47
  const node_assert_1 = __importDefault(require("node:assert"));
49
48
  const promises_1 = require("node:fs/promises");
50
49
  const node_path_1 = require("node:path");
50
+ const tinyglobby_1 = require("tinyglobby");
51
51
  const error_1 = require("../../../utils/error");
52
52
  const load_result_cache_1 = require("../load-result-cache");
53
53
  /**
@@ -287,7 +287,7 @@ async function compileString(data, filename, postcssProcessor, options) {
287
287
  typeof resultMessage['dir'] === 'string' &&
288
288
  typeof resultMessage['glob'] === 'string') {
289
289
  loadResult.watchFiles ??= [];
290
- const dependencies = await (0, fast_glob_1.default)(resultMessage['glob'], {
290
+ const dependencies = await (0, tinyglobby_1.glob)(resultMessage['glob'], {
291
291
  absolute: true,
292
292
  cwd: resultMessage['dir'],
293
293
  });
@@ -315,7 +315,7 @@ function transformSupportedBrowsersToTargets(supportedBrowsers) {
315
315
  }
316
316
  return transformed;
317
317
  }
318
- const SUPPORTED_NODE_VERSIONS = '^18.19.1 || ^20.11.1 || >=22.0.0';
318
+ const SUPPORTED_NODE_VERSIONS = '^20.11.1 || >=22.0.0';
319
319
  /**
320
320
  * Transform supported Node.js versions to esbuild target.
321
321
  * @see https://esbuild.github.io/api/#target
@@ -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
+ import type { Connect } from 'vite';
9
+ export declare function createChromeDevtoolsMiddleware(cacheDir: string, projectRoot: string): Connect.NextHandleFunction;
@@ -0,0 +1,52 @@
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.createChromeDevtoolsMiddleware = createChromeDevtoolsMiddleware;
14
+ const node_assert_1 = __importDefault(require("node:assert"));
15
+ const node_crypto_1 = require("node:crypto");
16
+ const node_fs_1 = require("node:fs");
17
+ const node_path_1 = require("node:path");
18
+ const CHROME_DEVTOOLS_ROUTE = '/.well-known/appspecific/com.chrome.devtools.json';
19
+ function createChromeDevtoolsMiddleware(cacheDir, projectRoot) {
20
+ let devtoolsConfig;
21
+ const devtoolsConfigPath = (0, node_path_1.join)(cacheDir, 'com.chrome.devtools.json');
22
+ return function chromeDevtoolsMiddleware(req, res, next) {
23
+ if (req.url !== CHROME_DEVTOOLS_ROUTE) {
24
+ next();
25
+ return;
26
+ }
27
+ if (!devtoolsConfig) {
28
+ // We store the UUID and re-use it to ensure Chrome does not repeatedly ask for permissions when restarting the dev server.
29
+ try {
30
+ const devtoolsConfig = (0, node_fs_1.readFileSync)(devtoolsConfigPath, 'utf-8');
31
+ const devtoolsConfigJson = JSON.parse(devtoolsConfig);
32
+ node_assert_1.default.equal(projectRoot, devtoolsConfigJson?.workspace.root);
33
+ }
34
+ catch {
35
+ const devtoolsConfigJson = {
36
+ workspace: {
37
+ root: projectRoot,
38
+ uuid: (0, node_crypto_1.randomUUID)(),
39
+ },
40
+ };
41
+ devtoolsConfig = JSON.stringify(devtoolsConfigJson, undefined, 2);
42
+ try {
43
+ (0, node_fs_1.mkdirSync)(cacheDir, { recursive: true });
44
+ (0, node_fs_1.writeFileSync)(devtoolsConfigPath, devtoolsConfig);
45
+ }
46
+ catch { }
47
+ }
48
+ }
49
+ res.setHeader('Content-Type', 'application/json');
50
+ res.end(devtoolsConfig);
51
+ };
52
+ }
@@ -11,3 +11,4 @@ export { createAngularIndexHtmlMiddleware } from './index-html-middleware';
11
11
  export { createAngularSsrExternalMiddleware, createAngularSsrInternalMiddleware, } from './ssr-middleware';
12
12
  export { createAngularHeadersMiddleware } from './headers-middleware';
13
13
  export { createAngularComponentMiddleware } from './component-middleware';
14
+ export { createChromeDevtoolsMiddleware } from './chrome-devtools-middleware';
@@ -7,7 +7,7 @@
7
7
  * found in the LICENSE file at https://angular.dev/license
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.createAngularComponentMiddleware = exports.createAngularHeadersMiddleware = exports.createAngularSsrInternalMiddleware = exports.createAngularSsrExternalMiddleware = exports.createAngularIndexHtmlMiddleware = exports.angularHtmlFallbackMiddleware = exports.createAngularAssetsMiddleware = void 0;
10
+ exports.createChromeDevtoolsMiddleware = exports.createAngularComponentMiddleware = exports.createAngularHeadersMiddleware = exports.createAngularSsrInternalMiddleware = exports.createAngularSsrExternalMiddleware = exports.createAngularIndexHtmlMiddleware = exports.angularHtmlFallbackMiddleware = exports.createAngularAssetsMiddleware = void 0;
11
11
  var assets_middleware_1 = require("./assets-middleware");
12
12
  Object.defineProperty(exports, "createAngularAssetsMiddleware", { enumerable: true, get: function () { return assets_middleware_1.createAngularAssetsMiddleware; } });
13
13
  var html_fallback_middleware_1 = require("./html-fallback-middleware");
@@ -21,3 +21,5 @@ var headers_middleware_1 = require("./headers-middleware");
21
21
  Object.defineProperty(exports, "createAngularHeadersMiddleware", { enumerable: true, get: function () { return headers_middleware_1.createAngularHeadersMiddleware; } });
22
22
  var component_middleware_1 = require("./component-middleware");
23
23
  Object.defineProperty(exports, "createAngularComponentMiddleware", { enumerable: true, get: function () { return component_middleware_1.createAngularComponentMiddleware; } });
24
+ var chrome_devtools_middleware_1 = require("./chrome-devtools-middleware");
25
+ Object.defineProperty(exports, "createChromeDevtoolsMiddleware", { enumerable: true, get: function () { return chrome_devtools_middleware_1.createChromeDevtoolsMiddleware; } });
@@ -39,6 +39,7 @@ interface AngularSetupMiddlewaresPluginOptions {
39
39
  templateUpdates: Map<string, string>;
40
40
  ssrMode: ServerSsrMode;
41
41
  resetComponentUpdates: () => void;
42
+ projectRoot: string;
42
43
  }
43
44
  export declare function createAngularSetupMiddlewaresPlugin(options: AngularSetupMiddlewaresPluginOptions): Plugin;
44
45
  export {};
@@ -51,6 +51,7 @@ function createAngularSetupMiddlewaresPlugin(options) {
51
51
  server.middlewares.use((0, middlewares_1.createAngularHeadersMiddleware)(server));
52
52
  server.middlewares.use((0, middlewares_1.createAngularComponentMiddleware)(server, templateUpdates));
53
53
  server.middlewares.use((0, middlewares_1.createAngularAssetsMiddleware)(server, assets, outputFiles, componentStyles, await createEncapsulateStyle()));
54
+ server.middlewares.use((0, middlewares_1.createChromeDevtoolsMiddleware)(server.config.cacheDir, options.projectRoot));
54
55
  extensionMiddleware?.forEach((middleware) => server.middlewares.use(middleware));
55
56
  // Returning a function, installs middleware after the main transform middleware but
56
57
  // before the built-in HTML middleware
@@ -41,12 +41,12 @@ var __importStar = (this && this.__importStar) || (function () {
41
41
  })();
42
42
  Object.defineProperty(exports, "__esModule", { value: true });
43
43
  exports.loadProxyConfiguration = loadProxyConfiguration;
44
- const fast_glob_1 = require("fast-glob");
45
44
  const node_fs_1 = require("node:fs");
46
45
  const promises_1 = require("node:fs/promises");
47
46
  const node_path_1 = require("node:path");
48
47
  const node_url_1 = require("node:url");
49
48
  const picomatch_1 = require("picomatch");
49
+ const tinyglobby_1 = require("tinyglobby");
50
50
  const error_1 = require("./error");
51
51
  const load_esm_1 = require("./load-esm");
52
52
  async function loadProxyConfiguration(root, proxyConfig) {
@@ -141,7 +141,7 @@ function normalizeProxyConfiguration(proxy) {
141
141
  }
142
142
  // TODO: Consider upstreaming glob support
143
143
  for (const key of Object.keys(normalizedProxy)) {
144
- if (key[0] !== '^' && (0, fast_glob_1.isDynamicPattern)(key)) {
144
+ if (key[0] !== '^' && (0, tinyglobby_1.isDynamicPattern)(key)) {
145
145
  const pattern = (0, picomatch_1.makeRe)(key).source;
146
146
  normalizedProxy[pattern] = normalizedProxy[key];
147
147
  delete normalizedProxy[key];
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.normalizeCacheOptions = normalizeCacheOptions;
11
11
  const node_path_1 = require("node:path");
12
12
  /** Version placeholder is replaced during the build process with actual package version */
13
- const VERSION = '19.2.2';
13
+ const VERSION = '20.0.0-next.1';
14
14
  function hasCacheMetadata(value) {
15
15
  return (!!value &&
16
16
  typeof value === 'object' &&
@@ -11,14 +11,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.resolveAssets = resolveAssets;
14
- const fast_glob_1 = __importDefault(require("fast-glob"));
15
14
  const node_path_1 = __importDefault(require("node:path"));
15
+ const tinyglobby_1 = require("tinyglobby");
16
16
  async function resolveAssets(entries, root) {
17
17
  const defaultIgnore = ['.gitkeep', '**/.DS_Store', '**/Thumbs.db'];
18
18
  const outputFiles = [];
19
19
  for (const entry of entries) {
20
20
  const cwd = node_path_1.default.resolve(root, entry.input);
21
- const files = await (0, fast_glob_1.default)(entry.glob, {
21
+ const files = await (0, tinyglobby_1.glob)(entry.glob, {
22
22
  cwd,
23
23
  dot: true,
24
24
  ignore: entry.ignore ? defaultIgnore.concat(entry.ignore) : defaultIgnore,
@@ -28,7 +28,7 @@ function assertCompatibleAngularVersion(projectRoot) {
28
28
  'This likely indicates a corrupted local installation. Please try reinstalling your packages.');
29
29
  process.exit(2);
30
30
  }
31
- const supportedAngularSemver = '^19.0.0 || ^19.2.0-next.0';
31
+ const supportedAngularSemver = '^20.0.0 || ^20.0.0-next.0';
32
32
  if (angularPkgJson['version'] === '0.0.0' || supportedAngularSemver.startsWith('0.0.0')) {
33
33
  // Internal CLI and FW testing version.
34
34
  return;