@absolutejs/absolute 0.19.0-beta.326 → 0.19.0-beta.327
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/angular/browser.js +35 -2
- package/dist/angular/browser.js.map +3 -3
- package/dist/client/index.js +96 -1
- package/dist/client/index.js.map +6 -4
- package/dist/react/browser.js +35 -2
- package/dist/react/browser.js.map +3 -3
- package/dist/src/client/preserveIslandMarkup.d.ts +2 -0
- package/dist/vue/browser.js +35 -2
- package/dist/vue/browser.js.map +3 -3
- package/dist/vue/index.js +35 -2
- package/dist/vue/index.js.map +3 -3
- package/package.json +1 -1
package/dist/react/browser.js
CHANGED
|
@@ -150,6 +150,13 @@ var getClaimMap = () => {
|
|
|
150
150
|
window.__ABS_CLAIMED_ISLAND_MARKUP__ ??= new Map;
|
|
151
151
|
return window.__ABS_CLAIMED_ISLAND_MARKUP__;
|
|
152
152
|
};
|
|
153
|
+
var getSnapshotMap = () => {
|
|
154
|
+
if (typeof window === "undefined") {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
window.__ABS_SERVER_ISLAND_HTML__ ??= new Map;
|
|
158
|
+
return window.__ABS_SERVER_ISLAND_HTML__;
|
|
159
|
+
};
|
|
153
160
|
var getIslandSignature = (props) => {
|
|
154
161
|
const attributes = getIslandMarkerAttributes(props);
|
|
155
162
|
return [
|
|
@@ -166,6 +173,30 @@ var isMatchingIslandElement = (element, props) => {
|
|
|
166
173
|
const attributes = getIslandMarkerAttributes(props);
|
|
167
174
|
return element.dataset.island === "true" && element.dataset.component === attributes["data-component"] && element.dataset.framework === attributes["data-framework"] && (element.dataset.hydrate ?? "load") === attributes["data-hydrate"] && (element.dataset.props ?? "{}") === attributes["data-props"];
|
|
168
175
|
};
|
|
176
|
+
var initializeIslandMarkupSnapshot = () => {
|
|
177
|
+
if (typeof document === "undefined") {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const snapshotMap = getSnapshotMap();
|
|
181
|
+
if (!snapshotMap || snapshotMap.size > 0) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const elements = Array.from(document.querySelectorAll('[data-island="true"]'));
|
|
185
|
+
for (const element of elements) {
|
|
186
|
+
if (!(element instanceof HTMLElement)) {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
const signature = [
|
|
190
|
+
element.dataset.component,
|
|
191
|
+
element.dataset.framework,
|
|
192
|
+
element.dataset.hydrate ?? "load",
|
|
193
|
+
element.dataset.props ?? "{}"
|
|
194
|
+
].join("::");
|
|
195
|
+
const existing = snapshotMap.get(signature) ?? [];
|
|
196
|
+
existing.push(element.innerHTML);
|
|
197
|
+
snapshotMap.set(signature, existing);
|
|
198
|
+
}
|
|
199
|
+
};
|
|
169
200
|
var preserveIslandMarkup = (props) => {
|
|
170
201
|
if (typeof document === "undefined") {
|
|
171
202
|
return {
|
|
@@ -174,8 +205,10 @@ var preserveIslandMarkup = (props) => {
|
|
|
174
205
|
};
|
|
175
206
|
}
|
|
176
207
|
const claimMap = getClaimMap();
|
|
208
|
+
const snapshotMap = getSnapshotMap();
|
|
177
209
|
const signature = getIslandSignature(props);
|
|
178
210
|
const claimedCount = claimMap?.get(signature) ?? 0;
|
|
211
|
+
const snapshotCandidate = snapshotMap?.get(signature)?.[claimedCount];
|
|
179
212
|
const candidates = Array.from(document.querySelectorAll('[data-island="true"]')).filter((element) => isMatchingIslandElement(element, props));
|
|
180
213
|
const candidate = candidates[claimedCount];
|
|
181
214
|
if (claimMap) {
|
|
@@ -183,7 +216,7 @@ var preserveIslandMarkup = (props) => {
|
|
|
183
216
|
}
|
|
184
217
|
return {
|
|
185
218
|
attributes: getIslandMarkerAttributes(props),
|
|
186
|
-
innerHTML: candidate?.innerHTML ?? ""
|
|
219
|
+
innerHTML: snapshotCandidate ?? candidate?.innerHTML ?? ""
|
|
187
220
|
};
|
|
188
221
|
};
|
|
189
222
|
|
|
@@ -304,5 +337,5 @@ export {
|
|
|
304
337
|
Island
|
|
305
338
|
};
|
|
306
339
|
|
|
307
|
-
//# debugId=
|
|
340
|
+
//# debugId=EB689D387AC2B07564756E2164756E21
|
|
308
341
|
//# sourceMappingURL=browser.js.map
|
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
"import type { IslandFramework } from '../../types/island';\n\nconst toIslandFrameworkSegment = (framework: IslandFramework) =>\n\tframework[0]?.toUpperCase() + framework.slice(1);\n\nexport const getIslandManifestKey = (\n\tframework: IslandFramework,\n\tcomponent: string\n) => `Island${toIslandFrameworkSegment(framework)}${component}`;\n\nexport const getIslandManifestEntries = (\n\tmanifest: Record<string, string>\n) => {\n\tconst islands: Partial<Record<IslandFramework, Record<string, string>>> = {};\n\tconst frameworks: IslandFramework[] = [\n\t\t'react',\n\t\t'svelte',\n\t\t'vue',\n\t\t'angular'\n\t];\n\n\tfor (const framework of frameworks) {\n\t\tconst prefix = `Island${toIslandFrameworkSegment(framework)}`;\n\t\tfor (const [key, value] of Object.entries(manifest)) {\n\t\t\tif (!key.startsWith(prefix)) continue;\n\n\t\t\tconst component = key.slice(prefix.length);\n\t\t\tif (!component) continue;\n\n\t\t\tconst frameworkEntries = islands[framework] ?? {};\n\t\t\tframeworkEntries[component] = value;\n\t\t\tislands[framework] = frameworkEntries;\n\t\t}\n\t}\n\n\treturn islands;\n};\n",
|
|
6
6
|
"import type {\n\tIslandComponentDefinition,\n\tIslandRegistry,\n\tIslandRegistryInput\n} from '../../types/island';\n\nexport const defineIslandRegistry = <T extends IslandRegistryInput>(\n\tregistry: IslandRegistry<T>\n) => registry;\n\nexport const defineIslandComponent = <Component>(\n\tcomponent: Component,\n\toptions: {\n\t\texport?: string;\n\t\tsource: string;\n\t}\n): IslandComponentDefinition<Component> => ({\n\tcomponent,\n\texport: options.export,\n\tsource: options.source\n});\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null;\n\nexport const isIslandComponentDefinition = <Component>(\n\tvalue: Component | IslandComponentDefinition<Component>\n): value is IslandComponentDefinition<Component> =>\n\tisRecord(value) &&\n\t'component' in value &&\n\t'source' in value &&\n\ttypeof value.source === 'string';\n\nexport function getIslandComponent<Component>(component: Component): Component;\nexport function getIslandComponent<Component>(\n\tcomponent: IslandComponentDefinition<Component>\n): Component;\nexport function getIslandComponent<Component>(\n\tcomponent: Component | IslandComponentDefinition<Component>\n) {\n\tif (isIslandComponentDefinition(component)) {\n\t\treturn component.component;\n\t}\n\n\treturn component;\n}\n\nexport const getIslandBuildReference = <Component>(\n\tcomponent: Component | IslandComponentDefinition<Component>\n) => {\n\tif (!isIslandComponentDefinition(component)) return null;\n\n\treturn {\n\t\texport: component.export,\n\t\tsource: component.source\n\t};\n};\n\nexport const serializeIslandProps = (props: unknown) =>\n\tJSON.stringify(props ?? {});\n\nexport const parseIslandProps = (rawProps: string | null) => {\n\tif (!rawProps) return {};\n\n\treturn JSON.parse(rawProps);\n};\n\nexport { getIslandManifestEntries, getIslandManifestKey } from './islandManifest';\n",
|
|
7
7
|
"import type {\n\tRuntimeIslandRenderProps\n} from '../../types/island';\nimport { serializeIslandProps } from './islands';\n\ntype IslandMarkerAttributes = {\n\t'data-component': string;\n\t'data-framework': string;\n\t'data-hydrate': string;\n\t'data-island': 'true';\n\t'data-island-id'?: string;\n\t'data-props': string;\n};\n\nexport const getIslandMarkerAttributes = (\n\tprops: RuntimeIslandRenderProps,\n\tislandId?: string\n): IslandMarkerAttributes => ({\n\t'data-component': props.component,\n\t'data-framework': props.framework,\n\t'data-hydrate': props.hydrate ?? 'load',\n\t'data-island': 'true',\n\t...(islandId ? { 'data-island-id': islandId } : {}),\n\t'data-props': serializeIslandProps(props.props)\n});\n\nconst escapeHtmlAttribute = (value: string) =>\n\tvalue\n\t\t.replaceAll('&', '&')\n\t\t.replaceAll('\"', '"')\n\t\t.replaceAll('<', '<')\n\t\t.replaceAll('>', '>');\n\nexport const serializeIslandAttributes = (\n\tattributes: IslandMarkerAttributes\n) =>\n\tObject.entries(attributes)\n\t\t.map(([key, value]) => `${key}=\"${escapeHtmlAttribute(value)}\"`)\n\t\t.join(' ');\n\n",
|
|
8
|
-
"import type { RuntimeIslandRenderProps } from '../../types/island';\nimport { getIslandMarkerAttributes } from '../core/islandMarkupAttributes';\n\ntype IslandMarkerElement = HTMLElement & {\n\tdataset: DOMStringMap & {\n\t\tcomponent?: string;\n\t\tframework?: string;\n\t\thydrate?: string;\n\t\tisland?: string;\n\t\tprops?: string;\n\t};\n};\n\ndeclare global {\n\tinterface Window {\n\t\t__ABS_CLAIMED_ISLAND_MARKUP__?: Map<string, number>;\n\t}\n}\n\nconst getClaimMap = () => {\n\tif (typeof window === 'undefined') {\n\t\treturn null;\n\t}\n\n\twindow.__ABS_CLAIMED_ISLAND_MARKUP__ ??= new Map<string, number>();\n\n\treturn window.__ABS_CLAIMED_ISLAND_MARKUP__;\n};\n\nconst getIslandSignature = (props: RuntimeIslandRenderProps) => {\n\tconst attributes = getIslandMarkerAttributes(props);\n\n\treturn [\n\t\tattributes['data-component'],\n\t\tattributes['data-framework'],\n\t\tattributes['data-hydrate'],\n\t\tattributes['data-props']\n\t].join('::');\n};\n\nconst isMatchingIslandElement = (\n\telement: Element,\n\tprops: RuntimeIslandRenderProps\n): element is IslandMarkerElement => {\n\tif (!(element instanceof HTMLElement)) {\n\t\treturn false;\n\t}\n\n\tconst attributes = getIslandMarkerAttributes(props);\n\n\treturn (\n\t\telement.dataset.island === 'true' &&\n\t\telement.dataset.component === attributes['data-component'] &&\n\t\telement.dataset.framework === attributes['data-framework'] &&\n\t\t(element.dataset.hydrate ?? 'load') === attributes['data-hydrate'] &&\n\t\t(element.dataset.props ?? '{}') === attributes['data-props']\n\t);\n};\n\nexport const preserveIslandMarkup = (props: RuntimeIslandRenderProps) => {\n\tif (typeof document === 'undefined') {\n\t\treturn {\n\t\t\tattributes: getIslandMarkerAttributes(props),\n\t\t\tinnerHTML: ''\n\t\t};\n\t}\n\n\tconst claimMap = getClaimMap();\n\tconst signature = getIslandSignature(props);\n\tconst claimedCount = claimMap?.get(signature) ?? 0;\n\tconst candidates = Array.from(\n\t\tdocument.querySelectorAll('[data-island=\"true\"]')\n\t).filter((element) => isMatchingIslandElement(element, props));\n\tconst candidate = candidates[claimedCount];\n\tif (claimMap) {\n\t\tclaimMap.set(signature, claimedCount + 1);\n\t}\n\n\treturn {\n\t\tattributes: getIslandMarkerAttributes(props),\n\t\tinnerHTML: candidate?.innerHTML ?? ''\n\t};\n};\n",
|
|
8
|
+
"import type { RuntimeIslandRenderProps } from '../../types/island';\nimport { getIslandMarkerAttributes } from '../core/islandMarkupAttributes';\n\ntype IslandMarkerElement = HTMLElement & {\n\tdataset: DOMStringMap & {\n\t\tcomponent?: string;\n\t\tframework?: string;\n\t\thydrate?: string;\n\t\tisland?: string;\n\t\tprops?: string;\n\t};\n};\n\ndeclare global {\n\tinterface Window {\n\t\t__ABS_CLAIMED_ISLAND_MARKUP__?: Map<string, number>;\n\t\t__ABS_SERVER_ISLAND_HTML__?: Map<string, string[]>;\n\t}\n}\n\nconst getClaimMap = () => {\n\tif (typeof window === 'undefined') {\n\t\treturn null;\n\t}\n\n\twindow.__ABS_CLAIMED_ISLAND_MARKUP__ ??= new Map<string, number>();\n\n\treturn window.__ABS_CLAIMED_ISLAND_MARKUP__;\n};\n\nconst getSnapshotMap = () => {\n\tif (typeof window === 'undefined') {\n\t\treturn null;\n\t}\n\n\twindow.__ABS_SERVER_ISLAND_HTML__ ??= new Map<string, string[]>();\n\n\treturn window.__ABS_SERVER_ISLAND_HTML__;\n};\n\nconst getIslandSignature = (props: RuntimeIslandRenderProps) => {\n\tconst attributes = getIslandMarkerAttributes(props);\n\n\treturn [\n\t\tattributes['data-component'],\n\t\tattributes['data-framework'],\n\t\tattributes['data-hydrate'],\n\t\tattributes['data-props']\n\t].join('::');\n};\n\nconst isMatchingIslandElement = (\n\telement: Element,\n\tprops: RuntimeIslandRenderProps\n): element is IslandMarkerElement => {\n\tif (!(element instanceof HTMLElement)) {\n\t\treturn false;\n\t}\n\n\tconst attributes = getIslandMarkerAttributes(props);\n\n\treturn (\n\t\telement.dataset.island === 'true' &&\n\t\telement.dataset.component === attributes['data-component'] &&\n\t\telement.dataset.framework === attributes['data-framework'] &&\n\t\t(element.dataset.hydrate ?? 'load') === attributes['data-hydrate'] &&\n\t\t(element.dataset.props ?? '{}') === attributes['data-props']\n\t);\n};\n\nexport const initializeIslandMarkupSnapshot = () => {\n\tif (typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\tconst snapshotMap = getSnapshotMap();\n\tif (!snapshotMap || snapshotMap.size > 0) {\n\t\treturn;\n\t}\n\n\tconst elements = Array.from(document.querySelectorAll('[data-island=\"true\"]'));\n\tfor (const element of elements) {\n\t\tif (!(element instanceof HTMLElement)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst signature = [\n\t\t\telement.dataset.component,\n\t\t\telement.dataset.framework,\n\t\t\telement.dataset.hydrate ?? 'load',\n\t\t\telement.dataset.props ?? '{}'\n\t\t].join('::');\n\t\tconst existing = snapshotMap.get(signature) ?? [];\n\t\texisting.push(element.innerHTML);\n\t\tsnapshotMap.set(signature, existing);\n\t}\n};\n\nexport const preserveIslandMarkup = (props: RuntimeIslandRenderProps) => {\n\tif (typeof document === 'undefined') {\n\t\treturn {\n\t\t\tattributes: getIslandMarkerAttributes(props),\n\t\t\tinnerHTML: ''\n\t\t};\n\t}\n\n\tconst claimMap = getClaimMap();\n\tconst snapshotMap = getSnapshotMap();\n\tconst signature = getIslandSignature(props);\n\tconst claimedCount = claimMap?.get(signature) ?? 0;\n\tconst snapshotCandidate = snapshotMap?.get(signature)?.[claimedCount];\n\tconst candidates = Array.from(\n\t\tdocument.querySelectorAll('[data-island=\"true\"]')\n\t).filter((element) => isMatchingIslandElement(element, props));\n\tconst candidate = candidates[claimedCount];\n\tif (claimMap) {\n\t\tclaimMap.set(signature, claimedCount + 1);\n\t}\n\n\treturn {\n\t\tattributes: getIslandMarkerAttributes(props),\n\t\tinnerHTML: snapshotCandidate ?? candidate?.innerHTML ?? ''\n\t};\n};\n",
|
|
9
9
|
"import type { JSX } from 'react';\nimport type { RuntimeIslandRenderProps } from '../../types/island';\nimport { preserveIslandMarkup } from '../client/preserveIslandMarkup';\n\nexport const Island = (props: RuntimeIslandRenderProps): JSX.Element => {\n\tconst { attributes, innerHTML } = preserveIslandMarkup(props);\n\n\treturn (\n\t\t<div\n\t\t\t{...attributes}\n\t\t\tdangerouslySetInnerHTML={{ __html: innerHTML }}\n\t\t\tsuppressHydrationWarning\n\t\t/>\n\t);\n};\n",
|
|
10
10
|
"import type { JSX } from 'react';\nimport type {\n\tIslandRegistry,\n\tIslandRegistryInput,\n\tTypedIslandRenderProps\n} from '../../types/island';\nimport { preserveIslandMarkup } from '../client/preserveIslandMarkup';\n\nexport const createTypedIsland = <T extends IslandRegistryInput>(\n\t_registry: IslandRegistry<T>\n) => {\n\tconst Island = (props: TypedIslandRenderProps<T>): JSX.Element => {\n\t\tconst { attributes, innerHTML } = preserveIslandMarkup(props);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\t{...attributes}\n\t\t\t\tdangerouslySetInnerHTML={{ __html: innerHTML }}\n\t\t\t\tsuppressHydrationWarning\n\t\t\t/>\n\t\t);\n\t};\n\n\treturn Island;\n};\n",
|
|
11
11
|
"import {\n\tuseSyncExternalStore,\n\ttype Dispatch,\n\ttype SetStateAction\n} from 'react';\nimport {\n\treadIslandState,\n\tsubscribeIslandState,\n\tupdateIslandState\n} from '../../client/islandState';\n\nexport const useIslandState = <T>(\n\tkey: string,\n\tfallback: T\n): [T, Dispatch<SetStateAction<T>>] => {\n\tconst value = useSyncExternalStore(\n\t\t(listener) => subscribeIslandState(key, listener),\n\t\t() => readIslandState(key, fallback),\n\t\t() => fallback\n\t);\n\n\tconst setValue: Dispatch<SetStateAction<T>> = (nextValue) => {\n\t\tupdateIslandState(key, fallback, nextValue);\n\t};\n\n\treturn [value, setValue];\n};\n",
|
|
12
12
|
"type IslandStateKey = string;\n\ntype IslandStateValue = unknown;\n\ntype IslandStateListener = () => void;\n\ntype IslandStateUpdater<T> = T | ((value: T) => T);\n\ntype IslandStateSnapshot = Record<IslandStateKey, IslandStateValue>;\n\nconst isIslandStateUpdater = <T>(\n\tvalue: IslandStateUpdater<T>\n): value is (value: T) => T => typeof value === 'function';\n\ndeclare global {\n\tvar __ABS_ISLAND_STATE_STORE__: IslandStateStore | undefined;\n\tvar __ABS_ISLAND_STATE__: IslandStateSnapshot | undefined;\n}\n\nclass IslandStateStore {\n\tprivate listeners = new Map<IslandStateKey, Set<IslandStateListener>>();\n\n\tprivate state: Record<IslandStateKey, any> = {};\n\n\tget<T>(key: IslandStateKey, fallback: T): T {\n\t\tif (key in this.state) {\n\t\t\treturn this.state[key];\n\t\t}\n\n\t\treturn fallback;\n\t}\n\n\tinitialize(nextState: IslandStateSnapshot) {\n\t\tfor (const [key, value] of Object.entries(nextState)) {\n\t\t\tif (key in this.state) continue;\n\t\t\tthis.state[key] = value;\n\t\t}\n\t}\n\n\tset<T>(key: IslandStateKey, value: T) {\n\t\tthis.state[key] = value;\n\t\tglobalThis.__ABS_ISLAND_STATE__ = {\n\t\t\t...(globalThis.__ABS_ISLAND_STATE__ ?? {}),\n\t\t\t[key]: value\n\t\t};\n\t\tthis.emit(key);\n\t\treturn value;\n\t}\n\n\tsubscribe(key: IslandStateKey, listener: IslandStateListener) {\n\t\tconst listeners = this.listeners.get(key) ?? new Set<IslandStateListener>();\n\t\tlisteners.add(listener);\n\t\tthis.listeners.set(key, listeners);\n\n\t\treturn () => {\n\t\t\tconst current = this.listeners.get(key);\n\t\t\tif (!current) return;\n\n\t\t\tcurrent.delete(listener);\n\t\t\tif (current.size === 0) {\n\t\t\t\tthis.listeners.delete(key);\n\t\t\t}\n\t\t};\n\t}\n\n\tupdate<T>(key: IslandStateKey, fallback: T, updater: IslandStateUpdater<T>) {\n\t\tconst previous = this.get(key, fallback);\n\t\tconst nextValue =\n\t\t\tisIslandStateUpdater(updater)\n\t\t\t\t? updater(previous)\n\t\t\t\t: updater;\n\n\t\treturn this.set(key, nextValue);\n\t}\n\n\tprivate emit(key: IslandStateKey) {\n\t\tconst listeners = this.listeners.get(key);\n\t\tif (!listeners) return;\n\n\t\tfor (const listener of listeners) {\n\t\t\tlistener();\n\t\t}\n\t}\n}\n\nconst getGlobalIslandStateStore = () => {\n\tglobalThis.__ABS_ISLAND_STATE_STORE__ ??= new IslandStateStore();\n\n\tif (globalThis.__ABS_ISLAND_STATE__) {\n\t\tglobalThis.__ABS_ISLAND_STATE_STORE__.initialize(\n\t\t\tglobalThis.__ABS_ISLAND_STATE__\n\t\t);\n\t}\n\n\treturn globalThis.__ABS_ISLAND_STATE_STORE__;\n};\n\nexport const initializeIslandState = (state: IslandStateSnapshot) => {\n\tglobalThis.__ABS_ISLAND_STATE__ = {\n\t\t...(globalThis.__ABS_ISLAND_STATE__ ?? {}),\n\t\t...state\n\t};\n\n\tgetGlobalIslandStateStore().initialize(state);\n};\n\nexport const readIslandState = <T>(key: IslandStateKey, fallback: T) =>\n\tgetGlobalIslandStateStore().get(key, fallback);\n\nexport const setIslandState = <T>(key: IslandStateKey, value: T) =>\n\tgetGlobalIslandStateStore().set(key, value);\n\nexport const subscribeIslandState = (\n\tkey: IslandStateKey,\n\tlistener: IslandStateListener\n) => getGlobalIslandStateStore().subscribe(key, listener);\n\nexport const updateIslandState = <T>(\n\tkey: IslandStateKey,\n\tfallback: T,\n\tupdater: IslandStateUpdater<T>\n) => getGlobalIslandStateStore().update(key, fallback, updater);\n"
|
|
13
13
|
],
|
|
14
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEM,2BAA2B,CAAC,cACjC,UAAU,IAAI,YAAY,IAAI,UAAU,MAAM,CAAC,GAEnC,uBAAuB,CACnC,WACA,cACI,SAAS,yBAAyB,SAAS,IAAI,aAEvC,2BAA2B,CACvC,aACI;AAAA,EACJ,MAAM,UAAoE,CAAC;AAAA,EAC3E,MAAM,aAAgC;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EAEA,WAAW,aAAa,YAAY;AAAA,IACnC,MAAM,SAAS,SAAS,yBAAyB,SAAS;AAAA,IAC1D,YAAY,KAAK,UAAU,OAAO,QAAQ,QAAQ,GAAG;AAAA,MACpD,IAAI,CAAC,IAAI,WAAW,MAAM;AAAA,QAAG;AAAA,MAE7B,MAAM,YAAY,IAAI,MAAM,OAAO,MAAM;AAAA,MACzC,IAAI,CAAC;AAAA,QAAW;AAAA,MAEhB,MAAM,mBAAmB,QAAQ,cAAc,CAAC;AAAA,MAChD,iBAAiB,aAAa;AAAA,MAC9B,QAAQ,aAAa;AAAA,IACtB;AAAA,EACD;AAAA,EAEA,OAAO;AAAA;;;ACED,SAAS,kBAA6B,CAC5C,WACC;AAAA,EACD,IAAI,4BAA4B,SAAS,GAAG;AAAA,IAC3C,OAAO,UAAU;AAAA,EAClB;AAAA,EAEA,OAAO;AAAA;AAAA,IAtCK,uBAAuB,CACnC,aACI,UAEQ,wBAAwB,CACpC,WACA,aAI2C;AAAA,EAC3C;AAAA,EACA,QAAQ,QAAQ;AAAA,EAChB,QAAQ,QAAQ;AACjB,IAEM,WAAW,CAAC,UACjB,OAAO,UAAU,YAAY,UAAU,MAE3B,8BAA8B,CAC1C,UAEA,SAAS,KAAK,MACd,eAAe,WACf,YAAY,UACZ,OAAO,MAAM,WAAW,UAgBZ,0BAA0B,CACtC,cACI;AAAA,EACJ,IAAI,CAAC,4BAA4B,SAAS;AAAA,IAAG,OAAO;AAAA,EAEpD,OAAO;AAAA,IACN,QAAQ,UAAU;AAAA,IAClB,QAAQ,UAAU;AAAA,EACnB;AAAA,GAGY,uBAAuB,CAAC,UACpC,KAAK,UAAU,SAAS,CAAC,CAAC,GAEd,mBAAmB,CAAC,aAA4B;AAAA,EAC5D,IAAI,CAAC;AAAA,IAAU,OAAO,CAAC;AAAA,EAEvB,OAAO,KAAK,MAAM,QAAQ;AAAA;AAAA;;;IClDd,4BAA4B,CACxC,OACA,cAC6B;AAAA,EAC7B,kBAAkB,MAAM;AAAA,EACxB,kBAAkB,MAAM;AAAA,EACxB,gBAAgB,MAAM,WAAW;AAAA,EACjC,eAAe;AAAA,KACX,WAAW,EAAE,kBAAkB,SAAS,IAAI,CAAC;AAAA,EACjD,cAAc,qBAAqB,MAAM,KAAK;AAC/C,IAEM,sBAAsB,CAAC,UAC5B,MACE,WAAW,KAAK,OAAO,EACvB,WAAW,KAAK,QAAQ,EACxB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,MAAM,GAEZ,4BAA4B,CACxC,eAEA,OAAO,QAAQ,UAAU,EACvB,IAAI,EAAE,KAAK,WAAW,GAAG,QAAQ,oBAAoB,KAAK,IAAI,EAC9D,KAAK,GAAG;AAAA;AAAA,EAnCX;AAAA;;;ACFA;
|
|
15
|
-
"debugId": "
|
|
14
|
+
"mappings": "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",
|
|
15
|
+
"debugId": "EB689D387AC2B07564756E2164756E21",
|
|
16
16
|
"names": []
|
|
17
17
|
}
|
|
@@ -2,8 +2,10 @@ import type { RuntimeIslandRenderProps } from '../../types/island';
|
|
|
2
2
|
declare global {
|
|
3
3
|
interface Window {
|
|
4
4
|
__ABS_CLAIMED_ISLAND_MARKUP__?: Map<string, number>;
|
|
5
|
+
__ABS_SERVER_ISLAND_HTML__?: Map<string, string[]>;
|
|
5
6
|
}
|
|
6
7
|
}
|
|
8
|
+
export declare const initializeIslandMarkupSnapshot: () => void;
|
|
7
9
|
export declare const preserveIslandMarkup: (props: RuntimeIslandRenderProps) => {
|
|
8
10
|
attributes: {
|
|
9
11
|
'data-component': string;
|
package/dist/vue/browser.js
CHANGED
|
@@ -153,6 +153,13 @@ var getClaimMap = () => {
|
|
|
153
153
|
window.__ABS_CLAIMED_ISLAND_MARKUP__ ??= new Map;
|
|
154
154
|
return window.__ABS_CLAIMED_ISLAND_MARKUP__;
|
|
155
155
|
};
|
|
156
|
+
var getSnapshotMap = () => {
|
|
157
|
+
if (typeof window === "undefined") {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
window.__ABS_SERVER_ISLAND_HTML__ ??= new Map;
|
|
161
|
+
return window.__ABS_SERVER_ISLAND_HTML__;
|
|
162
|
+
};
|
|
156
163
|
var getIslandSignature = (props) => {
|
|
157
164
|
const attributes = getIslandMarkerAttributes(props);
|
|
158
165
|
return [
|
|
@@ -169,6 +176,30 @@ var isMatchingIslandElement = (element, props) => {
|
|
|
169
176
|
const attributes = getIslandMarkerAttributes(props);
|
|
170
177
|
return element.dataset.island === "true" && element.dataset.component === attributes["data-component"] && element.dataset.framework === attributes["data-framework"] && (element.dataset.hydrate ?? "load") === attributes["data-hydrate"] && (element.dataset.props ?? "{}") === attributes["data-props"];
|
|
171
178
|
};
|
|
179
|
+
var initializeIslandMarkupSnapshot = () => {
|
|
180
|
+
if (typeof document === "undefined") {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const snapshotMap = getSnapshotMap();
|
|
184
|
+
if (!snapshotMap || snapshotMap.size > 0) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const elements = Array.from(document.querySelectorAll('[data-island="true"]'));
|
|
188
|
+
for (const element of elements) {
|
|
189
|
+
if (!(element instanceof HTMLElement)) {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
const signature = [
|
|
193
|
+
element.dataset.component,
|
|
194
|
+
element.dataset.framework,
|
|
195
|
+
element.dataset.hydrate ?? "load",
|
|
196
|
+
element.dataset.props ?? "{}"
|
|
197
|
+
].join("::");
|
|
198
|
+
const existing = snapshotMap.get(signature) ?? [];
|
|
199
|
+
existing.push(element.innerHTML);
|
|
200
|
+
snapshotMap.set(signature, existing);
|
|
201
|
+
}
|
|
202
|
+
};
|
|
172
203
|
var preserveIslandMarkup = (props) => {
|
|
173
204
|
if (typeof document === "undefined") {
|
|
174
205
|
return {
|
|
@@ -177,8 +208,10 @@ var preserveIslandMarkup = (props) => {
|
|
|
177
208
|
};
|
|
178
209
|
}
|
|
179
210
|
const claimMap = getClaimMap();
|
|
211
|
+
const snapshotMap = getSnapshotMap();
|
|
180
212
|
const signature = getIslandSignature(props);
|
|
181
213
|
const claimedCount = claimMap?.get(signature) ?? 0;
|
|
214
|
+
const snapshotCandidate = snapshotMap?.get(signature)?.[claimedCount];
|
|
182
215
|
const candidates = Array.from(document.querySelectorAll('[data-island="true"]')).filter((element) => isMatchingIslandElement(element, props));
|
|
183
216
|
const candidate = candidates[claimedCount];
|
|
184
217
|
if (claimMap) {
|
|
@@ -186,7 +219,7 @@ var preserveIslandMarkup = (props) => {
|
|
|
186
219
|
}
|
|
187
220
|
return {
|
|
188
221
|
attributes: getIslandMarkerAttributes(props),
|
|
189
|
-
innerHTML: candidate?.innerHTML ?? ""
|
|
222
|
+
innerHTML: snapshotCandidate ?? candidate?.innerHTML ?? ""
|
|
190
223
|
};
|
|
191
224
|
};
|
|
192
225
|
|
|
@@ -367,5 +400,5 @@ export {
|
|
|
367
400
|
Island
|
|
368
401
|
};
|
|
369
402
|
|
|
370
|
-
//# debugId=
|
|
403
|
+
//# debugId=74155D391D4BCFEB64756E2164756E21
|
|
371
404
|
//# sourceMappingURL=browser.js.map
|
package/dist/vue/browser.js.map
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"import type {\n\tIslandComponentDefinition,\n\tIslandRegistry,\n\tIslandRegistryInput\n} from '../../types/island';\n\nexport const defineIslandRegistry = <T extends IslandRegistryInput>(\n\tregistry: IslandRegistry<T>\n) => registry;\n\nexport const defineIslandComponent = <Component>(\n\tcomponent: Component,\n\toptions: {\n\t\texport?: string;\n\t\tsource: string;\n\t}\n): IslandComponentDefinition<Component> => ({\n\tcomponent,\n\texport: options.export,\n\tsource: options.source\n});\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null;\n\nexport const isIslandComponentDefinition = <Component>(\n\tvalue: Component | IslandComponentDefinition<Component>\n): value is IslandComponentDefinition<Component> =>\n\tisRecord(value) &&\n\t'component' in value &&\n\t'source' in value &&\n\ttypeof value.source === 'string';\n\nexport function getIslandComponent<Component>(component: Component): Component;\nexport function getIslandComponent<Component>(\n\tcomponent: IslandComponentDefinition<Component>\n): Component;\nexport function getIslandComponent<Component>(\n\tcomponent: Component | IslandComponentDefinition<Component>\n) {\n\tif (isIslandComponentDefinition(component)) {\n\t\treturn component.component;\n\t}\n\n\treturn component;\n}\n\nexport const getIslandBuildReference = <Component>(\n\tcomponent: Component | IslandComponentDefinition<Component>\n) => {\n\tif (!isIslandComponentDefinition(component)) return null;\n\n\treturn {\n\t\texport: component.export,\n\t\tsource: component.source\n\t};\n};\n\nexport const serializeIslandProps = (props: unknown) =>\n\tJSON.stringify(props ?? {});\n\nexport const parseIslandProps = (rawProps: string | null) => {\n\tif (!rawProps) return {};\n\n\treturn JSON.parse(rawProps);\n};\n\nexport { getIslandManifestEntries, getIslandManifestKey } from './islandManifest';\n",
|
|
7
7
|
"import type {\n\tRuntimeIslandRenderProps\n} from '../../types/island';\nimport { serializeIslandProps } from './islands';\n\ntype IslandMarkerAttributes = {\n\t'data-component': string;\n\t'data-framework': string;\n\t'data-hydrate': string;\n\t'data-island': 'true';\n\t'data-island-id'?: string;\n\t'data-props': string;\n};\n\nexport const getIslandMarkerAttributes = (\n\tprops: RuntimeIslandRenderProps,\n\tislandId?: string\n): IslandMarkerAttributes => ({\n\t'data-component': props.component,\n\t'data-framework': props.framework,\n\t'data-hydrate': props.hydrate ?? 'load',\n\t'data-island': 'true',\n\t...(islandId ? { 'data-island-id': islandId } : {}),\n\t'data-props': serializeIslandProps(props.props)\n});\n\nconst escapeHtmlAttribute = (value: string) =>\n\tvalue\n\t\t.replaceAll('&', '&')\n\t\t.replaceAll('\"', '"')\n\t\t.replaceAll('<', '<')\n\t\t.replaceAll('>', '>');\n\nexport const serializeIslandAttributes = (\n\tattributes: IslandMarkerAttributes\n) =>\n\tObject.entries(attributes)\n\t\t.map(([key, value]) => `${key}=\"${escapeHtmlAttribute(value)}\"`)\n\t\t.join(' ');\n\n",
|
|
8
8
|
"import { defineComponent, h } from 'vue';\nimport type { RuntimeIslandRenderProps } from '../../types/island';\nimport { preserveIslandMarkup } from '../client/preserveIslandMarkup';\n\nexport const Island = defineComponent({\n\tname: 'AbsoluteIsland',\n\tprops: {\n\t\tcomponent: {\n\t\t\trequired: true,\n\t\t\ttype: String\n\t\t},\n\t\tframework: {\n\t\t\trequired: true,\n\t\t\ttype: String\n\t\t},\n\t\thydrate: {\n\t\t\trequired: false,\n\t\t\ttype: String\n\t\t},\n\t\tprops: {\n\t\t\trequired: true,\n\t\t\ttype: Object\n\t\t}\n\t},\n\tsetup(props: RuntimeIslandRenderProps) {\n\t\treturn () => {\n\t\t\tconst { attributes, innerHTML } = preserveIslandMarkup(props);\n\n\t\t\treturn h('div', {\n\t\t\t\t...attributes,\n\t\t\t\t'data-allow-mismatch': '',\n\t\t\t\tinnerHTML\n\t\t\t});\n\t\t};\n\t}\n});\n",
|
|
9
|
-
"import type { RuntimeIslandRenderProps } from '../../types/island';\nimport { getIslandMarkerAttributes } from '../core/islandMarkupAttributes';\n\ntype IslandMarkerElement = HTMLElement & {\n\tdataset: DOMStringMap & {\n\t\tcomponent?: string;\n\t\tframework?: string;\n\t\thydrate?: string;\n\t\tisland?: string;\n\t\tprops?: string;\n\t};\n};\n\ndeclare global {\n\tinterface Window {\n\t\t__ABS_CLAIMED_ISLAND_MARKUP__?: Map<string, number>;\n\t}\n}\n\nconst getClaimMap = () => {\n\tif (typeof window === 'undefined') {\n\t\treturn null;\n\t}\n\n\twindow.__ABS_CLAIMED_ISLAND_MARKUP__ ??= new Map<string, number>();\n\n\treturn window.__ABS_CLAIMED_ISLAND_MARKUP__;\n};\n\nconst getIslandSignature = (props: RuntimeIslandRenderProps) => {\n\tconst attributes = getIslandMarkerAttributes(props);\n\n\treturn [\n\t\tattributes['data-component'],\n\t\tattributes['data-framework'],\n\t\tattributes['data-hydrate'],\n\t\tattributes['data-props']\n\t].join('::');\n};\n\nconst isMatchingIslandElement = (\n\telement: Element,\n\tprops: RuntimeIslandRenderProps\n): element is IslandMarkerElement => {\n\tif (!(element instanceof HTMLElement)) {\n\t\treturn false;\n\t}\n\n\tconst attributes = getIslandMarkerAttributes(props);\n\n\treturn (\n\t\telement.dataset.island === 'true' &&\n\t\telement.dataset.component === attributes['data-component'] &&\n\t\telement.dataset.framework === attributes['data-framework'] &&\n\t\t(element.dataset.hydrate ?? 'load') === attributes['data-hydrate'] &&\n\t\t(element.dataset.props ?? '{}') === attributes['data-props']\n\t);\n};\n\nexport const preserveIslandMarkup = (props: RuntimeIslandRenderProps) => {\n\tif (typeof document === 'undefined') {\n\t\treturn {\n\t\t\tattributes: getIslandMarkerAttributes(props),\n\t\t\tinnerHTML: ''\n\t\t};\n\t}\n\n\tconst claimMap = getClaimMap();\n\tconst signature = getIslandSignature(props);\n\tconst claimedCount = claimMap?.get(signature) ?? 0;\n\tconst candidates = Array.from(\n\t\tdocument.querySelectorAll('[data-island=\"true\"]')\n\t).filter((element) => isMatchingIslandElement(element, props));\n\tconst candidate = candidates[claimedCount];\n\tif (claimMap) {\n\t\tclaimMap.set(signature, claimedCount + 1);\n\t}\n\n\treturn {\n\t\tattributes: getIslandMarkerAttributes(props),\n\t\tinnerHTML: candidate?.innerHTML ?? ''\n\t};\n};\n",
|
|
9
|
+
"import type { RuntimeIslandRenderProps } from '../../types/island';\nimport { getIslandMarkerAttributes } from '../core/islandMarkupAttributes';\n\ntype IslandMarkerElement = HTMLElement & {\n\tdataset: DOMStringMap & {\n\t\tcomponent?: string;\n\t\tframework?: string;\n\t\thydrate?: string;\n\t\tisland?: string;\n\t\tprops?: string;\n\t};\n};\n\ndeclare global {\n\tinterface Window {\n\t\t__ABS_CLAIMED_ISLAND_MARKUP__?: Map<string, number>;\n\t\t__ABS_SERVER_ISLAND_HTML__?: Map<string, string[]>;\n\t}\n}\n\nconst getClaimMap = () => {\n\tif (typeof window === 'undefined') {\n\t\treturn null;\n\t}\n\n\twindow.__ABS_CLAIMED_ISLAND_MARKUP__ ??= new Map<string, number>();\n\n\treturn window.__ABS_CLAIMED_ISLAND_MARKUP__;\n};\n\nconst getSnapshotMap = () => {\n\tif (typeof window === 'undefined') {\n\t\treturn null;\n\t}\n\n\twindow.__ABS_SERVER_ISLAND_HTML__ ??= new Map<string, string[]>();\n\n\treturn window.__ABS_SERVER_ISLAND_HTML__;\n};\n\nconst getIslandSignature = (props: RuntimeIslandRenderProps) => {\n\tconst attributes = getIslandMarkerAttributes(props);\n\n\treturn [\n\t\tattributes['data-component'],\n\t\tattributes['data-framework'],\n\t\tattributes['data-hydrate'],\n\t\tattributes['data-props']\n\t].join('::');\n};\n\nconst isMatchingIslandElement = (\n\telement: Element,\n\tprops: RuntimeIslandRenderProps\n): element is IslandMarkerElement => {\n\tif (!(element instanceof HTMLElement)) {\n\t\treturn false;\n\t}\n\n\tconst attributes = getIslandMarkerAttributes(props);\n\n\treturn (\n\t\telement.dataset.island === 'true' &&\n\t\telement.dataset.component === attributes['data-component'] &&\n\t\telement.dataset.framework === attributes['data-framework'] &&\n\t\t(element.dataset.hydrate ?? 'load') === attributes['data-hydrate'] &&\n\t\t(element.dataset.props ?? '{}') === attributes['data-props']\n\t);\n};\n\nexport const initializeIslandMarkupSnapshot = () => {\n\tif (typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\tconst snapshotMap = getSnapshotMap();\n\tif (!snapshotMap || snapshotMap.size > 0) {\n\t\treturn;\n\t}\n\n\tconst elements = Array.from(document.querySelectorAll('[data-island=\"true\"]'));\n\tfor (const element of elements) {\n\t\tif (!(element instanceof HTMLElement)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst signature = [\n\t\t\telement.dataset.component,\n\t\t\telement.dataset.framework,\n\t\t\telement.dataset.hydrate ?? 'load',\n\t\t\telement.dataset.props ?? '{}'\n\t\t].join('::');\n\t\tconst existing = snapshotMap.get(signature) ?? [];\n\t\texisting.push(element.innerHTML);\n\t\tsnapshotMap.set(signature, existing);\n\t}\n};\n\nexport const preserveIslandMarkup = (props: RuntimeIslandRenderProps) => {\n\tif (typeof document === 'undefined') {\n\t\treturn {\n\t\t\tattributes: getIslandMarkerAttributes(props),\n\t\t\tinnerHTML: ''\n\t\t};\n\t}\n\n\tconst claimMap = getClaimMap();\n\tconst snapshotMap = getSnapshotMap();\n\tconst signature = getIslandSignature(props);\n\tconst claimedCount = claimMap?.get(signature) ?? 0;\n\tconst snapshotCandidate = snapshotMap?.get(signature)?.[claimedCount];\n\tconst candidates = Array.from(\n\t\tdocument.querySelectorAll('[data-island=\"true\"]')\n\t).filter((element) => isMatchingIslandElement(element, props));\n\tconst candidate = candidates[claimedCount];\n\tif (claimMap) {\n\t\tclaimMap.set(signature, claimedCount + 1);\n\t}\n\n\treturn {\n\t\tattributes: getIslandMarkerAttributes(props),\n\t\tinnerHTML: snapshotCandidate ?? candidate?.innerHTML ?? ''\n\t};\n};\n",
|
|
10
10
|
"import { defineComponent, h } from 'vue';\nimport type {\n\tIslandRegistry,\n\tIslandRegistryInput,\n\tRuntimeIslandRenderProps,\n\tTypedIslandRenderProps\n} from '../../types/island';\nimport { preserveIslandMarkup } from '../client/preserveIslandMarkup';\n\ntype VueIslandComponent<T extends IslandRegistryInput> = new () => {\n\t$props: TypedIslandRenderProps<T>;\n};\n\nconst defineRuntimeIslandComponent = (\n\tsetup: (props: RuntimeIslandRenderProps) => () => ReturnType<typeof h>\n): any =>\n\tdefineComponent({\n\t\tname: 'AbsoluteIsland',\n\t\tprops: {\n\t\t\tcomponent: {\n\t\t\t\trequired: true,\n\t\t\t\ttype: String\n\t\t\t},\n\t\t\tframework: {\n\t\t\t\trequired: true,\n\t\t\t\ttype: String\n\t\t\t},\n\t\t\thydrate: {\n\t\t\t\trequired: false,\n\t\t\t\ttype: String\n\t\t\t},\n\t\t\tprops: {\n\t\t\t\trequired: true,\n\t\t\t\ttype: Object\n\t\t\t}\n\t\t},\n\t\tsetup\n\t});\n\nexport const createTypedIsland = <T extends IslandRegistryInput>(\n\t_registry: IslandRegistry<T>\n): VueIslandComponent<T> =>\n\tdefineRuntimeIslandComponent((props) => {\n\t\tconst { attributes, innerHTML } = preserveIslandMarkup(props);\n\n\t\treturn () =>\n\t\t\th('div', {\n\t\t\t\t...attributes,\n\t\t\t\t'data-allow-mismatch': '',\n\t\t\t\tinnerHTML\n\t\t\t});\n\t});\n",
|
|
11
11
|
"import {\n\tcustomRef,\n\tonBeforeUnmount,\n\ttype Ref\n} from 'vue';\nimport {\n\treadIslandState,\n\tsubscribeIslandState,\n\tupdateIslandState\n} from '../client/islandState';\n\nexport const useIslandState = <T>(key: string, fallback: T): Ref<T> => {\n\tlet current = readIslandState(key, fallback);\n\tlet unsubscribe = () => {};\n\n\tconst state = customRef<T>((track, trigger) => {\n\t\tunsubscribe = subscribeIslandState(key, () => {\n\t\t\tcurrent = readIslandState(key, fallback);\n\t\t\ttrigger();\n\t\t});\n\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\t\t\t\treturn current;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tcurrent = value;\n\t\t\t\tupdateIslandState(key, fallback, value);\n\t\t\t\ttrigger();\n\t\t\t}\n\t\t};\n\t});\n\n\tonBeforeUnmount(() => {\n\t\tunsubscribe();\n\t});\n\n\treturn state;\n};\n",
|
|
12
12
|
"type IslandStateKey = string;\n\ntype IslandStateValue = unknown;\n\ntype IslandStateListener = () => void;\n\ntype IslandStateUpdater<T> = T | ((value: T) => T);\n\ntype IslandStateSnapshot = Record<IslandStateKey, IslandStateValue>;\n\nconst isIslandStateUpdater = <T>(\n\tvalue: IslandStateUpdater<T>\n): value is (value: T) => T => typeof value === 'function';\n\ndeclare global {\n\tvar __ABS_ISLAND_STATE_STORE__: IslandStateStore | undefined;\n\tvar __ABS_ISLAND_STATE__: IslandStateSnapshot | undefined;\n}\n\nclass IslandStateStore {\n\tprivate listeners = new Map<IslandStateKey, Set<IslandStateListener>>();\n\n\tprivate state: Record<IslandStateKey, any> = {};\n\n\tget<T>(key: IslandStateKey, fallback: T): T {\n\t\tif (key in this.state) {\n\t\t\treturn this.state[key];\n\t\t}\n\n\t\treturn fallback;\n\t}\n\n\tinitialize(nextState: IslandStateSnapshot) {\n\t\tfor (const [key, value] of Object.entries(nextState)) {\n\t\t\tif (key in this.state) continue;\n\t\t\tthis.state[key] = value;\n\t\t}\n\t}\n\n\tset<T>(key: IslandStateKey, value: T) {\n\t\tthis.state[key] = value;\n\t\tglobalThis.__ABS_ISLAND_STATE__ = {\n\t\t\t...(globalThis.__ABS_ISLAND_STATE__ ?? {}),\n\t\t\t[key]: value\n\t\t};\n\t\tthis.emit(key);\n\t\treturn value;\n\t}\n\n\tsubscribe(key: IslandStateKey, listener: IslandStateListener) {\n\t\tconst listeners = this.listeners.get(key) ?? new Set<IslandStateListener>();\n\t\tlisteners.add(listener);\n\t\tthis.listeners.set(key, listeners);\n\n\t\treturn () => {\n\t\t\tconst current = this.listeners.get(key);\n\t\t\tif (!current) return;\n\n\t\t\tcurrent.delete(listener);\n\t\t\tif (current.size === 0) {\n\t\t\t\tthis.listeners.delete(key);\n\t\t\t}\n\t\t};\n\t}\n\n\tupdate<T>(key: IslandStateKey, fallback: T, updater: IslandStateUpdater<T>) {\n\t\tconst previous = this.get(key, fallback);\n\t\tconst nextValue =\n\t\t\tisIslandStateUpdater(updater)\n\t\t\t\t? updater(previous)\n\t\t\t\t: updater;\n\n\t\treturn this.set(key, nextValue);\n\t}\n\n\tprivate emit(key: IslandStateKey) {\n\t\tconst listeners = this.listeners.get(key);\n\t\tif (!listeners) return;\n\n\t\tfor (const listener of listeners) {\n\t\t\tlistener();\n\t\t}\n\t}\n}\n\nconst getGlobalIslandStateStore = () => {\n\tglobalThis.__ABS_ISLAND_STATE_STORE__ ??= new IslandStateStore();\n\n\tif (globalThis.__ABS_ISLAND_STATE__) {\n\t\tglobalThis.__ABS_ISLAND_STATE_STORE__.initialize(\n\t\t\tglobalThis.__ABS_ISLAND_STATE__\n\t\t);\n\t}\n\n\treturn globalThis.__ABS_ISLAND_STATE_STORE__;\n};\n\nexport const initializeIslandState = (state: IslandStateSnapshot) => {\n\tglobalThis.__ABS_ISLAND_STATE__ = {\n\t\t...(globalThis.__ABS_ISLAND_STATE__ ?? {}),\n\t\t...state\n\t};\n\n\tgetGlobalIslandStateStore().initialize(state);\n};\n\nexport const readIslandState = <T>(key: IslandStateKey, fallback: T) =>\n\tgetGlobalIslandStateStore().get(key, fallback);\n\nexport const setIslandState = <T>(key: IslandStateKey, value: T) =>\n\tgetGlobalIslandStateStore().set(key, value);\n\nexport const subscribeIslandState = (\n\tkey: IslandStateKey,\n\tlistener: IslandStateListener\n) => getGlobalIslandStateStore().subscribe(key, listener);\n\nexport const updateIslandState = <T>(\n\tkey: IslandStateKey,\n\tfallback: T,\n\tupdater: IslandStateUpdater<T>\n) => getGlobalIslandStateStore().update(key, fallback, updater);\n"
|
|
13
13
|
],
|
|
14
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEM,2BAA2B,CAAC,cACjC,UAAU,IAAI,YAAY,IAAI,UAAU,MAAM,CAAC,GAEnC,uBAAuB,CACnC,WACA,cACI,SAAS,yBAAyB,SAAS,IAAI,aAEvC,2BAA2B,CACvC,aACI;AAAA,EACJ,MAAM,UAAoE,CAAC;AAAA,EAC3E,MAAM,aAAgC;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EAEA,WAAW,aAAa,YAAY;AAAA,IACnC,MAAM,SAAS,SAAS,yBAAyB,SAAS;AAAA,IAC1D,YAAY,KAAK,UAAU,OAAO,QAAQ,QAAQ,GAAG;AAAA,MACpD,IAAI,CAAC,IAAI,WAAW,MAAM;AAAA,QAAG;AAAA,MAE7B,MAAM,YAAY,IAAI,MAAM,OAAO,MAAM;AAAA,MACzC,IAAI,CAAC;AAAA,QAAW;AAAA,MAEhB,MAAM,mBAAmB,QAAQ,cAAc,CAAC;AAAA,MAChD,iBAAiB,aAAa;AAAA,MAC9B,QAAQ,aAAa;AAAA,IACtB;AAAA,EACD;AAAA,EAEA,OAAO;AAAA;;;ACED,SAAS,kBAA6B,CAC5C,WACC;AAAA,EACD,IAAI,4BAA4B,SAAS,GAAG;AAAA,IAC3C,OAAO,UAAU;AAAA,EAClB;AAAA,EAEA,OAAO;AAAA;AAAA,IAtCK,uBAAuB,CACnC,aACI,UAEQ,wBAAwB,CACpC,WACA,aAI2C;AAAA,EAC3C;AAAA,EACA,QAAQ,QAAQ;AAAA,EAChB,QAAQ,QAAQ;AACjB,IAEM,WAAW,CAAC,UACjB,OAAO,UAAU,YAAY,UAAU,MAE3B,8BAA8B,CAC1C,UAEA,SAAS,KAAK,MACd,eAAe,WACf,YAAY,UACZ,OAAO,MAAM,WAAW,UAgBZ,0BAA0B,CACtC,cACI;AAAA,EACJ,IAAI,CAAC,4BAA4B,SAAS;AAAA,IAAG,OAAO;AAAA,EAEpD,OAAO;AAAA,IACN,QAAQ,UAAU;AAAA,IAClB,QAAQ,UAAU;AAAA,EACnB;AAAA,GAGY,uBAAuB,CAAC,UACpC,KAAK,UAAU,SAAS,CAAC,CAAC,GAEd,mBAAmB,CAAC,aAA4B;AAAA,EAC5D,IAAI,CAAC;AAAA,IAAU,OAAO,CAAC;AAAA,EAEvB,OAAO,KAAK,MAAM,QAAQ;AAAA;AAAA;;;IClDd,4BAA4B,CACxC,OACA,cAC6B;AAAA,EAC7B,kBAAkB,MAAM;AAAA,EACxB,kBAAkB,MAAM;AAAA,EACxB,gBAAgB,MAAM,WAAW;AAAA,EACjC,eAAe;AAAA,KACX,WAAW,EAAE,kBAAkB,SAAS,IAAI,CAAC;AAAA,EACjD,cAAc,qBAAqB,MAAM,KAAK;AAC/C,IAEM,sBAAsB,CAAC,UAC5B,MACE,WAAW,KAAK,OAAO,EACvB,WAAW,KAAK,QAAQ,EACxB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,MAAM,GAEZ,4BAA4B,CACxC,eAEA,OAAO,QAAQ,UAAU,EACvB,IAAI,EAAE,KAAK,WAAW,GAAG,QAAQ,oBAAoB,KAAK,IAAI,EAC9D,KAAK,GAAG;AAAA;AAAA,EAnCX;AAAA;;;ACHA;;;ACCA;
|
|
15
|
-
"debugId": "
|
|
14
|
+
"mappings": "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",
|
|
15
|
+
"debugId": "74155D391D4BCFEB64756E2164756E21",
|
|
16
16
|
"names": []
|
|
17
17
|
}
|
package/dist/vue/index.js
CHANGED
|
@@ -30621,6 +30621,13 @@ var getClaimMap = () => {
|
|
|
30621
30621
|
window.__ABS_CLAIMED_ISLAND_MARKUP__ ??= new Map;
|
|
30622
30622
|
return window.__ABS_CLAIMED_ISLAND_MARKUP__;
|
|
30623
30623
|
};
|
|
30624
|
+
var getSnapshotMap = () => {
|
|
30625
|
+
if (typeof window === "undefined") {
|
|
30626
|
+
return null;
|
|
30627
|
+
}
|
|
30628
|
+
window.__ABS_SERVER_ISLAND_HTML__ ??= new Map;
|
|
30629
|
+
return window.__ABS_SERVER_ISLAND_HTML__;
|
|
30630
|
+
};
|
|
30624
30631
|
var getIslandSignature = (props) => {
|
|
30625
30632
|
const attributes = getIslandMarkerAttributes(props);
|
|
30626
30633
|
return [
|
|
@@ -30637,6 +30644,30 @@ var isMatchingIslandElement = (element, props) => {
|
|
|
30637
30644
|
const attributes = getIslandMarkerAttributes(props);
|
|
30638
30645
|
return element.dataset.island === "true" && element.dataset.component === attributes["data-component"] && element.dataset.framework === attributes["data-framework"] && (element.dataset.hydrate ?? "load") === attributes["data-hydrate"] && (element.dataset.props ?? "{}") === attributes["data-props"];
|
|
30639
30646
|
};
|
|
30647
|
+
var initializeIslandMarkupSnapshot = () => {
|
|
30648
|
+
if (typeof document === "undefined") {
|
|
30649
|
+
return;
|
|
30650
|
+
}
|
|
30651
|
+
const snapshotMap = getSnapshotMap();
|
|
30652
|
+
if (!snapshotMap || snapshotMap.size > 0) {
|
|
30653
|
+
return;
|
|
30654
|
+
}
|
|
30655
|
+
const elements = Array.from(document.querySelectorAll('[data-island="true"]'));
|
|
30656
|
+
for (const element of elements) {
|
|
30657
|
+
if (!(element instanceof HTMLElement)) {
|
|
30658
|
+
continue;
|
|
30659
|
+
}
|
|
30660
|
+
const signature = [
|
|
30661
|
+
element.dataset.component,
|
|
30662
|
+
element.dataset.framework,
|
|
30663
|
+
element.dataset.hydrate ?? "load",
|
|
30664
|
+
element.dataset.props ?? "{}"
|
|
30665
|
+
].join("::");
|
|
30666
|
+
const existing = snapshotMap.get(signature) ?? [];
|
|
30667
|
+
existing.push(element.innerHTML);
|
|
30668
|
+
snapshotMap.set(signature, existing);
|
|
30669
|
+
}
|
|
30670
|
+
};
|
|
30640
30671
|
var preserveIslandMarkup = (props) => {
|
|
30641
30672
|
if (typeof document === "undefined") {
|
|
30642
30673
|
return {
|
|
@@ -30645,8 +30676,10 @@ var preserveIslandMarkup = (props) => {
|
|
|
30645
30676
|
};
|
|
30646
30677
|
}
|
|
30647
30678
|
const claimMap = getClaimMap();
|
|
30679
|
+
const snapshotMap = getSnapshotMap();
|
|
30648
30680
|
const signature = getIslandSignature(props);
|
|
30649
30681
|
const claimedCount = claimMap?.get(signature) ?? 0;
|
|
30682
|
+
const snapshotCandidate = snapshotMap?.get(signature)?.[claimedCount];
|
|
30650
30683
|
const candidates = Array.from(document.querySelectorAll('[data-island="true"]')).filter((element) => isMatchingIslandElement(element, props));
|
|
30651
30684
|
const candidate = candidates[claimedCount];
|
|
30652
30685
|
if (claimMap) {
|
|
@@ -30654,7 +30687,7 @@ var preserveIslandMarkup = (props) => {
|
|
|
30654
30687
|
}
|
|
30655
30688
|
return {
|
|
30656
30689
|
attributes: getIslandMarkerAttributes(props),
|
|
30657
|
-
innerHTML: candidate?.innerHTML ?? ""
|
|
30690
|
+
innerHTML: snapshotCandidate ?? candidate?.innerHTML ?? ""
|
|
30658
30691
|
};
|
|
30659
30692
|
};
|
|
30660
30693
|
|
|
@@ -30856,5 +30889,5 @@ export {
|
|
|
30856
30889
|
Island
|
|
30857
30890
|
};
|
|
30858
30891
|
|
|
30859
|
-
//# debugId=
|
|
30892
|
+
//# debugId=999A298A6D3DC03E64756E2164756E21
|
|
30860
30893
|
//# sourceMappingURL=index.js.map
|