@analogjs/vite-plugin-angular 3.0.0-alpha.3 → 3.0.0-alpha.31

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 (109) hide show
  1. package/migrations/migrate-setup-vitest/migrate-setup-vitest.d.ts +2 -0
  2. package/migrations/migrate-setup-vitest/migrate-setup-vitest.js +49 -0
  3. package/migrations/migrate-setup-vitest/migrate-setup-vitest.js.map +1 -0
  4. package/migrations/migration.json +7 -1
  5. package/migrations/migrations.json +9 -0
  6. package/migrations/update-3-0-0/migrate-setup-vitest.d.ts +2 -0
  7. package/migrations/update-3-0-0/migrate-setup-vitest.js +36 -0
  8. package/migrations/update-3-0-0/migrate-setup-vitest.js.map +1 -0
  9. package/package.json +27 -13
  10. package/src/index.d.ts +3 -2
  11. package/src/index.js +6 -2
  12. package/src/index.js.map +1 -1
  13. package/src/lib/analog-compiler-plugin.d.ts +14 -0
  14. package/src/lib/analog-compiler-plugin.js +257 -0
  15. package/src/lib/analog-compiler-plugin.js.map +1 -0
  16. package/src/lib/angular-build-optimizer-plugin.d.ts +4 -4
  17. package/src/lib/angular-build-optimizer-plugin.js +48 -62
  18. package/src/lib/angular-build-optimizer-plugin.js.map +1 -1
  19. package/src/lib/angular-jit-plugin.d.ts +3 -3
  20. package/src/lib/angular-jit-plugin.js +37 -37
  21. package/src/lib/angular-jit-plugin.js.map +1 -1
  22. package/src/lib/angular-pending-tasks.plugin.d.ts +7 -7
  23. package/src/lib/angular-pending-tasks.plugin.js +17 -18
  24. package/src/lib/angular-pending-tasks.plugin.js.map +1 -1
  25. package/src/lib/angular-vite-plugin.d.ts +231 -40
  26. package/src/lib/angular-vite-plugin.js +1948 -964
  27. package/src/lib/angular-vite-plugin.js.map +1 -1
  28. package/src/lib/angular-vitest-plugin.d.ts +19 -15
  29. package/src/lib/angular-vitest-plugin.js +99 -114
  30. package/src/lib/angular-vitest-plugin.js.map +1 -1
  31. package/src/lib/compiler-plugin.d.ts +11 -11
  32. package/src/lib/compiler-plugin.js +43 -44
  33. package/src/lib/compiler-plugin.js.map +1 -1
  34. package/src/lib/component-resolvers.d.ts +23 -5
  35. package/src/lib/component-resolvers.js +153 -63
  36. package/src/lib/component-resolvers.js.map +1 -1
  37. package/src/lib/host.d.ts +10 -8
  38. package/src/lib/host.js +109 -101
  39. package/src/lib/host.js.map +1 -1
  40. package/src/lib/live-reload-plugin.d.ts +5 -5
  41. package/src/lib/live-reload-plugin.js +57 -62
  42. package/src/lib/live-reload-plugin.js.map +1 -1
  43. package/src/lib/models.d.ts +9 -9
  44. package/src/lib/nx-folder-plugin.d.ts +5 -5
  45. package/src/lib/nx-folder-plugin.js +18 -16
  46. package/src/lib/nx-folder-plugin.js.map +1 -1
  47. package/src/lib/plugins/file-replacements.plugin.d.ts +4 -4
  48. package/src/lib/plugins/file-replacements.plugin.js +40 -62
  49. package/src/lib/plugins/file-replacements.plugin.js.map +1 -1
  50. package/src/lib/router-plugin.d.ts +1 -1
  51. package/src/lib/router-plugin.js +23 -23
  52. package/src/lib/router-plugin.js.map +1 -1
  53. package/src/lib/style-pipeline.d.ts +15 -0
  54. package/src/lib/style-pipeline.js +31 -0
  55. package/src/lib/style-pipeline.js.map +1 -0
  56. package/src/lib/style-preprocessor.d.ts +35 -0
  57. package/src/lib/style-preprocessor.js +35 -0
  58. package/src/lib/style-preprocessor.js.map +1 -0
  59. package/src/lib/stylesheet-registry.d.ts +73 -0
  60. package/src/lib/stylesheet-registry.js +168 -0
  61. package/src/lib/stylesheet-registry.js.map +1 -0
  62. package/src/lib/tools/package.json +2 -7
  63. package/src/lib/tools/src/builders/vite/vite-build.impl.js +31 -38
  64. package/src/lib/tools/src/builders/vite/vite-build.impl.js.map +1 -1
  65. package/src/lib/tools/src/builders/vite-dev-server/dev-server.impl.js +51 -62
  66. package/src/lib/tools/src/builders/vite-dev-server/dev-server.impl.js.map +1 -1
  67. package/src/lib/tools/src/index.js +0 -2
  68. package/src/lib/utils/compiler-plugin-options.d.ts +11 -11
  69. package/src/lib/utils/debug-harness.d.ts +23 -0
  70. package/src/lib/utils/debug-harness.js +88 -0
  71. package/src/lib/utils/debug-harness.js.map +1 -0
  72. package/src/lib/utils/debug-log-file.d.ts +5 -0
  73. package/src/lib/utils/debug-log-file.js +56 -0
  74. package/src/lib/utils/debug-log-file.js.map +1 -0
  75. package/src/lib/utils/debug.d.ts +26 -0
  76. package/src/lib/utils/debug.js +35 -0
  77. package/src/lib/utils/debug.js.map +1 -0
  78. package/src/lib/utils/devkit.d.ts +6 -6
  79. package/src/lib/utils/devkit.js +34 -38
  80. package/src/lib/utils/devkit.js.map +1 -1
  81. package/src/lib/utils/hmr-candidates.d.ts +28 -28
  82. package/src/lib/utils/plugin-config.d.ts +30 -0
  83. package/src/lib/utils/plugin-config.js +64 -0
  84. package/src/lib/utils/plugin-config.js.map +1 -0
  85. package/src/lib/utils/rolldown.d.ts +2 -0
  86. package/src/lib/utils/rolldown.js +12 -0
  87. package/src/lib/utils/rolldown.js.map +1 -0
  88. package/src/lib/utils/source-file-cache.d.ts +8 -15
  89. package/src/lib/utils/source-file-cache.js +35 -37
  90. package/src/lib/utils/source-file-cache.js.map +1 -1
  91. package/src/lib/utils/virtual-ids.d.ts +8 -0
  92. package/src/lib/utils/virtual-ids.js +35 -0
  93. package/src/lib/utils/virtual-ids.js.map +1 -0
  94. package/src/lib/utils/virtual-resources.d.ts +31 -0
  95. package/src/lib/utils/virtual-resources.js +60 -0
  96. package/src/lib/utils/virtual-resources.js.map +1 -0
  97. package/src/test-setup.d.ts +2 -0
  98. package/setup-vitest.d.ts +0 -4
  99. package/setup-vitest.js +0 -215
  100. package/setup-vitest.js.map +0 -1
  101. package/src/lib/models.js +0 -1
  102. package/src/lib/models.js.map +0 -1
  103. package/src/lib/tools/README.md +0 -3
  104. package/src/lib/tools/src/index.d.ts +0 -0
  105. package/src/lib/tools/src/index.js.map +0 -1
  106. package/src/lib/utils/compiler-plugin-options.js +0 -1
  107. package/src/lib/utils/compiler-plugin-options.js.map +0 -1
  108. package/src/lib/utils/hmr-candidates.js +0 -272
  109. package/src/lib/utils/hmr-candidates.js.map +0 -1
