From ae04410258864734b7603132f1b9dc563edd378f Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Sat, 11 Apr 2026 23:21:22 +0100 Subject: [PATCH 1/2] chore: v5 watch / build improvements --- cspell-wordlist.txt | 3 +- packages/core/package.json | 2 +- packages/core/src/compiler/build/build.ts | 39 +- .../core/src/compiler/build/compiler-ctx.ts | 16 + .../core/src/compiler/build/watch-build.ts | 97 ++--- .../compiler/bundle/ext-transforms-plugin.ts | 36 +- .../src/compiler/bundle/typescript-plugin.ts | 23 +- .../compiler/config/outputs/validate-dist.ts | 13 +- .../src/compiler/fs-watch/fs-watch-rebuild.ts | 31 +- .../dist-hydrate-script/index.ts | 7 + .../core/src/compiler/output-targets/index.ts | 63 ++- .../compiler/output-targets/output-custom.ts | 8 + .../src/compiler/transpile/run-program.ts | 65 +-- .../core/src/declarations/stencil-private.ts | 13 + packages/core/src/testing/mocks.ts | 2 + pnpm-lock.yaml | 389 +++++++++--------- pnpm-workspace.yaml | 2 +- 17 files changed, 449 insertions(+), 360 deletions(-) diff --git a/cspell-wordlist.txt b/cspell-wordlist.txt index e8cf1925ce1..f77774421d7 100644 --- a/cspell-wordlist.txt +++ b/cspell-wordlist.txt @@ -168,4 +168,5 @@ jsxmode jsxdev jsxs labelable -lightningcss \ No newline at end of file +lightningcss +cooldown \ No newline at end of file diff --git a/packages/core/package.json b/packages/core/package.json index 8d6feb49583..e08f8a2bd94 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -113,7 +113,7 @@ "postcss-safe-parser": "^7.0.1", "postcss-selector-parser": "^7.1.1", "resolve": "^1.22.0", - "rolldown": "^1.0.0-rc.13", + "rolldown": "^1.0.0-rc.15", "semver": "^7.7.4", "terser": "5.37.0", "typescript": "catalog:" diff --git a/packages/core/src/compiler/build/build.ts b/packages/core/src/compiler/build/build.ts index 512bfbb4918..5ded204010c 100644 --- a/packages/core/src/compiler/build/build.ts +++ b/packages/core/src/compiler/build/build.ts @@ -44,21 +44,32 @@ export const build = async ( tsTimeSpan.finish('transpile finished'); if (buildCtx.hasError) return buildAbort(buildCtx); - // generate types and validate AFTER components.d.ts is written - const { hasTypesChanged, needsRebuild } = await validateTypesAfterGeneration( - config, - compilerCtx, - buildCtx, - tsBuilder, - emittedDts, - ); - if (buildCtx.hasError) return buildAbort(buildCtx); + // If TS emitted nothing, the "script change" was a phantom duplicate event — clear the flag + // so type validation and bundling are skipped. + if (buildCtx.isRebuild && buildCtx.hasScriptChanges && compilerCtx.changedModules.size === 0) { + buildCtx.hasScriptChanges = false; + } + + // Skip type validation on rebuilds with no script changes — the type graph is unchanged. + const skipTypeValidation = buildCtx.isRebuild && !buildCtx.hasScriptChanges; - if (needsRebuild || (config.watch && hasTypesChanged)) { - // Abort and signal that a rebuild is needed: - // - needsRebuild: components.d.ts was just generated, need fresh TS program - // - watch mode with types changed: let watch trigger rebuild - return null; + if (!skipTypeValidation) { + const { needsRebuild } = await validateTypesAfterGeneration( + config, + compilerCtx, + buildCtx, + tsBuilder, + emittedDts, + ); + if (buildCtx.hasError) return buildAbort(buildCtx); + + if (needsRebuild) { + // components.d.ts was just created; the current TS program lacks it. + // Return null so watch-build restarts with a fresh program. + return null; + } + // types changed but no restart needed — components.d.ts is watch-ignored + // to prevent cascade rebuilds, so just continue with the current build. } // preprocess and generate styles before any outputTarget starts diff --git a/packages/core/src/compiler/build/compiler-ctx.ts b/packages/core/src/compiler/build/compiler-ctx.ts index a3d9140ae30..e6513300cfb 100644 --- a/packages/core/src/compiler/build/compiler-ctx.ts +++ b/packages/core/src/compiler/build/compiler-ctx.ts @@ -40,6 +40,22 @@ export class CompilerContext implements d.CompilerCtx { rolldownCacheLazy: any = null; rolldownCacheNative: any = null; cssTransformCache = new Map(); + /** + * Cross-build cache for {@link ts.transpileModule} results. + * Keyed by `"${bundleId}:${normalizedFilePath}"`. Unlike the per-instance + * cache inside typescriptPlugin (which only survives one rolldown build), + * this persists across watch rebuilds so only files that actually changed + * (i.e. appear in {@link changedModules}) need to be re-transpiled. + */ + transpileCache = new Map(); + /** + * Cross-build cache of the last style text pushed to the HMR client for + * each component scope (keyed by getScopeId result: "tag$mode"). Used by + * extTransformsPlugin to skip pushing unchanged styles to buildCtx.stylesUpdated, + * preventing the browser from re-injecting all 90+ component styles on every + * rebuild even when only one component's TS file changed. + */ + prevStylesMap = new Map(); cachedGlobalStyle: string; styleModeNames = new Set(); worker: d.CompilerWorkerContext = null; diff --git a/packages/core/src/compiler/build/watch-build.ts b/packages/core/src/compiler/build/watch-build.ts index 35948976006..236b707003e 100644 --- a/packages/core/src/compiler/build/watch-build.ts +++ b/packages/core/src/compiler/build/watch-build.ts @@ -47,37 +47,45 @@ export const createWatchBuild = async ( const filesUpdated = new Set(); const filesDeleted = new Set(); - // Track TypeScript files that need cache invalidation + // TS files that need cache invalidation before the next rebuild const tsFilesToInvalidate = new Set(); - // Debounce rebuild calls to handle duplicate events from multiple watchers + // Debounce timer — multiple watchers can fire for the same change let rebuildTimeout: ReturnType | null = null; - /** - * Trigger a rebuild of the project. - * Invalidates changed TypeScript files in the compiler cache, then rebuilds. - */ + // Suppress FSEvents double-events (the same save can fire twice ~200-500ms apart), + // outside the 10ms debounce window. Drop events for files built within the cooldown period. + const recentlyBuiltFiles = new Set(); + let lastBuildFinishedAt = 0; + const DUPLICATE_EVENT_COOLDOWN_MS = 1500; + + // Files the active build was triggered by; mid-build duplicates for these are dropped. + const currentlyBuildingFiles = new Set(); + + /** Trigger a rebuild, invalidating changed TS files first. */ const triggerRebuild = async () => { if (isBuilding) { - // If already building, schedule another rebuild after current one finishes rebuildTimeout = setTimeout(triggerRebuild, 50); return; } isBuilding = true; try { - // Invalidate TypeScript cache for changed files if (tsFilesToInvalidate.size > 0) { incrementalCompiler.invalidateFiles(Array.from(tsFilesToInvalidate)); tsFilesToInvalidate.clear(); } - // Rebuild TypeScript program (incremental - only changed files re-emit) - const tsBuilder = incrementalCompiler.rebuild(); + // Snapshot pending files so mid-build duplicates can be suppressed in onFsChange. + currentlyBuildingFiles.clear(); + filesAdded.forEach((f) => currentlyBuildingFiles.add(f)); + filesUpdated.forEach((f) => currentlyBuildingFiles.add(f)); + filesDeleted.forEach((f) => currentlyBuildingFiles.add(f)); - // Run the Stencil build + const tsBuilder = incrementalCompiler.rebuild(); await onBuild(tsBuilder); } finally { + currentlyBuildingFiles.clear(); isBuilding = false; } }; @@ -121,9 +129,7 @@ export const createWatchBuild = async ( ); } - // Make sure all files in the module map are still in the fs - // Otherwise, we can run into build errors because the compiler can think - // there are two component files with the same tag name + // Remove stale module map entries to prevent duplicate-tag build errors Array.from(compilerCtx.moduleMap.keys()).forEach((key) => { if (filesUpdated.has(key) || filesDeleted.has(key)) { // Check if the file exists in the fs @@ -134,7 +140,7 @@ export const createWatchBuild = async ( } }); - // Make sure all added/updated files are watched + // Ensure newly added/updated files are watched new Set([...filesUpdated, ...filesAdded]).forEach((filePath) => { compilerCtx.addWatchFile(filePath); }); @@ -148,63 +154,40 @@ export const createWatchBuild = async ( emitFsChange(compilerCtx, buildCtx); buildCtx.start(); - - // Rebuild the project const result = await build(config, compilerCtx, buildCtx, tsBuilder); if (result && !result.hasError) { isRebuild = true; } + + // Record consumed files so late-arriving OS duplicates are suppressed. + recentlyBuiltFiles.clear(); + buildCtx.filesChanged.forEach((f) => recentlyBuiltFiles.add(f)); + lastBuildFinishedAt = Date.now(); }; /** - * Utility method for formatting a debug message that must either list a number of files, or the word 'none' if the - * provided list is empty - * - * @param files a list of files, the list may be empty - * @returns the provided list if it is not empty. otherwise, return the word 'none' + * Returns files as a prefixed list, or 'none' if empty. + * No space before the filename — the logger wraps on whitespace. + * @param files the list of files to format for debug output + * @returns the formatted string for debug output */ const formatFilesForDebug = (files: ReadonlyArray): string => { - /** - * In the created message, it's important that there's no whitespace prior to the file name. - * Stencil's logger will split messages by whitespace according to the width of the terminal window. - * Since file names can be fully qualified paths (and therefore quite long), putting whitespace between a '-' and - * the path can lead to formatted messages where the '-' is on its own line - */ return files.length > 0 ? files.map((filename: string) => `-${filename}`).join('\n') : 'none'; }; /** - * Utility method to start/construct the watch program. This will mark - * all relevant files to be watched and then do the initial build. - * - * @returns A promise that resolves when the watcher is closed. + * Start watchers for all relevant directories and run the initial build. + * @returns a promise that resolves when the watch program is closed. */ const start = async () => { - /** - * Stencil watches the following directories for changes: - */ await Promise.all([ - /** - * the `srcDir` directory, e.g. component files - */ watchFiles(compilerCtx, config.srcDir), - /** - * the root directory, e.g. `stencil.config.ts` - */ - watchFiles(compilerCtx, config.rootDir, { - recursive: false, - }), - /** - * the external directories, defined in `watchExternalDirs`, e.g. `node_modules` - */ + watchFiles(compilerCtx, config.rootDir, { recursive: false }), ...(config.watchExternalDirs || []).map((dir) => watchFiles(compilerCtx, dir)), ]); - // Create the incremental TypeScript compiler incrementalCompiler = new IncrementalCompiler(config); - - // Initial build const tsBuilder = incrementalCompiler.rebuild(); await onBuild(tsBuilder); @@ -232,6 +215,18 @@ export const createWatchBuild = async ( */ const onFsChange: d.CompilerFileWatcherCallback = (filePath, eventKind) => { if (incrementalCompiler && !isWatchIgnorePath(config, filePath)) { + // Drop duplicate OS events: same file within cooldown window, or mid-build duplicate. + const isDuplicateOfRecentBuild = + recentlyBuiltFiles.has(filePath) && + Date.now() - lastBuildFinishedAt < DUPLICATE_EVENT_COOLDOWN_MS; + const isDuplicateMidBuild = isBuilding && currentlyBuildingFiles.has(filePath); + if (isDuplicateOfRecentBuild || isDuplicateMidBuild) { + config.logger.debug( + `WATCH_BUILD::fs_event_change suppressed duplicate - type=${eventKind}, path=${filePath}`, + ); + return; + } + updateCompilerCtxCache(config, compilerCtx, filePath, eventKind); switch (eventKind) { @@ -252,7 +247,6 @@ export const createWatchBuild = async ( break; } - // Track TypeScript files for cache invalidation if (filePath.endsWith('.ts') || filePath.endsWith('.tsx')) { tsFilesToInvalidate.add(filePath); } @@ -261,7 +255,6 @@ export const createWatchBuild = async ( `WATCH_BUILD::fs_event_change - type=${eventKind}, path=${filePath}, time=${new Date().getTime()}`, ); - // Debounce rebuild calls - multiple watchers may fire for the same change if (rebuildTimeout) { clearTimeout(rebuildTimeout); } diff --git a/packages/core/src/compiler/bundle/ext-transforms-plugin.ts b/packages/core/src/compiler/bundle/ext-transforms-plugin.ts index 3e772cff3c3..8e2bd6b49b7 100644 --- a/packages/core/src/compiler/bundle/ext-transforms-plugin.ts +++ b/packages/core/src/compiler/bundle/ext-transforms-plugin.ts @@ -243,19 +243,13 @@ export const extTransformsPlugin = ( this.error('Plugin CSS transform error'); } - const hasUpdatedStyle = buildCtx.stylesUpdated.some((s) => { - return ( - s.styleTag === data.tag && - s.styleMode === data.mode && - s.styleText === cacheEntry.cssTransformOutput.styleText - ); - }); - /** * if the style has updated, compose all styles for the component */ - if (!hasUpdatedStyle && data.tag && data.mode) { - const externalStyles = cmp?.styles?.[0]?.externalStyles; + if (data.tag && data.mode) { + // Find the style entry for the current mode (not always styles[0] which is the default mode). + const currentModeStyle = cmp?.styles?.find((s) => s.modeName === data.mode); + const externalStyles = currentModeStyle?.externalStyles; /** * if component has external styles, use a list to keep the order to which @@ -285,11 +279,23 @@ export const extTransformsPlugin = ( */ cacheEntry.cssTransformOutput.styleText; - buildCtx.stylesUpdated.push({ - styleTag: data.tag, - styleMode: data.mode, - styleText, - }); + // Only push to stylesUpdated if the CSS actually changed since the + // last build. Without this check, every rebuild re-pushes all 90+ + // component stylesheets even when only a .tsx file changed, causing + // the HMR client to re-inject every style on every save. + const scopeId = getScopeId(data.tag, data.mode); + const prevText = compilerCtx.prevStylesMap.get(scopeId); + const alreadyQueued = buildCtx.stylesUpdated.some( + (s) => s.styleTag === data.tag && s.styleMode === data.mode, + ); + if (!alreadyQueued && styleText !== prevText) { + compilerCtx.prevStylesMap.set(scopeId, styleText); + buildCtx.stylesUpdated.push({ + styleTag: data.tag, + styleMode: data.mode, + styleText, + }); + } } return { diff --git a/packages/core/src/compiler/bundle/typescript-plugin.ts b/packages/core/src/compiler/bundle/typescript-plugin.ts index 9816b011bac..79eadc1ddb3 100644 --- a/packages/core/src/compiler/bundle/typescript-plugin.ts +++ b/packages/core/src/compiler/bundle/typescript-plugin.ts @@ -19,18 +19,8 @@ export const typescriptPlugin = ( bundleOpts: BundleOptions, config: d.ValidatedConfig, ): Plugin => { - /** - * Cache the result of `ts.transpileModule` for a given file, keyed by the - * normalized file path. Rolldown re-runs the `transform` hook for every - * `.generate()` call on the same build object (once per output format: - * esm-browser, esm, cjs), so without this cache a 220-component project - * would call `ts.transpileModule` 660 times; with it, only 220. - * - * The cache is intentionally scoped to this plugin instance (one per - * `bundleOutput` call) so it is automatically discarded when the Rolldown - * build object is garbage-collected — no manual invalidation required. - */ - const transformCache = new Map(); + // Cache key prefix per bundle type so different transformer pipelines don't share entries. + const cachePrefix = bundleOpts.id + ':'; let cacheHits = 0; let cacheMisses = 0; @@ -81,10 +71,9 @@ export const typescriptPlugin = ( const fsFilePath = normalizeFsPath(id); const mod = getModule(compilerCtx, fsFilePath); if (mod?.cmps) { - // Return cached transpile result if available. Rolldown calls this - // hook once per file per .generate() invocation, so subsequent - // format variants (esm, cjs, …) get the result for free. - const cached = transformCache.get(fsFilePath); + // Cross-build cache: survives rolldown teardown; evicted per changedModules in output-targets/index.ts. + const cacheKey = cachePrefix + fsFilePath; + const cached = compilerCtx.transpileCache.get(cacheKey); if (cached) { cacheHits++; const sourceMap: d.SourceMap = cached.sourceMapText @@ -101,7 +90,7 @@ export const typescriptPlugin = ( before: bundleOpts.customBeforeTransformers ?? [], }, }); - transformCache.set(fsFilePath, { + compilerCtx.transpileCache.set(cacheKey, { outputText: tsResult.outputText, sourceMapText: tsResult.sourceMapText ?? null, }); diff --git a/packages/core/src/compiler/config/outputs/validate-dist.ts b/packages/core/src/compiler/config/outputs/validate-dist.ts index fecfcaff835..d4ce146671b 100644 --- a/packages/core/src/compiler/config/outputs/validate-dist.ts +++ b/packages/core/src/compiler/config/outputs/validate-dist.ts @@ -60,13 +60,14 @@ export const validateDist = ( file: join(lazyDir, `${config.fsNamespace}.css`), }); - outputs.push({ - type: DIST_TYPES, - dir: distOutputTarget.dir, - typesDir: distOutputTarget.typesDir, - }); - if (config.buildDist) { + // dist-types is only useful when building a distributable; in dev mode + // (buildDist=false) it would trigger redundant generateAppTypes calls. + outputs.push({ + type: DIST_TYPES, + dir: distOutputTarget.dir, + typesDir: distOutputTarget.typesDir, + }); if (distOutputTarget.collectionDir) { outputs.push({ type: DIST_COLLECTION, diff --git a/packages/core/src/compiler/fs-watch/fs-watch-rebuild.ts b/packages/core/src/compiler/fs-watch/fs-watch-rebuild.ts index c89230a832a..ea372c5ed70 100644 --- a/packages/core/src/compiler/fs-watch/fs-watch-rebuild.ts +++ b/packages/core/src/compiler/fs-watch/fs-watch-rebuild.ts @@ -2,6 +2,7 @@ import { basename } from 'path'; import type * as d from '@stencil/core'; import { + getComponentsDtsSrcFilePath, isOutputTargetDocsJson, isOutputTargetDocsVscode, isOutputTargetStats, @@ -109,27 +110,17 @@ export const hasStyleChanges = (buildCtx: d.BuildCtx): boolean => buildCtx.filesChanged.some(hasStyleExt); /** - * Check whether a build has html changes - * - * @param config the current config - * @param buildCtx the build context - * @returns whether or not HTML files were changed + * Returns true if any HTML file under `srcDir` changed. + * HTML outside srcDir (e.g. test fixtures) has no effect on compiled output. + * @param config the Stencil configuration + * @param buildCtx the current build context + * @returns whether or not there are HTML changes under srcDir */ export const hasHtmlChanges = (config: d.ValidatedConfig, buildCtx: d.BuildCtx): boolean => { - const anyHtmlChanged = buildCtx.filesChanged.some((f) => f.toLowerCase().endsWith('.html')); - - if (anyHtmlChanged) { - // any *.html in any directory that changes counts and rebuilds - return true; - } - - const srcIndexHtmlChanged = buildCtx.filesChanged.some((fileChanged) => { - // the src index index.html file has changed - // this file name could be something other than index.html - return fileChanged === config.srcIndexHtml; - }); - - return srcIndexHtmlChanged; + const srcDirPrefix = config.srcDir + '/'; + return buildCtx.filesChanged.some( + (f) => f.toLowerCase().endsWith('.html') && f.startsWith(srcDirPrefix), + ); }; /** @@ -150,6 +141,8 @@ export const isWatchIgnorePath = (config: d.ValidatedConfig, path: string) => { } const outputTargets = config.outputTargets; const ignoreFiles = [ + // Ignore components.d.ts — its disk write would cascade-rebuild all components. + getComponentsDtsSrcFilePath(config), ...outputTargets.filter(isOutputTargetDocsJson).map((o) => o.file), ...outputTargets.filter(isOutputTargetDocsJson).map((o) => o.typesFile), ...outputTargets.filter(isOutputTargetStats).map((o) => o.file), diff --git a/packages/core/src/compiler/output-targets/dist-hydrate-script/index.ts b/packages/core/src/compiler/output-targets/dist-hydrate-script/index.ts index 1cee46bc35a..90aaf377687 100644 --- a/packages/core/src/compiler/output-targets/dist-hydrate-script/index.ts +++ b/packages/core/src/compiler/output-targets/dist-hydrate-script/index.ts @@ -8,6 +8,13 @@ export const outputHydrateScript = async ( compilerCtx: d.CompilerCtx, buildCtx: d.BuildCtx, ) => { + // The hydrate app is a server-side rendering artifact. In dev mode it is + // only needed when `devServer.ssr` is explicitly enabled. Skip it otherwise + // to avoid a full extra rolldown build on every dev-mode startup. + if (config.devMode && !config.devServer?.ssr) { + return; + } + const hydrateOutputTargets = config.outputTargets.filter(isOutputTargetHydrate); if (hydrateOutputTargets.length > 0) { const timespan = buildCtx.createTimeSpan(`generate hydrate app started`); diff --git a/packages/core/src/compiler/output-targets/index.ts b/packages/core/src/compiler/output-targets/index.ts index 1aae25ba507..d12e099995f 100644 --- a/packages/core/src/compiler/output-targets/index.ts +++ b/packages/core/src/compiler/output-targets/index.ts @@ -22,16 +22,58 @@ export const generateOutputTargets = async ( .map((filename) => compilerCtx.moduleMap.get(filename)) .filter((mod) => mod && !mod.isCollectionDependency); + // Evict transpile cache entries for re-emitted modules (keys are "bundleId:filePath"). + // Must run before changedModules.clear(). + if (compilerCtx.changedModules.size > 0) { + for (const [key] of compilerCtx.transpileCache) { + const colon = key.indexOf(':'); + if (colon !== -1 && compilerCtx.changedModules.has(key.slice(colon + 1))) { + compilerCtx.transpileCache.delete(key); + } + } + } + + // Evict CSS transform cache entries for changed style files. + // Keys are the annotated import path e.g. "/path/foo.scss?tag=ion-foo&mode=md&…". + // Two cases: + // 1. The entry file itself changed (key base path matches). + // 2. A SASS @import/@use dependency changed (in pluginTransformDependencies). + if (buildCtx.hasStyleChanges && buildCtx.filesChanged.length > 0) { + const changedStyleFiles = new Set(buildCtx.filesChanged); + for (const [key, entry] of compilerCtx.cssTransformCache) { + const basePath = key.includes('?') ? key.slice(0, key.indexOf('?')) : key; + const entryFileChanged = changedStyleFiles.has(basePath); + const depChanged = + !entryFileChanged && + entry != null && + entry.pluginTransformDependencies.some((dep) => changedStyleFiles.has(dep)); + if (entryFileChanged || depChanged) { + compilerCtx.cssTransformCache.delete(key); + } + } + } + compilerCtx.changedModules.clear(); invalidateRolldownCaches(compilerCtx); + // Skip bundler outputs on rebuilds where only HTML/assets changed — output would be identical. + const needsBundlerRebuild = + !buildCtx.isRebuild || buildCtx.hasScriptChanges || buildCtx.hasStyleChanges; + + const bundlerTasks: Promise[] = needsBundlerRebuild + ? [ + outputCustomElements(config, compilerCtx, buildCtx), + outputHydrateScript(config, compilerCtx, buildCtx), + outputLazyLoader(config, compilerCtx), + outputLazy(config, compilerCtx, buildCtx), + ] + : []; + await Promise.all([ + // outputCollection is already a no-op when changedModuleFiles is empty. outputCollection(config, compilerCtx, buildCtx, changedModuleFiles), - outputCustomElements(config, compilerCtx, buildCtx), - outputHydrateScript(config, compilerCtx, buildCtx), - outputLazyLoader(config, compilerCtx), - outputLazy(config, compilerCtx, buildCtx), + ...bundlerTasks, ]); await Promise.all([ @@ -45,11 +87,14 @@ export const generateOutputTargets = async ( // all of its files before the www OT runs. outputWww(config, compilerCtx, buildCtx), - // must run after all the other outputs - // since it validates files were created - outputDocs(config, compilerCtx, buildCtx), - outputTypes(config, compilerCtx, buildCtx), - outputCustom(config, compilerCtx, buildCtx), + // Types, docs and custom outputs are metadata-derived; skip when nothing script/style changed. + ...(needsBundlerRebuild + ? [ + outputDocs(config, compilerCtx, buildCtx), + outputTypes(config, compilerCtx, buildCtx), + outputCustom(config, compilerCtx, buildCtx), + ] + : []), ]); timeSpan.finish('generate outputs finished'); diff --git a/packages/core/src/compiler/output-targets/output-custom.ts b/packages/core/src/compiler/output-targets/output-custom.ts index 882a97b9b42..9b5117612fe 100644 --- a/packages/core/src/compiler/output-targets/output-custom.ts +++ b/packages/core/src/compiler/output-targets/output-custom.ts @@ -12,6 +12,14 @@ export const outputCustom = async ( return; } + // Custom outputs such as framework proxy generators (vue, react, angular) + // are dist-only artifacts. Building them during a dev-mode session wastes + // several hundred ms on every build without providing any value — the + // developer is not consuming the generated proxies at that point. + if (config.devMode) { + return; + } + const task = config.watch ? 'always' : 'onBuildOnly'; const customOutputTargets = config.outputTargets .filter(isOutputTargetCustom) diff --git a/packages/core/src/compiler/transpile/run-program.ts b/packages/core/src/compiler/transpile/run-program.ts index 0cd774166ac..6d1de43dd7f 100644 --- a/packages/core/src/compiler/transpile/run-program.ts +++ b/packages/core/src/compiler/transpile/run-program.ts @@ -212,43 +212,58 @@ export const validateTypesAfterGeneration = async ( const tsProgram = tsBuilder.getProgram(); const typesOutputTarget = config.outputTargets.filter(isOutputTargetDistTypes); - // Check if components.d.ts already exists const componentsDtsPath = join(config.srcDir, 'components.d.ts'); const componentsDtsExistedBefore = await compilerCtx.fs.access(componentsDtsPath); - // If components.d.ts doesn't exist yet, generate it and signal that a rebuild is needed. - // The current TS program was created without components.d.ts, so it can't provide - // accurate type checking. We need a fresh TS program that includes components.d.ts. + // First run: components.d.ts doesn't exist yet — generate it and request a fresh TS program. if (!componentsDtsExistedBefore) { await generateAppTypes(config, compilerCtx, buildCtx, 'src'); - // Signal that we need to rebuild with a fresh TS program return { hasTypesChanged: true, needsRebuild: true }; } - // components.d.ts existed, so the TS program has full type information. - // Run semantic validation on user source files. if (config.validateTypes) { - const sourceFiles = tsProgram.getSourceFiles().filter((sf) => { - const fileName = normalizePath(sf.fileName); - return ( - !fileName.includes('node_modules') && - !fileName.endsWith('.d.ts') && - fileName.startsWith(normalizePath(config.srcDir)) - ); - }); - - for (const sourceFile of sourceFiles) { - const sourceSemanticDiagnostics = tsProgram.getSemanticDiagnostics(sourceFile); - const tsSemantic = loadTypeScriptDiagnostics(sourceSemanticDiagnostics); - + const applyDevModeRelaxation = (diags: d.Diagnostic[]) => { if (config.devMode) { - tsSemantic.forEach((semanticDiagnostic) => { - if (semanticDiagnostic.code === '6133' || semanticDiagnostic.code === '6192') { - semanticDiagnostic.level = 'warn'; - } + diags.forEach((d) => { + if (d.code === '6133' || d.code === '6192') d.level = 'warn'; }); } - buildCtx.diagnostics.push(...tsSemantic); + }; + + if (buildCtx.isRebuild) { + // Incremental: only walks changed files + transitive dependents — O(changed) not O(all). + const emitBuilder = tsBuilder as ts.EmitAndSemanticDiagnosticsBuilderProgram; + let affected = emitBuilder.getSemanticDiagnosticsOfNextAffectedFile?.(); + while (affected) { + if ('fileName' in affected.affected) { + const fileName = normalizePath(affected.affected.fileName); + if ( + !fileName.includes('node_modules') && + !fileName.endsWith('.d.ts') && + fileName.startsWith(normalizePath(config.srcDir)) + ) { + const tsSemantic = loadTypeScriptDiagnostics(affected.result); + applyDevModeRelaxation(tsSemantic); + buildCtx.diagnostics.push(...tsSemantic); + } + } + affected = emitBuilder.getSemanticDiagnosticsOfNextAffectedFile?.(); + } + } else { + // Initial build: walk all source files. + const sourceFiles = tsProgram.getSourceFiles().filter((sf) => { + const fileName = normalizePath(sf.fileName); + return ( + !fileName.includes('node_modules') && + !fileName.endsWith('.d.ts') && + fileName.startsWith(normalizePath(config.srcDir)) + ); + }); + for (const sourceFile of sourceFiles) { + const tsSemantic = loadTypeScriptDiagnostics(tsProgram.getSemanticDiagnostics(sourceFile)); + applyDevModeRelaxation(tsSemantic); + buildCtx.diagnostics.push(...tsSemantic); + } } } diff --git a/packages/core/src/declarations/stencil-private.ts b/packages/core/src/declarations/stencil-private.ts index c1f1f7669d5..04d537a2575 100644 --- a/packages/core/src/declarations/stencil-private.ts +++ b/packages/core/src/declarations/stencil-private.ts @@ -539,6 +539,19 @@ export interface CompilerCtx { worker?: CompilerWorkerContext; rolldownCache: Map; + /** + * Cross-build cache for {@link ts.transpileModule} results. + * Keyed by `"${bundleId}:${normalizedFilePath}"`. Invalidated for any + * file that appears in {@link changedModules} after TypeScript re-emits. + * @see transpileCache in compiler-ctx.ts + */ + transpileCache: Map; + /** + * Cross-build cache of the last style text pushed to the HMR client. + * Keyed by getScopeId result (e.g. "ion-accordion$ios"). Used by + * extTransformsPlugin to avoid re-pushing unchanged styles on every rebuild. + */ + prevStylesMap: Map; /** * Cross-output-target cache for the SASS + Lightning CSS computation. * Keyed by the annotated Rolldown import id. Null entries indicate that the diff --git a/packages/core/src/testing/mocks.ts b/packages/core/src/testing/mocks.ts index 47bab1cec86..aaf7d45181e 100644 --- a/packages/core/src/testing/mocks.ts +++ b/packages/core/src/testing/mocks.ts @@ -260,6 +260,8 @@ export function mockCompilerCtx(config?: d.ValidatedConfig) { rolldownCacheHydrate: null, rolldownCacheLazy: null, rolldownCacheNative: null, + transpileCache: new Map(), + prevStylesMap: new Map(), styleModeNames: new Set(), worker: createWorkerContext(innerConfig.sys), cssTransformCache: new Map(), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 57b3a5b5fd4..36182b75168 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,8 +25,8 @@ catalogs: specifier: ^1.58.0 version: 1.58.2 tsdown: - specifier: ^0.21.6 - version: 0.21.6 + specifier: ^0.21.7 + version: 0.21.7 typescript: specifier: ~6.0.2 version: 6.0.2 @@ -77,7 +77,7 @@ importers: version: 2.4.9 tsdown: specifier: 'catalog:' - version: 0.21.6(@tsdown/css@0.21.6)(oxc-resolver@11.19.1)(typescript@6.0.2) + version: 0.21.7(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@tsdown/css@0.21.6)(oxc-resolver@11.19.1)(typescript@6.0.2) typescript: specifier: 'catalog:' version: 6.0.2 @@ -104,7 +104,7 @@ importers: version: link:../mock-doc '@stencil/vitest': specifier: 'catalog:' - version: 1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@packages+mock-doc)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) + version: 1.10.0(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@packages+mock-doc)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) browserslist: specifier: ^4.24.0 version: 4.28.1 @@ -142,8 +142,8 @@ importers: specifier: ^1.22.0 version: 1.22.11 rolldown: - specifier: ^1.0.0-rc.13 - version: 1.0.0-rc.13 + specifier: ^1.0.0-rc.15 + version: 1.0.0-rc.15 semver: specifier: ^7.7.4 version: 7.7.4 @@ -162,13 +162,13 @@ importers: version: 3.8.1 tsdown: specifier: 'catalog:' - version: 0.21.6(@tsdown/css@0.21.6)(oxc-resolver@11.19.1)(typescript@6.0.2) + version: 0.21.7(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@tsdown/css@0.21.6)(oxc-resolver@11.19.1)(typescript@6.0.2) vitest: specifier: 'catalog:' version: 4.1.2(@types/node@24.10.13)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.37.0)(tsx@4.21.0)(yaml@2.8.3)) vitest-environment-stencil: specifier: 'catalog:' - version: 1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@packages+mock-doc)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) + version: 1.10.0(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@5.0.0-alpha.4)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) packages/dev-server: dependencies: @@ -187,13 +187,13 @@ importers: version: link:../core '@tsdown/css': specifier: ^0.21.6 - version: 0.21.6(jiti@2.6.1)(postcss@8.5.6)(sass-embedded@1.97.3)(sass@1.97.3)(tsdown@0.21.6)(tsx@4.21.0)(yaml@2.8.3) + version: 0.21.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(jiti@2.6.1)(postcss@8.5.6)(sass-embedded@1.97.3)(sass@1.97.3)(tsdown@0.21.7)(tsx@4.21.0)(yaml@2.8.3) '@types/ws': specifier: ^8.0.0 version: 8.18.1 tsdown: specifier: 'catalog:' - version: 0.21.6(@tsdown/css@0.21.6)(oxc-resolver@11.19.1)(typescript@6.0.2) + version: 0.21.7(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@tsdown/css@0.21.6)(oxc-resolver@11.19.1)(typescript@6.0.2) typescript: specifier: 'catalog:' version: 6.0.2 @@ -215,10 +215,10 @@ importers: devDependencies: '@stencil/vitest': specifier: 'catalog:' - version: 1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) + version: 1.10.0(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) tsdown: specifier: 'catalog:' - version: 0.21.6(@tsdown/css@0.21.6)(oxc-resolver@11.19.1)(typescript@6.0.2) + version: 0.21.7(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@tsdown/css@0.21.6)(oxc-resolver@11.19.1)(typescript@6.0.2) typescript: specifier: 'catalog:' version: 6.0.2 @@ -436,7 +436,7 @@ importers: version: 3.2.3(@stencil/core@packages+core) '@stencil/vitest': specifier: 'catalog:' - version: 1.10.0(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) + version: 1.10.0(@playwright/test@1.58.2)(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) '@vitest/browser': specifier: 'catalog:' version: 4.1.2(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.37.0)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2) @@ -469,7 +469,7 @@ importers: devDependencies: '@stencil/vitest': specifier: 'catalog:' - version: 1.10.0(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) + version: 1.10.0(@playwright/test@1.58.2)(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) '@vitest/browser': specifier: 'catalog:' version: 4.1.2(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.37.0)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2) @@ -500,7 +500,7 @@ importers: devDependencies: '@stencil/vitest': specifier: 'catalog:' - version: 1.10.0(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) + version: 1.10.0(@playwright/test@1.58.2)(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) '@vitest/browser': specifier: 'catalog:' version: 4.1.2(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.37.0)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2) @@ -1005,20 +1005,20 @@ packages: '@emnapi/core@1.8.1': resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} - '@emnapi/core@1.9.1': - resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} + '@emnapi/core@1.9.2': + resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} '@emnapi/runtime@1.8.1': resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} - '@emnapi/runtime@1.9.1': - resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} + '@emnapi/runtime@1.9.2': + resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@emnapi/wasi-threads@1.2.0': - resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} '@emotion/is-prop-valid@0.8.8': resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} @@ -1410,6 +1410,12 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@napi-rs/wasm-runtime@1.1.3': + resolution: {integrity: sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1555,8 +1561,8 @@ packages: '@oxc-project/types@0.122.0': resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} - '@oxc-project/types@0.123.0': - resolution: {integrity: sha512-YtECP/y8Mj1lSHiUWGSRzy/C6teUKlS87dEfuVKT09LgQbUsBW1rNg+MiJ4buGu3yuADV60gbIvo9/HplA56Ew==} + '@oxc-project/types@0.124.0': + resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==} '@oxc-resolver/binding-android-arm-eabi@11.19.1': resolution: {integrity: sha512-aUs47y+xyXHUKlbhqHUjBABjvycq6YSD7bpxSW7vplUmdzAlJ93yXY6ZR0c1o1x5A/QKbENCvs3+NlY8IpIVzg==} @@ -2022,8 +2028,8 @@ packages: cpu: [arm64] os: [android] - '@rolldown/binding-android-arm64@1.0.0-rc.13': - resolution: {integrity: sha512-5ZiiecKH2DXAVJTNN13gNMUcCDg4Jy8ZjbXEsPnqa248wgOVeYRX0iqXXD5Jz4bI9BFHgKsI2qmyJynstbmr+g==} + '@rolldown/binding-android-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] @@ -2034,8 +2040,8 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.0-rc.13': - resolution: {integrity: sha512-tz/v/8G77seu8zAB3A5sK3UFoOl06zcshEzhUO62sAEtrEuW/H1CcyoupOrD+NbQJytYgA4CppXPzlrmp4JZKA==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] @@ -2046,8 +2052,8 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.13': - resolution: {integrity: sha512-8DakphqOz8JrMYWTJmWA+vDJxut6LijZ8Xcdc4flOlAhU7PNVwo2MaWBF9iXjJAPo5rC/IxEFZDhJ3GC7NHvug==} + '@rolldown/binding-darwin-x64@1.0.0-rc.15': + resolution: {integrity: sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] @@ -2058,8 +2064,8 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.0-rc.13': - resolution: {integrity: sha512-4wBQFfjDuXYN/SVI8inBF3Aa+isq40rc6VMFbk5jcpolUBTe5cYnMsHZ51nFWsx3PVyyNN3vgoESki0Hmr/4BA==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.15': + resolution: {integrity: sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] @@ -2070,8 +2076,8 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.13': - resolution: {integrity: sha512-JW/e4yPIXLms+jmnbwwy5LA/LxVwZUWLN8xug+V200wzaVi5TEGIWQlh8o91gWYFxW609euI98OCCemmWGuPrw==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': + resolution: {integrity: sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -2083,8 +2089,8 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.13': - resolution: {integrity: sha512-ZfKWpXiUymDnavepCaM6KG/uGydJ4l2nBmMxg60Ci4CbeefpqjPWpfaZM7PThOhk2dssqBAcwLc6rAyr0uTdXg==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -2097,8 +2103,8 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.13': - resolution: {integrity: sha512-bmRg3O6Z0gq9yodKKWCIpnlH051sEfdVwt+6m5UDffAQMUUqU0xjnQqqAUm+Gu7ofAAly9DqiQDtKu2nPDEABA==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': + resolution: {integrity: sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -2111,8 +2117,8 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.13': - resolution: {integrity: sha512-8Wtnbw4k7pMYN9B/mOEAsQ8HOiq7AZ31Ig4M9BKn2So4xRaFEhtCSa4ZJaOutOWq50zpgR4N5+L/opnlaCx8wQ==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] @@ -2125,8 +2131,8 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.13': - resolution: {integrity: sha512-D/0Nlo8mQuxSMohNJUF2lDXWRsFDsHldfRRgD9bRgktj+EndGPj4DOV37LqDKPYS+osdyhZEH7fTakTAEcW7qg==} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] @@ -2139,8 +2145,8 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.13': - resolution: {integrity: sha512-eRrPvat2YaVQcwwKi/JzOP6MKf1WRnOCr+VaI3cTWz3ZoLcP/654z90lVCJ4dAuMEpPdke0n+qyAqXDZdIC4rA==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -2153,8 +2159,8 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.13': - resolution: {integrity: sha512-PsdONiFRp8hR8KgVjTWjZ9s7uA3uueWL0t74/cKHfM4dR5zXYv4AjB8BvA+QDToqxAFg4ZkcVEqeu5F7inoz5w==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': + resolution: {integrity: sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -2166,8 +2172,8 @@ packages: cpu: [arm64] os: [openharmony] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.13': - resolution: {integrity: sha512-hCNXgC5dI3TVOLrPT++PKFNZ+1EtS0mLQwfXXXSUD/+rGlB65gZDwN/IDuxLpQP4x8RYYHqGomlUXzpO8aVI2w==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] @@ -2177,8 +2183,8 @@ packages: engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.13': - resolution: {integrity: sha512-viLS5C5et8NFtLWw9Sw3M/w4vvnVkbWkO7wSNh3C+7G1+uCkGpr6PcjNDSFcNtmXY/4trjPBqUfcOL+P3sWy/g==} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': + resolution: {integrity: sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] @@ -2188,8 +2194,8 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.13': - resolution: {integrity: sha512-Fqa3Tlt1xL4wzmAYxGNFV36Hb+VfPc9PYU+E25DAnswXv3ODDu/yyWjQDbXMo5AGWkQVjLgQExuVu8I/UaZhPQ==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': + resolution: {integrity: sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] @@ -2200,8 +2206,8 @@ packages: cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.13': - resolution: {integrity: sha512-/pLI5kPkGEi44TDlnbio3St/5gUFeN51YWNAk/Gnv6mEQBOahRBh52qVFVBpmrnU01n2yysvBML9Ynu7K4kGAQ==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': + resolution: {integrity: sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -2209,8 +2215,8 @@ packages: '@rolldown/pluginutils@1.0.0-rc.12': resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} - '@rolldown/pluginutils@1.0.0-rc.13': - resolution: {integrity: sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==} + '@rolldown/pluginutils@1.0.0-rc.15': + resolution: {integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==} '@rollup/pluginutils@3.1.0': resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} @@ -2412,8 +2418,8 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@stencil/cli@5.0.0-alpha.3': - resolution: {integrity: sha512-BD6N8+PRybSy2UfE6YFpnt1HJgyQKxP/9euIwTCQkSg8uKK8EXiXSoDZ1YVS+NyUIpuUYSnKxrhM7wpJaQyKkw==} + '@stencil/cli@5.0.0-alpha.4': + resolution: {integrity: sha512-SzNyNL3/Ts6RU46HrXAvQCc6IE/nag94mwpTRq0ZNcHniGkANZSu4MucuechcKbIRghySUYEtYmBNvyhSGMS8Q==} hasBin: true peerDependencies: '@stencil/core': ^5.0.0-0 @@ -2423,17 +2429,17 @@ packages: engines: {node: '>=16.0.0', npm: '>=7.10.0'} hasBin: true - '@stencil/core@5.0.0-alpha.3': - resolution: {integrity: sha512-oHoP19ULUCr4buLWr97B9xLotPaEvWFoYKuS+PTJT4brQvyTx6uQB+QAzx9OIHxki4XXOSR/fIkR2HompZC/Lg==} + '@stencil/core@5.0.0-alpha.4': + resolution: {integrity: sha512-RSbjuuwdjYcYPN9VFWxH5/U0sWCsqyOYazyPVi0Yt+M4bEPHCQOyOyvWxJx3Phs/Wz5ZMp+dp/B2lUKWoXR33Q==} hasBin: true - '@stencil/dev-server@5.0.0-alpha.3': - resolution: {integrity: sha512-iemODRrSWK9ar2ynwFFu0L+fTADsVdxElED7PBhttH/EItzGmTBNohfnvFllT4lWJuFQmrOSQwXH0Ldo0mdUhw==} + '@stencil/dev-server@5.0.0-alpha.4': + resolution: {integrity: sha512-kahzx/HYvGC8bKxpZ5rCAqSkzerzsN2M5n1AIl5fwaDFLynPvMgQb1t13DzxOBdQJIsUSBkXtgokTkbakCW9Ew==} peerDependencies: '@stencil/core': ^5.0.0-0 - '@stencil/mock-doc@5.0.0-alpha.3': - resolution: {integrity: sha512-3PFKHh/4PZ3uwEDcPLxJ3JxPL66Gs/pX9rq1pUN6dTdpC/HrZ0qMAye3bsb47T6SzHZjI9TT0eTIjU30kn8dVw==} + '@stencil/mock-doc@5.0.0-alpha.4': + resolution: {integrity: sha512-vvZsj4sS5dxlpdXDlXAhcDuN3A2J8c5IU4MyUL29rPJpDeIblKXRRS1wdQDwV4TrD60TfPvjA1EGfq08Tx3hrw==} '@stencil/playwright@0.3.1': resolution: {integrity: sha512-7O4C0SIXmO0glF8uE6bZHeV+FcKFWLFvWK0WsY2jAbywi8IU93iygfgRc4Ak0rHdLyElzGWaN6Ksq/lEBk9hag==} @@ -4647,8 +4653,8 @@ packages: resolution: {integrity: sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==} engines: {node: '>= 0.8'} - rolldown-plugin-dts@0.23.1: - resolution: {integrity: sha512-VTnvu5cksnumMMOiL7FUvACGpdGtCVNGbeVc6/6KffImIrA0DZOp7/0lBIt0qI6Nu3/K/lL/Dy7piuVGt9ZeGw==} + rolldown-plugin-dts@0.23.2: + resolution: {integrity: sha512-PbSqLawLgZBGcOGT3yqWBGn4cX+wh2nt5FuBGdcMHyOhoukmjbhYAl8NT9sE4U38Cm9tqLOIQeOrvzeayM0DLQ==} engines: {node: '>=20.19.0'} peerDependencies: '@ts-macro/tsc': ^0.3.6 @@ -4671,8 +4677,8 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rolldown@1.0.0-rc.13: - resolution: {integrity: sha512-bvVj8YJmf0rq4pSFmH7laLa6pYrhghv3PRzrCdRAr23g66zOKVJ4wkvFtgohtPLWmthgg8/rkaqRHrpUEh0Zbw==} + rolldown@1.0.0-rc.15: + resolution: {integrity: sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -5126,14 +5132,14 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true - tsdown@0.21.6: - resolution: {integrity: sha512-YsgPuWczqxPkXiJwMPrv3eOiqx4KPhOdksqubVCDhS7lChK3RYlWsEGhZixc0+lqN3fmBYEnETaujEWDpMPZmA==} + tsdown@0.21.7: + resolution: {integrity: sha512-ukKIxKQzngkWvOYJAyptudclkm4VQqbjq+9HF5K5qDO8GJsYtMh8gIRwicbnZEnvFPr6mquFwYAVZ8JKt3rY2g==} engines: {node: '>=20.19.0'} hasBin: true peerDependencies: '@arethetypeswrong/core': ^0.18.1 - '@tsdown/css': 0.21.6 - '@tsdown/exe': 0.21.6 + '@tsdown/css': 0.21.7 + '@tsdown/exe': 0.21.7 '@vitejs/devtools': '*' publint: ^0.3.0 typescript: ^5.0.0 || ^6.0.0 @@ -6086,9 +6092,9 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/core@1.9.1': + '@emnapi/core@1.9.2': dependencies: - '@emnapi/wasi-threads': 1.2.0 + '@emnapi/wasi-threads': 1.2.1 tslib: 2.8.1 optional: true @@ -6097,7 +6103,7 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.9.1': + '@emnapi/runtime@1.9.2': dependencies: tslib: 2.8.1 optional: true @@ -6107,7 +6113,7 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.2.0': + '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 optional: true @@ -6356,10 +6362,17 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@tybys/wasm-util': 0.10.1 + optional: true + + '@napi-rs/wasm-runtime@1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 '@tybys/wasm-util': 0.10.1 optional: true @@ -6441,7 +6454,7 @@ snapshots: '@oxc-project/types@0.122.0': {} - '@oxc-project/types@0.123.0': {} + '@oxc-project/types@0.124.0': {} '@oxc-resolver/binding-android-arm-eabi@11.19.1': optional: true @@ -6697,102 +6710,105 @@ snapshots: '@rolldown/binding-android-arm64@1.0.0-rc.12': optional: true - '@rolldown/binding-android-arm64@1.0.0-rc.13': + '@rolldown/binding-android-arm64@1.0.0-rc.15': optional: true '@rolldown/binding-darwin-arm64@1.0.0-rc.12': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.13': + '@rolldown/binding-darwin-arm64@1.0.0-rc.15': optional: true '@rolldown/binding-darwin-x64@1.0.0-rc.12': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.13': + '@rolldown/binding-darwin-x64@1.0.0-rc.15': optional: true '@rolldown/binding-freebsd-x64@1.0.0-rc.12': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.13': + '@rolldown/binding-freebsd-x64@1.0.0-rc.15': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.13': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': optional: true '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.13': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': optional: true '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.13': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': optional: true '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.13': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': optional: true '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.13': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': optional: true '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.13': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': optional: true '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.13': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': optional: true '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.13': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: - '@napi-rs/wasm-runtime': 1.1.1 + '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.13': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@napi-rs/wasm-runtime': 1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.13': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': optional: true '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.13': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': optional: true '@rolldown/pluginutils@1.0.0-rc.12': {} - '@rolldown/pluginutils@1.0.0-rc.13': {} + '@rolldown/pluginutils@1.0.0-rc.15': {} '@rollup/pluginutils@3.1.0(rollup@4.57.1)': dependencies: @@ -6910,10 +6926,10 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@stencil/cli@5.0.0-alpha.3(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))': + '@stencil/cli@5.0.0-alpha.4(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))': dependencies: - '@stencil/core': 5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) - '@stencil/dev-server': 5.0.0-alpha.3(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2)) + '@stencil/core': 5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) + '@stencil/dev-server': 5.0.0-alpha.4(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2)) prompts: 2.4.2 transitivePeerDependencies: - bufferutil @@ -6930,14 +6946,14 @@ snapshots: '@rollup/rollup-win32-arm64-msvc': 4.44.0 '@rollup/rollup-win32-x64-msvc': 4.44.0 - '@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2)': + '@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2)': dependencies: '@parcel/watcher': 2.5.6 '@rollup/pluginutils': 5.3.0(rollup@4.57.1) - '@stencil/cli': 5.0.0-alpha.3(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2)) - '@stencil/dev-server': 5.0.0-alpha.3(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2)) - '@stencil/mock-doc': 5.0.0-alpha.3 - '@stencil/vitest': 1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@5.0.0-alpha.3)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) + '@stencil/cli': 5.0.0-alpha.4(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2)) + '@stencil/dev-server': 5.0.0-alpha.4(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2)) + '@stencil/mock-doc': 5.0.0-alpha.4 + '@stencil/vitest': 1.10.0(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@5.0.0-alpha.4)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) browserslist: 4.28.1 chalk: 5.6.2 css-what: 7.0.0 @@ -6950,7 +6966,7 @@ snapshots: postcss-safe-parser: 7.0.1(postcss@8.5.6) postcss-selector-parser: 7.1.1 resolve: 1.22.11 - rolldown: 1.0.0-rc.13 + rolldown: 1.0.0-rc.15 semver: 7.7.4 terser: 5.37.0 typescript: 6.0.2 @@ -6968,9 +6984,9 @@ snapshots: - utf-8-validate - vitest - '@stencil/dev-server@5.0.0-alpha.3(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))': + '@stencil/dev-server@5.0.0-alpha.4(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))': dependencies: - '@stencil/core': 5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) + '@stencil/core': 5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) launch-editor: 2.13.0 open: 11.0.0 ws: 8.19.0 @@ -6978,7 +6994,7 @@ snapshots: - bufferutil - utf-8-validate - '@stencil/mock-doc@5.0.0-alpha.3': + '@stencil/mock-doc@5.0.0-alpha.4': dependencies: nwsapi: 2.2.23 parse5: 7.2.1 @@ -7005,74 +7021,64 @@ snapshots: jiti: 2.6.1 local-pkg: 1.1.2 vitest: 4.1.2(@types/node@24.10.13)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.37.0)(tsx@4.21.0)(yaml@2.8.3)) - vitest-environment-stencil: 1.10.0(@playwright/test@1.58.2)(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) + vitest-environment-stencil: 1.10.0(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) optionalDependencies: '@playwright/test': 1.58.2 '@vitest/browser-playwright': 4.1.2(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.37.0)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2) jsdom: 28.0.0 playwright: 1.58.2 - '@stencil/vitest@1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@5.0.0-alpha.3)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2)': + '@stencil/vitest@1.10.0(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@5.0.0-alpha.4)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2)': dependencies: - '@stencil/core': 5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) + '@stencil/core': 5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) jiti: 2.6.1 local-pkg: 1.1.2 vitest: 4.1.2(@types/node@24.10.13)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.37.0)(tsx@4.21.0)(yaml@2.8.3)) - vitest-environment-stencil: 1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@5.0.0-alpha.3)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) + vitest-environment-stencil: 1.10.0(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@5.0.0-alpha.4)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) optionalDependencies: - '@stencil/mock-doc': 5.0.0-alpha.3 + '@stencil/mock-doc': 5.0.0-alpha.4 '@vitest/browser-playwright': 4.1.2(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.37.0)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2) jsdom: 28.0.0 playwright: 1.58.2 - '@stencil/vitest@1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@packages+mock-doc)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2)': + '@stencil/vitest@1.10.0(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@packages+mock-doc)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2)': dependencies: - '@stencil/core': 5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) + '@stencil/core': 5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) jiti: 2.6.1 local-pkg: 1.1.2 vitest: 4.1.2(@types/node@24.10.13)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.37.0)(tsx@4.21.0)(yaml@2.8.3)) - vitest-environment-stencil: 1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@packages+mock-doc)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) + vitest-environment-stencil: 1.10.0(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@5.0.0-alpha.4)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) optionalDependencies: '@stencil/mock-doc': link:packages/mock-doc '@vitest/browser-playwright': 4.1.2(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.37.0)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2) jsdom: 28.0.0 playwright: 1.58.2 - '@stencil/vitest@1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2)': + '@stencil/vitest@1.10.0(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2)': dependencies: - '@stencil/core': 5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) - jiti: 2.6.1 - local-pkg: 1.1.2 - vitest: 4.1.2(@types/node@24.10.13)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.37.0)(tsx@4.21.0)(yaml@2.8.3)) - vitest-environment-stencil: 1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2)) - optionalDependencies: - '@vitest/browser-playwright': 4.1.2(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.37.0)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2) - jsdom: 28.0.0 - playwright: 1.58.2 - - '@stencil/vitest@1.10.0(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2)': - dependencies: - '@stencil/core': link:packages/core + '@stencil/core': 5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) jiti: 2.6.1 local-pkg: 1.1.2 vitest: 4.1.2(@types/node@24.10.13)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.37.0)(tsx@4.21.0)(yaml@2.8.3)) - vitest-environment-stencil: 1.10.0(@stencil/core@packages+core) + vitest-environment-stencil: 1.10.0(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) optionalDependencies: '@vitest/browser-playwright': 4.1.2(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.37.0)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2) jsdom: 28.0.0 playwright: 1.58.2 - '@tsdown/css@0.21.6(jiti@2.6.1)(postcss@8.5.6)(sass-embedded@1.97.3)(sass@1.97.3)(tsdown@0.21.6)(tsx@4.21.0)(yaml@2.8.3)': + '@tsdown/css@0.21.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(jiti@2.6.1)(postcss@8.5.6)(sass-embedded@1.97.3)(sass@1.97.3)(tsdown@0.21.7)(tsx@4.21.0)(yaml@2.8.3)': dependencies: lightningcss: 1.32.0 postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.3) - rolldown: 1.0.0-rc.12 - tsdown: 0.21.6(@tsdown/css@0.21.6)(oxc-resolver@11.19.1)(typescript@6.0.2) + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + tsdown: 0.21.7(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@tsdown/css@0.21.6)(oxc-resolver@11.19.1)(typescript@6.0.2) optionalDependencies: postcss: 8.5.6 sass: 1.97.3 sass-embedded: 1.97.3 transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' - jiti - tsx - yaml @@ -9490,7 +9496,7 @@ snapshots: hash-base: 3.1.2 inherits: 2.0.4 - rolldown-plugin-dts@0.23.1(oxc-resolver@11.19.1)(rolldown@1.0.0-rc.12)(typescript@6.0.2): + rolldown-plugin-dts@0.23.2(oxc-resolver@11.19.1)(rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(typescript@6.0.2): dependencies: '@babel/generator': 8.0.0-rc.3 '@babel/helper-validator-identifier': 8.0.0-rc.3 @@ -9501,13 +9507,14 @@ snapshots: dts-resolver: 2.1.3(oxc-resolver@11.19.1) get-tsconfig: 4.13.7 obug: 2.1.1 - rolldown: 1.0.0-rc.12 + picomatch: 4.0.4 + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) optionalDependencies: typescript: 6.0.2 transitivePeerDependencies: - oxc-resolver - rolldown@1.0.0-rc.12: + rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): dependencies: '@oxc-project/types': 0.122.0 '@rolldown/pluginutils': 1.0.0-rc.12 @@ -9524,30 +9531,33 @@ snapshots: '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' - rolldown@1.0.0-rc.13: + rolldown@1.0.0-rc.15: dependencies: - '@oxc-project/types': 0.123.0 - '@rolldown/pluginutils': 1.0.0-rc.13 + '@oxc-project/types': 0.124.0 + '@rolldown/pluginutils': 1.0.0-rc.15 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.13 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.13 - '@rolldown/binding-darwin-x64': 1.0.0-rc.13 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.13 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.13 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.13 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.13 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.13 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.13 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.13 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.13 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.13 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.13 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.13 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.13 + '@rolldown/binding-android-arm64': 1.0.0-rc.15 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.15 + '@rolldown/binding-darwin-x64': 1.0.0-rc.15 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.15 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.15 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.15 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.15 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.15 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.15 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.15 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.15 rollup-plugin-css-only@2.1.0(rollup@4.57.1): dependencies: @@ -10011,7 +10021,7 @@ snapshots: tree-kill@1.2.2: {} - tsdown@0.21.6(@tsdown/css@0.21.6)(oxc-resolver@11.19.1)(typescript@6.0.2): + tsdown@0.21.7(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@tsdown/css@0.21.6)(oxc-resolver@11.19.1)(typescript@6.0.2): dependencies: ansis: 4.2.0 cac: 7.0.0 @@ -10021,18 +10031,20 @@ snapshots: import-without-cache: 0.2.5 obug: 2.1.1 picomatch: 4.0.4 - rolldown: 1.0.0-rc.12 - rolldown-plugin-dts: 0.23.1(oxc-resolver@11.19.1)(rolldown@1.0.0-rc.12)(typescript@6.0.2) + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + rolldown-plugin-dts: 0.23.2(oxc-resolver@11.19.1)(rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(typescript@6.0.2) semver: 7.7.4 tinyexec: 1.0.4 tinyglobby: 0.2.15 tree-kill: 1.2.2 unconfig-core: 7.5.0 - unrun: 0.2.34 + unrun: 0.2.34(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) optionalDependencies: - '@tsdown/css': 0.21.6(jiti@2.6.1)(postcss@8.5.6)(sass-embedded@1.97.3)(sass@1.97.3)(tsdown@0.21.6)(tsx@4.21.0)(yaml@2.8.3) + '@tsdown/css': 0.21.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(jiti@2.6.1)(postcss@8.5.6)(sass-embedded@1.97.3)(sass@1.97.3)(tsdown@0.21.7)(tsx@4.21.0)(yaml@2.8.3) typescript: 6.0.2 transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' - '@ts-macro/tsc' - '@typescript/native-preview' - oxc-resolver @@ -10089,9 +10101,12 @@ snapshots: universalify@2.0.1: {} - unrun@0.2.34: + unrun@0.2.34(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): dependencies: - rolldown: 1.0.0-rc.12 + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' unset-value@1.0.0: dependencies: @@ -10166,10 +10181,10 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - vitest-environment-stencil@1.10.0(@playwright/test@1.58.2)(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2): + vitest-environment-stencil@1.10.0(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@5.0.0-alpha.4)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2): dependencies: - '@stencil/core': link:packages/core - '@stencil/vitest': 1.10.0(@playwright/test@1.58.2)(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) + '@stencil/core': 5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) + '@stencil/vitest': 1.10.0(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@5.0.0-alpha.4)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) transitivePeerDependencies: - '@playwright/test' - '@stencil/mock-doc' @@ -10182,15 +10197,10 @@ snapshots: - playwright - vitest - vitest-environment-stencil@1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2)): + vitest-environment-stencil@1.10.0(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2): dependencies: - '@stencil/core': 5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) - '@stencil/vitest': 1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@5.0.0-alpha.3)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) - - vitest-environment-stencil@1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@5.0.0-alpha.3)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2): - dependencies: - '@stencil/core': 5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) - '@stencil/vitest': 1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@5.0.0-alpha.3)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) + '@stencil/core': 5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) + '@stencil/vitest': 1.10.0(@stencil/core@5.0.0-alpha.4(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) transitivePeerDependencies: - '@playwright/test' - '@stencil/mock-doc' @@ -10203,31 +10213,10 @@ snapshots: - playwright - vitest - vitest-environment-stencil@1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@packages+mock-doc)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2): - dependencies: - '@stencil/core': 5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2) - '@stencil/vitest': 1.10.0(@stencil/core@5.0.0-alpha.3(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(rollup@4.57.1)(vitest@4.1.2))(@stencil/mock-doc@packages+mock-doc)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) - transitivePeerDependencies: - - '@playwright/test' - - '@stencil/mock-doc' - - '@vitest/browser-playwright' - - '@vitest/browser-preview' - - '@vitest/browser-webdriverio' - - '@wdio/globals' - - happy-dom - - jsdom - - playwright - - vitest - - vitest-environment-stencil@1.10.0(@stencil/core@packages+core): - dependencies: - '@stencil/core': link:packages/core - '@stencil/vitest': 1.10.0(@playwright/test@1.58.2)(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) - vitest-environment-stencil@1.10.0(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2): dependencies: '@stencil/core': link:packages/core - '@stencil/vitest': 1.10.0(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) + '@stencil/vitest': 1.10.0(@playwright/test@1.58.2)(@stencil/core@packages+core)(@vitest/browser-playwright@4.1.2)(jsdom@28.0.0)(playwright@1.58.2)(vitest@4.1.2) transitivePeerDependencies: - '@playwright/test' - '@stencil/mock-doc' diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 91752e98b5c..98f41c7a50c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -11,5 +11,5 @@ catalog: 'vitest-environment-stencil': '^1.10.0' '@stencil/playwright': '~0.3.1' playwright: ^1.58.0 - tsdown: '^0.21.6' + tsdown: '^0.21.7' typescript: '~6.0.2' From f6f1c98e21dd9b159e4f0ee8a0e6f8c1c5a1437d Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Sun, 12 Apr 2026 00:38:36 +0100 Subject: [PATCH 2/2] chore: --- .../compiler/output-targets/dist-hydrate-script/index.ts | 6 +++--- test/ssr/stencil.config.ts | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/core/src/compiler/output-targets/dist-hydrate-script/index.ts b/packages/core/src/compiler/output-targets/dist-hydrate-script/index.ts index 90aaf377687..cb0c3c0fe1d 100644 --- a/packages/core/src/compiler/output-targets/dist-hydrate-script/index.ts +++ b/packages/core/src/compiler/output-targets/dist-hydrate-script/index.ts @@ -9,9 +9,9 @@ export const outputHydrateScript = async ( buildCtx: d.BuildCtx, ) => { // The hydrate app is a server-side rendering artifact. In dev mode it is - // only needed when `devServer.ssr` is explicitly enabled. Skip it otherwise - // to avoid a full extra rolldown build on every dev-mode startup. - if (config.devMode && !config.devServer?.ssr) { + // only needed when `devServer.ssr` is enabled or `buildDist` is explicitly + // set to true. Skip it otherwise to avoid an extra rolldown build on startup. + if (config.devMode && !config.devServer?.ssr && !config.buildDist) { return; } diff --git a/test/ssr/stencil.config.ts b/test/ssr/stencil.config.ts index 6296131b124..04f74a53f51 100644 --- a/test/ssr/stencil.config.ts +++ b/test/ssr/stencil.config.ts @@ -2,6 +2,7 @@ import type { Config } from '@stencil/core'; export const config: Config = { namespace: 'SSRTests', + buildDist: true, devServer: { port: 3336, },