@analogjs/vitest-angular 3.0.0-alpha.2 → 3.0.0-alpha.20

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 (102) hide show
  1. package/README.md +9 -2
  2. package/_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js +9 -0
  3. package/package.json +9 -8
  4. package/setup-serializers.d.ts +1 -0
  5. package/setup-serializers.js +13 -0
  6. package/setup-serializers.js.map +1 -0
  7. package/setup-snapshots.d.ts +1 -26
  8. package/setup-snapshots.js +10 -103
  9. package/setup-snapshots.js.map +1 -0
  10. package/setup-testbed.d.ts +12 -5
  11. package/setup-testbed.js +23 -24
  12. package/setup-testbed.js.map +1 -0
  13. package/setup-zone.d.ts +6 -5
  14. package/setup-zone.js +90 -105
  15. package/setup-zone.js.map +1 -0
  16. package/src/index.d.ts +2 -2
  17. package/src/index.js +3 -4
  18. package/src/lib/builders/build/devkit.d.ts +2 -2
  19. package/src/lib/builders/build/devkit.js +23 -17
  20. package/src/lib/builders/build/devkit.js.map +1 -0
  21. package/src/lib/builders/build/plugins/angular-memory-plugin.d.ts +13 -20
  22. package/src/lib/builders/build/plugins/angular-memory-plugin.js +51 -77
  23. package/src/lib/builders/build/plugins/angular-memory-plugin.js.map +1 -0
  24. package/src/lib/builders/build/plugins/downlevel-plugin.d.ts +10 -0
  25. package/src/lib/builders/build/plugins/downlevel-plugin.js +24 -0
  26. package/src/lib/builders/build/plugins/downlevel-plugin.js.map +1 -0
  27. package/src/lib/builders/build/schema.js +53 -0
  28. package/src/lib/builders/build/schema.js.map +1 -0
  29. package/src/lib/builders/build/schema.json +44 -44
  30. package/src/lib/builders/build/utils.d.ts +3 -3
  31. package/src/lib/builders/build/vitest.impl.d.ts +5 -5
  32. package/src/lib/builders/build/vitest.impl.js +154 -190
  33. package/src/lib/builders/build/vitest.impl.js.map +1 -0
  34. package/src/lib/builders/test/schema.js +51 -0
  35. package/src/lib/builders/test/schema.js.map +1 -0
  36. package/src/lib/builders/test/schema.json +44 -44
  37. package/src/lib/builders/test/vitest.impl.d.ts +1 -1
  38. package/src/lib/builders/test/vitest.impl.js +48 -58
  39. package/src/lib/builders/test/vitest.impl.js.map +1 -0
  40. package/src/lib/snapshot-serializers/angular-fixture.d.ts +2 -0
  41. package/src/lib/snapshot-serializers/angular-fixture.js +68 -0
  42. package/src/lib/snapshot-serializers/angular-fixture.js.map +1 -0
  43. package/src/lib/snapshot-serializers/html-comment.d.ts +2 -0
  44. package/src/lib/snapshot-serializers/html-comment.js +11 -0
  45. package/src/lib/snapshot-serializers/html-comment.js.map +1 -0
  46. package/src/lib/snapshot-serializers/index.d.ts +3 -0
  47. package/src/lib/snapshot-serializers/no-ng-attributes.d.ts +4 -0
  48. package/src/lib/snapshot-serializers/no-ng-attributes.js +62 -0
  49. package/src/lib/snapshot-serializers/no-ng-attributes.js.map +1 -0
  50. package/src/lib/tools/collection.json +2 -2
  51. package/src/lib/tools/index.d.ts +1 -0
  52. package/src/lib/tools/index.js +3 -0
  53. package/src/lib/tools/package.json +1 -5
  54. package/src/lib/tools/{src/schematics → schematics}/setup/files/src/test-setup.ts.template +1 -0
  55. package/src/lib/tools/schematics/setup/index.d.ts +3 -0
  56. package/src/lib/tools/schematics/setup/index.js +55 -0
  57. package/src/lib/tools/schematics/setup/index.js.map +1 -0
  58. package/src/lib/tools/schematics/utils/angular.d.ts +3 -0
  59. package/src/lib/tools/schematics/utils/angular.js +21 -0
  60. package/src/lib/tools/schematics/utils/angular.js.map +1 -0
  61. package/src/lib/tools/schematics/utils/dependencies.d.ts +6 -0
  62. package/src/lib/tools/schematics/utils/dependencies.js +39 -0
  63. package/src/lib/tools/schematics/utils/dependencies.js.map +1 -0
  64. package/src/lib/tools/schematics/utils/index.d.ts +4 -0
  65. package/src/lib/tools/schematics/utils/index.js +4 -0
  66. package/src/lib/tools/schematics/utils/versions.d.ts +7 -0
  67. package/src/lib/tools/schematics/utils/versions.js +18 -0
  68. package/src/lib/tools/schematics/utils/versions.js.map +1 -0
  69. package/src/lib/tools/schematics/utils/workspace.d.ts +15 -0
  70. package/src/lib/tools/schematics/utils/workspace.js +21 -0
  71. package/src/lib/tools/schematics/utils/workspace.js.map +1 -0
  72. package/src/lib/tools/src/index.d.ts +1 -1
  73. package/src/lib/tools/src/schematics/setup/index.d.ts +2 -2
  74. package/src/lib/tools/src/schematics/utils/angular.d.ts +1 -1
  75. package/src/lib/tools/src/schematics/utils/dependencies.d.ts +2 -2
  76. package/src/lib/tools/src/schematics/utils/index.d.ts +4 -4
  77. package/src/lib/tools/src/schematics/utils/versions.d.ts +1 -1
  78. package/src/lib/tools/src/schematics/utils/workspace.d.ts +8 -8
  79. package/src/lib/tools/src/test-global-setup.d.ts +1 -0
  80. package/src/test-setup.d.ts +3 -0
  81. package/src/lib/builders/build/plugins/esbuild-downlevel-plugin.d.ts +0 -7
  82. package/src/lib/builders/build/plugins/esbuild-downlevel-plugin.js +0 -23
  83. package/src/lib/builders/build/utils.js +0 -1
  84. package/src/lib/tools/src/index.js +0 -6
  85. package/src/lib/tools/src/index.js.map +0 -1
  86. package/src/lib/tools/src/schematics/setup/index.js +0 -80
  87. package/src/lib/tools/src/schematics/setup/index.js.map +0 -1
  88. package/src/lib/tools/src/schematics/utils/angular.js +0 -27
  89. package/src/lib/tools/src/schematics/utils/angular.js.map +0 -1
  90. package/src/lib/tools/src/schematics/utils/dependencies.js +0 -49
  91. package/src/lib/tools/src/schematics/utils/dependencies.js.map +0 -1
  92. package/src/lib/tools/src/schematics/utils/index.js +0 -8
  93. package/src/lib/tools/src/schematics/utils/index.js.map +0 -1
  94. package/src/lib/tools/src/schematics/utils/versions.js +0 -13
  95. package/src/lib/tools/src/schematics/utils/versions.js.map +0 -1
  96. package/src/lib/tools/src/schematics/utils/workspace.js +0 -24
  97. package/src/lib/tools/src/schematics/utils/workspace.js.map +0 -1
  98. /package/src/lib/tools/{src/schematics → schematics}/jsonc-parser.d.ts +0 -0
  99. /package/src/lib/tools/{src/schematics → schematics}/semver.d.ts +0 -0
  100. /package/src/lib/tools/{src/schematics → schematics}/setup/files/vite.config.mts.template +0 -0
  101. /package/src/lib/tools/{src/schematics → schematics}/setup/schema.d.ts +0 -0
  102. /package/src/lib/tools/{src/schematics → schematics}/setup/schema.json +0 -0
package/README.md CHANGED
@@ -101,6 +101,7 @@ Use the following setup:
101
101
  ```ts
102
102
  import '@angular/compiler';
103
103
  import '@analogjs/vitest-angular/setup-snapshots';
104
+ import '@analogjs/vitest-angular/setup-serializers';
104
105
  import { setupTestBed } from '@analogjs/vitest-angular/setup-testbed';
105
106
 
106
107
  setupTestBed();
@@ -126,7 +127,7 @@ The `setupTestBed()` function accepts an optional configuration object with the
126
127
 
127
128
  - `zoneless` (boolean): Whether to use zoneless change detection (default: `true`)
128
129
  - `providers` (`Type<any>[]`): Additional providers to include in the test environment (default: `[]`)
129
- - `browserMode` (boolean): Enables visual test preview in Vitest browser mode by keeping the component rendered, allowing you to inspect its final state (default: `false`)
130
+ - `teardown.destroyAfterEach` (boolean): Whether to destroy the test environment after each test. Set to `false` to keep the component rendered, allowing you to inspect its final state. (default: `true`)
130
131
 
131
132
  **Example with options:**
132
133
 
@@ -134,7 +135,7 @@ The `setupTestBed()` function accepts an optional configuration object with the
134
135
  setupTestBed({
135
136
  zoneless: true,
136
137
  providers: [],
137
- browserMode: false,
138
+ teardown: { destroyAfterEach: false },
138
139
  });
139
140
  ```
