@absolutejs/absolute 0.19.0-beta.846 → 0.19.0-beta.848

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/dist/build.js CHANGED
@@ -3009,11 +3009,53 @@ ${contents}` : contents, normalizePostcssModule = (mod) => {
3009
3009
  code: await compileStyleSource(path, content, language, config)
3010
3010
  };
3011
3011
  }
3012
- }), compileStyleFileIfNeeded = async (filePath, config) => {
3013
- if (!isPreprocessableStylePath(filePath)) {
3014
- return runPostcss(await readFile(filePath, "utf-8"), filePath, config);
3012
+ }), CSS_IMPORT_PATTERN, resolveCssImportsAsync = async (content, baseDir, visited) => {
3013
+ const matches = Array.from(content.matchAll(CSS_IMPORT_PATTERN));
3014
+ if (matches.length === 0)
3015
+ return content;
3016
+ let cursor = 0;
3017
+ const parts = [];
3018
+ for (const match of matches) {
3019
+ const importPath = match[1];
3020
+ if (importPath === undefined)
3021
+ continue;
3022
+ const start = match.index ?? 0;
3023
+ const end = start + match[0].length;
3024
+ parts.push(content.slice(cursor, start));
3025
+ const fullPath = isAbsolute(importPath) ? importPath : resolve5(baseDir, importPath);
3026
+ if (visited.has(fullPath) || !existsSync4(fullPath)) {
3027
+ parts.push(visited.has(fullPath) ? "" : match[0]);
3028
+ cursor = end;
3029
+ continue;
3030
+ }
3031
+ const nextVisited = new Set(visited);
3032
+ nextVisited.add(fullPath);
3033
+ const imported = await readFile(fullPath, "utf-8");
3034
+ parts.push(await resolveCssImportsAsync(imported, dirname2(fullPath), nextVisited));
3035
+ cursor = end;
3015
3036
  }
3016
- return compileStyleSource(filePath, undefined, undefined, config);
3037
+ parts.push(content.slice(cursor));
3038
+ return parts.join("");
3039
+ }, compileStyleFileIfNeeded = async (filePath, config) => {
3040
+ if (!isPreprocessableStylePath(filePath)) {
3041
+ const raw = await readFile(filePath, "utf-8");
3042
+ const processed = await runPostcss(raw, filePath, config);
3043
+ return resolveCssImportsAsync(processed, dirname2(filePath), new Set([filePath]));
3044
+ }
3045
+ const compiled = await compileStyleSource(filePath, undefined, undefined, config);
3046
+ return resolveCssImportsAsync(compiled, dirname2(filePath), new Set([filePath]));
3047
+ }, resolveCssImportsSync = (content, baseDir, visited) => {
3048
+ return content.replace(CSS_IMPORT_PATTERN, (match, importPath) => {
3049
+ const fullPath = isAbsolute(importPath) ? importPath : resolve5(baseDir, importPath);
3050
+ if (visited.has(fullPath))
3051
+ return "";
3052
+ if (!existsSync4(fullPath))
3053
+ return match;
3054
+ const nextVisited = new Set(visited);
3055
+ nextVisited.add(fullPath);
3056
+ const imported = readFileSync3(fullPath, "utf-8");
3057
+ return resolveCssImportsSync(imported, dirname2(fullPath), nextVisited);
3058
+ });
3017
3059
  }, compileStyleFileIfNeededSync = (filePath, config) => {
3018
3060
  const rawContents = readFileSync3(filePath, "utf-8");
3019
3061
  const language = getStyleLanguage(filePath);
@@ -3031,7 +3073,7 @@ ${contents}` : contents, normalizePostcssModule = (mod) => {
3031
3073
  }
3032
3074
  const contents = withAdditionalData(rawContents, options.additionalData);
3033
3075
  const loadPaths = normalizeLoadPaths(filePath, options.loadPaths);
