@analogjs/vitest-angular 3.0.0-alpha.19 → 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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analogjs/vitest-angular",
3
- "version": "3.0.0-alpha.19",
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>",
@@ -8,6 +8,7 @@
8
8
  ".": "./src/index.js",
9
9
  "./setup-zone": "./setup-zone.js",
10
10
  "./setup-snapshots": "./setup-snapshots.js",
11
+ "./setup-serializers": "./setup-serializers.js",
11
12
  "./setup-testbed": "./setup-testbed.js",
12
13
  "./package.json": "./package.json"
13
14
  },
@@ -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 +1 @@
1
- {"version":3,"file":"angular-fixture.js","names":[],"sources":["../../../../src/lib/snapshot-serializers/angular-fixture.ts"],"sourcesContent":["import type { ComponentFixture } from '@angular/core/testing';\nimport type { SnapshotSerializer } from 'vitest';\n\n/**\n * Check if is an Angular fixture\n *\n * @param val Angular fixture\n * @returns boolean who check if is an angular fixture\n */\nfunction isAngularFixture(val: any): boolean {\n if (typeof val !== 'object') {\n return false;\n }\n\n if (val['componentRef'] || val['componentInstance']) {\n return true;\n }\n\n if (val['componentType']) {\n return true;\n }\n\n // * Angular fixture keys in Fixture component Object\n const fixtureKeys = [\n 'componentRef',\n 'ngZone',\n 'effectRunner',\n '_autoDetect',\n '_isStable',\n '_isDestroyed',\n '_resolve',\n '_promise',\n '_onUnstableSubscription',\n '_onStableSubscription',\n '_onMicrotaskEmptySubscription',\n '_onErrorSubscription',\n 'changeDetectorRef',\n 'elementRef',\n 'debugElement',\n 'componentInstance',\n 'nativeElement',\n ];\n\n // * Angular fixture keys in Fixture componentRef Object\n const fixtureComponentRefKeys = [\n 'location',\n '_rootLView',\n '_tNode',\n 'previousInputValues',\n 'instance',\n 'changeDetectorRef',\n 'hostView',\n 'componentType',\n ];\n\n return (\n JSON.stringify(Object.keys(val)) === JSON.stringify(fixtureKeys) ||\n JSON.stringify(Object.keys(val)) === JSON.stringify(fixtureComponentRefKeys)\n );\n}\n\n/**\n * Serialize Angular fixture for Vitest\n *\n * @param fixture Angular Fixture Component\n * @returns HTML Child Node\n */\nfunction fixtureVitestSerializer(fixture: any) {\n // * Get Component meta data\n const componentType = (\n fixture && fixture.componentType\n ? fixture.componentType\n : fixture.componentRef.componentType\n ) as any;\n\n let inputsData: string = '';\n\n const selector =\n Reflect.getOwnPropertyDescriptor(componentType, '__annotations__')?.value[0]\n ?.selector ?? componentType.ɵcmp?.selectors[0]?.[0];\n\n if (componentType && componentType.propDecorators) {\n inputsData = Object.entries(componentType.propDecorators)\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join('');\n }\n\n // * Get DOM Elements\n const divElement =\n fixture && fixture.nativeElement\n ? fixture.nativeElement\n : fixture.location.nativeElement;\n\n // * Convert string data to HTML data\n const doc = new DOMParser().parseFromString(\n `<${selector} ${inputsData}>${divElement.innerHTML}</${selector}>`,\n 'text/html',\n );\n\n return doc.body.childNodes[0];\n}\n\nexport function createAngularFixtureSnapshotSerializer(): SnapshotSerializer {\n return {\n serialize(val, config, indentation, depth, refs, printer) {\n return printer(\n fixtureVitestSerializer(val),\n config,\n indentation,\n depth,\n refs,\n );\n },\n test(val) {\n return val && isAngularFixture(val);\n },\n };\n}\n"],"mappings":";;;;;;;AASA,SAAS,iBAAiB,KAAmB;AAC3C,KAAI,OAAO,QAAQ,SACjB,QAAO;AAGT,KAAI,IAAI,mBAAmB,IAAI,qBAC7B,QAAO;AAGT,KAAI,IAAI,iBACN,QAAO;AAoCT,QACE,KAAK,UAAU,OAAO,KAAK,IAAI,CAAC,KAAK,KAAK,UAjCxB;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAeiE,IAChE,KAAK,UAAU,OAAO,KAAK,IAAI,CAAC,KAAK,KAAK,UAbZ;EAC9B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAI6E;;;;;;;;AAUhF,SAAS,wBAAwB,SAAc;CAE7C,MAAM,gBACJ,WAAW,QAAQ,gBACf,QAAQ,gBACR,QAAQ,aAAa;CAG3B,IAAI,aAAqB;CAEzB,MAAM,WACJ,QAAQ,yBAAyB,eAAe,kBAAkB,EAAE,MAAM,IACtE,YAAY,cAAc,MAAM,UAAU,KAAK;AAErD,KAAI,iBAAiB,cAAc,eACjC,cAAa,OAAO,QAAQ,cAAc,eAAe,CACtD,KAAK,CAAC,KAAK,WAAW,GAAG,IAAI,IAAI,MAAM,GAAG,CAC1C,KAAK,GAAG;CAIb,MAAM,aACJ,WAAW,QAAQ,gBACf,QAAQ,gBACR,QAAQ,SAAS;AAQvB,QALY,IAAI,WAAW,CAAC,gBAC1B,IAAI,SAAS,GAAG,WAAW,GAAG,WAAW,UAAU,IAAI,SAAS,IAChE,YACD,CAEU,KAAK,WAAW;;AAG7B,SAAgB,yCAA6D;AAC3E,QAAO;EACL,UAAU,KAAK,QAAQ,aAAa,OAAO,MAAM,SAAS;AACxD,UAAO,QACL,wBAAwB,IAAI,EAC5B,QACA,aACA,OACA,KACD;;EAEH,KAAK,KAAK;AACR,UAAO,OAAO,iBAAiB,IAAI;;EAEtC"}
1
+ {"version":3,"file":"angular-fixture.js","names":[],"sources":["../../../../src/lib/snapshot-serializers/angular-fixture.ts"],"sourcesContent":["import type { ComponentFixture } from '@angular/core/testing';\nimport type { SnapshotSerializer } from 'vitest';\n\n/**\n * Check if is an Angular fixture\n *\n * @param val Angular fixture\n * @returns boolean who check if is an angular fixture\n */\nfunction isAngularFixture(val: any): boolean {\n if (typeof val !== 'object') {\n return false;\n }\n\n if (val['componentRef'] || val['componentInstance']) {\n return true;\n }\n\n if (val['componentType']) {\n return true;\n }\n\n // * Angular fixture keys in Fixture component Object\n const fixtureKeys = [\n 'componentRef',\n 'ngZone',\n 'effectRunner',\n '_autoDetect',\n '_isStable',\n '_isDestroyed',\n '_resolve',\n '_promise',\n '_onUnstableSubscription',\n '_onStableSubscription',\n '_onMicrotaskEmptySubscription',\n '_onErrorSubscription',\n 'changeDetectorRef',\n 'elementRef',\n 'debugElement',\n 'componentInstance',\n 'nativeElement',\n ];\n\n // * Angular fixture keys in Fixture componentRef Object\n const fixtureComponentRefKeys = [\n 'location',\n '_rootLView',\n '_tNode',\n 'previousInputValues',\n 'instance',\n 'changeDetectorRef',\n 'hostView',\n 'componentType',\n ];\n\n return (\n JSON.stringify(Object.keys(val)) === JSON.stringify(fixtureKeys) ||\n JSON.stringify(Object.keys(val)) === JSON.stringify(fixtureComponentRefKeys)\n );\n}\n\n/**\n * Serialize Angular fixture for Vitest\n *\n * @param fixture Angular Fixture Component\n * @returns HTML Child Node\n */\nfunction fixtureVitestSerializer(fixture: any) {\n // * Get Component meta data\n const componentType = (\n fixture && fixture.componentType\n ? fixture.componentType\n : fixture.componentRef.componentType\n ) as any;\n\n let inputsData = '';\n\n const selector =\n Reflect.getOwnPropertyDescriptor(componentType, '__annotations__')?.value[0]\n ?.selector ?? componentType.ɵcmp?.selectors[0]?.[0];\n\n if (componentType && componentType.propDecorators) {\n inputsData = Object.entries(componentType.propDecorators)\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join('');\n }\n\n // * Get DOM Elements\n const divElement =\n fixture && fixture.nativeElement\n ? fixture.nativeElement\n : fixture.location.nativeElement;\n\n // * Convert string data to HTML data\n const doc = new DOMParser().parseFromString(\n `<${selector} ${inputsData}>${divElement.innerHTML}</${selector}>`,\n 'text/html',\n );\n\n return doc.body.childNodes[0];\n}\n\nexport function createAngularFixtureSnapshotSerializer(): SnapshotSerializer {\n return {\n serialize(val, config, indentation, depth, refs, printer) {\n return printer(\n fixtureVitestSerializer(val),\n config,\n indentation,\n depth,\n refs,\n );\n },\n test(val) {\n return val && isAngularFixture(val);\n },\n };\n}\n"],"mappings":";;;;;;;AASA,SAAS,iBAAiB,KAAmB;AAC3C,KAAI,OAAO,QAAQ,SACjB,QAAO;AAGT,KAAI,IAAI,mBAAmB,IAAI,qBAC7B,QAAO;AAGT,KAAI,IAAI,iBACN,QAAO;AAoCT,QACE,KAAK,UAAU,OAAO,KAAK,IAAI,CAAC,KAAK,KAAK,UAjCxB;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAeiE,IAChE,KAAK,UAAU,OAAO,KAAK,IAAI,CAAC,KAAK,KAAK,UAbZ;EAC9B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAI6E;;;;;;;;AAUhF,SAAS,wBAAwB,SAAc;CAE7C,MAAM,gBACJ,WAAW,QAAQ,gBACf,QAAQ,gBACR,QAAQ,aAAa;CAG3B,IAAI,aAAa;CAEjB,MAAM,WACJ,QAAQ,yBAAyB,eAAe,kBAAkB,EAAE,MAAM,IACtE,YAAY,cAAc,MAAM,UAAU,KAAK;AAErD,KAAI,iBAAiB,cAAc,eACjC,cAAa,OAAO,QAAQ,cAAc,eAAe,CACtD,KAAK,CAAC,KAAK,WAAW,GAAG,IAAI,IAAI,MAAM,GAAG,CAC1C,KAAK,GAAG;CAIb,MAAM,aACJ,WAAW,QAAQ,gBACf,QAAQ,gBACR,QAAQ,SAAS;AAQvB,QALY,IAAI,WAAW,CAAC,gBAC1B,IAAI,SAAS,GAAG,WAAW,GAAG,WAAW,UAAU,IAAI,SAAS,IAChE,YACD,CAEU,KAAK,WAAW;;AAG7B,SAAgB,yCAA6D;AAC3E,QAAO;EACL,UAAU,KAAK,QAAQ,aAAa,OAAO,MAAM,SAAS;AACxD,UAAO,QACL,wBAAwB,IAAI,EAC5B,QACA,aACA,OACA,KACD;;EAEH,KAAK,KAAK;AACR,UAAO,OAAO,iBAAiB,IAAI;;EAEtC"}
@@ -0,0 +1,11 @@
1
+ //#region packages/vitest-angular/src/lib/snapshot-serializers/html-comment.ts
2
+ function createHtmlCommentSnapshotSerializer() {
3
+ return {
4
+ serialize: () => "",
5
+ test: (val) => typeof Comment !== "undefined" && val instanceof Comment
6
+ };
7
+ }
8
+ //#endregion
9
+ export { createHtmlCommentSnapshotSerializer };
10
+
11
+ //# sourceMappingURL=html-comment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-comment.js","names":[],"sources":["../../../../src/lib/snapshot-serializers/html-comment.ts"],"sourcesContent":["import { type SnapshotSerializer } from 'vitest';\n\nexport function createHtmlCommentSnapshotSerializer(): SnapshotSerializer {\n return {\n serialize: () => '',\n test: (val: any): boolean =>\n typeof Comment !== 'undefined' && val instanceof Comment,\n };\n}\n"],"mappings":";AAEA,SAAgB,sCAA0D;AACxE,QAAO;EACL,iBAAiB;EACjB,OAAO,QACL,OAAO,YAAY,eAAe,eAAe;EACpD"}
@@ -0,0 +1,62 @@
1
+ //#region packages/vitest-angular/src/lib/snapshot-serializers/no-ng-attributes.ts
2
+ var CLEANED_ELEMENT_MARKER = "__analogSnapshotCleaned__";
3
+ var attributesToRemovePatterns = [
4
+ "ng-reflect",
5
+ "_nghost",
6
+ "_ngcontent",
7
+ "ng-version"
8
+ ];
9
+ var attributesToClean = {
10
+ class: [/^(?:mat|cdk|ng).*-\w*\d+-\d+$/, /^ng-star-inserted$/],
11
+ id: [/^(?:mat|cdk|ng).*-\d+$/],
12
+ for: [/^(?:mat|cdk|ng).*-\d+$/],
13
+ "aria-owns": [/^(?:mat|cdk|ng).*-\d+$/],
14
+ "aria-labelledby": [/^(?:mat|cdk|ng).*-\d+$/],
15
+ "aria-controls": [/^(?:mat|cdk|ng).*-\d+$/]
16
+ };
17
+ var hasAttributesToRemove = (attribute) => attributesToRemovePatterns.some((removePattern) => attribute.name.startsWith(removePattern));
18
+ var hasAttributesToClean = (attribute) => Object.prototype.hasOwnProperty.call(attributesToClean, attribute.name);
19
+ var attributeNeedsCleaning = (attribute) => hasAttributesToClean(attribute) && attribute.value.split(" ").some((attrValue) => attributesToClean[attribute.name].some((attributeCleanRegex) => attributeCleanRegex.test(attrValue)));
20
+ var shouldSerializeElement = (node) => {
21
+ if (node.parentElement?.tagName === "BODY" && node.hasAttribute("id")) return true;
22
+ return Array.from(node.attributes).some((attribute) => hasAttributesToRemove(attribute) || attributeNeedsCleaning(attribute));
23
+ };
24
+ function cleanAngularElementAttributes(node) {
25
+ const nodeCopy = node.cloneNode(true);
26
+ Object.defineProperty(nodeCopy, CLEANED_ELEMENT_MARKER, {
27
+ configurable: true,
28
+ value: true
29
+ });
30
+ if (node.parentElement?.tagName === "BODY") nodeCopy.removeAttribute("id");
31
+ Array.from(nodeCopy.attributes).forEach((attribute) => {
32
+ if (hasAttributesToRemove(attribute)) {
33
+ nodeCopy.removeAttribute(attribute.name);
34
+ return;
35
+ }
36
+ if (hasAttributesToClean(attribute)) {
37
+ const cleanedValue = attribute.value.split(" ").filter((attrValue) => !attributesToClean[attribute.name].some((attributeCleanRegex) => attributeCleanRegex.test(attrValue))).join(" ");
38
+ if (cleanedValue === "") {
39
+ nodeCopy.removeAttribute(attribute.name);
40
+ return;
41
+ }
42
+ nodeCopy.setAttribute(attribute.name, cleanedValue);
43
+ }
44
+ });
45
+ return nodeCopy;
46
+ }
47
+ function createNoNgAttributesSnapshotSerializer() {
48
+ return {
49
+ serialize(val, config, indentation, depth, refs, printer) {
50
+ const cleanedNode = cleanAngularElementAttributes(val);
51
+ if (shouldSerializeElement(cleanedNode)) throw new Error(`NoNgAttributes serializer did not stabilize for <${cleanedNode.tagName.toLowerCase()}>`);
52
+ return printer(cleanedNode, config, indentation, depth, refs);
53
+ },
54
+ test(val) {
55
+ return typeof Element !== "undefined" && val instanceof Element && !val[CLEANED_ELEMENT_MARKER] && shouldSerializeElement(val);
56
+ }
57
+ };
58
+ }
59
+ //#endregion
60
+ export { createNoNgAttributesSnapshotSerializer };
61
+
62
+ //# sourceMappingURL=no-ng-attributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-ng-attributes.js","names":[],"sources":["../../../../src/lib/snapshot-serializers/no-ng-attributes.ts"],"sourcesContent":["import { type SnapshotSerializer } from 'vitest';\n\nconst CLEANED_ELEMENT_MARKER = '__analogSnapshotCleaned__';\n\nexport const attributesToRemovePatterns = [\n 'ng-reflect',\n '_nghost',\n '_ngcontent',\n 'ng-version',\n];\n\nexport const attributesToClean: Record<string, RegExp[]> = {\n class: [/^(?:mat|cdk|ng).*-\\w*\\d+-\\d+$/, /^ng-star-inserted$/],\n id: [/^(?:mat|cdk|ng).*-\\d+$/],\n for: [/^(?:mat|cdk|ng).*-\\d+$/],\n 'aria-owns': [/^(?:mat|cdk|ng).*-\\d+$/],\n 'aria-labelledby': [/^(?:mat|cdk|ng).*-\\d+$/],\n 'aria-controls': [/^(?:mat|cdk|ng).*-\\d+$/],\n};\n\nconst hasAttributesToRemove = (attribute: Attr): boolean =>\n attributesToRemovePatterns.some((removePattern) =>\n attribute.name.startsWith(removePattern),\n );\n\nconst hasAttributesToClean = (attribute: Attr): boolean =>\n Object.prototype.hasOwnProperty.call(attributesToClean, attribute.name);\n\nconst attributeNeedsCleaning = (attribute: Attr): boolean =>\n hasAttributesToClean(attribute) &&\n attribute.value\n .split(' ')\n .some((attrValue) =>\n attributesToClean[attribute.name].some((attributeCleanRegex) =>\n attributeCleanRegex.test(attrValue),\n ),\n );\n\nconst shouldSerializeElement = (node: Element): boolean => {\n if (node.parentElement?.tagName === 'BODY' && node.hasAttribute('id')) {\n return true;\n }\n\n return Array.from(node.attributes).some(\n (attribute) =>\n hasAttributesToRemove(attribute) || attributeNeedsCleaning(attribute),\n );\n};\n\nfunction cleanAngularElementAttributes(node: Element): Element {\n const nodeCopy = node.cloneNode(true) as Element;\n\n Object.defineProperty(nodeCopy, CLEANED_ELEMENT_MARKER, {\n configurable: true,\n value: true,\n });\n\n if (node.parentElement?.tagName === 'BODY') {\n nodeCopy.removeAttribute('id');\n }\n\n Array.from(nodeCopy.attributes).forEach((attribute) => {\n if (hasAttributesToRemove(attribute)) {\n nodeCopy.removeAttribute(attribute.name);\n return;\n }\n\n if (hasAttributesToClean(attribute)) {\n const cleanedValue = attribute.value\n .split(' ')\n .filter(\n (attrValue) =>\n !attributesToClean[attribute.name].some((attributeCleanRegex) =>\n attributeCleanRegex.test(attrValue),\n ),\n )\n .join(' ');\n\n if (cleanedValue === '') {\n nodeCopy.removeAttribute(attribute.name);\n return;\n }\n\n nodeCopy.setAttribute(attribute.name, cleanedValue);\n }\n });\n\n return nodeCopy;\n}\n\nexport function createNoNgAttributesSnapshotSerializer(): SnapshotSerializer {\n return {\n serialize(val, config, indentation, depth, refs, printer): string {\n const cleanedNode = cleanAngularElementAttributes(val);\n\n if (shouldSerializeElement(cleanedNode)) {\n throw new Error(\n `NoNgAttributes serializer did not stabilize for <${cleanedNode.tagName.toLowerCase()}>`,\n );\n }\n\n return printer(cleanedNode, config, indentation, depth, refs);\n },\n test(val): boolean {\n const matches =\n typeof Element !== 'undefined' &&\n val instanceof Element &&\n !(val as Element & Record<string, unknown>)[CLEANED_ELEMENT_MARKER] &&\n shouldSerializeElement(val);\n\n return matches;\n },\n };\n}\n"],"mappings":";AAEA,IAAM,yBAAyB;AAE/B,IAAa,6BAA6B;CACxC;CACA;CACA;CACA;CACD;AAED,IAAa,oBAA8C;CACzD,OAAO,CAAC,iCAAiC,qBAAqB;CAC9D,IAAI,CAAC,yBAAyB;CAC9B,KAAK,CAAC,yBAAyB;CAC/B,aAAa,CAAC,yBAAyB;CACvC,mBAAmB,CAAC,yBAAyB;CAC7C,iBAAiB,CAAC,yBAAyB;CAC5C;AAED,IAAM,yBAAyB,cAC7B,2BAA2B,MAAM,kBAC/B,UAAU,KAAK,WAAW,cAAc,CACzC;AAEH,IAAM,wBAAwB,cAC5B,OAAO,UAAU,eAAe,KAAK,mBAAmB,UAAU,KAAK;AAEzE,IAAM,0BAA0B,cAC9B,qBAAqB,UAAU,IAC/B,UAAU,MACP,MAAM,IAAI,CACV,MAAM,cACL,kBAAkB,UAAU,MAAM,MAAM,wBACtC,oBAAoB,KAAK,UAAU,CACpC,CACF;AAEL,IAAM,0BAA0B,SAA2B;AACzD,KAAI,KAAK,eAAe,YAAY,UAAU,KAAK,aAAa,KAAK,CACnE,QAAO;AAGT,QAAO,MAAM,KAAK,KAAK,WAAW,CAAC,MAChC,cACC,sBAAsB,UAAU,IAAI,uBAAuB,UAAU,CACxE;;AAGH,SAAS,8BAA8B,MAAwB;CAC7D,MAAM,WAAW,KAAK,UAAU,KAAK;AAErC,QAAO,eAAe,UAAU,wBAAwB;EACtD,cAAc;EACd,OAAO;EACR,CAAC;AAEF,KAAI,KAAK,eAAe,YAAY,OAClC,UAAS,gBAAgB,KAAK;AAGhC,OAAM,KAAK,SAAS,WAAW,CAAC,SAAS,cAAc;AACrD,MAAI,sBAAsB,UAAU,EAAE;AACpC,YAAS,gBAAgB,UAAU,KAAK;AACxC;;AAGF,MAAI,qBAAqB,UAAU,EAAE;GACnC,MAAM,eAAe,UAAU,MAC5B,MAAM,IAAI,CACV,QACE,cACC,CAAC,kBAAkB,UAAU,MAAM,MAAM,wBACvC,oBAAoB,KAAK,UAAU,CACpC,CACJ,CACA,KAAK,IAAI;AAEZ,OAAI,iBAAiB,IAAI;AACvB,aAAS,gBAAgB,UAAU,KAAK;AACxC;;AAGF,YAAS,aAAa,UAAU,MAAM,aAAa;;GAErD;AAEF,QAAO;;AAGT,SAAgB,yCAA6D;AAC3E,QAAO;EACL,UAAU,KAAK,QAAQ,aAAa,OAAO,MAAM,SAAiB;GAChE,MAAM,cAAc,8BAA8B,IAAI;AAEtD,OAAI,uBAAuB,YAAY,CACrC,OAAM,IAAI,MACR,oDAAoD,YAAY,QAAQ,aAAa,CAAC,GACvF;AAGH,UAAO,QAAQ,aAAa,QAAQ,aAAa,OAAO,KAAK;;EAE/D,KAAK,KAAc;AAOjB,UALE,OAAO,YAAY,eACnB,eAAe,WACf,CAAE,IAA0C,2BAC5C,uBAAuB,IAAI;;EAIhC"}
@@ -1,4 +1,4 @@
1
- export declare const ANALOG_JS_VITE_PLUGIN_ANGULAR = "^3.0.0-alpha.19";
1
+ export declare const ANALOG_JS_VITE_PLUGIN_ANGULAR = "^3.0.0-alpha.20";
2
2
  export declare const JSDOM = "^22.0.0";
