@analogjs/vitest-angular 2.2.3 → 2.3.0-beta.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.
Files changed (33) hide show
  1. package/README.md +16 -5
  2. package/package.json +3 -1
  3. package/setup-testbed.d.ts +2 -2
  4. package/setup-testbed.js +10 -11
  5. package/src/lib/tools/collection.json +10 -0
  6. package/src/lib/tools/package.json +7 -0
  7. package/src/lib/tools/src/index.d.ts +1 -0
  8. package/src/lib/tools/src/index.js +6 -0
  9. package/src/lib/tools/src/index.js.map +1 -0
  10. package/src/lib/tools/src/schematics/jsonc-parser.d.ts +3 -0
  11. package/src/lib/tools/src/schematics/semver.d.ts +7 -0
  12. package/src/lib/tools/src/schematics/setup/files/src/test-setup.ts.template +38 -0
  13. package/src/lib/tools/src/schematics/setup/files/vite.config.mts.template +34 -0
  14. package/src/lib/tools/src/schematics/setup/index.d.ts +3 -0
  15. package/src/lib/tools/src/schematics/setup/index.js +80 -0
  16. package/src/lib/tools/src/schematics/setup/index.js.map +1 -0
  17. package/src/lib/tools/src/schematics/setup/schema.d.ts +4 -0
  18. package/src/lib/tools/src/schematics/setup/schema.json +23 -0
  19. package/src/lib/tools/src/schematics/utils/angular.d.ts +3 -0
  20. package/src/lib/tools/src/schematics/utils/angular.js +27 -0
  21. package/src/lib/tools/src/schematics/utils/angular.js.map +1 -0
  22. package/src/lib/tools/src/schematics/utils/dependencies.d.ts +6 -0
  23. package/src/lib/tools/src/schematics/utils/dependencies.js +49 -0
  24. package/src/lib/tools/src/schematics/utils/dependencies.js.map +1 -0
  25. package/src/lib/tools/src/schematics/utils/index.d.ts +4 -0
  26. package/src/lib/tools/src/schematics/utils/index.js +8 -0
  27. package/src/lib/tools/src/schematics/utils/index.js.map +1 -0
  28. package/src/lib/tools/src/schematics/utils/versions.d.ts +7 -0
  29. package/src/lib/tools/src/schematics/utils/versions.js +13 -0
  30. package/src/lib/tools/src/schematics/utils/versions.js.map +1 -0
  31. package/src/lib/tools/src/schematics/utils/workspace.d.ts +15 -0
  32. package/src/lib/tools/src/schematics/utils/workspace.js +24 -0
  33. 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
- Install the `@analogjs/platform` package:
44
+ Run the schematic to set up the Vite config, test configuration files, and update the test configuration.
45
45
 
46
46
  ```sh
47
- npm i @analogjs/platform --save-dev
47
+ npx ng generate @analogjs/vitest-angular:setup --project [your-project-name]
48
48
  ```
49
49
 
50
- Run the schematic to install Vitest, and update the `test` builder:
50
+ ### Schematic Options
51
51
 
