@absolutejs/absolute 0.20.0-beta.174 → 0.20.0-beta.175
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 +23 -0
- package/changelog.json +60 -0
- package/dist/angular/browser.js +13 -2
- package/dist/angular/browser.js.map +3 -3
- package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/angular/index.js +67 -8
- package/dist/angular/index.js.map +10 -8
- package/dist/angular/server.js +67 -8
- package/dist/angular/server.js.map +10 -8
- package/dist/build.js +312 -119
- package/dist/build.js.map +20 -18
- package/dist/cli/{compile-n6fs2vmx.js → compile-w2z6c9vt.js} +1 -1
- package/dist/cli/{dev-6h1f0mzq.js → dev-8br5mr7t.js} +16 -2
- package/dist/cli/{index-mqevg32w.js → index-6522t968.js} +21 -2
- package/dist/cli/{index-bhyd3ejc.js → index-7z1hh3fg.js} +1 -1
- package/dist/cli/index.js +6 -6
- package/dist/cli/{islands-vk05sj6v.js → islands-bx67g15t.js} +4 -4
- package/dist/cli/{mobile-62b6j3j7.js → mobile-we5q51ey.js} +2 -2
- package/dist/cli/{start-jh6kyp92.js → start-srs11bm8.js} +2 -2
- package/dist/client/chunks/index-4j1snyh2.js +18 -0
- package/dist/client/chunks/index-4j1snyh2.js.map +10 -0
- package/dist/client/chunks/{index-6b66nzyf.js → index-a3rpg5kw.js} +6 -16
- package/dist/client/chunks/{index-6b66nzyf.js.map → index-a3rpg5kw.js.map} +3 -4
- package/dist/client/chunks/{islands-s2ta5ajb.js → islands-mfjmdwnb.js} +11 -4
- package/dist/client/chunks/{islands-s2ta5ajb.js.map → islands-mfjmdwnb.js.map} +3 -3
- package/dist/client/chunks/{react-dcvkaba2.js → react-sprprqzs.js} +20 -4
- package/dist/client/chunks/react-sprprqzs.js.map +10 -0
- package/dist/client/chunks/svelte-6ewphsvj.js +30 -0
- package/dist/client/chunks/svelte-6ewphsvj.js.map +10 -0
- package/dist/client/chunks/{vue-a84fzp3v.js → vue-db6ppn1f.js} +14 -4
- package/dist/client/chunks/vue-db6ppn1f.js.map +10 -0
- package/dist/client/index.js +65 -8
- package/dist/client/index.js.map +4 -4
- package/dist/client/navigation.js +5 -3
- package/dist/client/navigation.js.map +2 -2
- package/dist/client/prefetch.js +1 -1
- package/dist/dev/client/handlers/islands.ts +85 -0
- package/dist/dev/client/hmrClient.ts +6 -0
- package/dist/index.js +448 -242
- package/dist/index.js.map +21 -19
- package/dist/islands/index.js +57 -10
- package/dist/islands/index.js.map +9 -7
- package/dist/react/browser.js +15 -4
- package/dist/react/browser.js.map +5 -5
- package/dist/react/components/client.js +506 -0
- package/dist/react/components/index.js +14 -15
- package/dist/react/components/index.js.map +4 -4
- package/dist/react/components/server/index.js +728 -0
- package/dist/react/hooks/index.js +14 -15
- package/dist/react/hooks/index.js.map +4 -4
- package/dist/react/index.js +66 -6
- package/dist/react/index.js.map +11 -9
- package/dist/react/router/browser.js +7 -8
- package/dist/react/router/browser.js.map +4 -4
- package/dist/react/router/index.js +7 -8
- package/dist/react/router/index.js.map +4 -4
- package/dist/react/server.js +14 -1
- package/dist/react/server.js.map +4 -4
- package/dist/src/build/buildReactServerComponents.d.ts +4 -0
- package/dist/src/build/islandEntries.d.ts +5 -0
- package/dist/src/client/hydrators/react.d.ts +7 -0
- package/dist/src/client/hydrators/svelte.d.ts +3 -0
- package/dist/src/client/hydrators/vue.d.ts +3 -0
- package/dist/src/client/preserveIslandMarkup.d.ts +5 -0
- package/dist/src/core/islandServerGeneration.d.ts +3 -0
- package/dist/src/react/components/client.d.ts +4 -0
- package/dist/src/react/components/server/index.d.ts +8 -0
- package/dist/src/react/serverComponents/constants.d.ts +2 -1
- package/dist/svelte/index.js +66 -6
- package/dist/svelte/index.js.map +10 -8
- package/dist/svelte/server.js +38 -3
- package/dist/svelte/server.js.map +6 -5
- package/dist/types/build.d.ts +3 -2
- package/dist/types/globals.d.ts +15 -0
- package/dist/vue/browser.js +26 -16
- package/dist/vue/browser.js.map +5 -5
- package/dist/vue/index.js +65 -21
- package/dist/vue/index.js.map +10 -9
- package/package.json +1 -1
- package/dist/client/chunks/react-dcvkaba2.js.map +0 -10
- package/dist/client/chunks/svelte-4yfa5bxa.js +0 -17
- package/dist/client/chunks/svelte-4yfa5bxa.js.map +0 -10
- package/dist/client/chunks/vue-a84fzp3v.js.map +0 -10
|
@@ -107,7 +107,7 @@ var isEditorTempFile = (path) => {
|
|
|
107
107
|
var isAbsoluteServerEntryCopyPath = (path) => /(?:^|[/\\])\.absolutejs-hmr-/.test(path);
|
|
108
108
|
|
|
109
109
|
// src/dev/restartScope.ts
|
|
110
|
-
import { realpathSync } from "fs";
|
|
110
|
+
import { realpathSync, statSync } from "fs";
|
|
111
111
|
var MODULE_FILE = /\.(?:[cm]?[jt]sx?|mts|cts)$/;
|
|
112
112
|
var DOCUMENT_FILE = /\.(?:md|mdx|markdown|txt|rst|adoc|log|csv)$/i;
|
|
113
113
|
var realPath = (path) => {
|
|
@@ -117,13 +117,20 @@ var realPath = (path) => {
|
|
|
117
117
|
return path;
|
|
118
118
|
}
|
|
119
119
|
};
|
|
120
|
+
var isDirectory = (path) => {
|
|
121
|
+
try {
|
|
122
|
+
return statSync(path).isDirectory();
|
|
123
|
+
} catch {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
};
|
|
120
127
|
var isLoadedByThisProcess = (path) => (path in __require.cache) || (realPath(path) in __require.cache);
|
|
121
128
|
var changeNeedsRestart = (path, isLoaded = isLoadedByThisProcess) => {
|
|
122
129
|
if (DOCUMENT_FILE.test(path) || isTestSourcePath(path))
|
|
123
130
|
return false;
|
|
124
131
|
if (MODULE_FILE.test(path))
|
|
125
132
|
return isLoaded(path);
|
|
126
|
-
return
|
|
133
|
+
return !isDirectory(path);
|
|
127
134
|
};
|
|
128
135
|
|
|
129
136
|
// src/cli/scripts/dev.ts
|
|
@@ -687,6 +694,13 @@ var collectPositiveWatchRoots = (config, resolved) => {
|
|
|
687
694
|
}
|
|
688
695
|
} catch {}
|
|
689
696
|
}
|
|
697
|
+
const registryPath = config.islands?.registry;
|
|
698
|
+
if (registryPath) {
|
|
699
|
+
const registryDir = normalizePath(dirname(resolve3(cwd, registryPath)));
|
|
700
|
+
const isWatched = roots.some((root) => registryDir === root || registryDir.startsWith(`${root}/`));
|
|
701
|
+
if (!isWatched && registryDir !== normalizePath(cwd))
|
|
702
|
+
push(registryDir);
|
|
703
|
+
}
|
|
690
704
|
const extraDirs = config.dev?.watchDirs ?? [];
|
|
691
705
|
for (const dir of extraDirs)
|
|
692
706
|
push(dir);
|
|
@@ -8,7 +8,9 @@ var toIslandFrameworkSegment = (framework) => framework[0]?.toUpperCase() + fram
|
|
|
8
8
|
var getIslandManifestKey = (framework, component) => `Island${toIslandFrameworkSegment(framework)}${component}`;
|
|
9
9
|
|
|
10
10
|
// src/build/islandEntries.ts
|
|
11
|
+
import { mkdirSync, rmSync, statSync, writeFileSync } from "fs";
|
|
11
12
|
import { dirname, extname, join, relative, resolve } from "path";
|
|
13
|
+
import { fileURLToPath } from "url";
|
|
12
14
|
// src/core/islands.ts
|
|
13
15
|
var isRecord = (value) => typeof value === "object" && value !== null;
|
|
14
16
|
var getIslandBuildReference = (component) => {
|
|
@@ -34,10 +36,27 @@ var resolveRegistryExport = (mod) => {
|
|
|
34
36
|
var hasSvelteImport = (source) => /from\s+['"][^'"]+\.svelte['"]/.test(source);
|
|
35
37
|
var resolveIslandSourcePath = (registryPath, sourcePath) => {
|
|
36
38
|
if (sourcePath.startsWith("file://")) {
|
|
37
|
-
return
|
|
39
|
+
return fileURLToPath(sourcePath);
|
|
38
40
|
}
|
|
39
41
|
return resolve(dirname(registryPath), sourcePath);
|
|
40
42
|
};
|
|
43
|
+
var isExistingFile = (path) => {
|
|
44
|
+
try {
|
|
45
|
+
return statSync(path).isFile();
|
|
46
|
+
} catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
var resolveIslandSourceFile = (registryPath, sourcePath) => {
|
|
51
|
+
const joinedPath = resolveIslandSourcePath(registryPath, sourcePath);
|
|
52
|
+
if (isExistingFile(joinedPath))
|
|
53
|
+
return joinedPath;
|
|
54
|
+
try {
|
|
55
|
+
return Bun.resolveSync(joinedPath, dirname(registryPath));
|
|
56
|
+
} catch {
|
|
57
|
+
return joinedPath;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
41
60
|
var getObjectPropertyName = (name) => {
|
|
42
61
|
if (lazyTypescript.isIdentifier(name) || lazyTypescript.isStringLiteral(name)) {
|
|
43
62
|
return name.text;
|
|
@@ -232,4 +251,4 @@ var loadIslandRegistryBuildInfo = async (registryPath) => {
|
|
|
232
251
|
};
|
|
233
252
|
};
|
|
234
253
|
|
|
235
|
-
export { getIslandManifestKey, loadIslandRegistryBuildInfo };
|
|
254
|
+
export { getIslandManifestKey, resolveIslandSourceFile, loadIslandRegistryBuildInfo };
|
package/dist/cli/index.js
CHANGED
|
@@ -54,7 +54,7 @@ if (command === "dev") {
|
|
|
54
54
|
}
|
|
55
55
|
const positionalArgs = stripNamedArgs("--config", "--android-device", "--ios-device").filter((arg) => arg !== "--no-mobile" && arg !== "--eager");
|
|
56
56
|
const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
|
|
57
|
-
const { dev } = await import("./dev-
|
|
57
|
+
const { dev } = await import("./dev-8br5mr7t.js");
|
|
58
58
|
await dev(serverEntry, configPath, {
|
|
59
59
|
androidDevice,
|
|
60
60
|
eager: args.includes("--eager"),
|
|
@@ -70,7 +70,7 @@ if (command === "dev") {
|
|
|
70
70
|
const configPath = parseNamedArg("--config");
|
|
71
71
|
const positionalArgs = stripNamedArgs("--outdir", "--config").filter((arg) => arg !== "--prebuilt");
|
|
72
72
|
const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
|
|
73
|
-
const { start } = await import("./start-
|
|
73
|
+
const { start } = await import("./start-srs11bm8.js");
|
|
74
74
|
await start(serverEntry, outdir, configPath, {
|
|
75
75
|
prebuilt: args.includes("--prebuilt")
|
|
76
76
|
});
|
|
@@ -80,7 +80,7 @@ if (command === "dev") {
|
|
|
80
80
|
const configPath = parseNamedArg("--config");
|
|
81
81
|
const positionalArgs = stripNamedArgs("--outdir", "--config");
|
|
82
82
|
const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
|
|
83
|
-
const { start } = await import("./start-
|
|
83
|
+
const { start } = await import("./start-srs11bm8.js");
|
|
84
84
|
await start(serverEntry, outdir, configPath, { prepareOnly: true });
|
|
85
85
|
} else if (command === "build") {
|
|
86
86
|
sendTelemetryEvent("cli:command", { command });
|
|
@@ -188,7 +188,7 @@ if (command === "dev") {
|
|
|
188
188
|
await runInspect(args);
|
|
189
189
|
} else if (command === "islands") {
|
|
190
190
|
sendTelemetryEvent("cli:command", { command: "islands" });
|
|
191
|
-
const { runIslands } = await import("./islands-
|
|
191
|
+
const { runIslands } = await import("./islands-bx67g15t.js");
|
|
192
192
|
await runIslands(args);
|
|
193
193
|
} else if (command === "info") {
|
|
194
194
|
sendTelemetryEvent("cli:command", { command });
|
|
@@ -205,13 +205,13 @@ if (command === "dev") {
|
|
|
205
205
|
const configPath = parseNamedArg("--config");
|
|
206
206
|
const positionalArgs = stripNamedArgs("--outdir", "--outfile", "--config");
|
|
207
207
|
const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
|
|
208
|
-
const { compile } = await import("./compile-
|
|
208
|
+
const { compile } = await import("./compile-w2z6c9vt.js");
|
|
209
209
|
await compile(serverEntry, outdir, outfile, configPath);
|
|
210
210
|
} else if (command === "mobile") {
|
|
211
211
|
sendTelemetryEvent("cli:command", {
|
|
212
212
|
command: `mobile:${workspaceCommand ?? "unknown"}`
|
|
213
213
|
});
|
|
214
|
-
const { runMobile } = await import("./mobile-
|
|
214
|
+
const { runMobile } = await import("./mobile-we5q51ey.js");
|
|
215
215
|
try {
|
|
216
216
|
await runMobile(args);
|
|
217
217
|
} catch (error) {
|
|
@@ -13,8 +13,9 @@ import {
|
|
|
13
13
|
} from "./index-7854xf0m.js";
|
|
14
14
|
import {
|
|
15
15
|
getIslandManifestKey,
|
|
16
|
+
resolveIslandSourceFile,
|
|
16
17
|
loadIslandRegistryBuildInfo
|
|
17
|
-
} from "./index-
|
|
18
|
+
} from "./index-6522t968.js";
|
|
18
19
|
|
|
19
20
|
// src/cli/scripts/islands.ts
|
|
20
21
|
import { existsSync as existsSync2, readFileSync as readFileSync2, statSync } from "fs";
|
|
@@ -22,7 +23,7 @@ import { join, relative, resolve as resolve2 } from "path";
|
|
|
22
23
|
|
|
23
24
|
// src/islands/pageMetadata.ts
|
|
24
25
|
import { readFileSync } from "fs";
|
|
25
|
-
import {
|
|
26
|
+
import { resolve } from "path";
|
|
26
27
|
|
|
27
28
|
// src/build/scanEntryPoints.ts
|
|
28
29
|
import { existsSync } from "fs";
|
|
@@ -142,8 +143,7 @@ var buildIslandSourceLookup = async (config) => {
|
|
|
142
143
|
const source = definition.buildReference?.source;
|
|
143
144
|
if (!source)
|
|
144
145
|
continue;
|
|
145
|
-
|
|
146
|
-
lookup.set(`${definition.framework}:${definition.component}`, resolve(resolvedSource));
|
|
146
|
+
lookup.set(`${definition.framework}:${definition.component}`, resolve(resolveIslandSourceFile(buildInfo.resolvedRegistryPath, source)));
|
|
147
147
|
}
|
|
148
148
|
return lookup;
|
|
149
149
|
};
|
|
@@ -79,7 +79,7 @@ import {
|
|
|
79
79
|
} from "./index-prza6tkp.js";
|
|
80
80
|
import {
|
|
81
81
|
start2
|
|
82
|
-
} from "./index-
|
|
82
|
+
} from "./index-7z1hh3fg.js";
|
|
83
83
|
import {
|
|
84
84
|
captureAbsoluteRemoteMacCommand2,
|
|
85
85
|
getAbsoluteRemoteMacProfile2,
|
|
@@ -99,7 +99,7 @@ import {
|
|
|
99
99
|
import {
|
|
100
100
|
formatBytes
|
|
101
101
|
} from "./index-7854xf0m.js";
|
|
102
|
-
import"./index-
|
|
102
|
+
import"./index-6522t968.js";
|
|
103
103
|
import {
|
|
104
104
|
sendTelemetryEvent
|
|
105
105
|
} from "./index-qyxd5n9a.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
start2
|
|
4
|
-
} from "./index-
|
|
4
|
+
} from "./index-7z1hh3fg.js";
|
|
5
5
|
import"./index-zyd80s3h.js";
|
|
6
|
-
import"./index-
|
|
6
|
+
import"./index-6522t968.js";
|
|
7
7
|
import"./index-71gchbzt.js";
|
|
8
8
|
import"./index-wk0pyxrg.js";
|
|
9
9
|
import"./index-qyxd5n9a.js";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// src/dev/client/cspNonce.ts
|
|
2
|
+
var applyPageNonce = (element) => {
|
|
3
|
+
const nonce = readPageNonce();
|
|
4
|
+
if (nonce)
|
|
5
|
+
element.nonce = nonce;
|
|
6
|
+
return element;
|
|
7
|
+
};
|
|
8
|
+
var readPageNonce = () => {
|
|
9
|
+
if (typeof document === "undefined")
|
|
10
|
+
return;
|
|
11
|
+
const carrier = document.querySelector("script[nonce], style[nonce]");
|
|
12
|
+
return carrier?.nonce || undefined;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { applyPageNonce, readPageNonce };
|
|
16
|
+
|
|
17
|
+
//# debugId=EF4FD25E95EDA90564756E2164756E21
|
|
18
|
+
//# sourceMappingURL=index-4j1snyh2.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/dev/client/cspNonce.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/* The page's CSP nonce, read back in the browser from an element the server\n * gave it to. Browsers hide the attribute's value but keep the `nonce`\n * property, so a script that runs can hand the nonce to the <style>/<script>\n * elements it creates; a nonce-based policy blocks them otherwise. Without\n * secureHeaders() there is no nonce and this does nothing.\n *\n * Lives in the dev client because that ships as raw TypeScript and may only\n * import from its own directory; the bundled client runtime\n * (src/client/prefetch.ts) imports it from here. */\n\nexport const applyPageNonce = <Element extends HTMLElement>(\n\telement: Element\n) => {\n\tconst nonce = readPageNonce();\n\tif (nonce) element.nonce = nonce;\n\n\treturn element;\n};\n\nexport const readPageNonce = () => {\n\tif (typeof document === 'undefined') return undefined;\n\tconst carrier = document.querySelector<HTMLElement>(\n\t\t'script[nonce], style[nonce]'\n\t);\n\n\treturn carrier?.nonce || undefined;\n};\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";AAUO,IAAM,iBAAiB,CAC7B,YACI;AAAA,EACJ,MAAM,QAAQ,cAAc;AAAA,EAC5B,IAAI;AAAA,IAAO,QAAQ,QAAQ;AAAA,EAE3B,OAAO;AAAA;AAGD,IAAM,gBAAgB,MAAM;AAAA,EAClC,IAAI,OAAO,aAAa;AAAA,IAAa;AAAA,EACrC,MAAM,UAAU,SAAS,cACxB,6BACD;AAAA,EAEA,OAAO,SAAS,SAAS;AAAA;",
|
|
8
|
+
"debugId": "EF4FD25E95EDA90564756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -1,16 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
if (nonce)
|
|
5
|
-
element.nonce = nonce;
|
|
6
|
-
return element;
|
|
7
|
-
};
|
|
8
|
-
var readPageNonce = () => {
|
|
9
|
-
if (typeof document === "undefined")
|
|
10
|
-
return;
|
|
11
|
-
const carrier = document.querySelector("script[nonce], style[nonce]");
|
|
12
|
-
return carrier?.nonce || undefined;
|
|
13
|
-
};
|
|
1
|
+
import {
|
|
2
|
+
applyPageNonce
|
|
3
|
+
} from "./index-4j1snyh2.js";
|
|
14
4
|
|
|
15
5
|
// src/client/prefetch.ts
|
|
16
6
|
var PREFETCH_CACHE_LIMIT = 16;
|
|
@@ -375,7 +365,7 @@ var resetPrefetchState2 = () => {
|
|
|
375
365
|
viewportObserver = null;
|
|
376
366
|
};
|
|
377
367
|
|
|
378
|
-
export {
|
|
368
|
+
export { ROUTE_DATA_MEDIA_TYPE2, canPrefetch2, isDevelopmentClient2, isPrefetchableHref2, resolveDefaultPrefetchMode2, clearPrefetchCache2, consumePrefetch2, hasPrefetched2, prefetchStylesheet2, preloadModule2, prefetch2, speculate2, scheduleHoverPrefetch2, observeViewport2, resetPrefetchState2 };
|
|
379
369
|
|
|
380
|
-
//# debugId=
|
|
381
|
-
//# sourceMappingURL=index-
|
|
370
|
+
//# debugId=23E0D01680231D5664756E2164756E21
|
|
371
|
+
//# sourceMappingURL=index-a3rpg5kw.js.map
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/
|
|
3
|
+
"sources": ["../src/client/prefetch.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/* The page's CSP nonce, read back in the browser from an element the server\n * gave it to. Browsers hide the attribute's value but keep the `nonce`\n * property, so a script that runs can hand the nonce to the <style>/<script>\n * elements it creates; a nonce-based policy blocks them otherwise. Without\n * secureHeaders() there is no nonce and this does nothing.\n *\n * Lives in the dev client because that ships as raw TypeScript and may only\n * import from its own directory; the bundled client runtime\n * (src/client/prefetch.ts) imports it from here. */\n\nexport const applyPageNonce = <Element extends HTMLElement>(\n\telement: Element\n) => {\n\tconst nonce = readPageNonce();\n\tif (nonce) element.nonce = nonce;\n\n\treturn element;\n};\n\nexport const readPageNonce = () => {\n\tif (typeof document === 'undefined') return undefined;\n\tconst carrier = document.querySelector<HTMLElement>(\n\t\t'script[nonce], style[nonce]'\n\t);\n\n\treturn carrier?.nonce || undefined;\n};\n",
|
|
6
5
|
"/**\n * Framework-neutral navigation prefetch primitive.\n *\n * Pure DOM + `fetch` — no framework imports — so the React, Vue and Svelte\n * `<Link>` components (and user code) share one cache, one in-flight\n * budget, one IntersectionObserver and one set of data-saver guards.\n *\n * import { prefetch, speculate } from '@absolutejs/absolute/client/prefetch';\n *\n * What a prefetch buys the click that follows:\n * - `'document'` — the HTML lands in the browser's HTTP cache (pages\n * carry a content-hash `ETag`), so the real navigation revalidates\n * with a 304 instead of re-rendering.\n * - `'module'` — `<link rel=\"modulepreload\">` parses + compiles the\n * client module graph ahead of time.\n * - `'data'` — the route-data payload\n * (`application/vnd.absolute.route+json`): the page's props plus the\n * client entry and stylesheets it needs, which are `modulepreload`ed\n * / prefetched as the payload lands. A 404 / 406 from a server that\n * doesn't speak route data is remembered as \"no data\".\n * - `'route'` — `'document'` + `'data'`, i.e. everything a click\n * needs. What a `<Link>` warms on hover / pointerdown.\n * - `speculate()` — a prerender speculation rule; the browser renders\n * the whole target page in a hidden tab so the click is instant.\n *\n * Global opt-out: `window.__ABSOLUTE_PREFETCH__ = false` disables every\n * entry point in this module (useful for analytics-sensitive pages).\n */\nimport { applyPageNonce } from '../dev/client/cspNonce';\nimport type {\n\tHoverPrefetchHandle,\n\tHoverPrefetchOptions,\n\tPrefetchKind,\n\tPrefetchOptions,\n\tViewportPrefetchOptions\n} from '../../types/prefetch';\n\nconst PREFETCH_CACHE_LIMIT = 16;\nconst HOVER_DEBOUNCE_MS = 250;\nconst MAX_IN_FLIGHT = 2;\nconst MAX_LIVE_SPECULATION_RULES = 2;\nconst VIEWPORT_ROOT_MARGIN = '128px';\nconst SLOW_EFFECTIVE_TYPES = new Set(['slow-2g', '2g']);\nconst NOT_FOUND = 404;\nconst NOT_ACCEPTABLE = 406;\n\nexport const ROUTE_DATA_MEDIA_TYPE = 'application/vnd.absolute.route+json';\n\ntype CacheEntry = {\n\tabort: () => void;\n\tkind: PrefetchKind;\n\tpromise: Promise<Response>;\n\turl: string;\n};\n\ntype QueuedTask = {\n\tcancelled: boolean;\n\tstart: () => void;\n};\n\nconst cache = new Map<string, CacheEntry>();\nconst queue: QueuedTask[] = [];\nlet inFlight = 0;\n\nconst preloadedModules = new Set<string>();\nconst prefetchedStyles = new Set<string>();\nconst liveSpeculationRules = new Map<string, HTMLScriptElement>();\n\nconst offlineResponse = () => new Response(null, { status: 0 });\n\n/** `'route'` is a compound trigger, not a cache entry of its own: it\n * warms the `'document'` and `'data'` entries, so lookups for it read\n * the document it warmed. */\nconst storageKind = (kind: PrefetchKind) =>\n\tkind === 'route' ? 'document' : kind;\n\nconst cacheKey = (kind: PrefetchKind, url: string) =>\n\t`${storageKind(kind)}:${url}`;\n\nconst resolveHref = (url: string) => {\n\tif (typeof window === 'undefined') return url;\n\n\ttry {\n\t\treturn new URL(url, window.location.href).href;\n\t} catch {\n\t\treturn url;\n\t}\n};\n\n/* ------------------------------------------------------------------ */\n/* Guards */\n/* ------------------------------------------------------------------ */\n\nconst isGloballyDisabled = () =>\n\ttypeof window !== 'undefined' &&\n\tReflect.get(window, '__ABSOLUTE_PREFETCH__') === false;\n\nconst isSlowConnection = () => {\n\tif (typeof navigator === 'undefined') return false;\n\n\tconst connection = Reflect.get(navigator, 'connection');\n\tif (typeof connection !== 'object' || connection === null) return false;\n\tif (Reflect.get(connection, 'saveData') === true) return true;\n\n\tconst effectiveType = Reflect.get(connection, 'effectiveType');\n\n\treturn (\n\t\ttypeof effectiveType === 'string' &&\n\t\tSLOW_EFFECTIVE_TYPES.has(effectiveType)\n\t);\n};\n\nconst prefersReducedData = () => {\n\tif (typeof window === 'undefined' || !window.matchMedia) return false;\n\n\treturn window.matchMedia('(prefers-reduced-data: reduce)').matches;\n};\n\n/** `true` when prefetching is allowed right now: we're in a browser, the\n * page hasn't opted out via `window.__ABSOLUTE_PREFETCH__ = false`, and\n * the user hasn't asked for less data (Save-Data, 2g, reduced-data). */\nexport const canPrefetch = () =>\n\ttypeof window !== 'undefined' &&\n\t!isGloballyDisabled() &&\n\t!isSlowConnection() &&\n\t!prefersReducedData();\n\nconst readNodeEnv = () => {\n\t// Deliberately not the bare `process.env.NODE_ENV` member expression:\n\t// bundlers substitute that at build time, which would bake this\n\t// package's own build environment into the shipped client entry. In a\n\t// browser `process` is undefined and this yields `undefined`.\n\tconst processLike = Reflect.get(globalThis, 'process');\n\tif (typeof processLike !== 'object' || processLike === null) {\n\t\treturn undefined;\n\t}\n\tconst env = Reflect.get(processLike, 'env');\n\tif (typeof env !== 'object' || env === null) return undefined;\n\tconst value = Reflect.get(env, 'NODE_ENV');\n\n\treturn typeof value === 'string' ? value : undefined;\n};\n\n/** Whether the page was served by the AbsoluteJS dev server. The HMR\n * client is only injected in dev, so its markers are the reliable\n * signal; `NODE_ENV` is the fallback for environments that bundle\n * without the dev server (tests, custom hosts). */\nexport const isDevelopmentClient = () => {\n\tif (typeof window === 'undefined') return false;\n\tif (Reflect.get(window, '__HMR_FRAMEWORK__') !== undefined) return true;\n\tif (Reflect.get(window, '__HMR_WS__') !== undefined) return true;\n\tif (\n\t\ttypeof document !== 'undefined' &&\n\t\tdocument.querySelector('script[data-hmr-client]') !== null\n\t) {\n\t\treturn true;\n\t}\n\n\treturn readNodeEnv() === 'development';\n};\n\n/** Same-origin, non-hash, http(s) URL — the only kind worth prefetching. */\nexport const isPrefetchableHref = (href: string) => {\n\tif (typeof window === 'undefined') return false;\n\tif (href === '' || href.startsWith('#')) return false;\n\n\ttry {\n\t\tconst url = new URL(href, window.location.href);\n\t\tif (url.protocol !== 'http:' && url.protocol !== 'https:') return false;\n\n\t\treturn url.origin === window.location.origin;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\n/** Production → `'viewport'` (viewport + hover). Development → `'hover'`\n * only, so a page full of links doesn't fan out into the dev server. */\nexport const resolveDefaultPrefetchMode = () =>\n\tisDevelopmentClient() ? 'hover' : 'viewport';\n\n/* ------------------------------------------------------------------ */\n/* In-flight budget */\n/* ------------------------------------------------------------------ */\n\nconst runQueue = () => {\n\twhile (inFlight < MAX_IN_FLIGHT) {\n\t\tconst next = queue.shift();\n\t\tif (!next) return;\n\t\tif (next.cancelled) continue;\n\t\tnext.start();\n\t}\n};\n\nconst finishTask = () => {\n\tinFlight = Math.max(0, inFlight - 1);\n\trunQueue();\n};\n\n/** Run `task` when one of the `MAX_IN_FLIGHT` slots frees up. The\n * returned promise never rejects — network failures resolve to a\n * status-0 response so consumers can treat \"no prefetch\" uniformly. */\nconst runWhenReleased = async (\n\tgate: Promise<void>,\n\ttask: (signal: AbortSignal) => Promise<Response>,\n\tsignal: AbortSignal\n) => {\n\tawait gate;\n\ttry {\n\t\treturn await task(signal);\n\t} catch {\n\t\treturn offlineResponse();\n\t} finally {\n\t\tfinishTask();\n\t}\n};\n\nconst enqueue = (task: (signal: AbortSignal) => Promise<Response>) => {\n\tconst controller = new AbortController();\n\tlet release: () => void = () => undefined;\n\tconst gate = new Promise<void>((resolve) => {\n\t\trelease = resolve;\n\t});\n\tconst queued: QueuedTask = {\n\t\tcancelled: false,\n\t\tstart: () => {\n\t\t\t// Count the slot synchronously so `runQueue` can't overshoot the\n\t\t\t// budget while the async runner is still waiting on the gate.\n\t\t\tinFlight += 1;\n\t\t\trelease();\n\t\t}\n\t};\n\tconst promise = runWhenReleased(gate, task, controller.signal);\n\tqueue.push(queued);\n\trunQueue();\n\n\tconst abort = () => {\n\t\tif (queued.cancelled) return;\n\t\tqueued.cancelled = true;\n\t\tcontroller.abort();\n\t};\n\n\treturn { abort, promise };\n};\n\n/* ------------------------------------------------------------------ */\n/* Cache */\n/* ------------------------------------------------------------------ */\n\nconst evictOldest = () => {\n\tconst oldest = cache.keys().next();\n\tif (oldest.done) return;\n\tcache.get(oldest.value)?.abort();\n\tcache.delete(oldest.value);\n};\n\nconst touch = (key: string, entry: CacheEntry) => {\n\t// Re-insert so Map iteration order doubles as LRU recency.\n\tcache.delete(key);\n\tcache.set(key, entry);\n};\n\nexport const clearPrefetchCache = () => {\n\tfor (const entry of cache.values()) entry.abort();\n\tcache.clear();\n};\n\n/** Take the prefetched response for `url` out of the cache. Returns\n * `undefined` when nothing was prefetched (or it was evicted). Callers\n * that fetch the same URL themselves can await this instead. */\nexport const consumePrefetch = (\n\turl: string,\n\tkind: PrefetchKind = 'document'\n) => {\n\tconst key = cacheKey(kind, url);\n\tconst entry = cache.get(key);\n\tif (!entry) return undefined;\n\tcache.delete(key);\n\n\treturn entry.promise;\n};\n\n/** Whether `url` is already prefetched (in flight, queued or settled). */\nexport const hasPrefetched = (url: string, kind: PrefetchKind = 'document') =>\n\tcache.has(cacheKey(kind, url));\n\n/* ------------------------------------------------------------------ */\n/* Kinds */\n/* ------------------------------------------------------------------ */\n\nconst injectLink = (rel: string, href: string, asType?: string) => {\n\tif (typeof document === 'undefined') return;\n\tconst link = document.createElement('link');\n\tlink.rel = rel;\n\tlink.href = href;\n\tif (asType) link.setAttribute('as', asType);\n\tdocument.head.append(link);\n};\n\n/** Without `fetch` (very old engines) fall back to a `<link rel=\"prefetch\">`\n * for documents; other kinds have no declarative equivalent. */\nconst injectPrefetchFallback = (kind: PrefetchKind, url: string) => {\n\tif (kind !== 'document' || !supportsLinkRel('prefetch')) return;\n\tinjectLink('prefetch', url, 'document');\n};\n\nconst supportsLinkRel = (rel: string) => {\n\tif (typeof document === 'undefined') return false;\n\tconst link = document.createElement('link');\n\n\treturn (\n\t\ttypeof link.relList?.supports === 'function' &&\n\t\tlink.relList.supports(rel)\n\t);\n};\n\n/** Inject `<link rel=\"prefetch\" as=\"style\">` once per resolved href, so\n * the target page's stylesheets are in the HTTP cache before the click.\n * `prefetch` rather than `preload`: the sheet is for the NEXT document,\n * so preloading it would warn about an unused preload on this one. */\nexport const prefetchStylesheet = (href: string) => {\n\tif (typeof document === 'undefined') return false;\n\tconst resolved = resolveHref(href);\n\tif (prefetchedStyles.has(resolved)) return false;\n\tprefetchedStyles.add(resolved);\n\t// No `relList.supports` gate: a browser that doesn't know `prefetch`\n\t// simply ignores the tag, and there is no fallback worth branching to.\n\tinjectLink('prefetch', href, 'style');\n\n\treturn true;\n};\n\n/** Inject `<link rel=\"modulepreload\">` once per resolved href. Returns\n * `true` when a new tag was added. */\nexport const preloadModule = (href: string) => {\n\tif (typeof document === 'undefined') return false;\n\tconst resolved = resolveHref(href);\n\tif (preloadedModules.has(resolved)) return false;\n\n\tconst existing = Array.from(\n\t\tdocument.querySelectorAll<HTMLLinkElement>('link[rel=\"modulepreload\"]')\n\t);\n\tif (existing.some((link) => resolveHref(link.href) === resolved)) {\n\t\tpreloadedModules.add(resolved);\n\n\t\treturn false;\n\t}\n\n\tpreloadedModules.add(resolved);\n\tinjectLink('modulepreload', href);\n\n\treturn true;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null;\n\nconst isHref = (value: unknown): value is string =>\n\ttypeof value === 'string' && value.length > 0;\n\n/** Warm what a route-data envelope points at: `modulepreload` for the\n * page's client entry (and a separate client module when it has one),\n * `<link rel=\"prefetch\">` for its stylesheets. Anything unexpected in\n * the payload is ignored — a prefetch must never break a page. */\nconst warmRouteDataAssets = (envelope: unknown) => {\n\tif (!isRecord(envelope)) return;\n\tconst { assets } = envelope;\n\tif (!isRecord(assets)) return;\n\tconst { client, css, index } = assets;\n\tfor (const href of [index, client].filter(isHref)) preloadModule(href);\n\tif (!Array.isArray(css)) return;\n\tfor (const href of css.filter(isHref)) prefetchStylesheet(href);\n};\n\n/** Read the envelope out of a clone so the cached response body is still\n * unconsumed for whoever calls `consumePrefetch`. */\nconst warmFromRouteData = async (response: Response) => {\n\ttry {\n\t\twarmRouteDataAssets(await response.clone().json());\n\t} catch {\n\t\t/* malformed payload — the document prefetch still stands */\n\t}\n\n\treturn response;\n};\n\nconst fetchDocument = (url: string, signal: AbortSignal) =>\n\tfetch(url, { credentials: 'same-origin', signal });\n\nconst fetchRouteData = async (url: string, signal: AbortSignal) => {\n\tconst response = await fetch(url, {\n\t\tcredentials: 'same-origin',\n\t\theaders: { Accept: ROUTE_DATA_MEDIA_TYPE },\n\t\tsignal\n\t});\n\tconst contentType = response.headers.get('content-type') ?? '';\n\tconst isRouteData =\n\t\tresponse.ok && contentType.includes(ROUTE_DATA_MEDIA_TYPE);\n\tif (isRouteData) return warmFromRouteData(response);\n\n\t// The server doesn't speak route data (yet) — 404 / 406 / HTML fallback.\n\t// Remember that as \"no data\" so the URL isn't asked again, and drain\n\t// the body so the connection can be reused.\n\tawait response.body?.cancel().catch(() => undefined);\n\tconst status =\n\t\tresponse.status === NOT_FOUND || response.status === NOT_ACCEPTABLE\n\t\t\t? response.status\n\t\t\t: NOT_ACCEPTABLE;\n\n\treturn new Response(null, { status });\n};\n\n/**\n * Prefetch `url`. No-op when the user signalled data-saver / reduced-data\n * / 2g, when the page opted out, or when the URL is already cached. At\n * most two prefetches are in flight at once; the rest queue in order.\n */\nexport const prefetch = (url: string, options: PrefetchOptions = {}) => {\n\tconst kind = options.kind ?? 'document';\n\tif (!canPrefetch()) return;\n\n\tif (kind === 'module') {\n\t\tpreloadModule(url);\n\n\t\treturn;\n\t}\n\n\t// `'route'` is document + data: the HTML for the navigation itself and\n\t// the payload that names the modules and CSS to warm alongside it.\n\tif (kind === 'route') {\n\t\tprefetch(url, { kind: 'document' });\n\t\tprefetch(url, { kind: 'data' });\n\n\t\treturn;\n\t}\n\n\tconst key = cacheKey(kind, url);\n\tconst existing = cache.get(key);\n\tif (existing) {\n\t\ttouch(key, existing);\n\n\t\treturn;\n\t}\n\n\tif (typeof fetch === 'undefined') {\n\t\tinjectPrefetchFallback(kind, url);\n\n\t\treturn;\n\t}\n\n\twhile (cache.size >= PREFETCH_CACHE_LIMIT) evictOldest();\n\n\tconst { abort, promise } = enqueue((signal) =>\n\t\tkind === 'data'\n\t\t\t? fetchRouteData(url, signal)\n\t\t\t: fetchDocument(url, signal)\n\t);\n\tcache.set(key, { abort, kind, promise, url });\n};\n\n/* ------------------------------------------------------------------ */\n/* Speculation rules */\n/* ------------------------------------------------------------------ */\n\nconst supportsSpeculationRules = () =>\n\ttypeof HTMLScriptElement !== 'undefined' &&\n\ttypeof HTMLScriptElement.supports === 'function' &&\n\tHTMLScriptElement.supports('speculationrules');\n\n/**\n * Ask the browser to prerender `url` right away via a speculation-rules\n * script. Deduped per URL and capped to two live rules — the oldest is\n * removed when a third arrives, so a hover trail can't pile up hidden\n * prerendered tabs. Silently no-ops where the API is unsupported.\n */\nexport const speculate = (url: string) => {\n\tif (!canPrefetch() || !supportsSpeculationRules()) return false;\n\tif (typeof document === 'undefined') return false;\n\n\tconst resolved = resolveHref(url);\n\tif (liveSpeculationRules.has(resolved)) return false;\n\n\twhile (liveSpeculationRules.size >= MAX_LIVE_SPECULATION_RULES) {\n\t\tconst oldest = liveSpeculationRules.keys().next();\n\t\tif (oldest.done) break;\n\t\tliveSpeculationRules.get(oldest.value)?.remove();\n\t\tliveSpeculationRules.delete(oldest.value);\n\t}\n\n\tconst script = applyPageNonce(document.createElement('script'));\n\tscript.type = 'speculationrules';\n\tscript.textContent = JSON.stringify({\n\t\tprerender: [{ eagerness: 'immediate', urls: [url] }]\n\t});\n\tdocument.head.append(script);\n\tliveSpeculationRules.set(resolved, script);\n\n\treturn true;\n};\n\n/* ------------------------------------------------------------------ */\n/* Triggers */\n/* ------------------------------------------------------------------ */\n\nconst noopHandle: HoverPrefetchHandle = {\n\tcancel: () => {\n\t\t/* nothing scheduled */\n\t}\n};\n\n/**\n * Wrap a prefetch trigger in a hover-debounce so glancing across many links\n * doesn't fire a fetch storm. The returned handle's `cancel()` aborts the\n * pending hover prefetch (e.g. on `pointerleave`).\n *\n * Defaults to `kind: 'route'` — a hover is deliberate enough to be worth\n * the document AND the route data (and the modules + CSS that payload\n * names). Viewport prefetching stays document-only.\n */\nexport const scheduleHoverPrefetch = (\n\turl: string,\n\toptions: HoverPrefetchOptions = {}\n): HoverPrefetchHandle => {\n\tif (typeof window === 'undefined') return noopHandle;\n\n\tconst timer = window.setTimeout(() => {\n\t\tprefetch(url, { kind: options.kind ?? 'route' });\n\t\tif (options.prerender) speculate(url);\n\t\toptions.onPrefetch?.();\n\t}, HOVER_DEBOUNCE_MS);\n\n\treturn {\n\t\tcancel: () => window.clearTimeout(timer)\n\t};\n};\n\ntype ViewportTarget = {\n\toptions: ViewportPrefetchOptions;\n\turl: string;\n};\n\nconst viewportTargets = new WeakMap<Element, ViewportTarget>();\nlet viewportObserver: IntersectionObserver | null = null;\n\nconst handleIntersections = (entries: IntersectionObserverEntry[]) => {\n\tfor (const entry of entries) {\n\t\tif (!entry.isIntersecting) continue;\n\t\tconst target = viewportTargets.get(entry.target);\n\t\tviewportObserver?.unobserve(entry.target);\n\t\tviewportTargets.delete(entry.target);\n\t\tif (!target) continue;\n\t\tprefetch(target.url, { kind: target.options.kind });\n\t\ttarget.options.onVisible?.();\n\t}\n};\n\nconst getViewportObserver = () => {\n\tif (viewportObserver) return viewportObserver;\n\tif (typeof IntersectionObserver === 'undefined') return null;\n\tviewportObserver = new IntersectionObserver(handleIntersections, {\n\t\trootMargin: VIEWPORT_ROOT_MARGIN\n\t});\n\n\treturn viewportObserver;\n};\n\n/**\n * Prefetch `url` once `element` scrolls within 128px of the viewport. One\n * IntersectionObserver is shared by every link on the page. Returns an\n * unobserve function for the caller's unmount hook.\n */\nexport const observeViewport = (\n\telement: Element,\n\turl: string,\n\toptions: ViewportPrefetchOptions = {}\n) => {\n\tconst observer = getViewportObserver();\n\tif (!observer || !canPrefetch()) return () => undefined;\n\n\tviewportTargets.set(element, { options, url });\n\tobserver.observe(element);\n\n\treturn () => {\n\t\tobserver.unobserve(element);\n\t\tviewportTargets.delete(element);\n\t};\n};\n\n/** Test / teardown helper — forgets injected modulepreload + speculation\n * rule bookkeeping and cancels any queued fetches. */\nexport const resetPrefetchState = () => {\n\tclearPrefetchCache();\n\tqueue.length = 0;\n\tpreloadedModules.clear();\n\tprefetchedStyles.clear();\n\tfor (const script of liveSpeculationRules.values()) script.remove();\n\tliveSpeculationRules.clear();\n\tviewportObserver?.disconnect();\n\tviewportObserver = null;\n};\n"
|
|
7
6
|
],
|
|
8
|
-
"mappings": "
|
|
9
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "23E0D01680231D5664756E2164756E21",
|
|
10
9
|
"names": []
|
|
11
10
|
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TRANSLATABLE_ATTRIBUTES
|
|
3
3
|
} from "./index-8m2qq61n.js";
|
|
4
|
+
import {
|
|
5
|
+
readPageNonce
|
|
6
|
+
} from "./index-4j1snyh2.js";
|
|
4
7
|
|
|
5
8
|
// src/angular/resolveAngularPackage.ts
|
|
6
9
|
var {existsSync, readFileSync} = (() => ({}));
|
|
@@ -382,10 +385,14 @@ var getClientAngularComponentSelector = (component) => {
|
|
|
382
385
|
return typeof selector === "string" && selector.length > 0 ? selector : null;
|
|
383
386
|
};
|
|
384
387
|
var createAngularIslandApp = async () => {
|
|
385
|
-
const { EnvironmentInjector, provideZonelessChangeDetection } = await import("@angular/core");
|
|
388
|
+
const { CSP_NONCE, EnvironmentInjector, provideZonelessChangeDetection } = await import("@angular/core");
|
|
386
389
|
const { createApplication } = await import("@angular/platform-browser");
|
|
390
|
+
const nonce = readPageNonce();
|
|
387
391
|
const app = await createApplication({
|
|
388
|
-
providers: [
|
|
392
|
+
providers: [
|
|
393
|
+
provideZonelessChangeDetection(),
|
|
394
|
+
...nonce ? [{ provide: CSP_NONCE, useValue: nonce }] : []
|
|
395
|
+
]
|
|
389
396
|
});
|
|
390
397
|
const environmentInjector = app.injector.get(EnvironmentInjector);
|
|
391
398
|
return { app, environmentInjector };
|
|
@@ -435,5 +442,5 @@ export {
|
|
|
435
442
|
mountAngularIsland
|
|
436
443
|
};
|
|
437
444
|
|
|
438
|
-
//# debugId=
|
|
439
|
-
//# sourceMappingURL=islands-
|
|
445
|
+
//# debugId=BAB2ED48C1DBFB7D64756E2164756E21
|
|
446
|
+
//# sourceMappingURL=islands-mfjmdwnb.js.map
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
"/**\n * Utility for registering client-side scripts that need to run after Angular SSR hydration.\n *\n * This is necessary because Angular's lifecycle hooks don't always run reliably on the client\n * after SSR hydration, especially for event listeners attached to DOM elements.\n *\n * Usage in Angular components:\n * ```typescript\n * import { registerClientScript } from '@absolutejs/absolute';\n *\n * // Register an event listener script\n * registerClientScript(() => {\n * const element = document.querySelector('.my-element');\n * if (element) {\n * element.addEventListener('click', () => {\n * console.log('Clicked!');\n * });\n * }\n * });\n * ```\n *\n * The script will be automatically injected into the HTML response and executed on the client.\n */\n\nimport { nonceAttr } from './cspNonceRef';\n\n// Request-scoped registry for client scripts\n// Each request gets its own set of scripts to inject\nconst scriptRegistry = new Map<string, Set<() => void>>();\n\n// Generate a unique request ID for tracking scripts per request\nlet requestCounter = 0;\nconst getRequestId = () => `req_${Date.now()}_${++requestCounter}`;\n\n// Allow SSR frameworks to inject a request context getter (e.g. AsyncLocalStorage)\nlet ssrContextGetter: (() => string | undefined) | null = null;\nexport const getSsrContextId = () =>\n\tssrContextGetter?.() ||\n\tObject.getOwnPropertyDescriptor(globalThis, '__absolutejs_requestId')\n\t\t?.value;\nexport const registerClientScript = (\n\tscript: () => void,\n\trequestId?: string\n) => {\n\t// Try to get requestId from explicit arg, then Async Context, then global fallback\n\tconst id = requestId || getSsrContextId() || getRequestId();\n\n\tif (!scriptRegistry.has(id)) {\n\t\tscriptRegistry.set(id, new Set());\n\t}\n\n\tscriptRegistry.get(id)?.add(script);\n\n\treturn id;\n};\nexport const setSsrContextGetter = (getter: () => string | undefined) => {\n\tssrContextGetter = getter;\n};\n\n// Make registerClientScript available globally during SSR for Angular components\n// Using type assertion for globalThis extension\nif (typeof globalThis !== 'undefined') {\n\tObject.assign(globalThis, { registerClientScript });\n}\n\n/**\n * Get all registered scripts for a request and clear them.\n * This is called by the page handler after rendering.\n *\n * @param requestId - The request ID to get scripts for\n * @returns Array of script functions, or empty array if none registered\n */\nexport const clearAllClientScripts = () => {\n\tscriptRegistry.clear();\n};\nexport const generateClientScriptCode = (scripts: (() => void)[]) => {\n\tif (scripts.length === 0) {\n\t\treturn '';\n\t}\n\n\t// Convert functions to strings and wrap in IIFE\n\tconst scriptCode = scripts\n\t\t.map((script, index) => {\n\t\t\t// Get the function body as a string\n\t\t\tconst funcString = script.toString();\n\n\t\t\t// Extract the body (everything between { and })\n\t\t\tconst bodyMatch = funcString.match(/\\{([\\s\\S]*)\\}/);\n\t\t\tif (!bodyMatch || !bodyMatch[1]) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tconst body = bodyMatch[1].trim();\n\n\t\t\t// Wrap in IIFE with MutationObserver for DOM readiness\n\t\t\treturn `\n\t(function() {\n\t\tvar executed = false;\n\t\tfunction executeScript_${index}() {\n\t\t\tif (executed) return;\n\t\t\texecuted = true;\n\t\t\t${body}\n\t\t}\n\n\t\tif (document.readyState === 'complete' || document.readyState === 'interactive') {\n\t\t\texecuteScript_${index}();\n\t\t} else {\n\t\t\tdocument.addEventListener('DOMContentLoaded', executeScript_${index});\n\t\t}\n\n\t\t// Watch for hydration-added elements\n\t\tvar observer = new MutationObserver(function() {\n\t\t\texecuteScript_${index}();\n\t\t\tif (executed) observer.disconnect();\n\t\t});\n\t\tif (!executed) {\n\t\t\tobserver.observe(document.body || document.documentElement, { childList: true, subtree: true });\n\t\t}\n\n\t\t// Single fallback timeout\n\t\tsetTimeout(function() {\n\t\t\texecuteScript_${index}();\n\t\t\tobserver.disconnect();\n\t\t}, 1000);\n\t})();`;\n\t\t})\n\t\t.join('\\n');\n\n\treturn `<script${nonceAttr()}>\n(function() {\n${scriptCode}\n})();\n</script>`;\n};\nexport const getAndClearClientScripts = (requestId?: string) => {\n\tconst id = requestId || ssrContextGetter?.();\n\tif (!id) return [];\n\n\tconst scripts = scriptRegistry.get(id);\n\tif (!scripts) {\n\t\treturn [];\n\t}\n\n\tconst scriptArray = Array.from(scripts);\n\tscriptRegistry.delete(id);\n\n\treturn scriptArray;\n};\n",
|
|
9
9
|
"import { nonceAttr } from '../utils/cspNonceRef';\nimport { TRANSLATABLE_ATTRIBUTES } from '../client/browserTranslationAttributes';\n\nconst BASELINE_MARKER = '__ABSOLUTE_SSR_TEXT_BASELINES__';\n\n/** Inline this after SSR markup and before any client entry executes. The\n * snapshot records server-authored text while keeping it out of the DOM, so\n * browser translation remains free to edit the rendered text. */\nexport const BROWSER_TRANSLATION_BASELINE_SCRIPT =\n\t'window.__ABSOLUTE_SSR_TEXT_BASELINES__=new WeakMap();' +\n\t'window.__ABSOLUTE_SSR_ATTRIBUTE_BASELINES__=new WeakMap();' +\n\t'{const r=document.body,b=window.__ABSOLUTE_SSR_TEXT_BASELINES__,' +\n\t'a=window.__ABSOLUTE_SSR_ATTRIBUTE_BASELINES__;' +\n\t'if(r)for(const e of [r,...r.querySelectorAll(\"*\")]){' +\n\t'const t=new Map();for(const [i,n]of[...e.childNodes].entries())' +\n\t'if(n.nodeType===3)t.set(i,n.nodeValue??\"\");if(t.size)b.set(e,t);' +\n\t`const v=new Map();for(const k of ${JSON.stringify(TRANSLATABLE_ATTRIBUTES)}){` +\n\t'const s=e.getAttribute(k);if(s!==null)v.set(k,s);}if(v.size)a.set(e,v);}}';\n\nexport const browserTranslationBaselineTag = () =>\n\t`<script${nonceAttr()}>${BROWSER_TRANSLATION_BASELINE_SCRIPT}</script>`;\n\nexport const injectBrowserTranslationBaseline = (html: string) => {\n\tif (html.includes(BASELINE_MARKER)) return html;\n\tconst script = browserTranslationBaselineTag();\n\tconst closingBodyIndex = html.lastIndexOf('</body>');\n\tif (closingBodyIndex < 0) return `${html}${script}`;\n\n\treturn `${html.slice(0, closingBodyIndex)}${script}${html.slice(closingBodyIndex)}`;\n};\n",
|
|
10
10
|
"import { escapeScriptContent } from '../utils/escapeScriptContent';\nimport { nonceAttr, readCspNonce } from '../utils/cspNonceRef';\nimport type { EnvironmentProviders, Provider, Type } from '@angular/core';\nimport type { BootstrapContext } from '@angular/platform-browser';\nimport type { AngularDeps, CachedRouteData } from '../../types/angular';\nimport {\n\tgetAndClearClientScripts,\n\tgenerateClientScriptCode\n} from '../utils/registerClientScript';\nimport { browserTranslationBaselineTag } from '../core/browserTranslation';\nimport { buildAbsoluteHttpTransferCacheOptions } from './httpTransferCache';\nimport { buildRequestProviders } from './requestProviders';\nimport { isAngularZoneMode } from './zoneRuntime';\n\n// --- Last-used requestContext cache for HMR ---\n// Stores { requestContext, headTag } from the most recent real request per\n// route so HMR re-renders with the same data the user last saw.\n\nconst routeContextCache = new Map<string, CachedRouteData>();\n\nexport const cacheRouteData = (pagePath: string, data: CachedRouteData) => {\n\tconst cacheKey = pagePath.split('?')[0] ?? pagePath;\n\trouteContextCache.set(cacheKey, data);\n};\nexport const getCachedRouteData = (pagePath: string) =>\n\trouteContextCache.get(pagePath);\n\n// --- Selector cache ---\n\nconst selectorCache = new Map<string, string>();\nexport const buildProviders = (\n\tdeps: AngularDeps,\n\tsanitizer: InstanceType<AngularDeps['DomSanitizer']>,\n\trequest: Request | undefined,\n\trequestContext: unknown,\n\tresponseInit: ResponseInit | undefined,\n\tuserProviders: ReadonlyArray<Provider | EnvironmentProviders> = []\n) => [\n\tdeps.provideServerRendering(),\n\tdeps.provideClientHydration(\n\t\tdeps.withHttpTransferCacheOptions(\n\t\t\tbuildAbsoluteHttpTransferCacheOptions()\n\t\t)\n\t),\n\tisAngularZoneMode()\n\t\t? deps.provideZoneChangeDetection({ eventCoalescing: true })\n\t\t: deps.provideZonelessChangeDetection(),\n\t{ provide: deps.APP_BASE_HREF, useValue: '/' },\n\t{ provide: deps.DomSanitizer, useValue: sanitizer },\n\t{ provide: deps.Sanitizer, useValue: sanitizer },\n\t...buildRequestProviders(deps, request, requestContext, responseInit),\n\t...userProviders\n];\nexport const clearSelectorCache = () => selectorCache.clear();\n\nexport const resolveSelector = (\n\tdeps: AngularDeps,\n\tpagePath: string,\n\tPageComponent: Type<unknown>\n) => {\n\tconst cached = selectorCache.get(pagePath);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst selector =\n\t\tdeps.reflectComponentType(PageComponent)?.selector ?? 'ng-app';\n\tselectorCache.set(pagePath, selector);\n\n\treturn selector;\n};\n\n// --- Inject HTML helper ---\n\nconst injectBeforeClose = (html: string, snippet: string) => {\n\tif (html.includes('</body>')) {\n\t\treturn html.replace('</body>', `${snippet}</body>`);\n\t}\n\tif (html.includes('</html>')) {\n\t\treturn html.replace('</html>', `${snippet}</html>`);\n\t}\n\n\treturn html + snippet;\n};\n\n// --- Post-render HTML injection ---\n\nexport const injectSsrScripts = (\n\thtml: string,\n\trequestId: string,\n\tindexPath: string,\n\trequestContext?: unknown,\n\tbaseHref?: string | null\n) => {\n\tlet result = injectBeforeClose(html, browserTranslationBaselineTag());\n\n\tconst registeredScripts = getAndClearClientScripts(requestId);\n\tif (registeredScripts.length > 0) {\n\t\tresult = injectBeforeClose(\n\t\t\tresult,\n\t\t\tgenerateClientScriptCode(registeredScripts)\n\t\t);\n\t}\n\n\tif (requestContext !== undefined) {\n\t\tresult = injectBeforeClose(\n\t\t\tresult,\n\t\t\t`<script${nonceAttr()}>window.__ABS_ANGULAR_REQUEST_CONTEXT__ = ${escapeScriptContent(JSON.stringify(requestContext))};</script>`\n\t\t);\n\t}\n\n\t// Read by the generated client bootstrap so the browser router uses\n\t// the same `APP_BASE_HREF` the server rendered with.\n\tif (baseHref) {\n\t\tresult = injectBeforeClose(\n\t\t\tresult,\n\t\t\t`<script${nonceAttr()}>window.__ABS_ANGULAR_BASE_HREF__ = ${escapeScriptContent(JSON.stringify(baseHref))};</script>`\n\t\t);\n\t}\n\n\tif (indexPath) {\n\t\tconst escapedIndexPath = JSON.stringify(indexPath);\n\t\tresult = injectBeforeClose(\n\t\t\tresult,\n\t\t\t`<script${nonceAttr()}>import(${escapeScriptContent(escapedIndexPath)});</script>`\n\t\t);\n\t}\n\n\treturn result;\n};\nexport const renderAngularApp = async (\n\tdeps: AngularDeps,\n\tPageComponent: Type<unknown>,\n\tproviders: (Provider | EnvironmentProviders)[],\n\tdocument: string | Document,\n\turl: string = '/'\n) => {\n\t// Angular writes this nonce on its own <style> and event-replay\n\t// scripts when secureHeaders() is on.\n\tconst nonce = readCspNonce();\n\tconst cspProviders = nonce\n\t\t? [{ provide: deps.CSP_NONCE, useValue: nonce }]\n\t\t: [];\n\tconst bootstrap = (context: BootstrapContext) =>\n\t\tdeps.bootstrapApplication(\n\t\t\tPageComponent,\n\t\t\t{ providers: [...providers, ...cspProviders] },\n\t\t\tcontext\n\t\t);\n\n\treturn withSuppressedAngularDevLogs(() =>\n\t\tdeps.renderApplication(bootstrap, {\n\t\t\tdocument,\n\t\t\tplatformProviders: [],\n\t\t\turl\n\t\t})\n\t);\n};\nexport const withSuppressedAngularDevLogs = async <T>(\n\trender: () => Promise<T>\n) => {\n\tconst origLog = console.log;\n\tconsole.log = (...args: unknown[]) => {\n\t\tif (\n\t\t\ttypeof args[0] === 'string' &&\n\t\t\targs[0].includes('development mode')\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\torigLog.apply(console, args);\n\t};\n\n\ttry {\n\t\treturn await render();\n\t} finally {\n\t\tconsole.log = origLog;\n\t}\n};\n",
|
|
11
|
-
"import { getAngularDeps } from './angularDeps';\nimport { withSuppressedAngularDevLogs } from './ssrRender';\nimport { getSsrContextId } from '../utils/registerClientScript';\n\nconst angularIslandSelector = 'abs-angular-island';\n\nexport const getAngularIslandSelector = (_islandId: string) =>\n\tangularIslandSelector;\nexport const isAngularComponent = (\n\tvalue: unknown\n): value is import('@angular/core').Type<object> => typeof value === 'function';\n\nconst getSelectorFromRenderedIsland = (rootElement: HTMLElement) => {\n\tconst firstChild = rootElement.firstElementChild;\n\tif (!(firstChild instanceof HTMLElement)) {\n\t\treturn null;\n\t}\n\n\tconst selector = firstChild.tagName.toLowerCase();\n\n\treturn selector.length > 0 ? selector : null;\n};\n\nconst getClientAngularComponentSelector = (\n\tcomponent: import('@angular/core').Type<object>\n) => {\n\tconst maybeDef = Reflect.get(component, 'ɵcmp');\n\tif (typeof maybeDef !== 'object' || maybeDef === null) {\n\t\treturn null;\n\t}\n\n\tconst maybeSelectors = Reflect.get(maybeDef, 'selectors');\n\tif (!Array.isArray(maybeSelectors)) {\n\t\treturn null;\n\t}\n\n\tconst [firstSelectorGroup] = maybeSelectors;\n\tif (!Array.isArray(firstSelectorGroup)) {\n\t\treturn null;\n\t}\n\n\tconst [selector] = firstSelectorGroup;\n\n\treturn typeof selector === 'string' && selector.length > 0\n\t\t? selector\n\t\t: null;\n};\n\nconst createAngularIslandApp = async () => {\n\tconst { EnvironmentInjector, provideZonelessChangeDetection } =\n\t\tawait import('@angular/core');\n\tconst { createApplication } = await import('@angular/platform-browser');\n\tconst app = await createApplication({\n\t\tproviders: [
|
|
11
|
+
"import { getAngularDeps } from './angularDeps';\nimport { withSuppressedAngularDevLogs } from './ssrRender';\nimport { getSsrContextId } from '../utils/registerClientScript';\nimport { readPageNonce } from '../dev/client/cspNonce';\n\nconst angularIslandSelector = 'abs-angular-island';\n\nexport const getAngularIslandSelector = (_islandId: string) =>\n\tangularIslandSelector;\nexport const isAngularComponent = (\n\tvalue: unknown\n): value is import('@angular/core').Type<object> => typeof value === 'function';\n\nconst getSelectorFromRenderedIsland = (rootElement: HTMLElement) => {\n\tconst firstChild = rootElement.firstElementChild;\n\tif (!(firstChild instanceof HTMLElement)) {\n\t\treturn null;\n\t}\n\n\tconst selector = firstChild.tagName.toLowerCase();\n\n\treturn selector.length > 0 ? selector : null;\n};\n\nconst getClientAngularComponentSelector = (\n\tcomponent: import('@angular/core').Type<object>\n) => {\n\tconst maybeDef = Reflect.get(component, 'ɵcmp');\n\tif (typeof maybeDef !== 'object' || maybeDef === null) {\n\t\treturn null;\n\t}\n\n\tconst maybeSelectors = Reflect.get(maybeDef, 'selectors');\n\tif (!Array.isArray(maybeSelectors)) {\n\t\treturn null;\n\t}\n\n\tconst [firstSelectorGroup] = maybeSelectors;\n\tif (!Array.isArray(firstSelectorGroup)) {\n\t\treturn null;\n\t}\n\n\tconst [selector] = firstSelectorGroup;\n\n\treturn typeof selector === 'string' && selector.length > 0\n\t\t? selector\n\t\t: null;\n};\n\nconst createAngularIslandApp = async () => {\n\tconst { CSP_NONCE, EnvironmentInjector, provideZonelessChangeDetection } =\n\t\tawait import('@angular/core');\n\tconst { createApplication } = await import('@angular/platform-browser');\n\t// Under secureHeaders(), the <style> elements Angular adds for island\n\t// components need the page's nonce.\n\tconst nonce = readPageNonce();\n\tconst app = await createApplication({\n\t\tproviders: [\n\t\t\tprovideZonelessChangeDetection(),\n\t\t\t...(nonce ? [{ provide: CSP_NONCE, useValue: nonce }] : [])\n\t\t]\n\t});\n\tconst environmentInjector = app.injector.get(EnvironmentInjector);\n\n\treturn { app, environmentInjector };\n};\n\nlet angularIslandAppPromise: Promise<{\n\tapp: import('@angular/core').ApplicationRef;\n\tenvironmentInjector: import('@angular/core').EnvironmentInjector;\n}> | null = null;\n\nconst getAngularIslandApp = async () => {\n\tif (!angularIslandAppPromise) {\n\t\tangularIslandAppPromise = createAngularIslandApp();\n\t}\n\n\treturn angularIslandAppPromise;\n};\n\ntype AngularIslandWrapperMetadata = {\n\tdeps: Awaited<ReturnType<typeof getAngularDeps>>;\n\tpropsToken: import('@angular/core').InjectionToken<Record<string, unknown>>;\n\tselector: string;\n\tWrapperComponent: import('@angular/core').Type<object>;\n};\n\nconst wrapperMetadataCache = new Map<\n\tstring,\n\tPromise<AngularIslandWrapperMetadata>\n>();\nconst requestRenderCache = new Map<string, Map<string, string>>();\n\nconst getRequestRenderCache = () => {\n\tconst requestId = getSsrContextId();\n\tif (!requestId) {\n\t\treturn null;\n\t}\n\n\tconst cached = requestRenderCache.get(requestId);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst renderCache = new Map<string, string>();\n\trequestRenderCache.set(requestId, renderCache);\n\n\treturn renderCache;\n};\n\nconst getAngularIslandWrapperKey = (\n\tcomponent: import('@angular/core').Type<object>,\n\t_islandId: string\n) => {\n\tconst componentName =\n\t\ttypeof component.name === 'string' && component.name.length > 0\n\t\t\t? component.name\n\t\t\t: 'AngularIsland';\n\n\treturn `${componentName}:${angularIslandSelector}`;\n};\n\nconst getIslandRenderCacheKey = (\n\tcomponent: import('@angular/core').Type<object>,\n\tprops: Record<string, unknown>\n) => {\n\tconst componentName =\n\t\ttypeof component.name === 'string' && component.name.length > 0\n\t\t\t? component.name\n\t\t\t: 'AngularIsland';\n\n\treturn `${componentName}:${JSON.stringify(props)}`;\n};\n\nconst buildAngularIslandWrapperMetadata = async (\n\tcomponent: import('@angular/core').Type<object>,\n\tislandId: string,\n\twrapperKey: string\n) => {\n\t// Resolve Angular through getAngularDeps so the wrapper is built with the\n\t// SAME Angular instance that renders it. In production server-side imports\n\t// point at the pre-linked Angular vendor bundle; bare `@angular/*` imports\n\t// here would instead resolve to node_modules, giving the wrapper component\n\t// (its decorator, InjectionToken and inject) a different Angular instance\n\t// than the render pipeline's injector — every cross-instance token lookup\n\t// then fails with NG0201. (Dev uses a single node_modules Angular, so this\n\t// only manifests in production.)\n\tconst deps = await getAngularDeps();\n\tconst { Component, InjectionToken, NgComponentOutlet, inject } = deps;\n\tconst selector = getAngularIslandSelector(islandId);\n\tconst propsToken = new InjectionToken<Record<string, unknown>>(\n\t\t`${wrapperKey}:props`\n\t);\n\n\tclass AngularIslandWrapperComponent {\n\t\tcomponent = component;\n\t\tprops = inject(propsToken);\n\t}\n\n\treturn {\n\t\tdeps,\n\t\tpropsToken,\n\t\tselector,\n\t\tWrapperComponent: Component({\n\t\t\timports: [NgComponentOutlet, component],\n\t\t\tselector,\n\t\t\tstandalone: true,\n\t\t\ttemplate:\n\t\t\t\t'<ng-container *ngComponentOutlet=\"component; inputs: props\"></ng-container>'\n\t\t})(AngularIslandWrapperComponent)\n\t};\n};\n\nconst createAngularIslandWrapper = async (\n\tcomponent: import('@angular/core').Type<object>,\n\tislandId: string\n) => {\n\tconst wrapperKey = getAngularIslandWrapperKey(component, islandId);\n\tconst cached = wrapperMetadataCache.get(wrapperKey);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst metadataPromise = buildAngularIslandWrapperMetadata(\n\t\tcomponent,\n\t\tislandId,\n\t\twrapperKey\n\t);\n\n\twrapperMetadataCache.set(wrapperKey, metadataPromise);\n\n\treturn metadataPromise;\n};\n\nconst extractAngularIslandRoot = (html: string, selector: string) => {\n\tconst openTag = `<${selector}`;\n\tconst start = html.indexOf(openTag);\n\tif (start < 0) {\n\t\tthrow new Error(`Could not find Angular island root \"${selector}\".`);\n\t}\n\n\tconst endTag = `</${selector}>`;\n\tconst end = html.indexOf(endTag, start);\n\tif (end < 0) {\n\t\tthrow new Error(`Could not close Angular island root \"${selector}\".`);\n\t}\n\n\treturn html.slice(start, end + endTag.length);\n};\n\nexport const mountAngularIsland = async <Props extends Record<string, unknown>>(\n\tcomponent: import('@angular/core').Type<object>,\n\telement: HTMLElement,\n\tprops: Props,\n\tislandId: string\n) => {\n\tawait import('@angular/compiler');\n\tconst { createComponent, inputBinding } = await import('@angular/core');\n\tconst selector = getAngularIslandSelector(islandId);\n\tconst { app, environmentInjector } = await getAngularIslandApp();\n\n\tlet rootElement = element.querySelector(selector);\n\tif (!(rootElement instanceof HTMLElement)) {\n\t\telement.innerHTML = `<${selector}></${selector}>`;\n\t\trootElement = element.querySelector(selector);\n\t}\n\tif (!(rootElement instanceof HTMLElement)) return app;\n\n\tconst componentSelector =\n\t\tgetClientAngularComponentSelector(component) ??\n\t\tgetSelectorFromRenderedIsland(rootElement);\n\tif (!componentSelector) return app;\n\n\trootElement.innerHTML = `<${componentSelector}></${componentSelector}>`;\n\tconst hostElement = rootElement.querySelector(componentSelector);\n\tif (!(hostElement instanceof HTMLElement)) return app;\n\n\tconst bindings = Object.entries(props).map(([key, value]) =>\n\t\tinputBinding(key, () => value)\n\t);\n\tconst componentRef = createComponent(component, {\n\t\tbindings,\n\t\tenvironmentInjector,\n\t\thostElement\n\t});\n\tapp.attachView(componentRef.hostView);\n\tcomponentRef.changeDetectorRef.detectChanges();\n\twindow.__ABS_ANGULAR_ISLAND_APPS__ ??= [];\n\twindow.__ABS_ANGULAR_ISLAND_APPS__.push(app);\n\n\treturn app;\n};\nexport const renderAngularIslandToHtml = async <\n\tProps extends Record<string, unknown>\n>(\n\tcomponent: import('@angular/core').Type<object>,\n\tprops: Props,\n\tislandId: string\n) => {\n\tconst requestCache = getRequestRenderCache();\n\tconst renderCacheKey = getIslandRenderCacheKey(component, props);\n\tconst cachedHtml = requestCache?.get(renderCacheKey);\n\tif (cachedHtml) {\n\t\treturn cachedHtml;\n\t}\n\n\tconst { deps, propsToken, selector, WrapperComponent } =\n\t\tawait createAngularIslandWrapper(component, islandId);\n\n\tconst providers: (\n\t\t| import('@angular/core').Provider\n\t\t| import('@angular/core').EnvironmentProviders\n\t)[] = [\n\t\tdeps.provideServerRendering(),\n\t\tdeps.provideZonelessChangeDetection(),\n\t\t{ provide: deps.APP_BASE_HREF, useValue: '/' },\n\t\t{ provide: propsToken, useValue: props }\n\t];\n\tconst document = `<!DOCTYPE html><html><body><${selector}></${selector}></body></html>`;\n\tconst html = await withSuppressedAngularDevLogs(() =>\n\t\tdeps.renderApplication(\n\t\t\t(context) =>\n\t\t\t\tdeps.bootstrapApplication(\n\t\t\t\t\tWrapperComponent,\n\t\t\t\t\t{ providers },\n\t\t\t\t\tcontext\n\t\t\t\t),\n\t\t\t{\n\t\t\t\tdocument,\n\t\t\t\tplatformProviders: [],\n\t\t\t\turl: '/'\n\t\t\t}\n\t\t)\n\t);\n\tconst islandHtml = extractAngularIslandRoot(html, selector);\n\trequestCache?.set(renderCacheKey, islandHtml);\n\n\treturn islandHtml;\n};\n"
|
|
12
12
|
],
|
|
13
|
-
"mappings": "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",
|
|
14
|
-
"debugId": "
|
|
13
|
+
"mappings": "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",
|
|
14
|
+
"debugId": "BAB2ED48C1DBFB7D64756E2164756E21",
|
|
15
15
|
"names": []
|
|
16
16
|
}
|
|
@@ -4,7 +4,10 @@ import {
|
|
|
4
4
|
|
|
5
5
|
// src/client/hydrators/react.ts
|
|
6
6
|
import { createElement } from "react";
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
createRoot,
|
|
9
|
+
hydrateRoot
|
|
10
|
+
} from "react-dom/client";
|
|
8
11
|
import { flushSync } from "react-dom";
|
|
9
12
|
var reactIslandRoots = new WeakMap;
|
|
10
13
|
var isPropsRecord = (value) => typeof value === "object" && value !== null;
|
|
@@ -55,10 +58,23 @@ var hydrateReactIsland = (component, element, props) => {
|
|
|
55
58
|
hydrate(createElement(component, props));
|
|
56
59
|
};
|
|
57
60
|
var isReactComponent = (value) => typeof value === "function";
|
|
61
|
+
var remountReactIsland = (component, element, props) => {
|
|
62
|
+
try {
|
|
63
|
+
reactIslandRoots.get(element)?.unmount();
|
|
64
|
+
} catch {}
|
|
65
|
+
element.replaceChildren();
|
|
66
|
+
detachFromHostReactRoot(element);
|
|
67
|
+
const root = createRoot(element);
|
|
68
|
+
flushSync(() => {
|
|
69
|
+
root.render(isPropsRecord(props) ? createElement(component, props) : createElement(component));
|
|
70
|
+
});
|
|
71
|
+
reactIslandRoots.set(element, root);
|
|
72
|
+
};
|
|
58
73
|
export {
|
|
59
74
|
hydrateReactIsland,
|
|
60
|
-
isReactComponent
|
|
75
|
+
isReactComponent,
|
|
76
|
+
remountReactIsland
|
|
61
77
|
};
|
|
62
78
|
|
|
63
|
-
//# debugId=
|
|
64
|
-
//# sourceMappingURL=react-
|
|
79
|
+
//# debugId=566183856C37B0E164756E2164756E21
|
|
80
|
+
//# sourceMappingURL=react-sprprqzs.js.map
|