@absolutejs/absolute 0.20.0-beta.177 → 0.20.0-beta.178

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.
Files changed (82) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/changelog.json +51 -0
  3. package/dist/angular/browser.js +17 -2
  4. package/dist/angular/browser.js.map +4 -4
  5. package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
  6. package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
  7. package/dist/angular/index.js +57 -33
  8. package/dist/angular/index.js.map +9 -8
  9. package/dist/angular/server.js +57 -33
  10. package/dist/angular/server.js.map +9 -8
  11. package/dist/build.js +532 -416
  12. package/dist/build.js.map +15 -15
  13. package/dist/cli/{compile-w2z6c9vt.js → compile-p5yv6ecp.js} +2 -2
  14. package/dist/cli/config/server.js +45 -12
  15. package/dist/cli/{dev-8br5mr7t.js → dev-2hbcsvkp.js} +1 -1
  16. package/dist/cli/{index-420h9hq7.js → index-1ewba8ye.js} +32 -3
  17. package/dist/cli/{index-7z1hh3fg.js → index-9dzdbbfc.js} +1 -1
  18. package/dist/cli/index.js +7 -7
  19. package/dist/cli/{islands-bx67g15t.js → islands-6zgb7501.js} +1 -1
  20. package/dist/cli/{mobile-we5q51ey.js → mobile-c92dh8s2.js} +2 -2
  21. package/dist/cli/{start-srs11bm8.js → start-asxb79rc.js} +2 -2
  22. package/dist/cli/{typecheck-7fvww3b7.js → typecheck-m2j4tkdk.js} +165 -35
  23. package/dist/client/chunks/{index-8m2qq61n.js → index-58svs66p.js} +13 -3
  24. package/dist/client/chunks/{index-8m2qq61n.js.map → index-58svs66p.js.map} +5 -4
  25. package/dist/client/chunks/{islands-mfjmdwnb.js → islands-tcadmgcx.js} +3 -6
  26. package/dist/client/chunks/{islands-mfjmdwnb.js.map → islands-tcadmgcx.js.map} +3 -4
  27. package/dist/client/chunks/{react-sprprqzs.js → react-khr6ewhr.js} +2 -2
  28. package/dist/client/index.js +82 -6
  29. package/dist/client/index.js.map +7 -6
  30. package/dist/dev/client/handlers/islands.ts +2 -0
  31. package/dist/dev/client/handlers/react.ts +92 -111
  32. package/dist/dev/client/handlers/reactUpdateQueue.ts +153 -0
  33. package/dist/index.js +505 -389
  34. package/dist/index.js.map +15 -15
  35. package/dist/islands/browser.js +2 -2
  36. package/dist/islands/browser.js.map +3 -3
  37. package/dist/islands/index.js +13 -6
  38. package/dist/islands/index.js.map +6 -5
  39. package/dist/react/browser.js +113 -12
  40. package/dist/react/browser.js.map +10 -7
  41. package/dist/react/components/index.js +31 -7
  42. package/dist/react/components/index.js.map +5 -4
  43. package/dist/react/components/server/index.js +22 -6
  44. package/dist/react/index.js +190 -46
  45. package/dist/react/index.js.map +15 -11
  46. package/dist/react/server.js +82 -23
  47. package/dist/react/server.js.map +11 -9
  48. package/dist/src/build/compileSvelte.d.ts +12 -1
  49. package/dist/src/build/compileVue.d.ts +1 -0
  50. package/dist/src/build/islandEntries.d.ts +3 -1
  51. package/dist/src/cli/scripts/typecheck.d.ts +8 -0
  52. package/dist/src/cli/scripts/typecheckDiagnostics.d.ts +17 -0
  53. package/dist/src/client/preserveIslandMarkup.d.ts +4 -0
  54. package/dist/src/core/islandManifest.d.ts +6 -0
  55. package/dist/src/core/islandStylesheet.d.ts +17 -0
  56. package/dist/src/react/Island.d.ts +9 -2
  57. package/dist/src/react/IslandStyleLink.d.ts +11 -0
  58. package/dist/src/react/createIsland.d.ts +1 -1
  59. package/dist/src/react/serverComponents/nodeRendererRef.d.ts +13 -0
  60. package/dist/src/utils/requestRenderUrl.d.ts +1 -0
  61. package/dist/src/utils/resolveConvention.d.ts +1 -0
  62. package/dist/src/vue/Island.browser.d.ts +3 -1
  63. package/dist/src/vue/Island.d.ts +2 -2
  64. package/dist/src/vue/createIsland.browser.d.ts +2 -2
  65. package/dist/src/vue/createIsland.d.ts +2 -2
  66. package/dist/src/vue/islandStyleLink.d.ts +30 -0
  67. package/dist/svelte/browser.js +2 -2
  68. package/dist/svelte/browser.js.map +3 -3
  69. package/dist/svelte/index.js +51 -49
  70. package/dist/svelte/index.js.map +9 -8
  71. package/dist/svelte/server.js +48 -45
  72. package/dist/svelte/server.js.map +8 -7
  73. package/dist/types/globals.d.ts +3 -0
  74. package/dist/vue/browser.js +105 -10
  75. package/dist/vue/browser.js.map +10 -7
  76. package/dist/vue/index.js +170 -47
  77. package/dist/vue/index.js.map +14 -11
  78. package/dist/vue/server.js +81 -22
  79. package/dist/vue/server.js.map +9 -7
  80. package/package.json +1 -1
  81. /package/dist/cli/{index-6522t968.js → index-yd672jyq.js} +0 -0
  82. /package/dist/client/chunks/{react-sprprqzs.js.map → react-khr6ewhr.js.map} +0 -0