52
- ```sh
53
- npx ng generate @analogjs/platform:setup-vitest --project [your-project-name]
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.2.3",
3
+ "version": "2.3.0-beta.11",
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": {
@@ -1,7 +1,7 @@
1
- import { Type } from '@angular/core';
1
+ import { Provider } from '@angular/core';
2
2
  type TestBedSetupOptions = {
3
3
  zoneless?: boolean;
4
- providers?: Type<any>[];
4
+ providers?: Provider[];
5
5
  browserMode?: boolean;
6
6
  };
7
7
  export declare function setupTestBed({ zoneless, providers, browserMode, }?: TestBedSetupOptions): void;
package/setup-testbed.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { __decorate } from "tslib";
2
- import { NgModule, provideZonelessChangeDetection } from '@angular/core';
2
+ import { NgModule, provideZonelessChangeDetection, } from '@angular/core';
3
3
  import { ɵgetCleanupHook as getCleanupHook, getTestBed, } from '@angular/core/testing';
4
4
  import { BrowserTestingModule, platformBrowserTesting, } from '@angular/platform-browser/testing';
5
5
  import { afterEach, beforeEach } from 'vitest';
@@ -9,18 +9,17 @@ export function setupTestBed({ zoneless = true, providers = [], browserMode = fa
9
9
  afterEach(getCleanupHook(true));
10
10
  if (!globalThis[ANGULAR_TESTBED_SETUP]) {
11
11
  globalThis[ANGULAR_TESTBED_SETUP] = true;
12
- let ZonelessTestModule = class ZonelessTestModule {
12
+ let TestModule = class TestModule {
13
13
  };
14
- ZonelessTestModule = __decorate([
14
+ TestModule = __decorate([
15
15
  NgModule({
16
- providers: zoneless ? [provideZonelessChangeDetection()] : [],
16
+ providers: [
17
+ ...(zoneless ? [provideZonelessChangeDetection()] : []),
18
+ providers,
19
+ ],
17
20
  })
18
- ], ZonelessTestModule);
19
- getTestBed().initTestEnvironment([
20
- BrowserTestingModule,
21
- ...(zoneless ? [ZonelessTestModule] : []),
22
- ...(providers || []),
23
- ], platformBrowserTesting(), browserMode ? { teardown: { destroyAfterEach: false } } : undefined);
21
+ ], TestModule);
22
+ getTestBed().initTestEnvironment([BrowserTestingModule, TestModule], platformBrowserTesting(), browserMode ? { teardown: { destroyAfterEach: false } } : undefined);
24
23
  }
25
24
  }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtdGVzdGJlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3ZpdGVzdC1hbmd1bGFyL3NldHVwLXRlc3RiZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsOEJBQThCLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUNMLGVBQWUsSUFBSSxjQUFjLEVBQ2pDLFVBQVUsR0FDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEdBQ3ZCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFL0MsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBUTFELE1BQU0sVUFBVSxZQUFZLENBQUMsRUFDM0IsUUFBUSxHQUFHLElBQUksRUFDZixTQUFTLEdBQUcsRUFBRSxFQUNkLFdBQVcsR0FBRyxLQUFLLE1BQ0ksRUFBRTtJQUN6QixVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRWhDLElBQUksQ0FBRSxVQUFrQixDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztRQUMvQyxVQUFrQixDQUFDLHFCQUFxQixDQUFDLEdBQUcsSUFBSSxDQUFDO1FBS2xELElBQU0sa0JBQWtCLEdBQXhCLE1BQU0sa0JBQWtCO1NBQUcsQ0FBQTtRQUFyQixrQkFBa0I7WUFIdkIsUUFBUSxDQUFDO2dCQUNSLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2FBQzlELENBQUM7V0FDSSxrQkFBa0IsQ0FBRztRQUUzQixVQUFVLEVBQUUsQ0FBQyxtQkFBbUIsQ0FDOUI7WUFDRSxvQkFBb0I7WUFDcEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekMsR0FBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQWlCO1NBQ3RDLEVBQ0Qsc0JBQXNCLEVBQUUsRUFDeEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDcEUsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIHByb3ZpZGVab25lbGVzc0NoYW5nZURldGVjdGlvbiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgybVnZXRDbGVhbnVwSG9vayBhcyBnZXRDbGVhbnVwSG9vayxcbiAgZ2V0VGVzdEJlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7XG4gIEJyb3dzZXJUZXN0aW5nTW9kdWxlLFxuICBwbGF0Zm9ybUJyb3dzZXJUZXN0aW5nLFxufSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL3Rlc3RpbmcnO1xuaW1wb3J0IHsgYWZ0ZXJFYWNoLCBiZWZvcmVFYWNoIH0gZnJvbSAndml0ZXN0JztcblxuY29uc3QgQU5HVUxBUl9URVNUQkVEX1NFVFVQID0gU3ltYm9sLmZvcigndGVzdGJlZC1zZXR1cCcpO1xuXG50eXBlIFRlc3RCZWRTZXR1cE9wdGlvbnMgPSB7XG4gIHpvbmVsZXNzPzogYm9vbGVhbjtcbiAgcHJvdmlkZXJzPzogVHlwZTxhbnk+W107XG4gIGJyb3dzZXJNb2RlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFRlc3RCZWQoe1xuICB6b25lbGVzcyA9IHRydWUsXG4gIHByb3ZpZGVycyA9IFtdLFxuICBicm93c2VyTW9kZSA9IGZhbHNlLFxufTogVGVzdEJlZFNldHVwT3B0aW9ucyA9IHt9KSB7XG4gIGJlZm9yZUVhY2goZ2V0Q2xlYW51cEhvb2soZmFsc2UpKTtcbiAgYWZ0ZXJFYWNoKGdldENsZWFudXBIb29rKHRydWUpKTtcblxuICBpZiAoIShnbG9iYWxUaGlzIGFzIGFueSlbQU5HVUxBUl9URVNUQkVEX1NFVFVQXSkge1xuICAgIChnbG9iYWxUaGlzIGFzIGFueSlbQU5HVUxBUl9URVNUQkVEX1NFVFVQXSA9IHRydWU7XG5cbiAgICBATmdNb2R1bGUoe1xuICAgICAgcHJvdmlkZXJzOiB6b25lbGVzcyA/IFtwcm92aWRlWm9uZWxlc3NDaGFuZ2VEZXRlY3Rpb24oKV0gOiBbXSxcbiAgICB9KVxuICAgIGNsYXNzIFpvbmVsZXNzVGVzdE1vZHVsZSB7fVxuXG4gICAgZ2V0VGVzdEJlZCgpLmluaXRUZXN0RW52aXJvbm1lbnQoXG4gICAgICBbXG4gICAgICAgIEJyb3dzZXJUZXN0aW5nTW9kdWxlLFxuICAgICAgICAuLi4oem9uZWxlc3MgPyBbWm9uZWxlc3NUZXN0TW9kdWxlXSA6IFtdKSxcbiAgICAgICAgLi4uKChwcm92aWRlcnMgfHwgW10pIGFzIFR5cGU8YW55PltdKSxcbiAgICAgIF0sXG4gICAgICBwbGF0Zm9ybUJyb3dzZXJUZXN0aW5nKCksXG4gICAgICBicm93c2VyTW9kZSA/IHsgdGVhcmRvd246IHsgZGVzdHJveUFmdGVyRWFjaDogZmFsc2UgfSB9IDogdW5kZWZpbmVkLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtdGVzdGJlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3ZpdGVzdC1hbmd1bGFyL3NldHVwLXRlc3RiZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxRQUFRLEVBRVIsOEJBQThCLEdBQy9CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLElBQUksY0FBYyxFQUNqQyxVQUFVLEdBQ1gsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHNCQUFzQixHQUN2QixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRS9DLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQVExRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEVBQzNCLFFBQVEsR0FBRyxJQUFJLEVBQ2YsU0FBUyxHQUFHLEVBQUUsRUFDZCxXQUFXLEdBQUcsS0FBSyxNQUNJLEVBQUU7SUFDekIsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVoQyxJQUFJLENBQUUsVUFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7UUFDL0MsVUFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLElBQUksQ0FBQztRQVFsRCxJQUFNLFVBQVUsR0FBaEIsTUFBTSxVQUFVO1NBQUcsQ0FBQTtRQUFiLFVBQVU7WUFOZixRQUFRLENBQUM7Z0JBQ1IsU0FBUyxFQUFFO29CQUNULEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZELFNBQVM7aUJBQ1Y7YUFDRixDQUFDO1dBQ0ksVUFBVSxDQUFHO1FBRW5CLFVBQVUsRUFBRSxDQUFDLG1CQUFtQixDQUM5QixDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxFQUNsQyxzQkFBc0IsRUFBRSxFQUN4QixXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNwRSxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBOZ01vZHVsZSxcbiAgUHJvdmlkZXIsXG4gIHByb3ZpZGVab25lbGVzc0NoYW5nZURldGVjdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICDJtWdldENsZWFudXBIb29rIGFzIGdldENsZWFudXBIb29rLFxuICBnZXRUZXN0QmVkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlL3Rlc3RpbmcnO1xuaW1wb3J0IHtcbiAgQnJvd3NlclRlc3RpbmdNb2R1bGUsXG4gIHBsYXRmb3JtQnJvd3NlclRlc3RpbmcsXG59IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvdGVzdGluZyc7XG5pbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZUVhY2ggfSBmcm9tICd2aXRlc3QnO1xuXG5jb25zdCBBTkdVTEFSX1RFU1RCRURfU0VUVVAgPSBTeW1ib2wuZm9yKCd0ZXN0YmVkLXNldHVwJyk7XG5cbnR5cGUgVGVzdEJlZFNldHVwT3B0aW9ucyA9IHtcbiAgem9uZWxlc3M/OiBib29sZWFuO1xuICBwcm92aWRlcnM/OiBQcm92aWRlcltdO1xuICBicm93c2VyTW9kZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBUZXN0QmVkKHtcbiAgem9uZWxlc3MgPSB0cnVlLFxuICBwcm92aWRlcnMgPSBbXSxcbiAgYnJvd3Nlck1vZGUgPSBmYWxzZSxcbn06IFRlc3RCZWRTZXR1cE9wdGlvbnMgPSB7fSkge1xuICBiZWZvcmVFYWNoKGdldENsZWFudXBIb29rKGZhbHNlKSk7XG4gIGFmdGVyRWFjaChnZXRDbGVhbnVwSG9vayh0cnVlKSk7XG5cbiAgaWYgKCEoZ2xvYmFsVGhpcyBhcyBhbnkpW0FOR1VMQVJfVEVTVEJFRF9TRVRVUF0pIHtcbiAgICAoZ2xvYmFsVGhpcyBhcyBhbnkpW0FOR1VMQVJfVEVTVEJFRF9TRVRVUF0gPSB0cnVlO1xuXG4gICAgQE5nTW9kdWxlKHtcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAuLi4oem9uZWxlc3MgPyBbcHJvdmlkZVpvbmVsZXNzQ2hhbmdlRGV0ZWN0aW9uKCldIDogW10pLFxuICAgICAgICBwcm92aWRlcnMsXG4gICAgICBdLFxuICAgIH0pXG4gICAgY2xhc3MgVGVzdE1vZHVsZSB7fVxuXG4gICAgZ2V0VGVzdEJlZCgpLmluaXRUZXN0RW52aXJvbm1lbnQoXG4gICAgICBbQnJvd3NlclRlc3RpbmdNb2R1bGUsIFRlc3RNb2R1bGVdLFxuICAgICAgcGxhdGZvcm1Ccm93c2VyVGVzdGluZygpLFxuICAgICAgYnJvd3Nlck1vZGUgPyB7IHRlYXJkb3duOiB7IGRlc3Ryb3lBZnRlckVhY2g6IGZhbHNlIH0gfSA6IHVuZGVmaW5lZCxcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -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,7 @@
1
+ {
2
+ "name": "@analogjs/vitest-angular-tools",
3
+ "version": "0.0.1",
4
+ "main": "src/index.js",
5
+ "types": "./src/index.d.ts",
6
+ "type": "commonjs"
7
+ }
@@ -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,3 @@
1
+ declare module 'jsonc-parser' {
2
+ export function parse(text: string): unknown;
3
+ }
@@ -0,0 +1,7 @@
1
+ declare module 'semver' {
2
+ export function coerce(
3
+ version: string | null | undefined,
4
+ ): { version: string } | null;
5
+ export function major(version: string | { version: string }): number;
6
+ export function lt(v1: string, v2: string): boolean;
7
+ }
@@ -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,3 @@
1
+ import { Rule } from '@angular-devkit/schematics';
2
+ import { Schema } from './schema';
3
+ export declare function setupSchematic(options: Schema): Rule;
@@ -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":"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"}
@@ -0,0 +1,4 @@
1
+ export interface Schema {
2
+ project: string;
3
+ browserMode?: boolean;
4
+ }
@@ -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,3 @@
1
+ import { Tree } from '@angular-devkit/schematics';
2
+ export declare function getAngularVersion(tree: Tree): string;
3
+ export declare function getMajorAngularVersion(angularVersion: string): number;
@@ -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,4 @@
1
+ export * from './versions';
2
+ export * from './angular';
3
+ export * from './workspace';
4
+ export * from './dependencies';
@@ -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.11";
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.11';
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,gBAAgB,CAAC;AACjD,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"}