@analogjs/vitest-angular 2.2.3 → 2.3.0-beta.5
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 +16 -5
- package/package.json +3 -1
- package/src/lib/tools/collection.json +10 -0
- package/src/lib/tools/package.json +7 -0
- package/src/lib/tools/src/index.d.ts +1 -0
- package/src/lib/tools/src/index.js +6 -0
- package/src/lib/tools/src/index.js.map +1 -0
- package/src/lib/tools/src/schematics/jsonc-parser.d.ts +3 -0
- package/src/lib/tools/src/schematics/semver.d.ts +7 -0
- package/src/lib/tools/src/schematics/setup/files/src/test-setup.ts.template +38 -0
- package/src/lib/tools/src/schematics/setup/files/vite.config.mts.template +34 -0
- package/src/lib/tools/src/schematics/setup/index.d.ts +3 -0
- package/src/lib/tools/src/schematics/setup/index.js +80 -0
- package/src/lib/tools/src/schematics/setup/index.js.map +1 -0
- package/src/lib/tools/src/schematics/setup/schema.d.ts +4 -0
- package/src/lib/tools/src/schematics/setup/schema.json +23 -0
- package/src/lib/tools/src/schematics/utils/angular.d.ts +3 -0
- package/src/lib/tools/src/schematics/utils/angular.js +27 -0
- package/src/lib/tools/src/schematics/utils/angular.js.map +1 -0
- package/src/lib/tools/src/schematics/utils/dependencies.d.ts +6 -0
- package/src/lib/tools/src/schematics/utils/dependencies.js +49 -0
- package/src/lib/tools/src/schematics/utils/dependencies.js.map +1 -0
- package/src/lib/tools/src/schematics/utils/index.d.ts +4 -0
- package/src/lib/tools/src/schematics/utils/index.js +8 -0
- package/src/lib/tools/src/schematics/utils/index.js.map +1 -0
- package/src/lib/tools/src/schematics/utils/versions.d.ts +7 -0
- package/src/lib/tools/src/schematics/utils/versions.js +13 -0
- package/src/lib/tools/src/schematics/utils/versions.js.map +1 -0
- package/src/lib/tools/src/schematics/utils/workspace.d.ts +15 -0
- package/src/lib/tools/src/schematics/utils/workspace.js +24 -0
- package/src/lib/tools/src/schematics/utils/workspace.js.map +1 -0
package/README.md
CHANGED
|
@@ -41,18 +41,29 @@ yarn install @analogjs/vitest-angular vitest --dev
|
|
|
41
41
|
|
|
42
42
|
A schematic can be used to setup Vitest in an existing Angular project:
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
Run the schematic to set up the Vite config, test configuration files, and update the test configuration.
|
|
45
45
|
|
|
46
46
|
```sh
|
|
47
|
-
|
|
47
|
+
npx ng generate @analogjs/vitest-angular:setup --project [your-project-name]
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
### Schematic Options
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
| Option | Type | Default | Description |
|
|
53
|
+
| ------------- | ------- | ------- | ----------------------------------------------------------- |
|
|
54
|
+
| `project` | string | - | The name of the project to configure (required) |
|
|
55
|
+
| `browserMode` | boolean | `false` | Configure Vitest to run tests in a browser using Playwright |
|
|
56
|
+
|
|
57
|
+
To enable browser mode during setup:
|
|
58
|
+
|
|
59
|
+
```shell
|
|
60
|
+
ng g @analogjs/vitest-angular:setup --project [your-project-name] --browserMode
|
|
54
61
|
```
|
|
55
62
|
|
|
63
|
+
This automatically installs Playwright dependencies and configures Vitest for browser testing. See [Setup for Running Tests in the Browser](#setup-for-running-tests-in-the-browser) for more details.
|
|
64
|
+
|
|
65
|
+
If using browser mode, run `npx playwright install` after the schematic to ensure playwright is installed and configured.
|
|
66
|
+
|
|
56
67
|
## Manual Setup
|
|
57
68
|
|
|
58
69
|
Vitest can be setup manually also using the steps below.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@analogjs/vitest-angular",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0-beta.5",
|
|
4
4
|
"description": "Vitest Builder for Angular",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "Brandon Roberts <robertsbt@gmail.com>",
|
|
@@ -31,12 +31,14 @@
|
|
|
31
31
|
"url": "https://github.com/sponsors/brandonroberts"
|
|
32
32
|
},
|
|
33
33
|
"builders": "./builders.json",
|
|
34
|
+
"schematics": "./src/lib/tools/collection.json",
|
|
34
35
|
"ng-add": {
|
|
35
36
|
"save": "devDependencies"
|
|
36
37
|
},
|
|
37
38
|
"peerDependencies": {
|
|
38
39
|
"@analogjs/vite-plugin-angular": "*",
|
|
39
40
|
"@angular-devkit/architect": ">=0.1500.0 < 0.2200.0",
|
|
41
|
+
"@angular-devkit/schematics": ">=17.0.0",
|
|
40
42
|
"vitest": "^1.3.1 || ^2.0.0 || ^3.0.0 || ^4.0.0"
|
|
41
43
|
},
|
|
42
44
|
"ng-update": {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../node_modules/@angular-devkit/schematics/collection-schema.json",
|
|
3
|
+
"schematics": {
|
|
4
|
+
"setup": {
|
|
5
|
+
"description": "Configure Vitest for an Angular project",
|
|
6
|
+
"factory": "./src/schematics/setup/index#setupSchematic",
|
|
7
|
+
"schema": "./src/schematics/setup/schema.json"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { setupSchematic } from './schematics/setup/index';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupSchematic = void 0;
|
|
4
|
+
var index_1 = require("./schematics/setup/index");
|
|
5
|
+
Object.defineProperty(exports, "setupSchematic", { enumerable: true, get: function () { return index_1.setupSchematic; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/vitest-angular-tools/src/index.ts"],"names":[],"mappings":";;;AAAA,kDAA0D;AAAjD,uGAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<% if (majorAngularVersion > 20) { %>
|
|
2
|
+
import '@angular/compiler';
|
|
3
|
+
import '@analogjs/vitest-angular/setup-snapshots';
|
|
4
|
+
import { setupTestBed } from '@analogjs/vitest-angular/setup-testbed';
|
|
5
|
+
|
|
6
|
+
<% if (browserMode) { %>
|
|
7
|
+
setupTestBed({ browserMode: true });
|
|
8
|
+
<% } else { %>
|
|
9
|
+
setupTestBed();
|
|
10
|
+
<% } %>
|
|
11
|
+
<% } else if (majorAngularVersion > 19) { %>
|
|
12
|
+
import '@angular/compiler';
|
|
13
|
+
import '@analogjs/vitest-angular/setup-zone';
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
BrowserTestingModule,
|
|
17
|
+
platformBrowserTesting,
|
|
18
|
+
} from '@angular/platform-browser/testing';
|
|
19
|
+
import { getTestBed } from '@angular/core/testing';
|
|
20
|
+
|
|
21
|
+
getTestBed().initTestEnvironment(
|
|
22
|
+
BrowserTestingModule,
|
|
23
|
+
platformBrowserTesting()
|
|
24
|
+
);
|
|
25
|
+
<% } else { %>
|
|
26
|
+
import '@analogjs/vitest-angular/setup-zone';
|
|
27
|
+
|
|
28
|
+
import {
|
|
29
|
+
BrowserDynamicTestingModule,
|
|
30
|
+
platformBrowserDynamicTesting,
|
|
31
|
+
} from '@angular/platform-browser-dynamic/testing';
|
|
32
|
+
import { getTestBed } from '@angular/core/testing';
|
|
33
|
+
|
|
34
|
+
getTestBed().initTestEnvironment(
|
|
35
|
+
BrowserDynamicTestingModule,
|
|
36
|
+
platformBrowserDynamicTesting()
|
|
37
|
+
);
|
|
38
|
+
<% } %>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/// <reference types="vitest" />
|
|
2
|
+
|
|
3
|
+
import { defineConfig } from 'vite';
|
|
4
|
+
import angular from '@analogjs/vite-plugin-angular';
|
|
5
|
+
<% if (isNx) { %>import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
|
|
6
|
+
<% } else { %>import viteTsConfigPaths from 'vite-tsconfig-paths';<% } %>
|
|
7
|
+
<% if (browserMode) { %>import { playwright } from '@vitest/browser-playwright';<% } %>
|
|
8
|
+
|
|
9
|
+
// https://vitejs.dev/config/
|
|
10
|
+
export default defineConfig(({ mode }) => ({
|
|
11
|
+
<% if (isNx) { %>
|
|
12
|
+
plugins: [angular(), nxViteTsPaths()],
|
|
13
|
+
<% } else { %>
|
|
14
|
+
plugins: [angular(), viteTsConfigPaths()],
|
|
15
|
+
<% } %>
|
|
16
|
+
test: {
|
|
17
|
+
globals: true,
|
|
18
|
+
<% if (browserMode) { %>
|
|
19
|
+
browser: {
|
|
20
|
+
enabled: true,
|
|
21
|
+
provider: playwright(),
|
|
22
|
+
instances: [{ browser: 'chromium' }],
|
|
23
|
+
},
|
|
24
|
+
<% } else { %>
|
|
25
|
+
environment: 'jsdom',
|
|
26
|
+
<% } %>
|
|
27
|
+
setupFiles: ['src/test-setup.ts'],
|
|
28
|
+
include: ['**/*.spec.ts'],
|
|
29
|
+
reporters: ['default'],
|
|
30
|
+
},
|
|
31
|
+
define: {
|
|
32
|
+
'import.meta.vitest': mode !== 'production',
|
|
33
|
+
},
|
|
34
|
+
}));
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupSchematic = setupSchematic;
|
|
4
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
5
|
+
const tasks_1 = require("@angular-devkit/schematics/tasks");
|
|
6
|
+
const jsonc_parser_1 = require("jsonc-parser");
|
|
7
|
+
const utils_1 = require("../utils");
|
|
8
|
+
function updateTsConfigSpec(tree, projectRoot) {
|
|
9
|
+
const tsConfigPath = projectRoot
|
|
10
|
+
? `${projectRoot}/tsconfig.spec.json`
|
|
11
|
+
: 'tsconfig.spec.json';
|
|
12
|
+
if (!tree.exists(tsConfigPath)) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const tsConfigContent = tree.read(tsConfigPath);
|
|
16
|
+
if (!tsConfigContent) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const tsConfig = (0, jsonc_parser_1.parse)(tsConfigContent.toString('utf-8'));
|
|
20
|
+
tsConfig.compilerOptions = tsConfig.compilerOptions || {};
|
|
21
|
+
// Remove module (let Vite handle it)
|
|
22
|
+
delete tsConfig.compilerOptions.module;
|
|
23
|
+
// Set target to es2022
|
|
24
|
+
tsConfig.compilerOptions.target = 'es2022';
|
|
25
|
+
// Update types: remove jest, add vitest/globals
|
|
26
|
+
const types = tsConfig.compilerOptions.types || ['node'];
|
|
27
|
+
const filteredTypes = types.filter((t) => t !== 'jest' && t !== 'jasmine');
|
|
28
|
+
if (!filteredTypes.includes('vitest/globals')) {
|
|
29
|
+
filteredTypes.push('vitest/globals');
|
|
30
|
+
}
|
|
31
|
+
tsConfig.compilerOptions.types = filteredTypes;
|
|
32
|
+
// Set files to include test-setup.ts
|
|
33
|
+
tsConfig.files = ['src/test-setup.ts'];
|
|
34
|
+
tree.overwrite(tsConfigPath, JSON.stringify(tsConfig, null, 2) + '\n');
|
|
35
|
+
}
|
|
36
|
+
function updateAngularJson(tree, projectName) {
|
|
37
|
+
const workspace = (0, utils_1.getWorkspace)(tree);
|
|
38
|
+
const project = workspace.projects[projectName];
|
|
39
|
+
if (!project.architect) {
|
|
40
|
+
project.architect = {};
|
|
41
|
+
}
|
|
42
|
+
project.architect['test'] = {
|
|
43
|
+
builder: '@analogjs/vitest-angular:test',
|
|
44
|
+
};
|
|
45
|
+
tree.overwrite('angular.json', JSON.stringify(workspace, null, 2) + '\n');
|
|
46
|
+
}
|
|
47
|
+
function generateFiles(projectRoot, majorAngularVersion, isNx, browserMode) {
|
|
48
|
+
return (0, schematics_1.mergeWith)((0, schematics_1.apply)((0, schematics_1.url)('./files'), [
|
|
49
|
+
(0, schematics_1.applyTemplates)({
|
|
50
|
+
majorAngularVersion,
|
|
51
|
+
isNx,
|
|
52
|
+
browserMode,
|
|
53
|
+
}),
|
|
54
|
+
(0, schematics_1.move)(projectRoot),
|
|
55
|
+
]));
|
|
56
|
+
}
|
|
57
|
+
function setupSchematic(options) {
|
|
58
|
+
return (tree, context) => {
|
|
59
|
+
const angularVersion = (0, utils_1.getAngularVersion)(tree);
|
|
60
|
+
const majorAngularVersion = (0, utils_1.getMajorAngularVersion)(angularVersion);
|
|
61
|
+
const workspace = (0, utils_1.getWorkspace)(tree);
|
|
62
|
+
const project = (0, utils_1.getProject)(workspace, options.project);
|
|
63
|
+
const projectRoot = project.root || '';
|
|
64
|
+
const isNx = (0, utils_1.isNxWorkspace)(tree);
|
|
65
|
+
const browserMode = options.browserMode ?? false;
|
|
66
|
+
// Add devDependencies
|
|
67
|
+
(0, utils_1.addDevDependencies)(tree, angularVersion, { browserMode });
|
|
68
|
+
// Update tsconfig.spec.json (if exists)
|
|
69
|
+
updateTsConfigSpec(tree, projectRoot);
|
|
70
|
+
// Update angular.json test target
|
|
71
|
+
updateAngularJson(tree, options.project);
|
|
72
|
+
// Schedule package install
|
|
73
|
+
context.addTask(new tasks_1.NodePackageInstallTask());
|
|
74
|
+
// Generate files
|
|
75
|
+
return (0, schematics_1.chain)([
|
|
76
|
+
generateFiles(projectRoot, majorAngularVersion, isNx, browserMode),
|
|
77
|
+
]);
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../../packages/vitest-angular-tools/src/schematics/setup/index.ts"],"names":[],"mappings":";;AAoGA,wCA6BC;AAjID,2DAUoC;AACpC,4DAA0E;AAC1E,+CAAqC;AACrC,oCAOkB;AAGlB,SAAS,kBAAkB,CAAC,IAAU,EAAE,WAAmB;IACzD,MAAM,YAAY,GAAG,WAAW;QAC9B,CAAC,CAAC,GAAG,WAAW,qBAAqB;QACrC,CAAC,CAAC,oBAAoB,CAAC;IAEzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,oBAAK,EAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAIvD,CAAC;IAEF,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,IAAI,EAAE,CAAC;IAE1D,qCAAqC;IACrC,OAAO,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC;IAEvC,uBAAuB;IACvB,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,QAAQ,CAAC;IAE3C,gDAAgD;IAChD,MAAM,KAAK,GAAa,QAAQ,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAChC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS,CAC/C,CAAC;IACF,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9C,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACvC,CAAC;IACD,QAAQ,CAAC,eAAe,CAAC,KAAK,GAAG,aAAa,CAAC;IAE/C,qCAAqC;IACrC,QAAQ,CAAC,KAAK,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAEvC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAU,EAAE,WAAmB;IACxD,MAAM,SAAS,GAAG,IAAA,oBAAY,EAAC,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAEhD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG;QAC1B,OAAO,EAAE,+BAA+B;KACzC,CAAC;IAEF,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,aAAa,CACpB,WAAmB,EACnB,mBAA2B,EAC3B,IAAa,EACb,WAAoB;IAEpB,OAAO,IAAA,sBAAS,EACd,IAAA,kBAAK,EAAC,IAAA,gBAAG,EAAC,SAAS,CAAC,EAAE;QACpB,IAAA,2BAAc,EAAC;YACb,mBAAmB;YACnB,IAAI;YACJ,WAAW;SACZ,CAAC;QACF,IAAA,iBAAI,EAAC,WAAW,CAAC;KAClB,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,OAAe;IAC5C,OAAO,CAAC,IAAU,EAAE,OAAyB,EAAE,EAAE;QAC/C,MAAM,cAAc,GAAG,IAAA,yBAAiB,EAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,mBAAmB,GAAG,IAAA,8BAAsB,EAAC,cAAc,CAAC,CAAC;QAEnE,MAAM,SAAS,GAAG,IAAA,oBAAY,EAAC,IAAI,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAA,qBAAa,EAAC,IAAI,CAAC,CAAC;QAEjC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC;QAEjD,sBAAsB;QACtB,IAAA,0BAAkB,EAAC,IAAI,EAAE,cAAc,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAE1D,wCAAwC;QACxC,kBAAkB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAEtC,kCAAkC;QAClC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzC,2BAA2B;QAC3B,OAAO,CAAC,OAAO,CAAC,IAAI,8BAAsB,EAAE,CAAC,CAAC;QAE9C,iBAAiB;QACjB,OAAO,IAAA,kBAAK,EAAC;YACX,aAAa,CAAC,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,WAAW,CAAC;SACnE,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/schema",
|
|
3
|
+
"$id": "AnalogVitestSetup",
|
|
4
|
+
"title": "Setup Vitest for Angular",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"project": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "The name of the project to configure",
|
|
10
|
+
"$default": {
|
|
11
|
+
"$source": "projectName"
|
|
12
|
+
},
|
|
13
|
+
"x-prompt": "Which project would you like to configure Vitest for?"
|
|
14
|
+
},
|
|
15
|
+
"browserMode": {
|
|
16
|
+
"type": "boolean",
|
|
17
|
+
"description": "Configure Vitest to run tests in a browser using Playwright",
|
|
18
|
+
"default": false,
|
|
19
|
+
"x-prompt": "Do you want to enable browser mode for testing with Playwright?"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"required": ["project"]
|
|
23
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAngularVersion = getAngularVersion;
|
|
4
|
+
exports.getMajorAngularVersion = getMajorAngularVersion;
|
|
5
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
6
|
+
const semver_1 = require("semver");
|
|
7
|
+
function getAngularVersion(tree) {
|
|
8
|
+
const packageJson = tree.read('package.json');
|
|
9
|
+
if (!packageJson) {
|
|
10
|
+
throw new schematics_1.SchematicsException('Could not find package.json');
|
|
11
|
+
}
|
|
12
|
+
const pkg = JSON.parse(packageJson.toString('utf-8'));
|
|
13
|
+
const angularVersion = pkg.dependencies?.['@angular/core'] ||
|
|
14
|
+
pkg.devDependencies?.['@angular/core'];
|
|
15
|
+
if (!angularVersion) {
|
|
16
|
+
throw new schematics_1.SchematicsException('Could not find @angular/core in package.json');
|
|
17
|
+
}
|
|
18
|
+
return angularVersion;
|
|
19
|
+
}
|
|
20
|
+
function getMajorAngularVersion(angularVersion) {
|
|
21
|
+
const coerced = (0, semver_1.coerce)(angularVersion);
|
|
22
|
+
if (!coerced) {
|
|
23
|
+
throw new schematics_1.SchematicsException(`Could not parse Angular version: ${angularVersion}`);
|
|
24
|
+
}
|
|
25
|
+
return (0, semver_1.major)(coerced);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=angular.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"angular.js","sourceRoot":"","sources":["../../../../../../../../../packages/vitest-angular-tools/src/schematics/utils/angular.ts"],"names":[],"mappings":";;AAGA,8CAkBC;AAED,wDAQC;AA/BD,2DAAuE;AACvE,mCAAuC;AAEvC,SAAgB,iBAAiB,CAAC,IAAU;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,gCAAmB,CAAC,6BAA6B,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,MAAM,cAAc,GAClB,GAAG,CAAC,YAAY,EAAE,CAAC,eAAe,CAAC;QACnC,GAAG,CAAC,eAAe,EAAE,CAAC,eAAe,CAAC,CAAC;IAEzC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,gCAAmB,CAC3B,8CAA8C,CAC/C,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAgB,sBAAsB,CAAC,cAAsB;IAC3D,MAAM,OAAO,GAAG,IAAA,eAAM,EAAC,cAAc,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,gCAAmB,CAC3B,oCAAoC,cAAc,EAAE,CACrD,CAAC;IACJ,CAAC;IACD,OAAO,IAAA,cAAK,EAAC,OAAO,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Tree } from '@angular-devkit/schematics';
|
|
2
|
+
export interface DependencyOptions {
|
|
3
|
+
browserMode?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function getDevDependencies(angularVersion: string, options?: DependencyOptions): Record<string, string>;
|
|
6
|
+
export declare function addDevDependencies(tree: Tree, angularVersion: string, options?: DependencyOptions): void;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDevDependencies = getDevDependencies;
|
|
4
|
+
exports.addDevDependencies = addDevDependencies;
|
|
5
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
6
|
+
const semver_1 = require("semver");
|
|
7
|
+
const versions_1 = require("./versions");
|
|
8
|
+
function getDevDependencies(angularVersion, options = {}) {
|
|
9
|
+
const escapedVersion = angularVersion.replace(/[~^]/, '');
|
|
10
|
+
if ((0, semver_1.lt)(escapedVersion, '17.0.0')) {
|
|
11
|
+
throw new schematics_1.SchematicsException('Angular v17.0.0 or newer is required.');
|
|
12
|
+
}
|
|
13
|
+
const deps = {
|
|
14
|
+
'@analogjs/vite-plugin-angular': versions_1.ANALOG_JS_VITE_PLUGIN_ANGULAR,
|
|
15
|
+
vite: versions_1.VITE,
|
|
16
|
+
vitest: versions_1.VITEST_V4,
|
|
17
|
+
'vite-tsconfig-paths': versions_1.VITE_TSCONFIG_PATHS,
|
|
18
|
+
};
|
|
19
|
+
if (options.browserMode) {
|
|
20
|
+
deps['@vitest/browser-playwright'] = versions_1.VITEST_BROWSER_PLAYWRIGHT;
|
|
21
|
+
deps['playwright'] = versions_1.PLAYWRIGHT;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
deps['jsdom'] = versions_1.JSDOM;
|
|
25
|
+
}
|
|
26
|
+
return deps;
|
|
27
|
+
}
|
|
28
|
+
function addDevDependencies(tree, angularVersion, options = {}) {
|
|
29
|
+
const packageJsonPath = 'package.json';
|
|
30
|
+
const packageJson = tree.read(packageJsonPath);
|
|
31
|
+
if (!packageJson) {
|
|
32
|
+
throw new schematics_1.SchematicsException('Could not find package.json');
|
|
33
|
+
}
|
|
34
|
+
const pkg = JSON.parse(packageJson.toString('utf-8'));
|
|
35
|
+
const devDeps = getDevDependencies(angularVersion, options);
|
|
36
|
+
pkg.devDependencies = pkg.devDependencies || {};
|
|
37
|
+
Object.entries(devDeps).forEach(([name, version]) => {
|
|
38
|
+
pkg.devDependencies[name] = version;
|
|
39
|
+
});
|
|
40
|
+
// Sort devDependencies alphabetically
|
|
41
|
+
pkg.devDependencies = Object.keys(pkg.devDependencies)
|
|
42
|
+
.sort()
|
|
43
|
+
.reduce((acc, key) => {
|
|
44
|
+
acc[key] = pkg.devDependencies[key];
|
|
45
|
+
return acc;
|
|
46
|
+
}, {});
|
|
47
|
+
tree.overwrite(packageJsonPath, JSON.stringify(pkg, null, 2) + '\n');
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../../../../../../../packages/vitest-angular-tools/src/schematics/utils/dependencies.ts"],"names":[],"mappings":";;AAgBA,gDAyBC;AAED,gDA4BC;AAvED,2DAAuE;AACvE,mCAA4B;AAC5B,yCAQoB;AAMpB,SAAgB,kBAAkB,CAChC,cAAsB,EACtB,UAA6B,EAAE;IAE/B,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE1D,IAAI,IAAA,WAAE,EAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,gCAAmB,CAAC,uCAAuC,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,IAAI,GAA2B;QACnC,+BAA+B,EAAE,wCAA6B;QAC9D,IAAI,EAAE,eAAI;QACV,MAAM,EAAE,oBAAS;QACjB,qBAAqB,EAAE,8BAAmB;KAC3C,CAAC;IAEF,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,IAAI,CAAC,4BAA4B,CAAC,GAAG,oCAAyB,CAAC;QAC/D,IAAI,CAAC,YAAY,CAAC,GAAG,qBAAU,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,GAAG,gBAAK,CAAC;IACxB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,kBAAkB,CAChC,IAAU,EACV,cAAsB,EACtB,UAA6B,EAAE;IAE/B,MAAM,eAAe,GAAG,cAAc,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,gCAAmB,CAAC,6BAA6B,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,kBAAkB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAE5D,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;IAChD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;QAClD,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,sCAAsC;IACtC,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;SACnD,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,GAA2B,EAAE,GAAG,EAAE,EAAE;QAC3C,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IAET,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./versions"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./angular"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./workspace"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./dependencies"), exports);
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../../packages/vitest-angular-tools/src/schematics/utils/index.ts"],"names":[],"mappings":";;;AAAA,qDAA2B;AAC3B,oDAA0B;AAC1B,sDAA4B;AAC5B,yDAA+B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.3.0-beta.5";
|
|
2
|
+
export declare const JSDOM = "^22.0.0";
|
|
3
|
+
export declare const VITE_TSCONFIG_PATHS = "^4.2.0";
|
|
4
|
+
export declare const VITE = "^7.0.0";
|
|
5
|
+
export declare const VITEST_V4 = "^4.0.0";
|
|
6
|
+
export declare const VITEST_BROWSER_PLAYWRIGHT = "^4.0.0";
|
|
7
|
+
export declare const PLAYWRIGHT = "^1.54.0";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PLAYWRIGHT = exports.VITEST_BROWSER_PLAYWRIGHT = exports.VITEST_V4 = exports.VITE = exports.VITE_TSCONFIG_PATHS = exports.JSDOM = exports.ANALOG_JS_VITE_PLUGIN_ANGULAR = void 0;
|
|
4
|
+
// Version constants (Angular 20+)
|
|
5
|
+
exports.ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.3.0-beta.5';
|
|
6
|
+
exports.JSDOM = '^22.0.0';
|
|
7
|
+
exports.VITE_TSCONFIG_PATHS = '^4.2.0';
|
|
8
|
+
exports.VITE = '^7.0.0';
|
|
9
|
+
exports.VITEST_V4 = '^4.0.0';
|
|
10
|
+
// Browser mode dependencies
|
|
11
|
+
exports.VITEST_BROWSER_PLAYWRIGHT = '^4.0.0';
|
|
12
|
+
exports.PLAYWRIGHT = '^1.54.0';
|
|
13
|
+
//# sourceMappingURL=versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../../../../../packages/vitest-angular-tools/src/schematics/utils/versions.ts"],"names":[],"mappings":";;;AAAA,kCAAkC;AACrB,QAAA,6BAA6B,GAAG,eAAe,CAAC;AAChD,QAAA,KAAK,GAAG,SAAS,CAAC;AAClB,QAAA,mBAAmB,GAAG,QAAQ,CAAC;AAC/B,QAAA,IAAI,GAAG,QAAQ,CAAC;AAChB,QAAA,SAAS,GAAG,QAAQ,CAAC;AAElC,4BAA4B;AACf,QAAA,yBAAyB,GAAG,QAAQ,CAAC;AACrC,QAAA,UAAU,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Tree } from '@angular-devkit/schematics';
|
|
2
|
+
export declare function isNxWorkspace(tree: Tree): boolean;
|
|
3
|
+
export interface WorkspaceProject {
|
|
4
|
+
root: string;
|
|
5
|
+
sourceRoot?: string;
|
|
6
|
+
architect?: Record<string, {
|
|
7
|
+
builder?: string;
|
|
8
|
+
options?: Record<string, unknown>;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
export interface WorkspaceSchema {
|
|
12
|
+
projects: Record<string, WorkspaceProject>;
|
|
13
|
+
}
|
|
14
|
+
export declare function getWorkspace(tree: Tree): WorkspaceSchema;
|
|
15
|
+
export declare function getProject(workspace: WorkspaceSchema, projectName: string): WorkspaceProject;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isNxWorkspace = isNxWorkspace;
|
|
4
|
+
exports.getWorkspace = getWorkspace;
|
|
5
|
+
exports.getProject = getProject;
|
|
6
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
7
|
+
function isNxWorkspace(tree) {
|
|
8
|
+
return tree.exists('/nx.json');
|
|
9
|
+
}
|
|
10
|
+
function getWorkspace(tree) {
|
|
11
|
+
const workspaceFile = tree.read('angular.json');
|
|
12
|
+
if (!workspaceFile) {
|
|
13
|
+
throw new schematics_1.SchematicsException('Could not find angular.json');
|
|
14
|
+
}
|
|
15
|
+
return JSON.parse(workspaceFile.toString('utf-8'));
|
|
16
|
+
}
|
|
17
|
+
function getProject(workspace, projectName) {
|
|
18
|
+
const project = workspace.projects[projectName];
|
|
19
|
+
if (!project) {
|
|
20
|
+
throw new schematics_1.SchematicsException(`Project "${projectName}" not found in angular.json`);
|
|
21
|
+
}
|
|
22
|
+
return project;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../../../../../../../packages/vitest-angular-tools/src/schematics/utils/workspace.ts"],"names":[],"mappings":";;AAEA,sCAEC;AAeD,oCAMC;AAED,gCAWC;AAtCD,2DAAuE;AAEvE,SAAgB,aAAa,CAAC,IAAU;IACtC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACjC,CAAC;AAeD,SAAgB,YAAY,CAAC,IAAU;IACrC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAChD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,gCAAmB,CAAC,6BAA6B,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAgB,UAAU,CACxB,SAA0B,EAC1B,WAAmB;IAEnB,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,gCAAmB,CAC3B,YAAY,WAAW,6BAA6B,CACrD,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|