3
3
  export declare const VITE_TSCONFIG_PATHS = "^4.2.0";
4
4
  export declare const VITE = "^7.0.0";
@@ -1,5 +1,5 @@
1
1
  //#region packages/vitest-angular-tools/src/schematics/utils/versions.ts
2
- var ANALOG_JS_VITE_PLUGIN_ANGULAR = "^3.0.0-alpha.19";
2
+ var ANALOG_JS_VITE_PLUGIN_ANGULAR = "^3.0.0-alpha.20";
3
3
  var JSDOM = "^22.0.0";
4
4
  var VITE_TSCONFIG_PATHS = "^4.2.0";
5
5
  var VITE = "^7.0.0";
@@ -1 +1 @@
1
- {"version":3,"file":"versions.js","names":[],"sources":["../../../../../../../vitest-angular-tools/src/schematics/utils/versions.ts"],"sourcesContent":["// Version constants (Angular 20+)\nexport const ANALOG_JS_VITE_PLUGIN_ANGULAR = '^3.0.0-alpha.19';\nexport const JSDOM = '^22.0.0';\nexport const VITE_TSCONFIG_PATHS = '^4.2.0';\nexport const VITE = '^7.0.0';\nexport const VITEST_V4 = '^4.0.0';\n\n// Browser mode dependencies\nexport const VITEST_BROWSER_PLAYWRIGHT = '^4.0.0';\nexport const PLAYWRIGHT = '^1.54.0';\n"],"mappings":";AACA,IAAa,gCAAgC;AAC7C,IAAa,QAAQ;AACrB,IAAa,sBAAsB;AACnC,IAAa,OAAO;AACpB,IAAa,YAAY;AAGzB,IAAa,4BAA4B;AACzC,IAAa,aAAa"}
1
+ {"version":3,"file":"versions.js","names":[],"sources":["../../../../../../../vitest-angular-tools/src/schematics/utils/versions.ts"],"sourcesContent":["// Version constants (Angular 20+)\nexport const ANALOG_JS_VITE_PLUGIN_ANGULAR = '^3.0.0-alpha.20';\nexport const JSDOM = '^22.0.0';\nexport const VITE_TSCONFIG_PATHS = '^4.2.0';\nexport const VITE = '^7.0.0';\nexport const VITEST_V4 = '^4.0.0';\n\n// Browser mode dependencies\nexport const VITEST_BROWSER_PLAYWRIGHT = '^4.0.0';\nexport const PLAYWRIGHT = '^1.54.0';\n"],"mappings":";AACA,IAAa,gCAAgC;AAC7C,IAAa,QAAQ;AACrB,IAAa,sBAAsB;AACnC,IAAa,OAAO;AACpB,IAAa,YAAY;AAGzB,IAAa,4BAA4B;AACzC,IAAa,aAAa"}
@@ -1,4 +1,4 @@
1
- export declare const ANALOG_JS_VITE_PLUGIN_ANGULAR = "^3.0.0-alpha.19";
1
+ export declare const ANALOG_JS_VITE_PLUGIN_ANGULAR = "^3.0.0-alpha.20";
2
2
  export declare const JSDOM = "^22.0.0";
3
3
  export declare const VITE_TSCONFIG_PATHS = "^4.2.0";
4
4
  export declare const VITE = "^7.0.0";