@analogjs/vitest-angular 3.0.0-alpha.6 → 3.0.0-alpha.61

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 +7 -0
  2. package/_virtual/_@oxc-project_runtime@0.124.0/helpers/decorate.js +9 -0
  3. package/package.json +28 -12
  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 -12
  11. package/setup-testbed.js +23 -29
  12. package/setup-testbed.js.map +1 -0
  13. package/setup-zone.d.ts +5 -5
  14. package/setup-zone.js +92 -103
  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 +71 -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 +63 -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/{src/schematics → schematics}/setup/files/vite.config.mts.template +2 -7
  56. package/src/lib/tools/schematics/setup/index.d.ts +3 -0
  57. package/src/lib/tools/schematics/setup/index.js +55 -0
  58. package/src/lib/tools/schematics/setup/index.js.map +1 -0
  59. package/src/lib/tools/schematics/utils/angular.d.ts +3 -0
  60. package/src/lib/tools/schematics/utils/angular.js +21 -0
  61. package/src/lib/tools/schematics/utils/angular.js.map +1 -0
  62. package/src/lib/tools/schematics/utils/dependencies.d.ts +6 -0
  63. package/src/lib/tools/schematics/utils/dependencies.js +39 -0
  64. package/src/lib/tools/schematics/utils/dependencies.js.map +1 -0
  65. package/src/lib/tools/schematics/utils/index.d.ts +4 -0
  66. package/src/lib/tools/schematics/utils/index.js +4 -0
  67. package/src/lib/tools/schematics/utils/versions.d.ts +7 -0
  68. package/src/lib/tools/schematics/utils/versions.js +18 -0
  69. package/src/lib/tools/schematics/utils/versions.js.map +1 -0
  70. package/src/lib/tools/schematics/utils/workspace.d.ts +15 -0
  71. package/src/lib/tools/schematics/utils/workspace.js +21 -0
  72. package/src/lib/tools/schematics/utils/workspace.js.map +1 -0
  73. package/src/lib/tools/src/index.d.ts +1 -1
  74. package/src/lib/tools/src/schematics/setup/index.d.ts +2 -2
  75. package/src/lib/tools/src/schematics/utils/angular.d.ts +1 -1
  76. package/src/lib/tools/src/schematics/utils/dependencies.d.ts +2 -2
  77. package/src/lib/tools/src/schematics/utils/index.d.ts +4 -4
  78. package/src/lib/tools/src/schematics/utils/versions.d.ts +1 -1
  79. package/src/lib/tools/src/schematics/utils/workspace.d.ts +8 -8
  80. package/src/lib/tools/src/test-global-setup.d.ts +1 -0
  81. package/src/test-setup.d.ts +3 -0
  82. package/src/lib/builders/build/plugins/esbuild-downlevel-plugin.d.ts +0 -7
  83. package/src/lib/builders/build/plugins/esbuild-downlevel-plugin.js +0 -23
  84. package/src/lib/builders/build/utils.js +0 -1
  85. package/src/lib/tools/src/index.js +0 -6
  86. package/src/lib/tools/src/index.js.map +0 -1
  87. package/src/lib/tools/src/schematics/setup/index.js +0 -80
  88. package/src/lib/tools/src/schematics/setup/index.js.map +0 -1
  89. package/src/lib/tools/src/schematics/utils/angular.js +0 -27
  90. package/src/lib/tools/src/schematics/utils/angular.js.map +0 -1
  91. package/src/lib/tools/src/schematics/utils/dependencies.js +0 -49
  92. package/src/lib/tools/src/schematics/utils/dependencies.js.map +0 -1
  93. package/src/lib/tools/src/schematics/utils/index.js +0 -8
  94. package/src/lib/tools/src/schematics/utils/index.js.map +0 -1
  95. package/src/lib/tools/src/schematics/utils/versions.js +0 -13
  96. package/src/lib/tools/src/schematics/utils/versions.js.map +0 -1
  97. package/src/lib/tools/src/schematics/utils/workspace.js +0 -24
  98. package/src/lib/tools/src/schematics/utils/workspace.js.map +0 -1
  99. /package/src/lib/tools/{src/schematics → schematics}/jsonc-parser.d.ts +0 -0
  100. /package/src/lib/tools/{src/schematics → schematics}/semver.d.ts +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();
