@analogjs/vitest-angular 3.0.0-alpha.93 → 3.0.0-alpha.95

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": "@analogjs/vitest-angular",
3
- "version": "3.0.0-alpha.93",
3
+ "version": "3.0.0-alpha.95",
4
4
  "description": "Vitest Builder for Angular",
5
5
  "type": "module",
6
6
  "author": "Brandon Roberts <robertsbt@gmail.com>",
@@ -56,8 +56,8 @@
56
56
  },
57
57
  "peerDependencies": {
58
58
  "@analogjs/vite-plugin-angular": "*",
59
- "@angular-devkit/architect": ">=0.1500.0 < 0.2300.0",
60
- "@angular-devkit/schematics": ">=17.0.0",
59
+ "@angular-devkit/architect": ">=0.2000.0 < 0.2300.0",
60
+ "@angular-devkit/schematics": "^20.0.0 || ^21.0.0 || ^22.0.0",
61
61
  "vitest": "^1.3.1 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0",
62
62
  "zone.js": ">=0.14.0"
63
63
  },
@@ -1,4 +1,3 @@
1
1
  export declare function getBuildApplicationFunction(): Promise<{
2
2
  buildApplicationInternal: (...args: any[]) => any;
3
- angularVersion: number;
4
3
  }>;
@@ -3,20 +3,9 @@ import { createRequire } from "node:module";
3
3
  var _require = createRequire(import.meta.url);
4
4
  async function getBuildApplicationFunction() {
5
5
  const { VERSION } = await Function("return import(\"@angular/compiler-cli\")")();
6
- const angularVersion = Number(VERSION.major);
7
- let buildApplicationInternal;
8
- if (angularVersion < 17) throw new Error("This builder is not supported with versions earlier than Angular v17");
9
- else if (angularVersion >= 17 && angularVersion < 18) {
10
- const { buildApplicationInternal: buildApplicationInternalFn } = _require("@angular-devkit/build-angular/src/builders/application");
11
- buildApplicationInternal = buildApplicationInternalFn;
12
- } else {
13
- const { buildApplicationInternal: buildApplicationInternalFn } = _require("@angular/build/private");
14
- buildApplicationInternal = buildApplicationInternalFn;
15
- }
16
- return {
17
- buildApplicationInternal,
18
- angularVersion
19
- };
6
+ if (Number(VERSION.major) < 20) throw new Error("This builder is not supported with versions earlier than Angular v20");
7
+ const { buildApplicationInternal } = _require("@angular/build/private");
8
+ return { buildApplicationInternal };
20
9
  }
21
10
  //#endregion
22
11
  export { getBuildApplicationFunction };
@@ -1 +1 @@
1
- {"version":3,"file":"devkit.js","names":[],"sources":["../../../../../src/lib/builders/build/devkit.ts"],"sourcesContent":["import { createRequire } from 'node:module';\n\nconst _require = createRequire(import.meta.url);\n\nexport async function getBuildApplicationFunction(): Promise<{\n buildApplicationInternal: (...args: any[]) => any;\n angularVersion: number;\n}> {\n const { VERSION } = await (Function(\n 'return import(\"@angular/compiler-cli\")',\n )() as Promise<{ VERSION: { major: string; minor: string } }>);\n\n const angularVersion = Number(VERSION.major);\n let buildApplicationInternal: (...args: any[]) => any;\n\n if (angularVersion < 17) {\n throw new Error(\n 'This builder is not supported with versions earlier than Angular v17',\n );\n } else if (angularVersion >= 17 && angularVersion < 18) {\n const { buildApplicationInternal: buildApplicationInternalFn } = _require(\n '@angular-devkit/build-angular/src/builders/application',\n );\n\n buildApplicationInternal = buildApplicationInternalFn;\n } else {\n const { buildApplicationInternal: buildApplicationInternalFn } = _require(\n '@angular/build/private',\n );\n\n buildApplicationInternal = buildApplicationInternalFn;\n }\n\n return { buildApplicationInternal, angularVersion };\n}\n"],"mappings":";;AAEA,IAAM,WAAW,cAAc,OAAO,KAAK,IAAI;AAE/C,eAAsB,8BAGnB;CACD,MAAM,EAAE,YAAY,MAAO,SACzB,2CACD,EAAE;CAEH,MAAM,iBAAiB,OAAO,QAAQ,MAAM;CAC5C,IAAI;AAEJ,KAAI,iBAAiB,GACnB,OAAM,IAAI,MACR,uEACD;UACQ,kBAAkB,MAAM,iBAAiB,IAAI;EACtD,MAAM,EAAE,0BAA0B,+BAA+B,SAC/D,yDACD;AAED,6BAA2B;QACtB;EACL,MAAM,EAAE,0BAA0B,+BAA+B,SAC/D,yBACD;AAED,6BAA2B;;AAG7B,QAAO;EAAE;EAA0B;EAAgB"}
1
+ {"version":3,"file":"devkit.js","names":[],"sources":["../../../../../src/lib/builders/build/devkit.ts"],"sourcesContent":["import { createRequire } from 'node:module';\n\nconst _require = createRequire(import.meta.url);\n\nexport async function getBuildApplicationFunction(): Promise<{\n buildApplicationInternal: (...args: any[]) => any;\n}> {\n const { VERSION } = await (Function(\n 'return import(\"@angular/compiler-cli\")',\n )() as Promise<{ VERSION: { major: string; minor: string } }>);\n\n if (Number(VERSION.major) < 20) {\n throw new Error(\n 'This builder is not supported with versions earlier than Angular v20',\n );\n }\n\n const { buildApplicationInternal } = _require('@angular/build/private');\n\n return { buildApplicationInternal };\n}\n"],"mappings":";;AAEA,IAAM,WAAW,cAAc,OAAO,KAAK,IAAI;AAE/C,eAAsB,8BAEnB;CACD,MAAM,EAAE,YAAY,MAAO,SACzB,2CACD,EAAE;AAEH,KAAI,OAAO,QAAQ,MAAM,GAAG,GAC1B,OAAM,IAAI,MACR,uEACD;CAGH,MAAM,EAAE,6BAA6B,SAAS,yBAAyB;AAEvE,QAAO,EAAE,0BAA0B"}
@@ -1,7 +1,6 @@
1
1
  import { AngularMemoryOutputFiles } from "../utils";