3034
- return sass.compileString(contents, {
3076
+ const compiled = sass.compileString(contents, {
3035
3077
  importers: [
3036
3078
  createSassImporter(filePath, loadPaths, language, config)
3037
3079
  ],
@@ -3040,6 +3082,7 @@ ${contents}` : contents, normalizePostcssModule = (mod) => {
3040
3082
  syntax: language === "sass" ? "indented" : "scss",
3041
3083
  url: new URL(`file://${filePath}`)
3042
3084
  }).css;
3085
+ return resolveCssImportsSync(compiled, dirname2(filePath), new Set([filePath]));
3043
3086
  }
3044
3087
  if (language === "less") {
3045
3088
  throw new Error(`Unable to compile ${filePath}: Less styleUrl preprocessing is async-only. Import the Less file from a bundled entrypoint or use SCSS/CSS for Angular styleUrl.`);
@@ -3047,7 +3090,7 @@ ${contents}` : contents, normalizePostcssModule = (mod) => {
3047
3090
  if (language === "stylus") {
3048
3091
  throw new Error(`Unable to compile ${filePath}: Stylus styleUrl preprocessing is async-only. Import the Stylus file from a bundled entrypoint or use SCSS/CSS for Angular styleUrl.`);
3049
3092
  }
3050
- return rawContents;
3093
+ return resolveCssImportsSync(rawContents, dirname2(filePath), new Set([filePath]));
3051
3094
  }, getCssOutputExtension = (filePath) => isPreprocessableStylePath(filePath) ? ".css" : extname3(filePath);
3052
3095
  var init_stylePreprocessor = __esm(() => {
3053
3096
  CSS_EXTENSION_PATTERN = /\.css$/i;
@@ -3060,6 +3103,7 @@ var init_stylePreprocessor = __esm(() => {
3060
3103
  styleDependencyGraph = new Map;
3061
3104
  styleOutputHashes = new Map;
3062
3105
  stylePreprocessorPlugin = createStylePreprocessorPlugin();
3106
+ CSS_IMPORT_PATTERN = /@import\s+["']([^"']+)["']\s*;?/g;
3063
3107
  });
3064
3108
 
3065
3109
  // src/core/svelteServerModule.ts
@@ -9530,35 +9574,42 @@ var init_cleanStaleOutputs = __esm(() => {
9530
9574
  HASHED_FILE_PATTERN = /\.[a-f0-9]{8,}\.\w+$/;
9531
9575
  });
9532
9576
 
9577
+ // src/utils/generatedDir.ts
9578
+ var exports_generatedDir = {};
9579
+ __export(exports_generatedDir, {
9580
+ getGeneratedRoot: () => getGeneratedRoot,
9581
+ getFrameworkGeneratedDir: () => getFrameworkGeneratedDir
9582
+ });
9583
+ import { join as join12 } from "path";
9584
+ var GENERATED_DIR_NAME = "generated", ABSOLUTE_CACHE_DIR_NAME = ".absolutejs", getGeneratedRoot = (projectRoot = process.cwd()) => join12(projectRoot, ABSOLUTE_CACHE_DIR_NAME, GENERATED_DIR_NAME), getFrameworkGeneratedDir = (framework, projectRoot = process.cwd()) => join12(getGeneratedRoot(projectRoot), framework);
9585
+ var init_generatedDir = () => {};
9586
+
9533
9587
  // src/utils/cleanup.ts
9534
9588
  import { rm as rm3 } from "fs/promises";
9535
- import { join as join12 } from "path";
9536
- var cleanup = async ({
9589
+ import { join as join13 } from "path";
9590
+ var removeIfExists = (path) => rm3(path, { force: true, recursive: true }), cleanFramework = (framework, frameworkDir) => {
9591
+ const tasks = [
9592
+ removeIfExists(getFrameworkGeneratedDir(framework))
9593
+ ];
9594
+ if (frameworkDir)
9595
+ tasks.push(removeIfExists(join13(frameworkDir, "generated")));
9596
+ return Promise.all(tasks);
9597
+ }, cleanup = async ({
9537
9598
  angularDir,
9538
9599
  reactDir,
9539
9600
  svelteDir,
9540
9601
  vueDir
9541
9602
  }) => {
9542
9603
  await Promise.all([
9543
- angularDir ? rm3(join12(angularDir, "generated"), {
9544
- force: true,
9545
- recursive: true
9546
- }) : undefined,
9547
- reactDir ? rm3(join12(reactDir, "generated"), {
9548
- force: true,
9549
- recursive: true
9550
- }) : undefined,
9551
- svelteDir ? rm3(join12(svelteDir, "generated"), {
9552
- force: true,
9553
- recursive: true
9554
- }) : undefined,
9555
- vueDir ? rm3(join12(vueDir, "generated"), {
9556
- force: true,
9557
- recursive: true
9558
- }) : undefined
9604
+ cleanFramework("angular", angularDir),
9605
+ cleanFramework("react", reactDir),
9606
+ cleanFramework("svelte", svelteDir),
9607
+ cleanFramework("vue", vueDir)
9559
9608
  ]);
9560
9609
  };
9561
- var init_cleanup = () => {};
9610
+ var init_cleanup = __esm(() => {
9611
+ init_generatedDir();
9612
+ });
9562
9613
 
9563
9614
  // src/utils/commonAncestor.ts
9564
9615
  var exports_commonAncestor = {};
@@ -9579,7 +9630,7 @@ var init_commonAncestor = () => {};
9579
9630
 
9580
9631
  // src/utils/buildDirectoryLock.ts
9581
9632
  import { mkdirSync as mkdirSync6, unlinkSync, writeFileSync as writeFileSync6, readFileSync as readFileSync10 } from "fs";
9582
- import { dirname as dirname8, join as join13 } from "path";
9633
+ import { dirname as dirname8, join as join14 } from "path";
9583
9634
  var heldLocks, HELD_LOCKS_ENV = "ABSOLUTE_HELD_BUILD_DIRECTORY_LOCKS", exitHandlersRegistered = false, registerExitHandlersOnce = () => {
9584
9635
  if (exitHandlersRegistered)
9585
9636
  return;
@@ -9605,7 +9656,7 @@ var heldLocks, HELD_LOCKS_ENV = "ABSOLUTE_HELD_BUILD_DIRECTORY_LOCKS", exitHandl
9605
9656
  releaseAllSync();
9606
9657
  throw err;
9607
9658
  });
9608
- }, isAlreadyExistsError = (error) => error instanceof Error && ("code" in error) && error.code === "EEXIST", lockPathForBuildDirectory = (buildDirectory) => join13(dirname8(buildDirectory), ".absolutejs", "build.lock"), readHeldLockEnv = () => new Set((process.env[HELD_LOCKS_ENV] ?? "").split(`
9659
+ }, isAlreadyExistsError = (error) => error instanceof Error && ("code" in error) && error.code === "EEXIST", lockPathForBuildDirectory = (buildDirectory) => join14(dirname8(buildDirectory), ".absolutejs", "build.lock"), readHeldLockEnv = () => new Set((process.env[HELD_LOCKS_ENV] ?? "").split(`
9609
9660
  `).filter((entry) => entry.length > 0)), writeHeldLockEnv = (locks) => {
9610
9661
  if (locks.size === 0) {
9611
9662
  delete process.env[HELD_LOCKS_ENV];
@@ -9897,7 +9948,7 @@ import { existsSync as existsSync14 } from "fs";
9897
9948
  import { mkdir as mkdir3, stat as stat2 } from "fs/promises";
9898
9949
  import {
9899
9950
  dirname as dirname9,
9900
- join as join14,
9951
+ join as join15,
9901
9952
  basename as basename4,
9902
9953
  extname as extname5,
9903
9954
  resolve as resolve14,
@@ -9956,14 +10007,14 @@ var resolveDevClientDir2 = () => {
9956
10007
  `${basePath}.svelte`,
9957
10008
  `${basePath}.svelte.ts`,
9958
10009
  `${basePath}.svelte.js`,
9959
- join14(basePath, "index.ts"),
9960
- join14(basePath, "index.js"),
9961
- join14(basePath, "index.mjs"),
9962
- join14(basePath, "index.cjs"),
9963
- join14(basePath, "index.json"),
9964
- join14(basePath, "index.svelte"),
9965
- join14(basePath, "index.svelte.ts"),
9966
- join14(basePath, "index.svelte.js")
10010
+ join15(basePath, "index.ts"),
10011
+ join15(basePath, "index.js"),
10012
+ join15(basePath, "index.mjs"),
10013
+ join15(basePath, "index.cjs"),
10014
+ join15(basePath, "index.json"),
10015
+ join15(basePath, "index.svelte"),
10016
+ join15(basePath, "index.svelte.ts"),
10017
+ join15(basePath, "index.svelte.js")
9967
10018
  ];
9968
10019
  const checks = await Promise.all(candidates.map(exists));
9969
10020
  return candidates.find((_2, index) => checks[index]) ?? null;
@@ -10001,10 +10052,10 @@ var resolveDevClientDir2 = () => {
10001
10052
  });
10002
10053
  }, compileSvelte = async (entryPoints, svelteRoot, cache = new Map, isDev = false, stylePreprocessors) => {
10003
10054
  const { compile, compileModule, preprocess } = await import("svelte/compiler");
10004
- const generatedDir = join14(svelteRoot, "generated");
10005
- const clientDir = join14(generatedDir, "client");
10006
- const indexDir = join14(generatedDir, "indexes");
10007
- const serverDir = join14(generatedDir, "server");
10055
+ const generatedDir = getFrameworkGeneratedDir("svelte");
10056
+ const clientDir = join15(generatedDir, "client");
10057
+ const indexDir = join15(generatedDir, "indexes");
10058
+ const serverDir = join15(generatedDir, "server");
10008
10059
  await Promise.all([clientDir, indexDir, serverDir].map((dir) => mkdir3(dir, { recursive: true })));
10009
10060
  const dev = env.NODE_ENV !== "production";
10010
10061
  const build = async (src) => {
@@ -10042,8 +10093,8 @@ var resolveDevClientDir2 = () => {
10042
10093
  const childBuilt = await Promise.all(childSources.map((child) => build(child)));
10043
10094
  const hasAwaitSlotFromChildren = childBuilt.some((child) => child.hasAwaitSlot);
10044
10095
  const externalRewrites = new Map;
10045
- const ssrOutputDir = dirname9(join14(serverDir, relDir, `${baseName}.js`));
10046
- const clientOutputDir = dirname9(join14(clientDir, relDir, `${baseName}.js`));
10096
+ const ssrOutputDir = dirname9(join15(serverDir, relDir, `${baseName}.js`));
10097
+ const clientOutputDir = dirname9(join15(clientDir, relDir, `${baseName}.js`));
10047
10098
  for (let idx = 0;idx < importPaths.length; idx++) {
10048
10099
  const rawSpec = importPaths[idx];
10049
10100
  if (!rawSpec)
@@ -10108,8 +10159,8 @@ var resolveDevClientDir2 = () => {
10108
10159
  code += islandMetadataExports;
10109
10160
  return code;
10110
10161
  };
10111
- const ssrPath = join14(serverDir, relDir, `${baseName}.js`);
10112
- const clientPath = join14(clientDir, relDir, `${baseName}.js`);
10162
+ const ssrPath = join15(serverDir, relDir, `${baseName}.js`);
10163
+ const clientPath = join15(clientDir, relDir, `${baseName}.js`);
10113
10164
  await Promise.all([
10114
10165
  mkdir3(dirname9(ssrPath), { recursive: true }),
10115
10166
  mkdir3(dirname9(clientPath), { recursive: true })
@@ -10141,7 +10192,7 @@ var resolveDevClientDir2 = () => {
10141
10192
  await Promise.all(roots.map(async ({ client, hasAwaitSlot }) => {
10142
10193
  const relClientDir = dirname9(relative7(clientDir, client));
10143
10194
  const name = basename4(client, extname5(client));
10144
- const indexPath = join14(indexDir, relClientDir, `${name}.js`);
10195
+ const indexPath = join15(indexDir, relClientDir, `${name}.js`);
10145
10196
  const importRaw = relative7(dirname9(indexPath), client).split(sep2).join("/");
10146
10197
  const importPath = importRaw.startsWith(".") || importRaw.startsWith("/") ? importRaw : `./${importRaw}`;
10147
10198
  const hmrImports = isDev ? `window.__HMR_FRAMEWORK__ = "svelte";
@@ -10220,7 +10271,7 @@ if (typeof window !== "undefined") {
10220
10271
  svelteClientPaths: roots.map(({ client }) => client),
10221
10272
  svelteIndexPaths: roots.map(({ client }) => {
10222
10273
  const rel = dirname9(relative7(clientDir, client));
10223
- return join14(indexDir, rel, basename4(client));
10274
+ return join15(indexDir, rel, basename4(client));
10224
10275
  }),
10225
10276
  svelteServerPaths: roots.map(({ ssr }) => ssr)
10226
10277
  };
@@ -10228,13 +10279,14 @@ if (typeof window !== "undefined") {
10228
10279
  var init_compileSvelte = __esm(() => {
10229
10280
  init_constants();
10230
10281
  init_resolvePackageImport();
10282
+ init_generatedDir();
10231
10283
  init_sourceMetadata();
10232
10284
  init_stylePreprocessor();
10233
10285
  init_lowerIslandSyntax();
10234
10286
  init_lowerAwaitSlotSyntax();
10235
10287
  init_renderToReadableStream();
10236
10288
  devClientDir2 = resolveDevClientDir2();
10237
- hmrClientPath3 = join14(devClientDir2, "hmrClient.ts").replace(/\\/g, "/");
10289
+ hmrClientPath3 = join15(devClientDir2, "hmrClient.ts").replace(/\\/g, "/");
10238
10290
  persistentCache = new Map;
10239
10291
  sourceHashCache = new Map;
10240
10292
  transpiler2 = new Transpiler({ loader: "ts", target: "browser" });
@@ -10306,7 +10358,7 @@ import {
10306
10358
  basename as basename5,
10307
10359
  dirname as dirname10,
10308
10360
  isAbsolute as isAbsolute3,
10309
- join as join15,
10361
+ join as join16,
10310
10362
  relative as relative8,
10311
10363
  resolve as resolve15
10312
10364
  } from "path";
@@ -10481,7 +10533,7 @@ var resolveDevClientDir3 = () => {
10481
10533
  ];
10482
10534
  let cssOutputPaths = [];
10483
10535
  if (isEntryPoint && allCss.length) {
10484
- const cssOutputFile = join15(outputDirs.css, `${toKebab(fileBaseName)}-compiled.css`);
10536
+ const cssOutputFile = join16(outputDirs.css, `${toKebab(fileBaseName)}-compiled.css`);
10485
10537
  await mkdir4(dirname10(cssOutputFile), { recursive: true });
10486
10538
  await write2(cssOutputFile, allCss.join(`
10487
10539
  `));
@@ -10512,8 +10564,8 @@ if (typeof __VUE_HMR_RUNTIME__ !== 'undefined') {
10512
10564
  };
10513
10565
  const clientCode = assembleModule(generateRenderFunction(false), "render", true) + islandMetadataExports;
10514
10566
  const serverCode = assembleModule(generateRenderFunction(true), "ssrRender", false) + islandMetadataExports;
10515
- const clientOutputPath = join15(outputDirs.client, `${relativeWithoutExtension}.js`);
10516
- const serverOutputPath = join15(outputDirs.server, `${relativeWithoutExtension}.js`);
10567
+ const clientOutputPath = join16(outputDirs.client, `${relativeWithoutExtension}.js`);
10568
+ const serverOutputPath = join16(outputDirs.server, `${relativeWithoutExtension}.js`);
10517
10569
  const relDir = dirname10(relativeFilePath);
10518
10570
  const relDepth = relDir === "." ? 0 : relDir.split("/").length;
10519
10571
  const adjustImports = (code) => code.replace(/(from\s+['"])(\.\.\/(?:\.\.\/)*)/g, (_2, prefix, dots) => {
@@ -10553,11 +10605,11 @@ if (typeof __VUE_HMR_RUNTIME__ !== 'undefined') {
10553
10605
  return result;
10554
10606
  }, compileVue = async (entryPoints, vueRootDir, isDev = false, stylePreprocessors) => {
10555
10607
  const compiler = await import("@vue/compiler-sfc");
10556
- const generatedDir = join15(vueRootDir, "generated");
10557
- const clientOutputDir = join15(generatedDir, "client");
10558
- const indexOutputDir = join15(generatedDir, "indexes");
10559
- const serverOutputDir = join15(generatedDir, "server");
10560
- const cssOutputDir = join15(generatedDir, "compiled");
10608
+ const generatedDir = getFrameworkGeneratedDir("vue");
10609
+ const clientOutputDir = join16(generatedDir, "client");
10610
+ const indexOutputDir = join16(generatedDir, "indexes");
10611
+ const serverOutputDir = join16(generatedDir, "server");
10612
+ const cssOutputDir = join16(generatedDir, "compiled");
10561
10613
  await Promise.all([
10562
10614
  mkdir4(clientOutputDir, { recursive: true }),
10563
10615
  mkdir4(indexOutputDir, { recursive: true }),
@@ -10574,8 +10626,8 @@ if (typeof __VUE_HMR_RUNTIME__ !== 'undefined') {
10574
10626
  }, buildCache, true, vueRootDir, compiler, stylePreprocessors);
10575
10627
  result.tsHelperPaths.forEach((path) => allTsHelperPaths.add(path));
10576
10628
  const entryBaseName = basename5(entryPath, ".vue");
10577
- const indexOutputFile = join15(indexOutputDir, `${entryBaseName}.js`);
10578
- const clientOutputFile = join15(clientOutputDir, relative8(vueRootDir, entryPath).replace(/\\/g, "/").replace(/\.vue$/, ".js"));
10629
+ const indexOutputFile = join16(indexOutputDir, `${entryBaseName}.js`);
10630
+ const clientOutputFile = join16(clientOutputDir, relative8(vueRootDir, entryPath).replace(/\\/g, "/").replace(/\.vue$/, ".js"));
10579
10631
  await mkdir4(dirname10(indexOutputFile), { recursive: true });
10580
10632
  const vueHmrImports = isDev ? [
10581
10633
  `window.__HMR_FRAMEWORK__ = "vue";`,
@@ -10728,8 +10780,8 @@ if (typeof __VUE_HMR_RUNTIME__ !== 'undefined') {
10728
10780
  const sourceCode = await file2(tsPath).text();
10729
10781
  const transpiledCode = transpiler3.transformSync(sourceCode);
10730
10782
  const relativeJsPath = relative8(vueRootDir, tsPath).replace(/\.ts$/, ".js");
10731
- const outClientPath = join15(clientOutputDir, relativeJsPath);
10732
- const outServerPath = join15(serverOutputDir, relativeJsPath);
10783
+ const outClientPath = join16(clientOutputDir, relativeJsPath);
10784
+ const outServerPath = join16(serverOutputDir, relativeJsPath);
10733
10785
  await mkdir4(dirname10(outClientPath), { recursive: true });
10734
10786
  await mkdir4(dirname10(outServerPath), { recursive: true });
10735
10787
  await write2(outClientPath, transpiledCode);
@@ -10745,12 +10797,13 @@ if (typeof __VUE_HMR_RUNTIME__ !== 'undefined') {
10745
10797
  };
10746
10798
  var init_compileVue = __esm(() => {
10747
10799
  init_constants();
10800
+ init_generatedDir();
10748
10801
  init_resolvePackageImport();
10749
10802
  init_sourceMetadata();
10750
10803
  init_vueAutoRouterTransform();
10751
10804
  init_stylePreprocessor();
10752
10805
  devClientDir3 = resolveDevClientDir3();
10753
- hmrClientPath4 = join15(devClientDir3, "hmrClient.ts").replace(/\\/g, "/");
10806
+ hmrClientPath4 = join16(devClientDir3, "hmrClient.ts").replace(/\\/g, "/");
10754
10807
  transpiler3 = new Transpiler2({ loader: "ts", target: "browser" });
10755
10808
  scriptCache = new Map;
10756
10809
  scriptSetupCache = new Map;
@@ -11231,7 +11284,7 @@ __export(exports_compileAngular, {
11231
11284
  compileAngular: () => compileAngular
11232
11285
  });
11233
11286
  import { existsSync as existsSync16, readFileSync as readFileSync11, promises as fs } from "fs";
11234
- import { join as join16, basename as basename6, sep as sep3, dirname as dirname11, resolve as resolve16, relative as relative9 } from "path";
11287
+ import { join as join17, basename as basename6, sep as sep3, dirname as dirname11, resolve as resolve16, relative as relative9 } from "path";
11235
11288
  import ts2 from "typescript";
11236
11289
  var traceAngularPhase = async (name, fn2, metadata) => {
11237
11290
  const tracePhase = globalThis.__absoluteBuildTracePhase;
@@ -11273,10 +11326,10 @@ var traceAngularPhase = async (name, fn2, metadata) => {
11273
11326
  `${candidate}.tsx`,
11274
11327
  `${candidate}.js`,
11275
11328
  `${candidate}.jsx`,
11276
- join16(candidate, "index.ts"),
11277
- join16(candidate, "index.tsx"),
11278
- join16(candidate, "index.js"),
11279
- join16(candidate, "index.jsx")
11329
+ join17(candidate, "index.ts"),
11330
+ join17(candidate, "index.tsx"),
11331
+ join17(candidate, "index.js"),
11332
+ join17(candidate, "index.jsx")
11280
11333
  ];
11281
11334
  return candidates.find((file3) => existsSync16(file3));
11282
11335
  }, createLegacyAngularAnimationUsageResolver = (rootDir) => {
@@ -11465,10 +11518,10 @@ ${registrations}
11465
11518
  `${basePath}.tsx`,
11466
11519
  `${basePath}.mts`,
11467
11520
  `${basePath}.cts`,
11468
- join16(basePath, "index.ts"),
11469
- join16(basePath, "index.tsx"),
11470
- join16(basePath, "index.mts"),
11471
- join16(basePath, "index.cts")
11521
+ join17(basePath, "index.ts"),
11522
+ join17(basePath, "index.tsx"),
11523
+ join17(basePath, "index.mts"),
11524
+ join17(basePath, "index.cts")
11472
11525
  ];
11473
11526
  return candidates.map((candidate) => resolve16(candidate)).find((candidate) => existsSync16(candidate) && !candidate.endsWith(".d.ts")) ?? null;
11474
11527
  }, readFileForAotTransform = async (fileName, readFile5) => {
@@ -11494,15 +11547,15 @@ ${registrations}
11494
11547
  const paths = [];
11495
11548
  const templateUrlMatch = findUncommentedMatch(source, /templateUrl\s*:\s*['"]([^'"]+)['"]/);
11496
11549
  if (templateUrlMatch?.[1])
11497
- paths.push(join16(fileDir, templateUrlMatch[1]));
11550
+ paths.push(join17(fileDir, templateUrlMatch[1]));
11498
11551
  const styleUrlMatch = findUncommentedMatch(source, /styleUrl\s*:\s*['"]([^'"]+)['"]/);
11499
11552
  if (styleUrlMatch?.[1])
11500
- paths.push(join16(fileDir, styleUrlMatch[1]));
11553
+ paths.push(join17(fileDir, styleUrlMatch[1]));
11501
11554
  const styleUrlsMatch = findUncommentedMatch(source, /styleUrls\s*:\s*\[([^\]]+)\]/);
11502
11555
  const urlMatches = styleUrlsMatch?.[1]?.match(/['"]([^'"]+)['"]/g);
11503
11556
  if (urlMatches) {
11504
11557
  for (const urlMatch of urlMatches) {
11505
- paths.push(join16(fileDir, urlMatch.replace(/['"]/g, "")));
11558
+ paths.push(join17(fileDir, urlMatch.replace(/['"]/g, "")));
11506
11559
  }
11507
11560
  }
11508
11561
  return paths.map((path) => resolve16(path));
@@ -11536,7 +11589,7 @@ ${registrations}
11536
11589
  safeStableStringify(stylePreprocessors ?? null)
11537
11590
  ].join("\x00");
11538
11591
  const cacheKey2 = Bun.hash(cacheInput).toString(BASE_36_RADIX);
11539
- return join16(process.cwd(), ".absolutejs", "cache", "angular-resources", `${cacheKey2}.json`);
11592
+ return join17(process.cwd(), ".absolutejs", "cache", "angular-resources", `${cacheKey2}.json`);
11540
11593
  }, precomputeAotResourceTransforms = async (inputPaths, readFile5, stylePreprocessors) => {
11541
11594
  const transformedSources = new Map;
11542
11595
  const visited = new Set;
@@ -11582,7 +11635,7 @@ ${registrations}
11582
11635
  return { stats, transformedSources };
11583
11636
  }, compileAngularFiles = async (inputPaths, outDir, stylePreprocessors) => {
11584
11637
  const islandMetadataByOutputPath = await traceAngularPhase("aot/island-metadata", () => new Map(inputPaths.map((inputPath) => {
11585
- const outputPath = resolve16(join16(outDir, relative9(process.cwd(), resolve16(inputPath)).replace(/\.[cm]?[tj]sx?$/, ".js")));
11638
+ const outputPath = resolve16(join17(outDir, relative9(process.cwd(), resolve16(inputPath)).replace(/\.[cm]?[tj]sx?$/, ".js")));
11586
11639
  return [
11587
11640
  outputPath,
11588
11641
  buildIslandMetadataExports(readFileSync11(inputPath, "utf-8"))
@@ -11629,7 +11682,7 @@ ${registrations}
11629
11682
  const originalGetSourceFile = host.getSourceFile;
11630
11683
  host.getSourceFile = (fileName, languageVersion, onError) => {
11631
11684
  if (fileName.startsWith("lib.") && fileName.endsWith(".d.ts") && tsLibDir) {
11632
- const resolvedPath = join16(tsLibDir, fileName);
11685
+ const resolvedPath = join17(tsLibDir, fileName);
11633
11686
  return originalGetSourceFile?.call(host, resolvedPath, languageVersion, onError);
11634
11687
  }
11635
11688
  return originalGetSourceFile?.call(host, fileName, languageVersion, onError);
@@ -11684,7 +11737,7 @@ ${registrations}
11684
11737
  const entries = await traceAngularPhase("aot/postprocess-emitted-js", () => {
11685
11738
  const rawEntries = Object.entries(emitted).filter(([fileName]) => fileName.endsWith(".js")).map(([fileName, content]) => ({
11686
11739
  content,
11687
- target: join16(outDir, fileName)
11740
+ target: join17(outDir, fileName)
11688
11741
  }));
11689
11742
  const outputFiles = new Set(rawEntries.map(({ target }) => resolve16(target)));
11690
11743
  return rawEntries.map(({ content, target }) => {
@@ -11859,7 +11912,7 @@ ${fields}
11859
11912
  }, inlineTemplateAndLowerDefer = async (source, fileDir) => {
11860
11913
  const templateUrlMatch = findUncommentedMatch(source, /templateUrl\s*:\s*['"]([^'"]+)['"]/);
11861
11914
  if (templateUrlMatch?.[1]) {
11862
- const templatePath = join16(fileDir, templateUrlMatch[1]);
11915
+ const templatePath = join17(fileDir, templateUrlMatch[1]);
11863
11916
  if (!existsSync16(templatePath)) {
11864
11917
  throw new Error(`Unable to inline Angular templateUrl "${templateUrlMatch[1]}": file not found at ${templatePath}`);
11865
11918
  }
@@ -11890,7 +11943,7 @@ ${fields}
11890
11943
  }, inlineTemplateAndLowerDeferSync = (source, fileDir) => {
11891
11944
  const templateUrlMatch = findUncommentedMatch(source, /templateUrl\s*:\s*['"]([^'"]+)['"]/);
11892
11945
  if (templateUrlMatch?.[1]) {
11893
- const templatePath = join16(fileDir, templateUrlMatch[1]);
11946
+ const templatePath = join17(fileDir, templateUrlMatch[1]);
11894
11947
  if (!existsSync16(templatePath)) {
11895
11948
  throw new Error(`Unable to inline Angular templateUrl "${templateUrlMatch[1]}": file not found at ${templatePath}`);
11896
11949
  }
@@ -11927,7 +11980,7 @@ ${fields}
11927
11980
  return source;
11928
11981
  const stylePromises = urlMatches.map((urlMatch) => {
11929
11982
  const styleUrl = urlMatch.replace(/['"]/g, "");
11930
- return readAndEscapeFile(join16(fileDir, styleUrl), stylePreprocessors);
11983
+ return readAndEscapeFile(join17(fileDir, styleUrl), stylePreprocessors);
11931
11984
  });
11932
11985
  const results = await Promise.all(stylePromises);
11933
11986
  const inlinedStyles = results.filter(Boolean).map((escaped) => `\`${escaped}\``);
@@ -11938,7 +11991,7 @@ ${fields}
11938
11991
  const styleUrlMatch = findUncommentedMatch(source, /styleUrl\s*:\s*['"]([^'"]+)['"]/);
11939
11992
  if (!styleUrlMatch?.[1])
11940
11993
  return source;
11941
- const escaped = await readAndEscapeFile(join16(fileDir, styleUrlMatch[1]), stylePreprocessors);
11994
+ const escaped = await readAndEscapeFile(join17(fileDir, styleUrlMatch[1]), stylePreprocessors);
11942
11995
  if (!escaped)
11943
11996
  return source;
11944
11997
  return source.slice(0, styleUrlMatch.index) + `styles: [\`${escaped}\`]` + source.slice(styleUrlMatch.index + styleUrlMatch[0].length);
@@ -11973,10 +12026,10 @@ ${fields}
11973
12026
  `${candidate}.tsx`,
11974
12027
  `${candidate}.js`,
11975
12028
  `${candidate}.jsx`,
11976
- join16(candidate, "index.ts"),
11977
- join16(candidate, "index.tsx"),
11978
- join16(candidate, "index.js"),
11979
- join16(candidate, "index.jsx")
12029
+ join17(candidate, "index.ts"),
12030
+ join17(candidate, "index.tsx"),
12031
+ join17(candidate, "index.js"),
12032
+ join17(candidate, "index.jsx")
11980
12033
  ];
11981
12034
  return candidates.find((file3) => existsSync16(file3));
11982
12035
  };
@@ -12003,7 +12056,7 @@ ${fields}
12003
12056
  const inputDir = dirname11(sourcePath);
12004
12057
  const relativeDir = inputDir.startsWith(baseDir) ? inputDir.substring(baseDir.length + 1) : inputDir;
12005
12058
  const fileBase = basename6(sourcePath).replace(/\.[cm]?[tj]sx?$/, ".js");
12006
- return join16(outDir, relativeDir, fileBase);
12059
+ return join17(outDir, relativeDir, fileBase);
12007
12060
  };
12008
12061
  const withCacheBuster = (specifier) => {
12009
12062
  if (!cacheBuster)
@@ -12061,7 +12114,7 @@ ${fields}
12061
12114
  const inputDir = dirname11(actualPath);
12062
12115
  const relativeDir = inputDir.startsWith(baseDir) ? inputDir.substring(baseDir.length + 1) : inputDir;
12063
12116
  const fileBase = basename6(actualPath).replace(/\.[cm]?[tj]sx?$/, ".js");
12064
- const targetDir = join16(outDir, relativeDir);
12117
+ const targetDir = join17(outDir, relativeDir);
12065
12118
  const targetPath = toOutputPath(actualPath);
12066
12119
  const localImports = [];
12067
12120
  const importRewrites = new Map;
@@ -12115,13 +12168,13 @@ export const __ABSOLUTE_PAGE_USES_LEGACY_ANIMATIONS__ = true;
12115
12168
  }
12116
12169
  return allOutputs;
12117
12170
  }, compileAngular = async (entryPoints, outRoot, hmr = false, stylePreprocessors) => {
12118
- const compiledParent = join16(outRoot, "generated");
12171
+ const compiledParent = getFrameworkGeneratedDir("angular");
12119
12172
  if (entryPoints.length === 0) {
12120
12173
  const emptyPaths = [];
12121
12174
  return { clientPaths: [...emptyPaths], serverPaths: [...emptyPaths] };
12122
12175
  }
12123
12176
  const compiledRoot = compiledParent;
12124
- const indexesDir = join16(compiledParent, "indexes");
12177
+ const indexesDir = join17(compiledParent, "indexes");
12125
12178
  await traceAngularPhase("setup/create-indexes-dir", () => fs.mkdir(indexesDir, { recursive: true }));
12126
12179
  const aotOutputs = hmr ? [] : await traceAngularPhase("aot/compile-files", () => compileAngularFiles(entryPoints.map((entry) => resolve16(entry)), compiledRoot, stylePreprocessors), { entries: entryPoints.length });
12127
12180
  const usesLegacyAngularAnimations = await traceAngularPhase("setup/legacy-animation-resolver", () => createLegacyAngularAnimationUsageResolver(outRoot));
@@ -12135,9 +12188,9 @@ export const __ABSOLUTE_PAGE_USES_LEGACY_ANIMATIONS__ = true;
12135
12188
  const fileBase = basename6(resolvedEntry).replace(/\.[tj]s$/, "");
12136
12189
  const jsName = `${fileBase}.js`;
12137
12190
  const compiledFallbackPaths = [
12138
- join16(compiledRoot, relativeEntry),
12139
- join16(compiledRoot, "pages", jsName),
12140
- join16(compiledRoot, jsName)
12191
+ join17(compiledRoot, relativeEntry),
12192
+ join17(compiledRoot, "pages", jsName),
12193
+ join17(compiledRoot, jsName)
12141
12194
  ].map((file3) => resolve16(file3));
12142
12195
  const resolveRawServerFile = (candidatePaths) => {
12143
12196
  const normalizedCandidates = [
@@ -12182,7 +12235,7 @@ export const __ABSOLUTE_PAGE_USES_LEGACY_ANIMATIONS__ = true;
12182
12235
  const usesLegacyAnimations = await traceAngularPhase("wrapper/detect-legacy-animations", () => usesLegacyAngularAnimations(resolvedEntry), { entry: resolvedEntry });
12183
12236
  const serverContentHash = Bun.hash(original).toString(BASE_36_RADIX);
12184
12237
  const cachedWrapper = wrapperOutputCache.get(resolvedEntry);
12185
- const clientFile = join16(indexesDir, jsName);
12238
+ const clientFile = join17(indexesDir, jsName);
12186
12239
  if (hmr && cachedWrapper && cachedWrapper.serverHash === serverContentHash && existsSync16(clientFile) && (usesLegacyAnimations || !original.includes("__ABSOLUTE_PAGE_USES_LEGACY_ANIMATIONS__")) && (!usesLegacyAnimations || original.includes("__ABSOLUTE_PAGE_USES_LEGACY_ANIMATIONS__"))) {
12187
12240
  return {
12188
12241
  clientPath: clientFile,
@@ -12417,9 +12470,10 @@ var init_compileAngular = __esm(() => {
12417
12470
  init_sourceMetadata();
12418
12471
  init_lowerDeferSyntax();
12419
12472
  init_stylePreprocessor();
12473
+ init_generatedDir();
12420
12474
  devClientDir4 = resolveDevClientDir4();
12421
- hmrClientPath5 = join16(devClientDir4, "hmrClient.ts").replace(/\\/g, "/");
12422
- hmrRuntimePath = join16(devClientDir4, "handlers", "angularRuntime.ts").replace(/\\/g, "/");
12475
+ hmrClientPath5 = join17(devClientDir4, "hmrClient.ts").replace(/\\/g, "/");
12476
+ hmrRuntimePath = join17(devClientDir4, "handlers", "angularRuntime.ts").replace(/\\/g, "/");
12423
12477
  jitContentCache = new Map;
12424
12478
  wrapperOutputCache = new Map;
12425
12479
  });
@@ -12873,7 +12927,7 @@ __export(exports_compileEmber, {
12873
12927
  });
12874
12928
  import { existsSync as existsSync17 } from "fs";
12875
12929
  import { mkdir as mkdir5, rm as rm4 } from "fs/promises";
12876
- import { basename as basename7, dirname as dirname12, extname as extname6, join as join17, resolve as resolve17 } from "path";
12930
+ import { basename as basename7, dirname as dirname12, extname as extname6, join as join18, resolve as resolve17 } from "path";
12877
12931
  var {build: bunBuild2, Transpiler: Transpiler3, write: write3, file: file3 } = globalThis.Bun;
12878
12932
  var cachedPreprocessor = null, getPreprocessor = async () => {
12879
12933
  if (cachedPreprocessor)
@@ -12992,7 +13046,7 @@ export const importSync = (specifier) => {
12992
13046
  build.onResolve({ filter: /^@(?:ember|glimmer|simple-dom)\// }, (args) => {
12993
13047
  if (standalonePackages.has(args.path))
12994
13048
  return;
12995
- const internal = join17(cwd, "node_modules/ember-source/dist/packages", args.path, "index.js");
13049
+ const internal = join18(cwd, "node_modules/ember-source/dist/packages", args.path, "index.js");
12996
13050
  if (existsSync17(internal))
12997
13051
  return { path: internal };
12998
13052
  return;
@@ -13040,16 +13094,16 @@ export default PageComponent;
13040
13094
  }
13041
13095
  const transpiled = transpiler4.transformSync(preprocessed);
13042
13096
  const baseName = basename7(resolvedEntry).replace(/\.(gjs|gts|ts|js)$/, "");
13043
- const tmpDir = join17(compiledRoot, "_tmp");
13044
- const serverDir = join17(compiledRoot, "server");
13045
- const clientDir = join17(compiledRoot, "client");
13097
+ const tmpDir = join18(compiledRoot, "_tmp");
13098
+ const serverDir = join18(compiledRoot, "server");
13099
+ const clientDir = join18(compiledRoot, "client");
13046
13100
  await Promise.all([
13047
13101
  mkdir5(tmpDir, { recursive: true }),
13048
13102
  mkdir5(serverDir, { recursive: true }),
13049
13103
  mkdir5(clientDir, { recursive: true })
13050
13104
  ]);
13051
- const tmpPagePath = resolve17(join17(tmpDir, `${baseName}.module.js`));
13052
- const tmpHarnessPath = resolve17(join17(tmpDir, `${baseName}.harness.js`));
13105
+ const tmpPagePath = resolve17(join18(tmpDir, `${baseName}.module.js`));
13106
+ const tmpHarnessPath = resolve17(join18(tmpDir, `${baseName}.harness.js`));
13053
13107
  await Promise.all([
13054
13108
  write3(tmpPagePath, transpiled),
13055
13109
  write3(tmpHarnessPath, generateServerHarness(tmpPagePath))
@@ -13057,7 +13111,7 @@ export default PageComponent;
13057
13111
  const stagedSourceMap = new Map([
13058
13112
  [tmpPagePath, resolvedEntry]
13059
13113
  ]);
13060
- const serverPath = join17(serverDir, `${baseName}.js`);
13114
+ const serverPath = join18(serverDir, `${baseName}.js`);
13061
13115
  const buildResult = await bunBuild2({
13062
13116
  entrypoints: [tmpHarnessPath],
13063
13117
  format: "esm",
@@ -13074,7 +13128,7 @@ export default PageComponent;
13074
13128
  console.warn(`\u26A0\uFE0F Ember server build for ${baseName} had errors:`, buildResult.logs);
13075
13129
  }
13076
13130
  await rm4(tmpDir, { force: true, recursive: true });
13077
- const clientPath = join17(clientDir, `${baseName}.js`);
13131
+ const clientPath = join18(clientDir, `${baseName}.js`);
13078
13132
  await write3(clientPath, transpiled);
13079
13133
  return { clientPath, serverPath };
13080
13134
  }, compileEmber = async (entries, emberDir, cwd = process.cwd(), _hmr = false) => {
@@ -13084,7 +13138,7 @@ export default PageComponent;
13084
13138
  serverPaths: []
13085
13139
  };
13086
13140
  }
13087
- const compiledRoot = join17(emberDir, "generated");
13141
+ const compiledRoot = getFrameworkGeneratedDir("ember");
13088
13142
  const outputs = await Promise.all(entries.map((entry) => compileEmberFile(entry, compiledRoot, cwd)));
13089
13143
  return {
13090
13144
  clientPaths: outputs.map((o) => o.clientPath),
@@ -13102,8 +13156,9 @@ export default PageComponent;
13102
13156
  preprocessed = rewriteTemplateEvalToScope(result.code);
13103
13157
  }
13104
13158
  return transpiler4.transformSync(preprocessed);
13105
- }, clearEmberCompilerCache = () => {}, getEmberCompiledRoot = (emberDir) => join17(emberDir, "generated"), getEmberServerCompiledDir = (emberDir) => join17(getEmberCompiledRoot(emberDir), "server"), getEmberClientCompiledDir = (emberDir) => join17(getEmberCompiledRoot(emberDir), "client");
13159
+ }, clearEmberCompilerCache = () => {}, getEmberCompiledRoot = (_emberDir) => getFrameworkGeneratedDir("ember"), getEmberServerCompiledDir = (emberDir) => join18(getEmberCompiledRoot(emberDir), "server"), getEmberClientCompiledDir = (emberDir) => join18(getEmberCompiledRoot(emberDir), "client");
13106
13160
  var init_compileEmber = __esm(() => {
13161
+ init_generatedDir();
13107
13162
  transpiler4 = new Transpiler3({
13108
13163
  loader: "ts",
13109
13164
  target: "browser",
@@ -13123,7 +13178,7 @@ __export(exports_buildReactVendor, {
13123
13178
  buildReactVendor: () => buildReactVendor
13124
13179
  });
13125
13180
  import { existsSync as existsSync18, mkdirSync as mkdirSync7 } from "fs";
13126
- import { join as join18, resolve as resolve18 } from "path";
13181
+ import { join as join19, resolve as resolve18 } from "path";
13127
13182
  import { rm as rm5 } from "fs/promises";
13128
13183
  var {build: bunBuild3 } = globalThis.Bun;
13129
13184
  var resolveJsxDevRuntimeCompatPath = () => {
@@ -13177,14 +13232,14 @@ var resolveJsxDevRuntimeCompatPath = () => {
13177
13232
  `)}
13178
13233
  `;
13179
13234
  }, buildReactVendor = async (buildDir) => {
13180
- const vendorDir = join18(buildDir, "react", "vendor");
13235
+ const vendorDir = join19(buildDir, "react", "vendor");
13181
13236
  mkdirSync7(vendorDir, { recursive: true });
13182
- const tmpDir = join18(buildDir, "_vendor_tmp");
13237
+ const tmpDir = join19(buildDir, "_vendor_tmp");
13183
13238
  mkdirSync7(tmpDir, { recursive: true });
13184
13239
  const specifiers = resolveVendorSpecifiers();
13185
13240
  const entrypoints = await Promise.all(specifiers.map(async (specifier) => {
13186
13241
  const safeName = toSafeFileName(specifier);
13187
- const entryPath = join18(tmpDir, `${safeName}.ts`);
13242
+ const entryPath = join19(tmpDir, `${safeName}.ts`);
13188
13243
  const source = await generateEntrySource(specifier);
13189
13244
  await Bun.write(entryPath, source);
13190
13245
  return entryPath;
@@ -13249,7 +13304,7 @@ __export(exports_buildAngularVendor, {
13249
13304
  buildAngularServerVendor: () => buildAngularServerVendor
13250
13305
  });
13251
13306
  import { mkdirSync as mkdirSync8 } from "fs";
13252
- import { join as join19 } from "path";
13307
+ import { join as join20 } from "path";
13253
13308
  import { rm as rm6 } from "fs/promises";
13254
13309
  var {build: bunBuild4, Glob: Glob6 } = globalThis.Bun;
13255
13310
  var REQUIRED_ANGULAR_SPECIFIERS_BASE, requiredAngularSpecifiers = (jitMode) => jitMode ? [...REQUIRED_ANGULAR_SPECIFIERS_BASE, "@angular/compiler"] : REQUIRED_ANGULAR_SPECIFIERS_BASE, SERVER_ONLY_ANGULAR_SPECIFIERS, BUILD_ONLY_ANGULAR_SPECIFIER_PREFIXES, isBuildOnlyAngularSpecifier = (spec) => BUILD_ONLY_ANGULAR_SPECIFIER_PREFIXES.some((prefix) => spec === prefix || spec.startsWith(`${prefix}/`)), SCAN_SKIP_DIRS, isResolvable2 = (specifier) => {
@@ -13346,14 +13401,14 @@ var REQUIRED_ANGULAR_SPECIFIERS_BASE, requiredAngularSpecifiers = (jitMode) => j
13346
13401
  await collectTransitiveAngularSpecs([...angular, ...transitiveRoots], angular);
13347
13402
  return Array.from(angular).filter(isResolvable2);
13348
13403
  }, buildAngularVendor = async (buildDir, directories = [], linkerJitMode = false, depVendorSpecifiers = []) => {
13349
- const vendorDir = join19(buildDir, "angular", "vendor");
13404
+ const vendorDir = join20(buildDir, "angular", "vendor");
13350
13405
  mkdirSync8(vendorDir, { recursive: true });
13351
- const tmpDir = join19(buildDir, "_angular_vendor_tmp");
13406
+ const tmpDir = join20(buildDir, "_angular_vendor_tmp");
13352
13407
  mkdirSync8(tmpDir, { recursive: true });
13353
13408
  const specifiers = await resolveAngularSpecifiers(directories, linkerJitMode);
13354
13409
  const entrypoints = await Promise.all(specifiers.map(async (specifier) => {
13355
13410
  const safeName = toSafeFileName2(specifier);
13356
- const entryPath = join19(tmpDir, `${safeName}.ts`);
13411
+ const entryPath = join20(tmpDir, `${safeName}.ts`);
13357
13412
  await Bun.write(entryPath, await generateVendorEntrySource(specifier));
13358
13413
  return entryPath;
13359
13414
  }));
@@ -13384,9 +13439,9 @@ var REQUIRED_ANGULAR_SPECIFIERS_BASE, requiredAngularSpecifiers = (jitMode) => j
13384
13439
  const specifiers = await resolveAngularSpecifiers(directories, linkerJitMode);
13385
13440
  return computeAngularVendorPaths(specifiers);
13386
13441
  }, buildAngularServerVendor = async (buildDir, directories = [], linkerJitMode = false) => {
13387
- const vendorDir = join19(buildDir, "angular", "vendor", "server");
13442
+ const vendorDir = join20(buildDir, "angular", "vendor", "server");
13388
13443
  mkdirSync8(vendorDir, { recursive: true });
13389
- const tmpDir = join19(buildDir, "_angular_server_vendor_tmp");
13444
+ const tmpDir = join20(buildDir, "_angular_server_vendor_tmp");
13390
13445
  mkdirSync8(tmpDir, { recursive: true });
13391
13446
  const browserSpecs = await resolveAngularSpecifiers(directories, linkerJitMode);
13392
13447
  const allSpecs = new Set(browserSpecs);
@@ -13397,7 +13452,7 @@ var REQUIRED_ANGULAR_SPECIFIERS_BASE, requiredAngularSpecifiers = (jitMode) => j
13397
13452
  const specifiers = Array.from(allSpecs);
13398
13453
  const entrypoints = await Promise.all(specifiers.map(async (specifier) => {
13399
13454
  const safeName = toSafeFileName2(specifier);
13400
- const entryPath = join19(tmpDir, `${safeName}.ts`);
13455
+ const entryPath = join20(tmpDir, `${safeName}.ts`);
13401
13456
  await Bun.write(entryPath, await generateVendorEntrySource(specifier));
13402
13457
  return entryPath;
13403
13458
  }));
@@ -13419,9 +13474,9 @@ var REQUIRED_ANGULAR_SPECIFIERS_BASE, requiredAngularSpecifiers = (jitMode) => j
13419
13474
  return specifiers;
13420
13475
  }, computeAngularServerVendorPaths = (buildDir, specifiers) => {
13421
13476
  const paths = {};
13422
- const vendorDir = join19(buildDir, "angular", "vendor", "server");
13477
+ const vendorDir = join20(buildDir, "angular", "vendor", "server");
13423
13478
  for (const specifier of specifiers) {
13424
- paths[specifier] = join19(vendorDir, `${toSafeFileName2(specifier)}.js`);
13479
+ paths[specifier] = join20(vendorDir, `${toSafeFileName2(specifier)}.js`);
13425
13480
  }
13426
13481
  return paths;
13427
13482
  }, computeAngularServerVendorPathsAsync = async (buildDir, directories = [], linkerJitMode = true) => {
@@ -13477,17 +13532,17 @@ __export(exports_buildVueVendor, {
13477
13532
  buildVueVendor: () => buildVueVendor
13478
13533
  });
13479
13534
  import { mkdirSync as mkdirSync9 } from "fs";
13480
- import { join as join20 } from "path";
13535
+ import { join as join21 } from "path";
13481
13536
  import { rm as rm7 } from "fs/promises";
13482
13537
  var {build: bunBuild5 } = globalThis.Bun;
13483
13538
  var vueSpecifiers, toSafeFileName3 = (specifier) => specifier.replace(/\//g, "_"), buildVueVendor = async (buildDir) => {
13484
- const vendorDir = join20(buildDir, "vue", "vendor");
13539
+ const vendorDir = join21(buildDir, "vue", "vendor");
13485
13540
  mkdirSync9(vendorDir, { recursive: true });
13486
- const tmpDir = join20(buildDir, "_vue_vendor_tmp");
13541
+ const tmpDir = join21(buildDir, "_vue_vendor_tmp");
13487
13542
  mkdirSync9(tmpDir, { recursive: true });
13488
13543
  const entrypoints = await Promise.all(vueSpecifiers.map(async (specifier) => {
13489
13544
  const safeName = toSafeFileName3(specifier);
13490
- const entryPath = join20(tmpDir, `${safeName}.ts`);
13545
+ const entryPath = join21(tmpDir, `${safeName}.ts`);
13491
13546
  await Bun.write(entryPath, `export * from '${specifier}';
13492
13547
  `);
13493
13548
  return entryPath;
@@ -13515,7 +13570,7 @@ var vueSpecifiers, toSafeFileName3 = (specifier) => specifier.replace(/\//g, "_"
13515
13570
  const { readFileSync: readFileSync12, writeFileSync: writeFileSync7, readdirSync } = await import("fs");
13516
13571
  const files = readdirSync(vendorDir).filter((f2) => f2.endsWith(".js"));
13517
13572
  for (const file4 of files) {
13518
- const filePath = join20(vendorDir, file4);
13573
+ const filePath = join21(vendorDir, file4);
13519
13574
  const content = readFileSync12(filePath, "utf-8");
13520
13575
  if (!content.includes("__VUE_HMR_RUNTIME__"))
13521
13576
  continue;
@@ -13542,7 +13597,7 @@ __export(exports_buildSvelteVendor, {
13542
13597
  buildSvelteVendor: () => buildSvelteVendor
13543
13598
  });
13544
13599
  import { mkdirSync as mkdirSync10 } from "fs";
13545
- import { join as join21 } from "path";
13600
+ import { join as join22 } from "path";
13546
13601
  import { rm as rm8 } from "fs/promises";
13547
13602
  var {build: bunBuild6 } = globalThis.Bun;
13548
13603
  var svelteSpecifiers, isResolvable3 = (specifier) => {
@@ -13556,13 +13611,13 @@ var svelteSpecifiers, isResolvable3 = (specifier) => {
13556
13611
  const specifiers = resolveVendorSpecifiers2();
13557
13612
  if (specifiers.length === 0)
13558
13613
  return;
13559
- const vendorDir = join21(buildDir, "svelte", "vendor");
13614
+ const vendorDir = join22(buildDir, "svelte", "vendor");
13560
13615
  mkdirSync10(vendorDir, { recursive: true });
13561
- const tmpDir = join21(buildDir, "_svelte_vendor_tmp");
13616
+ const tmpDir = join22(buildDir, "_svelte_vendor_tmp");
13562
13617
  mkdirSync10(tmpDir, { recursive: true });
13563
13618
  const entrypoints = await Promise.all(specifiers.map(async (specifier) => {
13564
13619
  const safeName = toSafeFileName4(specifier);
13565
- const entryPath = join21(tmpDir, `${safeName}.ts`);
13620
+ const entryPath = join22(tmpDir, `${safeName}.ts`);
13566
13621
  await Bun.write(entryPath, `export * from '${specifier}';
13567
13622
  `);
13568
13623
  return entryPath;
@@ -13612,7 +13667,7 @@ __export(exports_rewriteImportsPlugin, {
13612
13667
  buildWithImportRewrite: () => buildWithImportRewrite
13613
13668
  });
13614
13669
  import { readdir as readdir3 } from "fs/promises";
13615
- import { join as join22 } from "path";
13670
+ import { join as join23 } from "path";
13616
13671
  var escapeRegex2 = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), jsRewriteImports = (content, replacements) => {
13617
13672
  let result = content;
13618
13673
  for (const [specifier, webPath] of replacements) {
@@ -13741,7 +13796,7 @@ ${content}`;
13741
13796
  const entries = await readdir3(dir);
13742
13797
  for (const entry of entries) {
13743
13798
  if (entry.endsWith(".js"))
13744
- allFiles.push(join22(dir, entry));
13799
+ allFiles.push(join23(dir, entry));
13745
13800
  }
13746
13801
  } catch {}
13747
13802
  }
@@ -13790,7 +13845,7 @@ import {
13790
13845
  statSync,
13791
13846
  writeFileSync as writeFileSync7
13792
13847
  } from "fs";
13793
- import { basename as basename8, dirname as dirname13, extname as extname7, join as join23, relative as relative10, resolve as resolve19 } from "path";
13848
+ import { basename as basename8, dirname as dirname13, extname as extname7, join as join24, relative as relative10, resolve as resolve19 } from "path";
13794
13849
  import { cwd, env as env2, exit } from "process";
13795
13850
  var {build: bunBuild7, Glob: Glob7 } = globalThis.Bun;
13796
13851
  var isDev, isBuildTraceEnabled = () => {
@@ -13868,8 +13923,8 @@ var isDev, isBuildTraceEnabled = () => {
13868
13923
  mkdirSync11(htmxDestDir, { recursive: true });
13869
13924
  const glob = new Glob7("htmx*.min.js");
13870
13925
  for (const relPath of glob.scanSync({ cwd: htmxDir })) {
13871
- const src = join23(htmxDir, relPath);
13872
- const dest = join23(htmxDestDir, "htmx.min.js");
13926
+ const src = join24(htmxDir, relPath);
13927
+ const dest = join24(htmxDestDir, "htmx.min.js");
13873
13928
  copyFileSync(src, dest);
13874
13929
  return;
13875
13930
  }
@@ -13944,7 +13999,7 @@ var isDev, isBuildTraceEnabled = () => {
13944
13999
  vuePagesPath
13945
14000
  }) => {
13946
14001
  const { readdirSync: readDir } = await import("fs");
13947
- const devIndexDir = join23(buildPath, "_src_indexes");
14002
+ const devIndexDir = join24(buildPath, "_src_indexes");
13948
14003
  mkdirSync11(devIndexDir, { recursive: true });
13949
14004
  if (reactIndexesPath && reactPagesPath) {
13950
14005
  copyReactDevIndexes(reactIndexesPath, reactPagesPath, devIndexDir, readDir);
@@ -13962,35 +14017,35 @@ var isDev, isBuildTraceEnabled = () => {
13962
14017
  const indexFiles = readDir(reactIndexesPath).filter((file4) => file4.endsWith(".tsx"));
13963
14018
  const pagesRel = relative10(process.cwd(), resolve19(reactPagesPath)).replace(/\\/g, "/");
13964
14019
  for (const file4 of indexFiles) {
13965
- let content = readFileSync12(join23(reactIndexesPath, file4), "utf-8");
14020
+ let content = readFileSync12(join24(reactIndexesPath, file4), "utf-8");
13966
14021
  content = content.replace(/from\s*['"]([^'"]*\/pages\/([^'"]+))['"]/g, (_match, _fullPath, componentName) => `from '/@src/${pagesRel}/${componentName}'`);
13967
- writeFileSync7(join23(devIndexDir, file4), content);
14022
+ writeFileSync7(join24(devIndexDir, file4), content);
13968
14023
  }
13969
14024
  }, copySvelteDevIndexes = (svelteDir, sveltePagesPath, svelteEntries, devIndexDir) => {
13970
- const svelteIndexDir = join23(svelteDir, "generated", "indexes");
14025
+ const svelteIndexDir = join24(getFrameworkGeneratedDir("svelte"), "indexes");
13971
14026
  const sveltePageEntries = svelteEntries.filter((file4) => resolve19(file4).startsWith(resolve19(sveltePagesPath)));
13972
14027
  for (const entry of sveltePageEntries) {
13973
14028
  const name = basename8(entry).replace(/\.svelte(\.(ts|js))?$/, "");
13974
- const indexFile = join23(svelteIndexDir, "pages", `${name}.js`);
14029
+ const indexFile = join24(svelteIndexDir, "pages", `${name}.js`);
13975
14030
  if (!existsSync19(indexFile))
13976
14031
  continue;
13977
14032
  let content = readFileSync12(indexFile, "utf-8");
13978
14033
  const srcRel = relative10(process.cwd(), resolve19(entry)).replace(/\\/g, "/");
13979
14034
  content = content.replace(/import\s+Component\s+from\s+['"]([^'"]+)['"]/, `import Component from "/@src/${srcRel}"`);
13980
- writeFileSync7(join23(devIndexDir, `${name}.svelte.js`), content);
14035
+ writeFileSync7(join24(devIndexDir, `${name}.svelte.js`), content);
13981
14036
  }
13982
14037
  }, copyVueDevIndexes = (vueDir, vuePagesPath, vueEntries, devIndexDir) => {
13983
- const vueIndexDir = join23(vueDir, "generated", "indexes");
14038
+ const vueIndexDir = join24(getFrameworkGeneratedDir("vue"), "indexes");
13984
14039
  const vuePageEntries = vueEntries.filter((file4) => resolve19(file4).startsWith(resolve19(vuePagesPath)));
13985
14040
  for (const entry of vuePageEntries) {
13986
14041
  const name = basename8(entry, ".vue");
13987
- const indexFile = join23(vueIndexDir, `${name}.js`);
14042
+ const indexFile = join24(vueIndexDir, `${name}.js`);
13988
14043
  if (!existsSync19(indexFile))
13989
14044
  continue;
13990
14045
  let content = readFileSync12(indexFile, "utf-8");
13991
14046
  const srcRel = relative10(process.cwd(), resolve19(entry)).replace(/\\/g, "/");
13992
14047
  content = content.replace(/import\s+Comp(?:\s*,\s*\*\s+as\s+\w+)?\s+from\s+['"]([^'"]+)['"]/, (match) => match.replace(/from\s+['"][^'"]+['"]/, `from "/@src/${srcRel}"`));
13993
- writeFileSync7(join23(devIndexDir, `${name}.vue.js`), content);
14048
+ writeFileSync7(join24(devIndexDir, `${name}.vue.js`), content);
13994
14049
  }
13995
14050
  }, resolveVueRuntimeId = (content, firstUseName, outputPath, projectRoot) => {
13996
14051
  const varIdx = content.indexOf(`var ${firstUseName} =`);
@@ -14212,10 +14267,10 @@ ${content.slice(firstUseIdx)}`;
14212
14267
  restoreTracePhase();
14213
14268
  return;
14214
14269
  }
14215
- const traceDir = join23(buildPath2, ".absolute-trace");
14270
+ const traceDir = join24(buildPath2, ".absolute-trace");
14216
14271
  const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
14217
14272
  mkdirSync11(traceDir, { recursive: true });
14218
- writeFileSync7(join23(traceDir, `build-trace-${timestamp}.json`), JSON.stringify({
14273
+ writeFileSync7(join24(traceDir, `build-trace-${timestamp}.json`), JSON.stringify({
14219
14274
  events: traceEvents,
14220
14275
  frameworks: traceFrameworkNames,
14221
14276
  generatedAt: new Date().toISOString(),
@@ -14246,15 +14301,15 @@ ${content.slice(firstUseIdx)}`;
14246
14301
  const stylesPath = typeof stylesConfig === "string" ? stylesConfig : stylesConfig?.path;
14247
14302
  const stylesIgnore = typeof stylesConfig === "object" ? stylesConfig.ignore : undefined;
14248
14303
  const stylesDir = stylesPath && validateSafePath(stylesPath, projectRoot);
14249
- const reactIndexesPath = reactDir && join23(reactDir, "generated", "indexes");
14250
- const reactPagesPath = reactDir && join23(reactDir, "pages");
14251
- const htmlPagesPath = htmlDir && join23(htmlDir, "pages");
14252
- const htmlScriptsPath = htmlDir && join23(htmlDir, "scripts");
14253
- const sveltePagesPath = svelteDir && join23(svelteDir, "pages");
14254
- const vuePagesPath = vueDir && join23(vueDir, "pages");
14255
- const htmxPagesPath = htmxDir && join23(htmxDir, "pages");
14256
- const angularPagesPath = angularDir && join23(angularDir, "pages");
14257
- const emberPagesPath = emberDir && join23(emberDir, "pages");
14304
+ const reactIndexesPath = reactDir && join24(getFrameworkGeneratedDir("react"), "indexes");
14305
+ const reactPagesPath = reactDir && join24(reactDir, "pages");
14306
+ const htmlPagesPath = htmlDir && join24(htmlDir, "pages");
14307
+ const htmlScriptsPath = htmlDir && join24(htmlDir, "scripts");
14308
+ const sveltePagesPath = svelteDir && join24(svelteDir, "pages");
14309
+ const vuePagesPath = vueDir && join24(vueDir, "pages");
14310
+ const htmxPagesPath = htmxDir && join24(htmxDir, "pages");
14311
+ const angularPagesPath = angularDir && join24(angularDir, "pages");
14312
+ const emberPagesPath = emberDir && join24(emberDir, "pages");
14258
14313
  const frontends = [
14259
14314
  reactDir,
14260
14315
  htmlDir,
@@ -14281,36 +14336,40 @@ ${content.slice(firstUseIdx)}`;
14281
14336
  mode: mode ?? (isDev ? "development" : "production"),
14282
14337
  tailwind: Boolean(tailwind)
14283
14338
  });
14339
+ const generatedRoot = getGeneratedRoot(projectRoot);
14284
14340
  const sourceClientRoots = [
14285
- reactDir,
14286
- svelteDir,
14287
14341
  htmlDir,
14288
- vueDir,
14289
- angularDir,
14342
+ htmxDir,
14290
14343
  islandBootstrapPath && dirname13(islandBootstrapPath)
14291
14344
  ].filter((dir) => Boolean(dir));
14292
- const clientRoot = isSingle ? sourceClientRoots[0] ?? projectRoot : commonAncestor(sourceClientRoots, projectRoot);
14345
+ const usesGenerated = Boolean(reactDir) || Boolean(svelteDir) || Boolean(vueDir) || Boolean(angularDir);
14346
+ if (usesGenerated)
14347
+ sourceClientRoots.push(generatedRoot);
14348
+ const clientRoot = sourceClientRoots.length === 1 ? sourceClientRoots[0] ?? projectRoot : commonAncestor(sourceClientRoots, projectRoot);
14293
14349
  const serverDirMap = [];
14294
14350
  if (svelteDir)
14295
14351
  serverDirMap.push({
14296
- dir: svelteDir,
14297
- subdir: join23("generated", "server")
14352
+ dir: getFrameworkGeneratedDir("svelte", projectRoot),
14353
+ subdir: "server"
14298
14354
  });
14299
14355
  if (vueDir)
14300
14356
  serverDirMap.push({
14301
- dir: vueDir,
14302
- subdir: join23("generated", "server")
14357
+ dir: getFrameworkGeneratedDir("vue", projectRoot),
14358
+ subdir: "server"
14303
14359
  });
14304
14360
  if (angularDir)
14305
- serverDirMap.push({ dir: angularDir, subdir: "generated" });
14361
+ serverDirMap.push({
14362
+ dir: getFrameworkGeneratedDir("angular", projectRoot),
14363
+ subdir: ""
14364
+ });
14306
14365
  let serverOutDir;
14307
14366
  let serverRoot;
14308
14367
  if (serverDirMap.length === 1) {
14309
14368
  const [firstEntry] = serverDirMap;
14310
14369
  if (!firstEntry)
14311
14370
  throw new Error("Expected at least one server directory entry");
14312
- serverRoot = join23(firstEntry.dir, firstEntry.subdir);
14313
- serverOutDir = join23(buildPath, basename8(firstEntry.dir));
14371
+ serverRoot = join24(firstEntry.dir, firstEntry.subdir);
14372
+ serverOutDir = join24(buildPath, basename8(firstEntry.dir));
14314
14373
  } else if (serverDirMap.length > 1) {
14315
14374
  serverRoot = commonAncestor(serverDirMap.map((entry) => entry.dir), projectRoot);
14316
14375
  serverOutDir = buildPath;
@@ -14338,7 +14397,7 @@ ${content.slice(firstUseIdx)}`;
14338
14397
  await tracePhase("react/index-generation", () => generateReactIndexFiles(reactPagesPath, reactIndexesPath, hmr));
14339
14398
  }
14340
14399
  if (assetsPath && (!isIncremental || normalizedIncrementalFiles?.some((f2) => f2.includes("/assets/")))) {
14341
- await tracePhase("assets/copy", () => cpSync(assetsPath, join23(buildPath, "assets"), {
14400
+ await tracePhase("assets/copy", () => cpSync(assetsPath, join24(buildPath, "assets"), {
14342
14401
  force: true,
14343
14402
  recursive: true
14344
14403
  }));
@@ -14392,7 +14451,7 @@ ${content.slice(firstUseIdx)}`;
14392
14451
  const reactEntries = isIncremental && reactIndexesPath && reactPagesPath ? filterToIncrementalEntries(allReactEntries, (entry) => {
14393
14452
  if (entry.startsWith(resolve19(reactIndexesPath))) {
14394
14453
  const pageName = basename8(entry, ".tsx");
14395
- return join23(reactPagesPath, `${pageName}.tsx`);
14454
+ return join24(reactPagesPath, `${pageName}.tsx`);
14396
14455
  }
14397
14456
  return null;
14398
14457
  }) : allReactEntries;
@@ -14496,7 +14555,7 @@ ${content.slice(firstUseIdx)}`;
14496
14555
  const compileReactConventions = async () => {
14497
14556
  if (reactConventionSources.length === 0)
14498
14557
  return emptyStringArray;
14499
- const destDir = join23(buildPath, "conventions", "react");
14558
+ const destDir = join24(buildPath, "conventions", "react");
14500
14559
  rmSync2(destDir, { force: true, recursive: true });
14501
14560
  mkdirSync11(destDir, { recursive: true });
14502
14561
  const destPaths = [];
@@ -14540,7 +14599,7 @@ ${content.slice(firstUseIdx)}`;
14540
14599
  angularConventionSources.length > 0 && angularDir ? tracePhase("compile/convention-angular", () => Promise.resolve().then(() => (init_compileAngular(), exports_compileAngular)).then((mod) => mod.compileAngular(angularConventionSources, angularDir, hmr, styleTransformConfig))) : { serverPaths: emptyStringArray }
14541
14600
  ]);
14542
14601
  const bundleConventionFiles = async (framework, compiledPaths) => {
14543
- const destDir = join23(buildPath, "conventions", framework);
14602
+ const destDir = join24(buildPath, "conventions", framework);
14544
14603
  rmSync2(destDir, { force: true, recursive: true });
14545
14604
  mkdirSync11(destDir, { recursive: true });
14546
14605
  const destPaths = [];
@@ -14613,7 +14672,7 @@ ${content.slice(firstUseIdx)}`;
14613
14672
  }
14614
14673
  })) : {
14615
14674
  entries: [],
14616
- generatedRoot: join23(buildPath, "_island_entries")
14675
+ generatedRoot: join24(buildPath, "_island_entries")
14617
14676
  };
14618
14677
  const islandClientEntryPoints = islandEntryResult.entries.map((entry) => entry.entryPath);
14619
14678
  if (serverEntryPoints.length === 0 && reactClientEntryPoints.length === 0 && nonReactClientEntryPoints.length === 0 && islandClientEntryPoints.length === 0 && htmxDir === undefined && htmlDir === undefined) {
@@ -14649,7 +14708,7 @@ ${content.slice(firstUseIdx)}`;
14649
14708
  return {};
14650
14709
  }
14651
14710
  if (hmr && reactIndexesPath && reactClientEntryPoints.length > 0) {
14652
- const refreshEntry = join23(reactIndexesPath, "_refresh.tsx");
14711
+ const refreshEntry = join24(reactIndexesPath, "_refresh.tsx");
14653
14712
  if (!reactClientEntryPoints.includes(refreshEntry))
14654
14713
  reactClientEntryPoints.push(refreshEntry);
14655
14714
  }
@@ -14748,19 +14807,19 @@ ${content.slice(firstUseIdx)}`;
14748
14807
  throw: false
14749
14808
  }, resolveBunBuildOverride(bunBuildConfig, "reactClient")) : undefined;
14750
14809
  if (reactDir && reactClientEntryPoints.length > 0) {
14751
- rmSync2(join23(buildPath, "react", "generated", "indexes"), {
14810
+ rmSync2(join24(buildPath, "react", "generated", "indexes"), {
14752
14811
  force: true,
14753
14812
  recursive: true
14754
14813
  });
14755
14814
  }
14756
14815
  if (angularDir && angularClientPaths.length > 0) {
14757
- rmSync2(join23(buildPath, "angular", "indexes"), {
14816
+ rmSync2(join24(buildPath, "angular", "indexes"), {
14758
14817
  force: true,
14759
14818
  recursive: true
14760
14819
  });
14761
14820
  }
14762
14821
  if (islandClientEntryPoints.length > 0) {
14763
- rmSync2(join23(buildPath, "islands"), {
14822
+ rmSync2(join24(buildPath, "islands"), {
14764
14823
  force: true,
14765
14824
  recursive: true
14766
14825
  });
@@ -14829,7 +14888,7 @@ ${content.slice(firstUseIdx)}`;
14829
14888
  globalCssEntries.length > 0 ? tracePhase("bun/global-css", () => bunBuild7(mergeBunBuildConfig({
14830
14889
  entrypoints: globalCssEntries,
14831
14890
  naming: `[dir]/[name].[hash].[ext]`,
14832
- outdir: stylesDir ? join23(buildPath, basename8(stylesDir)) : buildPath,
14891
+ outdir: stylesDir ? join24(buildPath, basename8(stylesDir)) : buildPath,
14833
14892
  plugins: [stylePreprocessorPlugin2],
14834
14893
  root: stylesDir || clientRoot,
14835
14894
  target: "browser",
@@ -14838,7 +14897,7 @@ ${content.slice(firstUseIdx)}`;
14838
14897
  vueCssPaths.length > 0 ? tracePhase("bun/vue-css", () => bunBuild7(mergeBunBuildConfig({
14839
14898
  entrypoints: vueCssPaths,
14840
14899
  naming: `[name].[hash].[ext]`,
14841
- outdir: join23(buildPath, assetsPath ? basename8(assetsPath) : "assets", "css"),
14900
+ outdir: join24(buildPath, assetsPath ? basename8(assetsPath) : "assets", "css"),
14842
14901
  target: "browser",
14843
14902
  throw: false
14844
14903
  }, resolveBunBuildOverride(bunBuildConfig, "vueCss")))) : undefined
@@ -14989,7 +15048,7 @@ ${content.slice(firstUseIdx)}`;
14989
15048
  const processHtmlPages = async () => {
14990
15049
  if (!(htmlDir && htmlPagesPath))
14991
15050
  return;
14992
- const outputHtmlPages = isSingle ? join23(buildPath, "pages") : join23(buildPath, basename8(htmlDir), "pages");
15051
+ const outputHtmlPages = isSingle ? join24(buildPath, "pages") : join24(buildPath, basename8(htmlDir), "pages");
14993
15052
  mkdirSync11(outputHtmlPages, { recursive: true });
14994
15053
  cpSync(htmlPagesPath, outputHtmlPages, {
14995
15054
  force: true,
@@ -15011,14 +15070,14 @@ ${content.slice(firstUseIdx)}`;
15011
15070
  const processHtmxPages = async () => {
15012
15071
  if (!(htmxDir && htmxPagesPath))
15013
15072
  return;
15014
- const outputHtmxPages = isSingle ? join23(buildPath, "pages") : join23(buildPath, basename8(htmxDir), "pages");
15073
+ const outputHtmxPages = isSingle ? join24(buildPath, "pages") : join24(buildPath, basename8(htmxDir), "pages");
15015
15074
  mkdirSync11(outputHtmxPages, { recursive: true });
15016
15075
  cpSync(htmxPagesPath, outputHtmxPages, {
15017
15076
  force: true,
15018
15077
  recursive: true
15019
15078
  });
15020
15079
  if (shouldCopyHtmx) {
15021
- const htmxDestDir = isSingle ? buildPath : join23(buildPath, basename8(htmxDir));
15080
+ const htmxDestDir = isSingle ? buildPath : join24(buildPath, basename8(htmxDir));
15022
15081
  copyHtmxVendor(htmxDir, htmxDestDir);
15023
15082
  }
15024
15083
  if (shouldUpdateHtmxAssetPaths) {
@@ -15079,9 +15138,9 @@ ${content.slice(firstUseIdx)}`;
15079
15138
  writeBuildTrace(buildPath);
15080
15139
  return { conventions: conventionsMap, manifest };
15081
15140
  }
15082
- writeFileSync7(join23(buildPath, "manifest.json"), JSON.stringify(manifest, null, "\t"));
15141
+ writeFileSync7(join24(buildPath, "manifest.json"), JSON.stringify(manifest, null, "\t"));
15083
15142
  if (Object.keys(conventionsMap).length > 0) {
15084
- writeFileSync7(join23(buildPath, "conventions.json"), JSON.stringify(conventionsMap, null, "\t"));
15143
+ writeFileSync7(join24(buildPath, "conventions.json"), JSON.stringify(conventionsMap, null, "\t"));
15085
15144
  }
15086
15145
  writeBuildTrace(buildPath);
15087
15146
  if (tailwind && mode === "production") {
@@ -15116,6 +15175,7 @@ var init_build = __esm(() => {
15116
15175
  init_cleanStaleOutputs();
15117
15176
  init_cleanup();
15118
15177
  init_commonAncestor();
15178
+ init_generatedDir();
15119
15179
  init_buildDirectoryLock();
15120
15180
  init_logger();
15121
15181
  init_validateSafePath();
@@ -15179,7 +15239,7 @@ var init_build = __esm(() => {
15179
15239
 
15180
15240
  // src/build/buildEmberVendor.ts
15181
15241
  import { mkdirSync as mkdirSync12, existsSync as existsSync20 } from "fs";
15182
- import { join as join24 } from "path";
15242
+ import { join as join25 } from "path";
15183
15243
  import { rm as rm9 } from "fs/promises";
15184
15244
  var {build: bunBuild8 } = globalThis.Bun;
15185
15245
  var toSafeFileName5 = (specifier) => specifier.replace(/^@/, "").replace(/\//g, "_"), generateMacrosShim = () => `// Generated shim for @embroider/macros \u2014 provides minimal runtime
@@ -15231,7 +15291,7 @@ export const importSync = (specifier) => {
15231
15291
  if (standaloneSpecifiers.has(specifier)) {
15232
15292
  return { resolveTo: specifier, specifier };
15233
15293
  }
15234
- const emberInternalPath = join24(cwd2, "node_modules/ember-source/dist/packages", specifier, "index.js");
15294
+ const emberInternalPath = join25(cwd2, "node_modules/ember-source/dist/packages", specifier, "index.js");
15235
15295
  if (!existsSync20(emberInternalPath)) {
15236
15296
  throw new Error(`Ember vendor build: cannot find ${specifier} at ${emberInternalPath}. ` + `Is ember-source installed and at least 6.12?`);
15237
15297
  }
@@ -15263,7 +15323,7 @@ export const importSync = (specifier) => {
15263
15323
  if (standalonePackages.has(args.path)) {
15264
15324
  return;
15265
15325
  }
15266
- const internal = join24(cwd2, "node_modules/ember-source/dist/packages", args.path, "index.js");
15326
+ const internal = join25(cwd2, "node_modules/ember-source/dist/packages", args.path, "index.js");
15267
15327
  if (existsSync20(internal)) {
15268
15328
  return { path: internal };
15269
15329
  }
@@ -15271,16 +15331,16 @@ export const importSync = (specifier) => {
15271
15331
  });
15272
15332
  }
15273
15333
  }), buildEmberVendor = async (buildDir, cwd2 = process.cwd()) => {
15274
- const vendorDir = join24(buildDir, "ember", "vendor");
15334
+ const vendorDir = join25(buildDir, "ember", "vendor");
15275
15335
  mkdirSync12(vendorDir, { recursive: true });
15276
- const tmpDir = join24(buildDir, "_ember_vendor_tmp");
15336
+ const tmpDir = join25(buildDir, "_ember_vendor_tmp");
15277
15337
  mkdirSync12(tmpDir, { recursive: true });
15278
- const macrosShimPath = join24(tmpDir, "embroider_macros_shim.js");
15338
+ const macrosShimPath = join25(tmpDir, "embroider_macros_shim.js");
15279
15339
  await Bun.write(macrosShimPath, generateMacrosShim());
15280
15340
  const resolutions = REQUIRED_EMBER_SPECIFIERS.map((specifier) => resolveEmberSpecifier(specifier, cwd2));
15281
15341
  const entrypoints = await Promise.all(resolutions.map(async (resolution) => {
15282
15342
  const safeName = toSafeFileName5(resolution.specifier);
15283
- const entryPath = join24(tmpDir, `${safeName}.js`);
15343
+ const entryPath = join25(tmpDir, `${safeName}.js`);
15284
15344
  const source = resolution.specifier === "@embroider/macros" ? `export * from ${JSON.stringify(macrosShimPath)};
15285
15345
  ` : generateVendorEntrySource2(resolution);
15286
15346
  await Bun.write(entryPath, source);
@@ -15814,7 +15874,7 @@ var init_pathUtils = __esm(() => {
15814
15874
  // src/dev/fileWatcher.ts
15815
15875
  import { watch } from "fs";
15816
15876
  import { existsSync as existsSync23 } from "fs";
15817
- import { join as join25, resolve as resolve23 } from "path";
15877
+ import { join as join26, resolve as resolve23 } from "path";
15818
15878
  var safeRemoveFromGraph = (graph, fullPath) => {
15819
15879
  try {
15820
15880
  removeFileFromGraph(graph, fullPath);
@@ -15841,7 +15901,7 @@ var safeRemoveFromGraph = (graph, fullPath) => {
15841
15901
  if (shouldSkipFilename(filename, isStylesDir)) {
15842
15902
  return;
15843
15903
  }
15844
- const fullPath = join25(absolutePath, filename).replace(/\\/g, "/");
15904
+ const fullPath = join26(absolutePath, filename).replace(/\\/g, "/");
15845
15905
  if (shouldIgnorePath(fullPath, state.resolvedPaths)) {
15846
15906
  return;
15847
15907
  }
@@ -16633,7 +16693,7 @@ __export(exports_moduleServer, {
16633
16693
  SRC_URL_PREFIX: () => SRC_URL_PREFIX
16634
16694
  });
16635
16695
  import { existsSync as existsSync24, readFileSync as readFileSync17, statSync as statSync2 } from "fs";
16636
- import { basename as basename11, dirname as dirname15, extname as extname8, join as join26, resolve as resolve28, relative as relative11 } from "path";
16696
+ import { basename as basename11, dirname as dirname15, extname as extname8, join as join27, resolve as resolve28, relative as relative11 } from "path";
16637
16697
  var SRC_PREFIX = "/@src/", jsTranspiler2, tsTranspiler2, tsxTranspiler, TRANSPILABLE, ALL_EXPORTS_RE, STRING_CONTENTS_RE, preserveTypeExports = (originalSource, transpiled, valueExports) => {
16638
16698
  const codeOnly = originalSource.replace(STRING_CONTENTS_RE, '""');
16639
16699
  const allExports = [];
@@ -16703,7 +16763,7 @@ ${stubs}
16703
16763
  const subpath = isScoped ? parts.slice(2).join("/") : parts.slice(1).join("/");
16704
16764
  if (!subpath) {
16705
16765
  const pkgDir = resolve28(projectRoot, "node_modules", packageName ?? "");
16706
- const pkgJsonPath = join26(pkgDir, "package.json");
16766
+ const pkgJsonPath = join27(pkgDir, "package.json");
16707
16767
  if (existsSync24(pkgJsonPath)) {
16708
16768
  const pkg = JSON.parse(readFileSync17(pkgJsonPath, "utf-8"));
16709
16769
  const esmEntry = typeof pkg.module === "string" && pkg.module || typeof pkg.browser === "string" && pkg.browser;
@@ -17923,15 +17983,17 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
17923
17983
  });
17924
17984
  return Array.from(resolvedPages);
17925
17985
  }, computeClientRoot = async (resolvedPaths) => {
17986
+ const { getGeneratedRoot: getGeneratedRoot2 } = await Promise.resolve().then(() => (init_generatedDir(), exports_generatedDir));
17987
+ const projectRoot = process.cwd();
17926
17988
  const clientRoots = [
17927
- resolvedPaths.reactDir,
17928
- resolvedPaths.svelteDir,
17929
17989
  resolvedPaths.htmlDir,
17930
- resolvedPaths.vueDir,
17931
- resolvedPaths.angularDir
17990
+ resolvedPaths.htmxDir
17932
17991
  ].filter((dir) => Boolean(dir));
17992
+ const usesGenerated = Boolean(resolvedPaths.reactDir) || Boolean(resolvedPaths.svelteDir) || Boolean(resolvedPaths.vueDir) || Boolean(resolvedPaths.angularDir);
17993
+ if (usesGenerated)
17994
+ clientRoots.push(getGeneratedRoot2(projectRoot));
17933
17995
  const { commonAncestor: commonAncestor2 } = await Promise.resolve().then(() => (init_commonAncestor(), exports_commonAncestor));
17934
- return clientRoots.length === 1 ? clientRoots[0] ?? process.cwd() : commonAncestor2(clientRoots, process.cwd());
17996
+ return clientRoots.length === 1 ? clientRoots[0] ?? projectRoot : commonAncestor2(clientRoots, projectRoot);
17935
17997
  }, updateServerManifestEntry = (state, artifact) => {
17936
17998
  const fileWithHash = basename12(artifact.path);
17937
17999
  const [baseName] = fileWithHash.split(`.${artifact.hash}.`);
@@ -18176,7 +18238,8 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
18176
18238
  const { svelteServerPaths, svelteIndexPaths, svelteClientPaths } = await compileSvelte2(svelteFiles, svelteDir, new Map, true, getStyleTransformConfig(state.config));
18177
18239
  const serverEntries = [...svelteServerPaths];
18178
18240
  const clientEntries = [...svelteIndexPaths, ...svelteClientPaths];
18179
- const serverRoot = resolve31(svelteDir, "generated", "server");
18241
+ const { getFrameworkGeneratedDir: getFrameworkGeneratedDir2 } = await Promise.resolve().then(() => (init_generatedDir(), exports_generatedDir));
18242
+ const serverRoot = resolve31(getFrameworkGeneratedDir2("svelte"), "server");
18180
18243
  const serverOutDir = resolve31(buildDir, basename12(svelteDir));
18181
18244
  const [serverResult, clientResult] = await Promise.all([
18182
18245
  serverEntries.length > 0 ? bunBuild9({
@@ -19208,7 +19271,7 @@ __export(exports_buildDepVendor, {
19208
19271
  buildDepVendor: () => buildDepVendor
19209
19272
  });
19210
19273
  import { mkdirSync as mkdirSync13 } from "fs";
19211
- import { join as join27 } from "path";
19274
+ import { join as join28 } from "path";
19212
19275
  import { rm as rm10 } from "fs/promises";
19213
19276
  var {build: bunBuild9, Glob: Glob9 } = globalThis.Bun;
19214
19277
  var toSafeFileName6 = (specifier) => {
@@ -19319,7 +19382,7 @@ var toSafeFileName6 = (specifier) => {
19319
19382
  }), buildDepVendorPass = async (specifiers, vendorDir, tmpDir) => {
19320
19383
  const entries = await Promise.all(specifiers.map(async (specifier) => {
19321
19384
  const safeName = toSafeFileName6(specifier);
19322
- const entryPath = join27(tmpDir, `${safeName}.ts`);
19385
+ const entryPath = join28(tmpDir, `${safeName}.ts`);
19323
19386
  await Bun.write(entryPath, await generateVendorEntrySource(specifier));
19324
19387
  return { entryPath, specifier };
19325
19388
  }));
@@ -19380,9 +19443,9 @@ var toSafeFileName6 = (specifier) => {
19380
19443
  const { dep: initialSpecs, framework: frameworkRoots } = await scanBareImports(directories);
19381
19444
  if (initialSpecs.length === 0 && frameworkRoots.length === 0)
19382
19445
  return {};
19383
- const vendorDir = join27(buildDir, "vendor");
19446
+ const vendorDir = join28(buildDir, "vendor");
19384
19447
  mkdirSync13(vendorDir, { recursive: true });
19385
- const tmpDir = join27(buildDir, "_dep_vendor_tmp");
19448
+ const tmpDir = join28(buildDir, "_dep_vendor_tmp");
19386
19449
  mkdirSync13(tmpDir, { recursive: true });
19387
19450
  const allSpecs = new Set(initialSpecs);
19388
19451
  const alreadyScanned = new Set;
@@ -19824,5 +19887,5 @@ export {
19824
19887
  build
19825
19888
  };
19826
19889
 
19827
- //# debugId=2EEDD738FB4FC7B664756E2164756E21
19890
+ //# debugId=39499099B3E8310A64756E2164756E21
19828
19891
  //# sourceMappingURL=build.js.map