@@ -328,7 +328,7 @@ var ISLAND_BOOTSTRAP_MANIFEST_KEY = "AbsoluteIslandBootstrap", LEGACY_ISLAND_BOO
328
328
  islands[framework] = entries;
329
329
  }
330
330
  return islands;
331
- }, getIslandManifestKey = (framework, component) => `Island${toIslandFrameworkSegment(framework)}${component}`;
331
+ }, getIslandManifestKey = (framework, component) => `Island${toIslandFrameworkSegment(framework)}${component}`, ISLAND_STYLE_PREFIX = "IslandStyle", getIslandStyleManifestEntries = (manifest) => Object.entries(manifest).filter(([key]) => key.startsWith(ISLAND_STYLE_PREFIX)), getIslandStyleManifestKey = (framework, component) => `${ISLAND_STYLE_PREFIX}${toIslandFrameworkSegment(framework)}${component}`;
332
332
 
333
333
  // src/core/islandPageContext.ts
334
334
  var ISLAND_MARKER = 'data-island="true"', MANIFEST_MARKER = "__ABSOLUTE_MANIFEST__", ISLAND_STATE_MARKER = "__ABS_ISLAND_STATE__", CLOSING_HEAD_TAG = "</head>", warnedMissingBootstrap = false, warnIfBootstrapMissing = (manifest) => {
@@ -365,12 +365,27 @@ var ISLAND_MARKER = 'data-island="true"', MANIFEST_MARKER = "__ABSOLUTE_MANIFEST
365
365
  browserManifest[key] = value;
366
366
  }
367
367
  return browserManifest;