@@ -1,122 +1,107 @@
1
- import * as vite from 'vite';
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
+ ];
2
10
  /**
3
- * Sets up test config for Vitest
4
- * and downlevels any dependencies that use
5
- * async/await to support zone.js testing
6
- * and tests w/fakeAsync
7
- */
8
- export function angularVitestPlugin() {
9
- return {
10
- name: '@analogjs/vitest-angular-esm-plugin',
11
- apply: 'serve',
12
- enforce: 'post',
13
- config(userConfig) {
14
- return {
15
- optimizeDeps: {
16
- include: ['tslib'],
17
- },
18
- ssr: {
19
- noExternal: [
20
- '@analogjs/vitest-angular/setup-testbed',
21
- /fesm2022(.*?)testing/,
22
- /fesm2015/,
23
- ],
24
- },
25
- test: {
26
- pool: userConfig.test?.pool ?? 'vmThreads',
27
- },
28
- };
29
- },
30
- async transform(_code, id) {
31
- if ((/fesm2022/.test(id) && _code.includes('async ')) ||
32
- _code.includes('@angular/cdk')) {
33
- if (vite.rolldownVersion) {
34
- const { code, map } = await vite.transformWithOxc(_code, id, {
35
- lang: 'js',
36
- target: 'es2016',
37
- sourcemap: true,
38
- });
39
- return {
40
- code,
41
- map,
42
- };
43
- }
44
- else {
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
- return undefined;
59
- },
60
- };
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
+ return {
25
+ optimizeDeps: { include: [
26
+ "tslib",
27
+ "@angular/core",
28
+ "@angular/core/testing",
29
+ "@angular/platform-browser/testing"
30
+ ] },
31
+ ssr: { noExternal: [
32
+ ...vitestAngularSetupEntries,
33
+ /fesm2022(.*?)testing/,
34
+ /fesm2015/
35
+ ] },
36
+ test: { pool: userConfig.test?.pool ?? "vmThreads" }
37
+ };
38
+ },
39
+ transform: {
40
+ filter: { id: /fesm2022|@angular\/cdk/ },
41
+ async handler(_code, id) {
42
+ if (/fesm2022/.test(id) && _code.includes("async ") || _code.includes("@angular/cdk")) {
43
+ if (isRolldown()) return;
44
+ const { code, map } = await vite.transformWithEsbuild(_code, id, {
45
+ loader: "js",
46
+ format: "esm",
47
+ target: "es2016",
48
+ sourcemap: true,
49
+ sourcefile: id
50
+ });
51
+ return {
52
+ code,
53
+ map
54
+ };
55
+ }
56
+ }
57
+ }
58
+ };
61
59
  }
