@absolutejs/absolute 0.19.0-beta.928 → 0.19.0-beta.929
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/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/angular/index.js +221 -118
- package/dist/angular/index.js.map +5 -4
- package/dist/angular/server.js +203 -100
- package/dist/angular/server.js.map +5 -4
- package/dist/build.js +687 -565
- package/dist/build.js.map +9 -8
- package/dist/index.js +738 -616
- package/dist/index.js.map +9 -8
- package/dist/islands/index.js +105 -2
- package/dist/islands/index.js.map +5 -4
- package/dist/react/index.js +105 -2
- package/dist/react/index.js.map +5 -4
- package/dist/src/core/normalizeIslandProps.d.ts +15 -0
- package/dist/src/core/vueServerModule.d.ts +1 -0
- package/dist/src/vue/Island.browser.d.ts +36 -12
- package/dist/src/vue/Island.d.ts +35 -11
- package/dist/src/vue/pageHandler.d.ts +8 -0
- package/dist/svelte/index.js +105 -2
- package/dist/svelte/index.js.map +5 -4
- package/dist/vue/browser.js +57 -4
- package/dist/vue/browser.js.map +5 -4
- package/dist/vue/index.js +172 -8
- package/dist/vue/index.js.map +8 -6
- package/dist/vue/server.js +11 -4
- package/dist/vue/server.js.map +3 -3
- package/package.json +1 -1
package/dist/vue/browser.js
CHANGED
|
@@ -228,6 +228,58 @@ var preserveIslandMarkup = (props) => {
|
|
|
228
228
|
};
|
|
229
229
|
};
|
|
230
230
|
|
|
231
|
+
// src/core/normalizeIslandProps.ts
|
|
232
|
+
var EMPTY_PROPS = {};
|
|
233
|
+
var ISLAND_FRAMEWORKS = [
|
|
234
|
+
"react",
|
|
235
|
+
"svelte",
|
|
236
|
+
"vue",
|
|
237
|
+
"angular",
|
|
238
|
+
"ember"
|
|
239
|
+
];
|
|
240
|
+
var ISLAND_HYDRATE_MODES = [
|
|
241
|
+
"load",
|
|
242
|
+
"idle",
|
|
243
|
+
"visible",
|
|
244
|
+
"none"
|
|
245
|
+
];
|
|
246
|
+
var isIslandFramework = (value) => ISLAND_FRAMEWORKS.some((framework) => framework === value);
|
|
247
|
+
var isIslandHydrate = (value) => ISLAND_HYDRATE_MODES.some((mode) => mode === value);
|
|
248
|
+
var normalizeRuntimeIslandRenderProps = (raw) => {
|
|
249
|
+
const { component, framework, hydrate, props } = raw;
|
|
250
|
+
if (!isIslandFramework(framework)) {
|
|
251
|
+
throw new Error(`Unknown island framework: "${framework}".`);
|
|
252
|
+
}
|
|
253
|
+
if (hydrate !== undefined && !isIslandHydrate(hydrate)) {
|
|
254
|
+
throw new Error(`Unknown island hydrate mode: "${hydrate}".`);
|
|
255
|
+
}
|
|
256
|
+
return {
|
|
257
|
+
component,
|
|
258
|
+
framework,
|
|
259
|
+
hydrate,
|
|
260
|
+
props: normalizeIslandProps(props)
|
|
261
|
+
};
|
|
262
|
+
};
|
|
263
|
+
var isPlainObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
264
|
+
var safeJsonParseObject = (raw) => {
|
|
265
|
+
const trimmed = raw.trim();
|
|
266
|
+
if (!trimmed)
|
|
267
|
+
return EMPTY_PROPS;
|
|
268
|
+
try {
|
|
269
|
+
const parsed = JSON.parse(trimmed);
|
|
270
|
+
return isPlainObject(parsed) ? parsed : EMPTY_PROPS;
|
|
271
|
+
} catch {
|
|
272
|
+
return EMPTY_PROPS;
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
var normalizeIslandProps = (value) => {
|
|
276
|
+
if (typeof value === "string")
|
|
277
|
+
return safeJsonParseObject(value);
|
|
278
|
+
if (isPlainObject(value))
|
|
279
|
+
return value;
|
|
280
|
+
return EMPTY_PROPS;
|
|
281
|
+
};
|
|
282
|
+
|
|
231
283
|
// src/vue/Island.browser.ts
|
|
232
284
|
var Island = defineComponent({
|
|
233
285
|
name: "AbsoluteIsland",
|
|
@@ -245,11 +297,12 @@ var Island = defineComponent({
|
|
|
245
297
|
type: String
|
|
246
298
|
},
|
|
247
299
|
props: {
|
|
248
|
-
required:
|
|
249
|
-
type: Object
|
|
300
|
+
required: false,
|
|
301
|
+
type: [Object, String]
|
|
250
302
|
}
|
|
251
303
|
},
|
|
252
|
-
setup(
|
|
304
|
+
setup(rawProps) {
|
|
305
|
+
const props = normalizeRuntimeIslandRenderProps(rawProps);
|
|
253
306
|
return () => {
|
|
254
307
|
const { attributes, innerHTML } = preserveIslandMarkup(props);
|
|
255
308
|
return h("div", {
|
|
@@ -441,5 +494,5 @@ export {
|
|
|
441
494
|
Island
|
|
442
495
|
};
|
|
443
496
|
|
|
444
|
-
//# debugId=
|
|
497
|
+
//# debugId=2173C9230989530064756E2164756E21
|
|
445
498
|
//# sourceMappingURL=browser.js.map
|
package/dist/vue/browser.js.map
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/core/islandManifest.ts", "../src/core/islands.ts", "../src/core/islandMarkupAttributes.ts", "../src/vue/Island.browser.ts", "../src/client/preserveIslandMarkup.ts", "../src/vue/createIsland.browser.ts", "../src/vue/useIslandStore.ts", "../node_modules/zustand/esm/vanilla.mjs", "../node_modules/zustand/esm/middleware.mjs", "../src/client/islandStore.ts", "../src/vue/defineVuePage.ts"],
|
|
3
|
+
"sources": ["../src/core/islandManifest.ts", "../src/core/islands.ts", "../src/core/islandMarkupAttributes.ts", "../src/vue/Island.browser.ts", "../src/client/preserveIslandMarkup.ts", "../src/core/normalizeIslandProps.ts", "../src/vue/createIsland.browser.ts", "../src/vue/useIslandStore.ts", "../node_modules/zustand/esm/vanilla.mjs", "../node_modules/zustand/esm/middleware.mjs", "../src/client/islandStore.ts", "../src/vue/defineVuePage.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\nconst collectFrameworkIslands = (\n\tmanifest: Record<string, string>,\n\tprefix: string\n) => {\n\tconst entries: Record<string, string> = {};\n\tlet found = false;\n\n\tfor (const [key, value] of Object.entries(manifest)) {\n\t\tif (!key.startsWith(prefix)) continue;\n\n\t\tconst component = key.slice(prefix.length);\n\t\tif (!component) continue;\n\n\t\tentries[component] = value;\n\t\tfound = true;\n\t}\n\n\treturn found ? entries : undefined;\n};\n\nexport const getIslandManifestEntries = (manifest: Record<string, string>) => {\n\tconst islands: Partial<Record<IslandFramework, Record<string, string>>> =\n\t\t{};\n\tconst frameworks: IslandFramework[] = ['react', 'svelte', 'vue', 'angular'];\n\n\tfor (const framework of frameworks) {\n\t\tconst prefix = `Island${toIslandFrameworkSegment(framework)}`;\n\t\tconst entries = collectFrameworkIslands(manifest, prefix);\n\t\tif (entries) islands[framework] = entries;\n\t}\n\n\treturn islands;\n};\nexport const getIslandManifestKey = (\n\tframework: IslandFramework,\n\tcomponent: string\n) => `Island${toIslandFrameworkSegment(framework)}${component}`;\n",
|
|
6
6
|
"import type {\n\tIslandComponentDefinition,\n\tIslandRegistry,\n\tIslandRegistryInput\n} from '../../types/island';\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});\nexport const defineIslandRegistry = <T extends IslandRegistryInput>(\n\tregistry: IslandRegistry<T>\n) => registry;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null;\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};\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}\nexport const parseIslandProps = (rawProps: string | null) => {\n\tif (!rawProps) return {};\n\n\treturn JSON.parse(rawProps);\n};\nexport const serializeIslandProps = (props: unknown) =>\n\tJSON.stringify(props ?? {});\n\nexport {\n\tgetIslandManifestEntries,\n\tgetIslandManifestKey\n} from './islandManifest';\n",
|
|
7
7
|
"import type { RuntimeIslandRenderProps } 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 = (attributes: Record<string, string>) =>\n\tObject.entries(attributes)\n\t\t.map(([key, value]) => `${key}=\"${escapeHtmlAttribute(value)}\"`)\n\t\t.join(' ');\n",
|
|
8
|
-
"import { defineComponent, h } from 'vue';\nimport
|
|
8
|
+
"import { defineComponent, h } from 'vue';\nimport { preserveIslandMarkup } from '../client/preserveIslandMarkup';\nimport { normalizeRuntimeIslandRenderProps } from '../core/normalizeIslandProps';\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\t/* Accept either an object or a JSON-serialized string — see\n\t\t the SSR `Island.ts` for the rationale. */\n\t\tprops: {\n\t\t\trequired: false,\n\t\t\ttype: [Object, String]\n\t\t}\n\t},\n\tsetup(rawProps) {\n\t\tconst props = normalizeRuntimeIslandRenderProps(rawProps);\n\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
9
|
"import type { RuntimeIslandRenderProps } from '../../types/island';\nimport { getIslandMarkerAttributes } from '../core/islandMarkupAttributes';\n\ntype PreservedIslandMarkup = {\n\tattributes: Record<string, string>;\n\tinnerHTML: string;\n};\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\tislandId?: string;\n\t\tprops?: 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<\n\t\tstring,\n\t\tPreservedIslandMarkup[]\n\t>();\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\nconst snapshotIslandElement = (\n\telement: HTMLElement,\n\tsnapshotMap: Map<string, PreservedIslandMarkup[]>\n) => {\n\tconst signature = [\n\t\telement.dataset.component,\n\t\telement.dataset.framework,\n\t\telement.dataset.hydrate ?? 'load',\n\t\telement.dataset.props ?? '{}'\n\t].join('::');\n\tconst existing = snapshotMap.get(signature) ?? [];\n\tconst attributes = Object.fromEntries(\n\t\telement\n\t\t\t.getAttributeNames()\n\t\t\t.map((name) => [name, element.getAttribute(name) ?? ''])\n\t);\n\texisting.push({\n\t\tattributes,\n\t\tinnerHTML: element.innerHTML\n\t});\n\tsnapshotMap.set(signature, existing);\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(\n\t\tdocument.querySelectorAll<HTMLElement>('[data-island=\"true\"]')\n\t);\n\tfor (const element of elements) {\n\t\tsnapshotIslandElement(element, snapshotMap);\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:\n\t\t\tsnapshotCandidate?.attributes ?? getIslandMarkerAttributes(props),\n\t\tinnerHTML: snapshotCandidate?.innerHTML ?? candidate?.innerHTML ?? ''\n\t};\n};\n",
|
|
10
|
+
"import type { IslandFramework, IslandHydrate } from '../../types/island';\n\n/* `<Island>` (Vue/Svelte/React/Angular component form) historically took\n `props` as an object, while `<absolute-island>` (custom-element form\n used in HTML/HTMX hosts) takes `props` as a JSON-serialized string.\n The two surfaces have the same mental model — \"render an island\" —\n but a value that's valid in one shape would silently break in the\n other. This helper normalizes whichever shape arrives at runtime. */\nconst EMPTY_PROPS: Record<string, unknown> = {};\n\nconst ISLAND_FRAMEWORKS: readonly IslandFramework[] = [\n\t'react',\n\t'svelte',\n\t'vue',\n\t'angular',\n\t'ember'\n];\n\nconst ISLAND_HYDRATE_MODES: readonly IslandHydrate[] = [\n\t'load',\n\t'idle',\n\t'visible',\n\t'none'\n];\n\nconst isIslandFramework = (value: string): value is IslandFramework =>\n\tISLAND_FRAMEWORKS.some((framework) => framework === value);\n\nconst isIslandHydrate = (value: string): value is IslandHydrate =>\n\tISLAND_HYDRATE_MODES.some((mode) => mode === value);\n\ntype RawIslandProps = {\n\tcomponent: string;\n\tframework: string;\n\thydrate?: string | undefined;\n\tprops: unknown;\n};\n\nexport const normalizeRuntimeIslandRenderProps = (raw: RawIslandProps) => {\n\tconst { component, framework, hydrate, props } = raw;\n\tif (!isIslandFramework(framework)) {\n\t\tthrow new Error(`Unknown island framework: \"${framework}\".`);\n\t}\n\n\tif (hydrate !== undefined && !isIslandHydrate(hydrate)) {\n\t\tthrow new Error(`Unknown island hydrate mode: \"${hydrate}\".`);\n\t}\n\n\treturn {\n\t\tcomponent,\n\t\tframework,\n\t\thydrate,\n\t\tprops: normalizeIslandProps(props)\n\t};\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst safeJsonParseObject = (raw: string) => {\n\tconst trimmed = raw.trim();\n\tif (!trimmed) return EMPTY_PROPS;\n\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(trimmed);\n\n\t\treturn isPlainObject(parsed) ? parsed : EMPTY_PROPS;\n\t} catch {\n\t\treturn EMPTY_PROPS;\n\t}\n};\n\nexport const normalizeIslandProps = (value: unknown) => {\n\tif (typeof value === 'string') return safeJsonParseObject(value);\n\tif (isPlainObject(value)) return value;\n\n\treturn EMPTY_PROPS;\n};\n",
|
|
10
11
|
"import { defineComponent, h } from 'vue';\nimport type {\n\tIslandRegistry,\n\tIslandRegistryInput,\n\tRuntimeIslandRenderProps\n} from '../../types/island';\nimport { preserveIslandMarkup } from '../client/preserveIslandMarkup';\n\nconst defineRuntimeIslandComponent = (\n\tsetup: (props: RuntimeIslandRenderProps) => () => ReturnType<typeof h>\n) =>\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) =>\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
12
|
"import { customRef, onBeforeUnmount } from 'vue';\nimport type { StoreApi } from 'zustand/vanilla';\nimport {\n\treadIslandStore,\n\tsubscribeIslandStore,\n\ttype IslandStoreState\n} from '../client/islandStore';\n\nexport const useIslandStore = <TState extends IslandStoreState, TSelected>(\n\tstore: StoreApi<TState>,\n\tselector: (state: TState) => TSelected\n) => {\n\tlet current = readIslandStore(store, selector);\n\tlet unsubscribe: (() => void) | undefined;\n\n\tconst state = customRef<TSelected>((track, trigger) => {\n\t\tunsubscribe = subscribeIslandStore(store, selector, (value) => {\n\t\t\tcurrent = value;\n\t\t\ttrigger();\n\t\t});\n\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\n\t\t\t\treturn current;\n\t\t\t},\n\t\t\tset() {}\n\t\t};\n\t});\n\n\tonBeforeUnmount(() => {\n\t\tunsubscribe?.();\n\t});\n\n\treturn state;\n};\n",
|
|
12
13
|
"const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n",
|
|
@@ -14,7 +15,7 @@
|
|
|
14
15
|
"import { createStore, type StateCreator, type StoreApi } from 'zustand/vanilla';\nimport { combine } from 'zustand/middleware';\n\nexport type IslandStoreState = object;\ntype IslandStoreSnapshot = Record<string, unknown>;\ntype IslandStoreShape<\n\tTState extends IslandStoreState,\n\tTActions extends object\n> = Omit<TState, keyof TActions> & TActions;\nexport type IslandStateSnapshot = Record<string, IslandStoreSnapshot>;\ntype AnyIslandStore = StoreApi<object>;\ntype IslandStoreInstance = {\n\tapplyExternalSnapshot: (snapshot: IslandStoreSnapshot) => void;\n\tstore: AnyIslandStore;\n};\n\nconst ABSOLUTE_ISLAND_STATE = '__ABS_ISLAND_STATE__';\nconst ABSOLUTE_ISLAND_STORES = '__ABS_ISLAND_STORES__';\n\ndeclare global {\n\tvar __ABS_ISLAND_STATE__: IslandStateSnapshot | undefined;\n\tvar __ABS_ISLAND_STORES__:\n\t\t| Map<string, Set<IslandStoreInstance>>\n\t\t| undefined;\n}\n\nconst getIslandStoreSnapshot = () => {\n\tglobalThis.__ABS_ISLAND_STATE__ ??= {};\n\n\treturn globalThis.__ABS_ISLAND_STATE__;\n};\n\nconst getIslandStores = () => {\n\tglobalThis.__ABS_ISLAND_STORES__ ??= new Map();\n\n\treturn globalThis.__ABS_ISLAND_STORES__;\n};\n\nconst isSerializableValue = (value: unknown) =>\n\ttypeof value !== 'function' && value !== undefined;\n\nconst toSerializableState = <T extends object>(state: T) =>\n\tObject.fromEntries(\n\t\tObject.entries(state).filter(([, value]) => isSerializableValue(value))\n\t);\n\nconst applySnapshot = <T extends object>(\n\tstore: StoreApi<T>,\n\tsnapshot: IslandStoreSnapshot | undefined\n) => {\n\tif (!snapshot) {\n\t\treturn;\n\t}\n\n\tstore.setState({\n\t\t...store.getState(),\n\t\t...snapshot\n\t});\n};\n\nconst getPeerStores = (\n\tstoreInstances: Set<IslandStoreInstance>,\n\townerStore: AnyIslandStore\n) => [...storeInstances].filter((peer) => peer.store !== ownerStore);\n\nconst syncIslandSnapshot = <\n\tTState extends IslandStoreState,\n\tTActions extends object\n>(\n\tstoreId: string,\n\tstate: IslandStoreShape<TState, TActions>,\n\tstoreInstances: Set<IslandStoreInstance>,\n\townerStore: AnyIslandStore\n) => {\n\tconst nextSnapshot = toSerializableState(state);\n\tgetIslandStoreSnapshot()[storeId] = nextSnapshot;\n\n\tfor (const peerStore of getPeerStores(storeInstances, ownerStore)) {\n\t\tpeerStore.applyExternalSnapshot(nextSnapshot);\n\t}\n};\n\nexport const createIslandStore = <\n\tTState extends IslandStoreState,\n\tTActions extends object\n>(\n\tstoreId: string,\n\tinitialState: TState,\n\tcreateState: StateCreator<TState, [], [], TActions>\n) => {\n\tconst store = createStore(combine(initialState, createState));\n\tconst stores = getIslandStores();\n\tconst storeInstances =\n\t\tstores.get(storeId) ?? new Set<IslandStoreInstance>();\n\tconst initialSnapshot = getIslandStoreSnapshot()[storeId];\n\tapplySnapshot(store, initialSnapshot);\n\tlet isApplyingExternalSnapshot = false;\n\n\tconst applyExternalSnapshot = (snapshot: IslandStoreSnapshot) => {\n\t\tisApplyingExternalSnapshot = true;\n\t\tapplySnapshot(store, snapshot);\n\t};\n\n\tstoreInstances.add({\n\t\tapplyExternalSnapshot,\n\t\tstore\n\t});\n\tstores.set(storeId, storeInstances);\n\n\tsyncIslandSnapshot(storeId, store.getState(), storeInstances, store);\n\tstore.subscribe((state) => {\n\t\tif (isApplyingExternalSnapshot) {\n\t\t\tisApplyingExternalSnapshot = false;\n\n\t\t\treturn;\n\t\t}\n\n\t\tsyncIslandSnapshot(storeId, state, storeInstances, store);\n\t});\n\n\treturn store;\n};\nexport const getIslandStoreServerSnapshot = <\n\tTState extends IslandStoreState,\n\tTSelected\n>(\n\tstore: StoreApi<TState>,\n\tselector: (state: TState) => TSelected\n) => selector(store.getInitialState());\nconst applySnapshotToStoreInstances = (\n\tstoreId: string,\n\tinstances: Set<IslandStoreInstance>,\n\tsnapshot: IslandStateSnapshot\n) => {\n\tfor (const instance of instances) {\n\t\tinstance.applyExternalSnapshot(snapshot[storeId] ?? {});\n\t}\n};\n\nexport const initializeIslandStores = (state: IslandStateSnapshot) => {\n\tconst currentSnapshot = getIslandStoreSnapshot();\n\tconst nextSnapshot: IslandStateSnapshot = {\n\t\t...state,\n\t\t...currentSnapshot\n\t};\n\n\tglobalThis.__ABS_ISLAND_STATE__ = nextSnapshot;\n\n\tfor (const [storeId, store] of getIslandStores()) {\n\t\tapplySnapshotToStoreInstances(storeId, store, nextSnapshot);\n\t}\n};\nexport const readIslandStore = <TState extends IslandStoreState, TSelected>(\n\tstore: StoreApi<TState>,\n\tselector: (state: TState) => TSelected\n) => selector(store.getState());\nexport const resetIslandStoreForTesting = () => {\n\tdelete globalThis.__ABS_ISLAND_STATE__;\n\tdelete globalThis.__ABS_ISLAND_STORES__;\n};\nexport const subscribeIslandStore = <\n\tTState extends IslandStoreState,\n\tTSelected\n>(\n\tstore: StoreApi<TState>,\n\tselector: (state: TState) => TSelected,\n\tlistener: (value: TSelected) => void\n) => {\n\tlet currentSelection = selector(store.getState());\n\n\treturn store.subscribe((state) => {\n\t\tconst nextSelection = selector(state);\n\t\tif (Object.is(nextSelection, currentSelection)) {\n\t\t\treturn;\n\t\t}\n\n\t\tcurrentSelection = nextSelection;\n\t\tlistener(nextSelection);\n\t});\n};\n\nexport { ABSOLUTE_ISLAND_STATE, ABSOLUTE_ISLAND_STORES };\n",
|
|
15
16
|
"import type { VueRoutes, VueSetupApp } from '../../types/vue';\n\n/** Identity helper that types a Vue page's `setupApp` export without\n * forcing the user to `import type { VueSetupApp }` every time. Use as\n * `export const setupApp = defineVueSetupApp(async (app, ctx) => { ... });` */\nexport const defineVueSetupApp = (hook: VueSetupApp) => hook;\n\n/** Identity helper that signals — to humans and to TypeScript — that a\n * Vue page's `routes` export is the input to AbsoluteJS's auto-generated\n * vue-router. Without this, `export const routes = [...]` reads as an\n * ordinary const that nobody references locally; the import + call make\n * the contract explicit (mirroring Vue's `defineProps` convention).\n *\n * At runtime this is identity (`(routes) => routes`); the actual\n * router-creation code lives in the compile-time transform applied to\n * the page's `<script>` block. Use as\n * `export const routes = defineRoutes([{ path: '/foo', component: Foo }]);` */\nexport const defineRoutes = <T extends VueRoutes>(routes: T) => routes;\n"
|
|
16
17
|
],
|
|
17
|
-
"mappings": "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
|
|
18
|
-
"debugId": "
|
|
18
|
+
"mappings": "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",
|
|
19
|
+
"debugId": "2173C9230989530064756E2164756E21",
|
|
19
20
|
"names": []
|
|
20
21
|
}
|
package/dist/vue/index.js
CHANGED
|
@@ -2698,6 +2698,100 @@ var init_svelteServerModule = __esm(() => {
|
|
|
2698
2698
|
});
|
|
2699
2699
|
});
|
|
2700
2700
|
|
|
2701
|
+
// src/core/vueServerModule.ts
|
|
2702
|
+
import { mkdir as mkdir2 } from "fs/promises";
|
|
2703
|
+
import { dirname as dirname4, join as join5, relative as relative3, resolve as resolve5 } from "path";
|
|
2704
|
+
var {Transpiler } = globalThis.Bun;
|
|
2705
|
+
var ISLAND_COMPONENT_ID_LENGTH = 8, serverCacheRoot2, compiledModuleCache2, transpiler2, ensureRelativeImportPath2 = (from, target) => {
|
|
2706
|
+
const importPath = relative3(dirname4(from), target).replace(/\\/g, "/");
|
|
2707
|
+
return importPath.startsWith(".") ? importPath : `./${importPath}`;
|
|
2708
|
+
}, getCachedModulePath2 = (sourcePath) => {
|
|
2709
|
+
const relativeSourcePath = relative3(process.cwd(), sourcePath).replace(/\\/g, "/");
|
|
2710
|
+
const normalizedSourcePath = relativeSourcePath.startsWith("..") ? sourcePath.replace(/[:\\/]/g, "_") : relativeSourcePath;
|
|
2711
|
+
return join5(serverCacheRoot2, `${normalizedSourcePath}.server.js`);
|
|
2712
|
+
}, writeIfChanged2 = async (path, content) => {
|
|
2713
|
+
const targetFile = Bun.file(path);
|
|
2714
|
+
if (await targetFile.exists()) {
|
|
2715
|
+
const currentContent = await targetFile.text();
|
|
2716
|
+
if (currentContent === content)
|
|
2717
|
+
return;
|
|
2718
|
+
}
|
|
2719
|
+
await Bun.write(path, content);
|
|
2720
|
+
}, stripExports = (code) => code.replace(/export\s+default/, "const script ="), mergeVueImports = (code) => {
|
|
2721
|
+
const lines = code.split(`
|
|
2722
|
+
`);
|
|
2723
|
+
const specifierSet = new Set;
|
|
2724
|
+
const vueImportRegex = /^import\s+{([^}]+)}\s+from\s+['"]vue['"];?$/;
|
|
2725
|
+
lines.forEach((line) => {
|
|
2726
|
+
const match = line.match(vueImportRegex);
|
|
2727
|
+
if (match?.[1])
|
|
2728
|
+
match[1].split(",").forEach((importSpecifier) => specifierSet.add(importSpecifier.trim()));
|
|
2729
|
+
});
|
|
2730
|
+
const nonVueLines = lines.filter((line) => !vueImportRegex.test(line));
|
|
2731
|
+
return specifierSet.size ? [
|
|
2732
|
+
`import { ${[...specifierSet].join(", ")} } from "vue";`,
|
|
2733
|
+
...nonVueLines
|
|
2734
|
+
].join(`
|
|
2735
|
+
`) : nonVueLines.join(`
|
|
2736
|
+
`);
|
|
2737
|
+
}, extractRelativeVueImports = (sourceCode) => Array.from(sourceCode.matchAll(/import\s+[\s\S]+?['"]([^'"]+)['"]/g)).map((match) => match[1]).filter((importPath) => typeof importPath === "string" && importPath.startsWith(".") && importPath.endsWith(".vue")), compileVueServerModule = async (sourcePath) => {
|
|
2738
|
+
const cachedModulePath = compiledModuleCache2.get(sourcePath);
|
|
2739
|
+
if (cachedModulePath)
|
|
2740
|
+
return cachedModulePath;
|
|
2741
|
+
const compiler = await import("@vue/compiler-sfc");
|
|
2742
|
+
const source = await Bun.file(sourcePath).text();
|
|
2743
|
+
const { descriptor } = compiler.parse(source, { filename: sourcePath });
|
|
2744
|
+
const componentId = Bun.hash(sourcePath).toString(BASE_36_RADIX).slice(0, ISLAND_COMPONENT_ID_LENGTH);
|
|
2745
|
+
const hasScript = descriptor.script || descriptor.scriptSetup;
|
|
2746
|
+
const compiledScript = hasScript ? compiler.compileScript(descriptor, {
|
|
2747
|
+
id: componentId,
|
|
2748
|
+
inlineTemplate: false
|
|
2749
|
+
}) : { bindings: {}, content: "export default {};" };
|
|
2750
|
+
const renderCode = descriptor.template ? compiler.compileTemplate({
|
|
2751
|
+
compilerOptions: {
|
|
2752
|
+
bindingMetadata: compiledScript.bindings,
|
|
2753
|
+
expressionPlugins: ["typescript"],
|
|
2754
|
+
prefixIdentifiers: true,
|
|
2755
|
+
isCustomElement: (tag) => tag === "absolute-island"
|
|
2756
|
+
},
|
|
2757
|
+
filename: sourcePath,
|
|
2758
|
+
id: componentId,
|
|
2759
|
+
scoped: descriptor.styles.some((styleBlock) => styleBlock.scoped),
|
|
2760
|
+
source: descriptor.template.content,
|
|
2761
|
+
ssr: true,
|
|
2762
|
+
ssrCssVars: descriptor.cssVars
|
|
2763
|
+
}).code : "const ssrRender = () => {};";
|
|
2764
|
+
const childImportPaths = extractRelativeVueImports(compiledScript.content);
|
|
2765
|
+
const compiledChildren = await Promise.all(childImportPaths.map(async (relativeImport) => ({
|
|
2766
|
+
compiledPath: await compileVueServerModule(resolve5(dirname4(sourcePath), relativeImport)),
|
|
2767
|
+
spec: relativeImport
|
|
2768
|
+
})));
|
|
2769
|
+
const strippedScript = stripExports(compiledScript.content);
|
|
2770
|
+
const transpiledScript = transpiler2.transformSync(strippedScript);
|
|
2771
|
+
const assembled = mergeVueImports([
|
|
2772
|
+
transpiledScript,
|
|
2773
|
+
renderCode,
|
|
2774
|
+
"script.ssrRender = ssrRender;",
|
|
2775
|
+
"export default script;"
|
|
2776
|
+
].join(`
|
|
2777
|
+
`));
|
|
2778
|
+
const compiledModulePath = getCachedModulePath2(sourcePath);
|
|
2779
|
+
let rewritten = assembled;
|
|
2780
|
+
for (const child of compiledChildren) {
|
|
2781
|
+
rewritten = rewritten.replaceAll(child.spec, ensureRelativeImportPath2(compiledModulePath, child.compiledPath));
|
|
2782
|
+
}
|
|
2783
|
+
await mkdir2(dirname4(compiledModulePath), { recursive: true });
|
|
2784
|
+
await writeIfChanged2(compiledModulePath, rewritten);
|
|
2785
|
+
compiledModuleCache2.set(sourcePath, compiledModulePath);
|
|
2786
|
+
return compiledModulePath;
|
|
2787
|
+
};
|
|
2788
|
+
var init_vueServerModule = __esm(() => {
|
|
2789
|
+
init_constants();
|
|
2790
|
+
serverCacheRoot2 = join5(process.cwd(), ".absolutejs", "islands", "vue");
|
|
2791
|
+
compiledModuleCache2 = new Map;
|
|
2792
|
+
transpiler2 = new Transpiler({ loader: "ts", target: "browser" });
|
|
2793
|
+
});
|
|
2794
|
+
|
|
2701
2795
|
// src/core/renderIslandMarkup.ts
|
|
2702
2796
|
var islandSequence = 0, resolvedServerComponentCache, resolvedServerBuildComponentCache, nextIslandId = () => {
|
|
2703
2797
|
islandSequence += 1;
|
|
@@ -2720,9 +2814,17 @@ var islandSequence = 0, resolvedServerComponentCache, resolvedServerBuildCompone
|
|
|
2720
2814
|
const loadPromise = loadAndCompileServerBuildComponent(buildReferencePath);
|
|
2721
2815
|
resolvedServerBuildComponentCache.set(buildReferencePath, loadPromise);
|
|
2722
2816
|
return loadPromise;
|
|
2817
|
+
}, resolveRuntimeImportTarget = async (resolvedModulePath) => {
|
|
2818
|
+
if (resolvedModulePath.endsWith(".svelte")) {
|
|
2819
|
+
return compileSvelteServerModule(resolvedModulePath);
|
|
2820
|
+
}
|
|
2821
|
+
if (resolvedModulePath.endsWith(".vue")) {
|
|
2822
|
+
return compileVueServerModule(resolvedModulePath);
|
|
2823
|
+
}
|
|
2824
|
+
return resolvedModulePath;
|
|
2723
2825
|
}, loadServerImportComponent = async (resolvedComponent, exportName) => {
|
|
2724
2826
|
const resolvedModulePath = resolvedComponent.startsWith(".") ? new URL(resolvedComponent, import.meta.url).pathname : resolvedComponent;
|
|
2725
|
-
const importTarget =
|
|
2827
|
+
const importTarget = await resolveRuntimeImportTarget(resolvedModulePath);
|
|
2726
2828
|
const loadedModule = await import(importTarget);
|
|
2727
2829
|
if (exportName && exportName !== "default" && exportName in loadedModule) {
|
|
2728
2830
|
return loadedModule[exportName];
|
|
@@ -2826,6 +2928,7 @@ var islandSequence = 0, resolvedServerComponentCache, resolvedServerBuildCompone
|
|
|
2826
2928
|
var init_renderIslandMarkup = __esm(() => {
|
|
2827
2929
|
init_islandSsr();
|
|
2828
2930
|
init_svelteServerModule();
|
|
2931
|
+
init_vueServerModule();
|
|
2829
2932
|
init_islandMarkupAttributes();
|
|
2830
2933
|
init_islands();
|
|
2831
2934
|
resolvedServerComponentCache = new Map;
|
|
@@ -3969,7 +4072,13 @@ var resolveCurrentGeneratedVueModulePath = async (pagePath) => {
|
|
|
3969
4072
|
return pagePath;
|
|
3970
4073
|
}
|
|
3971
4074
|
};
|
|
3972
|
-
var buildDirtyResponse = (headTag, indexPath, maybeProps) => {
|
|
4075
|
+
var buildDirtyResponse = (headTag, indexPath, maybeProps, clientMode) => {
|
|
4076
|
+
if (clientMode === "none") {
|
|
4077
|
+
const html2 = `<!DOCTYPE html><html>${headTag}<body><div id="root"></div>` + `</body></html>`;
|
|
4078
|
+
return new Response(html2, {
|
|
4079
|
+
headers: { "Content-Type": "text/html" }
|
|
4080
|
+
});
|
|
4081
|
+
}
|
|
3973
4082
|
const propsScript = `window.__INITIAL_PROPS__=${JSON.stringify(maybeProps ?? {})};`;
|
|
3974
4083
|
const dirtyFlag = "window.__SSR_DIRTY__=true;";
|
|
3975
4084
|
const html = `<!DOCTYPE html><html>${headTag}<body><div id="root"></div>` + `<script>${propsScript}${dirtyFlag}</script>` + `<script type="module" src="${indexPath}"></script>` + `</body></html>`;
|
|
@@ -3999,8 +4108,9 @@ var handleVuePageRequest = async (input) => {
|
|
|
3999
4108
|
const resolvedOptions = input;
|
|
4000
4109
|
const resolvedPagePath = input.pagePath;
|
|
4001
4110
|
const maybeProps = input.props;
|
|
4111
|
+
const clientMode = input.client ?? "auto";
|
|
4002
4112
|
if (isSsrCacheDirty("vue")) {
|
|
4003
|
-
return buildDirtyResponse(resolvedHeadTag, resolvedIndexPath, maybeProps);
|
|
4113
|
+
return buildDirtyResponse(resolvedHeadTag, resolvedIndexPath, maybeProps, clientMode);
|
|
4004
4114
|
}
|
|
4005
4115
|
try {
|
|
4006
4116
|
const handlerCallsite = resolvedOptions?.collectStreamingSlots === true ? undefined : getCurrentRouteRegistrationCallsite() ?? captureStreamingSlotWarningCallsite();
|
|
@@ -4057,7 +4167,7 @@ var handleVuePageRequest = async (input) => {
|
|
|
4057
4167
|
const bodyStream = renderToWebStream(app);
|
|
4058
4168
|
const { firstChunk, reader } = await primeVueStream(bodyStream);
|
|
4059
4169
|
const head = `<!DOCTYPE html><html>${resolvedHeadTag}<body><div id="root">`;
|
|
4060
|
-
const tail = `</div><script>window.__INITIAL_PROPS__=${JSON.stringify(maybeProps ?? {})}</script><script type="module" src="${resolvedIndexPath}"></script></body></html>`;
|
|
4170
|
+
const tail = clientMode === "none" ? `</div></body></html>` : `</div><script>window.__INITIAL_PROPS__=${JSON.stringify(maybeProps ?? {})}</script><script type="module" src="${resolvedIndexPath}"></script></body></html>`;
|
|
4061
4171
|
const stream = new ReadableStream({
|
|
4062
4172
|
start(controller) {
|
|
4063
4173
|
controller.enqueue(head);
|
|
@@ -4203,6 +4313,60 @@ var preserveIslandMarkup = (props) => {
|
|
|
4203
4313
|
|
|
4204
4314
|
// src/vue/Island.ts
|
|
4205
4315
|
init_islandMarkupAttributes();
|
|
4316
|
+
|
|
4317
|
+
// src/core/normalizeIslandProps.ts
|
|
4318
|
+
var EMPTY_PROPS = {};
|
|
4319
|
+
var ISLAND_FRAMEWORKS = [
|
|
4320
|
+
"react",
|
|
4321
|
+
"svelte",
|
|
4322
|
+
"vue",
|
|
4323
|
+
"angular",
|
|
4324
|
+
"ember"
|
|
4325
|
+
];
|
|
4326
|
+
var ISLAND_HYDRATE_MODES = [
|
|
4327
|
+
"load",
|
|
4328
|
+
"idle",
|
|
4329
|
+
"visible",
|
|
4330
|
+
"none"
|
|
4331
|
+
];
|
|
4332
|
+
var isIslandFramework = (value) => ISLAND_FRAMEWORKS.some((framework) => framework === value);
|
|
4333
|
+
var isIslandHydrate = (value) => ISLAND_HYDRATE_MODES.some((mode) => mode === value);
|
|
4334
|
+
var normalizeRuntimeIslandRenderProps = (raw) => {
|
|
4335
|
+
const { component, framework, hydrate, props } = raw;
|
|
4336
|
+
if (!isIslandFramework(framework)) {
|
|
4337
|
+
throw new Error(`Unknown island framework: "${framework}".`);
|
|
4338
|
+
}
|
|
4339
|
+
if (hydrate !== undefined && !isIslandHydrate(hydrate)) {
|
|
4340
|
+
throw new Error(`Unknown island hydrate mode: "${hydrate}".`);
|
|
4341
|
+
}
|
|
4342
|
+
return {
|
|
4343
|
+
component,
|
|
4344
|
+
framework,
|
|
4345
|
+
hydrate,
|
|
4346
|
+
props: normalizeIslandProps(props)
|
|
4347
|
+
};
|
|
4348
|
+
};
|
|
4349
|
+
var isPlainObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
4350
|
+
var safeJsonParseObject = (raw) => {
|
|
4351
|
+
const trimmed = raw.trim();
|
|
4352
|
+
if (!trimmed)
|
|
4353
|
+
return EMPTY_PROPS;
|
|
4354
|
+
try {
|
|
4355
|
+
const parsed = JSON.parse(trimmed);
|
|
4356
|
+
return isPlainObject(parsed) ? parsed : EMPTY_PROPS;
|
|
4357
|
+
} catch {
|
|
4358
|
+
return EMPTY_PROPS;
|
|
4359
|
+
}
|
|
4360
|
+
};
|
|
4361
|
+
var normalizeIslandProps = (value) => {
|
|
4362
|
+
if (typeof value === "string")
|
|
4363
|
+
return safeJsonParseObject(value);
|
|
4364
|
+
if (isPlainObject(value))
|
|
4365
|
+
return value;
|
|
4366
|
+
return EMPTY_PROPS;
|
|
4367
|
+
};
|
|
4368
|
+
|
|
4369
|
+
// src/vue/Island.ts
|
|
4206
4370
|
init_renderIslandMarkup();
|
|
4207
4371
|
var defineRuntimeIslandComponent = (setup) => defineComponent4({
|
|
4208
4372
|
name: "AbsoluteIsland",
|
|
@@ -4220,11 +4384,11 @@ var defineRuntimeIslandComponent = (setup) => defineComponent4({
|
|
|
4220
4384
|
type: String
|
|
4221
4385
|
},
|
|
4222
4386
|
props: {
|
|
4223
|
-
required:
|
|
4224
|
-
type: Object
|
|
4387
|
+
required: false,
|
|
4388
|
+
type: [Object, String]
|
|
4225
4389
|
}
|
|
4226
4390
|
},
|
|
4227
|
-
setup
|
|
4391
|
+
setup: (rawProps) => setup(normalizeRuntimeIslandRenderProps(rawProps))
|
|
4228
4392
|
});
|
|
4229
4393
|
var Island = defineRuntimeIslandComponent((props) => {
|
|
4230
4394
|
const isBrowser = typeof window !== "undefined";
|
|
@@ -4434,5 +4598,5 @@ export {
|
|
|
4434
4598
|
Image
|
|
4435
4599
|
};
|
|
4436
4600
|
|
|
4437
|
-
//# debugId=
|
|
4601
|
+
//# debugId=3885F1541221AF7364756E2164756E21
|
|
4438
4602
|
//# sourceMappingURL=index.js.map
|