@absolutejs/absolute 0.19.0-beta.4 → 0.19.0-beta.41

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
@@ -419,7 +419,7 @@ var indexContentCache, resolveDevClientDir = () => {
419
419
  const hasher = new Bun.CryptoHasher("md5");
420
420
  hasher.update(content);
421
421
  const contentHash = hasher.digest("hex");
422
- if (indexContentCache.get(indexPath) === contentHash) {
422
+ if (indexContentCache.get(indexPath) === contentHash && existsSync(indexPath)) {
423
423
  return;
424
424
  }
425
425
  indexContentCache.set(indexPath, contentHash);
@@ -170927,7 +170927,7 @@ import {
170927
170927
  rmSync,
170928
170928
  writeFileSync as writeFileSync3
170929
170929
  } from "fs";
170930
- import { basename as basename5, join as join11, resolve as resolve9 } from "path";
170930
+ import { basename as basename5, join as join11, relative as relative6, resolve as resolve9 } from "path";
170931
170931
  import { cwd, env as env2, exit } from "process";
170932
170932
  var {build: bunBuild4, Glob: Glob5 } = globalThis.Bun;
170933
170933
  var isDev, extractBuildError = (logs, pass, label, frameworkNames, isIncremental, throwOnError) => {
@@ -171464,6 +171464,18 @@ var isDev, extractBuildError = (logs, pass, label, frameworkNames, isIncremental
171464
171464
  ...cssOutputs.map((a) => a.path)
171465
171465
  ]);
171466
171466
  }
171467
+ if (hmr && reactIndexesPath && reactPagesPath) {
171468
+ const { readdirSync: readDir } = await import("fs");
171469
+ const devIndexDir = join11(buildPath, "_src_indexes");
171470
+ mkdirSync6(devIndexDir, { recursive: true });
171471
+ const indexFiles = readDir(reactIndexesPath).filter((f) => f.endsWith(".tsx"));
171472
+ const pagesRel = relative6(process.cwd(), resolve9(reactPagesPath)).replace(/\\/g, "/");
171473
+ for (const file3 of indexFiles) {
171474
+ let content = readFileSync5(join11(reactIndexesPath, file3), "utf-8");
171475
+ content = content.replace(/from\s*['"]\.\.\/pages\/([^'"]+)['"]/g, `from '/@src/${pagesRel}/$1'`);
171476
+ writeFileSync3(join11(devIndexDir, file3), content);
171477
+ }
171478
+ }
171467
171479
  if (!options?.preserveIntermediateFiles)
171468
171480
  await cleanup({
171469
171481
  angularDir,
@@ -172312,6 +172324,8 @@ var isValidHMRClientMessage = (data) => {
172312
172324
  return true;
172313
172325
  case "hydration-error":
172314
172326
  return true;
172327
+ case "hmr-timing":
172328
+ return true;
172315
172329
  default:
172316
172330
  return false;
172317
172331
  }
@@ -172394,6 +172408,18 @@ var trySendMessage = (client, messageStr) => {
172394
172408
  state.activeFrameworks.add(data.framework);
172395
172409
  }
172396
172410
  break;
172411
+ case "hmr-timing": {
172412
+ const timing = data;
172413
+ if (timing.duration !== undefined) {
172414
+ const lastPath = state.lastHmrPath ?? "";
172415
+ const breakdown = timing.serverMs !== undefined ? ` (server ${timing.serverMs}ms + fetch ${timing.fetchMs ?? 0}ms + refresh ${timing.refreshMs ?? 0}ms)` : "";
172416
+ logHmrUpdate(lastPath, state.lastHmrFramework, timing.duration);
172417
+ if (breakdown) {
172418
+ console.log(` ${breakdown}`);
172419
+ }
172420
+ }
172421
+ break;
172422
+ }
172397
172423
  }
172398
172424
  }, handleHMRMessage = (state, client, message) => {
172399
172425
  try {
@@ -172407,7 +172433,9 @@ var trySendMessage = (client, messageStr) => {
172407
172433
  handleParsedMessage(state, client, parsedData);
172408
172434
  } catch {}
172409
172435
  };
172410
- var init_webSocket = () => {};
172436
+ var init_webSocket = __esm(() => {
172437
+ init_logger();
172438
+ });
172411
172439
 
172412
172440
  // src/utils/ssrErrorPage.ts
172413
172441
  var ssrErrorPage = (framework, error) => {
@@ -202101,16 +202129,363 @@ var init_pageHandler = __esm(() => {
202101
202129
  setSsrContextGetter(() => angularSsrContext.getStore());
202102
202130
  });
202103
202131
 
202132
+ // src/dev/transformCache.ts
202133
+ var exports_transformCache = {};
202134
+ __export(exports_transformCache, {
202135
+ setTransformed: () => setTransformed,
202136
+ invalidateAll: () => invalidateAll,
202137
+ invalidate: () => invalidate,
202138
+ getTransformed: () => getTransformed
202139
+ });
202140
+ import { statSync } from "fs";
202141
+ var globalStore, cache, getTransformed = (filePath) => {
202142
+ const entry = cache.get(filePath);
202143
+ if (!entry)
202144
+ return;
202145
+ try {
202146
+ const stat2 = statSync(filePath);
202147
+ if (stat2.mtimeMs === entry.mtime)
202148
+ return entry.content;
202149
+ } catch {
202150
+ cache.delete(filePath);
202151
+ }
202152
+ return;
202153
+ }, setTransformed = (filePath, content, mtime) => {
202154
+ cache.set(filePath, { content, mtime });
202155
+ }, invalidate = (filePath) => {
202156
+ cache.delete(filePath);
202157
+ }, invalidateAll = () => {
202158
+ cache.clear();
202159
+ };
202160
+ var init_transformCache = __esm(() => {
202161
+ globalStore = globalThis;
202162
+ cache = globalStore.__transformCache ?? new Map;
202163
+ globalStore.__transformCache = cache;
202164
+ });
202165
+
202166
+ // src/dev/moduleServer.ts
202167
+ var exports_moduleServer = {};
202168
+ __export(exports_moduleServer, {
202169
+ warmCache: () => warmCache,
202170
+ setGlobalModuleServer: () => setGlobalModuleServer,
202171
+ invalidateModule: () => invalidateModule,
202172
+ createModuleServer: () => createModuleServer,
202173
+ SRC_URL_PREFIX: () => SRC_URL_PREFIX
202174
+ });
202175
+ import { readFileSync as readFileSync9, statSync as statSync2 } from "fs";
202176
+ import { dirname as dirname7, extname as extname3, resolve as resolve16, relative as relative7 } from "path";
202177
+ var SRC_PREFIX = "/@src/", jsTranspiler2, tsTranspiler2, TRANSPILABLE, ALL_EXPORTS_RE, preserveTypeExports = (originalSource, transpiled, valueExports) => {
202178
+ const allExports = [];
202179
+ let match;
202180
+ ALL_EXPORTS_RE.lastIndex = 0;
202181
+ while ((match = ALL_EXPORTS_RE.exec(originalSource)) !== null) {
202182
+ if (match[1])
202183
+ allExports.push(match[1]);
202184
+ }
202185
+ const valueSet = new Set(valueExports);
202186
+ const typeExports = allExports.filter((e) => !valueSet.has(e));
202187
+ if (typeExports.length === 0)
202188
+ return transpiled;
202189
+ const stubs = typeExports.map((name) => `export const ${name} = undefined;`).join(`
202190
+ `);
202191
+ return `${transpiled}
202192
+ ${stubs}
202193
+ `;
202194
+ }, REACT_EXTENSIONS, escapeRegex3 = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), buildImportRewriter = (vendorPaths) => {
202195
+ const entries = Object.entries(vendorPaths).sort(([a], [b]) => b.length - a.length);
202196
+ if (entries.length === 0)
202197
+ return null;
202198
+ const alt = entries.map(([spec]) => escapeRegex3(spec)).join("|");
202199
+ const lookup = new Map(entries);
202200
+ const fromRegex = new RegExp(`(from\\s*["'])(${alt})(["'])`, "g");
202201
+ const sideEffectRegex = new RegExp(`(import\\s*["'])(${alt})(["']\\s*;?)`, "g");
202202
+ const dynamicRegex = new RegExp(`(import\\s*\\(\\s*["'])(${alt})(["']\\s*\\))`, "g");
202203
+ return { dynamicRegex, fromRegex, lookup, sideEffectRegex };
202204
+ }, rewriteImports2 = (code, filePath, projectRoot, rewriter) => {
202205
+ let result = code;
202206
+ result = result.replace(/^(import\s+.+?\s+from\s*["'])([^"'./][^"']*)(["'])/gm, (_match, prefix, specifier, suffix) => {
202207
+ const webPath = rewriter?.lookup.get(specifier);
202208
+ if (webPath)
202209
+ return `${prefix}${webPath}${suffix}`;
202210
+ return `${prefix}/@stub/${encodeURIComponent(specifier)}${suffix}`;
202211
+ });
202212
+ result = result.replace(/^(import\s*["'])([^"'./][^"']*)(["'])/gm, (_match, prefix, specifier, suffix) => {
202213
+ const webPath = rewriter?.lookup.get(specifier);
202214
+ if (webPath)
202215
+ return `${prefix}${webPath}${suffix}`;
202216
+ return `${prefix}/@stub/${encodeURIComponent(specifier)}${suffix}`;
202217
+ });
202218
+ result = result.replace(/^(export\s+.+?\s+from\s*["'])([^"'./][^"']*)(["'])/gm, (_match, prefix, specifier, suffix) => {
202219
+ const webPath = rewriter?.lookup.get(specifier);
202220
+ if (webPath)
202221
+ return `${prefix}${webPath}${suffix}`;
202222
+ return `${prefix}/@stub/${encodeURIComponent(specifier)}${suffix}`;
202223
+ });
202224
+ const fileDir = dirname7(filePath);
202225
+ result = result.replace(/(from\s*["'])(\.\.?\/[^"']+)(["'])/g, (_match, prefix, relPath, suffix) => {
202226
+ const absPath = resolve16(fileDir, relPath);
202227
+ const rel = relative7(projectRoot, absPath);
202228
+ let srcPath = rel;
202229
+ if (!extname3(srcPath)) {
202230
+ const extensions = [".tsx", ".ts", ".jsx", ".js"];
202231
+ for (const ext of extensions) {
202232
+ try {
202233
+ statSync2(resolve16(projectRoot, srcPath + ext));
202234
+ srcPath += ext;
202235
+ break;
202236
+ } catch {}
202237
+ }
202238
+ }
202239
+ return `${prefix}${SRC_PREFIX}${srcPath.replace(/\\/g, "/")}${suffix}`;
202240
+ });
202241
+ result = result.replace(/(import\s*\(\s*["'])(\.\.?\/[^"']+)(["']\s*\))/g, (_match, prefix, relPath, suffix) => {
202242
+ const absPath = resolve16(fileDir, relPath);
202243
+ const rel = relative7(projectRoot, absPath);
202244
+ return `${prefix}${SRC_PREFIX}${rel.replace(/\\/g, "/")}${suffix}`;
202245
+ });
202246
+ result = result.replace(/(import\s*["'])(\.\.?\/[^"']+)(["']\s*;?)/g, (_match, prefix, relPath, suffix) => {
202247
+ const absPath = resolve16(fileDir, relPath);
202248
+ const rel = relative7(projectRoot, absPath);
202249
+ let srcPath = rel;
202250
+ if (!extname3(srcPath)) {
202251
+ const extensions = [".tsx", ".ts", ".jsx", ".js", ".css"];
202252
+ for (const ext of extensions) {
202253
+ try {
202254
+ statSync2(resolve16(projectRoot, srcPath + ext));
202255
+ srcPath += ext;
202256
+ break;
202257
+ } catch {}
202258
+ }
202259
+ }
202260
+ return `${prefix}${SRC_PREFIX}${srcPath.replace(/\\/g, "/")}${suffix}`;
202261
+ });
202262
+ result = result.replace(/((?:from|import)\s*["'])(\/[^"']+\.(tsx?|jsx?|ts))(["'])/g, (_match, prefix, absPath, _ext, suffix) => {
202263
+ if (absPath.startsWith(projectRoot)) {
202264
+ const rel2 = relative7(projectRoot, absPath).replace(/\\/g, "/");
202265
+ return `${prefix}${SRC_PREFIX}${rel2}${suffix}`;
202266
+ }
202267
+ const rel = relative7(projectRoot, absPath).replace(/\\/g, "/");
202268
+ if (!rel.startsWith("..")) {
202269
+ return `${prefix}${SRC_PREFIX}${rel}${suffix}`;
202270
+ }
202271
+ return _match;
202272
+ });
202273
+ return result;
202274
+ }, HOOK_NAMES, REFRESH_PREAMBLE, JSX_AUTO_RE, JSXS_AUTO_RE, JSX_PROD_RE, FRAGMENT_RE, addJsxImport = (code) => {
202275
+ const imports = [];
202276
+ const jsxDevMatch = JSX_AUTO_RE.exec(code);
202277
+ if (jsxDevMatch) {
202278
+ imports.push(`import { jsxDEV as ${jsxDevMatch[1]} } from "react/jsx-dev-runtime";`);
202279
+ }
202280
+ const jsxsMatch = JSXS_AUTO_RE.exec(code);
202281
+ if (jsxsMatch && (!jsxDevMatch || jsxsMatch[1] !== jsxDevMatch[1])) {
202282
+ imports.push(`import { jsxs as ${jsxsMatch[1]} } from "react/jsx-runtime";`);
202283
+ }
202284
+ const jsxProdMatch = JSX_PROD_RE.exec(code);
202285
+ if (jsxProdMatch) {
202286
+ imports.push(`import { jsx as ${jsxProdMatch[1]} } from "react/jsx-runtime";`);
202287
+ }
202288
+ const fragmentMatch = FRAGMENT_RE.exec(code);
202289
+ if (fragmentMatch) {
202290
+ imports.push(`import { Fragment as ${fragmentMatch[1]} } from "react";`);
202291
+ }
202292
+ if (imports.length === 0)
202293
+ return code;
202294
+ return imports.join(`
202295
+ `) + `
202296
+ ` + code;
202297
+ }, reactTranspiler, transformReactFile = (filePath, projectRoot, rewriter) => {
202298
+ const raw = readFileSync9(filePath, "utf-8");
202299
+ const valueExports = tsTranspiler2.scan(raw).exports;
202300
+ let transpiled = reactTranspiler.transformSync(raw);
202301
+ transpiled = preserveTypeExports(raw, transpiled, valueExports);
202302
+ transpiled = addJsxImport(transpiled);
202303
+ transpiled = transpiled.replace(/import\s*\{[^}]*\}\s*from\s*["']react-refresh\/runtime["'];?\n?/, "");
202304
+ transpiled = transpiled.replace(/\$RefreshReg\$_[a-z0-9]+/g, "$RefreshReg$");
202305
+ transpiled = transpiled.replace(/\$RefreshSig\$_[a-z0-9]+/g, "$RefreshSig$");
202306
+ transpiled = `var $RefreshReg$ = window.$RefreshReg$ || function(){};
202307
+ ` + `var $RefreshSig$ = window.$RefreshSig$ || function(){ return function(t){ return t; }; };
202308
+ ` + transpiled;
202309
+ const relPath = relative7(projectRoot, filePath).replace(/\\/g, "/");
202310
+ transpiled = transpiled.replace(/\binput\.tsx:/g, `${relPath}:`);
202311
+ return rewriteImports2(transpiled, filePath, projectRoot, rewriter);
202312
+ }, transformPlainFile = (filePath, projectRoot, rewriter) => {
202313
+ const raw = readFileSync9(filePath, "utf-8");
202314
+ const ext = extname3(filePath);
202315
+ const isTS = ext === ".ts" || ext === ".tsx";
202316
+ const transpiler3 = isTS ? tsTranspiler2 : jsTranspiler2;
202317
+ const valueExports = isTS ? transpiler3.scan(raw).exports : [];
202318
+ let transpiled = transpiler3.transformSync(raw);
202319
+ if (isTS) {
202320
+ transpiled = preserveTypeExports(raw, transpiled, valueExports);
202321
+ }
202322
+ return rewriteImports2(transpiled, filePath, projectRoot, rewriter);
202323
+ }, handleCssRequest = (filePath) => {
202324
+ const raw = readFileSync9(filePath, "utf-8");
202325
+ const escaped = raw.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\$/g, "\\$");
202326
+ return [
202327
+ `const style = document.createElement('style');`,
202328
+ `style.textContent = \`${escaped}\`;`,
202329
+ `style.dataset.hmrId = ${JSON.stringify(filePath)};`,
202330
+ `const existing = document.querySelector(\`style[data-hmr-id="${filePath}"]\`);`,
202331
+ `if (existing) existing.remove();`,
202332
+ `document.head.appendChild(style);`
202333
+ ].join(`
202334
+ `);
202335
+ }, createModuleServer = (config) => {
202336
+ const { projectRoot, vendorPaths } = config;
202337
+ const rewriter = buildImportRewriter(vendorPaths);
202338
+ return async (pathname) => {
202339
+ if (pathname.startsWith("/@stub/")) {
202340
+ const specifier = decodeURIComponent(pathname.slice("/@stub/".length));
202341
+ let stubCode = `export default {};
202342
+ `;
202343
+ try {
202344
+ const mod = await import(specifier);
202345
+ const names = Object.keys(mod).filter((k) => k !== "default" && k !== "__esModule");
202346
+ if (names.length > 0) {
202347
+ const noops = names.map((n) => `export const ${n} = () => {};`).join(`
202348
+ `);
202349
+ stubCode = `${noops}
202350
+ export default {};
202351
+ `;
202352
+ }
202353
+ } catch {}
202354
+ return new Response(stubCode, {
202355
+ headers: {
202356
+ "Cache-Control": "public, max-age=31536000, immutable",
202357
+ "Content-Type": "application/javascript"
202358
+ }
202359
+ });
202360
+ }
202361
+ if (!pathname.startsWith(SRC_PREFIX))
202362
+ return;
202363
+ const relPath = pathname.slice(SRC_PREFIX.length);
202364
+ let filePath = resolve16(projectRoot, relPath);
202365
+ let ext = extname3(filePath);
202366
+ if (!ext) {
202367
+ const tryExts = [".tsx", ".ts", ".jsx", ".js"];
202368
+ for (const tryExt of tryExts) {
202369
+ try {
202370
+ statSync2(filePath + tryExt);
202371
+ filePath += tryExt;
202372
+ ext = tryExt;
202373
+ break;
202374
+ } catch {}
202375
+ }
202376
+ }
202377
+ try {
202378
+ if (ext === ".css") {
202379
+ return new Response(handleCssRequest(filePath), {
202380
+ headers: {
202381
+ "Cache-Control": "no-cache",
202382
+ "Content-Type": "application/javascript"
202383
+ }
202384
+ });
202385
+ }
202386
+ if (!TRANSPILABLE.has(ext))
202387
+ return;
202388
+ const cached = getTransformed(filePath);
202389
+ if (cached) {
202390
+ return new Response(cached, {
202391
+ headers: {
202392
+ "Cache-Control": "no-cache",
202393
+ "Content-Type": "application/javascript"
202394
+ }
202395
+ });
202396
+ }
202397
+ const stat2 = statSync2(filePath);
202398
+ let content;
202399
+ if (REACT_EXTENSIONS.has(ext)) {
202400
+ content = transformReactFile(filePath, projectRoot, rewriter);
202401
+ } else {
202402
+ content = transformPlainFile(filePath, projectRoot, rewriter);
202403
+ }
202404
+ setTransformed(filePath, content, stat2.mtimeMs);
202405
+ return new Response(content, {
202406
+ headers: {
202407
+ "Cache-Control": "no-cache",
202408
+ "Content-Type": "application/javascript"
202409
+ }
202410
+ });
202411
+ } catch (err) {
202412
+ const message = err instanceof Error ? err.message : String(err);
202413
+ return new Response(`console.error('[ModuleServer] Transform error:', ${JSON.stringify(message)});`, {
202414
+ headers: { "Content-Type": "application/javascript" },
202415
+ status: 500
202416
+ });
202417
+ }
202418
+ };
202419
+ }, invalidateModule, warmCache = (pathname) => {
202420
+ if (!pathname.startsWith(SRC_PREFIX))
202421
+ return;
202422
+ if (!globalModuleServer)
202423
+ return;
202424
+ globalModuleServer(pathname);
202425
+ }, globalModuleServer = null, setGlobalModuleServer = (handler) => {
202426
+ globalModuleServer = handler;
202427
+ }, SRC_URL_PREFIX;
202428
+ var init_moduleServer = __esm(() => {
202429
+ init_transformCache();
202430
+ jsTranspiler2 = new Bun.Transpiler({
202431
+ loader: "js",
202432
+ trimUnusedImports: true
202433
+ });
202434
+ tsTranspiler2 = new Bun.Transpiler({
202435
+ loader: "tsx",
202436
+ trimUnusedImports: true
202437
+ });
202438
+ TRANSPILABLE = new Set([".ts", ".tsx", ".js", ".jsx", ".mjs"]);
202439
+ ALL_EXPORTS_RE = /export\s+(?:type|interface|const|let|var|function|class|enum|abstract\s+class)\s+(\w+)/g;
202440
+ REACT_EXTENSIONS = new Set([".tsx", ".jsx"]);
202441
+ HOOK_NAMES = new Set([
202442
+ "useState",
202443
+ "useReducer",
202444
+ "useEffect",
202445
+ "useLayoutEffect",
202446
+ "useMemo",
202447
+ "useCallback",
202448
+ "useRef",
202449
+ "useContext",
202450
+ "useImperativeHandle",
202451
+ "useDebugValue",
202452
+ "useDeferredValue",
202453
+ "useTransition",
202454
+ "useId",
202455
+ "useSyncExternalStore",
202456
+ "useInsertionEffect",
202457
+ "useOptimistic",
202458
+ "useFormStatus",
202459
+ "useActionState"
202460
+ ]);
202461
+ REFRESH_PREAMBLE = [
202462
+ "var $RefreshReg$ = window.$RefreshReg$ || function(){};",
202463
+ "var $RefreshSig$ = window.$RefreshSig$ || function(){ return function(t){ return t; }; };"
202464
+ ].join(`
202465
+ `);
202466
+ JSX_AUTO_RE = /\b(jsxDEV_[a-z0-9]+)\b/;
202467
+ JSXS_AUTO_RE = /\b(jsxs_[a-z0-9]+)\b/;
202468
+ JSX_PROD_RE = /\b(jsx_[a-z0-9]+)\b/;
202469
+ FRAGMENT_RE = /\b(Fragment_[a-z0-9]+)\b/;
202470
+ reactTranspiler = new Bun.Transpiler({
202471
+ loader: "tsx",
202472
+ reactFastRefresh: true,
202473
+ trimUnusedImports: true
202474
+ });
202475
+ invalidateModule = invalidate;
202476
+ SRC_URL_PREFIX = SRC_PREFIX;
202477
+ });
202478
+
202104
202479
  // src/dev/simpleHTMLHMR.ts
202105
202480
  var exports_simpleHTMLHMR = {};
202106
202481
  __export(exports_simpleHTMLHMR, {
202107
202482
  handleHTMLUpdate: () => handleHTMLUpdate
202108
202483
  });
202109
- import { resolve as resolve16 } from "path";
202484
+ import { resolve as resolve17 } from "path";
202110
202485
  var handleHTMLUpdate = async (htmlFilePath) => {
202111
202486
  let htmlContent;
202112
202487
  try {
202113
- const resolvedPath = resolve16(htmlFilePath);
202488
+ const resolvedPath = resolve17(htmlFilePath);
202114
202489
  const file3 = Bun.file(resolvedPath);
202115
202490
  if (!await file3.exists()) {
202116
202491
  return null;
@@ -202136,11 +202511,11 @@ var exports_simpleHTMXHMR = {};
202136
202511
  __export(exports_simpleHTMXHMR, {
202137
202512
  handleHTMXUpdate: () => handleHTMXUpdate
202138
202513
  });
202139
- import { resolve as resolve17 } from "path";
202514
+ import { resolve as resolve18 } from "path";
202140
202515
  var handleHTMXUpdate = async (htmxFilePath) => {
202141
202516
  let htmlContent;
202142
202517
  try {
202143
- const resolvedPath = resolve17(htmxFilePath);
202518
+ const resolvedPath = resolve18(htmxFilePath);
202144
202519
  const file3 = Bun.file(resolvedPath);
202145
202520
  if (!await file3.exists()) {
202146
202521
  return null;
@@ -202164,7 +202539,7 @@ var init_simpleHTMXHMR = () => {};
202164
202539
  // src/dev/rebuildTrigger.ts
202165
202540
  import { existsSync as existsSync13 } from "fs";
202166
202541
  import { rm as rm6 } from "fs/promises";
202167
- import { basename as basename7, relative as relative6, resolve as resolve18 } from "path";
202542
+ import { basename as basename7, relative as relative8, resolve as resolve19 } from "path";
202168
202543
  var parseErrorLocationFromMessage = (msg) => {
202169
202544
  const pathLineCol = msg.match(/^([^\s:]+):(\d+)(?::(\d+))?/);
202170
202545
  if (pathLineCol) {
@@ -202236,7 +202611,7 @@ var parseErrorLocationFromMessage = (msg) => {
202236
202611
  state.fileHashes.delete(filePathInSet);
202237
202612
  try {
202238
202613
  const affectedFiles = getAffectedFiles(state.dependencyGraph, filePathInSet);
202239
- const deletedPathResolved = resolve18(filePathInSet);
202614
+ const deletedPathResolved = resolve19(filePathInSet);
202240
202615
  affectedFiles.forEach((affectedFile) => {
202241
202616
  if (isValidDeletedAffectedFile(affectedFile, deletedPathResolved, processedFiles)) {
202242
202617
  validFiles.push(affectedFile);
@@ -202280,7 +202655,7 @@ var parseErrorLocationFromMessage = (msg) => {
202280
202655
  if (storedHash !== undefined && storedHash === fileHash) {
202281
202656
  return;
202282
202657
  }
202283
- const normalizedFilePath = resolve18(filePathInSet);
202658
+ const normalizedFilePath = resolve19(filePathInSet);
202284
202659
  if (!processedFiles.has(normalizedFilePath)) {
202285
202660
  validFiles.push(normalizedFilePath);
202286
202661
  processedFiles.add(normalizedFilePath);
@@ -202371,7 +202746,7 @@ var parseErrorLocationFromMessage = (msg) => {
202371
202746
  }
202372
202747
  if (!graph)
202373
202748
  return componentFile;
202374
- const dependents = graph.dependents.get(resolve18(componentFile));
202749
+ const dependents = graph.dependents.get(resolve19(componentFile));
202375
202750
  if (!dependents)
202376
202751
  return componentFile;
202377
202752
  for (const dep of dependents) {
@@ -202380,7 +202755,7 @@ var parseErrorLocationFromMessage = (msg) => {
202380
202755
  }
202381
202756
  return componentFile;
202382
202757
  }, resolveAngularPageEntries = (state, angularFiles, angularPagesPath) => {
202383
- const pageEntries = angularFiles.filter((file3) => file3.endsWith(".ts") && resolve18(file3).startsWith(angularPagesPath));
202758
+ const pageEntries = angularFiles.filter((file3) => file3.endsWith(".ts") && resolve19(file3).startsWith(angularPagesPath));
202384
202759
  if (pageEntries.length > 0 || !state.dependencyGraph) {
202385
202760
  return pageEntries;
202386
202761
  }
@@ -202389,7 +202764,7 @@ var parseErrorLocationFromMessage = (msg) => {
202389
202764
  const lookupFile = resolveComponentLookupFile(componentFile, state.dependencyGraph);
202390
202765
  const affected = getAffectedFiles(state.dependencyGraph, lookupFile);
202391
202766
  affected.forEach((file3) => {
202392
- if (file3.endsWith(".ts") && resolve18(file3).startsWith(angularPagesPath)) {
202767
+ if (file3.endsWith(".ts") && resolve19(file3).startsWith(angularPagesPath)) {
202393
202768
  resolvedPages.add(file3);
202394
202769
  }
202395
202770
  });
@@ -202438,8 +202813,8 @@ var parseErrorLocationFromMessage = (msg) => {
202438
202813
  return;
202439
202814
  }
202440
202815
  if (angVendorPaths) {
202441
- const { rewriteImports: rewriteImports2 } = await Promise.resolve().then(() => exports_rewriteImports);
202442
- await rewriteImports2(clientResult.outputs.map((artifact) => artifact.path), angVendorPaths);
202816
+ const { rewriteImports: rewriteImports3 } = await Promise.resolve().then(() => exports_rewriteImports);
202817
+ await rewriteImports3(clientResult.outputs.map((artifact) => artifact.path), angVendorPaths);
202443
202818
  }
202444
202819
  const clientManifest = generateManifest2(clientResult.outputs, buildDir);
202445
202820
  Object.assign(state.manifest, clientManifest);
@@ -202470,7 +202845,7 @@ var parseErrorLocationFromMessage = (msg) => {
202470
202845
  const { clientPaths, serverPaths } = await compileAngular2(pageEntries, angularDir, true);
202471
202846
  serverPaths.forEach((serverPath) => {
202472
202847
  const fileBase = basename7(serverPath, ".js");
202473
- state.manifest[toPascal(fileBase)] = resolve18(serverPath);
202848
+ state.manifest[toPascal(fileBase)] = resolve19(serverPath);
202474
202849
  });
202475
202850
  if (clientPaths.length > 0) {
202476
202851
  await bundleAngularClient(state, clientPaths, state.resolvedPaths.buildDir);
@@ -202478,14 +202853,14 @@ var parseErrorLocationFromMessage = (msg) => {
202478
202853
  }, handleAngularFastPath = async (state, config, filesToRebuild, startTime, onRebuildComplete) => {
202479
202854
  const angularDir = config.angularDirectory ?? "";
202480
202855
  const angularFiles = filesToRebuild.filter((file3) => detectFramework(file3, state.resolvedPaths) === "angular");
202481
- const angularPagesPath = resolve18(angularDir, "pages");
202856
+ const angularPagesPath = resolve19(angularDir, "pages");
202482
202857
  const pageEntries = resolveAngularPageEntries(state, angularFiles, angularPagesPath);
202483
202858
  if (pageEntries.length > 0) {
202484
202859
  await compileAndBundleAngular(state, pageEntries, angularDir);
202485
202860
  invalidateAngularSsrCache();
202486
202861
  }
202487
202862
  if (pageEntries.length > 0 && !config.options?.preserveIntermediateFiles) {
202488
- await rm6(resolve18(angularDir, "compiled"), {
202863
+ await rm6(resolve19(angularDir, "compiled"), {
202489
202864
  force: true,
202490
202865
  recursive: true
202491
202866
  });
@@ -202499,7 +202874,7 @@ var parseErrorLocationFromMessage = (msg) => {
202499
202874
  return manifest;
202500
202875
  }, resolveReactEntryForPageFile = (normalized, pagesPathResolved, reactIndexesPath) => {
202501
202876
  const pageName = basename7(normalized, ".tsx");
202502
- const indexPath = resolve18(reactIndexesPath, `${pageName}.tsx`);
202877
+ const indexPath = resolve19(reactIndexesPath, `${pageName}.tsx`);
202503
202878
  if (!existsSync13(indexPath)) {
202504
202879
  return;
202505
202880
  }
@@ -202511,13 +202886,13 @@ var parseErrorLocationFromMessage = (msg) => {
202511
202886
  return;
202512
202887
  }
202513
202888
  const pageName = basename7(dep, ".tsx");
202514
- const indexPath = resolve18(reactIndexesPath, `${pageName}.tsx`);
202889
+ const indexPath = resolve19(reactIndexesPath, `${pageName}.tsx`);
202515
202890
  if (existsSync13(indexPath) && !reactEntries.includes(indexPath)) {
202516
202891
  reactEntries.push(indexPath);
202517
202892
  }
202518
202893
  });
202519
202894
  }, resolveReactEntryForFile = (state, file3, pagesPathResolved, reactIndexesPath, reactEntries) => {
202520
- const normalized = resolve18(file3);
202895
+ const normalized = resolve19(file3);
202521
202896
  if (!normalized.startsWith(pagesPathResolved)) {
202522
202897
  resolveReactEntriesFromDeps(state, normalized, pagesPathResolved, reactIndexesPath, reactEntries);
202523
202898
  return;
@@ -202528,7 +202903,7 @@ var parseErrorLocationFromMessage = (msg) => {
202528
202903
  }
202529
202904
  }, collectReactEntries = (state, filesToRebuild, reactPagesPath, reactIndexesPath) => {
202530
202905
  const reactEntries = [];
202531
- const pagesPathResolved = resolve18(reactPagesPath);
202906
+ const pagesPathResolved = resolve19(reactPagesPath);
202532
202907
  filesToRebuild.forEach((file3) => {
202533
202908
  resolveReactEntryForFile(state, file3, pagesPathResolved, reactIndexesPath, reactEntries);
202534
202909
  });
@@ -202539,7 +202914,7 @@ var parseErrorLocationFromMessage = (msg) => {
202539
202914
  const { getDevVendorPaths: getDevVendorPaths2 } = await Promise.resolve().then(() => exports_devVendorPaths);
202540
202915
  const { rewriteReactImports: rewriteReactImports2 } = await Promise.resolve().then(() => (init_rewriteReactImports(), exports_rewriteReactImports));
202541
202916
  const clientRoot = await computeClientRoot(state.resolvedPaths);
202542
- const refreshEntry = resolve18(reactIndexesPath, "_refresh.tsx");
202917
+ const refreshEntry = resolve19(reactIndexesPath, "_refresh.tsx");
202543
202918
  if (!reactEntries.includes(refreshEntry)) {
202544
202919
  reactEntries.push(refreshEntry);
202545
202920
  }
@@ -202551,7 +202926,7 @@ var parseErrorLocationFromMessage = (msg) => {
202551
202926
  setDevVendorPaths2(vendorPaths);
202552
202927
  }
202553
202928
  const { rmSync: rmSync2 } = await import("fs");
202554
- rmSync2(resolve18(buildDir, "react", "indexes"), {
202929
+ rmSync2(resolve19(buildDir, "react", "indexes"), {
202555
202930
  force: true,
202556
202931
  recursive: true
202557
202932
  });
@@ -202577,11 +202952,51 @@ var parseErrorLocationFromMessage = (msg) => {
202577
202952
  const clientManifest = generateManifest2(clientResult.outputs, buildDir);
202578
202953
  Object.assign(state.manifest, clientManifest);
202579
202954
  await populateAssetStore(state.assetStore, clientManifest, buildDir);
202955
+ }, getReactModule = async (pageFile) => {
202956
+ const { invalidateModule: invalidateModule2, warmCache: warmCache2, SRC_URL_PREFIX: SRC_URL_PREFIX2 } = await Promise.resolve().then(() => (init_moduleServer(), exports_moduleServer));
202957
+ const { getTransformed: getTransformed2 } = await Promise.resolve().then(() => (init_transformCache(), exports_transformCache));
202958
+ invalidateModule2(pageFile);
202959
+ const rel = relative8(process.cwd(), pageFile).replace(/\\/g, "/");
202960
+ const url = `${SRC_URL_PREFIX2}${rel}`;
202961
+ warmCache2(url);
202962
+ const code = getTransformed2(resolve19(pageFile));
202963
+ return { code, url };
202580
202964
  }, handleReactFastPath = async (state, config, filesToRebuild, startTime, onRebuildComplete) => {
202581
202965
  const reactDir = config.reactDirectory ?? "";
202582
- const reactPagesPath = resolve18(reactDir, "pages");
202583
- const reactIndexesPath = resolve18(reactDir, "indexes");
202966
+ const reactPagesPath = resolve19(reactDir, "pages");
202967
+ const reactIndexesPath = resolve19(reactDir, "indexes");
202584
202968
  const { buildDir } = state.resolvedPaths;
202969
+ const reactFiles = filesToRebuild.filter((file3) => detectFramework(file3, state.resolvedPaths) === "react");
202970
+ if (reactFiles.length > 0) {
202971
+ const [changedFile] = reactFiles;
202972
+ if (changedFile) {
202973
+ const { code, url } = await getReactModule(changedFile);
202974
+ if (url) {
202975
+ const serverDuration = Date.now() - startTime;
202976
+ state.lastHmrPath = changedFile;
202977
+ state.lastHmrFramework = "react";
202978
+ broadcastToClients(state, {
202979
+ data: {
202980
+ code,
202981
+ framework: "react",
202982
+ hasComponentChanges: true,
202983
+ hasCSSChanges: false,
202984
+ manifest: state.manifest,
202985
+ pageModuleUrl: url,
202986
+ primarySource: changedFile,
202987
+ serverDuration,
202988
+ sourceFiles: reactFiles
202989
+ },
202990
+ type: "react-update"
202991
+ });
202992
+ onRebuildComplete({
202993
+ hmrState: state,
202994
+ manifest: state.manifest
202995
+ });
202996
+ return state.manifest;
202997
+ }
202998
+ }
202999
+ }
202585
203000
  const { generateReactIndexFiles: generateReactIndexFiles2 } = await Promise.resolve().then(() => (init_generateReactIndexes(), exports_generateReactIndexes));
202586
203001
  await generateReactIndexFiles2(reactPagesPath, reactIndexesPath, true);
202587
203002
  const reactEntries = collectReactEntries(state, filesToRebuild, reactPagesPath, reactIndexesPath);
@@ -202591,7 +203006,6 @@ var parseErrorLocationFromMessage = (msg) => {
202591
203006
  await rm6(reactIndexesPath, { force: true, recursive: true });
202592
203007
  const { manifest } = state;
202593
203008
  const duration = Date.now() - startTime;
202594
- const reactFiles = filesToRebuild.filter((file3) => detectFramework(file3, state.resolvedPaths) === "react");
202595
203009
  const reactPageFiles = reactFiles.filter((file3) => file3.replace(/\\/g, "/").includes("/pages/"));
202596
203010
  const sourceFiles = reactPageFiles.length > 0 ? reactPageFiles : reactFiles;
202597
203011
  logHmrUpdate(sourceFiles[0] ?? reactFiles[0] ?? "", "react", duration);
@@ -202626,7 +203040,7 @@ var parseErrorLocationFromMessage = (msg) => {
202626
203040
  }, handleSvelteFastPath = async (state, config, filesToRebuild, startTime, onRebuildComplete) => {
202627
203041
  const svelteDir = config.svelteDirectory ?? "";
202628
203042
  const { buildDir } = state.resolvedPaths;
202629
- const svelteFiles = filesToRebuild.filter((file3) => file3.endsWith(".svelte") && resolve18(file3).startsWith(resolve18(svelteDir, "pages")));
203043
+ const svelteFiles = filesToRebuild.filter((file3) => file3.endsWith(".svelte") && resolve19(file3).startsWith(resolve19(svelteDir, "pages")));
202630
203044
  if (svelteFiles.length > 0) {
202631
203045
  const { compileSvelte: compileSvelte2 } = await Promise.resolve().then(() => (init_compileSvelte(), exports_compileSvelte));
202632
203046
  const { build: bunBuild5 } = await Promise.resolve(globalThis.Bun);
@@ -202634,8 +203048,8 @@ var parseErrorLocationFromMessage = (msg) => {
202634
203048
  const { svelteServerPaths, svelteIndexPaths, svelteClientPaths } = await compileSvelte2(svelteFiles, svelteDir, new Map, true);
202635
203049
  const serverEntries = [...svelteServerPaths];
202636
203050
  const clientEntries = [...svelteIndexPaths, ...svelteClientPaths];
202637
- const serverRoot = resolve18(svelteDir, "server");
202638
- const serverOutDir = resolve18(buildDir, basename7(svelteDir));
203051
+ const serverRoot = resolve19(svelteDir, "server");
203052
+ const serverOutDir = resolve19(buildDir, basename7(svelteDir));
202639
203053
  const [serverResult, clientResult] = await Promise.all([
202640
203054
  serverEntries.length > 0 ? bunBuild5({
202641
203055
  entrypoints: serverEntries,
@@ -202661,15 +203075,15 @@ var parseErrorLocationFromMessage = (msg) => {
202661
203075
  await handleClientManifestUpdate(state, clientResult, buildDir);
202662
203076
  }
202663
203077
  await Promise.all([
202664
- rm6(resolve18(svelteDir, "client"), {
203078
+ rm6(resolve19(svelteDir, "client"), {
202665
203079
  force: true,
202666
203080
  recursive: true
202667
203081
  }),
202668
- rm6(resolve18(svelteDir, "indexes"), {
203082
+ rm6(resolve19(svelteDir, "indexes"), {
202669
203083
  force: true,
202670
203084
  recursive: true
202671
203085
  }),
202672
- rm6(resolve18(svelteDir, "server"), {
203086
+ rm6(resolve19(svelteDir, "server"), {
202673
203087
  force: true,
202674
203088
  recursive: true
202675
203089
  })
@@ -202702,7 +203116,7 @@ var parseErrorLocationFromMessage = (msg) => {
202702
203116
  }, handleVueFastPath = async (state, config, filesToRebuild, startTime, onRebuildComplete) => {
202703
203117
  const vueDir = config.vueDirectory ?? "";
202704
203118
  const { buildDir } = state.resolvedPaths;
202705
- const vueFiles = filesToRebuild.filter((file3) => file3.endsWith(".vue") && resolve18(file3).startsWith(resolve18(vueDir, "pages")));
203119
+ const vueFiles = filesToRebuild.filter((file3) => file3.endsWith(".vue") && resolve19(file3).startsWith(resolve19(vueDir, "pages")));
202706
203120
  if (vueFiles.length > 0) {
202707
203121
  const { compileVue: compileVue2 } = await Promise.resolve().then(() => (init_compileVue(), exports_compileVue));
202708
203122
  const { build: bunBuild5 } = await Promise.resolve(globalThis.Bun);
@@ -202710,8 +203124,8 @@ var parseErrorLocationFromMessage = (msg) => {
202710
203124
  const { vueServerPaths, vueIndexPaths, vueClientPaths } = await compileVue2(vueFiles, vueDir, true);
202711
203125
  const serverEntries = [...vueServerPaths];
202712
203126
  const clientEntries = [...vueIndexPaths, ...vueClientPaths];
202713
- const serverRoot = resolve18(vueDir, "server");
202714
- const serverOutDir = resolve18(buildDir, basename7(vueDir));
203127
+ const serverRoot = resolve19(vueDir, "server");
203128
+ const serverOutDir = resolve19(buildDir, basename7(vueDir));
202715
203129
  const vueFeatureFlags2 = {
202716
203130
  __VUE_OPTIONS_API__: "true",
202717
203131
  __VUE_PROD_DEVTOOLS__: "true",
@@ -202743,19 +203157,19 @@ var parseErrorLocationFromMessage = (msg) => {
202743
203157
  await handleClientManifestUpdate(state, clientResult, buildDir);
202744
203158
  }
202745
203159
  await Promise.all([
202746
- rm6(resolve18(vueDir, "client"), {
203160
+ rm6(resolve19(vueDir, "client"), {
202747
203161
  force: true,
202748
203162
  recursive: true
202749
203163
  }),
202750
- rm6(resolve18(vueDir, "indexes"), {
203164
+ rm6(resolve19(vueDir, "indexes"), {
202751
203165
  force: true,
202752
203166
  recursive: true
202753
203167
  }),
202754
- rm6(resolve18(vueDir, "server"), {
203168
+ rm6(resolve19(vueDir, "server"), {
202755
203169
  force: true,
202756
203170
  recursive: true
202757
203171
  }),
202758
- rm6(resolve18(vueDir, "compiled"), {
203172
+ rm6(resolve19(vueDir, "compiled"), {
202759
203173
  force: true,
202760
203174
  recursive: true
202761
203175
  })
@@ -202770,7 +203184,7 @@ var parseErrorLocationFromMessage = (msg) => {
202770
203184
  const cssKey = `${pascalName}CSS`;
202771
203185
  const cssUrl = manifest[cssKey] || null;
202772
203186
  const vueRoot = config.vueDirectory;
202773
- const hmrId = vueRoot ? relative6(vueRoot, vuePagePath).replace(/\\/g, "/").replace(/\.vue$/, "") : baseName;
203187
+ const hmrId = vueRoot ? relative8(vueRoot, vuePagePath).replace(/\\/g, "/").replace(/\.vue$/, "") : baseName;
202774
203188
  logHmrUpdate(vuePagePath, "vue", duration);
202775
203189
  broadcastToClients(state, {
202776
203190
  data: {
@@ -202875,10 +203289,10 @@ var parseErrorLocationFromMessage = (msg) => {
202875
203289
  }, computeOutputPagesDir = (state, config, framework) => {
202876
203290
  const isSingle = !config.reactDirectory && !config.svelteDirectory && !config.vueDirectory && (framework === "html" ? !config.htmxDirectory : !config.htmlDirectory);
202877
203291
  if (isSingle) {
202878
- return resolve18(state.resolvedPaths.buildDir, "pages");
203292
+ return resolve19(state.resolvedPaths.buildDir, "pages");
202879
203293
  }
202880
203294
  const dirName = framework === "html" ? basename7(config.htmlDirectory ?? "html") : basename7(config.htmxDirectory ?? "htmx");
202881
- return resolve18(state.resolvedPaths.buildDir, dirName, "pages");
203295
+ return resolve19(state.resolvedPaths.buildDir, dirName, "pages");
202882
203296
  }, processHtmlPageUpdate = async (state, pageFile, builtHtmlPagePath, manifest, duration) => {
202883
203297
  try {
202884
203298
  const { handleHTMLUpdate: handleHTMLUpdate2 } = await Promise.resolve().then(() => (init_simpleHTMLHMR(), exports_simpleHTMLHMR));
@@ -202914,7 +203328,7 @@ var parseErrorLocationFromMessage = (msg) => {
202914
203328
  const outputHtmlPages = computeOutputPagesDir(state, config, "html");
202915
203329
  for (const pageFile of htmlPageFiles) {
202916
203330
  const htmlPageName = basename7(pageFile);
202917
- const builtHtmlPagePath = resolve18(outputHtmlPages, htmlPageName);
203331
+ const builtHtmlPagePath = resolve19(outputHtmlPages, htmlPageName);
202918
203332
  await processHtmlPageUpdate(state, pageFile, builtHtmlPagePath, manifest, duration);
202919
203333
  }
202920
203334
  }, handleVueCssOnlyUpdate = (state, vueCssFiles, manifest, duration) => {
@@ -202975,11 +203389,11 @@ var parseErrorLocationFromMessage = (msg) => {
202975
203389
  const baseName = fileName.replace(/\.vue$/, "");
202976
203390
  const pascalName = toPascal(baseName);
202977
203391
  const vueRoot = config.vueDirectory;
202978
- const hmrId = vueRoot ? relative6(vueRoot, vuePagePath).replace(/\\/g, "/").replace(/\.vue$/, "") : baseName;
203392
+ const hmrId = vueRoot ? relative8(vueRoot, vuePagePath).replace(/\\/g, "/").replace(/\.vue$/, "") : baseName;
202979
203393
  const cssKey = `${pascalName}CSS`;
202980
203394
  const cssUrl = manifest[cssKey] || null;
202981
203395
  const { vueHmrMetadata: vueHmrMetadata2 } = await Promise.resolve().then(() => (init_compileVue(), exports_compileVue));
202982
- const hmrMeta = vueHmrMetadata2.get(resolve18(vuePagePath));
203396
+ const hmrMeta = vueHmrMetadata2.get(resolve19(vuePagePath));
202983
203397
  const changeType = hmrMeta?.changeType ?? "full";
202984
203398
  if (changeType === "style-only") {
202985
203399
  broadcastVueStyleOnly(state, vuePagePath, baseName, cssUrl, hmrId, manifest, duration);
@@ -203213,7 +203627,7 @@ var parseErrorLocationFromMessage = (msg) => {
203213
203627
  const outputHtmxPages = computeOutputPagesDir(state, config, "htmx");
203214
203628
  for (const htmxPageFile of htmxPageFiles) {
203215
203629
  const htmxPageName = basename7(htmxPageFile);
203216
- const builtHtmxPagePath = resolve18(outputHtmxPages, htmxPageName);
203630
+ const builtHtmxPagePath = resolve19(outputHtmxPages, htmxPageName);
203217
203631
  await processHtmxPageUpdate(state, htmxPageFile, builtHtmxPagePath, manifest, duration);
203218
203632
  }
203219
203633
  }, collectUpdatedModulePaths = (allModuleUpdates) => {
@@ -203425,14 +203839,155 @@ var init_rebuildTrigger = __esm(() => {
203425
203839
  init_pageHandler();
203426
203840
  });
203427
203841
 
203842
+ // src/build/buildDepVendor.ts
203843
+ var exports_buildDepVendor = {};
203844
+ __export(exports_buildDepVendor, {
203845
+ computeDepVendorPaths: () => computeDepVendorPaths,
203846
+ buildDepVendor: () => buildDepVendor
203847
+ });
203848
+ import { mkdirSync as mkdirSync7 } from "fs";
203849
+ import { join as join14 } from "path";
203850
+ import { rm as rm7 } from "fs/promises";
203851
+ var {build: bunBuild5, Glob: Glob6 } = globalThis.Bun;
203852
+ var toSafeFileName3 = (specifier) => specifier.replace(/\//g, "_").replace(/@/g, "").replace(/-/g, "_"), isResolvable2 = (specifier) => {
203853
+ try {
203854
+ __require.resolve(specifier);
203855
+ return true;
203856
+ } catch {
203857
+ return false;
203858
+ }
203859
+ }, isBareSpecifier = (spec) => !spec.startsWith(".") && !spec.startsWith("/") && !spec.startsWith("@src/"), FRAMEWORK_SPECIFIERS, scanBareImports = async (directories) => {
203860
+ const specifiers = new Set;
203861
+ const transpiler3 = new Bun.Transpiler({ loader: "tsx" });
203862
+ for (const dir of directories) {
203863
+ const glob = new Glob6("**/*.{ts,tsx,js,jsx}");
203864
+ try {
203865
+ for await (const file3 of glob.scan({
203866
+ absolute: true,
203867
+ cwd: dir
203868
+ })) {
203869
+ if (file3.includes("node_modules"))
203870
+ continue;
203871
+ if (file3.includes("/build/"))
203872
+ continue;
203873
+ if (file3.includes("/dist/"))
203874
+ continue;
203875
+ if (file3.includes("/indexes/"))
203876
+ continue;
203877
+ try {
203878
+ const content = await Bun.file(file3).text();
203879
+ const imports = transpiler3.scanImports(content);
203880
+ for (const imp of imports) {
203881
+ if (isBareSpecifier(imp.path) && !FRAMEWORK_SPECIFIERS.has(imp.path)) {
203882
+ specifiers.add(imp.path);
203883
+ }
203884
+ }
203885
+ } catch {}
203886
+ }
203887
+ } catch {}
203888
+ }
203889
+ return Array.from(specifiers).filter(isResolvable2);
203890
+ }, generateEntrySource2 = (specifier) => `export * from '${specifier}';
203891
+ `, computeDepVendorPaths = async (directories) => {
203892
+ const specifiers = await scanBareImports(directories);
203893
+ const paths = {};
203894
+ for (const specifier of specifiers) {
203895
+ paths[specifier] = `/vendor/${toSafeFileName3(specifier)}.js`;
203896
+ }
203897
+ return paths;
203898
+ }, buildDepVendor = async (buildDir, directories) => {
203899
+ const specifiers = await scanBareImports(directories);
203900
+ if (specifiers.length === 0)
203901
+ return {};
203902
+ const vendorDir = join14(buildDir, "vendor");
203903
+ mkdirSync7(vendorDir, { recursive: true });
203904
+ const tmpDir = join14(buildDir, "_dep_vendor_tmp");
203905
+ mkdirSync7(tmpDir, { recursive: true });
203906
+ const entrypoints = await Promise.all(specifiers.map(async (specifier) => {
203907
+ const safeName = toSafeFileName3(specifier);
203908
+ const entryPath = join14(tmpDir, `${safeName}.ts`);
203909
+ const source = await generateEntrySource2(specifier);
203910
+ await Bun.write(entryPath, source);
203911
+ return entryPath;
203912
+ }));
203913
+ const result = await bunBuild5({
203914
+ entrypoints,
203915
+ external: [...FRAMEWORK_SPECIFIERS],
203916
+ format: "esm",
203917
+ minify: false,
203918
+ naming: "[name].[ext]",
203919
+ outdir: vendorDir,
203920
+ splitting: true,
203921
+ target: "browser",
203922
+ throw: false
203923
+ });
203924
+ await rm7(tmpDir, { force: true, recursive: true });
203925
+ if (result.success) {
203926
+ const { readdirSync: readdirSync2, readFileSync: readFileSync10, writeFileSync: writeFileSync5 } = await import("fs");
203927
+ const { computeVendorPaths: computeVendorPaths2 } = await Promise.resolve().then(() => (init_buildReactVendor(), exports_buildReactVendor));
203928
+ const reactPaths = computeVendorPaths2();
203929
+ const files = readdirSync2(vendorDir).filter((f) => f.endsWith(".js"));
203930
+ for (const file3 of files) {
203931
+ const filePath = join14(vendorDir, file3);
203932
+ let content = readFileSync10(filePath, "utf-8");
203933
+ let changed = false;
203934
+ for (const [specifier, webPath] of Object.entries(reactPaths)) {
203935
+ const escaped = specifier.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
203936
+ const re = new RegExp(`(from\\s*["'])${escaped}(["'])`, "g");
203937
+ const newContent = content.replace(re, `$1${webPath}$2`);
203938
+ if (newContent !== content) {
203939
+ content = newContent;
203940
+ changed = true;
203941
+ }
203942
+ }
203943
+ if (changed) {
203944
+ writeFileSync5(filePath, content);
203945
+ }
203946
+ }
203947
+ }
203948
+ if (!result.success) {
203949
+ console.warn("\u26A0\uFE0F Dependency vendor build had errors:", result.logs);
203950
+ }
203951
+ const paths = {};
203952
+ for (const specifier of specifiers) {
203953
+ paths[specifier] = `/vendor/${toSafeFileName3(specifier)}.js`;
203954
+ }
203955
+ return paths;
203956
+ };
203957
+ var init_buildDepVendor = __esm(() => {
203958
+ FRAMEWORK_SPECIFIERS = new Set([
203959
+ "react",
203960
+ "react-dom",
203961
+ "react-dom/client",
203962
+ "react-dom/server",
203963
+ "react/jsx-runtime",
203964
+ "react/jsx-dev-runtime",
203965
+ "react-refresh/runtime",
203966
+ "svelte",
203967
+ "svelte/internal",
203968
+ "svelte/internal/client",
203969
+ "svelte/server",
203970
+ "svelte/compiler",
203971
+ "vue",
203972
+ "vue/server-renderer",
203973
+ "@vue/compiler-sfc",
203974
+ "@angular/core",
203975
+ "@angular/common",
203976
+ "@angular/compiler",
203977
+ "@angular/platform-browser",
203978
+ "@angular/platform-server",
203979
+ "@angular/ssr"
203980
+ ]);
203981
+ });
203982
+
203428
203983
  // src/core/devBuild.ts
203429
203984
  var exports_devBuild = {};
203430
203985
  __export(exports_devBuild, {
203431
203986
  devBuild: () => devBuild
203432
203987
  });
203433
203988
  import { readdir as readdir3 } from "fs/promises";
203434
- import { statSync } from "fs";
203435
- import { resolve as resolve19 } from "path";
203989
+ import { statSync as statSync3 } from "fs";
203990
+ import { resolve as resolve20 } from "path";
203436
203991
  var FRAMEWORK_DIR_KEYS, parseDirectoryConfig = (source) => {
203437
203992
  const config = {};
203438
203993
  const dirPattern = /(\w+Directory)\s*:\s*['"]([^'"]+)['"]/g;
@@ -203445,7 +204000,7 @@ var FRAMEWORK_DIR_KEYS, parseDirectoryConfig = (source) => {
203445
204000
  return Object.keys(config).length > 0 ? config : null;
203446
204001
  }, reloadConfig = async () => {
203447
204002
  try {
203448
- const configPath2 = resolve19(process.env.ABSOLUTE_CONFIG ?? "absolute.config.ts");
204003
+ const configPath2 = resolve20(process.env.ABSOLUTE_CONFIG ?? "absolute.config.ts");
203449
204004
  const source = await Bun.file(configPath2).text();
203450
204005
  return parseDirectoryConfig(source);
203451
204006
  } catch {
@@ -203518,7 +204073,7 @@ var FRAMEWORK_DIR_KEYS, parseDirectoryConfig = (source) => {
203518
204073
  state.fileChangeQueue.clear();
203519
204074
  }
203520
204075
  }, handleCachedReload = async () => {
203521
- const serverMtime = statSync(resolve19(Bun.main)).mtimeMs;
204076
+ const serverMtime = statSync3(resolve20(Bun.main)).mtimeMs;
203522
204077
  const lastMtime = globalThis.__hmrServerMtime;
203523
204078
  globalThis.__hmrServerMtime = serverMtime;
203524
204079
  const cached = globalThis.__hmrDevResult;
@@ -203546,8 +204101,8 @@ var FRAMEWORK_DIR_KEYS, parseDirectoryConfig = (source) => {
203546
204101
  return true;
203547
204102
  }, resolveAbsoluteVersion2 = async () => {
203548
204103
  const candidates = [
203549
- resolve19(import.meta.dir, "..", "..", "package.json"),
203550
- resolve19(import.meta.dir, "..", "package.json")
204104
+ resolve20(import.meta.dir, "..", "..", "package.json"),
204105
+ resolve20(import.meta.dir, "..", "package.json")
203551
204106
  ];
203552
204107
  for (const candidate of candidates) {
203553
204108
  const found = await tryReadPackageVersion(candidate);
@@ -203560,7 +204115,7 @@ var FRAMEWORK_DIR_KEYS, parseDirectoryConfig = (source) => {
203560
204115
  const entries = await readdir3(vendorDir).catch(() => emptyStringArray);
203561
204116
  await Promise.all(entries.map(async (entry) => {
203562
204117
  const webPath = `/${framework}/vendor/${entry}`;
203563
- const bytes = await Bun.file(resolve19(vendorDir, entry)).bytes();
204118
+ const bytes = await Bun.file(resolve20(vendorDir, entry)).bytes();
203564
204119
  assetStore.set(webPath, bytes);
203565
204120
  }));
203566
204121
  }, devBuild = async (config) => {
@@ -203594,7 +204149,7 @@ var FRAMEWORK_DIR_KEYS, parseDirectoryConfig = (source) => {
203594
204149
  await populateAssetStore(state.assetStore, manifest ?? {}, state.resolvedPaths.buildDir);
203595
204150
  cleanStaleAssets(state.assetStore, manifest ?? {}, state.resolvedPaths.buildDir);
203596
204151
  const buildReactVendorTask = config.reactDirectory ? buildReactVendor(state.resolvedPaths.buildDir).then(async () => {
203597
- const vendorDir = resolve19(state.resolvedPaths.buildDir, "react", "vendor");
204152
+ const vendorDir = resolve20(state.resolvedPaths.buildDir, "react", "vendor");
203598
204153
  await loadVendorFiles(state.assetStore, vendorDir, "react");
203599
204154
  if (!globalThis.__reactModuleRef) {
203600
204155
  globalThis.__reactModuleRef = await import("react");
@@ -203602,11 +204157,30 @@ var FRAMEWORK_DIR_KEYS, parseDirectoryConfig = (source) => {
203602
204157
  return true;
203603
204158
  }) : undefined;
203604
204159
  const buildAngularVendorTask = config.angularDirectory ? buildAngularVendor(state.resolvedPaths.buildDir).then(async () => {
203605
- const vendorDir = resolve19(state.resolvedPaths.buildDir, "angular", "vendor");
204160
+ const vendorDir = resolve20(state.resolvedPaths.buildDir, "angular", "vendor");
203606
204161
  await loadVendorFiles(state.assetStore, vendorDir, "angular");
203607
204162
  return true;
203608
204163
  }) : undefined;
203609
- await Promise.all([buildReactVendorTask, buildAngularVendorTask]);
204164
+ const { buildDepVendor: buildDepVendor2 } = await Promise.resolve().then(() => (init_buildDepVendor(), exports_buildDepVendor));
204165
+ const sourceDirs = [
204166
+ config.reactDirectory,
204167
+ config.svelteDirectory,
204168
+ config.vueDirectory,
204169
+ config.angularDirectory,
204170
+ config.htmlDirectory,
204171
+ config.htmxDirectory
204172
+ ].filter((dir) => Boolean(dir));
204173
+ const buildDepVendorTask = buildDepVendor2(state.resolvedPaths.buildDir, sourceDirs).then(async (depPaths) => {
204174
+ const vendorDir = resolve20(state.resolvedPaths.buildDir, "vendor");
204175
+ await loadVendorFiles(state.assetStore, vendorDir, "vendor");
204176
+ globalThis.__depVendorPaths = depPaths;
204177
+ return true;
204178
+ });
204179
+ await Promise.all([
204180
+ buildReactVendorTask,
204181
+ buildAngularVendorTask,
204182
+ buildDepVendorTask
204183
+ ]);
203610
204184
  state.manifest = manifest;
203611
204185
  startFileWatching(state, config, (filePath) => {
203612
204186
  queueFileChange(state, filePath, config, (newBuildResult) => {
@@ -203620,7 +204194,7 @@ var FRAMEWORK_DIR_KEYS, parseDirectoryConfig = (source) => {
203620
204194
  manifest
203621
204195
  };
203622
204196
  globalThis.__hmrDevResult = result;
203623
- globalThis.__hmrServerMtime = statSync(resolve19(Bun.main)).mtimeMs;
204197
+ globalThis.__hmrServerMtime = statSync3(resolve20(Bun.main)).mtimeMs;
203624
204198
  return result;
203625
204199
  };
203626
204200
  var init_devBuild = __esm(() => {
@@ -203653,5 +204227,5 @@ export {
203653
204227
  build
203654
204228
  };
203655
204229
 
203656
- //# debugId=1D33E4408EA8223D64756E2164756E21
204230
+ //# debugId=8043AA6879663C2A64756E2164756E21
203657
204231
  //# sourceMappingURL=build.js.map