@analogjs/vite-plugin-angular 3.0.0-alpha.8 → 3.0.0-alpha.80

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 (194) hide show
  1. package/README.md +30 -0
  2. package/migrations/migrate-setup-vitest/migrate-setup-vitest.d.ts +2 -0
  3. package/migrations/migrate-setup-vitest/migrate-setup-vitest.js +49 -0
  4. package/migrations/migrate-setup-vitest/migrate-setup-vitest.js.map +1 -0
  5. package/migrations/migration.json +7 -1
  6. package/migrations/migrations.json +9 -0
  7. package/migrations/update-3-0-0/migrate-setup-vitest.d.ts +2 -0
  8. package/migrations/update-3-0-0/migrate-setup-vitest.js +36 -0
  9. package/migrations/update-3-0-0/migrate-setup-vitest.js.map +1 -0
  10. package/package.json +51 -14
  11. package/src/index.d.ts +6 -2
  12. package/src/index.js +6 -2
  13. package/src/index.js.map +1 -1
  14. package/src/lib/analog-plugin-interop.d.ts +78 -0
  15. package/src/lib/analog-plugin-interop.js +97 -0
  16. package/src/lib/analog-plugin-interop.js.map +1 -0
  17. package/src/lib/angular-build-optimizer-plugin.d.ts +4 -4
  18. package/src/lib/angular-build-optimizer-plugin.js +57 -63
  19. package/src/lib/angular-build-optimizer-plugin.js.map +1 -1
  20. package/src/lib/angular-jit-plugin.d.ts +3 -3
  21. package/src/lib/angular-jit-plugin.js +49 -37
  22. package/src/lib/angular-jit-plugin.js.map +1 -1
  23. package/src/lib/angular-pending-tasks.plugin.d.ts +7 -7
  24. package/src/lib/angular-pending-tasks.plugin.js +17 -18
  25. package/src/lib/angular-pending-tasks.plugin.js.map +1 -1
  26. package/src/lib/angular-vite-plugin.d.ts +82 -69
  27. package/src/lib/angular-vite-plugin.js +1205 -1085
  28. package/src/lib/angular-vite-plugin.js.map +1 -1
  29. package/src/lib/angular-vitest-plugin.d.ts +26 -21
  30. package/src/lib/angular-vitest-plugin.js +106 -135
  31. package/src/lib/angular-vitest-plugin.js.map +1 -1
  32. package/src/lib/compilation-api/compilation-api-plugin.d.ts +18 -0
  33. package/src/lib/compilation-api/compilation-api-plugin.js +489 -0
  34. package/src/lib/compilation-api/compilation-api-plugin.js.map +1 -0
  35. package/src/lib/compilation-api/index.d.ts +1 -0
  36. package/src/lib/compilation-api/index.js +1 -0
  37. package/src/lib/compiler/angular-version.d.ts +19 -0
  38. package/src/lib/compiler/angular-version.js +31 -0
  39. package/src/lib/compiler/angular-version.js.map +1 -0
  40. package/src/lib/compiler/class-field-lowering.d.ts +23 -0
  41. package/src/lib/compiler/class-field-lowering.js +131 -0
  42. package/src/lib/compiler/class-field-lowering.js.map +1 -0
  43. package/src/lib/compiler/compile.d.ts +50 -0
  44. package/src/lib/compiler/compile.js +814 -0
  45. package/src/lib/compiler/compile.js.map +1 -0
  46. package/src/lib/compiler/constants.d.ts +24 -0
  47. package/src/lib/compiler/constants.js +59 -0
  48. package/src/lib/compiler/constants.js.map +1 -0
  49. package/src/lib/compiler/debug.d.ts +22 -0
  50. package/src/lib/compiler/debug.js +20 -0
  51. package/src/lib/compiler/debug.js.map +1 -0
  52. package/src/lib/compiler/defer.d.ts +57 -0
  53. package/src/lib/compiler/defer.js +154 -0
  54. package/src/lib/compiler/defer.js.map +1 -0
  55. package/src/lib/compiler/dts-reader.d.ts +45 -0
  56. package/src/lib/compiler/dts-reader.js +395 -0
  57. package/src/lib/compiler/dts-reader.js.map +1 -0
  58. package/src/lib/compiler/hmr.d.ts +16 -0
  59. package/src/lib/compiler/hmr.js +69 -0
  60. package/src/lib/compiler/hmr.js.map +1 -0
  61. package/src/lib/compiler/index.d.ts +8 -0
  62. package/src/lib/compiler/index.js +8 -0
  63. package/src/lib/compiler/jit-metadata.d.ts +14 -0
  64. package/src/lib/compiler/jit-metadata.js +168 -0
  65. package/src/lib/compiler/jit-metadata.js.map +1 -0
  66. package/src/lib/compiler/jit-transform.d.ts +24 -0
  67. package/src/lib/compiler/jit-transform.js +204 -0
  68. package/src/lib/compiler/jit-transform.js.map +1 -0
  69. package/src/lib/compiler/js-emitter.d.ts +10 -0
  70. package/src/lib/compiler/js-emitter.js +446 -0
  71. package/src/lib/compiler/js-emitter.js.map +1 -0
  72. package/src/lib/compiler/metadata.d.ts +36 -0
  73. package/src/lib/compiler/metadata.js +710 -0
  74. package/src/lib/compiler/metadata.js.map +1 -0
  75. package/src/lib/compiler/registry.d.ts +56 -0
  76. package/src/lib/compiler/registry.js +176 -0
  77. package/src/lib/compiler/registry.js.map +1 -0
  78. package/src/lib/compiler/resource-inliner.d.ts +43 -0
  79. package/src/lib/compiler/resource-inliner.js +230 -0
  80. package/src/lib/compiler/resource-inliner.js.map +1 -0
  81. package/src/lib/compiler/style-ast.d.ts +9 -0
  82. package/src/lib/compiler/style-ast.js +54 -0
  83. package/src/lib/compiler/style-ast.js.map +1 -0
  84. package/src/lib/compiler/styles.d.ts +13 -0
  85. package/src/lib/compiler/test-helpers.d.ts +7 -0
  86. package/src/lib/compiler/type-elision.d.ts +28 -0
  87. package/src/lib/compiler/type-elision.js +211 -0
  88. package/src/lib/compiler/type-elision.js.map +1 -0
  89. package/src/lib/compiler/utils.d.ts +40 -0
  90. package/src/lib/compiler/utils.js +76 -0
  91. package/src/lib/compiler/utils.js.map +1 -0
  92. package/src/lib/compiler-plugin.d.ts +13 -12
  93. package/src/lib/compiler-plugin.js +40 -44
  94. package/src/lib/compiler-plugin.js.map +1 -1
  95. package/src/lib/component-resolvers.d.ts +20 -4
  96. package/src/lib/component-resolvers.js +101 -120
  97. package/src/lib/component-resolvers.js.map +1 -1
  98. package/src/lib/encapsulation-plugin.d.ts +18 -0
  99. package/src/lib/encapsulation-plugin.js +53 -0
  100. package/src/lib/encapsulation-plugin.js.map +1 -0
  101. package/src/lib/fast-compile-plugin.d.ts +13 -0
  102. package/src/lib/fast-compile-plugin.js +419 -0
  103. package/src/lib/fast-compile-plugin.js.map +1 -0
  104. package/src/lib/host.d.ts +10 -8
  105. package/src/lib/host.js +111 -101
  106. package/src/lib/host.js.map +1 -1
  107. package/src/lib/live-reload-plugin.d.ts +5 -5
  108. package/src/lib/live-reload-plugin.js +61 -63
  109. package/src/lib/live-reload-plugin.js.map +1 -1
  110. package/src/lib/models.d.ts +9 -9
  111. package/src/lib/nx-folder-plugin.d.ts +5 -5
  112. package/src/lib/nx-folder-plugin.js +18 -16
  113. package/src/lib/nx-folder-plugin.js.map +1 -1
  114. package/src/lib/plugins/file-replacements.plugin.d.ts +4 -4
  115. package/src/lib/plugins/file-replacements.plugin.js +40 -62
  116. package/src/lib/plugins/file-replacements.plugin.js.map +1 -1
  117. package/src/lib/router-plugin.d.ts +1 -1
  118. package/src/lib/router-plugin.js +35 -23
  119. package/src/lib/router-plugin.js.map +1 -1
  120. package/src/lib/style-preprocessor.d.ts +35 -0
  121. package/src/lib/style-preprocessor.js +35 -0
  122. package/src/lib/style-preprocessor.js.map +1 -0
  123. package/src/lib/stylesheet-registry.d.ts +74 -0
  124. package/src/lib/stylesheet-registry.js +174 -0
  125. package/src/lib/stylesheet-registry.js.map +1 -0
  126. package/src/lib/tools/package.json +2 -7
  127. package/src/lib/tools/src/builders/vite/vite-build.impl.js +33 -38
  128. package/src/lib/tools/src/builders/vite/vite-build.impl.js.map +1 -1
  129. package/src/lib/tools/src/builders/vite-dev-server/dev-server.impl.js +51 -62
  130. package/src/lib/tools/src/builders/vite-dev-server/dev-server.impl.js.map +1 -1
  131. package/src/lib/tools/src/index.js +0 -2
  132. package/src/lib/utils/compilation-shared.d.ts +62 -0
  133. package/src/lib/utils/compilation-shared.js +138 -0
  134. package/src/lib/utils/compilation-shared.js.map +1 -0
  135. package/src/lib/utils/compiler-plugin-options.d.ts +11 -11
  136. package/src/lib/utils/css-extension-resolver.d.ts +32 -0
  137. package/src/lib/utils/css-extension-resolver.js +73 -0
  138. package/src/lib/utils/css-extension-resolver.js.map +1 -0
  139. package/src/lib/utils/debug-harness.d.ts +23 -0
  140. package/src/lib/utils/debug-harness.js +88 -0
  141. package/src/lib/utils/debug-harness.js.map +1 -0
  142. package/src/lib/utils/debug-log-file.d.ts +5 -0
  143. package/src/lib/utils/debug-log-file.js +56 -0
  144. package/src/lib/utils/debug-log-file.js.map +1 -0
  145. package/src/lib/utils/debug.d.ts +26 -0
  146. package/src/lib/utils/debug.js +35 -0
  147. package/src/lib/utils/debug.js.map +1 -0
  148. package/src/lib/utils/devkit.d.ts +6 -6
  149. package/src/lib/utils/devkit.js +34 -38
  150. package/src/lib/utils/devkit.js.map +1 -1
  151. package/src/lib/utils/hmr-candidates.d.ts +28 -28
  152. package/src/lib/utils/jit-inline-styles.d.ts +3 -0
  153. package/src/lib/utils/jit-inline-styles.js +16 -0
  154. package/src/lib/utils/jit-inline-styles.js.map +1 -0
  155. package/src/lib/utils/plugin-config.d.ts +41 -0
  156. package/src/lib/utils/plugin-config.js +85 -0
  157. package/src/lib/utils/plugin-config.js.map +1 -0
  158. package/src/lib/utils/rolldown.d.ts +1 -1
  159. package/src/lib/utils/rolldown.js +9 -5
  160. package/src/lib/utils/rolldown.js.map +1 -1
  161. package/src/lib/utils/safe-module-paths.d.ts +16 -0
  162. package/src/lib/utils/safe-module-paths.js +29 -0
  163. package/src/lib/utils/safe-module-paths.js.map +1 -0
  164. package/src/lib/utils/source-file-cache.d.ts +8 -15
  165. package/src/lib/utils/source-file-cache.js +35 -37
  166. package/src/lib/utils/source-file-cache.js.map +1 -1
  167. package/src/lib/utils/transform-cache.d.ts +43 -0
  168. package/src/lib/utils/transform-cache.js +97 -0
  169. package/src/lib/utils/transform-cache.js.map +1 -0
  170. package/src/lib/utils/tsconfig-resolver.d.ts +34 -0
  171. package/src/lib/utils/tsconfig-resolver.js +203 -0
  172. package/src/lib/utils/tsconfig-resolver.js.map +1 -0
  173. package/src/lib/utils/virtual-ids.d.ts +4 -0
  174. package/src/lib/utils/virtual-ids.js +23 -0
  175. package/src/lib/utils/virtual-ids.js.map +1 -0
  176. package/src/lib/utils/virtual-resources.d.ts +19 -0
  177. package/src/lib/utils/virtual-resources.js +38 -0
  178. package/src/lib/utils/virtual-resources.js.map +1 -0
  179. package/src/lib/virtual-modules-plugin.d.ts +5 -0
  180. package/src/lib/virtual-modules-plugin.js +23 -0
  181. package/src/lib/virtual-modules-plugin.js.map +1 -0
  182. package/src/test-setup.d.ts +2 -0
  183. package/setup-vitest.d.ts +0 -4
  184. package/setup-vitest.js +0 -215
  185. package/setup-vitest.js.map +0 -1
  186. package/src/lib/models.js +0 -1
  187. package/src/lib/models.js.map +0 -1
  188. package/src/lib/tools/README.md +0 -3
  189. package/src/lib/tools/src/index.d.ts +0 -0
  190. package/src/lib/tools/src/index.js.map +0 -1
  191. package/src/lib/utils/compiler-plugin-options.js +0 -1
  192. package/src/lib/utils/compiler-plugin-options.js.map +0 -1
  193. package/src/lib/utils/hmr-candidates.js +0 -272
  194. package/src/lib/utils/hmr-candidates.js.map +0 -1
