@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.
- package/CHANGELOG.md +26 -0
- package/changelog.json +51 -0
- package/dist/angular/browser.js +17 -2
- package/dist/angular/browser.js.map +4 -4
- package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/angular/index.js +57 -33
- package/dist/angular/index.js.map +9 -8
- package/dist/angular/server.js +57 -33
- package/dist/angular/server.js.map +9 -8
- package/dist/build.js +532 -416
- package/dist/build.js.map +15 -15
- package/dist/cli/{compile-w2z6c9vt.js → compile-p5yv6ecp.js} +2 -2
- package/dist/cli/config/server.js +45 -12
- package/dist/cli/{dev-8br5mr7t.js → dev-2hbcsvkp.js} +1 -1
- package/dist/cli/{index-420h9hq7.js → index-1ewba8ye.js} +32 -3
- package/dist/cli/{index-7z1hh3fg.js → index-9dzdbbfc.js} +1 -1
- package/dist/cli/index.js +7 -7
- package/dist/cli/{islands-bx67g15t.js → islands-6zgb7501.js} +1 -1
- package/dist/cli/{mobile-we5q51ey.js → mobile-c92dh8s2.js} +2 -2
- package/dist/cli/{start-srs11bm8.js → start-asxb79rc.js} +2 -2
- package/dist/cli/{typecheck-7fvww3b7.js → typecheck-m2j4tkdk.js} +165 -35
- package/dist/client/chunks/{index-8m2qq61n.js → index-58svs66p.js} +13 -3
- package/dist/client/chunks/{index-8m2qq61n.js.map → index-58svs66p.js.map} +5 -4
- package/dist/client/chunks/{islands-mfjmdwnb.js → islands-tcadmgcx.js} +3 -6
- package/dist/client/chunks/{islands-mfjmdwnb.js.map → islands-tcadmgcx.js.map} +3 -4
- package/dist/client/chunks/{react-sprprqzs.js → react-khr6ewhr.js} +2 -2
- package/dist/client/index.js +82 -6
- package/dist/client/index.js.map +7 -6
- package/dist/dev/client/handlers/islands.ts +2 -0
- package/dist/dev/client/handlers/react.ts +92 -111
- package/dist/dev/client/handlers/reactUpdateQueue.ts +153 -0
- package/dist/index.js +505 -389
- package/dist/index.js.map +15 -15
- package/dist/islands/browser.js +2 -2
- package/dist/islands/browser.js.map +3 -3
- package/dist/islands/index.js +13 -6
- package/dist/islands/index.js.map +6 -5
- package/dist/react/browser.js +113 -12
- package/dist/react/browser.js.map +10 -7
- package/dist/react/components/index.js +31 -7
- package/dist/react/components/index.js.map +5 -4
- package/dist/react/components/server/index.js +22 -6
- package/dist/react/index.js +190 -46
- package/dist/react/index.js.map +15 -11
- package/dist/react/server.js +82 -23
- package/dist/react/server.js.map +11 -9
- package/dist/src/build/compileSvelte.d.ts +12 -1
- package/dist/src/build/compileVue.d.ts +1 -0
- package/dist/src/build/islandEntries.d.ts +3 -1
- package/dist/src/cli/scripts/typecheck.d.ts +8 -0
- package/dist/src/cli/scripts/typecheckDiagnostics.d.ts +17 -0
- package/dist/src/client/preserveIslandMarkup.d.ts +4 -0
- package/dist/src/core/islandManifest.d.ts +6 -0
- package/dist/src/core/islandStylesheet.d.ts +17 -0
- package/dist/src/react/Island.d.ts +9 -2
- package/dist/src/react/IslandStyleLink.d.ts +11 -0
- package/dist/src/react/createIsland.d.ts +1 -1
- package/dist/src/react/serverComponents/nodeRendererRef.d.ts +13 -0
- package/dist/src/utils/requestRenderUrl.d.ts +1 -0
- package/dist/src/utils/resolveConvention.d.ts +1 -0
- package/dist/src/vue/Island.browser.d.ts +3 -1
- package/dist/src/vue/Island.d.ts +2 -2
- package/dist/src/vue/createIsland.browser.d.ts +2 -2
- package/dist/src/vue/createIsland.d.ts +2 -2
- package/dist/src/vue/islandStyleLink.d.ts +30 -0
- package/dist/svelte/browser.js +2 -2
- package/dist/svelte/browser.js.map +3 -3
- package/dist/svelte/index.js +51 -49
- package/dist/svelte/index.js.map +9 -8
- package/dist/svelte/server.js +48 -45
- package/dist/svelte/server.js.map +8 -7
- package/dist/types/globals.d.ts +3 -0
- package/dist/vue/browser.js +105 -10
- package/dist/vue/browser.js.map +10 -7
- package/dist/vue/index.js +170 -47
- package/dist/vue/index.js.map +14 -11
- package/dist/vue/server.js +81 -22
- package/dist/vue/server.js.map +9 -7
- package/package.json +1 -1
- /package/dist/cli/{index-6522t968.js → index-yd672jyq.js} +0 -0
- /package/dist/client/chunks/{react-sprprqzs.js.map → react-khr6ewhr.js.map} +0 -0
package/dist/react/server.js
CHANGED
|
@@ -482,7 +482,7 @@ var ISLAND_BOOTSTRAP_MANIFEST_KEY = "AbsoluteIslandBootstrap", LEGACY_ISLAND_BOO
|
|
|
482
482
|
islands[framework] = entries;
|
|
483
483
|
}
|
|
484
484
|
return islands;
|
|
485
|
-
}, getIslandManifestKey = (framework, component) => `Island${toIslandFrameworkSegment(framework)}${component}`;
|
|
485
|
+
}, 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}`;
|
|
486
486
|
|
|
487
487
|
// src/core/islandPageContext.ts
|
|
488
488
|
var ISLAND_MARKER = 'data-island="true"', MANIFEST_MARKER = "__ABSOLUTE_MANIFEST__", ISLAND_STATE_MARKER = "__ABS_ISLAND_STATE__", CLOSING_HEAD_TAG = "</head>", warnedMissingBootstrap = false, warnIfBootstrapMissing = (manifest) => {
|
|
@@ -519,12 +519,27 @@ var ISLAND_MARKER = 'data-island="true"', MANIFEST_MARKER = "__ABSOLUTE_MANIFEST
|
|
|
519
519
|
browserManifest[key] = value;
|
|
520
520
|
}
|
|
521
521
|
return browserManifest;
|
|
522
|
-
},
|
|
522
|
+
}, ISLAND_MARKER_TAG, ISLAND_FRAMEWORKS, readMarkerAttribute = (tag, name) => new RegExp(`\\b${name}="([^"]*)"`).exec(tag)?.[1]?.replaceAll(""", '"').replaceAll("<", "<").replaceAll(">", ">").replaceAll("&", "&"), toIslandFramework = (value) => ISLAND_FRAMEWORKS.find((framework) => framework === value), collectRenderedIslandStyleKeys = (html) => {
|
|
523
|
+
const keys = new Set;
|
|
524
|
+
for (const [tag] of html.matchAll(ISLAND_MARKER_TAG)) {
|
|
525
|
+
const framework = toIslandFramework(readMarkerAttribute(tag, "data-framework"));
|
|
526
|
+
const component = readMarkerAttribute(tag, "data-component");
|
|
527
|
+
if (framework && component)
|
|
528
|
+
keys.add(getIslandStyleManifestKey(framework, component));
|
|
529
|
+
}
|
|
530
|
+
return keys;
|
|
531
|
+
}, buildIslandStyleLinks = (manifest, html) => {
|
|
532
|
+
if (html === undefined)
|
|
533
|
+
return "";
|
|
534
|
+
const renderedKeys = collectRenderedIslandStyleKeys(html);
|
|
535
|
+
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("");
|
|
536
|
+
}, buildIslandsHeadMarkup = (manifest, html) => {
|
|
537
|
+
const styleLinks = buildIslandStyleLinks(manifest, html);
|
|
523
538
|
const manifestScript = `<script${nonceAttr()}>window.__ABSOLUTE_MANIFEST__ = ${escapeScriptContent(JSON.stringify(toBrowserManifest(manifest)))}</script>`;
|
|
524
539
|
const islandStateScript = `<script${nonceAttr()}>window.__ABS_ISLAND_STATE__ = ${escapeScriptContent(JSON.stringify(globalThis.__ABS_ISLAND_STATE__ ?? {}))}</script>`;
|
|
525
540
|
const bootstrapPath = getIslandBootstrapPath(manifest);
|
|
526
541
|
const bootstrapScript = bootstrapPath ? `<script${nonceAttr()} type="module" src="${bootstrapPath}"></script>` : "";
|
|
527
|
-
return `${manifestScript}${islandStateScript}${bootstrapScript}`;
|
|
542
|
+
return `${styleLinks}${manifestScript}${islandStateScript}${bootstrapScript}`;
|
|
528
543
|
}, injectHeadMarkup = (html, markup) => {
|
|
529
544
|
const closingHeadIndex = html.indexOf("</head>");
|
|
530
545
|
if (closingHeadIndex >= 0) {
|
|
@@ -706,7 +721,7 @@ var ISLAND_MARKER = 'data-island="true"', MANIFEST_MARKER = "__ABSOLUTE_MANIFEST
|
|
|
706
721
|
return html;
|
|
707
722
|
}
|
|
708
723
|
warnIfBootstrapMissing(manifest);
|
|
709
|
-
return injectHeadMarkup(html, buildIslandsHeadMarkup(manifest));
|
|
724
|
+
return injectHeadMarkup(html, buildIslandsHeadMarkup(manifest, html));
|
|
710
725
|
}, injectIslandPageContextStream = (stream, options) => {
|
|
711
726
|
const manifest = globalThis.__absoluteManifest;
|
|
712
727
|
if (!manifest)
|
|
@@ -730,6 +745,13 @@ var init_islandPageContext = __esm(() => {
|
|
|
730
745
|
init_logger();
|
|
731
746
|
MANIFEST_BUILD_DIR_KEY = Symbol.for("absolutejs.islandManifestBuildDir");
|
|
732
747
|
WINDOWS_ABSOLUTE_PATH = /^[A-Za-z]:[\\/]|^\\\\/;
|
|
748
|
+
ISLAND_MARKER_TAG = /<[^>]*\bdata-island="true"[^>]*>/g;
|
|
749
|
+
ISLAND_FRAMEWORKS = [
|
|
750
|
+
"react",
|
|
751
|
+
"svelte",
|
|
752
|
+
"vue",
|
|
753
|
+
"angular"
|
|
754
|
+
];
|
|
733
755
|
});
|
|
734
756
|
|
|
735
757
|
// src/core/devRouteRegistrationCallsite.ts
|
|
@@ -2128,6 +2150,12 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
|
|
|
2128
2150
|
logConventionRenderError(framework, "error", renderError);
|
|
2129
2151
|
}
|
|
2130
2152
|
return null;
|
|
2153
|
+
}, isPageRequest = (request) => {
|
|
2154
|
+
if (request.headers.get("hx-request") === "true")
|
|
2155
|
+
return true;
|
|
2156
|
+
if (request.headers.get("sec-fetch-dest") === "document")
|
|
2157
|
+
return true;
|
|
2158
|
+
return (request.headers.get("accept") ?? "").includes("text/html");
|
|
2131
2159
|
}, renderConventionError = async (framework, pageName, error) => {
|
|
2132
2160
|
const errorProps = buildErrorProps(error);
|
|
2133
2161
|
const frameworkResponse = await tryFrameworkErrorConvention(framework, pageName, errorProps, error);
|
|
@@ -2139,12 +2167,6 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
|
|
|
2139
2167
|
return htmlResponse;
|
|
2140
2168
|
}
|
|
2141
2169
|
return null;
|
|
2142
|
-
}, isPageRequest = (request) => {
|
|
2143
|
-
if (request.headers.get("hx-request") === "true")
|
|
2144
|
-
return true;
|
|
2145
|
-
if (request.headers.get("sec-fetch-dest") === "document")
|
|
2146
|
-
return true;
|
|
2147
|
-
return (request.headers.get("accept") ?? "").includes("text/html");
|
|
2148
2170
|
}, renderStaticRouteError = async (request, error) => {
|
|
2149
2171
|
if (!isPageRequest(request))
|
|
2150
2172
|
return null;
|
|
@@ -2450,6 +2472,18 @@ var asset = (source, name) => {
|
|
|
2450
2472
|
return assetPath;
|
|
2451
2473
|
};
|
|
2452
2474
|
|
|
2475
|
+
// src/utils/requestRenderUrl.ts
|
|
2476
|
+
var requestRenderUrl = (request) => {
|
|
2477
|
+
if (!request)
|
|
2478
|
+
return;
|
|
2479
|
+
try {
|
|
2480
|
+
const parsed = new URL(request.url);
|
|
2481
|
+
return `${parsed.pathname.replace(/\/{2,}/g, "/")}${parsed.search}`;
|
|
2482
|
+
} catch {
|
|
2483
|
+
return;
|
|
2484
|
+
}
|
|
2485
|
+
};
|
|
2486
|
+
|
|
2453
2487
|
// src/react/pageHandler.ts
|
|
2454
2488
|
init_cspNonceRef();
|
|
2455
2489
|
init_islandPageContext();
|
|
@@ -2735,16 +2769,7 @@ init_spaRouteManifest();
|
|
|
2735
2769
|
init_resolveConvention();
|
|
2736
2770
|
init_browserTranslation();
|
|
2737
2771
|
var withRequestUrl = (props, url) => Object.assign(Object.create(null), props, { url });
|
|
2738
|
-
var resolveRequestPathname = (request) =>
|
|
2739
|
-
if (!request)
|
|
2740
|
-
return;
|
|
2741
|
-
try {
|
|
2742
|
-
const parsed = new URL(request.url);
|
|
2743
|
-
return `${parsed.pathname}${parsed.search}`;
|
|
2744
|
-
} catch {
|
|
2745
|
-
return;
|
|
2746
|
-
}
|
|
2747
|
-
};
|
|
2772
|
+
var resolveRequestPathname = (request) => requestRenderUrl(request);
|
|
2748
2773
|
var buildRefreshSetup = () => {
|
|
2749
2774
|
if (isProductionRuntime()) {
|
|
2750
2775
|
return "";
|
|
@@ -2855,6 +2880,7 @@ var reactFileRoute = (route) => defineFileRouteWith("react", route, async ({ man
|
|
|
2855
2880
|
init_cspNonceRef();
|
|
2856
2881
|
init_requestContext();
|
|
2857
2882
|
init_pageResponseCache();
|
|
2883
|
+
import { AsyncLocalStorage as AsyncLocalStorage5 } from "async_hooks";
|
|
2858
2884
|
import { readFile } from "fs/promises";
|
|
2859
2885
|
import { dirname, join } from "path";
|
|
2860
2886
|
init_devRouteRegistrationCallsite();
|
|
@@ -2927,6 +2953,27 @@ var injectFlightPayload = (html, flight, nonce) => {
|
|
|
2927
2953
|
});
|
|
2928
2954
|
};
|
|
2929
2955
|
|
|
2956
|
+
// src/react/serverComponents/nodeRendererRef.ts
|
|
2957
|
+
var STORAGE_KEY = Symbol.for("absolutejs.reactServerNodeRendererStorage");
|
|
2958
|
+
var isRendererStorage = (value) => typeof value === "object" && value !== null && ("getStore" in value) && typeof value.getStore === "function" && ("run" in value) && typeof value.run === "function";
|
|
2959
|
+
var isRenderer = (value) => typeof value === "function";
|
|
2960
|
+
var readStorage = () => {
|
|
2961
|
+
const storage = Reflect.get(globalThis, STORAGE_KEY);
|
|
2962
|
+
return isRendererStorage(storage) ? storage : undefined;
|
|
2963
|
+
};
|
|
2964
|
+
var getReactServerNodeRenderer = () => {
|
|
2965
|
+
const store = readStorage()?.getStore();
|
|
2966
|
+
return isRenderer(store) ? store : undefined;
|
|
2967
|
+
};
|
|
2968
|
+
var runWithReactServerNodeRenderer = (renderer, createStorage, render) => {
|
|
2969
|
+
let storage = readStorage();
|
|
2970
|
+
if (!storage) {
|
|
2971
|
+
storage = createStorage();
|
|
2972
|
+
Reflect.set(globalThis, STORAGE_KEY, storage);
|
|
2973
|
+
}
|
|
2974
|
+
return storage.run(renderer, render);
|
|
2975
|
+
};
|
|
2976
|
+
|
|
2930
2977
|
// src/react/serverComponents/pageHandler.ts
|
|
2931
2978
|
var isRecord4 = (value) => typeof value === "object" && value !== null;
|
|
2932
2979
|
var isPageModule = (value) => isRecord4(value) && typeof value.Page === "function" && isRecord4(value.clientManifest) && typeof value.createElement === "function" && typeof value.renderToReadableStream === "function";
|
|
@@ -2969,6 +3016,16 @@ var loadRenderer = async (rendererPath) => {
|
|
|
2969
3016
|
var logRenderError = (error) => {
|
|
2970
3017
|
console.error("[SSR] React Server Components error:", error);
|
|
2971
3018
|
};
|
|
3019
|
+
var createNodeRenderer = (pageModule, renderer) => {
|
|
3020
|
+
const { renderStaticHtml } = renderer;
|
|
3021
|
+
if (!renderStaticHtml)
|
|
3022
|
+
return;
|
|
3023
|
+
const render = (node) => renderStaticHtml(pageModule.renderToReadableStream(node, pageModule.clientManifest, {
|
|
3024
|
+
onError: logRenderError
|
|
3025
|
+
}));
|
|
3026
|
+
return render;
|
|
3027
|
+
};
|
|
3028
|
+
var createRendererStorage = () => new AsyncLocalStorage5;
|
|
2972
3029
|
var handleReactServerPageRequest = async (input) => {
|
|
2973
3030
|
const request = input.request ?? getCurrentAbsoluteRequest();
|
|
2974
3031
|
if (input.page === "") {
|
|
@@ -2984,11 +3041,13 @@ var handleReactServerPageRequest = async (input) => {
|
|
|
2984
3041
|
]);
|
|
2985
3042
|
const renderer = await loadRenderer(runtime.ssr);
|
|
2986
3043
|
const nonce = readCspNonce();
|
|
2987
|
-
const
|
|
3044
|
+
const renderFlight = () => pageModule.renderToReadableStream(pageModule.createElement(pageModule.Page, input.props ?? {}), pageModule.clientManifest, { onError: logRenderError });
|
|
3045
|
+
const nodeRenderer = createNodeRenderer(pageModule, renderer);
|
|
3046
|
+
const flight = nodeRenderer ? runWithReactServerNodeRenderer(nodeRenderer, createRendererStorage, renderFlight) : renderFlight();
|
|
2988
3047
|
const [forHtml, forPayload] = flight.tee();
|
|
2989
3048
|
const html = await renderer.renderHtml(forHtml, {
|
|
2990
3049
|
bootstrapModules: [runtime.client],
|
|
2991
|
-
bootstrapScriptContent: BROWSER_TRANSLATION_BASELINE_SCRIPT
|
|
3050
|
+
bootstrapScriptContent: `${BROWSER_TRANSLATION_BASELINE_SCRIPT}window.__ABS_SLOT_HYDRATION_PENDING__=true;`,
|
|
2992
3051
|
nonce,
|
|
2993
3052
|
onError: logRenderError
|
|
2994
3053
|
});
|
|
@@ -3014,5 +3073,5 @@ export {
|
|
|
3014
3073
|
reactFileRoute
|
|
3015
3074
|
};
|
|
3016
3075
|
|
|
3017
|
-
//# debugId=
|
|
3076
|
+
//# debugId=567A32D4B8B7FF0164756E2164756E21
|
|
3018
3077
|
//# sourceMappingURL=server.js.map
|