@absolutejs/absolute 0.19.0-beta.295 → 0.19.0-beta.296

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.
@@ -141,23 +141,75 @@ var init_islandMarkupAttributes = __esm(() => {
141
141
  init_islands();
142
142
  });
143
143
 
144
- // src/react/createIsland.browser.tsx
144
+ // src/client/preserveIslandMarkup.ts
145
145
  init_islandMarkupAttributes();
146
+ var getClaimMap = () => {
147
+ if (typeof window === "undefined") {
148
+ return null;
149
+ }
150
+ window.__ABS_CLAIMED_ISLAND_MARKUP__ ??= new Map;
151
+ return window.__ABS_CLAIMED_ISLAND_MARKUP__;
152
+ };
153
+ var getIslandSignature = (props) => {
154
+ const attributes = getIslandMarkerAttributes(props);
155
+ return [
156
+ attributes["data-component"],
157
+ attributes["data-framework"],
158
+ attributes["data-hydrate"],
159
+ attributes["data-props"]
160
+ ].join("::");
161
+ };
162
+ var isMatchingIslandElement = (element, props) => {
163
+ if (!(element instanceof HTMLElement)) {
164
+ return false;
165
+ }
166
+ const attributes = getIslandMarkerAttributes(props);
167
+ 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
+ };
169
+ var preserveIslandMarkup = (props) => {
170
+ if (typeof document === "undefined") {
171
+ return {
172
+ attributes: getIslandMarkerAttributes(props),
173
+ innerHTML: ""
174
+ };
175
+ }
176
+ const claimMap = getClaimMap();
177
+ const signature = getIslandSignature(props);
178
+ const claimedCount = claimMap?.get(signature) ?? 0;
179
+ const candidates = Array.from(document.querySelectorAll('[data-island="true"]')).filter((element) => isMatchingIslandElement(element, props));
180
+ const candidate = candidates[claimedCount];
181
+ if (claimMap) {
182
+ claimMap.set(signature, claimedCount + 1);
183
+ }
184
+ return {
185
+ attributes: getIslandMarkerAttributes(props),
186
+ innerHTML: candidate?.innerHTML ?? ""
187
+ };
188
+ };
189
+
190
+ // src/react/createIsland.browser.tsx
146
191
  import { jsxDEV } from "react/jsx-dev-runtime";
147
192
  var createIsland = (_registry) => {
148
- const Island = (props) => /* @__PURE__ */ jsxDEV("div", {
149
- ...getIslandMarkerAttributes(props),
150
- suppressHydrationWarning: true
151
- }, undefined, false, undefined, this);
193
+ const Island = (props) => {
194
+ const { attributes, innerHTML } = preserveIslandMarkup(props);
195
+ return /* @__PURE__ */ jsxDEV("div", {
196
+ ...attributes,
197
+ dangerouslySetInnerHTML: { __html: innerHTML },
198
+ suppressHydrationWarning: true
199
+ }, undefined, false, undefined, this);
200
+ };
152
201
  return Island;
153
202
  };
154
203
  // src/react/Island.browser.tsx
155
- init_islandMarkupAttributes();
156
204
  import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
157
- var Island = (props) => /* @__PURE__ */ jsxDEV2("div", {
158
- ...getIslandMarkerAttributes(props),
159
- suppressHydrationWarning: true
160
- }, undefined, false, undefined, this);
205
+ var Island = (props) => {
206
+ const { attributes, innerHTML } = preserveIslandMarkup(props);
207
+ return /* @__PURE__ */ jsxDEV2("div", {
208
+ ...attributes,
209
+ dangerouslySetInnerHTML: { __html: innerHTML },
210
+ suppressHydrationWarning: true
211
+ }, undefined, false, undefined, this);
212
+ };
161
213
  // src/react/hooks/useIslandState.ts