@@ -1,143 +1,114 @@
1
- // Use the namespace import so these runtime helpers still resolve on Vite 6,
2
- // which does not expose them as named exports.
3
- import * as vite from 'vite';
4
- import { getJsTransformConfigKey, isRolldown } from './utils/rolldown.js';
1
+ import { getJsTransformConfigKey, isRolldown } from "./utils/rolldown.js";
2
+ import * as vite from "vite";
3
+ //#region packages/vite-plugin-angular/src/lib/angular-vitest-plugin.ts
4
+ var vitestAngularSetupEntries = [
5
+ "@analogjs/vitest-angular/setup-testbed",
6
+ "@analogjs/vitest-angular/setup-zone",
7
+ "@analogjs/vitest-angular/setup-snapshots",
8
+ "@analogjs/vitest-angular/setup-serializers"
9
+ ];
5
10
  /**
6
- * Sets up test config for Vitest and downlevels Angular FESM bundles and
7
- * `@angular/cdk` from modern async/await to ES2016 so that Zone.js can
8
- * intercept promises during `fakeAsync` tests.
9
- *
10
- * Under Vite 8+ (Rolldown) the OXC transformer is used.
11
- * Under Vite ≤7, esbuild handles the downlevel.
12
- */
13
- export function angularVitestPlugin() {
14
- return {
15
- name: '@analogjs/vitest-angular-esm-plugin',
16
- apply: 'serve',
17
- enforce: 'post',
18
- config(userConfig) {
19
- return {
20
- optimizeDeps: {
21
- include: ['tslib'],
22
- },
23
- ssr: {
24
- noExternal: [
25
- '@analogjs/vitest-angular/setup-testbed',
26
- /fesm2022(.*?)testing/,
27
- /fesm2015/,
28
- ],
29
- },
30
- test: {
31
- pool: userConfig.test?.pool ?? 'vmThreads',
32
- },
33
- };
34
- },
35
- // Filter by module ID so only Angular FESM2022 bundles and CDK enter
36
- // the handler. The inner guards add a secondary code-content check
37
- // (`async` keyword) for fesm2022 to avoid needless transforms.
38
- transform: {
39
- filter: {
40
- id: /fesm2022|@angular\/cdk/,
41
- },
42
- async handler(_code, id) {
43
- if ((/fesm2022/.test(id) && _code.includes('async ')) ||
44
- _code.includes('@angular/cdk')) {
45
- if (isRolldown()) {
46
- const { code, map } = await vite.transformWithOxc(_code, id, {
47
- lang: 'js',
48
- target: 'es2016',
49
- sourcemap: true,
50
- });
51
- return {
52
- code,
53
- map,
54
- };
55
- }
56
- else {
57
- const { code, map } = await vite.transformWithEsbuild(_code, id, {
58
- loader: 'js',
59
- format: 'esm',
60
- target: 'es2016',
61
- sourcemap: true,
62
- sourcefile: id,
63
- });
64
- return {
65
- code,
66
- map,
67
- };
68
- }
69
- }
70
- return undefined;
71
- },
72
- },
73
- };
11
+ * Sets up test config for Vitest and downlevels Angular FESM bundles and
12
+ * `@angular/cdk` from modern async/await to ES2016 so that Zone.js can
13
+ * intercept promises during `fakeAsync` tests.
14
+ *
15
+ * Under Vite 8+ (Rolldown) downleveling is not needed.
16
+ * Under Vite ≤7, esbuild handles the downlevel.
17
+ */
18
+ function angularVitestPlugin() {
19
+ return {
20
+ name: "@analogjs/vitest-angular-esm-plugin",
21
+ apply: "serve",
22
+ enforce: "post",
23
+ config(userConfig) {
24
+ const browserEnabled = userConfig.test?.browser?.enabled;
25
+ return {
26
+ optimizeDeps: { include: [
27
+ "tslib",
28
+ "@angular/core",
29
+ "@angular/core/testing",
30
+ "@angular/platform-browser/testing"
31
+ ] },
32
+ ssr: { noExternal: [
33
+ ...vitestAngularSetupEntries,
34
+ /fesm2022(.*?)testing/,
35
+ /fesm2015/
36
+ ] },
37
+ ...browserEnabled ? {} : { test: { pool: userConfig.test?.pool ?? "vmThreads" } }
38
+ };
39
+ },
40
+ transform: {
41
+ filter: { id: /fesm2022|@angular\/cdk/ },
42
+ async handler(_code, id) {
43
+ if (/fesm2022/.test(id) && _code.includes("async ") || _code.includes("@angular/cdk")) {
44
+ if (isRolldown()) return;
45
+ const { code, map } = await vite.transformWithEsbuild(_code, id, {
46
+ loader: "js",
47
+ format: "esm",
48
+ target: "es2016",
49
+ sourcemap: true,
50
+ sourcefile: id
51
+ });
52
+ return {
53
+ code,
54
+ map
55
+ };
56
+ }
57
+ }
58
+ }
59
+ };
74
60
  }
75
61
  /**
76
- * Eagerly disables the built-in JS transformer (esbuild on Vite ≤7, OXC on
77
- * Vite 8+) so Vitest's internal plugin doesn't race with the Angular
78
- * compiler. Must run at `enforce: 'pre'` to take effect before Vitest
79
- * reads the resolved config.
80
- */
81
- export function angularVitestEsbuildPlugin() {
82
- return {
83
- name: '@analogjs/vitest-angular-esbuild-oxc-plugin',
84
- enforce: 'pre',
85
- config(userConfig) {
86
- const jsTransformConfigKey = getJsTransformConfigKey();
87
- return {
88
- [jsTransformConfigKey]: jsTransformConfigKey === 'oxc'
89
- ? (userConfig.oxc ?? false)
90
- : (userConfig.esbuild ?? false),
91
- };
92
- },
93
- };
62
+ * Eagerly disables the built-in JS transformer (esbuild on Vite ≤7, OXC on
63
+ * Vite 8+) so Vitest's internal plugin doesn't race with the Angular
64
+ * compiler. Must run at `enforce: 'pre'` to take effect before Vitest
65
+ * reads the resolved config.
66
+ */
67
+ function angularVitestEsbuildPlugin() {
68
+ return {
69
+ name: "@analogjs/vitest-angular-esbuild-oxc-plugin",
70
+ enforce: "pre",
71
+ config(userConfig) {
72
+ const jsTransformConfigKey = getJsTransformConfigKey();
73
+ return { [jsTransformConfigKey]: jsTransformConfigKey === "oxc" ? userConfig.oxc ?? false : userConfig.esbuild ?? false };
74
+ }
75
+ };
94
76
  }
95
77
  /**
96
- * Post-processes `.ts` files with the JS transformer (esbuild / OXC) to
97
- * re-align sourcemaps so breakpoints and coverage reports work correctly.
98
- *
99
- * Inline style/template virtual modules (`?inline`) are excluded because
100
- * they are already handled by the Angular compiler.
101
- */
102
- export function angularVitestSourcemapPlugin() {
103
- return {
104
- name: '@analogjs/vitest-angular-sourcemap-plugin',
105
- transform: {
106
- filter: {
107
- // Match `.ts` at the end of the path OR before a `?` query string.
108
- // Vite/Vitest appends query params for virtual modules (e.g.
109
- // `component.ts?inline`), so a plain `$` anchor would reject them
110
- // and leave sourcemaps misaligned — causing Angular TestBed teardown
111
- // crashes (`_doc` undefined in `removeAllRootElements`).
112
- // The negative lookahead `(?!x)` prevents matching `.tsx` or `.d.ts`.
113
- id: /\.ts(?:\?|$)/,
114
- },
115
- async handler(code, id) {
116
- const [, query] = id.split('?');
117
- if (query && query.includes('inline')) {
118
- return;
119
- }
120
- if (isRolldown()) {
121
- const result = await vite.transformWithOxc(code, id, {
122
- lang: 'js',
123
- });
124
- return result;
125
- }
126
- else {
127
- const result = await vite.transformWithEsbuild(code, id, {
128
- loader: 'js',
129
- });
130
- return result;
131
- }
132
- },
133
- },
134
- };
78
+ * Post-processing pass that converts any `.ts` files Angular's compilation
79
+ * skipped (e.g. files without Angular decorators when
80
+ * `useAngularCompilationAPI` is on) into runnable JS via esbuild/OXC.
81
+ *
82
+ * Files Angular already compiled have a sourcemap available via
83
+ * `getInMap` — we skip those here to avoid breaking the chain Vite is
84
+ * already wiring up. Re-running OXC over already-compiled JS produces a
85
+ * map relative to the TS-emitted JS, not the original .ts source, and
86
+ * OXC's `inMap` parameter does not chain through the way esbuild's inline
87
+ * `//# sourceMappingURL=` auto-detection does.
88
+ */
89
+ function angularVitestSourcemapPlugin(getInMap) {
90
+ return {
91
+ name: "@analogjs/vitest-angular-sourcemap-plugin",
92
+ transform: {
93
+ filter: { id: /\.ts(?:\?|$)/ },
94
+ async handler(code, id) {
95
+ const [bareId, query] = id.split("?");
96
+ if (query && query.includes("inline")) return;
97
+ if (getInMap?.(bareId)) return;
98
+ if (isRolldown() && vite.transformWithOxc) return await vite.transformWithOxc(code, id, { lang: /\.tsx(\?|$)/.test(bareId) ? "tsx" : "ts" });
99
+ else return await vite.transformWithEsbuild(code, id, { loader: "ts" });
100
+ }
101
+ }
102
+ };
135
103
  }
136
- export function angularVitestPlugins() {
137
- return [
138
- angularVitestPlugin(),
139
- angularVitestEsbuildPlugin(),
140
- angularVitestSourcemapPlugin(),
141
- ];
104
+ function angularVitestPlugins(getInMap) {
105
+ return [
106
+ angularVitestPlugin(),
107
+ angularVitestEsbuildPlugin(),
108
+ angularVitestSourcemapPlugin(getInMap)
109
+ ];
142
110
  }
111
+ //#endregion
112
+ export { angularVitestPlugins };
113
+
143
114
  //# sourceMappingURL=angular-vitest-plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"angular-vitest-plugin.js","sourceRoot":"","sources":["../../../../../packages/vite-plugin-angular/src/lib/angular-vitest-plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-vitest-plugin.js","names":[],"sources":["../../../src/lib/angular-vitest-plugin.ts"],"sourcesContent":["import type { Plugin, TransformResult, UserConfig } from 'vite';\n// Use the namespace import so these runtime helpers still resolve on Vite 6,\n// which does not expose them as named exports.\nimport * as vite from 'vite';\nimport { getJsTransformConfigKey, isRolldown } from './utils/rolldown.js';\n\nconst vitestAngularSetupEntries = [\n '@analogjs/vitest-angular/setup-testbed',\n '@analogjs/vitest-angular/setup-zone',\n '@analogjs/vitest-angular/setup-snapshots',\n '@analogjs/vitest-angular/setup-serializers',\n];\n\n/**\n * Sets up test config for Vitest and downlevels Angular FESM bundles and\n * `@angular/cdk` from modern async/await to ES2016 so that Zone.js can\n * intercept promises during `fakeAsync` tests.\n *\n * Under Vite 8+ (Rolldown) downleveling is not needed.\n * Under Vite ≤7, esbuild handles the downlevel.\n */\nexport function angularVitestPlugin(): Plugin {\n return {\n name: '@analogjs/vitest-angular-esm-plugin',\n apply: 'serve',\n enforce: 'post',\n config(userConfig) {\n // The `vmThreads` pool default only applies to the Node/JSDOM runner.\n // In Vitest browser mode a Node pool is a no-op for execution, but it\n // still poisons isolation: `isolate` has no effect under VM pools\n // (https://vitest.dev/config/isolate), and since Vitest 4.0.7 browser\n // isolation inherits that resolution — so forcing `vmThreads` disables\n // per-file isolation and leaks global state (e.g. fake timers) between\n // spec files. Leave the pool untouched when browser mode is enabled.\n const browserEnabled = (userConfig as any).test?.browser?.enabled;\n\n return {\n optimizeDeps: {\n include: [\n 'tslib',\n '@angular/core',\n '@angular/core/testing',\n '@angular/platform-browser/testing',\n ],\n },\n ssr: {\n noExternal: [\n ...vitestAngularSetupEntries,\n /fesm2022(.*?)testing/,\n /fesm2015/,\n ],\n },\n ...(browserEnabled\n ? {}\n : {\n test: {\n pool: (userConfig as any).test?.pool ?? 'vmThreads',\n },\n }),\n };\n },\n // Filter by module ID so only Angular FESM2022 bundles and CDK enter\n // the handler. The inner guards add a secondary code-content check\n // (`async` keyword) for fesm2022 to avoid needless transforms.\n transform: {\n filter: {\n id: /fesm2022|@angular\\/cdk/,\n },\n async handler(_code, id) {\n if (\n (/fesm2022/.test(id) && _code.includes('async ')) ||\n _code.includes('@angular/cdk')\n ) {\n if (isRolldown()) {\n return undefined;\n }\n\n const { code, map } = await vite.transformWithEsbuild(_code, id, {\n loader: 'js',\n format: 'esm',\n target: 'es2016',\n sourcemap: true,\n sourcefile: id,\n });\n\n return {\n code,\n map,\n };\n }\n\n return undefined;\n },\n },\n };\n}\n\n/**\n * Eagerly disables the built-in JS transformer (esbuild on Vite ≤7, OXC on\n * Vite 8+) so Vitest's internal plugin doesn't race with the Angular\n * compiler. Must run at `enforce: 'pre'` to take effect before Vitest\n * reads the resolved config.\n */\nexport function angularVitestEsbuildPlugin(): Plugin {\n return {\n name: '@analogjs/vitest-angular-esbuild-oxc-plugin',\n enforce: 'pre',\n config(userConfig: UserConfig) {\n const jsTransformConfigKey = getJsTransformConfigKey();\n\n return {\n [jsTransformConfigKey]:\n jsTransformConfigKey === 'oxc'\n ? (userConfig.oxc ?? false)\n : (userConfig.esbuild ?? false),\n };\n },\n };\n}\n\n/**\n * Post-processing pass that converts any `.ts` files Angular's compilation\n * skipped (e.g. files without Angular decorators when\n * `useAngularCompilationAPI` is on) into runnable JS via esbuild/OXC.\n *\n * Files Angular already compiled have a sourcemap available via\n * `getInMap` — we skip those here to avoid breaking the chain Vite is\n * already wiring up. Re-running OXC over already-compiled JS produces a\n * map relative to the TS-emitted JS, not the original .ts source, and\n * OXC's `inMap` parameter does not chain through the way esbuild's inline\n * `//# sourceMappingURL=` auto-detection does.\n */\nexport function angularVitestSourcemapPlugin(\n getInMap?: (id: string) => string | undefined,\n): Plugin {\n return {\n name: '@analogjs/vitest-angular-sourcemap-plugin',\n transform: {\n filter: {\n // Match `.ts` at the end of the path OR before a `?` query string.\n // Vite/Vitest appends query params for virtual modules (e.g.\n // `component.ts?inline`), so a plain `$` anchor would reject them\n // and leave sourcemaps misaligned — causing Angular TestBed teardown\n // crashes (`_doc` undefined in `removeAllRootElements`).\n // The negative lookahead `(?!x)` prevents matching `.tsx` or `.d.ts`.\n id: /\\.ts(?:\\?|$)/,\n },\n async handler(code: string, id: string) {\n const [bareId, query] = id.split('?');\n\n if (query && query.includes('inline')) {\n return;\n }\n\n if (getInMap?.(bareId)) {\n return;\n }\n\n // Keep this in step with `getJsTransformConfigKey()`, which picks the\n // `oxc`/`esbuild` config key off the same signal. Vite 8 ships\n // `transformWithOxc` even on the esbuild path, so feature detection\n // alone would transform with OXC under an `esbuild` config key.\n if (isRolldown() && vite.transformWithOxc) {\n const result = await vite.transformWithOxc(code, id, {\n lang: /\\.tsx(\\?|$)/.test(bareId) ? 'tsx' : 'ts',\n });\n return result as unknown as vite.TransformResult;\n } else {\n const result = await vite.transformWithEsbuild(code, id, {\n loader: 'ts',\n });\n return result;\n }\n },\n },\n };\n}\n\nexport function angularVitestPlugins(\n getInMap?: (id: string) => string | undefined,\n): Plugin[] {\n return [\n angularVitestPlugin(),\n angularVitestEsbuildPlugin(),\n angularVitestSourcemapPlugin(getInMap),\n ];\n}\n"],"mappings":";;;AAMA,IAAM,4BAA4B;CAChC;CACA;CACA;CACA;CACD;;;;;;;;;AAUD,SAAgB,sBAA8B;AAC5C,QAAO;EACL,MAAM;EACN,OAAO;EACP,SAAS;EACT,OAAO,YAAY;GAQjB,MAAM,iBAAkB,WAAmB,MAAM,SAAS;AAE1D,UAAO;IACL,cAAc,EACZ,SAAS;KACP;KACA;KACA;KACA;KACD,EACF;IACD,KAAK,EACH,YAAY;KACV,GAAG;KACH;KACA;KACD,EACF;IACD,GAAI,iBACA,EAAE,GACF,EACE,MAAM,EACJ,MAAO,WAAmB,MAAM,QAAQ,aACzC,EACF;IACN;;EAKH,WAAW;GACT,QAAQ,EACN,IAAI,0BACL;GACD,MAAM,QAAQ,OAAO,IAAI;AACvB,QACG,WAAW,KAAK,GAAG,IAAI,MAAM,SAAS,SAAS,IAChD,MAAM,SAAS,eAAe,EAC9B;AACA,SAAI,YAAY,CACd;KAGF,MAAM,EAAE,MAAM,QAAQ,MAAM,KAAK,qBAAqB,OAAO,IAAI;MAC/D,QAAQ;MACR,QAAQ;MACR,QAAQ;MACR,WAAW;MACX,YAAY;MACb,CAAC;AAEF,YAAO;MACL;MACA;MACD;;;GAKN;EACF;;;;;;;;AASH,SAAgB,6BAAqC;AACnD,QAAO;EACL,MAAM;EACN,SAAS;EACT,OAAO,YAAwB;GAC7B,MAAM,uBAAuB,yBAAyB;AAEtD,UAAO,GACJ,uBACC,yBAAyB,QACpB,WAAW,OAAO,QAClB,WAAW,WAAW,OAC9B;;EAEJ;;;;;;;;;;;;;;AAeH,SAAgB,6BACd,UACQ;AACR,QAAO;EACL,MAAM;EACN,WAAW;GACT,QAAQ,EAON,IAAI,gBACL;GACD,MAAM,QAAQ,MAAc,IAAY;IACtC,MAAM,CAAC,QAAQ,SAAS,GAAG,MAAM,IAAI;AAErC,QAAI,SAAS,MAAM,SAAS,SAAS,CACnC;AAGF,QAAI,WAAW,OAAO,CACpB;AAOF,QAAI,YAAY,IAAI,KAAK,iBAIvB,QAHe,MAAM,KAAK,iBAAiB,MAAM,IAAI,EACnD,MAAM,cAAc,KAAK,OAAO,GAAG,QAAQ,MAC5C,CAAC;QAMF,QAHe,MAAM,KAAK,qBAAqB,MAAM,IAAI,EACvD,QAAQ,MACT,CAAC;;GAIP;EACF;;AAGH,SAAgB,qBACd,UACU;AACV,QAAO;EACL,qBAAqB;EACrB,4BAA4B;EAC5B,6BAA6B,SAAS;EACvC"}
@@ -0,0 +1,18 @@
1
+ import { Plugin } from "vite";
2
+ import { type DebugOption } from "../utils/debug.js";
3
+ import { type FileReplacement } from "../plugins/file-replacements.plugin.js";
4
+ export interface CompilationAPIPluginOptions {
5
+ tsconfigGetter: () => string;
6
+ workspaceRoot: string;
7
+ inlineStylesExtension: string;
8
+ jit: boolean;
9
+ liveReload: boolean;
10
+ disableTypeChecking: boolean;
11
+ supportedBrowsers: string[];
12
+ fileReplacements: FileReplacement[];
13
+ isTest: boolean;
14
+ isAstroIntegration: boolean;
15
+ include: string[];
16
+ debug?: DebugOption;
17
+ }
18
+ export declare function compilationAPIPlugin(pluginOptions: CompilationAPIPluginOptions): Plugin;