@getforma/core 1.0.9 → 1.1.0
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 +1 -1
- package/dist/chunk-263HW3KN.cjs +35 -0
- package/dist/chunk-263HW3KN.cjs.map +1 -0
- package/dist/chunk-2QQBKQIF.js +30 -0
- package/dist/chunk-2QQBKQIF.js.map +1 -0
- package/dist/{chunk-6FW5E54W.cjs → chunk-2Y5US35K.cjs} +127 -103
- package/dist/chunk-2Y5US35K.cjs.map +1 -0
- package/dist/{chunk-3G7ET4O5.js → chunk-INNOI6TG.js} +121 -94
- package/dist/chunk-INNOI6TG.js.map +1 -0
- package/dist/{chunk-T33QUD2Y.cjs → chunk-JRQNDXX7.cjs} +43 -43
- package/dist/{chunk-T33QUD2Y.cjs.map → chunk-JRQNDXX7.cjs.map} +1 -1
- package/dist/{chunk-AFRFF7XL.js → chunk-MIOMT2CB.js} +4 -4
- package/dist/{chunk-AFRFF7XL.js.map → chunk-MIOMT2CB.js.map} +1 -1
- package/dist/chunk-W7OUWVRA.cjs +106 -0
- package/dist/chunk-W7OUWVRA.cjs.map +1 -0
- package/dist/chunk-XLVBYXOU.js +100 -0
- package/dist/chunk-XLVBYXOU.js.map +1 -0
- package/dist/forma-runtime-csp.js +92 -6
- package/dist/forma-runtime.js +138 -12
- package/dist/formajs-runtime-hardened.global.js +92 -6
- package/dist/formajs-runtime-hardened.global.js.map +1 -1
- package/dist/formajs-runtime.global.js +138 -12
- package/dist/formajs-runtime.global.js.map +1 -1
- package/dist/formajs.global.js +192 -95
- package/dist/formajs.global.js.map +1 -1
- package/dist/http.cjs +11 -11
- package/dist/http.js +2 -2
- package/dist/index.cjs +66 -66
- package/dist/index.d.cts +11 -25
- package/dist/index.d.ts +11 -25
- package/dist/index.js +6 -6
- package/dist/{resource-DeEzxUz6.d.cts → resource-D6HfVgiA.d.cts} +7 -2
- package/dist/{resource-BHsgURy0.d.ts → resource-ljs2X5NM.d.ts} +7 -2
- package/dist/runtime-hardened.cjs +93 -5
- package/dist/runtime-hardened.cjs.map +1 -1
- package/dist/runtime-hardened.js +93 -5
- package/dist/runtime-hardened.js.map +1 -1
- package/dist/runtime.cjs +47 -31
- package/dist/runtime.cjs.map +1 -1
- package/dist/runtime.js +21 -5
- package/dist/runtime.js.map +1 -1
- package/dist/server.cjs +7 -7
- package/dist/server.d.cts +2 -2
- package/dist/server.d.ts +2 -2
- package/dist/server.js +2 -2
- package/dist/{signal-C9v4akyJ.d.cts → signal-CRBJYQ6B.d.cts} +0 -8
- package/dist/{signal-C9v4akyJ.d.ts → signal-CRBJYQ6B.d.ts} +0 -8
- package/dist/ssr/index.cjs +23 -42
- package/dist/ssr/index.cjs.map +1 -1
- package/dist/ssr/index.js +23 -42
- package/dist/ssr/index.js.map +1 -1
- package/dist/tc39-compat.cjs +3 -6
- 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 +1 -4
- package/dist/tc39-compat.js.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-3G7ET4O5.js.map +0 -1
- package/dist/chunk-6FW5E54W.cjs.map +0 -1
- package/dist/chunk-HLM5BZZQ.js +0 -35
- package/dist/chunk-HLM5BZZQ.js.map +0 -1
- package/dist/chunk-QLPCVK7C.cjs +0 -38
- package/dist/chunk-QLPCVK7C.cjs.map +0 -1
package/dist/runtime.cjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkJRQNDXX7_cjs = require('./chunk-JRQNDXX7.cjs');
|
|
4
|
+
var chunk263HW3KN_cjs = require('./chunk-263HW3KN.cjs');
|
|
5
|
+
var chunk2Y5US35K_cjs = require('./chunk-2Y5US35K.cjs');
|
|
6
|
+
var chunkW7OUWVRA_cjs = require('./chunk-W7OUWVRA.cjs');
|
|
6
7
|
|
|
7
8
|
// src/dom/reconcile.ts
|
|
8
9
|
function getBindTargets(el) {
|
|
@@ -335,6 +336,11 @@ function createReconciler(config) {
|
|
|
335
336
|
}
|
|
336
337
|
|
|
337
338
|
// src/runtime.ts
|
|
339
|
+
function isUnsafeAttrBinding(name, value) {
|
|
340
|
+
if (chunk263HW3KN_cjs.isEventHandlerAttr(name)) return true;
|
|
341
|
+
if (chunk263HW3KN_cjs.isUrlAttr(name) && chunk263HW3KN_cjs.isDangerousUrl(value)) return true;
|
|
342
|
+
return false;
|
|
343
|
+
}
|
|
338
344
|
var _refetchRegistry = /* @__PURE__ */ new Map();
|
|
339
345
|
function $refetch(id) {
|
|
340
346
|
const fn = _refetchRegistry.get(id);
|
|
@@ -968,7 +974,7 @@ function parseIfHandler(expr, scope) {
|
|
|
968
974
|
}
|
|
969
975
|
if (rest.length > 0) return null;
|
|
970
976
|
return (e) => {
|
|
971
|
-
|
|
977
|
+
chunk2Y5US35K_cjs.batch(() => {
|
|
972
978
|
if (condExpr()) thenHandler(e);
|
|
973
979
|
else elseHandler?.(e);
|
|
974
980
|
});
|
|
@@ -1337,7 +1343,12 @@ function cloneAttributeTemplates(el, item) {
|
|
|
1337
1343
|
if (attr.value.includes("{item")) {
|
|
1338
1344
|
const compiled = compileTemplate(attr.value);
|
|
1339
1345
|
entries.push({ attr: attr.name, compiled });
|
|
1340
|
-
|
|
1346
|
+
const value = evaluateCompiledTemplate(compiled, item);
|
|
1347
|
+
if (isUnsafeAttrBinding(attr.name, value)) {
|
|
1348
|
+
node.removeAttribute(attr.name);
|
|
1349
|
+
} else {
|
|
1350
|
+
node.setAttribute(attr.name, value);
|
|
1351
|
+
}
|
|
1341
1352
|
}
|
|
1342
1353
|
}
|
|
1343
1354
|
if (entries.length > 0) {
|
|
@@ -1717,7 +1728,7 @@ function parseHandler(expr, scope) {
|
|
|
1717
1728
|
const handlers = stmts.map((s) => parseHandler(s, scope));
|
|
1718
1729
|
if (handlers.every((h) => h !== null)) {
|
|
1719
1730
|
return (e) => {
|
|
1720
|
-
|
|
1731
|
+
chunk2Y5US35K_cjs.batch(() => {
|
|
1721
1732
|
for (const h of handlers) h(e);
|
|
1722
1733
|
});
|
|
1723
1734
|
};
|
|
@@ -1730,7 +1741,7 @@ function parseHandler(expr, scope) {
|
|
|
1730
1741
|
const name = incrMatch[1];
|
|
1731
1742
|
const op = incrMatch[2];
|
|
1732
1743
|
return () => {
|
|
1733
|
-
|
|
1744
|
+
chunk2Y5US35K_cjs.batch(() => {
|
|
1734
1745
|
const val = scope.getters[name]?.() ?? 0;
|
|
1735
1746
|
scope.setters[name]?.(op === "++" ? val + 1 : val - 1);
|
|
1736
1747
|
});
|
|
@@ -1741,7 +1752,7 @@ function parseHandler(expr, scope) {
|
|
|
1741
1752
|
const op = preIncrMatch[1];
|
|
1742
1753
|
const name = preIncrMatch[2];
|
|
1743
1754
|
return () => {
|
|
1744
|
-
|
|
1755
|
+
chunk2Y5US35K_cjs.batch(() => {
|
|
1745
1756
|
const val = scope.getters[name]?.() ?? 0;
|
|
1746
1757
|
scope.setters[name]?.(op === "++" ? val + 1 : val - 1);
|
|
1747
1758
|
});
|
|
@@ -1751,7 +1762,7 @@ function parseHandler(expr, scope) {
|
|
|
1751
1762
|
if (toggleMatch && toggleMatch[1] === toggleMatch[2]) {
|
|
1752
1763
|
const name = toggleMatch[1];
|
|
1753
1764
|
return () => {
|
|
1754
|
-
|
|
1765
|
+
chunk2Y5US35K_cjs.batch(() => {
|
|
1755
1766
|
scope.setters[name]?.(!scope.getters[name]?.());
|
|
1756
1767
|
});
|
|
1757
1768
|
};
|
|
@@ -1763,7 +1774,7 @@ function parseHandler(expr, scope) {
|
|
|
1763
1774
|
if (valExpr) {
|
|
1764
1775
|
if (_debug) dbg(`parseHandler: assignment "${name} = ..." \u2014 setter exists:`, !!scope.setters[name], ", getter exists:", !!scope.getters[name]);
|
|
1765
1776
|
return () => {
|
|
1766
|
-
|
|
1777
|
+
chunk2Y5US35K_cjs.batch(() => {
|
|
1767
1778
|
const val = valExpr();
|
|
1768
1779
|
if (_debug) dbg(`SETTER: ${name} = ${val} (was: ${scope.getters[name]?.()})`);
|
|
1769
1780
|
scope.setters[name]?.(val);
|
|
@@ -1778,7 +1789,7 @@ function parseHandler(expr, scope) {
|
|
|
1778
1789
|
const valExpr = parseExpression(compoundMatch[3].trim(), scope);
|
|
1779
1790
|
if (valExpr) {
|
|
1780
1791
|
return () => {
|
|
1781
|
-
|
|
1792
|
+
chunk2Y5US35K_cjs.batch(() => {
|
|
1782
1793
|
const current = scope.getters[name]?.() ?? 0;
|
|
1783
1794
|
const val = valExpr();
|
|
1784
1795
|
switch (op) {
|
|
@@ -1859,7 +1870,7 @@ function buildHandler(expr, scope) {
|
|
|
1859
1870
|
}
|
|
1860
1871
|
});
|
|
1861
1872
|
const unsafeHandler = (e) => {
|
|
1862
|
-
|
|
1873
|
+
chunk2Y5US35K_cjs.batch(() => fn(proxy, e, e));
|
|
1863
1874
|
};
|
|
1864
1875
|
const result = {
|
|
1865
1876
|
handler: unsafeHandler,
|
|
@@ -1907,7 +1918,7 @@ function initScope(stateEl) {
|
|
|
1907
1918
|
const getters = {};
|
|
1908
1919
|
const setters = {};
|
|
1909
1920
|
for (const [key, initial] of Object.entries(state)) {
|
|
1910
|
-
const [get, set] =
|
|
1921
|
+
const [get, set] = chunkW7OUWVRA_cjs.createSignal(initial);
|
|
1911
1922
|
getters[key] = get;
|
|
1912
1923
|
setters[key] = set;
|
|
1913
1924
|
}
|
|
@@ -2019,7 +2030,7 @@ function bindElement(el, scope, disposers) {
|
|
|
2019
2030
|
const prevGetter = scope.getters[name];
|
|
2020
2031
|
delete scope.getters[name];
|
|
2021
2032
|
const evaluate = buildEvaluator(`{${expr}}`, scope);
|
|
2022
|
-
const getter =
|
|
2033
|
+
const getter = chunkW7OUWVRA_cjs.createComputed(evaluate);
|
|
2023
2034
|
scope.getters[name] = getter;
|
|
2024
2035
|
if (!prevGetter) {
|
|
2025
2036
|
delete scope.setters[name];
|
|
@@ -2030,7 +2041,7 @@ function bindElement(el, scope, disposers) {
|
|
|
2030
2041
|
const textExpr = !known || known.has("data-text") ? el.getAttribute("data-text") : null;
|
|
2031
2042
|
if (textExpr) {
|
|
2032
2043
|
const evaluate = buildEvaluator(textExpr, scope);
|
|
2033
|
-
const dispose =
|
|
2044
|
+
const dispose = chunk2Y5US35K_cjs.internalEffect(() => {
|
|
2034
2045
|
setElementTextFast(el, toTextValue(evaluate()));
|
|
2035
2046
|
});
|
|
2036
2047
|
disposers.push(dispose);
|
|
@@ -2045,7 +2056,7 @@ function bindElement(el, scope, disposers) {
|
|
|
2045
2056
|
dbg(`bindElement: data-show="${showExpr}" on <${tag}${cls}>`);
|
|
2046
2057
|
}
|
|
2047
2058
|
let initialized = false;
|
|
2048
|
-
const dispose =
|
|
2059
|
+
const dispose = chunk2Y5US35K_cjs.internalEffect(() => {
|
|
2049
2060
|
const visible = !!evaluate();
|
|
2050
2061
|
if (_debug) dbg(`data-show effect: "${showExpr}" \u2192 ${visible}`);
|
|
2051
2062
|
applyShowVisibility(el, visible, transition, !initialized);
|
|
@@ -2064,7 +2075,7 @@ function bindElement(el, scope, disposers) {
|
|
|
2064
2075
|
const parent = el.parentNode;
|
|
2065
2076
|
let inserted = true;
|
|
2066
2077
|
let initialized = false;
|
|
2067
|
-
const dispose =
|
|
2078
|
+
const dispose = chunk2Y5US35K_cjs.internalEffect(() => {
|
|
2068
2079
|
const show = !!evaluate();
|
|
2069
2080
|
if (show && !inserted) {
|
|
2070
2081
|
clearTransitionState(el);
|
|
@@ -2103,7 +2114,7 @@ function bindElement(el, scope, disposers) {
|
|
|
2103
2114
|
const setter = scope.setters[prop];
|
|
2104
2115
|
if (getter && setter) {
|
|
2105
2116
|
const input = el;
|
|
2106
|
-
const dispose =
|
|
2117
|
+
const dispose = chunk2Y5US35K_cjs.internalEffect(() => {
|
|
2107
2118
|
const val = getter();
|
|
2108
2119
|
if (input.type === "checkbox") {
|
|
2109
2120
|
input.checked = !!val;
|
|
@@ -2167,19 +2178,24 @@ function bindElement(el, scope, disposers) {
|
|
|
2167
2178
|
} else if (name.startsWith("data-class:")) {
|
|
2168
2179
|
const cls = name.slice(11);
|
|
2169
2180
|
const evaluate = buildEvaluator(attr.value, scope);
|
|
2170
|
-
const dispose =
|
|
2181
|
+
const dispose = chunk2Y5US35K_cjs.internalEffect(() => {
|
|
2171
2182
|
el.classList.toggle(cls, !!evaluate());
|
|
2172
2183
|
});
|
|
2173
2184
|
disposers.push(dispose);
|
|
2174
2185
|
} else if (name.startsWith("data-bind:")) {
|
|
2175
2186
|
const attrName = name.slice(10);
|
|
2176
2187
|
const evaluate = buildEvaluator(attr.value, scope);
|
|
2177
|
-
const dispose =
|
|
2188
|
+
const dispose = chunk2Y5US35K_cjs.internalEffect(() => {
|
|
2178
2189
|
const val = evaluate();
|
|
2179
2190
|
if (val == null || val === false) {
|
|
2180
2191
|
el.removeAttribute(attrName);
|
|
2181
2192
|
} else {
|
|
2182
|
-
|
|
2193
|
+
const str = String(val);
|
|
2194
|
+
if (isUnsafeAttrBinding(attrName, str)) {
|
|
2195
|
+
el.removeAttribute(attrName);
|
|
2196
|
+
} else {
|
|
2197
|
+
el.setAttribute(attrName, str);
|
|
2198
|
+
}
|
|
2183
2199
|
}
|
|
2184
2200
|
});
|
|
2185
2201
|
disposers.push(dispose);
|
|
@@ -2197,7 +2213,7 @@ function bindElement(el, scope, disposers) {
|
|
|
2197
2213
|
if (saved !== null) setter(JSON.parse(saved));
|
|
2198
2214
|
} catch {
|
|
2199
2215
|
}
|
|
2200
|
-
const dispose =
|
|
2216
|
+
const dispose = chunk2Y5US35K_cjs.internalEffect(() => {
|
|
2201
2217
|
try {
|
|
2202
2218
|
localStorage.setItem(key, JSON.stringify(getter()));
|
|
2203
2219
|
} catch {
|
|
@@ -2284,7 +2300,7 @@ function bindElement(el, scope, disposers) {
|
|
|
2284
2300
|
});
|
|
2285
2301
|
}
|
|
2286
2302
|
} : void 0;
|
|
2287
|
-
const dispose =
|
|
2303
|
+
const dispose = chunk2Y5US35K_cjs.internalEffect(() => {
|
|
2288
2304
|
const rawItems = evaluate();
|
|
2289
2305
|
if (!Array.isArray(rawItems)) {
|
|
2290
2306
|
for (const n of oldNodes) {
|
|
@@ -2305,7 +2321,7 @@ function bindElement(el, scope, disposers) {
|
|
|
2305
2321
|
}
|
|
2306
2322
|
const prevNodes = new Set(oldNodes);
|
|
2307
2323
|
if (keyProp) {
|
|
2308
|
-
const result =
|
|
2324
|
+
const result = chunkJRQNDXX7_cjs.reconcileList(
|
|
2309
2325
|
el,
|
|
2310
2326
|
oldItems,
|
|
2311
2327
|
rawItems,
|
|
@@ -2335,7 +2351,7 @@ function bindElement(el, scope, disposers) {
|
|
|
2335
2351
|
} else {
|
|
2336
2352
|
const wrapped = rawItems.map((item, i) => ({ __idx: i, __item: item }));
|
|
2337
2353
|
const oldWrapped = oldItems;
|
|
2338
|
-
const result =
|
|
2354
|
+
const result = chunkJRQNDXX7_cjs.reconcileList(
|
|
2339
2355
|
el,
|
|
2340
2356
|
oldWrapped,
|
|
2341
2357
|
wrapped,
|
|
@@ -2384,16 +2400,16 @@ function bindElement(el, scope, disposers) {
|
|
|
2384
2400
|
else if (k === "error") errorTarget = v;
|
|
2385
2401
|
else if (k === "poll") interval = parseInt(v ?? "0", 10);
|
|
2386
2402
|
}
|
|
2387
|
-
const [getTarget, setTarget] =
|
|
2403
|
+
const [getTarget, setTarget] = chunkW7OUWVRA_cjs.createSignal(null);
|
|
2388
2404
|
scope.getters[target] = getTarget;
|
|
2389
2405
|
scope.setters[target] = setTarget;
|
|
2390
2406
|
if (loadingTarget) {
|
|
2391
|
-
const [gl, sl] =
|
|
2407
|
+
const [gl, sl] = chunkW7OUWVRA_cjs.createSignal(false);
|
|
2392
2408
|
scope.getters[loadingTarget] = gl;
|
|
2393
2409
|
scope.setters[loadingTarget] = sl;
|
|
2394
2410
|
}
|
|
2395
2411
|
if (errorTarget) {
|
|
2396
|
-
const [ge, se] =
|
|
2412
|
+
const [ge, se] = chunkW7OUWVRA_cjs.createSignal(null);
|
|
2397
2413
|
scope.getters[errorTarget] = ge;
|
|
2398
2414
|
scope.setters[errorTarget] = se;
|
|
2399
2415
|
}
|
|
@@ -2722,7 +2738,7 @@ function getScopes() {
|
|
|
2722
2738
|
function setScopeValue(element, key, value) {
|
|
2723
2739
|
const scope = element.__formaScope;
|
|
2724
2740
|
if (!scope?.setters[key]) return;
|
|
2725
|
-
|
|
2741
|
+
chunk2Y5US35K_cjs.batch(() => {
|
|
2726
2742
|
scope.setters[key](value);
|
|
2727
2743
|
});
|
|
2728
2744
|
}
|
|
@@ -2731,7 +2747,7 @@ function resetScope(element) {
|
|
|
2731
2747
|
const initialJSON = element.__formaInitialState;
|
|
2732
2748
|
if (!scope || !initialJSON) return;
|
|
2733
2749
|
const initial = parseState(initialJSON);
|
|
2734
|
-
|
|
2750
|
+
chunk2Y5US35K_cjs.batch(() => {
|
|
2735
2751
|
for (const [key, val] of Object.entries(initial)) {
|
|
2736
2752
|
scope.setters[key]?.(val);
|
|
2737
2753
|
}
|
|
@@ -2761,7 +2777,7 @@ function getReconciler() {
|
|
|
2761
2777
|
}
|
|
2762
2778
|
}
|
|
2763
2779
|
},
|
|
2764
|
-
batch:
|
|
2780
|
+
batch: chunk2Y5US35K_cjs.batch
|
|
2765
2781
|
});
|
|
2766
2782
|
}
|
|
2767
2783
|
return _reconciler;
|