162
214
  import {
163
215
  useSyncExternalStore
@@ -252,5 +304,5 @@ export {
252
304
  Island
253
305
  };
254
306
 
255
- //# debugId=4B4ED9EDC83F08D364756E2164756E21
307
+ //# debugId=D221870BA533367A64756E2164756E21
256
308
  //# sourceMappingURL=browser.js.map
@@ -1,16 +1,17 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/core/islandManifest.ts", "../src/core/islands.ts", "../src/core/islandMarkupAttributes.ts", "../src/react/createIsland.browser.tsx", "../src/react/Island.browser.tsx", "../src/react/hooks/useIslandState.ts", "../src/client/islandState.ts"],
3
+ "sources": ["../src/core/islandManifest.ts", "../src/core/islands.ts", "../src/core/islandMarkupAttributes.ts", "../src/client/preserveIslandMarkup.ts", "../src/react/createIsland.browser.tsx", "../src/react/Island.browser.tsx", "../src/react/hooks/useIslandState.ts", "../src/client/islandState.ts"],
4
4
  "sourcesContent": [
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('&', '&amp;')\n\t\t.replaceAll('\"', '&quot;')\n\t\t.replaceAll('<', '&lt;')\n\t\t.replaceAll('>', '&gt;');\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 { JSX } from 'react';\nimport type {\n\tIslandRegistry,\n\tIslandRegistryInput,\n\tTypedIslandRenderProps\n} from '../../types/island';\nimport { getIslandMarkerAttributes } from '../core/islandMarkupAttributes';\n\nexport const createIsland = <T extends IslandRegistryInput>(\n\t_registry: IslandRegistry<T>\n) => {\n\tconst Island = (props: TypedIslandRenderProps<T>): JSX.Element => (\n\t\t<div {...getIslandMarkerAttributes(props)} suppressHydrationWarning />\n\t);\n\n\treturn Island;\n};\n\n",
9
- "import type { JSX } from 'react';\nimport type { RuntimeIslandRenderProps } from '../../types/island';\nimport { getIslandMarkerAttributes } from '../core/islandMarkupAttributes';\n\nexport const Island = (props: RuntimeIslandRenderProps): JSX.Element => (\n\t<div {...getIslandMarkerAttributes(props)} suppressHydrationWarning />\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",
9
+ "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 createIsland = <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",
10
+ "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
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",
11
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"
12
13
  ],
13
- "mappings": "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",
14
- "debugId": "4B4ED9EDC83F08D364756E2164756E21",
14
+ "mappings": "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",
15
+ "debugId": "D221870BA533367A64756E2164756E21",
15
16
  "names": []
16
17
  }
@@ -0,0 +1,17 @@
1
+ import type { RuntimeIslandRenderProps } from '../../types/island';
2
+ declare global {
3
+ interface Window {
4
+ __ABS_CLAIMED_ISLAND_MARKUP__?: Map<string, number>;
5
+ }
6
+ }
7
+ export declare const preserveIslandMarkup: (props: RuntimeIslandRenderProps) => {
8
+ attributes: {
9
+ 'data-component': string;
10
+ 'data-framework': string;
11
+ 'data-hydrate': string;
12
+ 'data-island': "true";
13
+ 'data-island-id'?: string;
14
+ 'data-props': string;
15
+ };
16
+ innerHTML: string;
17
+ };
@@ -142,8 +142,55 @@ var init_islandMarkupAttributes = __esm(() => {
142
142
  });
143
143
 
144
144
  // src/vue/createIsland.browser.ts
145
- init_islandMarkupAttributes();
146
145
  import { defineComponent, h } from "vue";