@@ -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.124.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,31 @@
1
1
  {
2
2
  "name": "@analogjs/vitest-angular",
3
- "version": "3.0.0-alpha.6",
3
+ "version": "3.0.0-alpha.61",
4
4
  "description": "Vitest Builder for Angular",
5
5
  "type": "module",
6
6
  "author": "Brandon Roberts <robertsbt@gmail.com>",
7
7
  "exports": {
8
- ".": "./src/index.js",
9
- "./package.json": "./package.json",
10
- "./setup-zone": "./setup-zone.js",
11
- "./setup-snapshots": "./setup-snapshots.js",
12
- "./setup-testbed": "./setup-testbed.js"
8
+ ".": {
9
+ "types": "./src/index.d.ts",
10
+ "default": "./src/index.js"
11
+ },
12
+ "./setup-zone": {
13
+ "types": "./setup-zone.d.ts",
14
+ "default": "./setup-zone.js"
15
+ },
16
+ "./setup-snapshots": {
17
+ "types": "./setup-snapshots.d.ts",
18
+ "default": "./setup-snapshots.js"
19
+ },
20
+ "./setup-serializers": {
21
+ "types": "./setup-serializers.d.ts",
22
+ "default": "./setup-serializers.js"
23
+ },
24
+ "./setup-testbed": {
25
+ "types": "./setup-testbed.d.ts",
26
+ "default": "./setup-testbed.js"
27
+ },
28
+ "./package.json": "./package.json"
13
29
  },
14
30
  "keywords": [
15
31
  "angular",
@@ -35,9 +51,12 @@
35
51
  "ng-add": {
36
52
  "save": "devDependencies"
37
53
  },
54
+ "dependencies": {
55
+ "oxc-transform": "^0.124.0"
56
+ },
38
57
  "peerDependencies": {
39
58
  "@analogjs/vite-plugin-angular": "*",
40
- "@angular-devkit/architect": ">=0.1500.0 < 0.2200.0",
59
+ "@angular-devkit/architect": ">=0.1500.0 < 0.2300.0",
41
60
  "@angular-devkit/schematics": ">=17.0.0",
42
61
  "vitest": "^1.3.1 || ^2.0.0 || ^3.0.0 || ^4.0.0",
43
62
  "zone.js": ">=0.14.0"
@@ -61,8 +80,5 @@
61
80
  "publishConfig": {
62
81
  "access": "public",
63
82
  "provenance": true
64
- },
65
- "types": "./src/index.d.ts",
66
- "module": "./src/index.js",
67
- "main": "./src/index.js"
68
- }
83
+ }
84
+ }
@@ -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: (...args: 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: serialize,
21
- test: 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtc25hcHNob3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvdml0ZXN0LWFuZ3VsYXIvc2V0dXAtc25hcHNob3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLEdBQUcsR0FBRyxVQUFpQixDQUFDO0FBRTlCOzs7Ozs7R0FNRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsR0FHL0IsRUFBRTtJQUNGLFNBQVMsU0FBUyxDQUNoQixHQUFRLEVBQ1IsTUFBVyxFQUNYLFdBQWdCLEVBQ2hCLEtBQVUsRUFDVixJQUFTLEVBQ1QsT0FBWTtRQUVaLDBFQUEwRTtRQUMxRSxPQUFPLEdBQUcsT0FBTyxDQUNmLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxFQUM1QixNQUFNLEVBQ04sV0FBVyxFQUNYLEtBQUssRUFDTCxJQUFJLENBQ0wsRUFBRSxDQUFDO0lBQ04sQ0FBQztJQUNELFNBQVMsSUFBSSxDQUFDLEdBQVE7UUFDcEIsaUVBQWlFO1FBQ2pFLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxPQUFPO1FBQ0wsU0FBUyxFQUFFLFNBQVM7UUFDcEIsSUFBSSxFQUFFLElBQUk7S0FDWCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxTQUFTLGdCQUFnQixDQUFDLEdBQVE7SUFDaEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQscURBQXFEO0lBQ3JELE1BQU0sV0FBVyxHQUFHO1FBQ2xCLGNBQWM7UUFDZCxRQUFRO1FBQ1IsY0FBYztRQUNkLGFBQWE7UUFDYixXQUFXO1FBQ1gsY0FBYztRQUNkLFVBQVU7UUFDVixVQUFVO1FBQ1YseUJBQXlCO1FBQ3pCLHVCQUF1QjtRQUN2QiwrQkFBK0I7UUFDL0Isc0JBQXNCO1FBQ3RCLG1CQUFtQjtRQUNuQixZQUFZO1FBQ1osY0FBYztRQUNkLG1CQUFtQjtRQUNuQixlQUFlO0tBQ2hCLENBQUM7SUFFRix3REFBd0Q7SUFDeEQsTUFBTSx1QkFBdUIsR0FBRztRQUM5QixVQUFVO1FBQ1YsWUFBWTtRQUNaLFFBQVE7UUFDUixxQkFBcUI7UUFDckIsVUFBVTtRQUNWLG1CQUFtQjtRQUNuQixVQUFVO1FBQ1YsZUFBZTtLQUNoQixDQUFDO0lBRUYsT0FBTyxDQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsQ0FDN0UsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsdUJBQXVCLENBQUMsT0FBWTtJQUMzQyw0QkFBNEI7SUFDNUIsTUFBTSxhQUFhLEdBQUcsQ0FDcEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxhQUFhO1FBQzlCLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYTtRQUN2QixDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQ2hDLENBQUM7SUFFVCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFFcEIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUMvQyxhQUFhLEVBQ2IsaUJBQWlCLENBQ2xCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUVyQixJQUFJLGFBQWEsSUFBSSxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbEQsVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQzthQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssS0FBSyxHQUFHLENBQUM7YUFDMUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVELHFCQUFxQjtJQUNyQixNQUFNLFVBQVUsR0FDZCxPQUFPLElBQUksT0FBTyxDQUFDLGFBQWE7UUFDOUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhO1FBQ3ZCLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztJQUVyQyxxQ0FBcUM7SUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQ3pDLElBQUksUUFBUSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsU0FBUyxLQUFLLFFBQVEsR0FBRyxFQUNsRSxXQUFXLENBQ1osQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVELENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7SUFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsT0FBTyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7QUFDNUUsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlbnYgPSBnbG9iYWxUaGlzIGFzIGFueTtcblxuLyoqXG4gKiBBbGxvd3MgVml0ZXN0IHRvIGhhbmRsZSBBbmd1bGFyIHRlc3QgZml4dHVyZXNcbiAqXG4gKiBWaXRlc3QgU25hcHNob3QgZ3VpZGUgPT0+IGh0dHBzOi8vdml0ZXN0LmRldi9ndWlkZS9zbmFwc2hvdC5odG1sXG4gKlxuICogQHJldHVybnMgY3VzdG9tU25hcHNob3RTZXJpYWxpemVyIGZvciBBbmd1bGFyIEZpeHR1cmUgQ29tcG9uZW50XG4gKi9cbmNvbnN0IGN1c3RvbVNuYXBzaG90U2VyaWFsaXplciA9ICgpOiB7XG4gIHNlcmlhbGl6ZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBzdHJpbmc7XG4gIHRlc3Q6ICh2YWw6IGFueSkgPT4gYm9vbGVhbjtcbn0gPT4ge1xuICBmdW5jdGlvbiBzZXJpYWxpemUoXG4gICAgdmFsOiBhbnksXG4gICAgY29uZmlnOiBhbnksXG4gICAgaW5kZW50YXRpb246IGFueSxcbiAgICBkZXB0aDogYW55LFxuICAgIHJlZnM6IGFueSxcbiAgICBwcmludGVyOiBhbnksXG4gICk6IHN0cmluZyB7XG4gICAgLy8gYHByaW50ZXJgIGlzIGEgZnVuY3Rpb24gdGhhdCBzZXJpYWxpemVzIGEgdmFsdWUgdXNpbmcgZXhpc3RpbmcgcGx1Z2lucy5cbiAgICByZXR1cm4gYCR7cHJpbnRlcihcbiAgICAgIGZpeHR1cmVWaXRlc3RTZXJpYWxpemVyKHZhbCksXG4gICAgICBjb25maWcsXG4gICAgICBpbmRlbnRhdGlvbixcbiAgICAgIGRlcHRoLFxuICAgICAgcmVmcyxcbiAgICApfWA7XG4gIH1cbiAgZnVuY3Rpb24gdGVzdCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vICogSWYgaXQncyBhIENvbXBvbmVudEZpeHR1cmUgd2UgYXBwbHkgdGhlIHRyYW5zZm9ybWF0aW9uIHJ1bGVzXG4gICAgcmV0dXJuIHZhbCAmJiBpc0FuZ3VsYXJGaXh0dXJlKHZhbCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzZXJpYWxpemU6IHNlcmlhbGl6ZSxcbiAgICB0ZXN0OiB0ZXN0LFxuICB9O1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBpcyBhbiBBbmd1bGFyIGZpeHR1cmVcbiAqXG4gKiBAcGFyYW0gdmFsIEFuZ3VsYXIgZml4dHVyZVxuICogQHJldHVybnMgYm9vbGVhbiB3aG8gY2hlY2sgaWYgaXMgYW4gYW5ndWxhciBmaXh0dXJlXG4gKi9cbmZ1bmN0aW9uIGlzQW5ndWxhckZpeHR1cmUodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHZhbFsnY29tcG9uZW50UmVmJ10gfHwgdmFsWydjb21wb25lbnRJbnN0YW5jZSddKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodmFsWydjb21wb25lbnRUeXBlJ10pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vICogQW5ndWxhciBmaXh0dXJlIGtleXMgaW4gRml4dHVyZSBjb21wb25lbnQgT2JqZWN0XG4gIGNvbnN0IGZpeHR1cmVLZXlzID0gW1xuICAgICdjb21wb25lbnRSZWYnLFxuICAgICduZ1pvbmUnLFxuICAgICdlZmZlY3RSdW5uZXInLFxuICAgICdfYXV0b0RldGVjdCcsXG4gICAgJ19pc1N0YWJsZScsXG4gICAgJ19pc0Rlc3Ryb3llZCcsXG4gICAgJ19yZXNvbHZlJyxcbiAgICAnX3Byb21pc2UnLFxuICAgICdfb25VbnN0YWJsZVN1YnNjcmlwdGlvbicsXG4gICAgJ19vblN0YWJsZVN1YnNjcmlwdGlvbicsXG4gICAgJ19vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9uJyxcbiAgICAnX29uRXJyb3JTdWJzY3JpcHRpb24nLFxuICAgICdjaGFuZ2VEZXRlY3RvclJlZicsXG4gICAgJ2VsZW1lbnRSZWYnLFxuICAgICdkZWJ1Z0VsZW1lbnQnLFxuICAgICdjb21wb25lbnRJbnN0YW5jZScsXG4gICAgJ25hdGl2ZUVsZW1lbnQnLFxuICBdO1xuXG4gIC8vICogQW5ndWxhciBmaXh0dXJlIGtleXMgaW4gRml4dHVyZSBjb21wb25lbnRSZWYgT2JqZWN0XG4gIGNvbnN0IGZpeHR1cmVDb21wb25lbnRSZWZLZXlzID0gW1xuICAgICdsb2NhdGlvbicsXG4gICAgJ19yb290TFZpZXcnLFxuICAgICdfdE5vZGUnLFxuICAgICdwcmV2aW91c0lucHV0VmFsdWVzJyxcbiAgICAnaW5zdGFuY2UnLFxuICAgICdjaGFuZ2VEZXRlY3RvclJlZicsXG4gICAgJ2hvc3RWaWV3JyxcbiAgICAnY29tcG9uZW50VHlwZScsXG4gIF07XG5cbiAgcmV0dXJuIChcbiAgICBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyh2YWwpKSA9PT0gSlNPTi5zdHJpbmdpZnkoZml4dHVyZUtleXMpIHx8XG4gICAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXModmFsKSkgPT09IEpTT04uc3RyaW5naWZ5KGZpeHR1cmVDb21wb25lbnRSZWZLZXlzKVxuICApO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSBBbmd1bGFyIGZpeHR1cmUgZm9yIFZpdGVzdFxuICpcbiAqIEBwYXJhbSBmaXh0dXJlIEFuZ3VsYXIgRml4dHVyZSBDb21wb25lbnRcbiAqIEByZXR1cm5zIEhUTUwgQ2hpbGQgTm9kZVxuICovXG5mdW5jdGlvbiBmaXh0dXJlVml0ZXN0U2VyaWFsaXplcihmaXh0dXJlOiBhbnkpOiBDaGlsZE5vZGUge1xuICAvLyAqIEdldCBDb21wb25lbnQgbWV0YSBkYXRhXG4gIGNvbnN0IGNvbXBvbmVudFR5cGUgPSAoXG4gICAgZml4dHVyZSAmJiBmaXh0dXJlLmNvbXBvbmVudFR5cGVcbiAgICAgID8gZml4dHVyZS5jb21wb25lbnRUeXBlXG4gICAgICA6IGZpeHR1cmUuY29tcG9uZW50UmVmLmNvbXBvbmVudFR5cGVcbiAgKSBhcyBhbnk7XG5cbiAgbGV0IGlucHV0c0RhdGEgPSAnJztcblxuICBjb25zdCBzZWxlY3RvciA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgIGNvbXBvbmVudFR5cGUsXG4gICAgJ19fYW5ub3RhdGlvbnNfXycsXG4gICk/LnZhbHVlWzBdLnNlbGVjdG9yO1xuXG4gIGlmIChjb21wb25lbnRUeXBlICYmIGNvbXBvbmVudFR5cGUucHJvcERlY29yYXRvcnMpIHtcbiAgICBpbnB1dHNEYXRhID0gT2JqZWN0LmVudHJpZXMoY29tcG9uZW50VHlwZS5wcm9wRGVjb3JhdG9ycylcbiAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT1cIiR7dmFsdWV9XCJgKVxuICAgICAgLmpvaW4oJycpO1xuICB9XG5cbiAgLy8gKiBHZXQgRE9NIEVsZW1lbnRzXG4gIGNvbnN0IGRpdkVsZW1lbnQgPVxuICAgIGZpeHR1cmUgJiYgZml4dHVyZS5uYXRpdmVFbGVtZW50XG4gICAgICA/IGZpeHR1cmUubmF0aXZlRWxlbWVudFxuICAgICAgOiBmaXh0dXJlLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgLy8gKiBDb252ZXJ0IHN0cmluZyBkYXRhIHRvIEhUTUwgZGF0YVxuICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKFxuICAgIGA8JHtzZWxlY3Rvcn0gJHtpbnB1dHNEYXRhfT4ke2RpdkVsZW1lbnQuaW5uZXJIVE1MfTwvJHtzZWxlY3Rvcn0+YCxcbiAgICAndGV4dC9odG1sJyxcbiAgKTtcblxuICByZXR1cm4gZG9jLmJvZHkuY2hpbGROb2Rlc1swXTtcbn1cblxuWydleHBlY3QnXS5mb3JFYWNoKChtZXRob2ROYW1lKSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsdml0ZXN0Rm4gPSBlbnZbbWV0aG9kTmFtZV07XG4gIHJldHVybiBvcmlnaW5hbHZpdGVzdEZuLmFkZFNuYXBzaG90U2VyaWFsaXplcihjdXN0b21TbmFwc2hvdFNlcmlhbGl6ZXIoKSk7XG59KTtcbiJdfQ==
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,15 +1,15 @@
1
- import { EnvironmentProviders, Provider } from '@angular/core';
1
+ import { EnvironmentProviders, Provider } from "@angular/core";
2
2
  type TestBedSetupOptions = {
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
- };
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
+ };
13
13
  };