368
- }, buildIslandsHeadMarkup = (manifest) => {
368
+ }, ISLAND_MARKER_TAG, ISLAND_FRAMEWORKS, readMarkerAttribute = (tag, name) => new RegExp(`\\b${name}="([^"]*)"`).exec(tag)?.[1]?.replaceAll("&quot;", '"').replaceAll("&lt;", "<").replaceAll("&gt;", ">").replaceAll("&amp;", "&"), toIslandFramework = (value) => ISLAND_FRAMEWORKS.find((framework) => framework === value), collectRenderedIslandStyleKeys = (html) => {
369
+ const keys = new Set;
370
+ for (const [tag] of html.matchAll(ISLAND_MARKER_TAG)) {
371
+ const framework = toIslandFramework(readMarkerAttribute(tag, "data-framework"));
372
+ const component = readMarkerAttribute(tag, "data-component");
373
+ if (framework && component)
374
+ keys.add(getIslandStyleManifestKey(framework, component));
375
+ }
376
+ return keys;
377
+ }, buildIslandStyleLinks = (manifest, html) => {
378
+ if (html === undefined)
379
+ return "";
380
+ const renderedKeys = collectRenderedIslandStyleKeys(html);
381
+ return getIslandStyleManifestEntries(manifest).filter(([key]) => renderedKeys.has(key)).filter(([, href]) => !html.includes(`href="${href}"`)).map(([key, href]) => `<link rel="stylesheet" href="${href}" data-island-style="${key}"${nonceAttr()}>`).join("");
382
+ }, buildIslandsHeadMarkup = (manifest, html) => {
383
+ const styleLinks = buildIslandStyleLinks(manifest, html);
369
384
  const manifestScript = `<script${nonceAttr()}>window.__ABSOLUTE_MANIFEST__ = ${escapeScriptContent(JSON.stringify(toBrowserManifest(manifest)))}</script>`;
370
385
  const islandStateScript = `<script${nonceAttr()}>window.__ABS_ISLAND_STATE__ = ${escapeScriptContent(JSON.stringify(globalThis.__ABS_ISLAND_STATE__ ?? {}))}</script>`;
371
386
  const bootstrapPath = getIslandBootstrapPath(manifest);
372
387
  const bootstrapScript = bootstrapPath ? `<script${nonceAttr()} type="module" src="${bootstrapPath}"></script>` : "";
373
- return `${manifestScript}${islandStateScript}${bootstrapScript}`;
388
+ return `${styleLinks}${manifestScript}${islandStateScript}${bootstrapScript}`;
374
389
  }, injectHeadMarkup = (html, markup) => {
375
390
  const closingHeadIndex = html.indexOf("</head>");
376
391
  if (closingHeadIndex >= 0) {
@@ -552,7 +567,7 @@ var ISLAND_MARKER = 'data-island="true"', MANIFEST_MARKER = "__ABSOLUTE_MANIFEST
552
567
  return html;
553
568
  }
554
569
  warnIfBootstrapMissing(manifest);
555
- return injectHeadMarkup(html, buildIslandsHeadMarkup(manifest));
570
+ return injectHeadMarkup(html, buildIslandsHeadMarkup(manifest, html));
556
571
  }, injectIslandPageContextStream = (stream, options) => {
557
572
  const manifest = globalThis.__absoluteManifest;
558
573
  if (!manifest)
@@ -576,6 +591,13 @@ var init_islandPageContext = __esm(() => {
576
591
  init_logger();
577
592
  MANIFEST_BUILD_DIR_KEY = Symbol.for("absolutejs.islandManifestBuildDir");
578
593
  WINDOWS_ABSOLUTE_PATH = /^[A-Za-z]:[\\/]|^\\\\/;
594
+ ISLAND_MARKER_TAG = /<[^>]*\bdata-island="true"[^>]*>/g;
595
+ ISLAND_FRAMEWORKS = [
596
+ "react",
597
+ "svelte",
598
+ "vue",
599
+ "angular"
600
+ ];
579
601
  });
580
602
 
581
603
  // src/core/routeAssets.ts
@@ -918,6 +940,12 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
918
940
  logConventionRenderError(framework, "error", renderError);
919
941
  }
920
942
  return null;
943
+ }, isPageRequest = (request) => {
944
+ if (request.headers.get("hx-request") === "true")
945
+ return true;
946
+ if (request.headers.get("sec-fetch-dest") === "document")
947
+ return true;
948
+ return (request.headers.get("accept") ?? "").includes("text/html");
921
949
  }, renderConventionError = async (framework, pageName, error) => {
922
950
  const errorProps = buildErrorProps(error);
923
951
  const frameworkResponse = await tryFrameworkErrorConvention(framework, pageName, errorProps, error);
@@ -929,12 +957,6 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
929
957
  return htmlResponse;
930
958
  }
931
959
  return null;
