@analogjs/vitest-angular 2.4.0-beta.9 → 3.0.0-alpha.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.
Files changed (62) hide show
  1. package/README.md +2 -2
  2. package/_virtual/_@oxc-project_runtime@0.120.0/helpers/decorate.js +9 -0
  3. package/package.json +8 -8
  4. package/setup-snapshots.d.ts +18 -18
  5. package/setup-snapshots.js +71 -95
  6. package/setup-snapshots.js.map +1 -0
  7. package/setup-testbed.d.ts +12 -5
  8. package/setup-testbed.js +23 -24
  9. package/setup-testbed.js.map +1 -0
  10. package/setup-zone.d.ts +6 -5
  11. package/setup-zone.js +90 -105
  12. package/setup-zone.js.map +1 -0
  13. package/src/index.d.ts +2 -2
  14. package/src/index.js +3 -4
  15. package/src/lib/builders/build/devkit.d.ts +2 -2
  16. package/src/lib/builders/build/devkit.js +23 -17
  17. package/src/lib/builders/build/devkit.js.map +1 -0
  18. package/src/lib/builders/build/plugins/angular-memory-plugin.d.ts +13 -20
  19. package/src/lib/builders/build/plugins/angular-memory-plugin.js +51 -77
  20. package/src/lib/builders/build/plugins/angular-memory-plugin.js.map +1 -0
  21. package/src/lib/builders/build/plugins/downlevel-plugin.d.ts +10 -0
  22. package/src/lib/builders/build/plugins/downlevel-plugin.js +24 -0
  23. package/src/lib/builders/build/plugins/downlevel-plugin.js.map +1 -0
  24. package/src/lib/builders/build/schema.js +53 -0
  25. package/src/lib/builders/build/schema.js.map +1 -0
  26. package/src/lib/builders/build/schema.json +44 -44
  27. package/src/lib/builders/build/utils.d.ts +3 -3
  28. package/src/lib/builders/build/vitest.impl.d.ts +5 -5
  29. package/src/lib/builders/build/vitest.impl.js +154 -190
  30. package/src/lib/builders/build/vitest.impl.js.map +1 -0
  31. package/src/lib/builders/test/schema.js +51 -0
  32. package/src/lib/builders/test/schema.js.map +1 -0
  33. package/src/lib/builders/test/schema.json +44 -44
  34. package/src/lib/builders/test/vitest.impl.d.ts +1 -1
  35. package/src/lib/builders/test/vitest.impl.js +48 -58
  36. package/src/lib/builders/test/vitest.impl.js.map +1 -0
  37. package/src/lib/tools/package.json +1 -5
  38. package/src/lib/tools/src/index.d.ts +1 -1
  39. package/src/lib/tools/src/index.js +3 -6
  40. package/src/lib/tools/src/schematics/setup/index.d.ts +2 -2
  41. package/src/lib/tools/src/schematics/setup/index.js +46 -71
  42. package/src/lib/tools/src/schematics/setup/index.js.map +1 -1
  43. package/src/lib/tools/src/schematics/utils/angular.d.ts +1 -1
  44. package/src/lib/tools/src/schematics/utils/angular.js +16 -22
  45. package/src/lib/tools/src/schematics/utils/angular.js.map +1 -1
  46. package/src/lib/tools/src/schematics/utils/dependencies.d.ts +2 -2
  47. package/src/lib/tools/src/schematics/utils/dependencies.js +34 -44
  48. package/src/lib/tools/src/schematics/utils/dependencies.js.map +1 -1
  49. package/src/lib/tools/src/schematics/utils/index.d.ts +4 -4
  50. package/src/lib/tools/src/schematics/utils/index.js +4 -8
  51. package/src/lib/tools/src/schematics/utils/versions.d.ts +1 -1
  52. package/src/lib/tools/src/schematics/utils/versions.js +17 -12
  53. package/src/lib/tools/src/schematics/utils/versions.js.map +1 -1
  54. package/src/lib/tools/src/schematics/utils/workspace.d.ts +8 -8
  55. package/src/lib/tools/src/schematics/utils/workspace.js +14 -17
  56. package/src/lib/tools/src/schematics/utils/workspace.js.map +1 -1
  57. package/src/lib/tools/src/test-global-setup.d.ts +1 -0
  58. package/src/lib/builders/build/plugins/esbuild-downlevel-plugin.d.ts +0 -7
  59. package/src/lib/builders/build/plugins/esbuild-downlevel-plugin.js +0 -23
  60. package/src/lib/builders/build/utils.js +0 -1
  61. package/src/lib/tools/src/index.js.map +0 -1
  62. package/src/lib/tools/src/schematics/utils/index.js.map +0 -1
