@getforma/core 0.6.1 → 0.8.1
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/README.md +93 -8
- package/dist/chunk-3U57L2TY.cjs +38 -0
- package/dist/chunk-3U57L2TY.cjs.map +1 -0
- package/dist/{chunk-TKGUHASG.js → chunk-N522P3G6.js} +20 -12
- package/dist/chunk-N522P3G6.js.map +1 -0
- package/dist/chunk-OZCHIVAZ.js +35 -0
- package/dist/chunk-OZCHIVAZ.js.map +1 -0
- package/dist/{chunk-YSKF3VRA.cjs → chunk-YMIMKO4W.cjs} +51 -20
- package/dist/chunk-YMIMKO4W.cjs.map +1 -0
- package/dist/forma-runtime-csp.js +1 -1
- package/dist/forma-runtime.js +1 -1
- package/dist/formajs-runtime-hardened.global.js +1 -1
- package/dist/formajs-runtime-hardened.global.js.map +1 -1
- package/dist/formajs-runtime.global.js +1 -1
- package/dist/formajs-runtime.global.js.map +1 -1
- package/dist/formajs.global.js +1 -1
- package/dist/formajs.global.js.map +1 -1
- package/dist/index.cjs +112 -115
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +30 -21
- package/dist/index.d.ts +30 -21
- package/dist/index.js +25 -50
- package/dist/index.js.map +1 -1
- package/dist/runtime-hardened.cjs +106 -27
- package/dist/runtime-hardened.cjs.map +1 -1
- package/dist/runtime-hardened.js +107 -28
- package/dist/runtime-hardened.js.map +1 -1
- package/dist/runtime.cjs +128 -50
- package/dist/runtime.cjs.map +1 -1
- package/dist/runtime.js +102 -24
- package/dist/runtime.js.map +1 -1
- package/dist/signal-B4_wQJHs.d.cts +53 -0
- package/dist/signal-B4_wQJHs.d.ts +53 -0
- package/dist/ssr/index.cjs +19 -2
- package/dist/ssr/index.cjs.map +1 -1
- package/dist/ssr/index.js +19 -2
- package/dist/ssr/index.js.map +1 -1
- package/dist/tc39-compat.cjs +4 -12
- package/dist/tc39-compat.cjs.map +1 -1
- package/dist/tc39-compat.d.cts +1 -1
- package/dist/tc39-compat.d.ts +1 -1
- package/dist/tc39-compat.js +3 -11
- package/dist/tc39-compat.js.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-DPSAVBCP.js +0 -26
- package/dist/chunk-DPSAVBCP.js.map +0 -1
- package/dist/chunk-KH3F5NRU.cjs +0 -29
- package/dist/chunk-KH3F5NRU.cjs.map +0 -1
- package/dist/chunk-TKGUHASG.js.map +0 -1
- package/dist/chunk-YSKF3VRA.cjs.map +0 -1
- package/dist/signal-CfLDwMyg.d.cts +0 -29
- package/dist/signal-CfLDwMyg.d.ts +0 -29
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference path="./jsx.d.ts" />
|
|
2
|
-
import { S as SignalGetter } from './signal-
|
|
3
|
-
export { c as createSignal } from './signal-
|
|
2
|
+
import { S as SignalGetter } from './signal-B4_wQJHs.cjs';
|
|
3
|
+
export { c as createSignal } from './signal-B4_wQJHs.cjs';
|
|
4
|
+
export { getBatchDepth, isComputed, isEffect, isEffectScope, isSignal, trigger } from 'alien-signals';
|
|
4
5
|
|
|
5
6
|
declare function createEffect(fn: () => void | (() => void)): () => void;
|
|
6
7
|
|
|
@@ -21,6 +22,9 @@ declare function createEffect(fn: () => void | (() => void)): () => void;
|
|
|
21
22
|
* SolidJS's createMemo. Both createComputed and createMemo in FormaJS
|
|
22
23
|
* are identical.
|
|
23
24
|
*
|
|
25
|
+
* The getter receives the previous value as an argument, enabling
|
|
26
|
+
* efficient diffing patterns without a separate signal:
|
|
27
|
+
*
|
|
24
28
|
* ```ts
|
|
25
29
|
* const [count, setCount] = createSignal(0);
|
|
26
30
|
* const doubled = createComputed(() => count() * 2);
|
|
@@ -28,8 +32,18 @@ declare function createEffect(fn: () => void | (() => void)): () => void;
|
|
|
28
32
|
* setCount(5);
|
|
29
33
|
* console.log(doubled()); // 10
|
|
30
34
|
* ```
|
|
35
|
+
*
|
|
36
|
+
* With previous value (for diffing):
|
|
37
|
+
*
|
|
38
|
+
* ```ts
|
|
39
|
+
* const changes = createComputed((prev) => {
|
|
40
|
+
* const next = items();
|
|
41
|
+
* if (prev) console.log(`changed from ${prev.length} to ${next.length} items`);
|
|
42
|
+
* return next;
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
31
45
|
*/
|
|
32
|
-
declare function createComputed<T>(fn: () => T): () => T;
|
|
46
|
+
declare function createComputed<T>(fn: (previousValue?: T) => T): () => T;
|
|
33
47
|
|
|
34
48
|
/**
|
|
35
49
|
* Forma Reactive - Memo
|
|
@@ -116,13 +130,17 @@ declare function untrack<T>(fn: () => T): T;
|
|
|
116
130
|
* Explicit reactive ownership scope. All effects created inside a root
|
|
117
131
|
* are automatically disposed when the root is torn down.
|
|
118
132
|
*
|
|
119
|
-
*
|
|
133
|
+
* Uses alien-signals' `effectScope` under the hood for native graph-level
|
|
134
|
+
* effect tracking, with a userland disposer list for non-effect cleanup
|
|
135
|
+
* (e.g., event listeners, DOM references, timers).
|
|
120
136
|
*/
|
|
121
137
|
/**
|
|
122
138
|
* Create a reactive root scope.
|
|
123
139
|
*
|
|
124
|
-
* All effects created (via `createEffect`) inside the callback are tracked
|
|
125
|
-
*
|
|
140
|
+
* All effects created (via `createEffect`) inside the callback are tracked
|
|
141
|
+
* at both the reactive graph level (via alien-signals effectScope) and the
|
|
142
|
+
* userland level (via registerDisposer). The returned `dispose` function
|
|
143
|
+
* tears down everything.
|
|
126
144
|
*
|
|
127
145
|
* ```ts
|
|
128
146
|
* const dispose = createRoot(() => {
|
|
@@ -898,6 +916,11 @@ type StoreSetter<T extends object> = (partial: Partial<T> | ((prev: T) => Partia
|
|
|
898
916
|
* // Array mutations
|
|
899
917
|
* state.items.push({ text: 'Walk dog', done: false });
|
|
900
918
|
* ```
|
|
919
|
+
*
|
|
920
|
+
* **Limitation:** `Object.keys(state)`, `for...in`, and spread (`{...state}`)
|
|
921
|
+
* are NOT reactive. Adding or removing a property will not trigger effects
|
|
922
|
+
* that iterated over keys. Use signals or explicit arrays for collections
|
|
923
|
+
* that need to react to membership changes.
|
|
901
924
|
*/
|
|
902
925
|
declare function createStore<T extends object>(initial: T): [get: T, set: StoreSetter<T>];
|
|
903
926
|
|
|
@@ -1425,18 +1448,4 @@ declare function createRPCMiddleware(): (req: {
|
|
|
1425
1448
|
};
|
|
1426
1449
|
}) => Promise<void>;
|
|
1427
1450
|
|
|
1428
|
-
|
|
1429
|
-
interface Window {
|
|
1430
|
-
__FORMA_WASM__?: {
|
|
1431
|
-
loader: string;
|
|
1432
|
-
binary: string;
|
|
1433
|
-
ir: string;
|
|
1434
|
-
};
|
|
1435
|
-
}
|
|
1436
|
-
}
|
|
1437
|
-
/** Full page render via WASM. */
|
|
1438
|
-
declare function renderLocal(slotsJson: string): Promise<string>;
|
|
1439
|
-
/** Fragment render (single island) via WASM. */
|
|
1440
|
-
declare function renderIsland(slotsJson: string, islandId: number): Promise<string>;
|
|
1441
|
-
|
|
1442
|
-
export { $, $$, $$serverFunction, type Action, type ActionOptions, Fragment, type IslandHydrateFn, type MutationResponse, type RPCRequest, type RPCResponse, activateIslands, addClass, applyRevalidation, batch, children, cleanup, closest, createAction, createBus, createComputed, createContext, createEffect, createErrorBoundary, createFetch, createHistory, createIndexedDB, createList, createLocalStorage, createMemo, createPortal, createRPCMiddleware, createReducer, createRef, createResource, createRoot, createSSE, createSessionStorage, createShow, createStore, createSuspense, createSwitch, createText, createWebSocket, deactivateAllIslands, deactivateIsland, defineComponent, delegate, disposeComponent, enableAutoRevalidation, fetchJSON, fragment, getRegisteredEndpoints, getServerFunction, h, handleRPC, hydrateIsland, inject, mount, nextSibling, on, onCleanup, onError, onIntersect, onKey, onMount, onMutation, onResize, onUnmount, parent, persist, prevSibling, provide, reconcileList, registerResource, registerServerFunction, removeClass, renderIsland, renderLocal, setAttr, setHTML, setHTMLUnsafe, setStyle, setText, siblings, toggleClass, trackDisposer, unprovide, unregisterResource, untrack, withRevalidation };
|
|
1451
|
+
export { $, $$, $$serverFunction, type Action, type ActionOptions, Fragment, type IslandHydrateFn, type MutationResponse, type RPCRequest, type RPCResponse, activateIslands, addClass, applyRevalidation, batch, children, cleanup, closest, createAction, createBus, createComputed, createContext, createEffect, createErrorBoundary, createFetch, createHistory, createIndexedDB, createList, createLocalStorage, createMemo, createPortal, createRPCMiddleware, createReducer, createRef, createResource, createRoot, createSSE, createSessionStorage, createShow, createStore, createSuspense, createSwitch, createText, createWebSocket, deactivateAllIslands, deactivateIsland, defineComponent, delegate, disposeComponent, enableAutoRevalidation, fetchJSON, fragment, getRegisteredEndpoints, getServerFunction, h, handleRPC, hydrateIsland, inject, mount, nextSibling, on, onCleanup, onError, onIntersect, onKey, onMount, onMutation, onResize, onUnmount, parent, persist, prevSibling, provide, reconcileList, registerResource, registerServerFunction, removeClass, setAttr, setHTML, setHTMLUnsafe, setStyle, setText, siblings, toggleClass, trackDisposer, unprovide, unregisterResource, untrack, withRevalidation };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference path="./jsx.d.ts" />
|
|
2
|
-
import { S as SignalGetter } from './signal-
|
|
3
|
-
export { c as createSignal } from './signal-
|
|
2
|
+
import { S as SignalGetter } from './signal-B4_wQJHs.js';
|
|
3
|
+
export { c as createSignal } from './signal-B4_wQJHs.js';
|
|
4
|
+
export { getBatchDepth, isComputed, isEffect, isEffectScope, isSignal, trigger } from 'alien-signals';
|
|
4
5
|
|
|
5
6
|
declare function createEffect(fn: () => void | (() => void)): () => void;
|
|
6
7
|
|
|
@@ -21,6 +22,9 @@ declare function createEffect(fn: () => void | (() => void)): () => void;
|
|
|
21
22
|
* SolidJS's createMemo. Both createComputed and createMemo in FormaJS
|
|
22
23
|
* are identical.
|
|
23
24
|
*
|
|
25
|
+
* The getter receives the previous value as an argument, enabling
|
|
26
|
+
* efficient diffing patterns without a separate signal:
|
|
27
|
+
*
|
|
24
28
|
* ```ts
|
|
25
29
|
* const [count, setCount] = createSignal(0);
|
|
26
30
|
* const doubled = createComputed(() => count() * 2);
|
|
@@ -28,8 +32,18 @@ declare function createEffect(fn: () => void | (() => void)): () => void;
|
|
|
28
32
|
* setCount(5);
|
|
29
33
|
* console.log(doubled()); // 10
|
|
30
34
|
* ```
|
|
35
|
+
*
|
|
36
|
+
* With previous value (for diffing):
|
|
37
|
+
*
|
|
38
|
+
* ```ts
|
|
39
|
+
* const changes = createComputed((prev) => {
|
|
40
|
+
* const next = items();
|
|
41
|
+
* if (prev) console.log(`changed from ${prev.length} to ${next.length} items`);
|
|
42
|
+
* return next;
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
31
45
|
*/
|
|
32
|
-
declare function createComputed<T>(fn: () => T): () => T;
|
|
46
|
+
declare function createComputed<T>(fn: (previousValue?: T) => T): () => T;
|
|
33
47
|
|
|
34
48
|
/**
|
|
35
49
|
* Forma Reactive - Memo
|
|
@@ -116,13 +130,17 @@ declare function untrack<T>(fn: () => T): T;
|
|
|
116
130
|
* Explicit reactive ownership scope. All effects created inside a root
|
|
117
131
|
* are automatically disposed when the root is torn down.
|
|
118
132
|
*
|
|
119
|
-
*
|
|
133
|
+
* Uses alien-signals' `effectScope` under the hood for native graph-level
|
|
134
|
+
* effect tracking, with a userland disposer list for non-effect cleanup
|
|
135
|
+
* (e.g., event listeners, DOM references, timers).
|
|
120
136
|
*/
|
|
121
137
|
/**
|
|
122
138
|
* Create a reactive root scope.
|
|
123
139
|
*
|
|
124
|
-
* All effects created (via `createEffect`) inside the callback are tracked
|
|
125
|
-
*
|
|
140
|
+
* All effects created (via `createEffect`) inside the callback are tracked
|
|
141
|
+
* at both the reactive graph level (via alien-signals effectScope) and the
|
|
142
|
+
* userland level (via registerDisposer). The returned `dispose` function
|
|
143
|
+
* tears down everything.
|
|
126
144
|
*
|
|
127
145
|
* ```ts
|
|
128
146
|
* const dispose = createRoot(() => {
|
|
@@ -898,6 +916,11 @@ type StoreSetter<T extends object> = (partial: Partial<T> | ((prev: T) => Partia
|
|
|
898
916
|
* // Array mutations
|
|
899
917
|
* state.items.push({ text: 'Walk dog', done: false });
|
|
900
918
|
* ```
|
|
919
|
+
*
|
|
920
|
+
* **Limitation:** `Object.keys(state)`, `for...in`, and spread (`{...state}`)
|
|
921
|
+
* are NOT reactive. Adding or removing a property will not trigger effects
|
|
922
|
+
* that iterated over keys. Use signals or explicit arrays for collections
|
|
923
|
+
* that need to react to membership changes.
|
|
901
924
|
*/
|
|
902
925
|
declare function createStore<T extends object>(initial: T): [get: T, set: StoreSetter<T>];
|
|
903
926
|
|
|
@@ -1425,18 +1448,4 @@ declare function createRPCMiddleware(): (req: {
|
|
|
1425
1448
|
};
|
|
1426
1449
|
}) => Promise<void>;
|
|
1427
1450
|
|
|
1428
|
-
|
|
1429
|
-
interface Window {
|
|
1430
|
-
__FORMA_WASM__?: {
|
|
1431
|
-
loader: string;
|
|
1432
|
-
binary: string;
|
|
1433
|
-
ir: string;
|
|
1434
|
-
};
|
|
1435
|
-
}
|
|
1436
|
-
}
|
|
1437
|
-
/** Full page render via WASM. */
|
|
1438
|
-
declare function renderLocal(slotsJson: string): Promise<string>;
|
|
1439
|
-
/** Fragment render (single island) via WASM. */
|
|
1440
|
-
declare function renderIsland(slotsJson: string, islandId: number): Promise<string>;
|
|
1441
|
-
|
|
1442
|
-
export { $, $$, $$serverFunction, type Action, type ActionOptions, Fragment, type IslandHydrateFn, type MutationResponse, type RPCRequest, type RPCResponse, activateIslands, addClass, applyRevalidation, batch, children, cleanup, closest, createAction, createBus, createComputed, createContext, createEffect, createErrorBoundary, createFetch, createHistory, createIndexedDB, createList, createLocalStorage, createMemo, createPortal, createRPCMiddleware, createReducer, createRef, createResource, createRoot, createSSE, createSessionStorage, createShow, createStore, createSuspense, createSwitch, createText, createWebSocket, deactivateAllIslands, deactivateIsland, defineComponent, delegate, disposeComponent, enableAutoRevalidation, fetchJSON, fragment, getRegisteredEndpoints, getServerFunction, h, handleRPC, hydrateIsland, inject, mount, nextSibling, on, onCleanup, onError, onIntersect, onKey, onMount, onMutation, onResize, onUnmount, parent, persist, prevSibling, provide, reconcileList, registerResource, registerServerFunction, removeClass, renderIsland, renderLocal, setAttr, setHTML, setHTMLUnsafe, setStyle, setText, siblings, toggleClass, trackDisposer, unprovide, unregisterResource, untrack, withRevalidation };
|
|
1451
|
+
export { $, $$, $$serverFunction, type Action, type ActionOptions, Fragment, type IslandHydrateFn, type MutationResponse, type RPCRequest, type RPCResponse, activateIslands, addClass, applyRevalidation, batch, children, cleanup, closest, createAction, createBus, createComputed, createContext, createEffect, createErrorBoundary, createFetch, createHistory, createIndexedDB, createList, createLocalStorage, createMemo, createPortal, createRPCMiddleware, createReducer, createRef, createResource, createRoot, createSSE, createSessionStorage, createShow, createStore, createSuspense, createSwitch, createText, createWebSocket, deactivateAllIslands, deactivateIsland, defineComponent, delegate, disposeComponent, enableAutoRevalidation, fetchJSON, fragment, getRegisteredEndpoints, getServerFunction, h, handleRPC, hydrateIsland, inject, mount, nextSibling, on, onCleanup, onError, onIntersect, onKey, onMount, onMutation, onResize, onUnmount, parent, persist, prevSibling, provide, reconcileList, registerResource, registerServerFunction, removeClass, setAttr, setHTML, setHTMLUnsafe, setStyle, setText, siblings, toggleClass, trackDisposer, unprovide, unregisterResource, untrack, withRevalidation };
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { internalEffect, createRoot, hydrateIsland, untrack, createEffect, pushSuspenseContext, popSuspenseContext, __DEV__, reportError, batch } from './chunk-
|
|
2
|
-
export { Fragment, batch, cleanup, createEffect, createList, createMemo, createReducer, createRef, createResource, createRoot, createShow, fragment, h, hydrateIsland, on, onCleanup, onError, reconcileList, untrack } from './chunk-
|
|
3
|
-
import { createSignal } from './chunk-
|
|
4
|
-
export { createComputed, createSignal } from './chunk-
|
|
1
|
+
import { internalEffect, createRoot, hydrateIsland, untrack, createEffect, pushSuspenseContext, popSuspenseContext, __DEV__, reportError, batch } from './chunk-N522P3G6.js';
|
|
2
|
+
export { Fragment, batch, cleanup, createEffect, createList, createMemo, createReducer, createRef, createResource, createRoot, createShow, fragment, getBatchDepth, h, hydrateIsland, isComputed, isEffect, isEffectScope, isSignal, on, onCleanup, onError, reconcileList, trigger, untrack } from './chunk-N522P3G6.js';
|
|
3
|
+
import { createSignal } from './chunk-OZCHIVAZ.js';
|
|
4
|
+
export { createComputed, createSignal } from './chunk-OZCHIVAZ.js';
|
|
5
5
|
|
|
6
6
|
// src/dom/text.ts
|
|
7
7
|
function createText(value) {
|
|
@@ -219,13 +219,20 @@ function createSuspense(fallback, children2) {
|
|
|
219
219
|
}
|
|
220
220
|
|
|
221
221
|
// src/dom/activate.ts
|
|
222
|
+
var FORBIDDEN_PROP_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
|
|
223
|
+
function sanitizeProps(obj) {
|
|
224
|
+
for (const key of FORBIDDEN_PROP_KEYS) {
|
|
225
|
+
if (key in obj) delete obj[key];
|
|
226
|
+
}
|
|
227
|
+
return obj;
|
|
228
|
+
}
|
|
222
229
|
function loadIslandProps(root, id, sharedProps) {
|
|
223
230
|
const inline = root.getAttribute("data-forma-props");
|
|
224
231
|
if (inline) {
|
|
225
|
-
return JSON.parse(inline);
|
|
232
|
+
return sanitizeProps(JSON.parse(inline));
|
|
226
233
|
}
|
|
227
234
|
if (sharedProps && String(id) in sharedProps) {
|
|
228
|
-
return sharedProps[String(id)];
|
|
235
|
+
return sanitizeProps(sharedProps[String(id)]);
|
|
229
236
|
}
|
|
230
237
|
return null;
|
|
231
238
|
}
|
|
@@ -242,8 +249,8 @@ function activateIslands(registry2) {
|
|
|
242
249
|
root.setAttribute("data-forma-status", "error");
|
|
243
250
|
continue;
|
|
244
251
|
}
|
|
245
|
-
const
|
|
246
|
-
if (
|
|
252
|
+
const trigger2 = root.getAttribute("data-forma-hydrate") || "load";
|
|
253
|
+
if (trigger2 === "visible") {
|
|
247
254
|
const observer = new IntersectionObserver(
|
|
248
255
|
(entries) => {
|
|
249
256
|
for (const entry of entries) {
|
|
@@ -255,14 +262,14 @@ function activateIslands(registry2) {
|
|
|
255
262
|
{ rootMargin: "200px" }
|
|
256
263
|
);
|
|
257
264
|
observer.observe(root);
|
|
258
|
-
} else if (
|
|
265
|
+
} else if (trigger2 === "idle") {
|
|
259
266
|
const hydrate = () => hydrateIslandRoot(root, id, componentName, hydrateFn, sharedProps);
|
|
260
267
|
if (typeof requestIdleCallback === "function") {
|
|
261
268
|
requestIdleCallback(hydrate);
|
|
262
269
|
} else {
|
|
263
270
|
setTimeout(hydrate, 200);
|
|
264
271
|
}
|
|
265
|
-
} else if (
|
|
272
|
+
} else if (trigger2 === "interaction") {
|
|
266
273
|
const hydrate = () => {
|
|
267
274
|
root.removeEventListener("pointerdown", hydrate, true);
|
|
268
275
|
root.removeEventListener("focusin", hydrate, true);
|
|
@@ -445,13 +452,15 @@ function shouldWrap(v) {
|
|
|
445
452
|
if (v[PROXY]) return false;
|
|
446
453
|
return true;
|
|
447
454
|
}
|
|
448
|
-
function deepClone(obj) {
|
|
449
|
-
if (obj
|
|
450
|
-
if (
|
|
451
|
-
if (obj
|
|
455
|
+
function deepClone(obj, seen) {
|
|
456
|
+
if (obj === null || typeof obj !== "object") return obj;
|
|
457
|
+
if (!seen) seen = /* @__PURE__ */ new WeakSet();
|
|
458
|
+
if (seen.has(obj)) return obj;
|
|
459
|
+
seen.add(obj);
|
|
460
|
+
if (Array.isArray(obj)) return obj.map((item) => deepClone(item, seen));
|
|
452
461
|
const out = {};
|
|
453
462
|
for (const key of Object.keys(obj)) {
|
|
454
|
-
out[key] = deepClone(obj[key]);
|
|
463
|
+
out[key] = deepClone(obj[key], seen);
|
|
455
464
|
}
|
|
456
465
|
return out;
|
|
457
466
|
}
|
|
@@ -1502,40 +1511,6 @@ function createRPCMiddleware() {
|
|
|
1502
1511
|
};
|
|
1503
1512
|
}
|
|
1504
1513
|
|
|
1505
|
-
|
|
1506
|
-
var wasmModule = null;
|
|
1507
|
-
var irCache = /* @__PURE__ */ new Map();
|
|
1508
|
-
async function ensureWasm() {
|
|
1509
|
-
if (wasmModule) return wasmModule;
|
|
1510
|
-
const config = window.__FORMA_WASM__;
|
|
1511
|
-
if (!config) throw new Error("No __FORMA_WASM__ config");
|
|
1512
|
-
const mod = await import(
|
|
1513
|
-
/* @vite-ignore */
|
|
1514
|
-
config.loader
|
|
1515
|
-
);
|
|
1516
|
-
await mod.default(config.binary);
|
|
1517
|
-
wasmModule = mod;
|
|
1518
|
-
return wasmModule;
|
|
1519
|
-
}
|
|
1520
|
-
async function getIR() {
|
|
1521
|
-
const config = window.__FORMA_WASM__;
|
|
1522
|
-
if (!config) throw new Error("No __FORMA_WASM__ config");
|
|
1523
|
-
const cached = irCache.get(config.ir);
|
|
1524
|
-
if (cached) return cached;
|
|
1525
|
-
const response = await fetch(config.ir);
|
|
1526
|
-
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
1527
|
-
irCache.set(config.ir, bytes);
|
|
1528
|
-
return bytes;
|
|
1529
|
-
}
|
|
1530
|
-
async function renderLocal(slotsJson) {
|
|
1531
|
-
const [wasm, ir] = await Promise.all([ensureWasm(), getIR()]);
|
|
1532
|
-
return wasm.render(ir, slotsJson);
|
|
1533
|
-
}
|
|
1534
|
-
async function renderIsland(slotsJson, islandId) {
|
|
1535
|
-
const [wasm, ir] = await Promise.all([ensureWasm(), getIR()]);
|
|
1536
|
-
return wasm.render_island(ir, slotsJson, islandId);
|
|
1537
|
-
}
|
|
1538
|
-
|
|
1539
|
-
export { $, $$, $$serverFunction, activateIslands, addClass, applyRevalidation, children, closest, createAction, createBus, createContext, createErrorBoundary, createFetch, createHistory, createIndexedDB, createLocalStorage, createPortal, createRPCMiddleware, createSSE, createSessionStorage, createStore, createSuspense, createSwitch, createText, createWebSocket, deactivateAllIslands, deactivateIsland, defineComponent, delegate, disposeComponent, enableAutoRevalidation, fetchJSON, getRegisteredEndpoints, getServerFunction, handleRPC, inject, mount, nextSibling, onIntersect, onKey, onMount, onMutation, onResize, onUnmount, parent, persist, prevSibling, provide, registerResource, registerServerFunction, removeClass, renderIsland, renderLocal, setAttr, setHTML, setHTMLUnsafe, setStyle, setText, siblings, toggleClass, trackDisposer, unprovide, unregisterResource, withRevalidation };
|
|
1514
|
+
export { $, $$, $$serverFunction, activateIslands, addClass, applyRevalidation, children, closest, createAction, createBus, createContext, createErrorBoundary, createFetch, createHistory, createIndexedDB, createLocalStorage, createPortal, createRPCMiddleware, createSSE, createSessionStorage, createStore, createSuspense, createSwitch, createText, createWebSocket, deactivateAllIslands, deactivateIsland, defineComponent, delegate, disposeComponent, enableAutoRevalidation, fetchJSON, getRegisteredEndpoints, getServerFunction, handleRPC, inject, mount, nextSibling, onIntersect, onKey, onMount, onMutation, onResize, onUnmount, parent, persist, prevSibling, provide, registerResource, registerServerFunction, removeClass, setAttr, setHTML, setHTMLUnsafe, setStyle, setText, siblings, toggleClass, trackDisposer, unprovide, unregisterResource, withRevalidation };
|
|
1540
1515
|
//# sourceMappingURL=index.js.map
|
|
1541
1516
|
//# sourceMappingURL=index.js.map
|