62
60
  /**
63
- * This eagerly disables esbuild so Vitest
64
- * disables it when its internal plugin
65
- * is configured.
66
- */
67
- export function angularVitestEsbuildPlugin() {
68
- return {
69
- name: '@analogjs/vitest-angular-esbuild-oxc-plugin',
70
- enforce: 'pre',
71
- config(userConfig) {
72
- if (vite.rolldownVersion) {
73
- return {
74
- oxc: userConfig.oxc ?? false,
75
- };
76
- }
77
- return {
78
- esbuild: userConfig.esbuild ?? false,
79
- };
80
- },
81
- };
61
+ * Eagerly disables the built-in JS transformer (esbuild on Vite ≤7, OXC on
62
+ * Vite 8+) so Vitest's internal plugin doesn't race with the Angular
63
+ * compiler. Must run at `enforce: 'pre'` to take effect before Vitest
64
+ * reads the resolved config.
65
+ */
66
+ function angularVitestEsbuildPlugin() {
67
+ return {
68
+ name: "@analogjs/vitest-angular-esbuild-oxc-plugin",
69
+ enforce: "pre",
70
+ config(userConfig) {
71
+ const jsTransformConfigKey = getJsTransformConfigKey();
72
+ return { [jsTransformConfigKey]: jsTransformConfigKey === "oxc" ? userConfig.oxc ?? false : userConfig.esbuild ?? false };
73
+ }
74
+ };
82
75
  }
83
76
  /**
84
- * This plugin does post-processing with esbuild
85
- * instead of preprocessing to re-align
86
- * the sourcemaps so breakpoints and coverage reports
87
- * work correctly.
88
- */
89
- export function angularVitestSourcemapPlugin() {
90
- return {
91
- name: '@analogjs/vitest-angular-sourcemap-plugin',
92
- async transform(code, id) {
93
- if (!/\.ts/.test(id)) {
94
- return;
95
- }
96
- const [, query] = id.split('?');
97
- if (query && query.includes('inline')) {
98
- return;
99
- }
100
- if (vite.rolldownVersion) {
101
- const result = await vite.transformWithOxc(code, id, {
102
- lang: 'js',
103
- });
104
- return result;
105
- }
106
- else {
107
- const result = await vite.transformWithEsbuild(code, id, {
108
- loader: 'js',
109
- });
110
- return result;
111
- }
112
- },
113
- };
77
+ * Post-processes `.ts` files with the JS transformer (esbuild / OXC) to
78
+ * re-align sourcemaps so breakpoints and coverage reports work correctly.
79
+ *
80
+ * Inline style/template virtual modules (`?inline`) are excluded because
81
+ * they are already handled by the Angular compiler.
82
+ */
83
+ function angularVitestSourcemapPlugin() {
84
+ return {
85
+ name: "@analogjs/vitest-angular-sourcemap-plugin",
86
+ transform: {
87
+ filter: { id: /\.ts(?:\?|$)/ },
88
+ async handler(code, id) {
89
+ const [, query] = id.split("?");
90
+ if (query && query.includes("inline")) return;
91
+ if (isRolldown()) return await vite.transformWithOxc(code, id, { lang: "ts" });
92
+ else return await vite.transformWithEsbuild(code, id, { loader: "ts" });
93
+ }
94
+ }
95
+ };
114
96
  }
115
- export function angularVitestPlugins() {
116
- return [
117
- angularVitestPlugin(),
118
- angularVitestEsbuildPlugin(),
119
- angularVitestSourcemapPlugin(),
120
- ];
97
+ function angularVitestPlugins() {
98
+ return [
99
+ angularVitestPlugin(),
100
+ angularVitestEsbuildPlugin(),
101
+ angularVitestSourcemapPlugin()
102
+ ];
121
103
  }
104
+ //#endregion
105
+ export { angularVitestPlugins };
106
+
122
107
  //# 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 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 test: {\n pool: (userConfig as any).test?.pool ?? 'vmThreads',\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-processes `.ts` files with the JS transformer (esbuild / OXC) to\n * re-align sourcemaps so breakpoints and coverage reports work correctly.\n *\n * Inline style/template virtual modules (`?inline`) are excluded because\n * they are already handled by the Angular compiler.\n */\nexport function angularVitestSourcemapPlugin(): 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 [, query] = id.split('?');\n\n if (query && query.includes('inline')) {\n return;\n }\n\n if (isRolldown()) {\n // lang must be 'ts' (not 'js') so OXC parses TypeScript syntax;\n // using 'js' would cause parse errors on type annotations.\n const result = await vite.transformWithOxc(code, id, {\n lang: 'ts',\n });\n\n return result as unknown as TransformResult;\n } else {\n const result = await vite.transformWithEsbuild(code, id, {\n loader: 'ts',\n });\n\n return result;\n }\n },\n },\n };\n}\n\nexport function angularVitestPlugins(): Plugin[] {\n return [\n angularVitestPlugin(),\n angularVitestEsbuildPlugin(),\n angularVitestSourcemapPlugin(),\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;AACjB,UAAO;IACL,cAAc,EACZ,SAAS;KACP;KACA;KACA;KACA;KACD,EACF;IACD,KAAK,EACH,YAAY;KACV,GAAG;KACH;KACA;KACD,EACF;IACD,MAAM,EACJ,MAAO,WAAmB,MAAM,QAAQ,aACzC;IACF;;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;;;;;;;;;AAUH,SAAgB,+BAAuC;AACrD,QAAO;EACL,MAAM;EACN,WAAW;GACT,QAAQ,EAON,IAAI,gBACL;GACD,MAAM,QAAQ,MAAc,IAAY;IACtC,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI;AAE/B,QAAI,SAAS,MAAM,SAAS,SAAS,CACnC;AAGF,QAAI,YAAY,CAOd,QAJe,MAAM,KAAK,iBAAiB,MAAM,IAAI,EACnD,MAAM,MACP,CAAC;QAQF,QAJe,MAAM,KAAK,qBAAqB,MAAM,IAAI,EACvD,QAAQ,MACT,CAAC;;GAKP;EACF;;AAGH,SAAgB,uBAAiC;AAC/C,QAAO;EACL,qBAAqB;EACrB,4BAA4B;EAC5B,8BAA8B;EAC/B"}
@@ -1,14 +1,14 @@
1
1
  /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.dev/license
7
- */
8
- import type { DepOptimizationConfig, Rolldown } from 'vite';
9
- import { CompilerPluginOptions } from './utils/devkit.js';
10
- type EsbuildOptions = NonNullable<DepOptimizationConfig['esbuildOptions']>;
11
- type EsbuildPlugin = NonNullable<EsbuildOptions['plugins']>[number];
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.dev/license
7
+ */
8
+ import type { DepOptimizationConfig, Rolldown } from "vite";
9
+ import { CompilerPluginOptions } from "./utils/devkit.js";
10
+ type EsbuildOptions = NonNullable<DepOptimizationConfig["esbuildOptions"]>;
11
+ type EsbuildPlugin = NonNullable<EsbuildOptions["plugins"]>[number];
12
12
  export declare function createCompilerPlugin(pluginOptions: CompilerPluginOptions, isTest: boolean, closeTransformer: boolean): EsbuildPlugin;
13
- export declare function createRolldownCompilerPlugin(pluginOptions: CompilerPluginOptions): Rolldown.Plugin;
13
+ export declare function createRolldownCompilerPlugin(pluginOptions: CompilerPluginOptions, closeTransformer: boolean): Rolldown.Plugin;
14
14
  export {};
@@ -1,47 +1,46 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.dev/license
7
- */
8
- import { JavaScriptTransformer, } from './utils/devkit.js';
9
- export function createCompilerPlugin(pluginOptions, isTest, closeTransformer) {
10
- const javascriptTransformer = new JavaScriptTransformer({ ...pluginOptions, jit: true }, 1);
11
- return {
12
- name: 'analogjs-angular-esbuild-deps-optimizer-plugin',
13
- async setup(build) {
14
- if (!isTest) {
15
- build.onLoad({ filter: /\.[cm]?js$/ }, async (args) => {
16
- const contents = await javascriptTransformer.transformFile(args.path);
17
- return {
18
- contents,
19
- loader: 'js',
20
- };
21
- });
22
- }
23
- if (closeTransformer) {
24
- build.onEnd(() => javascriptTransformer.close());
25
- }
26
- },
27
- };
1
+ import { jt } from "./utils/devkit.js";
2
+ //#region packages/vite-plugin-angular/src/lib/compiler-plugin.ts
3
+ function createCompilerPlugin(pluginOptions, isTest, closeTransformer) {
4
+ const javascriptTransformer = new jt({
5
+ ...pluginOptions,
6
+ jit: true
7
+ }, 1);
8
+ return {
9
+ name: "analogjs-angular-esbuild-deps-optimizer-plugin",
10
+ async setup(build) {
11
+ if (!isTest) build.onLoad({ filter: /\.[cm]?js$/ }, async (args) => {
12
+ return {
13
+ contents: await javascriptTransformer.transformFile(args.path),
14
+ loader: "js"
15
+ };
16
+ });
17
+ if (closeTransformer) build.onEnd(() => javascriptTransformer.close());
18
+ }
19
+ };
28
20
  }
29
- export function createRolldownCompilerPlugin(pluginOptions) {
30
- const javascriptTransformer = new JavaScriptTransformer({ ...pluginOptions, jit: true }, 1);
31
- return {
32
- name: 'analogjs-rolldown-deps-optimizer-plugin',
33
- load: {
34
- filter: {
35
- id: /\.[cm]?js$/,
36
- },
37
- async handler(id) {
38
- const contents = await javascriptTransformer.transformFile(id);
39
- return {
40
- code: Buffer.from(contents).toString('utf-8'),
41
- loader: 'js',
42
- };
43
- },
44
- },
45
- };
21
+ function createRolldownCompilerPlugin(pluginOptions, closeTransformer) {
22
+ const javascriptTransformer = new jt({
23
+ ...pluginOptions,
24
+ jit: true
25
+ }, 1);
26
+ return {
27
+ name: "analogjs-rolldown-deps-optimizer-plugin",
28
+ load: {
29
+ filter: { id: /\.[cm]?js$/ },
30
+ async handler(id) {
31
+ const contents = await javascriptTransformer.transformFile(id);
32
+ return {
33
+ code: Buffer.from(contents).toString("utf-8"),
34
+ loader: "js"
35
+ };
36
+ }
37
+ },
38
+ buildEnd() {
39
+ if (closeTransformer) javascriptTransformer.close();
40
+ }
41
+ };
46
42
  }
43
+ //#endregion
44
+ export { createCompilerPlugin, createRolldownCompilerPlugin };
45
+
47
46
  //# sourceMappingURL=compiler-plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compiler-plugin.js","sourceRoot":"","sources":["../../../../../packages/vite-plugin-angular/src/lib/compiler-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAEL,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAK3B,MAAM,UAAU,oBAAoB,CAClC,aAAoC,EACpC,MAAe,EACf,gBAAyB;IAEzB,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,CACrD,EAAE,GAAG,aAAa,EAAE,GAAG,EAAE,IAAI,EAAE,EAC/B,CAAC,CACF,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,gDAAgD;QACtD,KAAK,CAAC,KAAK,CAAC,KAAkB;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;oBACpD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAEtE,OAAO;wBACL,QAAQ;wBACR,MAAM,EAAE,IAAI;qBACb,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,gBAAgB,EAAE,CAAC;gBACrB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,aAAoC;IAEpC,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,CACrD,EAAE,GAAG,aAAa,EAAE,GAAG,EAAE,IAAI,EAAE,EAC/B,CAAC,CACF,CAAC;IACF,OAAO;QACL,IAAI,EAAE,yCAAyC;QAC/C,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,EAAE,EAAE,YAAY;aACjB;YACD,KAAK,CAAC,OAAO,CAAC,EAAE;gBACd,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAE/D,OAAO;oBACL,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAC7C,MAAM,EAAE,IAAI;iBACN,CAAC;YACX,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"compiler-plugin.js","names":[],"sources":["../../../src/lib/compiler-plugin.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport type { DepOptimizationConfig, Rolldown } from 'vite';\nimport type { PluginBuild } from 'esbuild';\n\nimport {\n CompilerPluginOptions,\n JavaScriptTransformer,\n} from './utils/devkit.js';\n\ntype EsbuildOptions = NonNullable<DepOptimizationConfig['esbuildOptions']>;\ntype EsbuildPlugin = NonNullable<EsbuildOptions['plugins']>[number];\n\nexport function createCompilerPlugin(\n pluginOptions: CompilerPluginOptions,\n isTest: boolean,\n closeTransformer: boolean,\n): EsbuildPlugin {\n const javascriptTransformer = new JavaScriptTransformer(\n { ...pluginOptions, jit: true },\n 1,\n );\n\n return {\n name: 'analogjs-angular-esbuild-deps-optimizer-plugin',\n async setup(build: PluginBuild) {\n if (!isTest) {\n build.onLoad({ filter: /\\.[cm]?js$/ }, async (args) => {\n const contents = await javascriptTransformer.transformFile(args.path);\n\n return {\n contents,\n loader: 'js',\n };\n });\n }\n\n if (closeTransformer) {\n build.onEnd(() => javascriptTransformer.close());\n }\n },\n };\n}\n\nexport function createRolldownCompilerPlugin(\n pluginOptions: CompilerPluginOptions,\n closeTransformer: boolean,\n): Rolldown.Plugin {\n const javascriptTransformer = new JavaScriptTransformer(\n { ...pluginOptions, jit: true },\n 1,\n );\n return {\n name: 'analogjs-rolldown-deps-optimizer-plugin',\n load: {\n filter: {\n id: /\\.[cm]?js$/,\n },\n async handler(id) {\n const contents = await javascriptTransformer.transformFile(id);\n\n return {\n code: Buffer.from(contents).toString('utf-8'),\n loader: 'js',\n } as any;\n },\n },\n // Close the JavaScriptTransformer worker pool when Rolldown finishes to\n // prevent leaked handles. Skipped for Astro, which owns the lifecycle.\n buildEnd() {\n if (closeTransformer) {\n javascriptTransformer.close();\n }\n },\n };\n}\n"],"mappings":";;AAmBA,SAAgB,qBACd,eACA,QACA,kBACe;CACf,MAAM,wBAAwB,IAAI,GAChC;EAAE,GAAG;EAAe,KAAK;EAAM,EAC/B,EACD;AAED,QAAO;EACL,MAAM;EACN,MAAM,MAAM,OAAoB;AAC9B,OAAI,CAAC,OACH,OAAM,OAAO,EAAE,QAAQ,cAAc,EAAE,OAAO,SAAS;AAGrD,WAAO;KACL,UAHe,MAAM,sBAAsB,cAAc,KAAK,KAAK;KAInE,QAAQ;KACT;KACD;AAGJ,OAAI,iBACF,OAAM,YAAY,sBAAsB,OAAO,CAAC;;EAGrD;;AAGH,SAAgB,6BACd,eACA,kBACiB;CACjB,MAAM,wBAAwB,IAAI,GAChC;EAAE,GAAG;EAAe,KAAK;EAAM,EAC/B,EACD;AACD,QAAO;EACL,MAAM;EACN,MAAM;GACJ,QAAQ,EACN,IAAI,cACL;GACD,MAAM,QAAQ,IAAI;IAChB,MAAM,WAAW,MAAM,sBAAsB,cAAc,GAAG;AAE9D,WAAO;KACL,MAAM,OAAO,KAAK,SAAS,CAAC,SAAS,QAAQ;KAC7C,QAAQ;KACT;;GAEJ;EAGD,WAAW;AACT,OAAI,iBACF,uBAAsB,OAAO;;EAGlC"}
@@ -1,10 +1,28 @@
1
- export declare class StyleUrlsResolver {
2
- private readonly styleUrlsCache;
3
- resolve(code: string, id: string): string[];
1
+ export interface AngularComponentMetadata {
2
+ className: string;
3
+ selector?: string;
4
+ styleUrls: string[];
5
+ templateUrls: string[];
6
+ inlineTemplates: string[];
4
7
  }
8
+ /**
9
+ * Extract Angular component identities from raw source code before Angular's
10
+ * compilation pipeline strips decorators. This is used for dev-time
11
+ * diagnostics such as duplicate selectors, duplicate component class names,
12
+ * selectorless shared components, and inline-template validation.
13
+ */
14
+ export declare function getAngularComponentMetadata(code: string): AngularComponentMetadata[];
15
+ /** Extract all `styleUrl` / `styleUrls` values from Angular component source. */
5
16
  export declare function getStyleUrls(code: string): string[];
17
+ /** Extract all `templateUrl` values from Angular component source. */
6
18
  export declare function getTemplateUrls(code: string): string[];
19
+ /** Extract inline `template` strings from Angular component source. */
20
+ export declare function getInlineTemplates(code: string): string[];
21
+ export declare class StyleUrlsResolver {
22
+ private readonly styleUrlsCache;
23
+ resolve(code: string, id: string): string[];
24
+ }
7
25
  export declare class TemplateUrlsResolver {
8
- private readonly templateUrlsCache;
9
- resolve(code: string, id: string): string[];
26
+ private readonly templateUrlsCache;
27
+ resolve(code: string, id: string): string[];
10
28
  }