140
141
 
@@ -194,6 +195,12 @@ pnpm test
194
195
  ## Snapshot Testing
195
196
 
196
197
  For snapshot testing you can use `toMatchSnapshot` from `expect` API.
198
+ The provided snapshot setup also removes Angular-specific `_ng*` attributes and `<!--container-->` comments from DOM snapshots, which keeps diffs focused on the actual template output.
199
+
200
+ The import of `setup-snapshots` and `setup-serializers` are complementary:
201
+
202
+ - Use `setup-snapshots` to serialize Angular fixtures and component refs so Vitest snapshots print component markup instead of Angular testing internals.
203
+ - Use `setup-serializers` to clean DOM snapshots by removing Angular runtime noise such as `_ngcontent-*`, `_nghost-*`, `ng-reflect-*`, generated ids and classes, and removes comments from DOM snapshots (e.g. `<!--container-->`).
197
204
 
198
205
  Below is a small example of how to write a snapshot test:
199
206
 
@@ -0,0 +1,9 @@
1
+ //#region \0@oxc-project+runtime@0.122.0/helpers/decorate.js
2
+ function __decorate(decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ }
8
+ //#endregion
9
+ export { __decorate };
package/package.json CHANGED
@@ -1,15 +1,16 @@
1
1
  {
2
2
  "name": "@analogjs/vitest-angular",
3
- "version": "3.0.0-alpha.2",
3
+ "version": "3.0.0-alpha.20",
4
4
  "description": "Vitest Builder for Angular",
5
5
  "type": "module",
6
6
  "author": "Brandon Roberts <robertsbt@gmail.com>",
7
7
  "exports": {
8
8
  ".": "./src/index.js",
9
- "./package.json": "./package.json",
10
9
  "./setup-zone": "./setup-zone.js",
11
10
  "./setup-snapshots": "./setup-snapshots.js",
12
- "./setup-testbed": "./setup-testbed.js"
11
+ "./setup-serializers": "./setup-serializers.js",
12
+ "./setup-testbed": "./setup-testbed.js",
13
+ "./package.json": "./package.json"
13
14
  },
14
15
  "keywords": [
15
16
  "angular",
@@ -35,6 +36,9 @@
35
36
  "ng-add": {
36
37
  "save": "devDependencies"
37
38
  },
39
+ "dependencies": {
40
+ "oxc-transform": "^0.121.0"
41
+ },
38
42
  "peerDependencies": {
39
43
  "@analogjs/vite-plugin-angular": "*",
40
44
  "@angular-devkit/architect": ">=0.1500.0 < 0.2200.0",
@@ -61,8 +65,5 @@
61
65
  "publishConfig": {
62
66
  "access": "public",
63
67
  "provenance": true
64
- },
65
- "types": "./src/index.d.ts",
66
- "module": "./src/index.js",
67
- "main": "./src/index.js"
68
- }
68
+ }
69
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import { createHtmlCommentSnapshotSerializer } from "./src/lib/snapshot-serializers/html-comment.js";
2
+ import { createNoNgAttributesSnapshotSerializer } from "./src/lib/snapshot-serializers/no-ng-attributes.js";
3
+ //#region packages/vitest-angular/setup-serializers.ts
4
+ var env = globalThis;
5
+ ["expect"].forEach((methodName) => {
6
+ const originalVitestFn = env[methodName];
7
+ if (!originalVitestFn) return;
8
+ originalVitestFn.addSnapshotSerializer(createHtmlCommentSnapshotSerializer());
9
+ originalVitestFn.addSnapshotSerializer(createNoNgAttributesSnapshotSerializer());
10
+ });
11
+ //#endregion
12
+
13
+ //# sourceMappingURL=setup-serializers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-serializers.js","names":[],"sources":["../setup-serializers.ts"],"sourcesContent":["import {\n createHtmlCommentSnapshotSerializer,\n createNoNgAttributesSnapshotSerializer,\n} from './snapshot-serializers.js';\n\nconst env = globalThis as any;\n\n['expect'].forEach((methodName) => {\n const originalVitestFn = env[methodName];\n if (!originalVitestFn) {\n return;\n }\n originalVitestFn.addSnapshotSerializer(createHtmlCommentSnapshotSerializer());\n originalVitestFn.addSnapshotSerializer(\n createNoNgAttributesSnapshotSerializer(),\n );\n});\n"],"mappings":";;;AAKA,IAAM,MAAM;AAEZ,CAAC,SAAS,CAAC,SAAS,eAAe;CACjC,MAAM,mBAAmB,IAAI;AAC7B,KAAI,CAAC,iBACH;AAEF,kBAAiB,sBAAsB,qCAAqC,CAAC;AAC7E,kBAAiB,sBACf,wCAAwC,CACzC;EACD"}
@@ -1,26 +1 @@
1
- declare const env: any;
2
- /**
3
- * Allows Vitest to handle Angular test fixtures
4
- *
5
- * Vitest Snapshot guide ==> https://vitest.dev/guide/snapshot.html
6
- *
7
- * @returns customSnapshotSerializer for Angular Fixture Component
8
- */
9
- declare const customSnapshotSerializer: () => {
10
- serialize: (val: any, config: any, indentation: any, depth: any, refs: any, printer: any) => string;
11
- test: (val: any) => boolean;
12
- };
13
- /**
14
- * Check if is an Angular fixture
15
- *
16
- * @param val Angular fixture
17
- * @returns boolean who check if is an angular fixture
18
- */
19
- declare function isAngularFixture(val: any): boolean;
20
- /**
21
- * Serialize Angular fixture for Vitest
22
- *
23
- * @param fixture Angular Fixture Component
24
- * @returns HTML Child Node
25
- */
26
- declare function fixtureVitestSerializer(fixture: any): ChildNode;
1
+ export {};
@@ -1,104 +1,11 @@
1
- "use strict";
2
- const env = globalThis;
3
- /**
4
- * Allows Vitest to handle Angular test fixtures
5
- *
6
- * Vitest Snapshot guide ==> https://vitest.dev/guide/snapshot.html
7
- *
8
- * @returns customSnapshotSerializer for Angular Fixture Component
9
- */
10
- const customSnapshotSerializer = () => {
11
- function serialize(val, config, indentation, depth, refs, printer) {
12
- // `printer` is a function that serializes a value using existing plugins.
13
- return `${printer(fixtureVitestSerializer(val), config, indentation, depth, refs)}`;
14
- }
15
- function test(val) {
16
- // * If it's a ComponentFixture we apply the transformation rules
17
- return val && isAngularFixture(val);
18
- }
19
- return {
20
- serialize,
21
- test,
22
- };
23
- };
24
- /**
25
- * Check if is an Angular fixture
26
- *
27
- * @param val Angular fixture
28
- * @returns boolean who check if is an angular fixture
29
- */
30
- function isAngularFixture(val) {
31
- if (typeof val !== 'object') {
32
- return false;
33
- }
34
- if (val['componentRef'] || val['componentInstance']) {
35
- return true;
36
- }
37
- if (val['componentType']) {
38
- return true;
39
- }
40
- // * Angular fixture keys in Fixture component Object
41
- const fixtureKeys = [
42
- 'componentRef',
43
- 'ngZone',
44
- 'effectRunner',
45
- '_autoDetect',
46
- '_isStable',
47
- '_isDestroyed',
48
- '_resolve',
49
- '_promise',
50
- '_onUnstableSubscription',
51
- '_onStableSubscription',
52
- '_onMicrotaskEmptySubscription',
53
- '_onErrorSubscription',
54
- 'changeDetectorRef',
55
- 'elementRef',
56
- 'debugElement',
57
- 'componentInstance',
58
- 'nativeElement',
59
- ];
60
- // * Angular fixture keys in Fixture componentRef Object
61
- const fixtureComponentRefKeys = [
62
- 'location',
63
- '_rootLView',
64
- '_tNode',
65
- 'previousInputValues',
66
- 'instance',
67
- 'changeDetectorRef',
68
- 'hostView',
69
- 'componentType',
70
- ];
71
- return (JSON.stringify(Object.keys(val)) === JSON.stringify(fixtureKeys) ||
72
- JSON.stringify(Object.keys(val)) === JSON.stringify(fixtureComponentRefKeys));
73
- }
74
- /**
75
- * Serialize Angular fixture for Vitest
76
- *
77
- * @param fixture Angular Fixture Component
78
- * @returns HTML Child Node
79
- */
80
- function fixtureVitestSerializer(fixture) {
81
- // * Get Component meta data
82
- const componentType = (fixture && fixture.componentType
83
- ? fixture.componentType
84
- : fixture.componentRef.componentType);
85
- let inputsData = '';
86
- const selector = Reflect.getOwnPropertyDescriptor(componentType, '__annotations__')?.value[0].selector;
87
- if (componentType && componentType.propDecorators) {
88
- inputsData = Object.entries(componentType.propDecorators)
89
- .map(([key, value]) => `${key}="${value}"`)
90
- .join('');
91
- }
92
- // * Get DOM Elements
93
- const divElement = fixture && fixture.nativeElement
94
- ? fixture.nativeElement
95
- : fixture.location.nativeElement;
96
- // * Convert string data to HTML data
97
- const doc = new DOMParser().parseFromString(`<${selector} ${inputsData}>${divElement.innerHTML}</${selector}>`, 'text/html');
98
- return doc.body.childNodes[0];
99
- }
100
- ['expect'].forEach((methodName) => {
101
- const originalvitestFn = env[methodName];
102
- return originalvitestFn.addSnapshotSerializer(customSnapshotSerializer());
1
+ import { createAngularFixtureSnapshotSerializer } from "./src/lib/snapshot-serializers/angular-fixture.js";
2
+ //#region packages/vitest-angular/setup-snapshots.ts
3
+ var env = globalThis;
4
+ ["expect"].forEach((methodName) => {
5
+ const originalVitestFn = env[methodName];
6
+ if (!originalVitestFn) return;
7
+ originalVitestFn.addSnapshotSerializer(createAngularFixtureSnapshotSerializer());
103
8
  });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtc25hcHNob3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvdml0ZXN0LWFuZ3VsYXIvc2V0dXAtc25hcHNob3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLEdBQUcsR0FBRyxVQUFpQixDQUFDO0FBRTlCOzs7Ozs7R0FNRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxFQUFFO0lBQ3BDLFNBQVMsU0FBUyxDQUNoQixHQUFRLEVBQ1IsTUFBVyxFQUNYLFdBQWdCLEVBQ2hCLEtBQVUsRUFDVixJQUFTLEVBQ1QsT0FBWTtRQUVaLDBFQUEwRTtRQUMxRSxPQUFPLEdBQUcsT0FBTyxDQUNmLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxFQUM1QixNQUFNLEVBQ04sV0FBVyxFQUNYLEtBQUssRUFDTCxJQUFJLENBQ0wsRUFBRSxDQUFDO0lBQ04sQ0FBQztJQUNELFNBQVMsSUFBSSxDQUFDLEdBQVE7UUFDcEIsaUVBQWlFO1FBQ2pFLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxPQUFPO1FBQ0wsU0FBUztRQUNULElBQUk7S0FDTCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxTQUFTLGdCQUFnQixDQUFDLEdBQVE7SUFDaEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQscURBQXFEO0lBQ3JELE1BQU0sV0FBVyxHQUFHO1FBQ2xCLGNBQWM7UUFDZCxRQUFRO1FBQ1IsY0FBYztRQUNkLGFBQWE7UUFDYixXQUFXO1FBQ1gsY0FBYztRQUNkLFVBQVU7UUFDVixVQUFVO1FBQ1YseUJBQXlCO1FBQ3pCLHVCQUF1QjtRQUN2QiwrQkFBK0I7UUFDL0Isc0JBQXNCO1FBQ3RCLG1CQUFtQjtRQUNuQixZQUFZO1FBQ1osY0FBYztRQUNkLG1CQUFtQjtRQUNuQixlQUFlO0tBQ2hCLENBQUM7SUFFRix3REFBd0Q7SUFDeEQsTUFBTSx1QkFBdUIsR0FBRztRQUM5QixVQUFVO1FBQ1YsWUFBWTtRQUNaLFFBQVE7UUFDUixxQkFBcUI7UUFDckIsVUFBVTtRQUNWLG1CQUFtQjtRQUNuQixVQUFVO1FBQ1YsZUFBZTtLQUNoQixDQUFDO0lBRUYsT0FBTyxDQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsQ0FDN0UsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsdUJBQXVCLENBQUMsT0FBWTtJQUMzQyw0QkFBNEI7SUFDNUIsTUFBTSxhQUFhLEdBQUcsQ0FDcEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxhQUFhO1FBQzlCLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYTtRQUN2QixDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQ2hDLENBQUM7SUFFVCxJQUFJLFVBQVUsR0FBVyxFQUFFLENBQUM7SUFFNUIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUMvQyxhQUFhLEVBQ2IsaUJBQWlCLENBQ2xCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUVyQixJQUFJLGFBQWEsSUFBSSxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbEQsVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQzthQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssS0FBSyxHQUFHLENBQUM7YUFDMUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVELHFCQUFxQjtJQUNyQixNQUFNLFVBQVUsR0FDZCxPQUFPLElBQUksT0FBTyxDQUFDLGFBQWE7UUFDOUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhO1FBQ3ZCLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztJQUVyQyxxQ0FBcUM7SUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQ3pDLElBQUksUUFBUSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsU0FBUyxLQUFLLFFBQVEsR0FBRyxFQUNsRSxXQUFXLENBQ1osQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVELENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7SUFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsT0FBTyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7QUFDNUUsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlbnYgPSBnbG9iYWxUaGlzIGFzIGFueTtcblxuLyoqXG4gKiBBbGxvd3MgVml0ZXN0IHRvIGhhbmRsZSBBbmd1bGFyIHRlc3QgZml4dHVyZXNcbiAqXG4gKiBWaXRlc3QgU25hcHNob3QgZ3VpZGUgPT0+IGh0dHBzOi8vdml0ZXN0LmRldi9ndWlkZS9zbmFwc2hvdC5odG1sXG4gKlxuICogQHJldHVybnMgY3VzdG9tU25hcHNob3RTZXJpYWxpemVyIGZvciBBbmd1bGFyIEZpeHR1cmUgQ29tcG9uZW50XG4gKi9cbmNvbnN0IGN1c3RvbVNuYXBzaG90U2VyaWFsaXplciA9ICgpID0+IHtcbiAgZnVuY3Rpb24gc2VyaWFsaXplKFxuICAgIHZhbDogYW55LFxuICAgIGNvbmZpZzogYW55LFxuICAgIGluZGVudGF0aW9uOiBhbnksXG4gICAgZGVwdGg6IGFueSxcbiAgICByZWZzOiBhbnksXG4gICAgcHJpbnRlcjogYW55LFxuICApOiBzdHJpbmcge1xuICAgIC8vIGBwcmludGVyYCBpcyBhIGZ1bmN0aW9uIHRoYXQgc2VyaWFsaXplcyBhIHZhbHVlIHVzaW5nIGV4aXN0aW5nIHBsdWdpbnMuXG4gICAgcmV0dXJuIGAke3ByaW50ZXIoXG4gICAgICBmaXh0dXJlVml0ZXN0U2VyaWFsaXplcih2YWwpLFxuICAgICAgY29uZmlnLFxuICAgICAgaW5kZW50YXRpb24sXG4gICAgICBkZXB0aCxcbiAgICAgIHJlZnMsXG4gICAgKX1gO1xuICB9XG4gIGZ1bmN0aW9uIHRlc3QodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICAvLyAqIElmIGl0J3MgYSBDb21wb25lbnRGaXh0dXJlIHdlIGFwcGx5IHRoZSB0cmFuc2Zvcm1hdGlvbiBydWxlc1xuICAgIHJldHVybiB2YWwgJiYgaXNBbmd1bGFyRml4dHVyZSh2YWwpO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2VyaWFsaXplLFxuICAgIHRlc3QsXG4gIH07XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGlzIGFuIEFuZ3VsYXIgZml4dHVyZVxuICpcbiAqIEBwYXJhbSB2YWwgQW5ndWxhciBmaXh0dXJlXG4gKiBAcmV0dXJucyBib29sZWFuIHdobyBjaGVjayBpZiBpcyBhbiBhbmd1bGFyIGZpeHR1cmVcbiAqL1xuZnVuY3Rpb24gaXNBbmd1bGFyRml4dHVyZSh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodmFsWydjb21wb25lbnRSZWYnXSB8fCB2YWxbJ2NvbXBvbmVudEluc3RhbmNlJ10pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh2YWxbJ2NvbXBvbmVudFR5cGUnXSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gKiBBbmd1bGFyIGZpeHR1cmUga2V5cyBpbiBGaXh0dXJlIGNvbXBvbmVudCBPYmplY3RcbiAgY29uc3QgZml4dHVyZUtleXMgPSBbXG4gICAgJ2NvbXBvbmVudFJlZicsXG4gICAgJ25nWm9uZScsXG4gICAgJ2VmZmVjdFJ1bm5lcicsXG4gICAgJ19hdXRvRGV0ZWN0JyxcbiAgICAnX2lzU3RhYmxlJyxcbiAgICAnX2lzRGVzdHJveWVkJyxcbiAgICAnX3Jlc29sdmUnLFxuICAgICdfcHJvbWlzZScsXG4gICAgJ19vblVuc3RhYmxlU3Vic2NyaXB0aW9uJyxcbiAgICAnX29uU3RhYmxlU3Vic2NyaXB0aW9uJyxcbiAgICAnX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24nLFxuICAgICdfb25FcnJvclN1YnNjcmlwdGlvbicsXG4gICAgJ2NoYW5nZURldGVjdG9yUmVmJyxcbiAgICAnZWxlbWVudFJlZicsXG4gICAgJ2RlYnVnRWxlbWVudCcsXG4gICAgJ2NvbXBvbmVudEluc3RhbmNlJyxcbiAgICAnbmF0aXZlRWxlbWVudCcsXG4gIF07XG5cbiAgLy8gKiBBbmd1bGFyIGZpeHR1cmUga2V5cyBpbiBGaXh0dXJlIGNvbXBvbmVudFJlZiBPYmplY3RcbiAgY29uc3QgZml4dHVyZUNvbXBvbmVudFJlZktleXMgPSBbXG4gICAgJ2xvY2F0aW9uJyxcbiAgICAnX3Jvb3RMVmlldycsXG4gICAgJ190Tm9kZScsXG4gICAgJ3ByZXZpb3VzSW5wdXRWYWx1ZXMnLFxuICAgICdpbnN0YW5jZScsXG4gICAgJ2NoYW5nZURldGVjdG9yUmVmJyxcbiAgICAnaG9zdFZpZXcnLFxuICAgICdjb21wb25lbnRUeXBlJyxcbiAgXTtcblxuICByZXR1cm4gKFxuICAgIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHZhbCkpID09PSBKU09OLnN0cmluZ2lmeShmaXh0dXJlS2V5cykgfHxcbiAgICBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyh2YWwpKSA9PT0gSlNPTi5zdHJpbmdpZnkoZml4dHVyZUNvbXBvbmVudFJlZktleXMpXG4gICk7XG59XG5cbi8qKlxuICogU2VyaWFsaXplIEFuZ3VsYXIgZml4dHVyZSBmb3IgVml0ZXN0XG4gKlxuICogQHBhcmFtIGZpeHR1cmUgQW5ndWxhciBGaXh0dXJlIENvbXBvbmVudFxuICogQHJldHVybnMgSFRNTCBDaGlsZCBOb2RlXG4gKi9cbmZ1bmN0aW9uIGZpeHR1cmVWaXRlc3RTZXJpYWxpemVyKGZpeHR1cmU6IGFueSkge1xuICAvLyAqIEdldCBDb21wb25lbnQgbWV0YSBkYXRhXG4gIGNvbnN0IGNvbXBvbmVudFR5cGUgPSAoXG4gICAgZml4dHVyZSAmJiBmaXh0dXJlLmNvbXBvbmVudFR5cGVcbiAgICAgID8gZml4dHVyZS5jb21wb25lbnRUeXBlXG4gICAgICA6IGZpeHR1cmUuY29tcG9uZW50UmVmLmNvbXBvbmVudFR5cGVcbiAgKSBhcyBhbnk7XG5cbiAgbGV0IGlucHV0c0RhdGE6IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0IHNlbGVjdG9yID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgY29tcG9uZW50VHlwZSxcbiAgICAnX19hbm5vdGF0aW9uc19fJyxcbiAgKT8udmFsdWVbMF0uc2VsZWN0b3I7XG5cbiAgaWYgKGNvbXBvbmVudFR5cGUgJiYgY29tcG9uZW50VHlwZS5wcm9wRGVjb3JhdG9ycykge1xuICAgIGlucHV0c0RhdGEgPSBPYmplY3QuZW50cmllcyhjb21wb25lbnRUeXBlLnByb3BEZWNvcmF0b3JzKVxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9PVwiJHt2YWx1ZX1cImApXG4gICAgICAuam9pbignJyk7XG4gIH1cblxuICAvLyAqIEdldCBET00gRWxlbWVudHNcbiAgY29uc3QgZGl2RWxlbWVudCA9XG4gICAgZml4dHVyZSAmJiBmaXh0dXJlLm5hdGl2ZUVsZW1lbnRcbiAgICAgID8gZml4dHVyZS5uYXRpdmVFbGVtZW50XG4gICAgICA6IGZpeHR1cmUubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcblxuICAvLyAqIENvbnZlcnQgc3RyaW5nIGRhdGEgdG8gSFRNTCBkYXRhXG4gIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG4gICAgYDwke3NlbGVjdG9yfSAke2lucHV0c0RhdGF9PiR7ZGl2RWxlbWVudC5pbm5lckhUTUx9PC8ke3NlbGVjdG9yfT5gLFxuICAgICd0ZXh0L2h0bWwnLFxuICApO1xuXG4gIHJldHVybiBkb2MuYm9keS5jaGlsZE5vZGVzWzBdO1xufVxuXG5bJ2V4cGVjdCddLmZvckVhY2goKG1ldGhvZE5hbWUpID0+IHtcbiAgY29uc3Qgb3JpZ2luYWx2aXRlc3RGbiA9IGVudlttZXRob2ROYW1lXTtcbiAgcmV0dXJuIG9yaWdpbmFsdml0ZXN0Rm4uYWRkU25hcHNob3RTZXJpYWxpemVyKGN1c3RvbVNuYXBzaG90U2VyaWFsaXplcigpKTtcbn0pO1xuIl19
9
+ //#endregion
10
+
11
+ //# sourceMappingURL=setup-snapshots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-snapshots.js","names":[],"sources":["../setup-snapshots.ts"],"sourcesContent":["import { createAngularFixtureSnapshotSerializer } from './snapshot-serializers.js';\n\nconst env = globalThis as any;\n\n['expect'].forEach((methodName) => {\n const originalVitestFn = env[methodName];\n if (!originalVitestFn) {\n return;\n }\n originalVitestFn.addSnapshotSerializer(\n createAngularFixtureSnapshotSerializer(),\n );\n});\n"],"mappings":";;AAEA,IAAM,MAAM;AAEZ,CAAC,SAAS,CAAC,SAAS,eAAe;CACjC,MAAM,mBAAmB,IAAI;AAC7B,KAAI,CAAC,iBACH;AAEF,kBAAiB,sBACf,wCAAwC,CACzC;EACD"}
@@ -1,8 +1,15 @@
1
- import { Provider } from '@angular/core';
1
+ import { EnvironmentProviders, Provider } from "@angular/core";
2
2
  type TestBedSetupOptions = {
3
- zoneless?: boolean;
4
- providers?: Provider[];
5
- browserMode?: boolean;
3
+ zoneless?: boolean;
4
+ providers?: (Provider | EnvironmentProviders)[];
5
+ /**
6
+ * @deprecated Use `teardown.destroyAfterEach` instead.
7
+ * @sunset 3.0.0
8
+ */
9
+ browserMode?: boolean;
10
+ teardown?: {
11
+ destroyAfterEach: boolean;
12
+ };
6
13
  };
7
- export declare function setupTestBed({ zoneless, providers, browserMode, }?: TestBedSetupOptions): void;
14
+ export declare function setupTestBed({ zoneless, providers, browserMode, teardown }?: TestBedSetupOptions): void;
8
15
  export {};
package/setup-testbed.js CHANGED
@@ -1,25 +1,24 @@
1
- import { __decorate } from "tslib";
2
- import { NgModule, provideZonelessChangeDetection, } from '@angular/core';
3
- import { ɵgetCleanupHook as getCleanupHook, getTestBed, } from '@angular/core/testing';
4
- import { BrowserTestingModule, platformBrowserTesting, } from '@angular/platform-browser/testing';
5
- import { afterEach, beforeEach } from 'vitest';
6
- const ANGULAR_TESTBED_SETUP = Symbol.for('testbed-setup');
7
- export function setupTestBed({ zoneless = true, providers = [], browserMode = false, } = {}) {
8
- beforeEach(getCleanupHook(false));
9
- afterEach(getCleanupHook(true));
10
- if (!globalThis[ANGULAR_TESTBED_SETUP]) {
11
- globalThis[ANGULAR_TESTBED_SETUP] = true;
12
- let TestModule = class TestModule {
13
- };
14
- TestModule = __decorate([
15
- NgModule({
16
- providers: [
17
- ...(zoneless ? [provideZonelessChangeDetection()] : []),
18
- providers,
19
- ],
20
- })
21
- ], TestModule);
22
- getTestBed().initTestEnvironment([BrowserTestingModule, TestModule], platformBrowserTesting(), browserMode ? { teardown: { destroyAfterEach: false } } : undefined);
23
- }
1
+ import { __decorate } from "./_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
2
+ import { NgModule, provideZonelessChangeDetection } from "@angular/core";
3
+ import { getTestBed, ɵgetCleanupHook } from "@angular/core/testing";
4
+ import { BrowserTestingModule, platformBrowserTesting } from "@angular/platform-browser/testing";
5
+ import { afterEach, beforeEach } from "vitest";
6
+ //#region packages/vitest-angular/setup-testbed.ts
7
+ var ANGULAR_TESTBED_SETUP = Symbol.for("testbed-setup");
8
+ function setupTestBed({ zoneless = true, providers = [], browserMode = false, teardown } = {}) {
9
+ beforeEach(ɵgetCleanupHook(false));
10
+ afterEach(ɵgetCleanupHook(true));
11
+ if (!globalThis[ANGULAR_TESTBED_SETUP]) {
12
+ globalThis[ANGULAR_TESTBED_SETUP] = true;
13
+ let TestModule = class TestModule {};
14
+ TestModule = __decorate([NgModule({ providers: [...zoneless ? [provideZonelessChangeDetection()] : [], ...providers] })], TestModule);
15
+ getTestBed().initTestEnvironment([BrowserTestingModule, TestModule], platformBrowserTesting(), { teardown: {
16
+ destroyAfterEach: !browserMode,
17
+ ...teardown
18
+ } });
19
+ }
24
20
  }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtdGVzdGJlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3ZpdGVzdC1hbmd1bGFyL3NldHVwLXRlc3RiZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxRQUFRLEVBRVIsOEJBQThCLEdBQy9CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLElBQUksY0FBYyxFQUNqQyxVQUFVLEdBQ1gsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHNCQUFzQixHQUN2QixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRS9DLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQVExRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEVBQzNCLFFBQVEsR0FBRyxJQUFJLEVBQ2YsU0FBUyxHQUFHLEVBQUUsRUFDZCxXQUFXLEdBQUcsS0FBSyxNQUNJLEVBQUU7SUFDekIsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVoQyxJQUFJLENBQUUsVUFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7UUFDL0MsVUFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLElBQUksQ0FBQztRQVFsRCxJQUFNLFVBQVUsR0FBaEIsTUFBTSxVQUFVO1NBQUcsQ0FBQTtRQUFiLFVBQVU7WUFOZixRQUFRLENBQUM7Z0JBQ1IsU0FBUyxFQUFFO29CQUNULEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZELFNBQVM7aUJBQ1Y7YUFDRixDQUFDO1dBQ0ksVUFBVSxDQUFHO1FBRW5CLFVBQVUsRUFBRSxDQUFDLG1CQUFtQixDQUM5QixDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxFQUNsQyxzQkFBc0IsRUFBRSxFQUN4QixXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNwRSxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBOZ01vZHVsZSxcbiAgUHJvdmlkZXIsXG4gIHByb3ZpZGVab25lbGVzc0NoYW5nZURldGVjdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICDJtWdldENsZWFudXBIb29rIGFzIGdldENsZWFudXBIb29rLFxuICBnZXRUZXN0QmVkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlL3Rlc3RpbmcnO1xuaW1wb3J0IHtcbiAgQnJvd3NlclRlc3RpbmdNb2R1bGUsXG4gIHBsYXRmb3JtQnJvd3NlclRlc3RpbmcsXG59IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvdGVzdGluZyc7XG5pbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZUVhY2ggfSBmcm9tICd2aXRlc3QnO1xuXG5jb25zdCBBTkdVTEFSX1RFU1RCRURfU0VUVVAgPSBTeW1ib2wuZm9yKCd0ZXN0YmVkLXNldHVwJyk7XG5cbnR5cGUgVGVzdEJlZFNldHVwT3B0aW9ucyA9IHtcbiAgem9uZWxlc3M/OiBib29sZWFuO1xuICBwcm92aWRlcnM/OiBQcm92aWRlcltdO1xuICBicm93c2VyTW9kZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBUZXN0QmVkKHtcbiAgem9uZWxlc3MgPSB0cnVlLFxuICBwcm92aWRlcnMgPSBbXSxcbiAgYnJvd3Nlck1vZGUgPSBmYWxzZSxcbn06IFRlc3RCZWRTZXR1cE9wdGlvbnMgPSB7fSkge1xuICBiZWZvcmVFYWNoKGdldENsZWFudXBIb29rKGZhbHNlKSk7XG4gIGFmdGVyRWFjaChnZXRDbGVhbnVwSG9vayh0cnVlKSk7XG5cbiAgaWYgKCEoZ2xvYmFsVGhpcyBhcyBhbnkpW0FOR1VMQVJfVEVTVEJFRF9TRVRVUF0pIHtcbiAgICAoZ2xvYmFsVGhpcyBhcyBhbnkpW0FOR1VMQVJfVEVTVEJFRF9TRVRVUF0gPSB0cnVlO1xuXG4gICAgQE5nTW9kdWxlKHtcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAuLi4oem9uZWxlc3MgPyBbcHJvdmlkZVpvbmVsZXNzQ2hhbmdlRGV0ZWN0aW9uKCldIDogW10pLFxuICAgICAgICBwcm92aWRlcnMsXG4gICAgICBdLFxuICAgIH0pXG4gICAgY2xhc3MgVGVzdE1vZHVsZSB7fVxuXG4gICAgZ2V0VGVzdEJlZCgpLmluaXRUZXN0RW52aXJvbm1lbnQoXG4gICAgICBbQnJvd3NlclRlc3RpbmdNb2R1bGUsIFRlc3RNb2R1bGVdLFxuICAgICAgcGxhdGZvcm1Ccm93c2VyVGVzdGluZygpLFxuICAgICAgYnJvd3Nlck1vZGUgPyB7IHRlYXJkb3duOiB7IGRlc3Ryb3lBZnRlckVhY2g6IGZhbHNlIH0gfSA6IHVuZGVmaW5lZCxcbiAgICApO1xuICB9XG59XG4iXX0=
21
+ //#endregion
22
+ export { setupTestBed };
23
+
24
+ //# sourceMappingURL=setup-testbed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-testbed.js","names":[],"sources":["../setup-testbed.ts"],"sourcesContent":["import {\n EnvironmentProviders,\n NgModule,\n Provider,\n provideZonelessChangeDetection,\n} from '@angular/core';\nimport {\n ɵgetCleanupHook as getCleanupHook,\n getTestBed,\n} from '@angular/core/testing';\nimport {\n BrowserTestingModule,\n platformBrowserTesting,\n} from '@angular/platform-browser/testing';\nimport { afterEach, beforeEach } from 'vitest';\n\nconst ANGULAR_TESTBED_SETUP = Symbol.for('testbed-setup');\n\ntype TestBedSetupOptions = {\n zoneless?: boolean;\n providers?: (Provider | EnvironmentProviders)[];\n /**\n * @deprecated Use `teardown.destroyAfterEach` instead.\n * @sunset 3.0.0\n */\n browserMode?: boolean;\n teardown?: {\n destroyAfterEach: boolean;\n };\n};\n\nexport function setupTestBed({\n zoneless = true,\n providers = [],\n browserMode = false,\n teardown,\n}: TestBedSetupOptions = {}): void {\n beforeEach(getCleanupHook(false));\n afterEach(getCleanupHook(true));\n\n if (!(globalThis as any)[ANGULAR_TESTBED_SETUP]) {\n (globalThis as any)[ANGULAR_TESTBED_SETUP] = true;\n\n @NgModule({\n providers: [\n ...(zoneless ? [provideZonelessChangeDetection()] : []),\n ...providers,\n ],\n })\n class TestModule {}\n\n getTestBed().initTestEnvironment(\n [BrowserTestingModule, TestModule],\n platformBrowserTesting(),\n {\n teardown: {\n ...{ destroyAfterEach: !browserMode },\n ...teardown,\n },\n },\n );\n }\n}\n"],"mappings":";;;;;;AAgBA,IAAM,wBAAwB,OAAO,IAAI,gBAAgB;AAezD,SAAgB,aAAa,EAC3B,WAAW,MACX,YAAY,EAAE,EACd,cAAc,OACd,aACuB,EAAE,EAAQ;AACjC,YAAW,gBAAe,MAAM,CAAC;AACjC,WAAU,gBAAe,KAAK,CAAC;AAE/B,KAAI,CAAE,WAAmB,wBAAwB;AAC9C,aAAmB,yBAAyB;EAE7C,IAAA,aAAA,MAMM,WAAW;2BANhB,SAAS,EACR,WAAW,CACT,GAAI,WAAW,CAAC,gCAAgC,CAAC,GAAG,EAAE,EACtD,GAAG,UACJ,EACF,CAAC,CAAA,EAAA,WAAA;AAGF,cAAY,CAAC,oBACX,CAAC,sBAAsB,WAAW,EAClC,wBAAwB,EACxB,EACE,UAAU;GACH,kBAAkB,CAAC;GACxB,GAAG;GACJ,EACF,CACF"}
package/setup-zone.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import 'zone.js';
2
- import 'zone.js/plugins/sync-test';
3
- import 'zone.js/plugins/proxy';
4
- import 'zone.js/testing';
5
- import './setup-snapshots.js';
1
+ import "zone.js";
2
+ import "zone.js/plugins/sync-test";
3
+ import "zone.js/plugins/proxy";
4
+ import "zone.js/testing";
5
+ import "./setup-snapshots.js";
6
+ export {};
package/setup-zone.js CHANGED
@@ -1,117 +1,102 @@
1
- import 'zone.js';
2
- import 'zone.js/plugins/sync-test';
3
- import 'zone.js/plugins/proxy';
4
- import 'zone.js/testing';
5
- import './setup-snapshots.js';
1
+ import "./setup-snapshots.js";
2
+ import "zone.js";
3
+ import "zone.js/plugins/sync-test";
4
+ import "zone.js/plugins/proxy";
5
+ import "zone.js/testing";
6
+ //#region packages/vitest-angular/setup-zone.ts
6
7
  /**
7
- * Patch Vitest's describe/test/beforeEach/afterEach functions so test code
8
- * always runs in a testZone (ProxyZone).
9
- */
10
- /* global Zone */
11
- const Zone = globalThis['Zone'];
12
- if (Zone === undefined) {
13
- throw new Error('Missing: Zone (zone.js)');
14
- }
15
- if (globalThis['__vitest_zone_patch__'] === true) {
16
- throw new Error("'vitest' has already been patched with 'Zone'.");
17
- }
18
- globalThis['__vitest_zone_patch__'] = true;
19
- const SyncTestZoneSpec = Zone['SyncTestZoneSpec'];
20
- const ProxyZoneSpec = Zone['ProxyZoneSpec'];
21
- if (SyncTestZoneSpec === undefined) {
22
- throw new Error('Missing: SyncTestZoneSpec (zone.js/plugins/sync-test)');
23
- }
24
- if (ProxyZoneSpec === undefined) {
25
- throw new Error('Missing: ProxyZoneSpec (zone.js/plugins/proxy.js)');
26
- }
27
- const env = globalThis;
28
- const ambientZone = Zone.current;
29
- // Create a synchronous-only zone in which to run `describe` blocks in order to
30
- // raise an error if any asynchronous operations are attempted
31
- // inside of a `describe` but outside of a `beforeEach` or `it`.
32
- const syncZone = ambientZone.fork(new SyncTestZoneSpec('vitest.describe'));
8
+ * Patch Vitest's describe/test/beforeEach/afterEach functions so test code
9
+ * always runs in a testZone (ProxyZone).
10
+ */
11
+ var Zone = globalThis["Zone"];
12
+ if (Zone === void 0) throw new Error("Missing: Zone (zone.js)");
13
+ if (globalThis["__vitest_zone_patch__"] === true) throw new Error("'vitest' has already been patched with 'Zone'.");
14
+ globalThis["__vitest_zone_patch__"] = true;
15
+ var SyncTestZoneSpec = Zone["SyncTestZoneSpec"];
16
+ var ProxyZoneSpec = Zone["ProxyZoneSpec"];
17
+ if (SyncTestZoneSpec === void 0) throw new Error("Missing: SyncTestZoneSpec (zone.js/plugins/sync-test)");
18
+ if (ProxyZoneSpec === void 0) throw new Error("Missing: ProxyZoneSpec (zone.js/plugins/proxy.js)");
19
+ var env = globalThis;
20
+ var ambientZone = Zone.current;
21
+ var syncZone = ambientZone.fork(new SyncTestZoneSpec("vitest.describe"));
33
22
  function wrapDescribeInZone(describeBody) {
34
- return function (...args) {
35
- return syncZone.run(describeBody, null, args);
36
- };
23
+ return function(...args) {
24
+ return syncZone.run(describeBody, null, args);
25
+ };
37
26
  }
38
- // Create a proxy zone in which to run `test` blocks so that the tests function
39
- // can retroactively install different zones.
40
- const testProxyZone = ambientZone.fork(new ProxyZoneSpec());
27
+ var testProxyZone = ambientZone.fork(new ProxyZoneSpec());
41
28
  function wrapTestInZone(testBody) {
42
- if (testBody === undefined) {
43
- return;
44
- }
45
- const wrappedFunc = function () {
46
- return testProxyZone.run(testBody, null, arguments);
47
- };
48
- try {
49
- Object.defineProperty(wrappedFunc, 'length', {
50
- configurable: true,
51
- writable: true,
52
- enumerable: false,
53
- });
54
- wrappedFunc.length = testBody.length;
55
- }
56
- catch (e) {
57
- return testBody.length === 0
58
- ? () => testProxyZone.run(testBody, null)
59
- : (done) => testProxyZone.run(testBody, null, [done]);
60
- }
61
- return wrappedFunc;
29
+ if (testBody === void 0) return;
30
+ const wrappedFunc = function(...args) {
31
+ return testProxyZone.run(testBody, null, args);
32
+ };
33
+ try {
34
+ Object.defineProperty(wrappedFunc, "length", {
35
+ configurable: true,
36
+ writable: true,
37
+ enumerable: false
38
+ });
39
+ wrappedFunc.length = testBody.length;
40
+ } catch (e) {
41
+ return testBody.length === 0 ? () => testProxyZone.run(testBody, null) : (done) => testProxyZone.run(testBody, null, [done]);
42
+ }
43
+ return wrappedFunc;
62
44
  }
63
45
  /**
64
- * bind describe method to wrap describe.each function
65
- */
66
- const bindDescribe = (self, originalVitestFn) => function (...eachArgs) {
67
- return function (...args) {
68
- args[1] = wrapDescribeInZone(args[1]);
69
- // @ts-ignore
70
- return originalVitestFn.apply(self, eachArgs).apply(self, args);
71
- };
46
+ * bind describe method to wrap describe.each function
47
+ */
48
+ var bindDescribe = (self, originalVitestFn) => function(...eachArgs) {
49
+ return function(...args) {
50
+ args[1] = wrapDescribeInZone(args[1]);
51
+ return originalVitestFn.apply(self, eachArgs).apply(self, args);
52
+ };
72
53
  };
73
54
  /**
74
- * bind test method to wrap test.each function
75
- */
76
- const bindTest = (self, originalVitestFn) => function (...eachArgs) {
77
- return function (...args) {
78
- args[1] = wrapTestInZone(args[1]);
79
- // @ts-ignore
80
- return originalVitestFn.apply(self, eachArgs).apply(self, args);
81
- };
55
+ * bind test method to wrap test.each function
56
+ */
57
+ var bindTest = (self, originalVitestFn) => function(...eachArgs) {
58
+ return function(...args) {
59
+ args[1] = wrapTestInZone(args[1]);
60
+ return originalVitestFn.apply(self, eachArgs).apply(self, args);
61
+ };
82
62
  };
83
- ['describe'].forEach((methodName) => {
84
- const originalvitestFn = env[methodName];
85
- env[methodName] = function (...args) {
86
- args[1] = wrapDescribeInZone(args[1]);
87
- return originalvitestFn.apply(this, args);
88
- };
89
- env[methodName].each = bindDescribe(originalvitestFn, originalvitestFn.each);
90
- if (methodName === 'describe') {
91
- env[methodName].only = bindDescribe(originalvitestFn, originalvitestFn.only);
92
- env[methodName].skip = bindDescribe(originalvitestFn, originalvitestFn.skip);
93
- }
63
+ ["describe"].forEach((methodName) => {
64
+ const originalvitestFn = env[methodName];
65
+ env[methodName] = function(...args) {
66
+ args[1] = wrapDescribeInZone(args[1]);
67
+ return originalvitestFn.apply(this, args);
68
+ };
69
+ env[methodName].each = bindDescribe(originalvitestFn, originalvitestFn.each);
70
+ if (methodName === "describe") {
71
+ env[methodName].only = bindDescribe(originalvitestFn, originalvitestFn.only);
72
+ env[methodName].skip = bindDescribe(originalvitestFn, originalvitestFn.skip);
73
+ }
94
74
  });
95
- ['test', 'it'].forEach((methodName) => {
96
- const originalvitestFn = env[methodName];
97
- env[methodName] = function (...args) {
98
- args[1] = wrapTestInZone(args[1]);
99
- return originalvitestFn.apply(this, args);
100
- };
101
- env[methodName].each = bindTest(originalvitestFn, originalvitestFn.each);
102
- env[methodName].only = bindTest(originalvitestFn, originalvitestFn.only);
103
- env[methodName].skip = bindTest(originalvitestFn, originalvitestFn.skip);
104
- if (methodName === 'test' || methodName === 'it') {
105
- env[methodName].todo = function (...args) {
106
- return originalvitestFn.todo.apply(this, args);
107
- };
108
- }
75
+ ["test", "it"].forEach((methodName) => {
76
+ const originalvitestFn = env[methodName];
77
+ env[methodName] = function(...args) {
78
+ args[1] = wrapTestInZone(args[1]);
79
+ return originalvitestFn.apply(this, args);
80
+ };
81
+ env[methodName].each = bindTest(originalvitestFn, originalvitestFn.each);
82
+ env[methodName].only = bindTest(originalvitestFn, originalvitestFn.only);
83
+ env[methodName].skip = bindTest(originalvitestFn, originalvitestFn.skip);
84
+ if (methodName === "test" || methodName === "it") env[methodName].todo = function(...args) {
85
+ return originalvitestFn.todo.apply(this, args);
86
+ };
109
87
  });
110
- ['beforeEach', 'afterEach', 'beforeAll', 'afterAll'].forEach((methodName) => {
111
- const originalvitestFn = env[methodName];
112
- env[methodName] = function (...args) {
113
- args[0] = wrapTestInZone(args[0]);
114
- return originalvitestFn.apply(this, args);
115
- };
88
+ [
89
+ "beforeEach",
90
+ "afterEach",
91
+ "beforeAll",
92
+ "afterAll"
93
+ ].forEach((methodName) => {
94
+ const originalvitestFn = env[methodName];
95
+ env[methodName] = function(...args) {
96
+ args[0] = wrapTestInZone(args[0]);
97
+ return originalvitestFn.apply(this, args);
98
+ };
116
99
  });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtem9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3ZpdGVzdC1hbmd1bGFyL3NldHVwLXpvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxTQUFTLENBQUM7QUFDakIsT0FBTywyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8saUJBQWlCLENBQUM7QUFFekIsT0FBTyxzQkFBc0IsQ0FBQztBQUM5Qjs7O0dBR0c7QUFDSCxpQkFBaUI7QUFDakIsTUFBTSxJQUFJLEdBQUksVUFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUV6QyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztJQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELElBQUssVUFBa0IsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUEsVUFBa0IsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUU1QyxJQUFJLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO0lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBQ0QsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFLENBQUM7SUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLEdBQUcsR0FBRyxVQUFpQixDQUFDO0FBQzlCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxP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QUFVLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXpFLElBQUksVUFBVSxLQUFLLE1BQU0sSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDakQsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLEdBQUcsSUFBUztZQUMzQyxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7SUFDMUUsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFekMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFXO1FBQ3hDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEMsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICd6b25lLmpzJztcbmltcG9ydCAnem9uZS5qcy9wbHVnaW5zL3N5bmMtdGVzdCc7XG5pbXBvcnQgJ3pvbmUuanMvcGx1Z2lucy9wcm94eSc7XG5pbXBvcnQgJ3pvbmUuanMvdGVzdGluZyc7XG5cbmltcG9ydCAnLi9zZXR1cC1zbmFwc2hvdHMuanMnO1xuLyoqXG4gKiBQYXRjaCBWaXRlc3QncyBkZXNjcmliZS90ZXN0L2JlZm9yZUVhY2gvYWZ0ZXJFYWNoIGZ1bmN0aW9ucyBzbyB0ZXN0IGNvZGVcbiAqIGFsd2F5cyBydW5zIGluIGEgdGVzdFpvbmUgKFByb3h5Wm9uZSkuXG4gKi9cbi8qIGdsb2JhbCBab25lICovXG5jb25zdCBab25lID0gKGdsb2JhbFRoaXMgYXMgYW55KVsnWm9uZSddO1xuXG5pZiAoWm9uZSA9PT0gdW5kZWZpbmVkKSB7XG4gIHRocm93IG5ldyBFcnJvcignTWlzc2luZzogWm9uZSAoem9uZS5qcyknKTtcbn1cblxuaWYgKChnbG9iYWxUaGlzIGFzIGFueSlbJ19fdml0ZXN0X3pvbmVfcGF0Y2hfXyddID09PSB0cnVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIid2aXRlc3QnIGhhcyBhbHJlYWR5IGJlZW4gcGF0Y2hlZCB3aXRoICdab25lJy5cIik7XG59XG5cbihnbG9iYWxUaGlzIGFzIGFueSlbJ19fdml0ZXN0X3pvbmVfcGF0Y2hfXyddID0gdHJ1ZTtcbmNvbnN0IFN5bmNUZXN0Wm9uZVNwZWMgPSBab25lWydTeW5jVGVzdFpvbmVTcGVjJ107XG5jb25zdCBQcm94eVpvbmVTcGVjID0gWm9uZVsnUHJveHlab25lU3BlYyddO1xuXG5pZiAoU3luY1Rlc3Rab25lU3BlYyA9PT0gdW5kZWZpbmVkKSB7XG4gIHRocm93IG5ldyBFcnJvcignTWlzc2luZzogU3luY1Rlc3Rab25lU3BlYyAoem9uZS5qcy9wbHVnaW5zL3N5bmMtdGVzdCknKTtcbn1cbmlmIChQcm94eVpvbmVTcGVjID09PSB1bmRlZmluZWQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nOiBQcm94eVpvbmVTcGVjICh6b25lLmpzL3BsdWdpbnMvcHJveHkuanMpJyk7XG59XG5cbmNvbnN0IGVudiA9IGdsb2JhbFRoaXMgYXMgYW55O1xuY29uc3QgYW1iaWVudFpvbmUgPSBab25lLmN1cnJlbnQ7XG5cbi8vIENyZWF0ZSBhIHN5bmNocm9ub3VzLW9ubHkgem9uZSBpbiB3aGljaCB0byBydW4gYGRlc2NyaWJlYCBibG9ja3MgaW4gb3JkZXIgdG9cbi8vIHJhaXNlIGFuIGVycm9yIGlmIGFueSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBhcmUgYXR0ZW1wdGVkXG4vLyBpbnNpZGUgb2YgYSBgZGVzY3JpYmVgIGJ1dCBvdXRzaWRlIG9mIGEgYGJlZm9yZUVhY2hgIG9yIGBpdGAuXG5jb25zdCBzeW5jWm9uZSA9IGFtYmllbnRab25lLmZvcmsobmV3IFN5bmNUZXN0Wm9uZVNwZWMoJ3ZpdGVzdC5kZXNjcmliZScpKTtcbmZ1bmN0aW9uIHdyYXBEZXNjcmliZUluWm9uZShkZXNjcmliZUJvZHk6IGFueSkge1xuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueSkge1xuICAgIHJldHVybiBzeW5jWm9uZS5ydW4oZGVzY3JpYmVCb2R5LCBudWxsLCBhcmdzKTtcbiAgfTtcbn1cblxuLy8gQ3JlYXRlIGEgcHJveHkgem9uZSBpbiB3aGljaCB0byBydW4gYHRlc3RgIGJsb2NrcyBzbyB0aGF0IHRoZSB0ZXN0cyBmdW5jdGlvblxuLy8gY2FuIHJldHJvYWN0aXZlbHkgaW5zdGFsbCBkaWZmZXJlbnQgem9uZXMuXG5jb25zdCB0ZXN0UHJveHlab25lID0gYW1iaWVudFpvbmUuZm9yayhuZXcgUHJveHlab25lU3BlYygpKTtcbmZ1bmN0aW9uIHdyYXBUZXN0SW5ab25lKHRlc3RCb2R5OiBzdHJpbmcgfCBhbnlbXSB8IHVuZGVmaW5lZCkge1xuICBpZiAodGVzdEJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHdyYXBwZWRGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0ZXN0UHJveHlab25lLnJ1bih0ZXN0Qm9keSwgbnVsbCwgYXJndW1lbnRzKTtcbiAgfTtcbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod3JhcHBlZEZ1bmMsICdsZW5ndGgnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIHdyYXBwZWRGdW5jLmxlbmd0aCA9IHRlc3RCb2R5Lmxlbmd0aDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0ZXN0Qm9keS5sZW5ndGggPT09IDBcbiAgICAgID8gKCkgPT4gdGVzdFByb3h5Wm9uZS5ydW4odGVzdEJvZHksIG51bGwpXG4gICAgICA6IChkb25lOiBhbnkpID0+IHRlc3RQcm94eVpvbmUucnVuKHRlc3RCb2R5LCBudWxsLCBbZG9uZV0pO1xuICB9XG5cbiAgcmV0dXJuIHdyYXBwZWRGdW5jO1xufVxuXG4vKipcbiAqIGJpbmQgZGVzY3JpYmUgbWV0aG9kIHRvIHdyYXAgZGVzY3JpYmUuZWFjaCBmdW5jdGlvblxuICovXG5jb25zdCBiaW5kRGVzY3JpYmUgPSAoXG4gIHNlbGY6IGFueSxcbiAgb3JpZ2luYWxWaXRlc3RGbjoge1xuICAgIGFwcGx5OiAoXG4gICAgICBhcmcwOiBhbnksXG4gICAgICBhcmcxOiBhbnlbXSxcbiAgICApID0+IHtcbiAgICAgICgpOiBhbnk7XG4gICAgICBuZXcgKCk6IGFueTtcbiAgICAgIGFwcGx5OiB7IChhcmcwOiBhbnksIGFyZzE6IGFueVtdKTogYW55OyBuZXcgKCk6IGFueSB9O1xuICAgIH07XG4gIH0sXG4pID0+XG4gIGZ1bmN0aW9uICguLi5lYWNoQXJnczogYW55KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgYXJnc1sxXSA9IHdyYXBEZXNjcmliZUluWm9uZShhcmdzWzFdKTtcblxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG9yaWdpbmFsVml0ZXN0Rm4uYXBwbHkoc2VsZiwgZWFjaEFyZ3MpLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIH07XG4gIH07XG5cbi8qKlxuICogYmluZCB0ZXN0IG1ldGhvZCB0byB3cmFwIHRlc3QuZWFjaCBmdW5jdGlvblxuICovXG5jb25zdCBiaW5kVGVzdCA9IChcbiAgc2VsZjogYW55LFxuICBvcmlnaW5hbFZpdGVzdEZuOiB7XG4gICAgYXBwbHk6IChcbiAgICAgIGFyZzA6IGFueSxcbiAgICAgIGFyZzE6IGFueVtdLFxuICAgICkgPT4ge1xuICAgICAgKCk6IGFueTtcbiAgICAgIG5ldyAoKTogYW55O1xuICAgICAgYXBwbHk6IHsgKGFyZzA6IGFueSwgYXJnMTogYW55W10pOiBhbnk7IG5ldyAoKTogYW55IH07XG4gICAgfTtcbiAgfSxcbikgPT5cbiAgZnVuY3Rpb24gKC4uLmVhY2hBcmdzOiBhbnkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBhcmdzWzFdID0gd3JhcFRlc3RJblpvbmUoYXJnc1sxXSk7XG5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBvcmlnaW5hbFZpdGVzdEZuLmFwcGx5KHNlbGYsIGVhY2hBcmdzKS5hcHBseShzZWxmLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG5bJ2Rlc2NyaWJlJ10uZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xuICBjb25zdCBvcmlnaW5hbHZpdGVzdEZuID0gZW52W21ldGhvZE5hbWVdO1xuICBlbnZbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcbiAgICBhcmdzWzFdID0gd3JhcERlc2NyaWJlSW5ab25lKGFyZ3NbMV0pO1xuXG4gICAgcmV0dXJuIG9yaWdpbmFsdml0ZXN0Rm4uYXBwbHkodGhpcywgYXJncyk7XG4gIH07XG4gIGVudlttZXRob2ROYW1lXS5lYWNoID0gYmluZERlc2NyaWJlKG9yaWdpbmFsdml0ZXN0Rm4sIG9yaWdpbmFsdml0ZXN0Rm4uZWFjaCk7XG4gIGlmIChtZXRob2ROYW1lID09PSAnZGVzY3JpYmUnKSB7XG4gICAgZW52W21ldGhvZE5hbWVdLm9ubHkgPSBiaW5kRGVzY3JpYmUoXG4gICAgICBvcmlnaW5hbHZpdGVzdEZuLFxuICAgICAgb3JpZ2luYWx2aXRlc3RGbi5vbmx5LFxuICAgICk7XG4gICAgZW52W21ldGhvZE5hbWVdLnNraXAgPSBiaW5kRGVzY3JpYmUoXG4gICAgICBvcmlnaW5hbHZpdGVzdEZuLFxuICAgICAgb3JpZ2luYWx2aXRlc3RGbi5za2lwLFxuICAgICk7XG4gIH1cbn0pO1xuXG5bJ3Rlc3QnLCAnaXQnXS5mb3JFYWNoKChtZXRob2ROYW1lKSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsdml0ZXN0Rm4gPSBlbnZbbWV0aG9kTmFtZV07XG4gIGVudlttZXRob2ROYW1lXSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgIGFyZ3NbMV0gPSB3cmFwVGVzdEluWm9uZShhcmdzWzFdKTtcblxuICAgIHJldHVybiBvcmlnaW5hbHZpdGVzdEZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9O1xuICBlbnZbbWV0aG9kTmFtZV0uZWFjaCA9IGJpbmRUZXN0KG9yaWdpbmFsdml0ZXN0Rm4sIG9yaWdpbmFsdml0ZXN0Rm4uZWFjaCk7XG4gIGVudlttZXRob2ROYW1lXS5vbmx5ID0gYmluZFRlc3Qob3JpZ2luYWx2aXRlc3RGbiwgb3JpZ2luYWx2aXRlc3RGbi5vbmx5KTtcbiAgZW52W21ldGhvZE5hbWVdLnNraXAgPSBiaW5kVGVzdChvcmlnaW5hbHZpdGVzdEZuLCBvcmlnaW5hbHZpdGVzdEZuLnNraXApO1xuXG4gIGlmIChtZXRob2ROYW1lID09PSAndGVzdCcgfHwgbWV0aG9kTmFtZSA9PT0gJ2l0Jykge1xuICAgIGVudlttZXRob2ROYW1lXS50b2RvID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueSkge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsdml0ZXN0Rm4udG9kby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9XG59KTtcblxuWydiZWZvcmVFYWNoJywgJ2FmdGVyRWFjaCcsICdiZWZvcmVBbGwnLCAnYWZ0ZXJBbGwnXS5mb3JFYWNoKChtZXRob2ROYW1lKSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsdml0ZXN0Rm4gPSBlbnZbbWV0aG9kTmFtZV07XG5cbiAgZW52W21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgYXJnc1swXSA9IHdyYXBUZXN0SW5ab25lKGFyZ3NbMF0pO1xuXG4gICAgcmV0dXJuIG9yaWdpbmFsdml0ZXN0Rm4uYXBwbHkodGhpcywgYXJncyk7XG4gIH07XG59KTtcbiJdfQ==
100
+ //#endregion
101
+
102
+ //# sourceMappingURL=setup-zone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-zone.js","names":[],"sources":["../setup-zone.ts"],"sourcesContent":["import 'zone.js';\nimport 'zone.js/plugins/sync-test';\nimport 'zone.js/plugins/proxy';\nimport 'zone.js/testing';\n\nimport './setup-snapshots.js';\n/**\n * Patch Vitest's describe/test/beforeEach/afterEach functions so test code\n * always runs in a testZone (ProxyZone).\n */\n/* global Zone */\nconst Zone = (globalThis as any)['Zone'];\n\nif (Zone === undefined) {\n throw new Error('Missing: Zone (zone.js)');\n}\n\nif ((globalThis as any)['__vitest_zone_patch__'] === true) {\n throw new Error(\"'vitest' has already been patched with 'Zone'.\");\n}\n\n(globalThis as any)['__vitest_zone_patch__'] = true;\nconst SyncTestZoneSpec = Zone['SyncTestZoneSpec'];\nconst ProxyZoneSpec = Zone['ProxyZoneSpec'];\n\nif (SyncTestZoneSpec === undefined) {\n throw new Error('Missing: SyncTestZoneSpec (zone.js/plugins/sync-test)');\n}\nif (ProxyZoneSpec === undefined) {\n throw new Error('Missing: ProxyZoneSpec (zone.js/plugins/proxy.js)');\n}\n\nconst env = globalThis as any;\nconst ambientZone = Zone.current;\n\n// Create a synchronous-only zone in which to run `describe` blocks in order to\n// raise an error if any asynchronous operations are attempted\n// inside of a `describe` but outside of a `beforeEach` or `it`.\nconst syncZone = ambientZone.fork(new SyncTestZoneSpec('vitest.describe'));\nfunction wrapDescribeInZone(describeBody: any) {\n return function (...args: any) {\n return syncZone.run(describeBody, null, args);\n };\n}\n\n// Create a proxy zone in which to run `test` blocks so that the tests function\n// can retroactively install different zones.\nconst testProxyZone = ambientZone.fork(new ProxyZoneSpec());\nfunction wrapTestInZone(testBody: string | any[] | undefined) {\n if (testBody === undefined) {\n return;\n }\n\n const wrappedFunc = function (...args: any[]) {\n return testProxyZone.run(testBody, null, args);\n };\n try {\n Object.defineProperty(wrappedFunc, 'length', {\n configurable: true,\n writable: true,\n enumerable: false,\n });\n wrappedFunc.length = testBody.length;\n } catch (e) {\n return testBody.length === 0\n ? () => testProxyZone.run(testBody, null)\n : (done: any) => testProxyZone.run(testBody, null, [done]);\n }\n\n return wrappedFunc;\n}\n\n/**\n * bind describe method to wrap describe.each function\n */\nconst bindDescribe = (\n self: any,\n originalVitestFn: {\n apply: (\n arg0: any,\n arg1: any[],\n ) => {\n (): any;\n new (): any;\n apply: { (arg0: any, arg1: any[]): any; new (): any };\n };\n },\n) =>\n function (...eachArgs: any) {\n return function (...args: any[]) {\n args[1] = wrapDescribeInZone(args[1]);\n\n return originalVitestFn.apply(self, eachArgs).apply(self, args);\n };\n };\n\n/**\n * bind test method to wrap test.each function\n */\nconst bindTest = (\n self: any,\n originalVitestFn: {\n apply: (\n arg0: any,\n arg1: any[],\n ) => {\n (): any;\n new (): any;\n apply: { (arg0: any, arg1: any[]): any; new (): any };\n };\n },\n) =>\n function (...eachArgs: any) {\n return function (...args: any[]) {\n args[1] = wrapTestInZone(args[1]);\n\n return originalVitestFn.apply(self, eachArgs).apply(self, args);\n };\n };\n\n['describe'].forEach((methodName) => {\n const originalvitestFn = env[methodName];\n env[methodName] = function (...args: any[]) {\n args[1] = wrapDescribeInZone(args[1]);\n\n return originalvitestFn.apply(this, args);\n };\n env[methodName].each = bindDescribe(originalvitestFn, originalvitestFn.each);\n if (methodName === 'describe') {\n env[methodName].only = bindDescribe(\n originalvitestFn,\n originalvitestFn.only,\n );\n env[methodName].skip = bindDescribe(\n originalvitestFn,\n originalvitestFn.skip,\n );\n }\n});\n\n['test', 'it'].forEach((methodName) => {\n const originalvitestFn = env[methodName];\n env[methodName] = function (...args: any[]) {\n args[1] = wrapTestInZone(args[1]);\n\n return originalvitestFn.apply(this, args);\n };\n env[methodName].each = bindTest(originalvitestFn, originalvitestFn.each);\n env[methodName].only = bindTest(originalvitestFn, originalvitestFn.only);\n env[methodName].skip = bindTest(originalvitestFn, originalvitestFn.skip);\n\n if (methodName === 'test' || methodName === 'it') {\n env[methodName].todo = function (...args: any) {\n return originalvitestFn.todo.apply(this, args);\n };\n }\n});\n\n['beforeEach', 'afterEach', 'beforeAll', 'afterAll'].forEach((methodName) => {\n const originalvitestFn = env[methodName];\n\n env[methodName] = function (...args: any[]) {\n args[0] = wrapTestInZone(args[0]);\n\n return originalvitestFn.apply(this, args);\n };\n});\n"],"mappings":"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"}