@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
@@ -1571,7 +1571,7 @@ var ISLAND_BOOTSTRAP_MANIFEST_KEY = "AbsoluteIslandBootstrap", LEGACY_ISLAND_BOO
1571
1571
  islands[framework] = entries;
1572
1572
  }
1573
1573
  return islands;
1574
- }, getIslandManifestKey = (framework, component) => `Island${toIslandFrameworkSegment(framework)}${component}`;
1574
+ }, 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}`;
1575
1575
 
1576
1576
  // src/core/islandPageContext.ts
1577
1577
  var ISLAND_MARKER = 'data-island="true"', MANIFEST_MARKER = "__ABSOLUTE_MANIFEST__", ISLAND_STATE_MARKER = "__ABS_ISLAND_STATE__", CLOSING_HEAD_TAG = "</head>", warnedMissingBootstrap = false, warnIfBootstrapMissing = (manifest) => {
@@ -1608,12 +1608,27 @@ var ISLAND_MARKER = 'data-island="true"', MANIFEST_MARKER = "__ABSOLUTE_MANIFEST
1608
1608
  browserManifest[key] = value;
1609
1609
  }
1610
1610
  return browserManifest;
1611
- }, buildIslandsHeadMarkup = (manifest) => {
1611
+ }, 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) => {
1612
+ const keys = new Set;
1613
+ for (const [tag] of html.matchAll(ISLAND_MARKER_TAG)) {
1614
+ const framework = toIslandFramework(readMarkerAttribute(tag, "data-framework"));
1615
+ const component = readMarkerAttribute(tag, "data-component");
1616
+ if (framework && component)
1617
+ keys.add(getIslandStyleManifestKey(framework, component));
1618
+ }
1619
+ return keys;
1620
+ }, buildIslandStyleLinks = (manifest, html) => {
1621
+ if (html === undefined)
1622
+ return "";
1623
+ const renderedKeys = collectRenderedIslandStyleKeys(html);
1624
+ 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("");
1625
+ }, buildIslandsHeadMarkup = (manifest, html) => {
1626
+ const styleLinks = buildIslandStyleLinks(manifest, html);
1612
1627
  const manifestScript = `<script${nonceAttr()}>window.__ABSOLUTE_MANIFEST__ = ${escapeScriptContent(JSON.stringify(toBrowserManifest(manifest)))}</script>`;
1613
1628
  const islandStateScript = `<script${nonceAttr()}>window.__ABS_ISLAND_STATE__ = ${escapeScriptContent(JSON.stringify(globalThis.__ABS_ISLAND_STATE__ ?? {}))}</script>`;
1614
1629
  const bootstrapPath = getIslandBootstrapPath(manifest);
1615
1630
  const bootstrapScript = bootstrapPath ? `<script${nonceAttr()} type="module" src="${bootstrapPath}"></script>` : "";
1616
- return `${manifestScript}${islandStateScript}${bootstrapScript}`;
1631
+ return `${styleLinks}${manifestScript}${islandStateScript}${bootstrapScript}`;
1617
1632
  }, injectHeadMarkup = (html, markup) => {
1618
1633
  const closingHeadIndex = html.indexOf("</head>");
1619
1634
  if (closingHeadIndex >= 0) {
@@ -1795,7 +1810,7 @@ var ISLAND_MARKER = 'data-island="true"', MANIFEST_MARKER = "__ABSOLUTE_MANIFEST
1795
1810
  return html;
1796
1811
  }
1797
1812
  warnIfBootstrapMissing(manifest);
1798
- return injectHeadMarkup(html, buildIslandsHeadMarkup(manifest));
1813
+ return injectHeadMarkup(html, buildIslandsHeadMarkup(manifest, html));
1799
1814
  }, injectIslandPageContextStream = (stream, options) => {
1800
1815
  const manifest = globalThis.__absoluteManifest;
1801
1816
  if (!manifest)
@@ -1819,6 +1834,13 @@ var init_islandPageContext = __esm(() => {
1819
1834
  init_logger();
1820
1835
  MANIFEST_BUILD_DIR_KEY = Symbol.for("absolutejs.islandManifestBuildDir");
1821
1836
  WINDOWS_ABSOLUTE_PATH = /^[A-Za-z]:[\\/]|^\\\\/;
1837
+ ISLAND_MARKER_TAG = /<[^>]*\bdata-island="true"[^>]*>/g;
1838
+ ISLAND_FRAMEWORKS = [
1839
+ "react",
1840
+ "svelte",
1841
+ "vue",
1842
+ "angular"
1843
+ ];
1822
1844
  });
1823
1845
 
1824
1846
  // src/core/devRouteRegistrationCallsite.ts
@@ -3286,6 +3308,12 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
3286
3308
  logConventionRenderError(framework, "error", renderError);
3287
3309
  }
3288
3310
  return null;
3311
+ }, isPageRequest = (request) => {
3312
+ if (request.headers.get("hx-request") === "true")
3313
+ return true;
3314
+ if (request.headers.get("sec-fetch-dest") === "document")
3315
+ return true;
3316
+ return (request.headers.get("accept") ?? "").includes("text/html");
3289
3317
  }, renderConventionError = async (framework, pageName, error) => {
3290
3318
  const errorProps = buildErrorProps(error);
3291
3319
  const frameworkResponse = await tryFrameworkErrorConvention(framework, pageName, errorProps, error);
@@ -3297,12 +3325,6 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
3297
3325
  return htmlResponse;
3298
3326
  }
3299
3327
  return null;
3300
- }, isPageRequest = (request) => {
3301
- if (request.headers.get("hx-request") === "true")
3302
- return true;
3303
- if (request.headers.get("sec-fetch-dest") === "document")
3304
- return true;
3305
- return (request.headers.get("accept") ?? "").includes("text/html");
3306
3328
  }, renderStaticRouteError = async (request, error) => {
3307
3329
  if (!isPageRequest(request))
3308
3330
  return null;
@@ -3696,6 +3718,18 @@ var asset = (source, name) => {
3696
3718
  return assetPath;
3697
3719
  };
3698
3720
 
3721
+ // src/utils/requestRenderUrl.ts
3722
+ var requestRenderUrl = (request) => {
3723
+ if (!request)
3724
+ return;
3725
+ try {
3726
+ const parsed = new URL(request.url);
3727
+ return `${parsed.pathname.replace(/\/{2,}/g, "/")}${parsed.search}`;
3728
+ } catch {
3729
+ return;
3730
+ }
3731
+ };
3732
+
3699
3733
  // src/svelte/pageHandler.ts
3700
3734
  init_cspNonceRef();
3701
3735
  init_svelteServerModule();
@@ -4085,35 +4119,7 @@ var readHasIslands = (value) => {
4085
4119
  return typeof hasIslands === "boolean" ? hasIslands : false;
4086
4120
  };
4087
4121
  var readDefaultExport = (value) => isRecord5(value) ? value.default : undefined;
4088
- var primeSvelteStream = async (stream) => {
4089
- const reader = stream.getReader();
4090
- const firstChunk = await reader.read();
4091
- return { firstChunk, reader };
4092
- };
4093
- var restorePrimedStream = (firstChunk, reader) => new ReadableStream({
4094
- start(controller) {
4095
- if (!firstChunk.done)
4096
- controller.enqueue(firstChunk.value);
4097
- if (firstChunk.done) {
4098
- controller.close();
4099
- return;
4100
- }
4101
- const pumpLoop = () => {
4102
- reader.read().then(({ done, value }) => done ? controller.close() : (controller.enqueue(value), pumpLoop())).catch((err) => controller.error(err));
4103
- };
4104
- pumpLoop();
4105
- }
4106
- });
4107
- var resolveRequestPathname = (request) => {
4108
- if (!request)
4109
- return;
4110
- try {
4111
- const parsed = new URL(request.url);
4112
- return `${parsed.pathname}${parsed.search}`;
4113
- } catch {
4114
- return;
4115
- }
4116
- };
4122
+ var resolveRequestPathname = (request) => requestRenderUrl(request);
4117
4123
  var handleSveltePageRequest = async (input) => {
4118
4124
  const deferredAssets = input.pagePath === "" || input.indexPath === "" ? await resolveDeferredPageAssets() : null;
4119
4125
  const buildFailure = devBuildErrorResponse("svelte", deferredAssets);
@@ -4209,11 +4215,8 @@ var handleSveltePageRequest = async (input) => {
4209
4215
  const routerResponse = routerSsr.response();
4210
4216
  if (routerResponse)
4211
4217
  return routerResponse;
4212
- const htmlStream = injectIslandPageContextStream(stream, {
4213
- hasIslands: resolvedPage.hasIslands ? true : undefined
4214
- });
4215
- const { firstChunk, reader } = await primeSvelteStream(htmlStream);
4216
- return new Response(restorePrimedStream(firstChunk, reader), {
4218
+ const html = injectIslandPageContext(await new Response(stream).text(), { hasIslands: resolvedPage.hasIslands ? true : undefined });
4219
+ return new Response(html, {
4217
4220
  headers: streamingPageHeaders()
4218
4221
  });
4219
4222
  };
@@ -4250,5 +4253,5 @@ export {
4250
4253
  svelteFileRoute
4251
4254
  };
4252
4255
 
4253
- //# debugId=20CAA04A1EAF2FEF64756E2164756E21
4256
+ //# debugId=4FFDB09A23C0E0D964756E2164756E21
4254
4257
  //# sourceMappingURL=server.js.map