@@ -0,0 +1,53 @@
1
+ var schema_default = {
2
+ $schema: "http://json-schema.org/draft-07/schema",
3
+ title: "Vitest schema for Test Facade.",
4
+ description: "Vitest target options",
5
+ type: "object",
6
+ properties: {
7
+ "configFile": {
8
+ "type": "string",
9
+ "description": "The path to the local vitest config",
10
+ "x-completion-type": "file",
11
+ "x-completion-glob": "@vitest.config@(.js|.ts|.mts)",
12
+ "aliases": ["config"]
13
+ },
14
+ "include": {
15
+ "type": "array",
16
+ "items": { "type": "string" },
17
+ "default": ["src/**/*.spec.ts"],
18
+ "description": "Globs of files to include, relative to project root."
19
+ },
20
+ "exclude": {
21
+ "type": "array",
22
+ "items": { "type": "string" },
23
+ "default": [
24
+ "node_modules",
25
+ "dist",
26
+ ".idea",
27
+ ".git",
28
+ ".cache"
29
+ ],
30
+ "description": "Globs of files to exclude, relative to the project root."
31
+ },
32
+ "setupFile": {
33
+ "type": "string",
34
+ "description": "The path to the setup file.",
35
+ "default": "src/test-setup.ts"
36
+ },
37
+ "tsConfig": {
38
+ "type": "string",
39
+ "description": "The relative path to the TypeScript configuration file for running tests.",
40
+ "default": "tsconfig.spec.json"
41
+ },
42
+ "watch": {
43
+ "type": "boolean",
44
+ "default": false,
45
+ "description": "Run the tests in watch mode"
46
+ }
47
+ },
48
+ additionalProperties: true
49
+ };
50
+ //#endregion
51
+ export { schema_default as default };
52
+
53
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","names":[],"sources":["../../../../../../../packages/vitest-angular/src/lib/builders/build/schema.json"],"sourcesContent":["{\n \"$schema\": \"http://json-schema.org/draft-07/schema\",\n \"title\": \"Vitest schema for Test Facade.\",\n \"description\": \"Vitest target options\",\n \"type\": \"object\",\n \"properties\": {\n \"configFile\": {\n \"type\": \"string\",\n \"description\": \"The path to the local vitest config\",\n \"x-completion-type\": \"file\",\n \"x-completion-glob\": \"@vitest.config@(.js|.ts|.mts)\",\n \"aliases\": [\"config\"]\n },\n \"include\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"default\": [\"src/**/*.spec.ts\"],\n \"description\": \"Globs of files to include, relative to project root.\"\n },\n \"exclude\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"default\": [\"node_modules\", \"dist\", \".idea\", \".git\", \".cache\"],\n \"description\": \"Globs of files to exclude, relative to the project root.\"\n },\n \"setupFile\": {\n \"type\": \"string\",\n \"description\": \"The path to the setup file.\",\n \"default\": \"src/test-setup.ts\"\n },\n \"tsConfig\": {\n \"type\": \"string\",\n \"description\": \"The relative path to the TypeScript configuration file for running tests.\",\n \"default\": \"tsconfig.spec.json\"\n },\n \"watch\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Run the tests in watch mode\"\n }\n },\n \"additionalProperties\": true\n}\n"],"mappings":""}
@@ -1,47 +1,47 @@
1
1
  {
2
- "$schema": "http://json-schema.org/draft-07/schema",
3
- "title": "Vitest schema for Test Facade.",
4
- "description": "Vitest target options",
5
- "type": "object",
6
- "properties": {
7
- "configFile": {
8
- "type": "string",
9
- "description": "The path to the local vitest config",
10
- "x-completion-type": "file",
11
- "x-completion-glob": "@vitest.config@(.js|.ts|.mts)",
12
- "aliases": ["config"]
13
- },
14
- "include": {
15
- "type": "array",
16
- "items": {
17
- "type": "string"
18
- },
19
- "default": ["src/**/*.spec.ts"],
20
- "description": "Globs of files to include, relative to project root."
21
- },
22
- "exclude": {
23
- "type": "array",
24
- "items": {
25
- "type": "string"
26
- },
27
- "default": ["node_modules", "dist", ".idea", ".git", ".cache"],
28
- "description": "Globs of files to exclude, relative to the project root."
29
- },
30
- "setupFile": {
31
- "type": "string",
32
- "description": "The path to the setup file.",
33
- "default": "src/test-setup.ts"
34
- },
35
- "tsConfig": {
36
- "type": "string",
37
- "description": "The relative path to the TypeScript configuration file for running tests.",
38
- "default": "tsconfig.spec.json"
39
- },
40
- "watch": {
41
- "type": "boolean",
42
- "default": false,
43
- "description": "Run the tests in watch mode"
44
- }
2
+ "$schema": "http://json-schema.org/draft-07/schema",
3
+ "title": "Vitest schema for Test Facade.",
4
+ "description": "Vitest target options",
5
+ "type": "object",
6
+ "properties": {
7
+ "configFile": {
8
+ "type": "string",
9
+ "description": "The path to the local vitest config",
10
+ "x-completion-type": "file",
11
+ "x-completion-glob": "@vitest.config@(.js|.ts|.mts)",
12
+ "aliases": ["config"]
45
13
  },
46
- "additionalProperties": true
14
+ "include": {
15
+ "type": "array",
16
+ "items": {
17
+ "type": "string"
18
+ },
19
+ "default": ["src/**/*.spec.ts"],
20
+ "description": "Globs of files to include, relative to project root."
21
+ },
22
+ "exclude": {
23
+ "type": "array",
24
+ "items": {
25
+ "type": "string"
26
+ },
27
+ "default": ["node_modules", "dist", ".idea", ".git", ".cache"],
28
+ "description": "Globs of files to exclude, relative to the project root."
29
+ },
30
+ "setupFile": {
31
+ "type": "string",
32
+ "description": "The path to the setup file.",
33
+ "default": "src/test-setup.ts"
34
+ },
35
+ "tsConfig": {
36
+ "type": "string",
37
+ "description": "The relative path to the TypeScript configuration file for running tests.",
38
+ "default": "tsconfig.spec.json"
39
+ },
40
+ "watch": {
41
+ "type": "boolean",
42
+ "default": false,
43
+ "description": "Run the tests in watch mode"
44
+ }
45
+ },
46
+ "additionalProperties": true
47
47
  }
@@ -1,5 +1,5 @@
1
1
  export type AngularMemoryOutputFiles = Map<string, {
2
- contents: Uint8Array;
3
- hash: string;
4
- servable: boolean;
2
+ contents: Uint8Array;
3
+ hash: string;
4
+ servable: boolean;
5
5
  }>;
@@ -1,9 +1,9 @@
1
- import { VitestSchema } from './schema';
1
+ import { VitestSchema } from "./schema";
2
2
  export declare enum ResultKind {
3
- Failure = 0,
4
- Full = 1,
5
- Incremental = 2,
6
- ComponentUpdate = 3
3
+ Failure = 0,
4
+ Full = 1,
5
+ Incremental = 2,
6
+ ComponentUpdate = 3
7
7
  }
8
8
  export declare function getExtraArgs(options: VitestSchema): Promise<Record<string, any>>;
9
9
  declare const _default: unknown;
@@ -1,197 +1,161 @@
1
- import { createBuilder } from '@angular-devkit/architect';
2
- import * as path from 'path';
3
- import { globSync } from 'tinyglobby';
4
- import { createAngularMemoryPlugin } from './plugins/angular-memory-plugin';
5
- import { esbuildDownlevelPlugin } from './plugins/esbuild-downlevel-plugin';
6
- import { getBuildApplicationFunction } from './devkit';
7
- export var ResultKind;
8
- (function (ResultKind) {
9
- ResultKind[ResultKind["Failure"] = 0] = "Failure";
10
- ResultKind[ResultKind["Full"] = 1] = "Full";
11
- ResultKind[ResultKind["Incremental"] = 2] = "Incremental";
12
- ResultKind[ResultKind["ComponentUpdate"] = 3] = "ComponentUpdate";
13
- })(ResultKind || (ResultKind = {}));
14
- process.env['VITE_CJS_IGNORE_WARNING'] = 'true';
1
+ import { createAngularMemoryPlugin } from "./plugins/angular-memory-plugin.js";
2
+ import { downlevelPlugin } from "./plugins/downlevel-plugin.js";
3
+ import { getBuildApplicationFunction } from "./devkit.js";
4
+ import { createBuilder } from "@angular-devkit/architect";
5
+ import { createRequire } from "node:module";
6
+ import * as path from "path";
7
+ import { globSync } from "tinyglobby";
8
+ //#region packages/vitest-angular/src/lib/builders/build/vitest.impl.ts
9
+ var _require = createRequire(import.meta.url);
10
+ var ResultKind = /* @__PURE__ */ function(ResultKind) {
11
+ ResultKind[ResultKind["Failure"] = 0] = "Failure";
12
+ ResultKind[ResultKind["Full"] = 1] = "Full";
13
+ ResultKind[ResultKind["Incremental"] = 2] = "Incremental";
14
+ ResultKind[ResultKind["ComponentUpdate"] = 3] = "ComponentUpdate";
15
+ return ResultKind;
16
+ }({});
17
+ process.env["VITE_CJS_IGNORE_WARNING"] = "true";
15
18
  async function* vitestApplicationBuilder(options, context) {
16
- process.env['TEST'] = 'true';
17
- process.env['VITEST'] = 'true';
18
- const { buildApplicationInternal, angularVersion } = await getBuildApplicationFunction();
19
- const { startVitest } = await Function('return import("vitest/node")')();
20
- const projectConfig = await context.getProjectMetadata(context.target);
21
- const extraArgs = await getExtraArgs(options);
22
- const workspaceRoot = context.workspaceRoot;
23
- const projectRoot = projectConfig['root'];
24
- const setupFile = path.relative(projectRoot, options.setupFile);
25
- const config = {
26
- root: `${projectRoot || '.'}`,
27
- watch: options.watch === true,
28
- config: options.configFile,
29
- setupFiles: [setupFile],
30
- globals: true,
31
- pool: 'vmThreads',
32
- reporters: ['default'],
33
- environment: 'jsdom',
34
- exclude: options?.exclude || [],
35
- ...extraArgs,
36
- };
37
- const includes = findIncludes({
38
- workspaceRoot,
39
- projectRoot,
40
- include: options.include,
41
- exclude: options.exclude || [],
42
- });
43
- const testFiles = [
44
- path.relative(workspaceRoot, options.setupFile),
45
- ...includes.map((inc) => path.relative(workspaceRoot, inc)),
46
- ];
47
- const entryPoints = generateEntryPoints({
48
- projectRoot: projectRoot,
49
- testFiles,
50
- context,
51
- angularVersion,
52
- });
53
- const outputFiles = new Map();
54
- const viteConfig = {
55
- plugins: [
56
- (await createAngularMemoryPlugin({
57
- angularVersion,
58
- workspaceRoot,
59
- outputFiles,
60
- })),
61
- await esbuildDownlevelPlugin(),
62
- ],
63
- };
64
- let server;
65
- for await (const buildOutput of buildApplicationInternal({
66
- aot: false,
67
- index: false,
68
- progress: false,
69
- prerender: false,
70
- optimization: false,
71
- outputPath: `.angular/.vitest/${projectConfig['name']}`,
72
- outExtension: 'mjs',
73
- outputHashing: 2, // None
74
- tsConfig: path.relative(workspaceRoot, options.tsConfig),
75
- watch: options.watch === true,
76
- entryPoints,
77
- allowedCommonJsDependencies: ['@analogjs/vitest-angular/setup-zone'],
78
- sourceMap: {
79
- scripts: true,
80
- styles: false,
81
- vendor: false,
82
- },
83
- }, context)) {
84
- if (buildOutput.kind === ResultKind.Failure) {
85
- return { success: false };
86
- }
87
- else if (buildOutput.kind === ResultKind.Incremental ||
88
- buildOutput.kind === ResultKind.Full) {
89
- if (buildOutput.kind === ResultKind.Full) {
90
- outputFiles.clear();
91
- Object.keys(buildOutput.files).forEach((key) => {
92
- outputFiles.set(key, buildOutput.files[key]);
93
- });
94
- }
95
- else {
96
- Object.keys(buildOutput.files).forEach((key) => {
97
- outputFiles.set(key, buildOutput.files[key]);
98
- });
99
- }
100
- }
101
- if (options.watch) {
102
- if (!server) {
103
- server = await startVitest('test', [], config, viteConfig);
104
- }
105
- else {
106
- await server.start([]);
107
- }
108
- yield { success: true };
109
- }
110
- else {
111
- server = await startVitest('test', [], config, viteConfig);
112
- const success = server?.state.getCountOfFailedTests() === 0;
113
- yield { success };
114
- }
115
- }
116
- yield { success: true };
19
+ process.env["TEST"] = "true";
20
+ process.env["VITEST"] = "true";
21
+ const { buildApplicationInternal, angularVersion } = await getBuildApplicationFunction();
22
+ const { startVitest } = await Function("return import(\"vitest/node\")")();
23
+ const projectConfig = await context.getProjectMetadata(context.target);
24
+ const extraArgs = await getExtraArgs(options);
25
+ const workspaceRoot = context.workspaceRoot;
26
+ const projectRoot = projectConfig["root"];
27
+ const setupFile = path.relative(projectRoot, options.setupFile);
28
+ const config = {
29
+ root: `${projectRoot || "."}`,
30
+ watch: options.watch === true,
31
+ config: options.configFile,
32
+ setupFiles: [setupFile],
33
+ globals: true,
34
+ pool: "vmThreads",
35
+ reporters: ["default"],
36
+ environment: "jsdom",
37
+ exclude: options?.exclude || [],
38
+ ...extraArgs
39
+ };
40
+ const includes = findIncludes({
41
+ workspaceRoot,
42
+ projectRoot,
43
+ include: options.include,
44
+ exclude: options.exclude || []
45
+ });
46
+ const entryPoints = generateEntryPoints({
47
+ projectRoot,
48
+ testFiles: [path.relative(workspaceRoot, options.setupFile), ...includes.map((inc) => path.relative(workspaceRoot, inc))],
49
+ context,
50
+ angularVersion
51
+ });
52
+ const outputFiles = /* @__PURE__ */ new Map();
53
+ const viteConfig = { plugins: [await createAngularMemoryPlugin({
54
+ angularVersion,
55
+ workspaceRoot,
56
+ outputFiles
57
+ }), downlevelPlugin()] };
58
+ let server;
59
+ for await (const buildOutput of buildApplicationInternal({
60
+ aot: false,
61
+ index: false,
62
+ progress: false,
63
+ prerender: false,
64
+ optimization: false,
65
+ outputPath: `.angular/.vitest/${projectConfig["name"]}`,
66
+ outExtension: "mjs",
67
+ outputHashing: 2,
68
+ tsConfig: path.relative(workspaceRoot, options.tsConfig),
69
+ watch: options.watch === true,
70
+ entryPoints,
71
+ allowedCommonJsDependencies: ["@analogjs/vitest-angular/setup-zone"],
72
+ sourceMap: {
73
+ scripts: true,
74
+ styles: false,
75
+ vendor: false
76
+ }
77
+ }, context)) {
78
+ if (buildOutput.kind === ResultKind.Failure) return { success: false };
79
+ else if (buildOutput.kind === ResultKind.Incremental || buildOutput.kind === ResultKind.Full) if (buildOutput.kind === ResultKind.Full) {
80
+ outputFiles.clear();
81
+ Object.keys(buildOutput.files).forEach((key) => {
82
+ outputFiles.set(key, buildOutput.files[key]);
83
+ });
84
+ } else Object.keys(buildOutput.files).forEach((key) => {
85
+ outputFiles.set(key, buildOutput.files[key]);
86
+ });
87
+ if (options.watch) {
88
+ if (!server) server = await startVitest("test", [], config, viteConfig);
89
+ else await server.start([]);
90
+ yield { success: true };
91
+ } else {
92
+ server = await startVitest("test", [], config, viteConfig);
93
+ yield { success: server?.state.getCountOfFailedTests() === 0 };
94
+ }
95
+ }
96
+ yield { success: true };
117
97
  }
118
- export async function getExtraArgs(options) {
119
- // support passing extra args to Vitest CLI
120
- const schema = await import('./schema.json', { with: { type: 'json' } });
121
- const extraArgs = {};
122
- for (const key of Object.keys(options)) {
123
- if (!schema.default.properties[key]) {
124
- extraArgs[key] = options[key];
125
- }
126
- }
127
- return extraArgs;
98
+ async function getExtraArgs(options) {
99
+ const schema = await import("./schema.json", { with: { type: "json" } });
100
+ const extraArgs = {};
101
+ for (const key of Object.keys(options)) if (!schema.default.properties[key]) extraArgs[key] = options[key];
102
+ return extraArgs;
128
103
  }
129
104
  /**
130
- * Finds test files to include in the Vitest run using tinyglobby pattern matching.
131
- *
132
- * This function:
133
- * 1. Normalizes the project root path to ensure consistent path separators
134
- * 2. Constructs glob patterns by prepending the project root to each include pattern
135
- * 3. Uses globSync from tinyglobby to find all files matching the patterns while respecting exclusions
136
- *
137
- * @param options Configuration object containing workspace and project paths, include/exclude patterns
138
- * @returns Array of absolute file paths that match the include patterns
139
- *
140
- * Sample output paths:
141
- * - /workspace/apps/my-app/src/app/app.component.spec.ts
142
- * - /workspace/apps/my-app/src/app/services/data.service.spec.ts
143
- * - /workspace/apps/my-app/src/app/components/header/header.component.test.ts
144
- * - /workspace/apps/my-app/src/app/utils/helpers.spec.ts
145
- *
146
- * tinyglobby vs fast-glob comparison:
147
- * - Both support the same glob patterns and ignore functionality
148
- * - Both are fast and efficient for file matching
149
- * - tinyglobby is a lighter alternative with similar API
150
- * - tinyglobby's globSync returns absolute paths by default when absolute: true is set
151
- * - tinyglobby has fewer dependencies and smaller bundle size
152
- *
153
- * globSync options explained:
154
- * - dot: true - Includes files/directories that start with a dot (e.g., .env.test)
155
- * - absolute: true - Returns absolute file paths instead of relative paths
156
- * - ignore: options.exclude - Excludes files matching the exclude patterns
157
- */
105
+ * Finds test files to include in the Vitest run using tinyglobby pattern matching.
106
+ *
107
+ * This function:
108
+ * 1. Normalizes the project root path to ensure consistent path separators
109
+ * 2. Constructs glob patterns by prepending the project root to each include pattern
110
+ * 3. Uses globSync from tinyglobby to find all files matching the patterns while respecting exclusions
111
+ *
112
+ * @param options Configuration object containing workspace and project paths, include/exclude patterns
113
+ * @returns Array of absolute file paths that match the include patterns
114
+ *
115
+ * Sample output paths:
116
+ * - /workspace/apps/my-app/src/app/app.component.spec.ts
117
+ * - /workspace/apps/my-app/src/app/services/data.service.spec.ts
118
+ * - /workspace/apps/my-app/src/app/components/header/header.component.test.ts
119
+ * - /workspace/apps/my-app/src/app/utils/helpers.spec.ts
120
+ *
121
+ * tinyglobby vs fast-glob comparison:
122
+ * - Both support the same glob patterns and ignore functionality
123
+ * - Both are fast and efficient for file matching
124
+ * - tinyglobby is a lighter alternative with similar API
125
+ * - tinyglobby's globSync returns absolute paths by default when absolute: true is set
126
+ * - tinyglobby has fewer dependencies and smaller bundle size
127
+ *
128
+ * globSync options explained:
129
+ * - dot: true - Includes files/directories that start with a dot (e.g., .env.test)
130
+ * - absolute: true - Returns absolute file paths instead of relative paths
131
+ * - ignore: options.exclude - Excludes files matching the exclude patterns
132
+ */
158
133
  function findIncludes(options) {
159
- const { normalizePath } = require('vite');
160
- // Normalize project root path to ensure consistent path separators across platforms
161
- const projectRoot = normalizePath(path.resolve(options.workspaceRoot, options.projectRoot));
162
- // Construct glob patterns by prepending project root to each include pattern
163
- // Example: if include=['**/*.spec.ts'] and projectRoot='/workspace/apps/my-app'
164
- // Result: ['/workspace/apps/my-app/**/*.spec.ts']
165
- const globs = [...options.include.map((glob) => `${projectRoot}/${glob}`)];
166
- // Use globSync from tinyglobby to find all files matching the patterns
167
- // Returns absolute file paths that match the include patterns while respecting exclusions
168
- return globSync(globs, {
169
- dot: true, // Include files/directories starting with dot (e.g., .env.test)
170
- absolute: true, // Return absolute file paths
171
- ignore: options.exclude, // Exclude files matching these patterns
172
- });
134
+ const { normalizePath } = _require("vite");
135
+ const projectRoot = normalizePath(path.resolve(options.workspaceRoot, options.projectRoot));
136
+ return globSync([...options.include.map((glob) => `${projectRoot}/${glob}`)], {
137
+ dot: true,
138
+ absolute: true,
139
+ ignore: options.exclude
140
+ });
173
141
  }
174
- function generateEntryPoints({ projectRoot, testFiles, context, angularVersion, }) {
175
- if (angularVersion < 19) {
176
- return testFiles;
177
- }
178
- const seen = new Set();
179
- return new Map(Array.from(testFiles, (testFile) => {
180
- const relativePath = path
181
- .relative(testFile.startsWith(projectRoot)
182
- ? projectRoot
183
- : context.workspaceRoot, testFile)
184
- .replace(/^[./]+/, '_')
185
- .replace(/\//g, '-');
186
- let uniqueName = `spec-${path.basename(relativePath, path.extname(relativePath))}`;
187
- let suffix = 2;
188
- while (seen.has(uniqueName)) {
189
- uniqueName = `${relativePath}-${suffix}`;
190
- ++suffix;
191
- }
192
- seen.add(uniqueName);
193
- return [uniqueName, testFile];
194
- }));
142
+ function generateEntryPoints({ projectRoot, testFiles, context, angularVersion }) {
143
+ if (angularVersion < 19) return testFiles;
144
+ const seen = /* @__PURE__ */ new Set();
145
+ return new Map(Array.from(testFiles, (testFile) => {
146
+ const relativePath = path.relative(testFile.startsWith(projectRoot) ? projectRoot : context.workspaceRoot, testFile).replace(/^[./]+/, "_").replace(/\//g, "-");
147
+ let uniqueName = `spec-${path.basename(relativePath, path.extname(relativePath))}`;
148
+ let suffix = 2;
149
+ while (seen.has(uniqueName)) {
150
+ uniqueName = `${relativePath}-${suffix}`;
151
+ ++suffix;
152
+ }
153
+ seen.add(uniqueName);
154
+ return [uniqueName, testFile];
155
+ }));
195
156
  }
196
- export default createBuilder(vitestApplicationBuilder);
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZXN0LmltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy92aXRlc3QtYW5ndWxhci9zcmMvbGliL2J1aWxkZXJzL2J1aWxkL3ZpdGVzdC5pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUk3QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBR3RDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2RCxNQUFNLENBQU4sSUFBWSxVQUtYO0FBTEQsV0FBWSxVQUFVO0lBQ3BCLGlEQUFPLENBQUE7SUFDUCwyQ0FBSSxDQUFBO0lBQ0oseURBQVcsQ0FBQTtJQUNYLGlFQUFlLENBQUE7QUFDakIsQ0FBQyxFQUxXLFVBQVUsS0FBVixVQUFVLFFBS3JCO0FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUVoRCxLQUFLLFNBQVMsQ0FBQyxDQUFDLHdCQUF3QixDQUN0QyxPQUFxQixFQUNyQixPQUFZO0lBRVosT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7SUFFL0IsTUFBTSxFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxHQUNoRCxNQUFNLDJCQUEyQixFQUFFLENBQUM7SUFDdEMsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU8sUUFBUSxDQUNyQyw4QkFBOEIsQ0FD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QUFHLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FDcEMsWUFBWSxFQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQzNCLEVBQUUsQ0FBQztRQUNKLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzVCLFVBQVUsR0FBRyxHQUFHLFlBQVksSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN6QyxFQUFFLE1BQU0sQ0FBQztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXJCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCxlQUFlLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9hcmNoaXRlY3QnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB0eXBlIHsgVml0ZXN0IH0gZnJvbSAndml0ZXN0L25vZGUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW4sIFVzZXJDb25maWcgfSBmcm9tICd2aXRlJztcbmltcG9ydCB0eXBlIHsgVGVzdFVzZXJDb25maWcgYXMgVml0ZXN0Q29uZmlnIH0gZnJvbSAndml0ZXN0L25vZGUnO1xuaW1wb3J0IHsgZ2xvYlN5bmMgfSBmcm9tICd0aW55Z2xvYmJ5JztcblxuaW1wb3J0IHsgVml0ZXN0U2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHsgY3JlYXRlQW5ndWxhck1lbW9yeVBsdWdpbiB9IGZyb20gJy4vcGx1Z2lucy9hbmd1bGFyLW1lbW9yeS1wbHVnaW4nO1xuaW1wb3J0IHsgZXNidWlsZERvd25sZXZlbFBsdWdpbiB9IGZyb20gJy4vcGx1Z2lucy9lc2J1aWxkLWRvd25sZXZlbC1wbHVnaW4nO1xuaW1wb3J0IHsgZ2V0QnVpbGRBcHBsaWNhdGlvbkZ1bmN0aW9uIH0gZnJvbSAnLi9kZXZraXQnO1xuXG5leHBvcnQgZW51bSBSZXN1bHRLaW5kIHtcbiAgRmFpbHVyZSxcbiAgRnVsbCxcbiAgSW5jcmVtZW50YWwsXG4gIENvbXBvbmVudFVwZGF0ZSxcbn1cblxucHJvY2Vzcy5lbnZbJ1ZJVEVfQ0pTX0lHTk9SRV9XQVJOSU5HJ10gPSAndHJ1ZSc7XG5cbmFzeW5jIGZ1bmN0aW9uKiB2aXRlc3RBcHBsaWNhdGlvbkJ1aWxkZXIoXG4gIG9wdGlvbnM6IFZpdGVzdFNjaGVtYSxcbiAgY29udGV4dDogYW55LFxuKTogQXN5bmNJdGVyYWJsZTx7IHN1Y2Nlc3M6IGJvb2xlYW4gfT4ge1xuICBwcm9jZXNzLmVudlsnVEVTVCddID0gJ3RydWUnO1xuICBwcm9jZXNzLmVudlsnVklURVNUJ10gPSAndHJ1ZSc7XG5cbiAgY29uc3QgeyBidWlsZEFwcGxpY2F0aW9uSW50ZXJuYWwsIGFuZ3VsYXJWZXJzaW9uIH0gPVxuICAgIGF3YWl0IGdldEJ1aWxkQXBwbGljYXRpb25GdW5jdGlvbigpO1xuICBjb25zdCB7IHN0YXJ0Vml0ZXN0IH0gPSBhd2FpdCAoRnVuY3Rpb24oXG4gICAgJ3JldHVybiBpbXBvcnQoXCJ2aXRlc3Qvbm9kZVwiKScsXG4gICkoKSBhcyBQcm9taXNlPHR5cGVvZiBpbXBvcnQoJ3ZpdGVzdC9ub2RlJyk+KTtcblxuICBjb25zdCBwcm9qZWN0Q29uZmlnID0gYXdhaXQgY29udGV4dC5nZXRQcm9qZWN0TWV0YWRhdGEoY29udGV4dC50YXJnZXQpO1xuICBjb25zdCBleHRyYUFyZ3MgPSBhd2FpdCBnZXRFeHRyYUFyZ3Mob3B0aW9ucyk7XG4gIGNvbnN0IHdvcmtzcGFjZVJvb3QgPSBjb250ZXh0LndvcmtzcGFjZVJvb3Q7XG4gIGNvbnN0IHByb2plY3RSb290ID0gcHJvamVjdENvbmZpZ1sncm9vdCddO1xuICBjb25zdCBzZXR1cEZpbGUgPSBwYXRoLnJlbGF0aXZlKHByb2plY3RSb290LCBvcHRpb25zLnNldHVwRmlsZSk7XG5cbiAgY29uc3QgY29uZmlnOiBWaXRlc3RDb25maWcgPSB7XG4gICAgcm9vdDogYCR7cHJvamVjdFJvb3QgfHwgJy4nfWAsXG4gICAgd2F0Y2g6IG9wdGlvbnMud2F0Y2ggPT09IHRydWUsXG4gICAgY29uZmlnOiBvcHRpb25zLmNvbmZpZ0ZpbGUsXG4gICAgc2V0dXBGaWxlczogW3NldHVwRmlsZV0sXG4gICAgZ2xvYmFsczogdHJ1ZSxcbiAgICBwb29sOiAndm1UaHJlYWRzJyxcbiAgICByZXBvcnRlcnM6IFsnZGVmYXVsdCddLFxuICAgIGVudmlyb25tZW50OiAnanNkb20nLFxuICAgIGV4Y2x1ZGU6IG9wdGlvbnM/LmV4Y2x1ZGUgfHwgW10sXG4gICAgLi4uZXh0cmFBcmdzLFxuICB9O1xuXG4gIGNvbnN0IGluY2x1ZGVzOiBzdHJpbmdbXSA9IGZpbmRJbmNsdWRlcyh7XG4gICAgd29ya3NwYWNlUm9vdCxcbiAgICBwcm9qZWN0Um9vdCxcbiAgICBpbmNsdWRlOiBvcHRpb25zLmluY2x1ZGUsXG4gICAgZXhjbHVkZTogb3B0aW9ucy5leGNsdWRlIHx8IFtdLFxuICB9KTtcblxuICBjb25zdCB0ZXN0RmlsZXMgPSBbXG4gICAgcGF0aC5yZWxhdGl2ZSh3b3Jrc3BhY2VSb290LCBvcHRpb25zLnNldHVwRmlsZSksXG4gICAgLi4uaW5jbHVkZXMubWFwKChpbmMpID0+IHBhdGgucmVsYXRpdmUod29ya3NwYWNlUm9vdCwgaW5jKSksXG4gIF07XG5cbiAgY29uc3QgZW50cnlQb2ludHMgPSBnZW5lcmF0ZUVudHJ5UG9pbnRzKHtcbiAgICBwcm9qZWN0Um9vdDogcHJvamVjdFJvb3QsXG4gICAgdGVzdEZpbGVzLFxuICAgIGNvbnRleHQsXG4gICAgYW5ndWxhclZlcnNpb24sXG4gIH0pO1xuXG4gIGNvbnN0IG91dHB1dEZpbGVzID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0IHZpdGVDb25maWc6IGFueSA9IHtcbiAgICBwbHVnaW5zOiBbXG4gICAgICAoYXdhaXQgY3JlYXRlQW5ndWxhck1lbW9yeVBsdWdpbih7XG4gICAgICAgIGFuZ3VsYXJWZXJzaW9uLFxuICAgICAgICB3b3Jrc3BhY2VSb290LFxuICAgICAgICBvdXRwdXRGaWxlcyxcbiAgICAgIH0pKSBhcyBQbHVnaW4sXG4gICAgICBhd2FpdCBlc2J1aWxkRG93bmxldmVsUGx1Z2luKCksXG4gICAgXSxcbiAgfTtcblxuICBsZXQgc2VydmVyOiBWaXRlc3QgfCB1bmRlZmluZWQ7XG4gIGZvciBhd2FpdCAoY29uc3QgYnVpbGRPdXRwdXQgb2YgYnVpbGRBcHBsaWNhdGlvbkludGVybmFsKFxuICAgIHtcbiAgICAgIGFvdDogZmFsc2UsXG4gICAgICBpbmRleDogZmFsc2UsXG4gICAgICBwcm9ncmVzczogZmFsc2UsXG4gICAgICBwcmVyZW5kZXI6IGZhbHNlLFxuICAgICAgb3B0aW1pemF0aW9uOiBmYWxzZSxcbiAgICAgIG91dHB1dFBhdGg6IGAuYW5ndWxhci8udml0ZXN0LyR7cHJvamVjdENvbmZpZ1snbmFtZSddfWAsXG4gICAgICBvdXRFeHRlbnNpb246ICdtanMnLFxuICAgICAgb3V0cHV0SGFzaGluZzogMiwgLy8gTm9uZVxuICAgICAgdHNDb25maWc6IHBhdGgucmVsYXRpdmUod29ya3NwYWNlUm9vdCwgb3B0aW9ucy50c0NvbmZpZyksXG4gICAgICB3YXRjaDogb3B0aW9ucy53YXRjaCA9PT0gdHJ1ZSxcbiAgICAgIGVudHJ5UG9pbnRzLFxuICAgICAgYWxsb3dlZENvbW1vbkpzRGVwZW5kZW5jaWVzOiBbJ0BhbmFsb2dqcy92aXRlc3QtYW5ndWxhci9zZXR1cC16b25lJ10sXG4gICAgICBzb3VyY2VNYXA6IHtcbiAgICAgICAgc2NyaXB0czogdHJ1ZSxcbiAgICAgICAgc3R5bGVzOiBmYWxzZSxcbiAgICAgICAgdmVuZG9yOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb250ZXh0LFxuICApKSB7XG4gICAgaWYgKGJ1aWxkT3V0cHV0LmtpbmQgPT09IFJlc3VsdEtpbmQuRmFpbHVyZSkge1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UgfTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgYnVpbGRPdXRwdXQua2luZCA9PT0gUmVzdWx0S2luZC5JbmNyZW1lbnRhbCB8fFxuICAgICAgYnVpbGRPdXRwdXQua2luZCA9PT0gUmVzdWx0S2luZC5GdWxsXG4gICAgKSB7XG4gICAgICBpZiAoYnVpbGRPdXRwdXQua2luZCA9PT0gUmVzdWx0S2luZC5GdWxsKSB7XG4gICAgICAgIG91dHB1dEZpbGVzLmNsZWFyKCk7XG4gICAgICAgIE9iamVjdC5rZXlzKGJ1aWxkT3V0cHV0LmZpbGVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBvdXRwdXRGaWxlcy5zZXQoa2V5LCBidWlsZE91dHB1dC5maWxlc1trZXldKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3Qua2V5cyhidWlsZE91dHB1dC5maWxlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgb3V0cHV0RmlsZXMuc2V0KGtleSwgYnVpbGRPdXRwdXQuZmlsZXNba2V5XSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLndhdGNoKSB7XG4gICAgICBpZiAoIXNlcnZlcikge1xuICAgICAgICBzZXJ2ZXIgPSBhd2FpdCBzdGFydFZpdGVzdCgndGVzdCcsIFtdLCBjb25maWcsIHZpdGVDb25maWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgc2VydmVyLnN0YXJ0KFtdKTtcbiAgICAgIH1cblxuICAgICAgeWllbGQgeyBzdWNjZXNzOiB0cnVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlcnZlciA9IGF3YWl0IHN0YXJ0Vml0ZXN0KCd0ZXN0JywgW10sIGNvbmZpZywgdml0ZUNvbmZpZyk7XG5cbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBzZXJ2ZXI/LnN0YXRlLmdldENvdW50T2ZGYWlsZWRUZXN0cygpID09PSAwO1xuXG4gICAgICB5aWVsZCB7IHN1Y2Nlc3MgfTtcbiAgICB9XG4gIH1cblxuICB5aWVsZCB7IHN1Y2Nlc3M6IHRydWUgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhQXJncyhcbiAgb3B0aW9uczogVml0ZXN0U2NoZW1hLFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gIC8vIHN1cHBvcnQgcGFzc2luZyBleHRyYSBhcmdzIHRvIFZpdGVzdCBDTElcbiAgY29uc3Qgc2NoZW1hID0gYXdhaXQgaW1wb3J0KCcuL3NjaGVtYS5qc29uJywgeyB3aXRoOiB7IHR5cGU6ICdqc29uJyB9IH0pO1xuICBjb25zdCBleHRyYUFyZ3M6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob3B0aW9ucykpIHtcbiAgICBpZiAoIShzY2hlbWEgYXMgYW55KS5kZWZhdWx0LnByb3BlcnRpZXNba2V5XSkge1xuICAgICAgZXh0cmFBcmdzW2tleV0gPSAob3B0aW9ucyBhcyBhbnkpW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4dHJhQXJncztcbn1cblxuLyoqXG4gKiBGaW5kcyB0ZXN0IGZpbGVzIHRvIGluY2x1ZGUgaW4gdGhlIFZpdGVzdCBydW4gdXNpbmcgdGlueWdsb2JieSBwYXR0ZXJuIG1hdGNoaW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb246XG4gKiAxLiBOb3JtYWxpemVzIHRoZSBwcm9qZWN0IHJvb3QgcGF0aCB0byBlbnN1cmUgY29uc2lzdGVudCBwYXRoIHNlcGFyYXRvcnNcbiAqIDIuIENvbnN0cnVjdHMgZ2xvYiBwYXR0ZXJucyBieSBwcmVwZW5kaW5nIHRoZSBwcm9qZWN0IHJvb3QgdG8gZWFjaCBpbmNsdWRlIHBhdHRlcm5cbiAqIDMuIFVzZXMgZ2xvYlN5bmMgZnJvbSB0aW55Z2xvYmJ5IHRvIGZpbmQgYWxsIGZpbGVzIG1hdGNoaW5nIHRoZSBwYXR0ZXJucyB3aGlsZSByZXNwZWN0aW5nIGV4Y2x1c2lvbnNcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9iamVjdCBjb250YWluaW5nIHdvcmtzcGFjZSBhbmQgcHJvamVjdCBwYXRocywgaW5jbHVkZS9leGNsdWRlIHBhdHRlcm5zXG4gKiBAcmV0dXJucyBBcnJheSBvZiBhYnNvbHV0ZSBmaWxlIHBhdGhzIHRoYXQgbWF0Y2ggdGhlIGluY2x1ZGUgcGF0dGVybnNcbiAqXG4gKiBTYW1wbGUgb3V0cHV0IHBhdGhzOlxuICogLSAvd29ya3NwYWNlL2FwcHMvbXktYXBwL3NyYy9hcHAvYXBwLmNvbXBvbmVudC5zcGVjLnRzXG4gKiAtIC93b3Jrc3BhY2UvYXBwcy9teS1hcHAvc3JjL2FwcC9zZXJ2aWNlcy9kYXRhLnNlcnZpY2Uuc3BlYy50c1xuICogLSAvd29ya3NwYWNlL2FwcHMvbXktYXBwL3NyYy9hcHAvY29tcG9uZW50cy9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudC50ZXN0LnRzXG4gKiAtIC93b3Jrc3BhY2UvYXBwcy9teS1hcHAvc3JjL2FwcC91dGlscy9oZWxwZXJzLnNwZWMudHNcbiAqXG4gKiB0aW55Z2xvYmJ5IHZzIGZhc3QtZ2xvYiBjb21wYXJpc29uOlxuICogLSBCb3RoIHN1cHBvcnQgdGhlIHNhbWUgZ2xvYiBwYXR0ZXJucyBhbmQgaWdub3JlIGZ1bmN0aW9uYWxpdHlcbiAqIC0gQm90aCBhcmUgZmFzdCBhbmQgZWZmaWNpZW50IGZvciBmaWxlIG1hdGNoaW5nXG4gKiAtIHRpbnlnbG9iYnkgaXMgYSBsaWdodGVyIGFsdGVybmF0aXZlIHdpdGggc2ltaWxhciBBUElcbiAqIC0gdGlueWdsb2JieSdzIGdsb2JTeW5jIHJldHVybnMgYWJzb2x1dGUgcGF0aHMgYnkgZGVmYXVsdCB3aGVuIGFic29sdXRlOiB0cnVlIGlzIHNldFxuICogLSB0aW55Z2xvYmJ5IGhhcyBmZXdlciBkZXBlbmRlbmNpZXMgYW5kIHNtYWxsZXIgYnVuZGxlIHNpemVcbiAqXG4gKiBnbG9iU3luYyBvcHRpb25zIGV4cGxhaW5lZDpcbiAqIC0gZG90OiB0cnVlIC0gSW5jbHVkZXMgZmlsZXMvZGlyZWN0b3JpZXMgdGhhdCBzdGFydCB3aXRoIGEgZG90IChlLmcuLCAuZW52LnRlc3QpXG4gKiAtIGFic29sdXRlOiB0cnVlIC0gUmV0dXJucyBhYnNvbHV0ZSBmaWxlIHBhdGhzIGluc3RlYWQgb2YgcmVsYXRpdmUgcGF0aHNcbiAqIC0gaWdub3JlOiBvcHRpb25zLmV4Y2x1ZGUgLSBFeGNsdWRlcyBmaWxlcyBtYXRjaGluZyB0aGUgZXhjbHVkZSBwYXR0ZXJuc1xuICovXG5mdW5jdGlvbiBmaW5kSW5jbHVkZXMob3B0aW9uczoge1xuICB3b3Jrc3BhY2VSb290OiBzdHJpbmc7XG4gIHByb2plY3RSb290OiBzdHJpbmc7XG4gIGluY2x1ZGU6IHN0cmluZ1tdO1xuICBleGNsdWRlOiBzdHJpbmdbXTtcbn0pIHtcbiAgY29uc3QgeyBub3JtYWxpemVQYXRoIH0gPSByZXF1aXJlKCd2aXRlJyk7XG5cbiAgLy8gTm9ybWFsaXplIHByb2plY3Qgcm9vdCBwYXRoIHRvIGVuc3VyZSBjb25zaXN0ZW50IHBhdGggc2VwYXJhdG9ycyBhY3Jvc3MgcGxhdGZvcm1zXG4gIGNvbnN0IHByb2plY3RSb290ID0gbm9ybWFsaXplUGF0aChcbiAgICBwYXRoLnJlc29sdmUob3B0aW9ucy53b3Jrc3BhY2VSb290LCBvcHRpb25zLnByb2plY3RSb290KSxcbiAgKTtcblxuICAvLyBDb25zdHJ1Y3QgZ2xvYiBwYXR0ZXJucyBieSBwcmVwZW5kaW5nIHByb2plY3Qgcm9vdCB0byBlYWNoIGluY2x1ZGUgcGF0dGVyblxuICAvLyBFeGFtcGxlOiBpZiBpbmNsdWRlPVsnKiovKi5zcGVjLnRzJ10gYW5kIHByb2plY3RSb290PScvd29ya3NwYWNlL2FwcHMvbXktYXBwJ1xuICAvLyBSZXN1bHQ6IFsnL3dvcmtzcGFjZS9hcHBzL215LWFwcC8qKi8qLnNwZWMudHMnXVxuICBjb25zdCBnbG9icyA9IFsuLi5vcHRpb25zLmluY2x1ZGUubWFwKChnbG9iKSA9PiBgJHtwcm9qZWN0Um9vdH0vJHtnbG9ifWApXTtcblxuICAvLyBVc2UgZ2xvYlN5bmMgZnJvbSB0aW55Z2xvYmJ5IHRvIGZpbmQgYWxsIGZpbGVzIG1hdGNoaW5nIHRoZSBwYXR0ZXJuc1xuICAvLyBSZXR1cm5zIGFic29sdXRlIGZpbGUgcGF0aHMgdGhhdCBtYXRjaCB0aGUgaW5jbHVkZSBwYXR0ZXJucyB3aGlsZSByZXNwZWN0aW5nIGV4Y2x1c2lvbnNcbiAgcmV0dXJuIGdsb2JTeW5jKGdsb2JzLCB7XG4gICAgZG90OiB0cnVlLCAvLyBJbmNsdWRlIGZpbGVzL2RpcmVjdG9yaWVzIHN0YXJ0aW5nIHdpdGggZG90IChlLmcuLCAuZW52LnRlc3QpXG4gICAgYWJzb2x1dGU6IHRydWUsIC8vIFJldHVybiBhYnNvbHV0ZSBmaWxlIHBhdGhzXG4gICAgaWdub3JlOiBvcHRpb25zLmV4Y2x1ZGUsIC8vIEV4Y2x1ZGUgZmlsZXMgbWF0Y2hpbmcgdGhlc2UgcGF0dGVybnNcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRW50cnlQb2ludHMoe1xuICBwcm9qZWN0Um9vdCxcbiAgdGVzdEZpbGVzLFxuICBjb250ZXh0LFxuICBhbmd1bGFyVmVyc2lvbixcbn06IHtcbiAgcHJvamVjdFJvb3Q6IHN0cmluZztcbiAgdGVzdEZpbGVzOiBzdHJpbmdbXTtcbiAgY29udGV4dDogYW55O1xuICBhbmd1bGFyVmVyc2lvbjogbnVtYmVyO1xufSkge1xuICBpZiAoYW5ndWxhclZlcnNpb24gPCAxOSkge1xuICAgIHJldHVybiB0ZXN0RmlsZXM7XG4gIH1cblxuICBjb25zdCBzZWVuID0gbmV3IFNldCgpO1xuXG4gIHJldHVybiBuZXcgTWFwKFxuICAgIEFycmF5LmZyb20odGVzdEZpbGVzLCAodGVzdEZpbGUpID0+IHtcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGhcbiAgICAgICAgLnJlbGF0aXZlKFxuICAgICAgICAgIHRlc3RGaWxlLnN0YXJ0c1dpdGgocHJvamVjdFJvb3QpXG4gICAgICAgICAgICA/IHByb2plY3RSb290XG4gICAgICAgICAgICA6IGNvbnRleHQud29ya3NwYWNlUm9vdCxcbiAgICAgICAgICB0ZXN0RmlsZSxcbiAgICAgICAgKVxuICAgICAgICAucmVwbGFjZSgvXlsuL10rLywgJ18nKVxuICAgICAgICAucmVwbGFjZSgvXFwvL2csICctJyk7XG5cbiAgICAgIGxldCB1bmlxdWVOYW1lID0gYHNwZWMtJHtwYXRoLmJhc2VuYW1lKFxuICAgICAgICByZWxhdGl2ZVBhdGgsXG4gICAgICAgIHBhdGguZXh0bmFtZShyZWxhdGl2ZVBhdGgpLFxuICAgICAgKX1gO1xuICAgICAgbGV0IHN1ZmZpeCA9IDI7XG4gICAgICB3aGlsZSAoc2Vlbi5oYXModW5pcXVlTmFtZSkpIHtcbiAgICAgICAgdW5pcXVlTmFtZSA9IGAke3JlbGF0aXZlUGF0aH0tJHtzdWZmaXh9YDtcbiAgICAgICAgKytzdWZmaXg7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZCh1bmlxdWVOYW1lKTtcblxuICAgICAgcmV0dXJuIFt1bmlxdWVOYW1lLCB0ZXN0RmlsZV07XG4gICAgfSksXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUJ1aWxkZXIodml0ZXN0QXBwbGljYXRpb25CdWlsZGVyKSBhcyB1bmtub3duO1xuIl19
157
+ var vitest_impl_default = createBuilder(vitestApplicationBuilder);
158
+ //#endregion
159
+ export { vitest_impl_default as default };
160
+
161
+ //# sourceMappingURL=vitest.impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.impl.js","names":[],"sources":["../../../../../../../packages/vitest-angular/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":";;;;;;;;AAaA,IAAM,WAAW,cAAc,OAAO,KAAK,IAAI;AAE/C,IAAY,aAAL,yBAAA,YAAA;AACL,YAAA,WAAA,aAAA,KAAA;AACA,YAAA,WAAA,UAAA,KAAA;AACA,YAAA,WAAA,iBAAA,KAAA;AACA,YAAA,WAAA,qBAAA,KAAA;;KACD;AAED,QAAQ,IAAI,6BAA6B;AAEzC,gBAAgB,yBACd,SACA,SACqC;AACrC,SAAQ,IAAI,UAAU;AACtB,SAAQ,IAAI,YAAY;CAExB,MAAM,EAAE,0BAA0B,mBAChC,MAAM,6BAA6B;CACrC,MAAM,EAAE,gBAAgB,MAAO,SAC7B,iCACD,EAAE;CAEH,MAAM,gBAAgB,MAAM,QAAQ,mBAAmB,QAAQ,OAAO;CACtE,MAAM,YAAY,MAAM,aAAa,QAAQ;CAC7C,MAAM,gBAAgB,QAAQ;CAC9B,MAAM,cAAc,cAAc;CAClC,MAAM,YAAY,KAAK,SAAS,aAAa,QAAQ,UAAU;CAE/D,MAAM,SAAuB;EAC3B,MAAM,GAAG,eAAe;EACxB,OAAO,QAAQ,UAAU;EACzB,QAAQ,QAAQ;EAChB,YAAY,CAAC,UAAU;EACvB,SAAS;EACT,MAAM;EACN,WAAW,CAAC,UAAU;EACtB,aAAa;EACb,SAAS,SAAS,WAAW,EAAE;EAC/B,GAAG;EACJ;CAED,MAAM,WAAqB,aAAa;EACtC;EACA;EACA,SAAS,QAAQ;EACjB,SAAS,QAAQ,WAAW,EAAE;EAC/B,CAAC;CAOF,MAAM,cAAc,oBAAoB;EACzB;EACb,WAPgB,CAChB,KAAK,SAAS,eAAe,QAAQ,UAAU,EAC/C,GAAG,SAAS,KAAK,QAAQ,KAAK,SAAS,eAAe,IAAI,CAAC,CAC5D;EAKC;EACA;EACD,CAAC;CAEF,MAAM,8BAAc,IAAI,KAAK;CAE7B,MAAM,aAAkB,EACtB,SAAS,CACN,MAAM,0BAA0B;EAC/B;EACA;EACA;EACD,CAAC,EACF,iBAAiB,CAClB,EACF;CAED,IAAI;AACJ,YAAW,MAAM,eAAe,yBAC9B;EACE,KAAK;EACL,OAAO;EACP,UAAU;EACV,WAAW;EACX,cAAc;EACd,YAAY,oBAAoB,cAAc;EAC9C,cAAc;EACd,eAAe;EACf,UAAU,KAAK,SAAS,eAAe,QAAQ,SAAS;EACxD,OAAO,QAAQ,UAAU;EACzB;EACA,6BAA6B,CAAC,sCAAsC;EACpE,WAAW;GACT,SAAS;GACT,QAAQ;GACR,QAAQ;GACT;EACF,EACD,QACD,EAAE;AACD,MAAI,YAAY,SAAS,WAAW,QAClC,QAAO,EAAE,SAAS,OAAO;WAEzB,YAAY,SAAS,WAAW,eAChC,YAAY,SAAS,WAAW,KAEhC,KAAI,YAAY,SAAS,WAAW,MAAM;AACxC,eAAY,OAAO;AACnB,UAAO,KAAK,YAAY,MAAM,CAAC,SAAS,QAAQ;AAC9C,gBAAY,IAAI,KAAK,YAAY,MAAM,KAAK;KAC5C;QAEF,QAAO,KAAK,YAAY,MAAM,CAAC,SAAS,QAAQ;AAC9C,eAAY,IAAI,KAAK,YAAY,MAAM,KAAK;IAC5C;AAIN,MAAI,QAAQ,OAAO;AACjB,OAAI,CAAC,OACH,UAAS,MAAM,YAAY,QAAQ,EAAE,EAAE,QAAQ,WAAW;OAE1D,OAAM,OAAO,MAAM,EAAE,CAAC;AAGxB,SAAM,EAAE,SAAS,MAAM;SAClB;AACL,YAAS,MAAM,YAAY,QAAQ,EAAE,EAAE,QAAQ,WAAW;AAI1D,SAAM,EAAE,SAFQ,QAAQ,MAAM,uBAAuB,KAAK,GAEzC;;;AAIrB,OAAM,EAAE,SAAS,MAAM;;AAGzB,eAAsB,aACpB,SAC8B;CAE9B,MAAM,SAAS,MAAM,OAAO,iBAAiB,EAAE,MAAM,EAAE,MAAM,QAAQ,EAAE;CACvE,MAAM,YAAiC,EAAE;AACzC,MAAK,MAAM,OAAO,OAAO,KAAK,QAAQ,CACpC,KAAI,CAAE,OAAe,QAAQ,WAAW,KACtC,WAAU,OAAQ,QAAgB;AAItC,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCT,SAAS,aAAa,SAKnB;CACD,MAAM,EAAE,kBAAkB,SAAS,OAAO;CAG1C,MAAM,cAAc,cAClB,KAAK,QAAQ,QAAQ,eAAe,QAAQ,YAAY,CACzD;AASD,QAAO,SAJO,CAAC,GAAG,QAAQ,QAAQ,KAAK,SAAS,GAAG,YAAY,GAAG,OAAO,CAAC,EAInD;EACrB,KAAK;EACL,UAAU;EACV,QAAQ,QAAQ;EACjB,CAAC;;AAGJ,SAAS,oBAAoB,EAC3B,aACA,WACA,SACA,kBAMC;AACD,KAAI,iBAAiB,GACnB,QAAO;CAGT,MAAM,uBAAO,IAAI,KAAK;AAEtB,QAAO,IAAI,IACT,MAAM,KAAK,YAAY,aAAa;EAClC,MAAM,eAAe,KAClB,SACC,SAAS,WAAW,YAAY,GAC5B,cACA,QAAQ,eACZ,SACD,CACA,QAAQ,UAAU,IAAI,CACtB,QAAQ,OAAO,IAAI;EAEtB,IAAI,aAAa,QAAQ,KAAK,SAC5B,cACA,KAAK,QAAQ,aAAa,CAC3B;EACD,IAAI,SAAS;AACb,SAAO,KAAK,IAAI,WAAW,EAAE;AAC3B,gBAAa,GAAG,aAAa,GAAG;AAChC,KAAE;;AAEJ,OAAK,IAAI,WAAW;AAEpB,SAAO,CAAC,YAAY,SAAS;GAC7B,CACH;;AAGH,IAAA,sBAAe,cAAc,yBAAyB"}