@analogjs/vite-plugin-angular 2.5.0-beta.3 → 2.5.0-beta.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analogjs/vite-plugin-angular",
3
- "version": "2.5.0-beta.3",
3
+ "version": "2.5.0-beta.31",
4
4
  "description": "Vite Plugin for Angular",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -36,7 +36,7 @@
36
36
  }
37
37
  },
38
38
  "dependencies": {
39
- "@analogjs/angular-compiler": "^2.5.0-beta.3",
39
+ "@analogjs/angular-compiler": "^2.5.0-beta.31",
40
40
  "tinyglobby": "^0.2.14",
41
41
  "ts-morph": "^21.0.0"
42
42
  },
@@ -0,0 +1,14 @@
1
+ import { Plugin } from 'vite';
2
+ export interface AnalogCompilerPluginOptions {
3
+ tsconfigGetter: () => string;
4
+ workspaceRoot: string;
5
+ inlineStylesExtension: string;
6
+ jit: boolean;
7
+ liveReload: boolean;
8
+ supportedBrowsers: string[];
9
+ transformFilter?: (code: string, id: string) => boolean;
10
+ isTest: boolean;
11
+ isAstroIntegration: boolean;
12
+ analogCompilationMode?: 'full' | 'partial';
13
+ }
14
+ export declare function analogCompilerPlugin(pluginOptions: AnalogCompilerPluginOptions): Plugin;
@@ -0,0 +1,395 @@
1
+ import { promises as fsPromises } from 'node:fs';
2
+ import { dirname, isAbsolute, resolve } from 'node:path';
3
+ import * as vite from 'vite';
4
+ import * as compilerCli from '@angular/compiler-cli';
5
+ import { defaultClientConditions, normalizePath, preprocessCSS, } from 'vite';
6
+ import { compile, scanFile, scanPackageDts, collectImportedPackages, collectRelativeReExports, jitTransform, inlineResourceUrls, extractInlineStyles, generateHmrCode, debugCompile, debugRegistry, } from '@analogjs/angular-compiler';
7
+ import { TS_EXT_REGEX, getTsConfigPath, createDepOptimizerConfig, } from './utils/plugin-config.js';
8
+ export function analogCompilerPlugin(pluginOptions) {
9
+ let resolvedConfig;
10
+ let tsConfigResolutionContext = null;
11
+ let watchMode = false;
12
+ // Analog compiler state
13
+ const analogRegistry = new Map();
14
+ const analogResourceToSource = new Map();
15
+ const scannedDtsPackages = new Set();
16
+ let analogProjectRoot = '';
17
+ let useDefineForClassFields = true;
18
+ /**
19
+ * Scan a file into the registry, then recursively walk its relative
20
+ * `export *` / `export { … } from './x'` chain so any underlying
21
+ * directive classes also land in the registry. Used both at
22
+ * `buildStart` (for tsconfig path entries) and at dev time (file
23
+ * `add` and `handleHotUpdate`) so newly added barrels stay in sync
24
+ * without requiring a server restart.
25
+ *
26
+ * The `visited` set prevents infinite recursion within a single
27
+ * top-level call. Each fresh scan should pass an empty set (so HMR
28
+ * re-scans aren't blocked by buildStart's earlier visits).
29
+ */
30
+ async function scanBarrelExports(file, visited = new Set(), overwrite = false) {
31
+ if (visited.has(file))
32
+ return;
33
+ visited.add(file);
34
+ let code;
35
+ try {
36
+ code = await fsPromises.readFile(file, 'utf-8');
37
+ }
38
+ catch (e) {
39
+ if (debugRegistry.enabled) {
40
+ debugRegistry('scanBarrelExports: failed to read %s: %s', file, e?.message);
41
+ }
42
+ return;
43
+ }
44
+ const entries = scanFile(code, file);
45
+ for (const entry of entries) {
46
+ // At buildStart we want stable registry entries (don't overwrite
47
+ // an earlier scan with a barrel re-scan); HMR explicitly asks
48
+ // for overwrite so updated metadata replaces stale entries.
49
+ if (overwrite || !analogRegistry.has(entry.className)) {
50
+ analogRegistry.set(entry.className, entry);
51
+ }
52
+ }
53
+ // Collect every relative re-export specifier via OXC AST so
54
+ // recursive scans can't trip over each other (a shared `/g` regex
55
+ // would have its `lastIndex` reset by each recursive call and
56
+ // silently skip half of an outer barrel's re-exports, which
57
+ // previously left directives like `HlmRadioGroup` unregistered).
58
+ const dir = dirname(file);
59
+ for (const rel of collectRelativeReExports(code, file)) {
60
+ // NodeNext-style libraries write `export * from './foo.js'`
61
+ // even though the source is `./foo.ts`. Strip the ESM
62
+ // extension before probing or the candidates would be
63
+ // `foo.js.ts` / `foo.js/index.ts`, which never exist.
64
+ const normalizedRel = rel.replace(/\.(?:js|mjs)$/u, '');
65
+ const reExportCandidates = [
66
+ resolve(dir, normalizedRel + '.ts'),
67
+ resolve(dir, normalizedRel, 'index.ts'),
68
+ ];
69
+ let resolved = false;
70
+ for (const candidate of reExportCandidates) {
71
+ try {
72
+ await fsPromises.access(candidate);
73
+ await scanBarrelExports(candidate, visited, overwrite);
74
+ resolved = true;
75
+ break;
76
+ }
77
+ catch {
78
+ // try next candidate
79
+ }
80
+ }
81
+ if (!resolved && debugRegistry.enabled) {
82
+ debugRegistry('scanBarrelExports: %s re-export %s did not resolve to %o', file, rel, reExportCandidates);
83
+ }
84
+ }
85
+ }
86
+ async function initAnalogCompiler() {
87
+ if (pluginOptions.jit)
88
+ return; // JIT: no registry scan needed
89
+ // Scan all source files to build the registry
90
+ analogRegistry.clear();
91
+ scannedDtsPackages.clear();
92
+ const resolvedTsConfigPath = resolveTsConfigPath();
93
+ analogProjectRoot = dirname(resolvedTsConfigPath);
94
+ const config = compilerCli.readConfiguration(resolvedTsConfigPath);
95
+ useDefineForClassFields = config.options?.useDefineForClassFields ?? true;
96
+ // Collect candidate files: tsconfig rootNames PLUS the entry points
97
+ // named in `compilerOptions.paths`. App tsconfigs typically only
98
+ // include the app's own sources, so workspace library entry barrels
99
+ // (e.g. `HlmSelectImports = [HlmSelect, HlmSelectContent, ...] as
100
+ // const`) live outside `rootNames` and would otherwise miss the
101
+ // initial scan. The compiler then can't see that `HlmSelectImports`
102
+ // is a tuple barrel and emits the bare identifier into the parent
103
+ // component's `dependencies()` list, where Angular's runtime
104
+ // silently drops it because arrays don't have a directive def.
105
+ const candidates = new Set(config.rootNames);
106
+ const tsPaths = config.options?.paths;
107
+ const baseUrl = (config.options?.baseUrl ?? analogProjectRoot);
108
+ if (tsPaths) {
109
+ for (const targets of Object.values(tsPaths)) {
110
+ for (const target of targets) {
111
+ // Skip wildcard patterns — entry barrels are normally exact
112
+ // file paths like "libs/helm/select/src/index.ts".
113
+ if (target.includes('*'))
114
+ continue;
115
+ candidates.add(resolve(baseUrl, target));
116
+ }
117
+ }
118
+ }
119
+ const results = await Promise.all(Array.from(candidates).map(async (file) => {
120
+ try {
121
+ const code = await fsPromises.readFile(file, 'utf-8');
122
+ return scanFile(code, file);
123
+ }
124
+ catch (e) {
125
+ if (debugRegistry.enabled) {
126
+ debugRegistry('initAnalogCompiler: skipping unreadable %s: %s', file, e?.message);
127
+ }
128
+ return []; // Skip unreadable files
129
+ }
130
+ }));
131
+ for (const entries of results) {
132
+ for (const entry of entries) {
133
+ analogRegistry.set(entry.className, entry);
134
+ }
135
+ }
136
+ // Library barrels typically `export * from './lib/...'` rather than
137
+ // declaring directives directly, so the entry file alone gives us
138
+ // the tuple consts but not the directive classes they reference.
139
+ // Walk the relative `export *` chain so the underlying classes also
140
+ // land in the registry. Use a SHARED visited set across all
141
+ // barrels so recursive walks don't double-scan a file that's
142
+ // re-exported from multiple entry points.
143
+ const buildStartVisited = new Set();
144
+ if (tsPaths) {
145
+ const barrelCandidates = [];
146
+ for (const targets of Object.values(tsPaths)) {
147
+ for (const target of targets) {
148
+ if (target.includes('*'))
149
+ continue;
150
+ barrelCandidates.push(resolve(baseUrl, target));
151
+ }
152
+ }
153
+ await Promise.all(barrelCandidates.map((c) => scanBarrelExports(c, buildStartVisited)));
154
+ }
155
+ debugRegistry('initAnalogCompiler done: %d entries from %d candidate files', analogRegistry.size, candidates.size);
156
+ }
157
+ function ensureDtsRegistryForSource(code, id) {
158
+ for (const pkg of collectImportedPackages(code, id)) {
159
+ if (scannedDtsPackages.has(pkg))
160
+ continue;
161
+ scannedDtsPackages.add(pkg);
162
+ try {
163
+ const dtsEntries = scanPackageDts(pkg, analogProjectRoot);
164
+ for (const entry of dtsEntries) {
165
+ if (!analogRegistry.has(entry.className)) {
166
+ analogRegistry.set(entry.className, entry);
167
+ }
168
+ }
169
+ }
170
+ catch {
171
+ // Package may not have .d.ts files or may not be Angular
172
+ }
173
+ }
174
+ }
175
+ async function handleAnalogCompilerTransform(code, id) {
176
+ if (!/(Component|Directive|Pipe|Injectable|NgModule)\(/.test(code)) {
177
+ // Non-Angular file — leave it alone so a downstream plugin (or
178
+ // Vite's built-in TS handler) can process it.
179
+ return undefined;
180
+ }
181
+ // JIT mode
182
+ if (pluginOptions.jit) {
183
+ const result = jitTransform(code, id);
184
+ return { code: result.code, map: result.map };
185
+ }
186
+ // Inline external templateUrl/styleUrl(s) into the source before compilation
187
+ code = inlineResourceUrls(code, id);
188
+ // Pre-resolve inline styles that need preprocessing (SCSS/Sass/Less)
189
+ let resolvedStyles;
190
+ let resolvedInlineStyles;
191
+ if (pluginOptions.inlineStylesExtension !== 'css') {
192
+ const styleStrings = extractInlineStyles(code, id);
193
+ if (styleStrings.length > 0) {
194
+ resolvedInlineStyles = new Map();
195
+ for (let i = 0; i < styleStrings.length; i++) {
196
+ try {
197
+ const fakePath = id.replace(/\.ts$/, `.inline-${i}.${pluginOptions.inlineStylesExtension}`);
198
+ const processed = await preprocessCSS(styleStrings[i], fakePath, resolvedConfig);
199
+ resolvedInlineStyles.set(i, processed.code);
200
+ }
201
+ catch (e) {
202
+ if (debugCompile.enabled) {
203
+ debugCompile('inline style #%d preprocessing failed in %s: %s', i, id, e?.message);
204
+ }
205
+ // Skip styles that can't be preprocessed
206
+ }
207
+ }
208
+ if (resolvedInlineStyles.size === 0)
209
+ resolvedInlineStyles = undefined;
210
+ }
211
+ }
212
+ ensureDtsRegistryForSource(code, id);
213
+ const result = compile(code, id, {
214
+ registry: analogRegistry,
215
+ resolvedStyles,
216
+ resolvedInlineStyles,
217
+ useDefineForClassFields,
218
+ compilationMode: pluginOptions.analogCompilationMode,
219
+ });
220
+ // Track resource dependencies for HMR
221
+ for (const dep of result.resourceDependencies) {
222
+ analogResourceToSource.set(dep, id);
223
+ }
224
+ // Strip TypeScript-only syntax
225
+ const stripped = vite.transformWithOxc
226
+ ? await vite.transformWithOxc(result.code, id, {
227
+ lang: 'ts',
228
+ sourcemap: false,
229
+ decorator: { legacy: false, emitDecoratorMetadata: false },
230
+ })
231
+ : await vite.transformWithEsbuild(result.code, id, {
232
+ loader: 'ts',
233
+ sourcemap: false,
234
+ });
235
+ let outputCode = stripped.code;
236
+ // Append HMR code in dev mode
237
+ if (watchMode && pluginOptions.liveReload) {
238
+ const fileDeclarations = [...analogRegistry.values()].filter((e) => e.fileName === id);
239
+ if (fileDeclarations.length > 0) {
240
+ const localDepClassNames = fileDeclarations.map((e) => e.className);
241
+ outputCode += generateHmrCode(fileDeclarations, localDepClassNames);
242
+ }
243
+ }
244
+ return { code: outputCode, map: result.map };
245
+ }
246
+ function resolveTsConfigPath() {
247
+ const { root, isProd, isLib } = tsConfigResolutionContext;
248
+ return getTsConfigPath(root, pluginOptions.tsconfigGetter(), isProd, pluginOptions.isTest, isLib);
249
+ }
250
+ return {
251
+ name: '@analogjs/vite-plugin-angular-compiler',
252
+ enforce: 'pre',
253
+ async config(config, { command }) {
254
+ watchMode = command === 'serve';
255
+ const isProd = config.mode === 'production' ||
256
+ process.env['NODE_ENV'] === 'production';
257
+ tsConfigResolutionContext = {
258
+ root: config.root || '.',
259
+ isProd,
260
+ isLib: !!config?.build?.lib,
261
+ };
262
+ const preliminaryTsConfigPath = resolveTsConfigPath();
263
+ const depOptimizer = createDepOptimizerConfig({
264
+ tsconfig: preliminaryTsConfigPath,
265
+ isProd,
266
+ jit: pluginOptions.jit,
267
+ watchMode,
268
+ isTest: pluginOptions.isTest,
269
+ isAstroIntegration: pluginOptions.isAstroIntegration,
270
+ });
271
+ return {
272
+ ...(vite.rolldownVersion ? { oxc: {} } : { esbuild: false }),
273
+ ...depOptimizer,
274
+ resolve: {
275
+ conditions: [
276
+ ...depOptimizer.resolve.conditions,
277
+ ...(config.resolve?.conditions || defaultClientConditions),
278
+ ],
279
+ },
280
+ };
281
+ },
282
+ configResolved(config) {
283
+ resolvedConfig = config;
284
+ },
285
+ configureServer(server) {
286
+ // Watch for new .ts files and scan them into the registry. Use
287
+ // the barrel-aware scanner so a newly added re-export entry
288
+ // (`export * from './x'`) also expands its underlying directive
289
+ // classes — otherwise the registry stays stale until restart.
290
+ server.watcher.on('add', async (filePath) => {
291
+ if (filePath.endsWith('.ts') &&
292
+ !filePath.endsWith('.spec.ts') &&
293
+ !filePath.endsWith('.d.ts')) {
294
+ await scanBarrelExports(filePath, new Set(), true);
295
+ }
296
+ });
297
+ },
298
+ async buildStart() {
299
+ await initAnalogCompiler();
300
+ },
301
+ async handleHotUpdate(ctx) {
302
+ // Resource file changes → invalidate parent .ts module
303
+ if (analogResourceToSource.has(ctx.file)) {
304
+ const parentSource = analogResourceToSource.get(ctx.file);
305
+ const parentModule = ctx.server.moduleGraph.getModuleById(parentSource);
306
+ if (parentModule) {
307
+ return [parentModule];
308
+ }
309
+ }
310
+ if (TS_EXT_REGEX.test(ctx.file)) {
311
+ const [fileId] = ctx.file.split('?');
312
+ // Remove old entries from this file
313
+ const oldEntries = [...analogRegistry.entries()]
314
+ .filter(([_, v]) => v.fileName === fileId)
315
+ .map(([k]) => k);
316
+ for (const key of oldEntries) {
317
+ analogRegistry.delete(key);
318
+ }
319
+ // Rescan the changed file via the barrel-aware scanner so an
320
+ // edited barrel re-export picks up newly-referenced files.
321
+ // Pass overwrite=true so updated metadata replaces stale
322
+ // entries from the previous scan.
323
+ await scanBarrelExports(fileId, new Set(), true);
324
+ }
325
+ // Let Vite handle the rest — the transform hook will recompile
326
+ return ctx.modules;
327
+ },
328
+ resolveId(id, importer) {
329
+ if (pluginOptions.jit && id.startsWith('angular:jit:')) {
330
+ const path = id.split(';')[1];
331
+ return `${normalizePath(resolve(dirname(importer), path))}?${id.includes(':style') ? 'analog-inline' : 'analog-raw'}`;
332
+ }
333
+ // Intercept .html?raw imports to bypass Vite 7.3.2+ server.fs restrictions
334
+ if (id.includes('.html?raw')) {
335
+ const filePath = id.split('?')[0];
336
+ const resolved = isAbsolute(filePath)
337
+ ? normalizePath(filePath)
338
+ : importer
339
+ ? normalizePath(resolve(dirname(importer), filePath))
340
+ : undefined;
341
+ if (resolved) {
342
+ return resolved + '?analog-raw';
343
+ }
344
+ }
345
+ // Intercept style ?inline imports to bypass Vite 8.0.5+ server.fs restrictions
346
+ if (/\.(css|scss|sass|less)\?inline$/.test(id)) {
347
+ const filePath = id.split('?')[0];
348
+ const resolved = isAbsolute(filePath)
349
+ ? normalizePath(filePath)
350
+ : importer
351
+ ? normalizePath(resolve(dirname(importer), filePath))
352
+ : undefined;
353
+ if (resolved) {
354
+ return resolved + '?analog-inline';
355
+ }
356
+ }
357
+ return undefined;
358
+ },
359
+ async load(id) {
360
+ // Handle Angular template raw imports
361
+ if (id.endsWith('?analog-raw')) {
362
+ const filePath = id.slice(0, -'?analog-raw'.length);
363
+ const content = await fsPromises.readFile(filePath, 'utf-8');
364
+ return `export default ${JSON.stringify(content)}`;
365
+ }
366
+ // Handle Angular style imports
367
+ if (id.includes('?analog-inline')) {
368
+ const filePath = id.split('?')[0];
369
+ const code = await fsPromises.readFile(filePath, 'utf-8');
370
+ const result = await preprocessCSS(code, filePath, resolvedConfig);
371
+ return `export default ${JSON.stringify(result.code)}`;
372
+ }
373
+ return;
374
+ },
375
+ transform: {
376
+ filter: {
377
+ id: {
378
+ include: [TS_EXT_REGEX],
379
+ exclude: [/node_modules/, 'type=script', '@ng/component'],
380
+ },
381
+ },
382
+ async handler(code, id) {
383
+ if (pluginOptions.transformFilter &&
384
+ !(pluginOptions.transformFilter(code, id) ?? true)) {
385
+ return;
386
+ }
387
+ if (id.includes('.ts?')) {
388
+ id = id.replace(/\?(.*)/, '');
389
+ }
390
+ return handleAnalogCompilerTransform(code, id);
391
+ },
392
+ },
393
+ };
394
+ }
395
+ //# sourceMappingURL=analog-compiler-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analog-compiler-plugin.js","sourceRoot":"","sources":["../../../../../packages/vite-plugin-angular/src/lib/analog-compiler-plugin.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,12 @@ export interface PluginOptions {
33
33
  experimental?: {
34
34
  useAngularCompilationAPI?: boolean;
35
35
  useAnalogCompiler?: boolean;
36
+ /**
37
+ * Compilation output mode for the Analog compiler.
38
+ * - `'full'` (default): Emit final Ivy definitions for application builds.
39
+ * - `'partial'`: Emit partial declarations for library publishing.
40
+ */
41
+ analogCompilationMode?: 'full' | 'partial';
36
42
  };
37
43
  }
38
44
  export declare function angular(options?: PluginOptions): Plugin[];