@analogjs/vite-plugin-angular 3.0.0-alpha.88 → 3.0.0-alpha.89
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 +1 -1
- package/src/lib/angular-build-optimizer-plugin.d.ts +4 -0
- package/src/lib/angular-build-optimizer-plugin.js +49 -26
- package/src/lib/angular-build-optimizer-plugin.js.map +1 -1
- package/src/lib/angular-jit-plugin.js +4 -0
- package/src/lib/angular-jit-plugin.js.map +1 -1
- package/src/lib/angular-vite-plugin.js +47 -7
- package/src/lib/angular-vite-plugin.js.map +1 -1
- package/src/lib/compilation-api/compilation-api-plugin.js +2 -2
- package/src/lib/compilation-api/compilation-api-plugin.js.map +1 -1
- package/src/lib/compiler/compile.js +1 -1
- package/src/lib/compiler/compile.js.map +1 -1
- package/src/lib/compiler-plugin.js +3 -3
- package/src/lib/compiler-plugin.js.map +1 -1
- package/src/lib/encapsulation-plugin.d.ts +6 -1
- package/src/lib/encapsulation-plugin.js +24 -9
- package/src/lib/encapsulation-plugin.js.map +1 -1
- package/src/lib/fast-compile-plugin.d.ts +10 -0
- package/src/lib/fast-compile-plugin.js +21 -7
- package/src/lib/fast-compile-plugin.js.map +1 -1
- package/src/lib/router-plugin.js +2 -2
- package/src/lib/router-plugin.js.map +1 -1
- package/src/lib/utils/css-preprocessor-workers.d.ts +6 -0
- package/src/lib/utils/css-preprocessor-workers.js +29 -0
- package/src/lib/utils/css-preprocessor-workers.js.map +1 -0
- package/src/lib/utils/devkit.d.ts +9 -1
- package/src/lib/utils/devkit.js +39 -1
- package/src/lib/utils/devkit.js.map +1 -1
- package/src/lib/utils/transform-cache.d.ts +1 -1
- package/src/lib/utils/transform-cache.js.map +1 -1
- package/src/lib/utils/tsconfig-resolver.js +6 -4
- package/src/lib/utils/tsconfig-resolver.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compilation-api-plugin.js","names":[],"sources":["../../../../src/lib/compilation-api/compilation-api-plugin.ts"],"sourcesContent":["import { type createAngularCompilation as createAngularCompilationType } from '@angular/build/private';\nimport { union } from 'es-toolkit';\nimport { createHash } from 'node:crypto';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { basename, isAbsolute, join, relative, resolve } from 'node:path';\nimport { createRequire } from 'node:module';\nimport {\n normalizePath,\n Plugin,\n preprocessCSS,\n ResolvedConfig,\n ViteDevServer,\n} from 'vite';\n\nimport {\n createAngularCompilation,\n SourceFileCache,\n angularFullVersion,\n} from '../utils/devkit.js';\nimport {\n activateDeferredDebug,\n applyDebugOption,\n debugCompilationApi,\n debugCompiler,\n debugEmit,\n debugHmr,\n debugHmrV,\n debugStyles,\n debugStylesV,\n type DebugOption,\n} from '../utils/debug.js';\nimport {\n getTsConfigPath,\n createTsConfigGetter,\n TS_EXT_REGEX,\n type TsConfigResolutionContext,\n} from '../utils/plugin-config.js';\nimport { TsconfigResolver } from '../utils/tsconfig-resolver.js';\nimport { isRolldown } from '../utils/rolldown.js';\nimport {\n createCompilerPlugin,\n createRolldownCompilerPlugin,\n} from '../compiler-plugin.js';\nimport {\n AnalogStylesheetRegistry,\n preprocessStylesheetResult,\n registerStylesheetContent,\n rewriteRelativeCssImports,\n} from '../stylesheet-registry.js';\nimport { normalizeStylesheetDependencies } from '../style-preprocessor.js';\nimport type { StylePreprocessor } from '../style-preprocessor.js';\nimport {\n discoverAnalogIntegrations,\n type TransformFilter,\n} from '../analog-plugin-interop.js';\nimport { type FileReplacement } from '../plugins/file-replacements.plugin.js';\nimport type { EmitFileResult } from '../models.js';\nimport type { SourceFileCache as SourceFileCacheType } from '../utils/source-file-cache.js';\nimport {\n injectViteIgnoreForHmrMetadata,\n isIgnoredHmrFile,\n toAngularCompilationFileReplacements,\n mapTemplateUpdatesToFiles,\n refreshStylesheetRegistryForFile,\n DiagnosticModes,\n isTestWatchMode,\n} from '../utils/compilation-shared.js';\nimport { angularVitestPlugins } from '../angular-vitest-plugin.js';\nimport { buildOptimizerPlugin } from '../angular-build-optimizer-plugin.js';\nimport { jitPlugin } from '../angular-jit-plugin.js';\nimport { liveReloadPlugin } from '../live-reload-plugin.js';\nimport { virtualModulesPlugin } from '../virtual-modules-plugin.js';\nimport { encapsulationPlugin } from '../encapsulation-plugin.js';\nimport { nxFolderPlugin } from '../nx-folder-plugin.js';\nimport { routerPlugin } from '../router-plugin.js';\nimport { replaceFiles } from '../plugins/file-replacements.plugin.js';\nimport { cssExtensionStyleResolverPlugin } from '../utils/css-extension-resolver.js';\nimport { loadVirtualRawModule } from '../utils/virtual-resources.js';\n\nconst require = createRequire(import.meta.url);\nconst ts = require('typescript');\n\n/**\n * @experimental The Angular Compilation API plugin may change in future releases.\n */\nexport interface AngularCompilationPluginOptions {\n tsconfig?: string | (() => string);\n workspaceRoot?: string;\n inlineStylesExtension?: string;\n jit?: boolean;\n liveReload?: boolean;\n disableTypeChecking?: boolean;\n supportedBrowsers?: string[];\n fileReplacements?: FileReplacement[];\n include?: string[];\n debug?: DebugOption;\n}\n\n/**\n * Compiles Angular applications using Angular's private Compilation API.\n *\n * @experimental This plugin may change in future releases.\n */\nexport function angularCompilationPlugin(\n options: AngularCompilationPluginOptions = {},\n): Plugin[] {\n if (\n angularFullVersion < 200100 ||\n typeof createAngularCompilation !== 'function'\n ) {\n throw new Error(\n '[@analogjs/vite-plugin-angular]: angularCompilationPlugin requires Angular v20.1 or later and a matching @angular/build package with the Compilation API.',\n );\n }\n\n applyDebugOption(options.debug, options.workspaceRoot);\n const isTest = process.env['NODE_ENV'] === 'test' || !!process.env['VITEST'];\n const isStackBlitz = !!process.versions['webcontainer'];\n const pluginOptions = {\n tsconfigGetter: createTsConfigGetter(options.tsconfig),\n workspaceRoot:\n options.workspaceRoot ??\n process.env['NX_WORKSPACE_ROOT'] ??\n process.cwd(),\n inlineStylesExtension: options.inlineStylesExtension ?? 'css',\n jit: options.jit ?? isTest,\n liveReload: options.liveReload ?? true,\n disableTypeChecking: options.disableTypeChecking ?? true,\n supportedBrowsers: options.supportedBrowsers ?? ['safari 15'],\n fileReplacements: options.fileReplacements ?? [],\n include: options.include ?? [],\n isAstroIntegration: process.env['ANALOG_ASTRO'] === 'true',\n };\n let resolvedConfig: ResolvedConfig;\n let tsConfigResolutionContext: TsConfigResolutionContext | null = null;\n let watchMode = false;\n let stylePreprocessor: StylePreprocessor | undefined;\n let transformFilter: TransformFilter | undefined;\n let externalizeStylesRequested = false;\n\n // Persistent compilation instance — kept alive across rebuilds so Angular\n // can diff prior state and emit `templateUpdates` for HMR.\n let angularCompilation:\n | Awaited<ReturnType<typeof createAngularCompilationType>>\n | undefined;\n const sourceFileCache: SourceFileCacheType = new SourceFileCache();\n const outputFiles = new Map<string, EmitFileResult>();\n const classNames = new Map<string, string>();\n let stylesheetRegistry: AnalogStylesheetRegistry | undefined;\n let compilationLock = Promise.resolve();\n let pendingCompilation: Promise<void> | null = null;\n let initialCompilation = false;\n let viteServer: ViteDevServer | undefined;\n\n const tsconfigResolver = new TsconfigResolver({\n workspaceRoot: pluginOptions.workspaceRoot,\n include: pluginOptions.include,\n liveReload: pluginOptions.liveReload,\n isTest,\n });\n const isVitestVscode = !!process.env['VITEST_VSCODE'];\n let testWatchMode = isTestWatchMode();\n\n function hasViteHmrTransport(): boolean {\n return resolvedConfig ? resolvedConfig.server.hmr !== false : true;\n }\n\n function shouldEnableLiveReload(): boolean {\n const effectiveWatchMode = isTest ? testWatchMode : watchMode;\n return !!(\n effectiveWatchMode &&\n pluginOptions.liveReload &&\n hasViteHmrTransport()\n );\n }\n\n function shouldExternalizeStyles(): boolean {\n const effectiveWatchMode = isTest ? testWatchMode : watchMode;\n if (!effectiveWatchMode) return false;\n return !!(shouldEnableLiveReload() || externalizeStylesRequested);\n }\n\n function resolveTsConfigPath() {\n const tsconfigValue = pluginOptions.tsconfigGetter();\n return getTsConfigPath(\n tsConfigResolutionContext!.root,\n tsconfigValue,\n tsConfigResolutionContext!.isProd,\n isTest,\n tsConfigResolutionContext!.isLib,\n );\n }\n\n function resolveCompilationApiTsConfigPath(\n resolvedTsConfigPath: string,\n config: ResolvedConfig,\n ): string {\n const includedFiles = tsconfigResolver.ensureIncludeCache();\n const cached = tsconfigResolver.getCachedTsconfigOptions(\n resolvedTsConfigPath,\n config,\n );\n const expandedGraphRoots = tsconfigResolver.collectExpandedTsconfigRoots(\n resolvedTsConfigPath,\n config,\n );\n const mergedRootNames = union(\n cached.rootNames,\n expandedGraphRoots,\n includedFiles,\n ).map((file) => normalizePath(file));\n\n if (mergedRootNames.length === cached.rootNames.length) {\n return resolvedTsConfigPath;\n }\n\n const resolvedCacheDir = isAbsolute(config.cacheDir)\n ? config.cacheDir\n : resolve(config.root, config.cacheDir);\n const wrapperDir = join(\n resolvedCacheDir,\n 'analog-angular',\n 'compilation-api',\n );\n const rawTsconfig = (ts.readConfigFile(\n resolvedTsConfigPath,\n ts.sys.readFile,\n ).config ?? {}) as { references?: unknown[] };\n const wrapperPayload = {\n extends: normalizePath(resolvedTsConfigPath),\n files: [...mergedRootNames].sort(),\n ...(rawTsconfig.references ? { references: rawTsconfig.references } : {}),\n };\n const wrapperHash = createHash('sha1')\n .update(JSON.stringify(wrapperPayload))\n .digest('hex')\n .slice(0, 12);\n const wrapperPath = join(\n wrapperDir,\n `tsconfig.includes.${wrapperHash}.json`,\n );\n\n mkdirSync(wrapperDir, { recursive: true });\n if (!existsSync(wrapperPath)) {\n writeFileSync(\n wrapperPath,\n `${JSON.stringify(wrapperPayload, null, 2)}\\n`,\n 'utf-8',\n );\n }\n\n debugCompilationApi('generated include wrapper tsconfig', {\n originalTsconfig: resolvedTsConfigPath,\n wrapperTsconfig: wrapperPath,\n includeCount: includedFiles.length,\n rootNameCount: mergedRootNames.length,\n });\n\n return wrapperPath;\n }\n\n const normalizeEmitterLookupId = (file: string) => {\n const normalizedFile = normalizePath(file);\n if (!normalizedFile.startsWith('/@fs/')) return normalizedFile;\n const fsPath = normalizedFile\n .slice('/@fs'.length)\n .replace(/^\\/([A-Za-z]:\\/)/, '$1');\n return normalizePath(fsPath);\n };\n\n let outputFile: ((file: string) => void) | undefined;\n const fileEmitter = (file: string) => {\n const normalizedFile = normalizeEmitterLookupId(file);\n outputFile?.(normalizedFile);\n return outputFiles.get(normalizedFile);\n };\n\n async function performAngularCompilation(\n config: ResolvedConfig,\n ids?: string[],\n ) {\n const compilation = (angularCompilation ??= await (\n createAngularCompilation as typeof createAngularCompilationType\n )(!!pluginOptions.jit, false));\n const modifiedFiles = ids?.length\n ? new Set(ids.map((file) => normalizePath(file)))\n : undefined;\n if (modifiedFiles?.size) {\n sourceFileCache.invalidate(modifiedFiles);\n }\n if (modifiedFiles?.size && compilation.update) {\n debugCompilationApi('incremental update', {\n files: [...modifiedFiles],\n });\n await compilation.update(modifiedFiles);\n }\n\n const resolvedTsConfigPath = resolveTsConfigPath();\n const compilationApiTsConfigPath = resolveCompilationApiTsConfigPath(\n resolvedTsConfigPath,\n config,\n );\n debugEmit('compilation initialize', {\n resolvedTsConfigPath,\n compilationApiTsConfigPath,\n modifiedFileCount: modifiedFiles?.size ?? 0,\n });\n const compilationResult = await compilation.initialize(\n compilationApiTsConfigPath,\n {\n fileReplacements: toAngularCompilationFileReplacements(\n pluginOptions.fileReplacements,\n pluginOptions.workspaceRoot,\n ),\n modifiedFiles,\n async transformStylesheet(\n data: string,\n containingFile: string,\n resourceFile: string | null,\n order: number,\n className: string | null,\n ) {\n const filename =\n resourceFile ??\n containingFile.replace(\n '.ts',\n `.${pluginOptions.inlineStylesExtension}`,\n );\n\n const preprocessed = preprocessStylesheetResult(\n data,\n filename,\n stylePreprocessor,\n {\n filename,\n containingFile,\n resourceFile,\n className,\n order,\n inline: !resourceFile,\n },\n );\n\n if (shouldEnableLiveReload() && className && containingFile) {\n classNames.set(normalizePath(containingFile), className as string);\n }\n\n if (shouldExternalizeStyles()) {\n const stylesheetId = registerStylesheetContent(\n stylesheetRegistry!,\n {\n code: preprocessed.code,\n dependencies: normalizeStylesheetDependencies(\n preprocessed.dependencies,\n ),\n diagnostics: preprocessed.diagnostics,\n tags: preprocessed.tags,\n containingFile,\n className: className as string | undefined,\n order,\n inlineStylesExtension: pluginOptions.inlineStylesExtension,\n resourceFile: resourceFile ?? undefined,\n },\n );\n\n debugStyles('stylesheet deferred to Vite pipeline', {\n stylesheetId,\n resourceFile: resourceFile ?? '(inline)',\n });\n\n return stylesheetId;\n }\n\n debugStyles('stylesheet processed inline via preprocessCSS', {\n filename,\n resourceFile: resourceFile ?? '(inline)',\n dataLength: preprocessed.code.length,\n });\n\n let stylesheetResult;\n try {\n stylesheetResult = await preprocessCSS(\n preprocessed.code,\n `${filename}?direct`,\n resolvedConfig,\n );\n } catch (e) {\n debugStyles('preprocessCSS error', {\n filename,\n resourceFile: resourceFile ?? '(inline)',\n error: String(e),\n });\n }\n\n return stylesheetResult?.code || '';\n },\n processWebWorker(_workerFile: string, _containingFile: string) {\n return '';\n },\n },\n (tsCompilerOptions: Record<string, unknown>) => {\n if (shouldExternalizeStyles()) {\n tsCompilerOptions['externalRuntimeStyles'] = true;\n }\n\n if (shouldEnableLiveReload()) {\n tsCompilerOptions['_enableHmr'] = true;\n tsCompilerOptions['supportTestBed'] = true;\n }\n\n debugCompiler('tsCompilerOptions (compilation API)', {\n liveReload: pluginOptions.liveReload,\n viteHmr: hasViteHmrTransport(),\n externalizeStylesRequested,\n watchMode,\n shouldExternalize: shouldExternalizeStyles(),\n externalRuntimeStyles: !!tsCompilerOptions['externalRuntimeStyles'],\n hmrEnabled: !!tsCompilerOptions['_enableHmr'],\n });\n\n if (tsCompilerOptions['compilationMode'] === 'partial') {\n tsCompilerOptions['supportTestBed'] = true;\n tsCompilerOptions['supportJitMode'] = true;\n }\n\n if (!isTest && resolvedConfig.build?.lib) {\n tsCompilerOptions['declaration'] = true;\n tsCompilerOptions['declarationMap'] = watchMode;\n tsCompilerOptions['inlineSources'] = true;\n }\n\n if (isTest) {\n tsCompilerOptions['supportTestBed'] = true;\n }\n\n return tsCompilerOptions;\n },\n );\n\n // Preprocess external stylesheets for Tailwind CSS @reference\n debugStyles('external stylesheets from compilation API', {\n count: compilationResult.externalStylesheets?.size ?? 0,\n hasPreprocessor: !!stylePreprocessor,\n hasInlineMap: !!stylesheetRegistry,\n });\n const preprocessStats = { total: 0, injected: 0, skipped: 0, errors: 0 };\n for (const [key, value] of compilationResult.externalStylesheets ?? []) {\n preprocessStats.total++;\n const angularHash = `${value}.css`;\n stylesheetRegistry?.registerExternalRequest(angularHash, key);\n\n if (stylesheetRegistry && stylePreprocessor && existsSync(key)) {\n try {\n const rawCss = readFileSync(key, 'utf-8');\n const preprocessed = preprocessStylesheetResult(\n rawCss,\n key,\n stylePreprocessor,\n );\n const servedCss = rewriteRelativeCssImports(preprocessed.code, key);\n stylesheetRegistry.registerServedStylesheet(\n {\n publicId: angularHash,\n sourcePath: key,\n originalCode: rawCss,\n normalizedCode: servedCss,\n dependencies: normalizeStylesheetDependencies(\n preprocessed.dependencies,\n ),\n diagnostics: preprocessed.diagnostics,\n tags: preprocessed.tags,\n },\n [key, normalizePath(key), basename(key), key.replace(/^\\//, '')],\n );\n\n if (servedCss && servedCss !== rawCss) {\n preprocessStats.injected++;\n } else {\n preprocessStats.skipped++;\n }\n } catch (e) {\n preprocessStats.errors++;\n console.warn(\n `[@analogjs/vite-plugin-angular] failed to preprocess external stylesheet: ${key}: ${e}`,\n );\n }\n } else {\n preprocessStats.skipped++;\n }\n }\n debugStyles('external stylesheet preprocessing complete', preprocessStats);\n\n const diagnostics = await compilation.diagnoseFiles(\n pluginOptions.disableTypeChecking\n ? DiagnosticModes.All & ~DiagnosticModes.Semantic\n : DiagnosticModes.All,\n );\n\n const errors = diagnostics.errors?.length ? diagnostics.errors : [];\n const warnings = diagnostics.warnings?.length ? diagnostics.warnings : [];\n\n const templateUpdates = mapTemplateUpdatesToFiles(\n compilationResult.templateUpdates,\n );\n if (templateUpdates.size > 0) {\n debugHmr('compilation API template updates', {\n count: templateUpdates.size,\n files: [...templateUpdates.keys()],\n });\n }\n\n const affectedFiles = await compilation.emitAffectedFiles();\n debugEmit('emitAffectedFiles summary', {\n count: affectedFiles.length,\n templateUpdateCount: templateUpdates.size,\n knownOutputCountBefore: outputFiles.size,\n });\n\n for (const file of affectedFiles) {\n const normalizedFilename = normalizePath(file.filename);\n const templateUpdate = templateUpdates.get(normalizedFilename);\n\n if (templateUpdate) {\n classNames.set(normalizedFilename, templateUpdate.className);\n }\n\n outputFiles.set(normalizedFilename, {\n content: file.contents,\n dependencies: [],\n errors: errors.map((error: { text?: string }) => error.text || ''),\n warnings: warnings.map(\n (warning: { text?: string }) => warning.text || '',\n ),\n hmrUpdateCode: templateUpdate?.code,\n hmrEligible: !!templateUpdate?.code,\n });\n }\n }\n\n async function performCompilation(config: ResolvedConfig, ids?: string[]) {\n let resolve: (() => unknown) | undefined;\n const previousLock = compilationLock;\n compilationLock = new Promise<void>((r) => {\n resolve = r;\n });\n try {\n await previousLock;\n const integrations = await discoverAnalogIntegrations(config);\n stylePreprocessor = integrations.stylePreprocessor;\n transformFilter = integrations.transformFilter;\n tsconfigResolver.setIntegrationIncludes(integrations.include);\n externalizeStylesRequested = integrations.externalizeStyles;\n await performAngularCompilation(config, ids);\n } finally {\n resolve!();\n }\n }\n\n function isComponentStyleSheet(id: string): boolean {\n return id.includes('ngcomp=');\n }\n\n function getFilenameFromPath(id: string): string {\n try {\n return new URL(id, 'http://localhost').pathname.replace(/^\\//, '');\n } catch {\n const queryIndex = id.indexOf('?');\n const pathname = queryIndex >= 0 ? id.slice(0, queryIndex) : id;\n return pathname.replace(/^\\//, '');\n }\n }\n\n function sendHMRComponentUpdate(server: ViteDevServer, id: string) {\n debugHmrV('ws send: angular component update', {\n id,\n timestamp: Date.now(),\n });\n server.ws.send('angular:component-update', {\n id: encodeURIComponent(id),\n timestamp: Date.now(),\n });\n classNames.delete(id);\n }\n\n const compilerPlugin: Plugin = {\n name: '@analogjs/vite-plugin-angular-compilation-api',\n enforce: 'pre' as const,\n async config(config, { command }) {\n activateDeferredDebug(command);\n watchMode = command === 'serve';\n const isProd =\n config.mode === 'production' ||\n process.env['NODE_ENV'] === 'production';\n\n tsConfigResolutionContext = {\n root: config.root || '.',\n isProd,\n isLib: !!config?.build?.lib,\n };\n\n debugCompilationApi('enabled (Angular %s)', angularFullVersion);\n\n // Angular Compilation API handles TypeScript transforms — disable\n // esbuild/oxc so they don't compete.\n debugCompilationApi('esbuild/oxc disabled, Angular handles transforms');\n\n // The compilation API owns user-source transforms, but deps\n // optimization still bundles partial-compiled Angular libs from\n // node_modules (`ɵɵngDeclareInjectable/Factory`). Without the\n // linker plugin, those declarations reach the browser unprocessed\n // and Angular tries to JIT-compile them at runtime. Mirror the\n // deps-optimizer wiring from `angular-vite-plugin.ts` so the\n // linker runs on `.[cm]?js` deps under both rolldown and esbuild.\n const useRolldown = isRolldown();\n const preliminaryTsConfigPath = resolveTsConfigPath();\n const compilerPluginOptions = {\n tsconfig: preliminaryTsConfigPath,\n sourcemap: !isProd,\n advancedOptimizations: isProd,\n jit: pluginOptions.jit,\n incremental: watchMode,\n };\n\n // No `resolve.conditions` extension here: the `style` condition is\n // scoped to `.css`-extension requests by\n // `cssExtensionStyleResolverPlugin`, registered once at the\n // `angularCompilationPlugin()` factory level. Adding `style` globally caused\n // Tailwind v4's JS plugin resolver to pick the `style` exports of\n // packages such as `tailwindcss-primeui`, which then crashed Node's\n // ESM loader when it tried to import the resulting `.css` file.\n return {\n esbuild: undefined,\n oxc: undefined,\n optimizeDeps: {\n include: ['rxjs/operators', 'rxjs', 'tslib'],\n exclude: ['@angular/platform-server'],\n ...(useRolldown\n ? {\n rolldownOptions: {\n plugins: [\n createRolldownCompilerPlugin(\n compilerPluginOptions,\n !pluginOptions.isAstroIntegration,\n ),\n ],\n },\n }\n : {\n esbuildOptions: {\n plugins: [\n createCompilerPlugin(\n compilerPluginOptions,\n isTest,\n !pluginOptions.isAstroIntegration,\n ),\n ],\n },\n }),\n },\n };\n },\n async configResolved(config) {\n resolvedConfig = config;\n\n stylesheetRegistry = new AnalogStylesheetRegistry();\n const integrations = await discoverAnalogIntegrations(config);\n integrations.configureStylesheetRegistry?.(stylesheetRegistry, {\n workspaceRoot: pluginOptions.workspaceRoot,\n });\n debugStyles('stylesheet registry initialized (Angular Compilation API)');\n\n if (isTest) {\n testWatchMode =\n !(config.server.watch === null) ||\n (config as any).test?.watch === true ||\n testWatchMode;\n }\n },\n configureServer(server) {\n viteServer = server;\n\n const invalidateCompilation = async () => {\n tsconfigResolver.invalidateAll();\n await performCompilation(resolvedConfig);\n };\n server.watcher.on('add', invalidateCompilation);\n server.watcher.on('unlink', invalidateCompilation);\n server.watcher.on('change', (file) => {\n if (file.includes('tsconfig')) {\n tsconfigResolver.invalidateTsconfigCaches();\n }\n });\n },\n async buildStart() {\n if (!isVitestVscode) {\n pendingCompilation = performCompilation(resolvedConfig);\n await pendingCompilation;\n pendingCompilation = null;\n initialCompilation = true;\n }\n },\n async handleHotUpdate(ctx) {\n if (isIgnoredHmrFile(ctx.file)) {\n debugHmr('ignored file change', { file: ctx.file });\n return [];\n }\n\n if (TS_EXT_REGEX.test(ctx.file)) {\n const [fileId] = ctx.file.split('?');\n debugHmr('TS file changed', { file: ctx.file, fileId });\n\n pendingCompilation = performCompilation(resolvedConfig, [fileId]);\n\n let result;\n\n if (shouldEnableLiveReload()) {\n await pendingCompilation;\n pendingCompilation = null;\n result = fileEmitter(fileId);\n debugHmr('TS file emitted', {\n fileId,\n hmrEligible: !!result?.hmrEligible,\n hasClassName: !!classNames.get(fileId),\n });\n }\n\n if (\n shouldEnableLiveReload() &&\n result?.hmrEligible &&\n classNames.get(fileId)\n ) {\n const relativeFileId = `${normalizePath(\n relative(process.cwd(), fileId),\n )}@${classNames.get(fileId)}`;\n\n debugHmr('sending component update', { relativeFileId });\n sendHMRComponentUpdate(ctx.server, relativeFileId);\n\n return ctx.modules.map((mod) => {\n if (mod.id === ctx.file) {\n mod.isSelfAccepting = true;\n }\n return mod;\n });\n }\n }\n\n if (/\\.(html|htm)$/.test(ctx.file)) {\n debugHmr('template file changed', { file: ctx.file });\n // Recompile to pick up template changes\n pendingCompilation = performCompilation(resolvedConfig);\n }\n\n if (/\\.(css|less|sass|scss)$/.test(ctx.file)) {\n debugHmr('stylesheet file changed', { file: ctx.file });\n refreshStylesheetRegistryForFile(\n ctx.file,\n stylesheetRegistry,\n stylePreprocessor,\n );\n }\n\n return ctx.modules;\n },\n resolveId(id) {\n // Map angular component stylesheets\n if (isComponentStyleSheet(id)) {\n const filename = getFilenameFromPath(id);\n const search = new URL(id, 'http://localhost').search;\n const servedSourcePath =\n stylesheetRegistry?.getServedSourcePath(filename);\n\n if (servedSourcePath) {\n debugStylesV('resolveId: mapped served stylesheet to source', {\n filename,\n resolvedPath: servedSourcePath,\n });\n return servedSourcePath + search;\n }\n\n if (stylesheetRegistry?.hasServed(filename)) {\n return id;\n }\n\n const componentStyles =\n stylesheetRegistry?.resolveExternalSource(filename);\n if (componentStyles) {\n return componentStyles + new URL(id, 'http://localhost').search;\n }\n }\n\n return undefined;\n },\n async load(id) {\n // Virtual raw ids back JIT-emitted templateUrl/styleUrl imports.\n // virtual-modules-plugin resolves them; this plugin is the active\n // compilation plugin in compilation-API mode, so load must read the\n // backing file (jit=true is the test-mode default).\n const rawModule = await loadVirtualRawModule(this, id);\n if (rawModule !== undefined) return rawModule;\n\n // Serve component stylesheets from registry\n if (isComponentStyleSheet(id)) {\n const filename = getFilenameFromPath(id);\n const componentStyles = stylesheetRegistry?.getServedContent(filename);\n if (componentStyles) {\n stylesheetRegistry?.registerActiveRequest(id);\n return componentStyles;\n }\n }\n\n return;\n },\n transform: {\n filter: {\n id: {\n include: [TS_EXT_REGEX],\n exclude: [\n /node_modules/,\n 'type=script',\n '@ng/component',\n /[?&]raw\\b/,\n ],\n },\n },\n async handler(code, id) {\n if (/[?&]raw\\b/.test(id)) return;\n if (transformFilter && !transformFilter(code, id)) {\n return;\n }\n\n // Angular emits every file in the program, not only files with\n // Angular decorators, and `@analogjs/platform` excludes `.ts` from\n // Vite's own transform. So serve Angular's output for any emitted\n // file; only the \"not emitted\" warning below is decorator-specific.\n const isAngular =\n /(Component|Directive|Pipe|Injectable|NgModule)\\(/.test(code);\n\n if (id.includes('.ts?')) {\n id = id.replace(/\\?(.*)/, '');\n }\n\n if (isTest) {\n if (isVitestVscode && !initialCompilation) {\n pendingCompilation = performCompilation(resolvedConfig);\n initialCompilation = true;\n }\n\n const tsMod = viteServer?.moduleGraph.getModuleById(id);\n if (tsMod) {\n const invalidated = tsMod.lastInvalidationTimestamp;\n if (testWatchMode && invalidated) {\n pendingCompilation = performCompilation(resolvedConfig, [id]);\n }\n }\n }\n\n if (pendingCompilation) {\n await pendingCompilation;\n pendingCompilation = null;\n }\n\n const typescriptResult = fileEmitter(id);\n if (!typescriptResult) {\n debugCompilationApi('transform skip (file not emitted)', { id });\n if (isAngular) {\n this.warn(\n `[@analogjs/vite-plugin-angular]: \"${id}\" contains Angular decorators but is not in the TypeScript program. ` +\n `Ensure it is included in your tsconfig.`,\n );\n }\n return;\n }\n\n if (typescriptResult.warnings && typescriptResult.warnings.length > 0) {\n this.warn(`${typescriptResult.warnings.join('\\n')}`);\n }\n\n if (typescriptResult.errors && typescriptResult.errors.length > 0) {\n this.error(`${typescriptResult.errors.join('\\n')}`);\n }\n\n let data = typescriptResult.content ?? '';\n\n // Re-inject @vite-ignore for Angular HMR dynamic imports\n if (data.includes('HmrLoad')) {\n const hasMetaUrl = data.includes('getReplaceMetadataURL');\n if (hasMetaUrl) {\n data = injectViteIgnoreForHmrMetadata(data);\n }\n }\n\n return {\n code: data,\n map: null,\n };\n },\n },\n async closeBundle() {\n await compilationLock;\n await angularCompilation?.close?.();\n angularCompilation = undefined;\n outputFiles.clear();\n classNames.clear();\n sourceFileCache.clear();\n tsconfigResolver.invalidateAll();\n stylesheetRegistry = undefined;\n pendingCompilation = null;\n initialCompilation = false;\n },\n };\n\n return [\n cssExtensionStyleResolverPlugin(),\n replaceFiles(pluginOptions.fileReplacements, pluginOptions.workspaceRoot),\n virtualModulesPlugin({ jit: pluginOptions.jit }),\n compilerPlugin,\n pluginOptions.liveReload && liveReloadPlugin({ classNames, fileEmitter }),\n ...(isTest && !isStackBlitz\n ? angularVitestPlugins((id) => outputFiles.get(normalizePath(id))?.map)\n : []),\n pluginOptions.jit &&\n jitPlugin({ inlineStylesExtension: pluginOptions.inlineStylesExtension }),\n buildOptimizerPlugin({\n supportedBrowsers: pluginOptions.supportedBrowsers,\n jit: pluginOptions.jit,\n }),\n routerPlugin(),\n nxFolderPlugin(),\n encapsulationPlugin(),\n ].filter(Boolean) as Plugin[];\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compilation-api-plugin.js","names":[],"sources":["../../../../src/lib/compilation-api/compilation-api-plugin.ts"],"sourcesContent":["import { type createAngularCompilation as createAngularCompilationType } from '@angular/build/private';\nimport { union } from 'es-toolkit';\nimport { createHash } from 'node:crypto';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { basename, isAbsolute, join, relative, resolve } from 'node:path';\nimport { createRequire } from 'node:module';\nimport {\n normalizePath,\n Plugin,\n preprocessCSS,\n ResolvedConfig,\n ViteDevServer,\n} from 'vite';\n\nimport {\n createAngularCompilation,\n SourceFileCache,\n angularFullVersion,\n} from '../utils/devkit.js';\nimport {\n activateDeferredDebug,\n applyDebugOption,\n debugCompilationApi,\n debugCompiler,\n debugEmit,\n debugHmr,\n debugHmrV,\n debugStyles,\n debugStylesV,\n type DebugOption,\n} from '../utils/debug.js';\nimport {\n getTsConfigPath,\n createTsConfigGetter,\n TS_EXT_REGEX,\n type TsConfigResolutionContext,\n} from '../utils/plugin-config.js';\nimport { TsconfigResolver } from '../utils/tsconfig-resolver.js';\nimport { isRolldown } from '../utils/rolldown.js';\nimport {\n createCompilerPlugin,\n createRolldownCompilerPlugin,\n} from '../compiler-plugin.js';\nimport {\n AnalogStylesheetRegistry,\n preprocessStylesheetResult,\n registerStylesheetContent,\n rewriteRelativeCssImports,\n} from '../stylesheet-registry.js';\nimport { normalizeStylesheetDependencies } from '../style-preprocessor.js';\nimport type { StylePreprocessor } from '../style-preprocessor.js';\nimport {\n discoverAnalogIntegrations,\n type TransformFilter,\n} from '../analog-plugin-interop.js';\nimport { type FileReplacement } from '../plugins/file-replacements.plugin.js';\nimport type { EmitFileResult } from '../models.js';\nimport type { SourceFileCache as SourceFileCacheType } from '../utils/source-file-cache.js';\nimport {\n injectViteIgnoreForHmrMetadata,\n isIgnoredHmrFile,\n toAngularCompilationFileReplacements,\n mapTemplateUpdatesToFiles,\n refreshStylesheetRegistryForFile,\n DiagnosticModes,\n isTestWatchMode,\n} from '../utils/compilation-shared.js';\nimport { angularVitestPlugins } from '../angular-vitest-plugin.js';\nimport { buildOptimizerPlugin } from '../angular-build-optimizer-plugin.js';\nimport { jitPlugin } from '../angular-jit-plugin.js';\nimport { liveReloadPlugin } from '../live-reload-plugin.js';\nimport { virtualModulesPlugin } from '../virtual-modules-plugin.js';\nimport { encapsulationPlugin } from '../encapsulation-plugin.js';\nimport { nxFolderPlugin } from '../nx-folder-plugin.js';\nimport { routerPlugin } from '../router-plugin.js';\nimport { replaceFiles } from '../plugins/file-replacements.plugin.js';\nimport { cssExtensionStyleResolverPlugin } from '../utils/css-extension-resolver.js';\nimport { loadVirtualRawModule } from '../utils/virtual-resources.js';\n\nconst require = createRequire(import.meta.url);\nconst ts = require('typescript');\n\n/**\n * @experimental The Angular Compilation API plugin may change in future releases.\n */\nexport interface AngularCompilationPluginOptions {\n tsconfig?: string | (() => string);\n workspaceRoot?: string;\n inlineStylesExtension?: string;\n jit?: boolean;\n liveReload?: boolean;\n disableTypeChecking?: boolean;\n supportedBrowsers?: string[];\n fileReplacements?: FileReplacement[];\n include?: string[];\n debug?: DebugOption;\n}\n\n/**\n * Compiles Angular applications using Angular's private Compilation API.\n *\n * @experimental This plugin may change in future releases.\n */\nexport function angularCompilationPlugin(\n options: AngularCompilationPluginOptions = {},\n): Plugin[] {\n if (\n angularFullVersion < 200100 ||\n typeof createAngularCompilation !== 'function'\n ) {\n throw new Error(\n '[@analogjs/vite-plugin-angular]: angularCompilationPlugin requires Angular v20.1 or later and a matching @angular/build package with the Compilation API.',\n );\n }\n\n applyDebugOption(options.debug, options.workspaceRoot);\n const isTest = process.env['NODE_ENV'] === 'test' || !!process.env['VITEST'];\n const isStackBlitz = !!process.versions['webcontainer'];\n const pluginOptions = {\n tsconfigGetter: createTsConfigGetter(options.tsconfig),\n workspaceRoot:\n options.workspaceRoot ??\n process.env['NX_WORKSPACE_ROOT'] ??\n process.cwd(),\n inlineStylesExtension: options.inlineStylesExtension ?? 'css',\n jit: options.jit ?? isTest,\n liveReload: options.liveReload ?? true,\n disableTypeChecking: options.disableTypeChecking ?? true,\n supportedBrowsers: options.supportedBrowsers ?? ['safari 15'],\n fileReplacements: options.fileReplacements ?? [],\n include: options.include ?? [],\n isAstroIntegration: process.env['ANALOG_ASTRO'] === 'true',\n };\n let resolvedConfig: ResolvedConfig;\n let tsConfigResolutionContext: TsConfigResolutionContext | null = null;\n let watchMode = false;\n let stylePreprocessor: StylePreprocessor | undefined;\n let transformFilter: TransformFilter | undefined;\n let externalizeStylesRequested = false;\n\n // Persistent compilation instance — kept alive across rebuilds so Angular\n // can diff prior state and emit `templateUpdates` for HMR.\n let angularCompilation:\n | Awaited<ReturnType<typeof createAngularCompilationType>>\n | undefined;\n const sourceFileCache: SourceFileCacheType = new SourceFileCache();\n const outputFiles = new Map<string, EmitFileResult>();\n const classNames = new Map<string, string>();\n let stylesheetRegistry: AnalogStylesheetRegistry | undefined;\n let compilationLock = Promise.resolve();\n let pendingCompilation: Promise<void> | null = null;\n let initialCompilation = false;\n let viteServer: ViteDevServer | undefined;\n\n const tsconfigResolver = new TsconfigResolver({\n workspaceRoot: pluginOptions.workspaceRoot,\n include: pluginOptions.include,\n liveReload: pluginOptions.liveReload,\n isTest,\n });\n const isVitestVscode = !!process.env['VITEST_VSCODE'];\n let testWatchMode = isTestWatchMode();\n\n function hasViteHmrTransport(): boolean {\n return resolvedConfig ? resolvedConfig.server.hmr !== false : true;\n }\n\n function shouldEnableLiveReload(): boolean {\n const effectiveWatchMode = isTest ? testWatchMode : watchMode;\n return !!(\n effectiveWatchMode &&\n pluginOptions.liveReload &&\n hasViteHmrTransport()\n );\n }\n\n function shouldExternalizeStyles(): boolean {\n const effectiveWatchMode = isTest ? testWatchMode : watchMode;\n if (!effectiveWatchMode) return false;\n return !!(shouldEnableLiveReload() || externalizeStylesRequested);\n }\n\n function resolveTsConfigPath() {\n const tsconfigValue = pluginOptions.tsconfigGetter();\n return getTsConfigPath(\n tsConfigResolutionContext!.root,\n tsconfigValue,\n tsConfigResolutionContext!.isProd,\n isTest,\n tsConfigResolutionContext!.isLib,\n );\n }\n\n function resolveCompilationApiTsConfigPath(\n resolvedTsConfigPath: string,\n config: ResolvedConfig,\n ): string {\n const includedFiles = tsconfigResolver.ensureIncludeCache();\n const cached = tsconfigResolver.getCachedTsconfigOptions(\n resolvedTsConfigPath,\n config,\n );\n const expandedGraphRoots = tsconfigResolver.collectExpandedTsconfigRoots(\n resolvedTsConfigPath,\n config,\n );\n const mergedRootNames = union(\n cached.rootNames,\n expandedGraphRoots,\n includedFiles,\n ).map((file) => normalizePath(file));\n\n if (mergedRootNames.length === cached.rootNames.length) {\n return resolvedTsConfigPath;\n }\n\n const resolvedCacheDir = isAbsolute(config.cacheDir)\n ? config.cacheDir\n : resolve(config.root, config.cacheDir);\n const wrapperDir = join(\n resolvedCacheDir,\n 'analog-angular',\n 'compilation-api',\n );\n const rawTsconfig = (ts.readConfigFile(\n resolvedTsConfigPath,\n ts.sys.readFile,\n ).config ?? {}) as { references?: unknown[] };\n const wrapperPayload = {\n extends: normalizePath(resolvedTsConfigPath),\n files: [...mergedRootNames].sort(),\n ...(rawTsconfig.references ? { references: rawTsconfig.references } : {}),\n };\n const wrapperHash = createHash('sha1')\n .update(JSON.stringify(wrapperPayload))\n .digest('hex')\n .slice(0, 12);\n const wrapperPath = join(\n wrapperDir,\n `tsconfig.includes.${wrapperHash}.json`,\n );\n\n mkdirSync(wrapperDir, { recursive: true });\n if (!existsSync(wrapperPath)) {\n writeFileSync(\n wrapperPath,\n `${JSON.stringify(wrapperPayload, null, 2)}\\n`,\n 'utf-8',\n );\n }\n\n debugCompilationApi('generated include wrapper tsconfig', {\n originalTsconfig: resolvedTsConfigPath,\n wrapperTsconfig: wrapperPath,\n includeCount: includedFiles.length,\n rootNameCount: mergedRootNames.length,\n });\n\n return wrapperPath;\n }\n\n const normalizeEmitterLookupId = (file: string) => {\n const normalizedFile = normalizePath(file);\n if (!normalizedFile.startsWith('/@fs/')) return normalizedFile;\n const fsPath = normalizedFile\n .slice('/@fs'.length)\n .replace(/^\\/([A-Za-z]:\\/)/, '$1');\n return normalizePath(fsPath);\n };\n\n let outputFile: ((file: string) => void) | undefined;\n const fileEmitter = (file: string) => {\n const normalizedFile = normalizeEmitterLookupId(file);\n outputFile?.(normalizedFile);\n return outputFiles.get(normalizedFile);\n };\n\n async function performAngularCompilation(\n config: ResolvedConfig,\n ids?: string[],\n ) {\n const compilation = (angularCompilation ??= await (\n createAngularCompilation as typeof createAngularCompilationType\n )(!!pluginOptions.jit, false));\n const modifiedFiles = ids?.length\n ? new Set(ids.map((file) => normalizePath(file)))\n : undefined;\n if (modifiedFiles?.size) {\n sourceFileCache.invalidate(modifiedFiles);\n }\n if (modifiedFiles?.size && compilation.update) {\n debugCompilationApi('incremental update', {\n files: [...modifiedFiles],\n });\n await compilation.update(modifiedFiles);\n }\n\n const resolvedTsConfigPath = resolveTsConfigPath();\n const compilationApiTsConfigPath = resolveCompilationApiTsConfigPath(\n resolvedTsConfigPath,\n config,\n );\n debugEmit('compilation initialize', {\n resolvedTsConfigPath,\n compilationApiTsConfigPath,\n modifiedFileCount: modifiedFiles?.size ?? 0,\n });\n const compilationResult = await compilation.initialize(\n compilationApiTsConfigPath,\n {\n fileReplacements: toAngularCompilationFileReplacements(\n pluginOptions.fileReplacements,\n pluginOptions.workspaceRoot,\n ),\n modifiedFiles,\n async transformStylesheet(\n data: string,\n containingFile: string,\n resourceFile: string | null,\n order: number,\n className: string | null,\n ) {\n const filename =\n resourceFile ??\n containingFile.replace(\n '.ts',\n `.${pluginOptions.inlineStylesExtension}`,\n );\n\n const preprocessed = preprocessStylesheetResult(\n data,\n filename,\n stylePreprocessor,\n {\n filename,\n containingFile,\n resourceFile,\n className,\n order,\n inline: !resourceFile,\n },\n );\n\n if (shouldEnableLiveReload() && className && containingFile) {\n classNames.set(normalizePath(containingFile), className as string);\n }\n\n if (shouldExternalizeStyles()) {\n const stylesheetId = registerStylesheetContent(\n stylesheetRegistry!,\n {\n code: preprocessed.code,\n dependencies: normalizeStylesheetDependencies(\n preprocessed.dependencies,\n ),\n diagnostics: preprocessed.diagnostics,\n tags: preprocessed.tags,\n containingFile,\n className: className as string | undefined,\n order,\n inlineStylesExtension: pluginOptions.inlineStylesExtension,\n resourceFile: resourceFile ?? undefined,\n },\n );\n\n debugStyles('stylesheet deferred to Vite pipeline', {\n stylesheetId,\n resourceFile: resourceFile ?? '(inline)',\n });\n\n return stylesheetId;\n }\n\n debugStyles('stylesheet processed inline via preprocessCSS', {\n filename,\n resourceFile: resourceFile ?? '(inline)',\n dataLength: preprocessed.code.length,\n });\n\n let stylesheetResult;\n try {\n stylesheetResult = await preprocessCSS(\n preprocessed.code,\n `${filename}?direct`,\n resolvedConfig,\n );\n } catch (e) {\n debugStyles('preprocessCSS error', {\n filename,\n resourceFile: resourceFile ?? '(inline)',\n error: String(e),\n });\n }\n\n return stylesheetResult?.code || '';\n },\n processWebWorker(workerFile: string) {\n return workerFile;\n },\n },\n (tsCompilerOptions: Record<string, unknown>) => {\n if (shouldExternalizeStyles()) {\n tsCompilerOptions['externalRuntimeStyles'] = true;\n }\n\n if (shouldEnableLiveReload()) {\n tsCompilerOptions['_enableHmr'] = true;\n tsCompilerOptions['supportTestBed'] = true;\n }\n\n debugCompiler('tsCompilerOptions (compilation API)', {\n liveReload: pluginOptions.liveReload,\n viteHmr: hasViteHmrTransport(),\n externalizeStylesRequested,\n watchMode,\n shouldExternalize: shouldExternalizeStyles(),\n externalRuntimeStyles: !!tsCompilerOptions['externalRuntimeStyles'],\n hmrEnabled: !!tsCompilerOptions['_enableHmr'],\n });\n\n if (tsCompilerOptions['compilationMode'] === 'partial') {\n tsCompilerOptions['supportTestBed'] = true;\n tsCompilerOptions['supportJitMode'] = true;\n }\n\n if (!isTest && resolvedConfig.build?.lib) {\n tsCompilerOptions['declaration'] = true;\n tsCompilerOptions['declarationMap'] = watchMode;\n tsCompilerOptions['inlineSources'] = true;\n }\n\n if (isTest) {\n tsCompilerOptions['supportTestBed'] = true;\n }\n\n return tsCompilerOptions;\n },\n );\n\n // Preprocess external stylesheets for Tailwind CSS @reference\n debugStyles('external stylesheets from compilation API', {\n count: compilationResult.externalStylesheets?.size ?? 0,\n hasPreprocessor: !!stylePreprocessor,\n hasInlineMap: !!stylesheetRegistry,\n });\n const preprocessStats = { total: 0, injected: 0, skipped: 0, errors: 0 };\n for (const [key, value] of compilationResult.externalStylesheets ?? []) {\n preprocessStats.total++;\n const angularHash = `${value}.css`;\n stylesheetRegistry?.registerExternalRequest(angularHash, key);\n\n if (stylesheetRegistry && stylePreprocessor && existsSync(key)) {\n try {\n const rawCss = readFileSync(key, 'utf-8');\n const preprocessed = preprocessStylesheetResult(\n rawCss,\n key,\n stylePreprocessor,\n );\n const servedCss = rewriteRelativeCssImports(preprocessed.code, key);\n stylesheetRegistry.registerServedStylesheet(\n {\n publicId: angularHash,\n sourcePath: key,\n originalCode: rawCss,\n normalizedCode: servedCss,\n dependencies: normalizeStylesheetDependencies(\n preprocessed.dependencies,\n ),\n diagnostics: preprocessed.diagnostics,\n tags: preprocessed.tags,\n },\n [key, normalizePath(key), basename(key), key.replace(/^\\//, '')],\n );\n\n if (servedCss && servedCss !== rawCss) {\n preprocessStats.injected++;\n } else {\n preprocessStats.skipped++;\n }\n } catch (e) {\n preprocessStats.errors++;\n console.warn(\n `[@analogjs/vite-plugin-angular] failed to preprocess external stylesheet: ${key}: ${e}`,\n );\n }\n } else {\n preprocessStats.skipped++;\n }\n }\n debugStyles('external stylesheet preprocessing complete', preprocessStats);\n\n const diagnostics = await compilation.diagnoseFiles(\n pluginOptions.disableTypeChecking\n ? DiagnosticModes.All & ~DiagnosticModes.Semantic\n : DiagnosticModes.All,\n );\n\n const errors = diagnostics.errors?.length ? diagnostics.errors : [];\n const warnings = diagnostics.warnings?.length ? diagnostics.warnings : [];\n\n const templateUpdates = mapTemplateUpdatesToFiles(\n compilationResult.templateUpdates,\n );\n if (templateUpdates.size > 0) {\n debugHmr('compilation API template updates', {\n count: templateUpdates.size,\n files: [...templateUpdates.keys()],\n });\n }\n\n const affectedFiles = await compilation.emitAffectedFiles();\n debugEmit('emitAffectedFiles summary', {\n count: affectedFiles.length,\n templateUpdateCount: templateUpdates.size,\n knownOutputCountBefore: outputFiles.size,\n });\n\n for (const file of affectedFiles) {\n const normalizedFilename = normalizePath(file.filename);\n const templateUpdate = templateUpdates.get(normalizedFilename);\n\n if (templateUpdate) {\n classNames.set(normalizedFilename, templateUpdate.className);\n }\n\n outputFiles.set(normalizedFilename, {\n content: file.contents,\n dependencies: [],\n errors: errors.map((error: { text?: string }) => error.text || ''),\n warnings: warnings.map(\n (warning: { text?: string }) => warning.text || '',\n ),\n hmrUpdateCode: templateUpdate?.code,\n hmrEligible: !!templateUpdate?.code,\n });\n }\n }\n\n async function performCompilation(config: ResolvedConfig, ids?: string[]) {\n let resolve: (() => unknown) | undefined;\n const previousLock = compilationLock;\n compilationLock = new Promise<void>((r) => {\n resolve = r;\n });\n try {\n await previousLock;\n const integrations = await discoverAnalogIntegrations(config);\n stylePreprocessor = integrations.stylePreprocessor;\n transformFilter = integrations.transformFilter;\n tsconfigResolver.setIntegrationIncludes(integrations.include);\n externalizeStylesRequested = integrations.externalizeStyles;\n await performAngularCompilation(config, ids);\n } finally {\n resolve!();\n }\n }\n\n function isComponentStyleSheet(id: string): boolean {\n return id.includes('ngcomp=');\n }\n\n function getFilenameFromPath(id: string): string {\n try {\n return new URL(id, 'http://localhost').pathname.replace(/^\\//, '');\n } catch {\n const queryIndex = id.indexOf('?');\n const pathname = queryIndex >= 0 ? id.slice(0, queryIndex) : id;\n return pathname.replace(/^\\//, '');\n }\n }\n\n function sendHMRComponentUpdate(server: ViteDevServer, id: string) {\n debugHmrV('ws send: angular component update', {\n id,\n timestamp: Date.now(),\n });\n server.ws.send('angular:component-update', {\n id: encodeURIComponent(id),\n timestamp: Date.now(),\n });\n classNames.delete(id);\n }\n\n const compilerPlugin: Plugin = {\n name: '@analogjs/vite-plugin-angular-compilation-api',\n enforce: 'pre' as const,\n async config(config, { command }) {\n activateDeferredDebug(command);\n watchMode = command === 'serve';\n const isProd =\n config.mode === 'production' ||\n process.env['NODE_ENV'] === 'production';\n\n tsConfigResolutionContext = {\n root: config.root || '.',\n isProd,\n isLib: !!config?.build?.lib,\n };\n\n debugCompilationApi('enabled (Angular %s)', angularFullVersion);\n\n // Angular Compilation API handles TypeScript transforms — disable\n // esbuild/oxc so they don't compete.\n debugCompilationApi('esbuild/oxc disabled, Angular handles transforms');\n\n // The compilation API owns user-source transforms, but deps\n // optimization still bundles partial-compiled Angular libs from\n // node_modules (`ɵɵngDeclareInjectable/Factory`). Without the\n // linker plugin, those declarations reach the browser unprocessed\n // and Angular tries to JIT-compile them at runtime. Mirror the\n // deps-optimizer wiring from `angular-vite-plugin.ts` so the\n // linker runs on `.[cm]?js` deps under both rolldown and esbuild.\n const useRolldown = isRolldown();\n const preliminaryTsConfigPath = resolveTsConfigPath();\n const compilerPluginOptions = {\n tsconfig: preliminaryTsConfigPath,\n sourcemap: !isProd,\n advancedOptimizations: isProd,\n jit: pluginOptions.jit,\n incremental: watchMode,\n };\n\n // No `resolve.conditions` extension here: the `style` condition is\n // scoped to `.css`-extension requests by\n // `cssExtensionStyleResolverPlugin`, registered once at the\n // `angularCompilationPlugin()` factory level. Adding `style` globally caused\n // Tailwind v4's JS plugin resolver to pick the `style` exports of\n // packages such as `tailwindcss-primeui`, which then crashed Node's\n // ESM loader when it tried to import the resulting `.css` file.\n return {\n esbuild: undefined,\n oxc: undefined,\n optimizeDeps: {\n include: ['rxjs/operators', 'rxjs', 'tslib'],\n exclude: ['@angular/platform-server'],\n ...(useRolldown\n ? {\n rolldownOptions: {\n plugins: [\n createRolldownCompilerPlugin(\n compilerPluginOptions,\n !pluginOptions.isAstroIntegration,\n ),\n ],\n },\n }\n : {\n esbuildOptions: {\n plugins: [\n createCompilerPlugin(\n compilerPluginOptions,\n isTest,\n !pluginOptions.isAstroIntegration,\n ),\n ],\n },\n }),\n },\n };\n },\n async configResolved(config) {\n resolvedConfig = config;\n\n stylesheetRegistry = new AnalogStylesheetRegistry();\n const integrations = await discoverAnalogIntegrations(config);\n integrations.configureStylesheetRegistry?.(stylesheetRegistry, {\n workspaceRoot: pluginOptions.workspaceRoot,\n });\n debugStyles('stylesheet registry initialized (Angular Compilation API)');\n\n if (isTest) {\n testWatchMode =\n !(config.server.watch === null) ||\n (config as any).test?.watch === true ||\n testWatchMode;\n }\n },\n configureServer(server) {\n viteServer = server;\n\n const invalidateCompilation = async () => {\n tsconfigResolver.invalidateAll();\n await performCompilation(resolvedConfig);\n };\n server.watcher.on('add', invalidateCompilation);\n server.watcher.on('unlink', invalidateCompilation);\n server.watcher.on('change', (file) => {\n if (file.includes('tsconfig')) {\n tsconfigResolver.invalidateTsconfigCaches();\n }\n });\n },\n async buildStart() {\n if (!isVitestVscode) {\n pendingCompilation = performCompilation(resolvedConfig);\n await pendingCompilation;\n pendingCompilation = null;\n initialCompilation = true;\n }\n },\n async handleHotUpdate(ctx) {\n if (isIgnoredHmrFile(ctx.file)) {\n debugHmr('ignored file change', { file: ctx.file });\n return [];\n }\n\n if (TS_EXT_REGEX.test(ctx.file)) {\n const [fileId] = ctx.file.split('?');\n debugHmr('TS file changed', { file: ctx.file, fileId });\n\n pendingCompilation = performCompilation(resolvedConfig, [fileId]);\n\n let result;\n\n if (shouldEnableLiveReload()) {\n await pendingCompilation;\n pendingCompilation = null;\n result = fileEmitter(fileId);\n debugHmr('TS file emitted', {\n fileId,\n hmrEligible: !!result?.hmrEligible,\n hasClassName: !!classNames.get(fileId),\n });\n }\n\n if (\n shouldEnableLiveReload() &&\n result?.hmrEligible &&\n classNames.get(fileId)\n ) {\n const relativeFileId = `${normalizePath(\n relative(process.cwd(), fileId),\n )}@${classNames.get(fileId)}`;\n\n debugHmr('sending component update', { relativeFileId });\n sendHMRComponentUpdate(ctx.server, relativeFileId);\n\n return ctx.modules.map((mod) => {\n if (mod.id === ctx.file) {\n mod.isSelfAccepting = true;\n }\n return mod;\n });\n }\n }\n\n if (/\\.(html|htm)$/.test(ctx.file)) {\n debugHmr('template file changed', { file: ctx.file });\n // Recompile to pick up template changes\n pendingCompilation = performCompilation(resolvedConfig);\n }\n\n if (/\\.(css|less|sass|scss)$/.test(ctx.file)) {\n debugHmr('stylesheet file changed', { file: ctx.file });\n refreshStylesheetRegistryForFile(\n ctx.file,\n stylesheetRegistry,\n stylePreprocessor,\n );\n }\n\n return ctx.modules;\n },\n resolveId(id) {\n // Map angular component stylesheets\n if (isComponentStyleSheet(id)) {\n const filename = getFilenameFromPath(id);\n const search = new URL(id, 'http://localhost').search;\n const servedSourcePath =\n stylesheetRegistry?.getServedSourcePath(filename);\n\n if (servedSourcePath) {\n debugStylesV('resolveId: mapped served stylesheet to source', {\n filename,\n resolvedPath: servedSourcePath,\n });\n return servedSourcePath + search;\n }\n\n if (stylesheetRegistry?.hasServed(filename)) {\n return id;\n }\n\n const componentStyles =\n stylesheetRegistry?.resolveExternalSource(filename);\n if (componentStyles) {\n return componentStyles + new URL(id, 'http://localhost').search;\n }\n }\n\n return undefined;\n },\n async load(id) {\n // Virtual raw ids back JIT-emitted templateUrl/styleUrl imports.\n // virtual-modules-plugin resolves them; this plugin is the active\n // compilation plugin in compilation-API mode, so load must read the\n // backing file (jit=true is the test-mode default).\n const rawModule = await loadVirtualRawModule(this, id);\n if (rawModule !== undefined) return rawModule;\n\n // Serve component stylesheets from registry\n if (isComponentStyleSheet(id)) {\n const filename = getFilenameFromPath(id);\n const componentStyles = stylesheetRegistry?.getServedContent(filename);\n if (componentStyles) {\n stylesheetRegistry?.registerActiveRequest(id);\n return componentStyles;\n }\n }\n\n return;\n },\n transform: {\n filter: {\n id: {\n include: [TS_EXT_REGEX],\n exclude: [\n /node_modules/,\n 'type=script',\n '@ng/component',\n /[?&]raw\\b/,\n ],\n },\n },\n async handler(code, id) {\n if (/[?&]raw\\b/.test(id)) return;\n if (transformFilter && !transformFilter(code, id)) {\n return;\n }\n\n // Angular emits every file in the program, not only files with\n // Angular decorators, and `@analogjs/platform` excludes `.ts` from\n // Vite's own transform. So serve Angular's output for any emitted\n // file; only the \"not emitted\" warning below is decorator-specific.\n const isAngular =\n /(Component|Directive|Pipe|Injectable|NgModule)\\(/.test(code);\n\n if (id.includes('.ts?')) {\n id = id.replace(/\\?(.*)/, '');\n }\n\n if (isTest) {\n if (isVitestVscode && !initialCompilation) {\n pendingCompilation = performCompilation(resolvedConfig);\n initialCompilation = true;\n }\n\n const tsMod = viteServer?.moduleGraph.getModuleById(id);\n if (tsMod) {\n const invalidated = tsMod.lastInvalidationTimestamp;\n if (testWatchMode && invalidated) {\n pendingCompilation = performCompilation(resolvedConfig, [id]);\n }\n }\n }\n\n if (pendingCompilation) {\n await pendingCompilation;\n pendingCompilation = null;\n }\n\n const typescriptResult = fileEmitter(id);\n if (!typescriptResult) {\n debugCompilationApi('transform skip (file not emitted)', { id });\n if (isAngular) {\n this.warn(\n `[@analogjs/vite-plugin-angular]: \"${id}\" contains Angular decorators but is not in the TypeScript program. ` +\n `Ensure it is included in your tsconfig.`,\n );\n }\n return;\n }\n\n if (typescriptResult.warnings && typescriptResult.warnings.length > 0) {\n this.warn(`${typescriptResult.warnings.join('\\n')}`);\n }\n\n if (typescriptResult.errors && typescriptResult.errors.length > 0) {\n this.error(`${typescriptResult.errors.join('\\n')}`);\n }\n\n let data = typescriptResult.content ?? '';\n\n // Re-inject @vite-ignore for Angular HMR dynamic imports\n if (data.includes('HmrLoad')) {\n const hasMetaUrl = data.includes('getReplaceMetadataURL');\n if (hasMetaUrl) {\n data = injectViteIgnoreForHmrMetadata(data);\n }\n }\n\n return {\n code: data,\n map: null,\n };\n },\n },\n async closeBundle() {\n await compilationLock;\n await angularCompilation?.close?.();\n angularCompilation = undefined;\n outputFiles.clear();\n classNames.clear();\n sourceFileCache.clear();\n tsconfigResolver.invalidateAll();\n stylesheetRegistry = undefined;\n pendingCompilation = null;\n initialCompilation = false;\n },\n };\n\n return [\n cssExtensionStyleResolverPlugin(),\n replaceFiles(pluginOptions.fileReplacements, pluginOptions.workspaceRoot),\n virtualModulesPlugin({ jit: pluginOptions.jit }),\n compilerPlugin,\n pluginOptions.liveReload && liveReloadPlugin({ classNames, fileEmitter }),\n ...(isTest && !isStackBlitz\n ? angularVitestPlugins((id) => outputFiles.get(normalizePath(id))?.map)\n : []),\n pluginOptions.jit &&\n jitPlugin({ inlineStylesExtension: pluginOptions.inlineStylesExtension }),\n buildOptimizerPlugin({\n supportedBrowsers: pluginOptions.supportedBrowsers,\n jit: pluginOptions.jit,\n }),\n routerPlugin(),\n nxFolderPlugin(),\n encapsulationPlugin(),\n ].filter(Boolean) as Plugin[];\n}\n"],"mappings":"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"}
|
|
@@ -533,7 +533,7 @@ function compile(sourceCode, fileName, optionsOrRegistry) {
|
|
|
533
533
|
type: classRef,
|
|
534
534
|
typeArgumentCount: 0,
|
|
535
535
|
providedIn: {
|
|
536
|
-
expression: new o.LiteralExpr(meta.providedIn
|
|
536
|
+
expression: new o.LiteralExpr(meta.providedIn ?? null),
|
|
537
537
|
forwardRef: 0
|
|
538
538
|
}
|
|
539
539
|
};
|