14
- export declare function setupTestBed({ zoneless, providers, browserMode, teardown, }?: TestBedSetupOptions): void;
14
+ export declare function setupTestBed({ zoneless, providers, browserMode, teardown }?: TestBedSetupOptions): void;
15
15
  export {};
package/setup-testbed.js CHANGED
@@ -1,30 +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, teardown, } = {}) {
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(), {
23
- teardown: {
24
- ...{ destroyAfterEach: !browserMode },
25
- ...teardown,
26
- },
27
- });
28
- }
1
+ import { __decorate } from "./_virtual/_@oxc-project_runtime@0.124.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
+ }
29
20
  }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtdGVzdGJlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3ZpdGVzdC1hbmd1bGFyL3NldHVwLXRlc3RiZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxRQUFRLEVBRVIsOEJBQThCLEdBQy9CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLElBQUksY0FBYyxFQUNqQyxVQUFVLEdBQ1gsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHNCQUFzQixHQUN2QixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRS9DLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQWUxRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEVBQzNCLFFBQVEsR0FBRyxJQUFJLEVBQ2YsU0FBUyxHQUFHLEVBQUUsRUFDZCxXQUFXLEdBQUcsS0FBSyxFQUNuQixRQUFRLE1BQ2UsRUFBRTtJQUN6QixVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRWhDLElBQUksQ0FBRSxVQUFrQixDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztRQUMvQyxVQUFrQixDQUFDLHFCQUFxQixDQUFDLEdBQUcsSUFBSSxDQUFDO1FBUWxELElBQU0sVUFBVSxHQUFoQixNQUFNLFVBQVU7U0FBRyxDQUFBO1FBQWIsVUFBVTtZQU5mLFFBQVEsQ0FBQztnQkFDUixTQUFTLEVBQUU7b0JBQ1QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDdkQsR0FBRyxTQUFTO2lCQUNiO2FBQ0YsQ0FBQztXQUNJLFVBQVUsQ0FBRztRQUVuQixVQUFVLEVBQUUsQ0FBQyxtQkFBbUIsQ0FDOUIsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsRUFDbEMsc0JBQXNCLEVBQUUsRUFDeEI7WUFDRSxRQUFRLEVBQUU7Z0JBQ1IsR0FBRyxFQUFFLGdCQUFnQixFQUFFLENBQUMsV0FBVyxFQUFFO2dCQUNyQyxHQUFHLFFBQVE7YUFDWjtTQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIE5nTW9kdWxlLFxuICBQcm92aWRlcixcbiAgcHJvdmlkZVpvbmVsZXNzQ2hhbmdlRGV0ZWN0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIMm1Z2V0Q2xlYW51cEhvb2sgYXMgZ2V0Q2xlYW51cEhvb2ssXG4gIGdldFRlc3RCZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7XG5pbXBvcnQge1xuICBCcm93c2VyVGVzdGluZ01vZHVsZSxcbiAgcGxhdGZvcm1Ccm93c2VyVGVzdGluZyxcbn0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci90ZXN0aW5nJztcbmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCB9IGZyb20gJ3ZpdGVzdCc7XG5cbmNvbnN0IEFOR1VMQVJfVEVTVEJFRF9TRVRVUCA9IFN5bWJvbC5mb3IoJ3Rlc3RiZWQtc2V0dXAnKTtcblxudHlwZSBUZXN0QmVkU2V0dXBPcHRpb25zID0ge1xuICB6b25lbGVzcz86IGJvb2xlYW47XG4gIHByb3ZpZGVycz86IChQcm92aWRlciB8IEVudmlyb25tZW50UHJvdmlkZXJzKVtdO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGB0ZWFyZG93bi5kZXN0cm95QWZ0ZXJFYWNoYCBpbnN0ZWFkLlxuICAgKiBAc3Vuc2V0IDMuMC4wXG4gICAqL1xuICBicm93c2VyTW9kZT86IGJvb2xlYW47XG4gIHRlYXJkb3duPzoge1xuICAgIGRlc3Ryb3lBZnRlckVhY2g6IGJvb2xlYW47XG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBUZXN0QmVkKHtcbiAgem9uZWxlc3MgPSB0cnVlLFxuICBwcm92aWRlcnMgPSBbXSxcbiAgYnJvd3Nlck1vZGUgPSBmYWxzZSxcbiAgdGVhcmRvd24sXG59OiBUZXN0QmVkU2V0dXBPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgYmVmb3JlRWFjaChnZXRDbGVhbnVwSG9vayhmYWxzZSkpO1xuICBhZnRlckVhY2goZ2V0Q2xlYW51cEhvb2sodHJ1ZSkpO1xuXG4gIGlmICghKGdsb2JhbFRoaXMgYXMgYW55KVtBTkdVTEFSX1RFU1RCRURfU0VUVVBdKSB7XG4gICAgKGdsb2JhbFRoaXMgYXMgYW55KVtBTkdVTEFSX1RFU1RCRURfU0VUVVBdID0gdHJ1ZTtcblxuICAgIEBOZ01vZHVsZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgLi4uKHpvbmVsZXNzID8gW3Byb3ZpZGVab25lbGVzc0NoYW5nZURldGVjdGlvbigpXSA6IFtdKSxcbiAgICAgICAgLi4ucHJvdmlkZXJzLFxuICAgICAgXSxcbiAgICB9KVxuICAgIGNsYXNzIFRlc3RNb2R1bGUge31cblxuICAgIGdldFRlc3RCZWQoKS5pbml0VGVzdEVudmlyb25tZW50KFxuICAgICAgW0Jyb3dzZXJUZXN0aW5nTW9kdWxlLCBUZXN0TW9kdWxlXSxcbiAgICAgIHBsYXRmb3JtQnJvd3NlclRlc3RpbmcoKSxcbiAgICAgIHtcbiAgICAgICAgdGVhcmRvd246IHtcbiAgICAgICAgICAuLi57IGRlc3Ryb3lBZnRlckVhY2g6ICFicm93c2VyTW9kZSB9LFxuICAgICAgICAgIC4uLnRlYXJkb3duLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICB9XG59XG4iXX0=
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,5 @@
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
+ export {};
package/setup-zone.js CHANGED
@@ -1,115 +1,104 @@
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 { createAngularFixtureSnapshotSerializer } from "./src/lib/snapshot-serializers/angular-fixture.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 originalExpect = env["expect"];
22
+ if (originalExpect) originalExpect.addSnapshotSerializer(createAngularFixtureSnapshotSerializer());
23
+ var syncZone = ambientZone.fork(new SyncTestZoneSpec("vitest.describe"));
33
24
  function wrapDescribeInZone(describeBody) {
34
- return function (...args) {
35
- return syncZone.run(describeBody, null, args);
36
- };
25
+ return function(...args) {
26
+ return syncZone.run(describeBody, null, args);
27
+ };
37
28
  }
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());
29
+ var testProxyZone = ambientZone.fork(new ProxyZoneSpec());
41
30
  function wrapTestInZone(testBody) {
42
- if (testBody === undefined) {
43
- return;
44
- }
45
- const wrappedFunc = function (...args) {
46
- return testProxyZone.run(testBody, null, args);
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;
31
+ if (testBody === void 0) return;
32
+ const wrappedFunc = function(...args) {
33
+ return testProxyZone.run(testBody, null, args);
34
+ };
35
+ try {
36
+ Object.defineProperty(wrappedFunc, "length", {
37
+ configurable: true,
38
+ writable: true,
39
+ enumerable: false
40
+ });
41
+ wrappedFunc.length = testBody.length;
42
+ } catch (e) {
43
+ return testBody.length === 0 ? () => testProxyZone.run(testBody, null) : (done) => testProxyZone.run(testBody, null, [done]);
44
+ }
45
+ return wrappedFunc;
62
46
  }
63
47
  /**
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
- return originalVitestFn.apply(self, eachArgs).apply(self, args);
70
- };
48
+ * bind describe method to wrap describe.each function
49
+ */
50
+ var bindDescribe = (self, originalVitestFn) => function(...eachArgs) {
51
+ return function(...args) {
52
+ args[1] = wrapDescribeInZone(args[1]);
53
+ return originalVitestFn.apply(self, eachArgs).apply(self, args);
54
+ };
71
55
  };
72
56
  /**
73
- * bind test method to wrap test.each function
74
- */
75
- const bindTest = (self, originalVitestFn) => function (...eachArgs) {
76
- return function (...args) {
77
- args[1] = wrapTestInZone(args[1]);
78
- return originalVitestFn.apply(self, eachArgs).apply(self, args);
79
- };
57
+ * bind test method to wrap test.each function
58
+ */
59
+ var bindTest = (self, originalVitestFn) => function(...eachArgs) {
60
+ return function(...args) {
61
+ args[1] = wrapTestInZone(args[1]);
62
+ return originalVitestFn.apply(self, eachArgs).apply(self, args);
63
+ };
80
64
  };
81
- ['describe'].forEach((methodName) => {
82
- const originalvitestFn = env[methodName];
83
- env[methodName] = function (...args) {
84
- args[1] = wrapDescribeInZone(args[1]);
85
- return originalvitestFn.apply(this, args);
86
- };
87
- env[methodName].each = bindDescribe(originalvitestFn, originalvitestFn.each);
88
- if (methodName === 'describe') {
89
- env[methodName].only = bindDescribe(originalvitestFn, originalvitestFn.only);
90
- env[methodName].skip = bindDescribe(originalvitestFn, originalvitestFn.skip);
91
- }
65
+ ["describe"].forEach((methodName) => {
66
+ const originalvitestFn = env[methodName];
67
+ env[methodName] = function(...args) {
68
+ args[1] = wrapDescribeInZone(args[1]);
69
+ return originalvitestFn.apply(this, args);
70
+ };
71
+ env[methodName].each = bindDescribe(originalvitestFn, originalvitestFn.each);
72
+ if (methodName === "describe") {
73
+ env[methodName].only = bindDescribe(originalvitestFn, originalvitestFn.only);
74
+ env[methodName].skip = bindDescribe(originalvitestFn, originalvitestFn.skip);
75
+ }
92
76
  });
93
- ['test', 'it'].forEach((methodName) => {
94
- const originalvitestFn = env[methodName];
95
- env[methodName] = function (...args) {
96
- args[1] = wrapTestInZone(args[1]);
97
- return originalvitestFn.apply(this, args);
98
- };
99
- env[methodName].each = bindTest(originalvitestFn, originalvitestFn.each);
100
- env[methodName].only = bindTest(originalvitestFn, originalvitestFn.only);
101
- env[methodName].skip = bindTest(originalvitestFn, originalvitestFn.skip);
102
- if (methodName === 'test' || methodName === 'it') {
103
- env[methodName].todo = function (...args) {
104
- return originalvitestFn.todo.apply(this, args);
105
- };
106
- }
77
+ ["test", "it"].forEach((methodName) => {
78
+ const originalvitestFn = env[methodName];
79
+ env[methodName] = function(...args) {
80
+ args[1] = wrapTestInZone(args[1]);
81
+ return originalvitestFn.apply(this, args);
82
+ };
83
+ env[methodName].each = bindTest(originalvitestFn, originalvitestFn.each);
84
+ env[methodName].only = bindTest(originalvitestFn, originalvitestFn.only);
85
+ env[methodName].skip = bindTest(originalvitestFn, originalvitestFn.skip);
86
+ if (methodName === "test" || methodName === "it") env[methodName].todo = function(...args) {
87
+ return originalvitestFn.todo.apply(this, args);
88
+ };
107
89
  });
108
- ['beforeEach', 'afterEach', 'beforeAll', 'afterAll'].forEach((methodName) => {
109
- const originalvitestFn = env[methodName];
110
- env[methodName] = function (...args) {
111
- args[0] = wrapTestInZone(args[0]);
112
- return originalvitestFn.apply(this, args);
113
- };
90
+ [
91
+ "beforeEach",
92
+ "afterEach",
93
+ "beforeAll",
94
+ "afterAll"
95
+ ].forEach((methodName) => {
96
+ const originalvitestFn = env[methodName];
97
+ env[methodName] = function(...args) {
98
+ args[0] = wrapTestInZone(args[0]);
99
+ return originalvitestFn.apply(this, args);
100
+ };
114
101
  });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtem9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3ZpdGVzdC1hbmd1bGFyL3NldHVwLXpvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxTQUFTLENBQUM7QUFDakIsT0FBTywyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8saUJBQWlCLENBQUM7QUFFekIsT0FBTyxzQkFBc0IsQ0FBQztBQUM5Qjs7O0dBR0c7QUFDSCxpQkFBaUI7QUFDakIsTUFBTSxJQUFJLEdBQUksVUFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUV6QyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztJQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELElBQUssVUFBa0IsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUEsVUFBa0IsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUU1QyxJQUFJLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO0lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBQ0QsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFLENBQUM7SUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLEdBQUcsR0FBRyxVQUFpQixDQUFDO0FBQzlCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxP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QUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV6RSxJQUFJLFVBQVUsS0FBSyxNQUFNLElBQUksVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2pELEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxHQUFHLElBQVM7WUFDM0MsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFSCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO0lBQzFFLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXpDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBVztRQUN4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWxDLE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnem9uZS5qcyc7XG5pbXBvcnQgJ3pvbmUuanMvcGx1Z2lucy9zeW5jLXRlc3QnO1xuaW1wb3J0ICd6b25lLmpzL3BsdWdpbnMvcHJveHknO1xuaW1wb3J0ICd6b25lLmpzL3Rlc3RpbmcnO1xuXG5pbXBvcnQgJy4vc2V0dXAtc25hcHNob3RzLmpzJztcbi8qKlxuICogUGF0Y2ggVml0ZXN0J3MgZGVzY3JpYmUvdGVzdC9iZWZvcmVFYWNoL2FmdGVyRWFjaCBmdW5jdGlvbnMgc28gdGVzdCBjb2RlXG4gKiBhbHdheXMgcnVucyBpbiBhIHRlc3Rab25lIChQcm94eVpvbmUpLlxuICovXG4vKiBnbG9iYWwgWm9uZSAqL1xuY29uc3QgWm9uZSA9IChnbG9iYWxUaGlzIGFzIGFueSlbJ1pvbmUnXTtcblxuaWYgKFpvbmUgPT09IHVuZGVmaW5lZCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmc6IFpvbmUgKHpvbmUuanMpJyk7XG59XG5cbmlmICgoZ2xvYmFsVGhpcyBhcyBhbnkpWydfX3ZpdGVzdF96b25lX3BhdGNoX18nXSA9PT0gdHJ1ZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCIndml0ZXN0JyBoYXMgYWxyZWFkeSBiZWVuIHBhdGNoZWQgd2l0aCAnWm9uZScuXCIpO1xufVxuXG4oZ2xvYmFsVGhpcyBhcyBhbnkpWydfX3ZpdGVzdF96b25lX3BhdGNoX18nXSA9IHRydWU7XG5jb25zdCBTeW5jVGVzdFpvbmVTcGVjID0gWm9uZVsnU3luY1Rlc3Rab25lU3BlYyddO1xuY29uc3QgUHJveHlab25lU3BlYyA9IFpvbmVbJ1Byb3h5Wm9uZVNwZWMnXTtcblxuaWYgKFN5bmNUZXN0Wm9uZVNwZWMgPT09IHVuZGVmaW5lZCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmc6IFN5bmNUZXN0Wm9uZVNwZWMgKHpvbmUuanMvcGx1Z2lucy9zeW5jLXRlc3QpJyk7XG59XG5pZiAoUHJveHlab25lU3BlYyA9PT0gdW5kZWZpbmVkKSB7XG4gIHRocm93IG5ldyBFcnJvcignTWlzc2luZzogUHJveHlab25lU3BlYyAoem9uZS5qcy9wbHVnaW5zL3Byb3h5LmpzKScpO1xufVxuXG5jb25zdCBlbnYgPSBnbG9iYWxUaGlzIGFzIGFueTtcbmNvbnN0IGFtYmllbnRab25lID0gWm9uZS5jdXJyZW50O1xuXG4vLyBDcmVhdGUgYSBzeW5jaHJvbm91cy1vbmx5IHpvbmUgaW4gd2hpY2ggdG8gcnVuIGBkZXNjcmliZWAgYmxvY2tzIGluIG9yZGVyIHRvXG4vLyByYWlzZSBhbiBlcnJvciBpZiBhbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgYXJlIGF0dGVtcHRlZFxuLy8gaW5zaWRlIG9mIGEgYGRlc2NyaWJlYCBidXQgb3V0c2lkZSBvZiBhIGBiZWZvcmVFYWNoYCBvciBgaXRgLlxuY29uc3Qgc3luY1pvbmUgPSBhbWJpZW50Wm9uZS5mb3JrKG5ldyBTeW5jVGVzdFpvbmVTcGVjKCd2aXRlc3QuZGVzY3JpYmUnKSk7XG5mdW5jdGlvbiB3cmFwRGVzY3JpYmVJblpvbmUoZGVzY3JpYmVCb2R5OiBhbnkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzOiBhbnkpIHtcbiAgICByZXR1cm4gc3luY1pvbmUucnVuKGRlc2NyaWJlQm9keSwgbnVsbCwgYXJncyk7XG4gIH07XG59XG5cbi8vIENyZWF0ZSBhIHByb3h5IHpvbmUgaW4gd2hpY2ggdG8gcnVuIGB0ZXN0YCBibG9ja3Mgc28gdGhhdCB0aGUgdGVzdHMgZnVuY3Rpb25cbi8vIGNhbiByZXRyb2FjdGl2ZWx5IGluc3RhbGwgZGlmZmVyZW50IHpvbmVzLlxuY29uc3QgdGVzdFByb3h5Wm9uZSA9IGFtYmllbnRab25lLmZvcmsobmV3IFByb3h5Wm9uZVNwZWMoKSk7XG5mdW5jdGlvbiB3cmFwVGVzdEluWm9uZSh0ZXN0Qm9keTogc3RyaW5nIHwgYW55W10gfCB1bmRlZmluZWQpIHtcbiAgaWYgKHRlc3RCb2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB3cmFwcGVkRnVuYyA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiB0ZXN0UHJveHlab25lLnJ1bih0ZXN0Qm9keSwgbnVsbCwgYXJncyk7XG4gIH07XG4gIHRyeSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdyYXBwZWRGdW5jLCAnbGVuZ3RoJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgICB3cmFwcGVkRnVuYy5sZW5ndGggPSB0ZXN0Qm9keS5sZW5ndGg7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdGVzdEJvZHkubGVuZ3RoID09PSAwXG4gICAgICA/ICgpID0+IHRlc3RQcm94eVpvbmUucnVuKHRlc3RCb2R5LCBudWxsKVxuICAgICAgOiAoZG9uZTogYW55KSA9PiB0ZXN0UHJveHlab25lLnJ1bih0ZXN0Qm9keSwgbnVsbCwgW2RvbmVdKTtcbiAgfVxuXG4gIHJldHVybiB3cmFwcGVkRnVuYztcbn1cblxuLyoqXG4gKiBiaW5kIGRlc2NyaWJlIG1ldGhvZCB0byB3cmFwIGRlc2NyaWJlLmVhY2ggZnVuY3Rpb25cbiAqL1xuY29uc3QgYmluZERlc2NyaWJlID0gKFxuICBzZWxmOiBhbnksXG4gIG9yaWdpbmFsVml0ZXN0Rm46IHtcbiAgICBhcHBseTogKFxuICAgICAgYXJnMDogYW55LFxuICAgICAgYXJnMTogYW55W10sXG4gICAgKSA9PiB7XG4gICAgICAoKTogYW55O1xuICAgICAgbmV3ICgpOiBhbnk7XG4gICAgICBhcHBseTogeyAoYXJnMDogYW55LCBhcmcxOiBhbnlbXSk6IGFueTsgbmV3ICgpOiBhbnkgfTtcbiAgICB9O1xuICB9LFxuKSA9PlxuICBmdW5jdGlvbiAoLi4uZWFjaEFyZ3M6IGFueSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcbiAgICAgIGFyZ3NbMV0gPSB3cmFwRGVzY3JpYmVJblpvbmUoYXJnc1sxXSk7XG5cbiAgICAgIHJldHVybiBvcmlnaW5hbFZpdGVzdEZuLmFwcGx5KHNlbGYsIGVhY2hBcmdzKS5hcHBseShzZWxmLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIGJpbmQgdGVzdCBtZXRob2QgdG8gd3JhcCB0ZXN0LmVhY2ggZnVuY3Rpb25cbiAqL1xuY29uc3QgYmluZFRlc3QgPSAoXG4gIHNlbGY6IGFueSxcbiAgb3JpZ2luYWxWaXRlc3RGbjoge1xuICAgIGFwcGx5OiAoXG4gICAgICBhcmcwOiBhbnksXG4gICAgICBhcmcxOiBhbnlbXSxcbiAgICApID0+IHtcbiAgICAgICgpOiBhbnk7XG4gICAgICBuZXcgKCk6IGFueTtcbiAgICAgIGFwcGx5OiB7IChhcmcwOiBhbnksIGFyZzE6IGFueVtdKTogYW55OyBuZXcgKCk6IGFueSB9O1xuICAgIH07XG4gIH0sXG4pID0+XG4gIGZ1bmN0aW9uICguLi5lYWNoQXJnczogYW55KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgYXJnc1sxXSA9IHdyYXBUZXN0SW5ab25lKGFyZ3NbMV0pO1xuXG4gICAgICByZXR1cm4gb3JpZ2luYWxWaXRlc3RGbi5hcHBseShzZWxmLCBlYWNoQXJncykuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgfTtcbiAgfTtcblxuWydkZXNjcmliZSddLmZvckVhY2goKG1ldGhvZE5hbWUpID0+IHtcbiAgY29uc3Qgb3JpZ2luYWx2aXRlc3RGbiA9IGVudlttZXRob2ROYW1lXTtcbiAgZW52W21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgYXJnc1sxXSA9IHdyYXBEZXNjcmliZUluWm9uZShhcmdzWzFdKTtcblxuICAgIHJldHVybiBvcmlnaW5hbHZpdGVzdEZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9O1xuICBlbnZbbWV0aG9kTmFtZV0uZWFjaCA9IGJpbmREZXNjcmliZShvcmlnaW5hbHZpdGVzdEZuLCBvcmlnaW5hbHZpdGVzdEZuLmVhY2gpO1xuICBpZiAobWV0aG9kTmFtZSA9PT0gJ2Rlc2NyaWJlJykge1xuICAgIGVudlttZXRob2ROYW1lXS5vbmx5ID0gYmluZERlc2NyaWJlKFxuICAgICAgb3JpZ2luYWx2aXRlc3RGbixcbiAgICAgIG9yaWdpbmFsdml0ZXN0Rm4ub25seSxcbiAgICApO1xuICAgIGVudlttZXRob2ROYW1lXS5za2lwID0gYmluZERlc2NyaWJlKFxuICAgICAgb3JpZ2luYWx2aXRlc3RGbixcbiAgICAgIG9yaWdpbmFsdml0ZXN0Rm4uc2tpcCxcbiAgICApO1xuICB9XG59KTtcblxuWyd0ZXN0JywgJ2l0J10uZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xuICBjb25zdCBvcmlnaW5hbHZpdGVzdEZuID0gZW52W21ldGhvZE5hbWVdO1xuICBlbnZbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcbiAgICBhcmdzWzFdID0gd3JhcFRlc3RJblpvbmUoYXJnc1sxXSk7XG5cbiAgICByZXR1cm4gb3JpZ2luYWx2aXRlc3RGbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfTtcbiAgZW52W21ldGhvZE5hbWVdLmVhY2ggPSBiaW5kVGVzdChvcmlnaW5hbHZpdGVzdEZuLCBvcmlnaW5hbHZpdGVzdEZuLmVhY2gpO1xuICBlbnZbbWV0aG9kTmFtZV0ub25seSA9IGJpbmRUZXN0KG9yaWdpbmFsdml0ZXN0Rm4sIG9yaWdpbmFsdml0ZXN0Rm4ub25seSk7XG4gIGVudlttZXRob2ROYW1lXS5za2lwID0gYmluZFRlc3Qob3JpZ2luYWx2aXRlc3RGbiwgb3JpZ2luYWx2aXRlc3RGbi5za2lwKTtcblxuICBpZiAobWV0aG9kTmFtZSA9PT0gJ3Rlc3QnIHx8IG1ldGhvZE5hbWUgPT09ICdpdCcpIHtcbiAgICBlbnZbbWV0aG9kTmFtZV0udG9kbyA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnkpIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbHZpdGVzdEZuLnRvZG8uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfVxufSk7XG5cblsnYmVmb3JlRWFjaCcsICdhZnRlckVhY2gnLCAnYmVmb3JlQWxsJywgJ2FmdGVyQWxsJ10uZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xuICBjb25zdCBvcmlnaW5hbHZpdGVzdEZuID0gZW52W21ldGhvZE5hbWVdO1xuXG4gIGVudlttZXRob2ROYW1lXSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgIGFyZ3NbMF0gPSB3cmFwVGVzdEluWm9uZShhcmdzWzBdKTtcblxuICAgIHJldHVybiBvcmlnaW5hbHZpdGVzdEZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9O1xufSk7XG4iXX0=
102
+ //#endregion
103
+
104
+ //# sourceMappingURL=setup-zone.js.map