@analogjs/vitest-angular 3.0.0-alpha.1 → 3.0.0-alpha.11
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/README.md +2 -2
- package/_virtual/_@oxc-project_runtime@0.120.0/helpers/decorate.js +9 -0
- package/package.json +8 -8
- package/setup-snapshots.d.ts +18 -18
- package/setup-snapshots.js +71 -95
- package/setup-snapshots.js.map +1 -0
- package/setup-testbed.d.ts +12 -5
- package/setup-testbed.js +23 -24
- package/setup-testbed.js.map +1 -0
- package/setup-zone.d.ts +6 -5
- package/setup-zone.js +90 -105
- package/setup-zone.js.map +1 -0
- package/src/index.d.ts +2 -2
- package/src/index.js +3 -4
- package/src/lib/builders/build/devkit.d.ts +2 -2
- package/src/lib/builders/build/devkit.js +23 -17
- package/src/lib/builders/build/devkit.js.map +1 -0
- package/src/lib/builders/build/plugins/angular-memory-plugin.d.ts +13 -20
- package/src/lib/builders/build/plugins/angular-memory-plugin.js +51 -77
- package/src/lib/builders/build/plugins/angular-memory-plugin.js.map +1 -0
- package/src/lib/builders/build/plugins/downlevel-plugin.d.ts +10 -0
- package/src/lib/builders/build/plugins/downlevel-plugin.js +24 -0
- package/src/lib/builders/build/plugins/downlevel-plugin.js.map +1 -0
- package/src/lib/builders/build/schema.js +53 -0
- package/src/lib/builders/build/schema.js.map +1 -0
- package/src/lib/builders/build/schema.json +44 -44
- package/src/lib/builders/build/utils.d.ts +3 -3
- package/src/lib/builders/build/vitest.impl.d.ts +5 -5
- package/src/lib/builders/build/vitest.impl.js +154 -190
- package/src/lib/builders/build/vitest.impl.js.map +1 -0
- package/src/lib/builders/test/schema.js +51 -0
- package/src/lib/builders/test/schema.js.map +1 -0
- package/src/lib/builders/test/schema.json +44 -44
- package/src/lib/builders/test/vitest.impl.d.ts +1 -1
- package/src/lib/builders/test/vitest.impl.js +48 -58
- package/src/lib/builders/test/vitest.impl.js.map +1 -0
- package/src/lib/tools/package.json +1 -5
- package/src/lib/tools/src/index.d.ts +1 -1
- package/src/lib/tools/src/index.js +3 -6
- package/src/lib/tools/src/schematics/setup/index.d.ts +2 -2
- package/src/lib/tools/src/schematics/setup/index.js +46 -71
- package/src/lib/tools/src/schematics/setup/index.js.map +1 -1
- package/src/lib/tools/src/schematics/utils/angular.d.ts +1 -1
- package/src/lib/tools/src/schematics/utils/angular.js +16 -22
- package/src/lib/tools/src/schematics/utils/angular.js.map +1 -1
- package/src/lib/tools/src/schematics/utils/dependencies.d.ts +2 -2
- package/src/lib/tools/src/schematics/utils/dependencies.js +34 -44
- package/src/lib/tools/src/schematics/utils/dependencies.js.map +1 -1
- package/src/lib/tools/src/schematics/utils/index.d.ts +4 -4
- package/src/lib/tools/src/schematics/utils/index.js +4 -8
- package/src/lib/tools/src/schematics/utils/versions.d.ts +1 -1
- package/src/lib/tools/src/schematics/utils/versions.js +17 -12
- package/src/lib/tools/src/schematics/utils/versions.js.map +1 -1
- package/src/lib/tools/src/schematics/utils/workspace.d.ts +8 -8
- package/src/lib/tools/src/schematics/utils/workspace.js +14 -17
- package/src/lib/tools/src/schematics/utils/workspace.js.map +1 -1
- package/src/lib/tools/src/test-global-setup.d.ts +1 -0
- package/src/lib/builders/build/plugins/esbuild-downlevel-plugin.d.ts +0 -7
- package/src/lib/builders/build/plugins/esbuild-downlevel-plugin.js +0 -23
- package/src/lib/builders/build/utils.js +0 -1
- package/src/lib/tools/src/index.js.map +0 -1
- 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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
"
|
|
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,9 +1,9 @@
|
|
|
1
|
-
import { VitestSchema } from
|
|
1
|
+
import { VitestSchema } from "./schema";
|
|
2
2
|
export declare enum ResultKind {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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 {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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
|
-
|
|
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":"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"}
|