2
2
  interface AngularMemoryPluginOptions {
3
3
  workspaceRoot?: string;
4
- angularVersion: number;
5
4
  outputFiles: AngularMemoryOutputFiles;
6
5
  external?: string[];
7
6
  }
@@ -35,7 +35,7 @@ async function createAngularMemoryPlugin(options) {
35
35
  },
36
36
  load(id) {
37
37
  const [file] = id.split("?", 1);
38
- const relativeFile = options.angularVersion < 19 ? normalizePath(relative(projectRoot, file)).replace(/^.*\//, "").replace(".ts", ".js") : "spec-" + normalizePath(relative(projectRoot, file)).replace(".ts", ".js").replace(/^[./]+/, "_").replace(/\//g, "-");
38
+ const relativeFile = "spec-" + normalizePath(relative(projectRoot, file)).replace(".ts", ".js").replace(/^[./]+/, "_").replace(/\//g, "-");
39
39
  const codeContents = outputFiles.get(relativeFile)?.contents || outputFiles.get(id)?.contents;
40
40
  if (codeContents === void 0) return;
41
41
  const code = Buffer.from(codeContents).toString("utf-8");
@@ -1 +1 @@
1
- {"version":3,"file":"angular-memory-plugin.js","names":[],"sources":["../../../../../../src/lib/builders/build/plugins/angular-memory-plugin.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n// import assert from 'node:assert';\nimport { dirname, join, relative, resolve } from 'node:path';\n\nimport { AngularMemoryOutputFiles } from '../utils';\n\ninterface AngularMemoryPluginOptions {\n workspaceRoot?: string;\n angularVersion: number;\n outputFiles: AngularMemoryOutputFiles;\n external?: string[];\n}\n\nexport async function createAngularMemoryPlugin(\n options: AngularMemoryPluginOptions,\n): Promise<{\n name: string;\n enforce: string;\n config: (userConfig: any) => void;\n resolveId: (source: string, importer: string) => Promise<string | undefined>;\n load: (id: string) => { code: string; map: string | undefined } | undefined;\n}> {\n const { normalizePath } = await (Function(\n 'return import(\"vite\")',\n )() as Promise<typeof import('vite')>);\n const { outputFiles, external } = options;\n let config;\n let projectRoot: string;\n const workspaceRoot = options?.workspaceRoot || process.cwd();\n\n return {\n name: 'vite:angular-memory',\n // Ensures plugin hooks run before built-in Vite hooks\n enforce: 'pre',\n config(userConfig: any) {\n config = userConfig;\n projectRoot = resolve(workspaceRoot, config.root || '.');\n },\n async resolveId(source: string, importer: string) {\n // Prevent vite from resolving an explicit external dependency (`externalDependencies` option)\n if (external?.includes(source)) {\n // This is still not ideal since Vite will still transform the import specifier to\n // `/@id/${source}` but is currently closer to a raw external than a resolved file path.\n return source;\n }\n\n if (importer) {\n if (\n source[0] === '.' &&\n normalizePath(importer).startsWith(projectRoot)\n ) {\n // Remove query if present\n const [importerFile] = importer.split('?', 1);\n source =\n '/' + join(dirname(relative(projectRoot, importerFile)), source);\n }\n }\n\n const [file] = source.split('?', 1);\n const fileSplits = file.split('/');\n\n if (outputFiles.has(fileSplits[fileSplits.length - 1])) {\n return fileSplits[fileSplits.length - 1];\n }\n\n if (outputFiles.has(file)) {\n return join(projectRoot, source);\n }\n return;\n },\n load(id: string) {\n const [file] = id.split('?', 1);\n const relativeFile =\n options.angularVersion < 19\n ? normalizePath(relative(projectRoot, file))\n .replace(/^.*\\//, '')\n .replace('.ts', '.js')\n : 'spec-' +\n normalizePath(relative(projectRoot, file))\n .replace('.ts', '.js')\n .replace(/^[./]+/, '_')\n .replace(/\\//g, '-');\n\n const codeContents =\n outputFiles.get(relativeFile)?.contents ||\n outputFiles.get(id)?.contents;\n if (codeContents === undefined) {\n return undefined;\n }\n\n const code = Buffer.from(codeContents).toString('utf-8');\n const mapContents = outputFiles.get(relativeFile + '.map')?.contents;\n\n return {\n // Remove source map URL comments from the code if a sourcemap is present.\n // Vite will inline and add an additional sourcemap URL for the sourcemap.\n code: mapContents\n ? code.replace(/^\\/\\/# sourceMappingURL=[^\\r\\n]*/gm, '')\n : code,\n map: mapContents && Buffer.from(mapContents).toString('utf-8'),\n };\n },\n };\n}\n"],"mappings":";;;;;;;;;AAoBA,eAAsB,0BACpB,SAOC;CACD,MAAM,EAAE,kBAAkB,MAAO,SAC/B,0BACD,EAAE;CACH,MAAM,EAAE,aAAa,aAAa;CAClC,IAAI;CACJ,IAAI;CACJ,MAAM,gBAAgB,SAAS,iBAAiB,QAAQ,KAAK;AAE7D,QAAO;EACL,MAAM;EAEN,SAAS;EACT,OAAO,YAAiB;AACtB,YAAS;AACT,iBAAc,QAAQ,eAAe,OAAO,QAAQ,IAAI;;EAE1D,MAAM,UAAU,QAAgB,UAAkB;AAEhD,OAAI,UAAU,SAAS,OAAO,CAG5B,QAAO;AAGT,OAAI;QAEA,OAAO,OAAO,OACd,cAAc,SAAS,CAAC,WAAW,YAAY,EAC/C;KAEA,MAAM,CAAC,gBAAgB,SAAS,MAAM,KAAK,EAAE;AAC7C,cACE,MAAM,KAAK,QAAQ,SAAS,aAAa,aAAa,CAAC,EAAE,OAAO;;;GAItE,MAAM,CAAC,QAAQ,OAAO,MAAM,KAAK,EAAE;GACnC,MAAM,aAAa,KAAK,MAAM,IAAI;AAElC,OAAI,YAAY,IAAI,WAAW,WAAW,SAAS,GAAG,CACpD,QAAO,WAAW,WAAW,SAAS;AAGxC,OAAI,YAAY,IAAI,KAAK,CACvB,QAAO,KAAK,aAAa,OAAO;;EAIpC,KAAK,IAAY;GACf,MAAM,CAAC,QAAQ,GAAG,MAAM,KAAK,EAAE;GAC/B,MAAM,eACJ,QAAQ,iBAAiB,KACrB,cAAc,SAAS,aAAa,KAAK,CAAC,CACvC,QAAQ,SAAS,GAAG,CACpB,QAAQ,OAAO,MAAM,GACxB,UACA,cAAc,SAAS,aAAa,KAAK,CAAC,CACvC,QAAQ,OAAO,MAAM,CACrB,QAAQ,UAAU,IAAI,CACtB,QAAQ,OAAO,IAAI;GAE5B,MAAM,eACJ,YAAY,IAAI,aAAa,EAAE,YAC/B,YAAY,IAAI,GAAG,EAAE;AACvB,OAAI,iBAAiB,KAAA,EACnB;GAGF,MAAM,OAAO,OAAO,KAAK,aAAa,CAAC,SAAS,QAAQ;GACxD,MAAM,cAAc,YAAY,IAAI,eAAe,OAAO,EAAE;AAE5D,UAAO;IAGL,MAAM,cACF,KAAK,QAAQ,sCAAsC,GAAG,GACtD;IACJ,KAAK,eAAe,OAAO,KAAK,YAAY,CAAC,SAAS,QAAQ;IAC/D;;EAEJ"}
1
+ {"version":3,"file":"angular-memory-plugin.js","names":[],"sources":["../../../../../../src/lib/builders/build/plugins/angular-memory-plugin.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n// import assert from 'node:assert';\nimport { dirname, join, relative, resolve } from 'node:path';\n\nimport { AngularMemoryOutputFiles } from '../utils';\n\ninterface AngularMemoryPluginOptions {\n workspaceRoot?: string;\n outputFiles: AngularMemoryOutputFiles;\n external?: string[];\n}\n\nexport async function createAngularMemoryPlugin(\n options: AngularMemoryPluginOptions,\n): Promise<{\n name: string;\n enforce: string;\n config: (userConfig: any) => void;\n resolveId: (source: string, importer: string) => Promise<string | undefined>;\n load: (id: string) => { code: string; map: string | undefined } | undefined;\n}> {\n const { normalizePath } = await (Function(\n 'return import(\"vite\")',\n )() as Promise<typeof import('vite')>);\n const { outputFiles, external } = options;\n let config;\n let projectRoot: string;\n const workspaceRoot = options?.workspaceRoot || process.cwd();\n\n return {\n name: 'vite:angular-memory',\n // Ensures plugin hooks run before built-in Vite hooks\n enforce: 'pre',\n config(userConfig: any) {\n config = userConfig;\n projectRoot = resolve(workspaceRoot, config.root || '.');\n },\n async resolveId(source: string, importer: string) {\n // Prevent vite from resolving an explicit external dependency (`externalDependencies` option)\n if (external?.includes(source)) {\n // This is still not ideal since Vite will still transform the import specifier to\n // `/@id/${source}` but is currently closer to a raw external than a resolved file path.\n return source;\n }\n\n if (importer) {\n if (\n source[0] === '.' &&\n normalizePath(importer).startsWith(projectRoot)\n ) {\n // Remove query if present\n const [importerFile] = importer.split('?', 1);\n source =\n '/' + join(dirname(relative(projectRoot, importerFile)), source);\n }\n }\n\n const [file] = source.split('?', 1);\n const fileSplits = file.split('/');\n\n if (outputFiles.has(fileSplits[fileSplits.length - 1])) {\n return fileSplits[fileSplits.length - 1];\n }\n\n if (outputFiles.has(file)) {\n return join(projectRoot, source);\n }\n return;\n },\n load(id: string) {\n const [file] = id.split('?', 1);\n const relativeFile =\n 'spec-' +\n normalizePath(relative(projectRoot, file))\n .replace('.ts', '.js')\n .replace(/^[./]+/, '_')\n .replace(/\\//g, '-');\n\n const codeContents =\n outputFiles.get(relativeFile)?.contents ||\n outputFiles.get(id)?.contents;\n if (codeContents === undefined) {\n return undefined;\n }\n\n const code = Buffer.from(codeContents).toString('utf-8');\n const mapContents = outputFiles.get(relativeFile + '.map')?.contents;\n\n return {\n // Remove source map URL comments from the code if a sourcemap is present.\n // Vite will inline and add an additional sourcemap URL for the sourcemap.\n code: mapContents\n ? code.replace(/^\\/\\/# sourceMappingURL=[^\\r\\n]*/gm, '')\n : code,\n map: mapContents && Buffer.from(mapContents).toString('utf-8'),\n };\n },\n };\n}\n"],"mappings":";;;;;;;;;AAmBA,eAAsB,0BACpB,SAOC;CACD,MAAM,EAAE,kBAAkB,MAAO,SAC/B,0BACD,EAAE;CACH,MAAM,EAAE,aAAa,aAAa;CAClC,IAAI;CACJ,IAAI;CACJ,MAAM,gBAAgB,SAAS,iBAAiB,QAAQ,KAAK;AAE7D,QAAO;EACL,MAAM;EAEN,SAAS;EACT,OAAO,YAAiB;AACtB,YAAS;AACT,iBAAc,QAAQ,eAAe,OAAO,QAAQ,IAAI;;EAE1D,MAAM,UAAU,QAAgB,UAAkB;AAEhD,OAAI,UAAU,SAAS,OAAO,CAG5B,QAAO;AAGT,OAAI;QAEA,OAAO,OAAO,OACd,cAAc,SAAS,CAAC,WAAW,YAAY,EAC/C;KAEA,MAAM,CAAC,gBAAgB,SAAS,MAAM,KAAK,EAAE;AAC7C,cACE,MAAM,KAAK,QAAQ,SAAS,aAAa,aAAa,CAAC,EAAE,OAAO;;;GAItE,MAAM,CAAC,QAAQ,OAAO,MAAM,KAAK,EAAE;GACnC,MAAM,aAAa,KAAK,MAAM,IAAI;AAElC,OAAI,YAAY,IAAI,WAAW,WAAW,SAAS,GAAG,CACpD,QAAO,WAAW,WAAW,SAAS;AAGxC,OAAI,YAAY,IAAI,KAAK,CACvB,QAAO,KAAK,aAAa,OAAO;;EAIpC,KAAK,IAAY;GACf,MAAM,CAAC,QAAQ,GAAG,MAAM,KAAK,EAAE;GAC/B,MAAM,eACJ,UACA,cAAc,SAAS,aAAa,KAAK,CAAC,CACvC,QAAQ,OAAO,MAAM,CACrB,QAAQ,UAAU,IAAI,CACtB,QAAQ,OAAO,IAAI;GAExB,MAAM,eACJ,YAAY,IAAI,aAAa,EAAE,YAC/B,YAAY,IAAI,GAAG,EAAE;AACvB,OAAI,iBAAiB,KAAA,EACnB;GAGF,MAAM,OAAO,OAAO,KAAK,aAAa,CAAC,SAAS,QAAQ;GACxD,MAAM,cAAc,YAAY,IAAI,eAAe,OAAO,EAAE;AAE5D,UAAO;IAGL,MAAM,cACF,KAAK,QAAQ,sCAAsC,GAAG,GACtD;IACJ,KAAK,eAAe,OAAO,KAAK,YAAY,CAAC,SAAS,QAAQ;IAC/D;;EAEJ"}
@@ -18,7 +18,7 @@ process.env["VITE_CJS_IGNORE_WARNING"] = "true";
18
18
  async function* vitestApplicationBuilder(options, context) {
19
19
  process.env["TEST"] = "true";
20
20
  process.env["VITEST"] = "true";
21
- const { buildApplicationInternal, angularVersion } = await getBuildApplicationFunction();
21
+ const { buildApplicationInternal } = await getBuildApplicationFunction();
22
22
  const { startVitest } = await Function("return import(\"vitest/node\")")();
23
23
  const projectConfig = await context.getProjectMetadata(context.target);
24
24
  const extraArgs = await getExtraArgs(options);
@@ -46,12 +46,10 @@ async function* vitestApplicationBuilder(options, context) {
46
46
  const entryPoints = generateEntryPoints({
47
47
  projectRoot,
48
48
  testFiles: [path.relative(workspaceRoot, options.setupFile), ...includes.map((inc) => path.relative(workspaceRoot, inc))],
49
- context,
50
- angularVersion
49
+ context
51
50
  });
52
51
  const outputFiles = /* @__PURE__ */ new Map();
53
52
  const viteConfig = { plugins: [await createAngularMemoryPlugin({
54
- angularVersion,
55
53
  workspaceRoot,
56
54
  outputFiles
57
55
  }), downlevelPlugin()] };
@@ -139,8 +137,7 @@ function findIncludes(options) {
139
137
  ignore: options.exclude
140
138
  });
141
139
  }
142
- function generateEntryPoints({ projectRoot, testFiles, context, angularVersion }) {
143
- if (angularVersion < 19) return testFiles;
140
+ function generateEntryPoints({ projectRoot, testFiles, context }) {
144
141
  const seen = /* @__PURE__ */ new Set();
145
142
  return new Map(Array.from(testFiles, (testFile) => {
146
143
  const relativePath = path.relative(testFile.startsWith(projectRoot) ? projectRoot : context.workspaceRoot, testFile).replace(/^[./]+/, "_").replace(/\//g, "-");
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.impl.js","names":[],"sources":["../../../../../src/lib/builders/build/vitest.impl.ts"],"sourcesContent":["import { createBuilder } from '@angular-devkit/architect';\nimport { createRequire } from 'node:module';\nimport * as path from 'path';\nimport type { Vitest } from 'vitest/node';\nimport type { Plugin, UserConfig } from 'vite';\nimport type { TestUserConfig as VitestConfig } from 'vitest/node';\nimport { globSync } from 'tinyglobby';\n\nimport { VitestSchema } from './schema';\nimport { createAngularMemoryPlugin } from './plugins/angular-memory-plugin';\nimport { downlevelPlugin } from './plugins/downlevel-plugin';\nimport { getBuildApplicationFunction } from './devkit';\n\nconst _require = createRequire(import.meta.url);\n\nexport enum ResultKind {\n Failure,\n Full,\n Incremental,\n ComponentUpdate,\n}\n\nprocess.env['VITE_CJS_IGNORE_WARNING'] = 'true';\n\nasync function* vitestApplicationBuilder(\n options: VitestSchema,\n context: any,\n): AsyncIterable<{ success: boolean }> {\n process.env['TEST'] = 'true';\n process.env['VITEST'] = 'true';\n\n const { buildApplicationInternal, angularVersion } =\n await getBuildApplicationFunction();\n const { startVitest } = await (Function(\n 'return import(\"vitest/node\")',\n )() as Promise<typeof import('vitest/node')>);\n\n const projectConfig = await context.getProjectMetadata(context.target);\n const extraArgs = await getExtraArgs(options);\n const workspaceRoot = context.workspaceRoot;\n const projectRoot = projectConfig['root'];\n const setupFile = path.relative(projectRoot, options.setupFile);\n\n const config: VitestConfig = {\n root: `${projectRoot || '.'}`,\n watch: options.watch === true,\n config: options.configFile,\n setupFiles: [setupFile],\n globals: true,\n pool: 'vmThreads',\n reporters: ['default'],\n environment: 'jsdom',\n exclude: options?.exclude || [],\n ...extraArgs,\n };\n\n const includes: string[] = findIncludes({\n workspaceRoot,\n projectRoot,\n include: options.include,\n exclude: options.exclude || [],\n });\n\n const testFiles = [\n path.relative(workspaceRoot, options.setupFile),\n ...includes.map((inc) => path.relative(workspaceRoot, inc)),\n ];\n\n const entryPoints = generateEntryPoints({\n projectRoot: projectRoot,\n testFiles,\n context,\n angularVersion,\n });\n\n const outputFiles = new Map();\n\n const viteConfig: any = {\n plugins: [\n (await createAngularMemoryPlugin({\n angularVersion,\n workspaceRoot,\n outputFiles,\n })) as Plugin,\n downlevelPlugin(),\n ],\n };\n\n let server: Vitest | undefined;\n for await (const buildOutput of buildApplicationInternal(\n {\n aot: false,\n index: false,\n progress: false,\n prerender: false,\n optimization: false,\n outputPath: `.angular/.vitest/${projectConfig['name']}`,\n outExtension: 'mjs',\n outputHashing: 2, // None\n tsConfig: path.relative(workspaceRoot, options.tsConfig),\n watch: options.watch === true,\n entryPoints,\n allowedCommonJsDependencies: ['@analogjs/vitest-angular/setup-zone'],\n sourceMap: {\n scripts: true,\n styles: false,\n vendor: false,\n },\n },\n context,\n )) {\n if (buildOutput.kind === ResultKind.Failure) {\n return { success: false };\n } else if (\n buildOutput.kind === ResultKind.Incremental ||\n buildOutput.kind === ResultKind.Full\n ) {\n if (buildOutput.kind === ResultKind.Full) {\n outputFiles.clear();\n Object.keys(buildOutput.files).forEach((key) => {\n outputFiles.set(key, buildOutput.files[key]);\n });\n } else {\n Object.keys(buildOutput.files).forEach((key) => {\n outputFiles.set(key, buildOutput.files[key]);\n });\n }\n }\n\n if (options.watch) {\n if (!server) {\n server = await startVitest('test', [], config, viteConfig);\n } else {\n await server.start([]);\n }\n\n yield { success: true };\n } else {\n server = await startVitest('test', [], config, viteConfig);\n\n const success = server?.state.getCountOfFailedTests() === 0;\n\n yield { success };\n }\n }\n\n yield { success: true };\n}\n\nexport async function getExtraArgs(\n options: VitestSchema,\n): Promise<Record<string, any>> {\n // support passing extra args to Vitest CLI\n const schema = await import('./schema.json', { with: { type: 'json' } });\n const extraArgs: Record<string, any> = {};\n for (const key of Object.keys(options)) {\n if (!(schema as any).default.properties[key]) {\n extraArgs[key] = (options as any)[key];\n }\n }\n\n return extraArgs;\n}\n\n/**\n * Finds test files to include in the Vitest run using tinyglobby pattern matching.\n *\n * This function:\n * 1. Normalizes the project root path to ensure consistent path separators\n * 2. Constructs glob patterns by prepending the project root to each include pattern\n * 3. Uses globSync from tinyglobby to find all files matching the patterns while respecting exclusions\n *\n * @param options Configuration object containing workspace and project paths, include/exclude patterns\n * @returns Array of absolute file paths that match the include patterns\n *\n * Sample output paths:\n * - /workspace/apps/my-app/src/app/app.component.spec.ts\n * - /workspace/apps/my-app/src/app/services/data.service.spec.ts\n * - /workspace/apps/my-app/src/app/components/header/header.component.test.ts\n * - /workspace/apps/my-app/src/app/utils/helpers.spec.ts\n *\n * tinyglobby vs fast-glob comparison:\n * - Both support the same glob patterns and ignore functionality\n * - Both are fast and efficient for file matching\n * - tinyglobby is a lighter alternative with similar API\n * - tinyglobby's globSync returns absolute paths by default when absolute: true is set\n * - tinyglobby has fewer dependencies and smaller bundle size\n *\n * globSync options explained:\n * - dot: true - Includes files/directories that start with a dot (e.g., .env.test)\n * - absolute: true - Returns absolute file paths instead of relative paths\n * - ignore: options.exclude - Excludes files matching the exclude patterns\n */\nfunction findIncludes(options: {\n workspaceRoot: string;\n projectRoot: string;\n include: string[];\n exclude: string[];\n}) {\n const { normalizePath } = _require('vite');\n\n // Normalize project root path to ensure consistent path separators across platforms\n const projectRoot = normalizePath(\n path.resolve(options.workspaceRoot, options.projectRoot),\n );\n\n // Construct glob patterns by prepending project root to each include pattern\n // Example: if include=['**/*.spec.ts'] and projectRoot='/workspace/apps/my-app'\n // Result: ['/workspace/apps/my-app/**/*.spec.ts']\n const globs = [...options.include.map((glob) => `${projectRoot}/${glob}`)];\n\n // Use globSync from tinyglobby to find all files matching the patterns\n // Returns absolute file paths that match the include patterns while respecting exclusions\n return globSync(globs, {\n dot: true, // Include files/directories starting with dot (e.g., .env.test)\n absolute: true, // Return absolute file paths\n ignore: options.exclude, // Exclude files matching these patterns\n });\n}\n\nfunction generateEntryPoints({\n projectRoot,\n testFiles,\n context,\n angularVersion,\n}: {\n projectRoot: string;\n testFiles: string[];\n context: any;\n angularVersion: number;\n}) {\n if (angularVersion < 19) {\n return testFiles;\n }\n\n const seen = new Set();\n\n return new Map(\n Array.from(testFiles, (testFile) => {\n const relativePath = path\n .relative(\n testFile.startsWith(projectRoot)\n ? projectRoot\n : context.workspaceRoot,\n testFile,\n )\n .replace(/^[./]+/, '_')\n .replace(/\\//g, '-');\n\n let uniqueName = `spec-${path.basename(\n relativePath,\n path.extname(relativePath),\n )}`;\n let suffix = 2;\n while (seen.has(uniqueName)) {\n uniqueName = `${relativePath}-${suffix}`;\n ++suffix;\n }\n seen.add(uniqueName);\n\n return [uniqueName, testFile];\n }),\n );\n}\n\nexport default createBuilder(vitestApplicationBuilder) as unknown;\n"],"mappings":"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"}
1
+ {"version":3,"file":"vitest.impl.js","names":[],"sources":["../../../../../src/lib/builders/build/vitest.impl.ts"],"sourcesContent":["import { createBuilder } from '@angular-devkit/architect';\nimport { createRequire } from 'node:module';\nimport * as path from 'path';\nimport type { Vitest } from 'vitest/node';\nimport type { Plugin, UserConfig } from 'vite';\nimport type { TestUserConfig as VitestConfig } from 'vitest/node';\nimport { globSync } from 'tinyglobby';\n\nimport { VitestSchema } from './schema';\nimport { createAngularMemoryPlugin } from './plugins/angular-memory-plugin';\nimport { downlevelPlugin } from './plugins/downlevel-plugin';\nimport { getBuildApplicationFunction } from './devkit';\n\nconst _require = createRequire(import.meta.url);\n\nexport enum ResultKind {\n Failure,\n Full,\n Incremental,\n ComponentUpdate,\n}\n\nprocess.env['VITE_CJS_IGNORE_WARNING'] = 'true';\n\nasync function* vitestApplicationBuilder(\n options: VitestSchema,\n context: any,\n): AsyncIterable<{ success: boolean }> {\n process.env['TEST'] = 'true';\n process.env['VITEST'] = 'true';\n\n const { buildApplicationInternal } = await getBuildApplicationFunction();\n const { startVitest } = await (Function(\n 'return import(\"vitest/node\")',\n )() as Promise<typeof import('vitest/node')>);\n\n const projectConfig = await context.getProjectMetadata(context.target);\n const extraArgs = await getExtraArgs(options);\n const workspaceRoot = context.workspaceRoot;\n const projectRoot = projectConfig['root'];\n const setupFile = path.relative(projectRoot, options.setupFile);\n\n const config: VitestConfig = {\n root: `${projectRoot || '.'}`,\n watch: options.watch === true,\n config: options.configFile,\n setupFiles: [setupFile],\n globals: true,\n pool: 'vmThreads',\n reporters: ['default'],\n environment: 'jsdom',\n exclude: options?.exclude || [],\n ...extraArgs,\n };\n\n const includes: string[] = findIncludes({\n workspaceRoot,\n projectRoot,\n include: options.include,\n exclude: options.exclude || [],\n });\n\n const testFiles = [\n path.relative(workspaceRoot, options.setupFile),\n ...includes.map((inc) => path.relative(workspaceRoot, inc)),\n ];\n\n const entryPoints = generateEntryPoints({\n projectRoot: projectRoot,\n testFiles,\n context,\n });\n\n const outputFiles = new Map();\n\n const viteConfig: any = {\n plugins: [\n (await createAngularMemoryPlugin({\n workspaceRoot,\n outputFiles,\n })) as Plugin,\n downlevelPlugin(),\n ],\n };\n\n let server: Vitest | undefined;\n for await (const buildOutput of buildApplicationInternal(\n {\n aot: false,\n index: false,\n progress: false,\n prerender: false,\n optimization: false,\n outputPath: `.angular/.vitest/${projectConfig['name']}`,\n outExtension: 'mjs',\n outputHashing: 2, // None\n tsConfig: path.relative(workspaceRoot, options.tsConfig),\n watch: options.watch === true,\n entryPoints,\n allowedCommonJsDependencies: ['@analogjs/vitest-angular/setup-zone'],\n sourceMap: {\n scripts: true,\n styles: false,\n vendor: false,\n },\n },\n context,\n )) {\n if (buildOutput.kind === ResultKind.Failure) {\n return { success: false };\n } else if (\n buildOutput.kind === ResultKind.Incremental ||\n buildOutput.kind === ResultKind.Full\n ) {\n if (buildOutput.kind === ResultKind.Full) {\n outputFiles.clear();\n Object.keys(buildOutput.files).forEach((key) => {\n outputFiles.set(key, buildOutput.files[key]);\n });\n } else {\n Object.keys(buildOutput.files).forEach((key) => {\n outputFiles.set(key, buildOutput.files[key]);\n });\n }\n }\n\n if (options.watch) {\n if (!server) {\n server = await startVitest('test', [], config, viteConfig);\n } else {\n await server.start([]);\n }\n\n yield { success: true };\n } else {\n server = await startVitest('test', [], config, viteConfig);\n\n const success = server?.state.getCountOfFailedTests() === 0;\n\n yield { success };\n }\n }\n\n yield { success: true };\n}\n\nexport async function getExtraArgs(\n options: VitestSchema,\n): Promise<Record<string, any>> {\n // support passing extra args to Vitest CLI\n const schema = await import('./schema.json', { with: { type: 'json' } });\n const extraArgs: Record<string, any> = {};\n for (const key of Object.keys(options)) {\n if (!(schema as any).default.properties[key]) {\n extraArgs[key] = (options as any)[key];\n }\n }\n\n return extraArgs;\n}\n\n/**\n * Finds test files to include in the Vitest run using tinyglobby pattern matching.\n *\n * This function:\n * 1. Normalizes the project root path to ensure consistent path separators\n * 2. Constructs glob patterns by prepending the project root to each include pattern\n * 3. Uses globSync from tinyglobby to find all files matching the patterns while respecting exclusions\n *\n * @param options Configuration object containing workspace and project paths, include/exclude patterns\n * @returns Array of absolute file paths that match the include patterns\n *\n * Sample output paths:\n * - /workspace/apps/my-app/src/app/app.component.spec.ts\n * - /workspace/apps/my-app/src/app/services/data.service.spec.ts\n * - /workspace/apps/my-app/src/app/components/header/header.component.test.ts\n * - /workspace/apps/my-app/src/app/utils/helpers.spec.ts\n *\n * tinyglobby vs fast-glob comparison:\n * - Both support the same glob patterns and ignore functionality\n * - Both are fast and efficient for file matching\n * - tinyglobby is a lighter alternative with similar API\n * - tinyglobby's globSync returns absolute paths by default when absolute: true is set\n * - tinyglobby has fewer dependencies and smaller bundle size\n *\n * globSync options explained:\n * - dot: true - Includes files/directories that start with a dot (e.g., .env.test)\n * - absolute: true - Returns absolute file paths instead of relative paths\n * - ignore: options.exclude - Excludes files matching the exclude patterns\n */\nfunction findIncludes(options: {\n workspaceRoot: string;\n projectRoot: string;\n include: string[];\n exclude: string[];\n}) {\n const { normalizePath } = _require('vite');\n\n // Normalize project root path to ensure consistent path separators across platforms\n const projectRoot = normalizePath(\n path.resolve(options.workspaceRoot, options.projectRoot),\n );\n\n // Construct glob patterns by prepending project root to each include pattern\n // Example: if include=['**/*.spec.ts'] and projectRoot='/workspace/apps/my-app'\n // Result: ['/workspace/apps/my-app/**/*.spec.ts']\n const globs = [...options.include.map((glob) => `${projectRoot}/${glob}`)];\n\n // Use globSync from tinyglobby to find all files matching the patterns\n // Returns absolute file paths that match the include patterns while respecting exclusions\n return globSync(globs, {\n dot: true, // Include files/directories starting with dot (e.g., .env.test)\n absolute: true, // Return absolute file paths\n ignore: options.exclude, // Exclude files matching these patterns\n });\n}\n\nfunction generateEntryPoints({\n projectRoot,\n testFiles,\n context,\n}: {\n projectRoot: string;\n testFiles: string[];\n context: any;\n}) {\n const seen = new Set();\n\n return new Map(\n Array.from(testFiles, (testFile) => {\n const relativePath = path\n .relative(\n testFile.startsWith(projectRoot)\n ? projectRoot\n : context.workspaceRoot,\n testFile,\n )\n .replace(/^[./]+/, '_')\n .replace(/\\//g, '-');\n\n let uniqueName = `spec-${path.basename(\n relativePath,\n path.extname(relativePath),\n )}`;\n let suffix = 2;\n while (seen.has(uniqueName)) {\n uniqueName = `${relativePath}-${suffix}`;\n ++suffix;\n }\n seen.add(uniqueName);\n\n return [uniqueName, testFile];\n }),\n );\n}\n\nexport default createBuilder(vitestApplicationBuilder) as unknown;\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export declare const ANALOG_JS_VITE_PLUGIN_ANGULAR = "^3.0.0-alpha.93";
1
+ export declare const ANALOG_JS_VITE_PLUGIN_ANGULAR = "^3.0.0-alpha.95";
2
2
  export declare const JSDOM = "^22.0.0";
3
3
  export declare const VITE_TSCONFIG_PATHS = "^4.2.0";
4
4
  export declare const VITE = "^8.0.0";
@@ -1,5 +1,5 @@
1
1
  //#region packages/vitest-angular-tools/src/schematics/utils/versions.ts
2
- var ANALOG_JS_VITE_PLUGIN_ANGULAR = "^3.0.0-alpha.93";
2
+ var ANALOG_JS_VITE_PLUGIN_ANGULAR = "^3.0.0-alpha.95";
3
3
  var JSDOM = "^22.0.0";
4
4
  var VITE_TSCONFIG_PATHS = "^4.2.0";
5
5
  var VITE = "^8.0.0";
@@ -1 +1 @@
1
- {"version":3,"file":"versions.js","names":[],"sources":["../../../../../../../vitest-angular-tools/src/schematics/utils/versions.ts"],"sourcesContent":["// Version constants (Angular 20+)\nexport const ANALOG_JS_VITE_PLUGIN_ANGULAR = '^3.0.0-alpha.93';\nexport const JSDOM = '^22.0.0';\nexport const VITE_TSCONFIG_PATHS = '^4.2.0';\nexport const VITE = '^8.0.0';\nexport const VITEST_V5 = '^5.0.0';\n\n// Browser mode dependencies\nexport const VITEST_BROWSER_PLAYWRIGHT = '^5.0.0';\nexport const PLAYWRIGHT = '^1.54.0';\n"],"mappings":";AACA,IAAa,gCAAgC;AAC7C,IAAa,QAAQ;AACrB,IAAa,sBAAsB;AACnC,IAAa,OAAO;AACpB,IAAa,YAAY;AAGzB,IAAa,4BAA4B;AACzC,IAAa,aAAa"}
1
+ {"version":3,"file":"versions.js","names":[],"sources":["../../../../../../../vitest-angular-tools/src/schematics/utils/versions.ts"],"sourcesContent":["// Version constants (Angular 20+)\nexport const ANALOG_JS_VITE_PLUGIN_ANGULAR = '^3.0.0-alpha.95';\nexport const JSDOM = '^22.0.0';\nexport const VITE_TSCONFIG_PATHS = '^4.2.0';\nexport const VITE = '^8.0.0';\nexport const VITEST_V5 = '^5.0.0';\n\n// Browser mode dependencies\nexport const VITEST_BROWSER_PLAYWRIGHT = '^5.0.0';\nexport const PLAYWRIGHT = '^1.54.0';\n"],"mappings":";AACA,IAAa,gCAAgC;AAC7C,IAAa,QAAQ;AACrB,IAAa,sBAAsB;AACnC,IAAa,OAAO;AACpB,IAAa,YAAY;AAGzB,IAAa,4BAA4B;AACzC,IAAa,aAAa"}
@@ -1,4 +1,4 @@
1
- export declare const ANALOG_JS_VITE_PLUGIN_ANGULAR = "^3.0.0-alpha.93";
1
+ export declare const ANALOG_JS_VITE_PLUGIN_ANGULAR = "^3.0.0-alpha.95";
2
2
  export declare const JSDOM = "^22.0.0";
3
3
  export declare const VITE_TSCONFIG_PATHS = "^4.2.0";
4
4
  export declare const VITE = "^8.0.0";