932
- }, isPageRequest = (request) => {
933
- if (request.headers.get("hx-request") === "true")
934
- return true;
935
- if (request.headers.get("sec-fetch-dest") === "document")
936
- return true;
937
- return (request.headers.get("accept") ?? "").includes("text/html");
938
960
  }, renderStaticRouteError = async (request, error) => {
939
961
  if (!isPageRequest(request))
940
962
  return null;
@@ -3408,9 +3430,9 @@ var createVueCompiler = async () => {
3408
3430
  // src/core/vueServerModule.ts
3409
3431
  import { readFileSync as readFileSync4, realpathSync } from "fs";
3410
3432
  import { mkdir as mkdir3 } from "fs/promises";
3411
- import { dirname as dirname4, join as join7, relative as relative4, resolve as resolve5 } from "path";
3433
+ import { basename as basename4, dirname as dirname4, join as join7, relative as relative4, resolve as resolve5 } from "path";
3412
3434
  var {Transpiler } = globalThis.Bun;
3413
- var ISLAND_COMPONENT_ID_LENGTH = 8, serverCacheRoot3, compiledModuleCache3, syncIslandGeneration2, transpiler2, ensureRelativeImportPath2 = (from, target) => {
3435
+ var serverCacheRoot3, compiledModuleCache3, syncIslandGeneration2, transpiler2, ensureRelativeImportPath2 = (from, target) => {
3414
3436
  const importPath = relative4(dirname4(from), target).replace(/\\/g, "/");
3415
3437
  return importPath.startsWith(".") ? importPath : `./${importPath}`;
3416
3438
  }, getCachedModulePath3 = (sourcePath) => {
@@ -3452,7 +3474,7 @@ var ISLAND_COMPONENT_ID_LENGTH = 8, serverCacheRoot3, compiledModuleCache3, sync
3452
3474
  const compiler = await loadVueCompiler();
3453
3475
  const source = await Bun.file(sourcePath).text();
3454
3476
  const { descriptor } = compiler.parse(source, { filename: sourcePath });
3455
- const componentId = Bun.hash(sourcePath).toString(BASE_36_RADIX).slice(0, ISLAND_COMPONENT_ID_LENGTH);
3477
+ const componentId = toKebab(basename4(sourcePath, ".vue"));
3456
3478
  const hasScript = descriptor.script || descriptor.scriptSetup;
3457
3479
  const compiledScript = hasScript ? compiler.compileScript(descriptor, {
3458
3480
  fs: {
@@ -3502,7 +3524,6 @@ var ISLAND_COMPONENT_ID_LENGTH = 8, serverCacheRoot3, compiledModuleCache3, sync
3502
3524
  return compiledModulePath;
3503
3525
  };
3504
3526
  var init_vueServerModule = __esm(() => {
3505
- init_constants();
3506
3527
  init_isFile();
3507
3528
  serverCacheRoot3 = join7(process.cwd(), ".absolutejs", "islands", "vue");
3508
3529
  compiledModuleCache3 = new Map;
@@ -5599,7 +5620,7 @@ __export(exports_compileAngular, {
5599
5620
  invalidateAngularJitCache: () => invalidateAngularJitCache
5600
5621
  });
5601
5622
  import { existsSync as existsSync5, readFileSync as readFileSync6, promises as fs } from "fs";
5602
- import { join as join9, basename as basename4, sep, dirname as dirname5, resolve as resolve6, relative as relative5 } from "path";
5623
+ import { join as join9, basename as basename5, sep, dirname as dirname5, resolve as resolve6, relative as relative5 } from "path";
5603
5624
  var {Glob } = globalThis.Bun;
5604
5625
  var atomicWriteSequence = 0, writeTextFileAtomically = async (path, content) => {
5605
5626
  const temporaryPath = `${path}.tmp.${process.pid}.${atomicWriteSequence++}`;
@@ -5981,7 +6002,7 @@ var atomicWriteSequence = 0, writeTextFileAtomically = async (path, content) =>
5981
6002
  const originalGetDefaultLibFileName = host.getDefaultLibFileName;
5982
6003
  host.getDefaultLibFileName = (opts) => {
5983
6004
  const fileName = originalGetDefaultLibFileName ? originalGetDefaultLibFileName(opts) : "lib.d.ts";
5984
- return basename4(fileName);
6005
+ return basename5(fileName);
5985
6006
  };
5986
6007
  const originalGetSourceFile = host.getSourceFile;
5987
6008
  host.getSourceFile = (fileName, languageVersion, onError) => {
@@ -6422,7 +6443,7 @@ ${fields}
6422
6443
  };
6423
6444
  const toOutputPath = (sourcePath) => {
6424
6445
  const inputDir = dirname5(sourcePath);
6425
- const fileBase = basename4(sourcePath).replace(/\.[cm]?[tj]sx?$/, ".js");
6446
+ const fileBase = basename5(sourcePath).replace(/\.[cm]?[tj]sx?$/, ".js");
6426
6447
  if (inputDir === outDir || inputDir.startsWith(`${outDir}${sep}`)) {
6427
6448
  return join9(inputDir, fileBase);
6428
6449
  }
@@ -6478,7 +6499,7 @@ ${fields}
6478
6499
  const inputDir = dirname5(resolved);
6479
6500
  const relativeDir = inputDir.startsWith(baseDir) ? inputDir.substring(baseDir.length + 1) : inputDir;
6480
6501
  const targetDir = join9(outDir, relativeDir);
6481
- const targetPath = join9(targetDir, basename4(resolved));
6502
+ const targetPath = join9(targetDir, basename5(resolved));
6482
6503
  await fs.mkdir(targetDir, { recursive: true });
6483
6504
  await fs.copyFile(resolved, targetPath);
6484
6505
  allOutputs.push(targetPath);
@@ -6493,7 +6514,7 @@ ${fields}
6493
6514
  const inlined = await inlineResources(sourceCode, dirname5(actualPath), stylePreprocessors);
6494
6515
  sourceCode = inlineTemplateAndLowerDeferSync(inlined.source, dirname5(actualPath)).source;
6495
6516
  const inputDir = dirname5(actualPath);
6496
- const fileBase = basename4(actualPath).replace(/\.[cm]?[tj]sx?$/, ".js");
6517
+ const fileBase = basename5(actualPath).replace(/\.[cm]?[tj]sx?$/, ".js");
6497
6518
  const targetPath = toOutputPath(actualPath);
6498
6519
  const targetDir = dirname5(targetPath);
6499
6520
  const relativeDir = relative5(outDir, targetDir).replace(/\\/g, "/");
@@ -6622,7 +6643,7 @@ export const __ABSOLUTE_PAGE_USES_LEGACY_ANIMATIONS__ = true;
6622
6643
  let outputs = hmr ? await traceAngularPhase("jit/compile-entry", compileEntry, {
6623
6644
  entry: resolvedEntry
6624
6645
  }) : aotOutputs;
6625
- const fileBase = basename4(resolvedEntry).replace(/\.[tj]s$/, "");
6646
+ const fileBase = basename5(resolvedEntry).replace(/\.[tj]s$/, "");
6626
6647
  const jsName = `${fileBase}.js`;
6627
6648
  const compiledFallbackPaths = [
6628
6649
  join9(compiledRoot, relativeEntry),
@@ -7075,6 +7096,18 @@ var provideDeterministicEnv = (options = {}) => {
7075
7096
  }
7076
7097
  ];
7077
7098
  };
7099
+ // src/utils/requestRenderUrl.ts
7100
+ var requestRenderUrl = (request) => {
7101
+ if (!request)
7102
+ return;
7103
+ try {
7104
+ const parsed = new URL(request.url);
7105
+ return `${parsed.pathname.replace(/\/{2,}/g, "/")}${parsed.search}`;
7106
+ } catch {
7107
+ return;
7108
+ }
7109
+ };
7110
+
7078
7111
  // src/angular/pageHandler.ts
7079
7112
  init_constants();
7080
7113
  init_islandPageContext();
@@ -7086,7 +7119,7 @@ init_registerClientScript();
7086
7119
  init_angularDeps();
7087
7120
  import { AsyncLocalStorage as AsyncLocalStorage5 } from "async_hooks";
7088
7121
  import { lstat, mkdir as mkdir4, readlink, symlink } from "fs/promises";
7089
- import { basename as basename5, dirname as dirname6, join as join10, resolve as resolve7 } from "path";
7122
+ import { basename as basename6, dirname as dirname6, join as join10, resolve as resolve7 } from "path";
7090
7123
 
7091
7124
  // src/angular/animationProviders.ts
7092
7125
  init_resolveAngularPackage();
@@ -7728,7 +7761,7 @@ var resolveRuntimeAngularModulePath = async (pagePath) => {
7728
7761
  await Promise.resolve().then(() => init_compileAngular());
7729
7762
  const cacheBuster = createAngularRuntimeCacheBuster();
7730
7763
  const outputs = await compileAngularFileJIT(pagePath, outDir, process.cwd(), undefined, cacheBuster);
7731
- const expectedFileName = basename5(pagePath).replace(/\.ts$/, ".js");
7764
+ const expectedFileName = basename6(pagePath).replace(/\.ts$/, ".js");
7732
7765
  const runtimePagePath = outputs.find((output) => output.endsWith(`/${expectedFileName}`)) ?? outputs.find((output) => output.endsWith(`\\${expectedFileName}`)) ?? outputs[0] ?? pagePath;
7733
7766
  return {
7734
7767
  cacheBuster,
@@ -7748,16 +7781,7 @@ var withHtmlContentType = (responseInit = {}) => {
7748
7781
  }
7749
7782
  return { ...responseInit, headers };
7750
7783
  };
7751
- var resolveRequestRenderUrl = (request) => {
7752
- if (!request)
7753
- return "/";
7754
- try {
7755
- const parsed = new URL(request.url);
7756
- return `${parsed.pathname}${parsed.search}`;
7757
- } catch {
7758
- return "/";
7759
- }
7760
- };
7784
+ var resolveRequestRenderUrl = (request) => requestRenderUrl(request) ?? "/";
7761
7785
  var angularSsrContext = new AsyncLocalStorage5;
7762
7786
  setSsrContextGetter(() => angularSsrContext.getStore());
7763
7787
  var handleAngularPageRequest = async (input) => {
@@ -7902,5 +7926,5 @@ export {
7902
7926
  withPendingTask
7903
7927
  };
7904
7928
 
7905
- //# debugId=3FD4269B8E368DF764756E2164756E21
7929
+ //# debugId=484B4660FADE4A8F64756E2164756E21
7906
7930
  //# sourceMappingURL=server.js.map