146
+
147
+ // src/client/preserveIslandMarkup.ts
148
+ init_islandMarkupAttributes();
149
+ var getClaimMap = () => {
150
+ if (typeof window === "undefined") {
151
+ return null;
152
+ }
153
+ window.__ABS_CLAIMED_ISLAND_MARKUP__ ??= new Map;
154
+ return window.__ABS_CLAIMED_ISLAND_MARKUP__;
155
+ };
156
+ var getIslandSignature = (props) => {
157
+ const attributes = getIslandMarkerAttributes(props);
158
+ return [
159
+ attributes["data-component"],
160
+ attributes["data-framework"],
161
+ attributes["data-hydrate"],
162
+ attributes["data-props"]
163
+ ].join("::");
164
+ };
165
+ var isMatchingIslandElement = (element, props) => {
166
+ if (!(element instanceof HTMLElement)) {
167
+ return false;
168
+ }
169
+ const attributes = getIslandMarkerAttributes(props);
170
+ 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
+ };
172
+ var preserveIslandMarkup = (props) => {
173
+ if (typeof document === "undefined") {
174
+ return {
175
+ attributes: getIslandMarkerAttributes(props),
176
+ innerHTML: ""
177
+ };
178
+ }
179
+ const claimMap = getClaimMap();
180
+ const signature = getIslandSignature(props);
181
+ const claimedCount = claimMap?.get(signature) ?? 0;
182
+ const candidates = Array.from(document.querySelectorAll('[data-island="true"]')).filter((element) => isMatchingIslandElement(element, props));
183
+ const candidate = candidates[claimedCount];
184
+ if (claimMap) {
185
+ claimMap.set(signature, claimedCount + 1);
186
+ }
187
+ return {
188
+ attributes: getIslandMarkerAttributes(props),
189
+ innerHTML: candidate?.innerHTML ?? ""
190
+ };
191
+ };
192
+
193
+ // src/vue/createIsland.browser.ts
147
194
  var defineRuntimeIslandComponent = (setup) => defineComponent({
148
195
  name: "AbsoluteIsland",
149
196
  props: {
@@ -167,10 +214,11 @@ var defineRuntimeIslandComponent = (setup) => defineComponent({
167
214
  setup
168
215
  });
169
216
  var createIsland = (_registry) => defineRuntimeIslandComponent((props) => {
170
- const markerAttributes = getIslandMarkerAttributes(props);
217
+ const { attributes, innerHTML } = preserveIslandMarkup(props);
171
218
  return () => h("div", {
172
- ...markerAttributes,
173
- "data-allow-mismatch": ""
219
+ ...attributes,
220
+ "data-allow-mismatch": "",
221
+ innerHTML
174
222
  });
175
223
  });
176
224
  // src/vue/useIslandState.ts
@@ -285,5 +333,5 @@ export {
285
333
  createIsland
286
334
  };
287
335
 
288
- //# debugId=15C9F76ED37DA12764756E2164756E21
336
+ //# debugId=660CDFA58A8A6E8964756E2164756E21
289
337
  //# sourceMappingURL=browser.js.map
@@ -1,15 +1,16 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/core/islandManifest.ts", "../src/core/islands.ts", "../src/core/islandMarkupAttributes.ts", "../src/vue/createIsland.browser.ts", "../src/vue/useIslandState.ts", "../src/client/islandState.ts"],
3
+ "sources": ["../src/core/islandManifest.ts", "../src/core/islands.ts", "../src/core/islandMarkupAttributes.ts", "../src/vue/createIsland.browser.ts", "../src/client/preserveIslandMarkup.ts", "../src/vue/useIslandState.ts", "../src/client/islandState.ts"],
4
4
  "sourcesContent": [
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('&', '&amp;')\n\t\t.replaceAll('\"', '&quot;')\n\t\t.replaceAll('<', '&lt;')\n\t\t.replaceAll('>', '&gt;');\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 { defineComponent, h } from 'vue';\nimport type {\n\tIslandRegistry,\n\tIslandRegistryInput,\n\tRuntimeIslandRenderProps,\n\tTypedIslandRenderProps\n} from '../../types/island';\nimport { getIslandMarkerAttributes } from '../core/islandMarkupAttributes';\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 createIsland = <T extends IslandRegistryInput>(\n\t_registry: IslandRegistry<T>\n): VueIslandComponent<T> =>\n\tdefineRuntimeIslandComponent((props) => {\n\t\tconst markerAttributes = getIslandMarkerAttributes(props);\n\n\t\treturn () =>\n\t\t\th('div', {\n\t\t\t\t...markerAttributes,\n\t\t\t\t'data-allow-mismatch': ''\n\t\t\t});\n\t});\n\n",
8
+ "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 createIsland = <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",
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
10
  "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",
10
11
  "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"
11
12
  ],
12
- "mappings": "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",
13
- "debugId": "15C9F76ED37DA12764756E2164756E21",
13
+ "mappings": "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",
14
+ "debugId": "660CDFA58A8A6E8964756E2164756E21",
14
15
  "names": []
15
16
  }
package/dist/vue/index.js CHANGED
@@ -484,10 +484,10 @@ var routePropsCache, cacheRouteData = (pagePath, data) => {
484
484
  } finally {
485
485
  console.log = origLog;
486
486
  }
487
- }, renderAngularApp = async (deps, PageComponent, providers, document) => {
487
+ }, renderAngularApp = async (deps, PageComponent, providers, document2) => {
488
488
  const bootstrap = (context) => deps.bootstrapApplication(PageComponent, { providers }, context);
489
489
  return withSuppressedAngularDevLogs(() => deps.renderApplication(bootstrap, {
490
- document,
490
+ document: document2,
491
491
  platformProviders: [],
492
492
  url: "/"
493
493
  }));
@@ -29827,9 +29827,9 @@ var angularIslandSelector = "abs-angular-island", getAngularIslandSelector = (_i
29827
29827
  { provide: deps.APP_BASE_HREF, useValue: "/" },
29828
29828
  { provide: propsToken, useValue: props }
29829
29829
  ];
29830
- const document = `<!DOCTYPE html><html><body><${selector}></${selector}></body></html>`;
29830
+ const document2 = `<!DOCTYPE html><html><body><${selector}></${selector}></body></html>`;
29831
29831
  const html = await withSuppressedAngularDevLogs(() => deps.renderApplication((context) => deps.bootstrapApplication(WrapperComponent, { providers }, context), {
29832
- document,
29832
+ document: document2,
29833
29833
  platformProviders: [],
29834
29834
  url: "/"
29835
29835
  }));
@@ -30660,10 +30660,58 @@ var createIsland = (registry) => defineRuntimeIslandComponent((props) => {
30660
30660
  // src/vue/index.ts
30661
30661
  init_pageHandler();
30662
30662
 
30663
+ // src/vue/Island.ts
30664
+ import { defineComponent as defineComponent2, h as h3, onServerPrefetch as onServerPrefetch2 } from "vue";
30665
+
30666
+ // src/client/preserveIslandMarkup.ts
30667
+ init_islandMarkupAttributes();
30668
+ var getClaimMap = () => {
30669
+ if (typeof window === "undefined") {
30670
+ return null;
30671
+ }
30672
+ window.__ABS_CLAIMED_ISLAND_MARKUP__ ??= new Map;
30673
+ return window.__ABS_CLAIMED_ISLAND_MARKUP__;
30674
+ };
30675
+ var getIslandSignature = (props) => {
30676
+ const attributes = getIslandMarkerAttributes(props);
30677
+ return [
30678
+ attributes["data-component"],
30679
+ attributes["data-framework"],
30680
+ attributes["data-hydrate"],
30681
+ attributes["data-props"]
30682
+ ].join("::");
30683
+ };
30684
+ var isMatchingIslandElement = (element2, props) => {
30685
+ if (!(element2 instanceof HTMLElement)) {
30686
+ return false;
30687
+ }
30688
+ const attributes = getIslandMarkerAttributes(props);
30689
+ return element2.dataset.island === "true" && element2.dataset.component === attributes["data-component"] && element2.dataset.framework === attributes["data-framework"] && (element2.dataset.hydrate ?? "load") === attributes["data-hydrate"] && (element2.dataset.props ?? "{}") === attributes["data-props"];
30690
+ };
30691
+ var preserveIslandMarkup = (props) => {
30692
+ if (typeof document === "undefined") {
30693
+ return {
30694
+ attributes: getIslandMarkerAttributes(props),
30695
+ innerHTML: ""
30696
+ };
30697
+ }
30698
+ const claimMap = getClaimMap();
30699
+ const signature = getIslandSignature(props);
30700
+ const claimedCount = claimMap?.get(signature) ?? 0;
30701
+ const candidates = Array.from(document.querySelectorAll('[data-island="true"]')).filter((element2) => isMatchingIslandElement(element2, props));
30702
+ const candidate = candidates[claimedCount];
30703
+ if (claimMap) {
30704
+ claimMap.set(signature, claimedCount + 1);
30705
+ }
30706
+ return {
30707
+ attributes: getIslandMarkerAttributes(props),
30708
+ innerHTML: candidate?.innerHTML ?? ""
30709
+ };
30710
+ };
30711
+
30663
30712
  // src/vue/Island.ts
30664
30713
  init_islandMarkupAttributes();
30665
30714
  init_renderIslandMarkup();
30666
- import { defineComponent as defineComponent2, h as h3, onServerPrefetch as onServerPrefetch2 } from "vue";
30667
30715
  var defineRuntimeIslandComponent2 = (setup) => defineComponent2({
30668
30716
  name: "AbsoluteIsland",
30669
30717
  props: {
@@ -30695,11 +30743,14 @@ var Island = defineRuntimeIslandComponent2((props) => {
30695
30743
  markerAttributes = result.attributes;
30696
30744
  html = result.html;
30697
30745
  });
30698
- return () => h3("div", {
30699
- ...markerAttributes,
30700
- "data-allow-mismatch": "",
30701
- innerHTML: isBrowser ? undefined : html
30702
- });
30746
+ return () => {
30747
+ const preserved = isBrowser ? preserveIslandMarkup(props) : null;
30748
+ return h3("div", {
30749
+ ...preserved?.attributes ?? markerAttributes,
30750
+ "data-allow-mismatch": "",
30751
+ innerHTML: isBrowser ? preserved?.innerHTML : html
30752
+ });
30753
+ };
30703
30754
  });
30704
30755
  // src/vue/useIslandState.ts
30705
30756
  import {
@@ -30815,5 +30866,5 @@ export {
30815
30866
  Island
30816
30867
  };
30817
30868
 
30818
- //# debugId=4013F11A816CEF4E64756E2164756E21
30869
+ //# debugId=56D61F3E4ECE529264756E2164756E21
30819
30870
  //# sourceMappingURL=index.js.map