sprae 5.0.0 → 5.0.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/package.json +1 -1
- package/sprae.auto.js +46 -37
- package/sprae.auto.min.js +1 -1
- package/sprae.js +46 -37
- package/sprae.min.js +1 -1
package/package.json
CHANGED
package/sprae.auto.js
CHANGED
|
@@ -1,4 +1,36 @@
|
|
|
1
1
|
(() => {
|
|
2
|
+
// src/util.js
|
|
3
|
+
var queueMicrotask = Promise.prototype.then.bind(Promise.resolve());
|
|
4
|
+
var refs = /* @__PURE__ */ new WeakMap();
|
|
5
|
+
var set = (value) => {
|
|
6
|
+
const ref = new WeakRef(value);
|
|
7
|
+
refs.set(value, ref);
|
|
8
|
+
return ref;
|
|
9
|
+
};
|
|
10
|
+
var get = (value) => refs.get(value) || set(value);
|
|
11
|
+
var WeakishMap = class extends Map {
|
|
12
|
+
#registry = new FinalizationRegistry((key) => super.delete(key));
|
|
13
|
+
get size() {
|
|
14
|
+
return [...this].length;
|
|
15
|
+
}
|
|
16
|
+
constructor(entries = []) {
|
|
17
|
+
super();
|
|
18
|
+
for (const [key, value] of entries)
|
|
19
|
+
this.set(key, value);
|
|
20
|
+
}
|
|
21
|
+
get(key) {
|
|
22
|
+
return super.get(key)?.deref();
|
|
23
|
+
}
|
|
24
|
+
set(key, value) {
|
|
25
|
+
let ref = super.get(key);
|
|
26
|
+
if (ref)
|
|
27
|
+
this.#registry.unregister(ref);
|
|
28
|
+
ref = get(value);
|
|
29
|
+
this.#registry.register(value, key, ref);
|
|
30
|
+
return super.set(key, ref);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
2
34
|
// src/state.js
|
|
3
35
|
var currentFx;
|
|
4
36
|
var batch = /* @__PURE__ */ new Set();
|
|
@@ -152,37 +184,6 @@
|
|
|
152
184
|
return b;
|
|
153
185
|
}
|
|
154
186
|
|
|
155
|
-
// src/weakish-map.js
|
|
156
|
-
var refs = /* @__PURE__ */ new WeakMap();
|
|
157
|
-
var set = (value) => {
|
|
158
|
-
const ref = new WeakRef(value);
|
|
159
|
-
refs.set(value, ref);
|
|
160
|
-
return ref;
|
|
161
|
-
};
|
|
162
|
-
var get = (value) => refs.get(value) || set(value);
|
|
163
|
-
var WeakishMap = class extends Map {
|
|
164
|
-
#registry = new FinalizationRegistry((key) => super.delete(key));
|
|
165
|
-
get size() {
|
|
166
|
-
return [...this].length;
|
|
167
|
-
}
|
|
168
|
-
constructor(entries = []) {
|
|
169
|
-
super();
|
|
170
|
-
for (const [key, value] of entries)
|
|
171
|
-
this.set(key, value);
|
|
172
|
-
}
|
|
173
|
-
get(key) {
|
|
174
|
-
return super.get(key)?.deref();
|
|
175
|
-
}
|
|
176
|
-
set(key, value) {
|
|
177
|
-
let ref = super.get(key);
|
|
178
|
-
if (ref)
|
|
179
|
-
this.#registry.unregister(ref);
|
|
180
|
-
ref = get(value);
|
|
181
|
-
this.#registry.register(value, key, ref);
|
|
182
|
-
return super.set(key, ref);
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
|
|
186
187
|
// src/directives.js
|
|
187
188
|
var primary = {};
|
|
188
189
|
var secondary = {};
|
|
@@ -213,8 +214,8 @@
|
|
|
213
214
|
}
|
|
214
215
|
};
|
|
215
216
|
};
|
|
216
|
-
primary["
|
|
217
|
-
let evaluate = parseExpr(el, expr, "
|
|
217
|
+
primary["with"] = (el, expr, rootState) => {
|
|
218
|
+
let evaluate = parseExpr(el, expr, ":with");
|
|
218
219
|
const localState = evaluate(rootState);
|
|
219
220
|
let state2 = state(localState, rootState);
|
|
220
221
|
sprae(el, state2);
|
|
@@ -223,12 +224,12 @@
|
|
|
223
224
|
primary["each"] = (tpl, expr) => {
|
|
224
225
|
let each = parseForExpression(expr);
|
|
225
226
|
if (!each)
|
|
226
|
-
return exprError(new Error(), tpl, expr);
|
|
227
|
+
return exprError(new Error(), tpl, expr, ":each");
|
|
227
228
|
const holder = tpl[_each] = document.createTextNode("");
|
|
228
229
|
tpl.replaceWith(holder);
|
|
229
230
|
const evaluate = parseExpr(tpl, each[2], ":each");
|
|
230
231
|
const keyExpr = tpl.getAttribute(":key");
|
|
231
|
-
const itemKey = keyExpr ? parseExpr(null, keyExpr) : null;
|
|
232
|
+
const itemKey = keyExpr ? parseExpr(null, keyExpr, ":each") : null;
|
|
232
233
|
tpl.removeAttribute(":key");
|
|
233
234
|
const refExpr = tpl.getAttribute(":ref");
|
|
234
235
|
const scopes = new WeakishMap();
|
|
@@ -287,6 +288,14 @@
|
|
|
287
288
|
];
|
|
288
289
|
return [item, "", items];
|
|
289
290
|
}
|
|
291
|
+
secondary["render"] = (el, expr, state2) => {
|
|
292
|
+
let evaluate = parseExpr(el, expr, ":render"), tpl = evaluate(state2);
|
|
293
|
+
if (!tpl)
|
|
294
|
+
exprError(new Error("Template not found"), el, expr, ":render");
|
|
295
|
+
let content = tpl.content.cloneNode(true);
|
|
296
|
+
el.replaceChildren(content);
|
|
297
|
+
sprae(el, state2);
|
|
298
|
+
};
|
|
290
299
|
secondary["ref"] = (el, expr, state2) => {
|
|
291
300
|
state2[expr] = el;
|
|
292
301
|
};
|
|
@@ -537,11 +546,11 @@
|
|
|
537
546
|
return result;
|
|
538
547
|
};
|
|
539
548
|
}
|
|
540
|
-
function exprError(error, element, expression,
|
|
549
|
+
function exprError(error, element, expression, directive) {
|
|
541
550
|
Object.assign(error, { element, expression });
|
|
542
551
|
console.warn(`\u2234 ${error.message}
|
|
543
552
|
|
|
544
|
-
${
|
|
553
|
+
${directive}=${expression ? `"${expression}"
|
|
545
554
|
|
|
546
555
|
` : ""}`, element);
|
|
547
556
|
queueMicrotask(() => {
|
package/sprae.auto.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var e,t,r=new
|
|
1
|
+
(()=>{var e,t,r=Promise.prototype.then.bind(Promise.resolve()),n=new WeakMap,l=class extends Map{#e=new FinalizationRegistry((e=>super.delete(e)));get size(){return[...this].length}constructor(e=[]){super();for(const[t,r]of e)this.set(t,r)}get(e){return super.get(e)?.deref()}set(e,t){let r=super.get(e);return r&&this.#e.unregister(r),r=(e=>n.get(e)||(e=>{const t=new WeakRef(e);return n.set(e,t),t})(e))(t),this.#e.register(t,e,r),super.set(e,r)}},s=new Set,i=new WeakMap,o=new WeakMap,a=new WeakMap,u=Symbol("parent"),c={Array:Array,Object:Object,Number:Number,String:String,Boolean:Boolean,Date:Date,console:console},f={has:()=>!0,get(t,r){if("symbol"==typeof r)return t[r];if(!(r in t))return t[u]?.[r];if(Array.isArray(t)&&r in Array.prototype)return t[r];let n=t[r];if(e){let n=i.get(t);n||i.set(t,n={}),n[r]?n[r].includes(e)||n[r].push(e):n[r]=[e]}if(n&&n.constructor===Object||Array.isArray(n)){let e=o.get(n);return e||o.set(n,e=new Proxy(n,f)),e}return n},set(e,t,r){if(!(t in e)&&e[u]&&t in e[u])return e[u][t]=r;if(Array.isArray(e)&&t in Array.prototype)return e[t]=r;const n=e[t];if(Object.is(n,r))return!0;e[t]=r;let l=i.get(e)?.[t];if(l)for(let e of l)s.add(e);return h(),!0},deleteProperty:(e,t)=>(e[t]=void 0,delete e[t],!0)},p=(e,t)=>{if(o.has(e))return o.get(e);if(a.has(e))return e;let r=new Proxy(e,f);return o.set(e,r),a.set(r,e),e[u]=t?p(t):c,r},y=t=>{const r=()=>{let n=e;e=r,t(),e=n};return r(),r},h=()=>{t||(t=!0,r((()=>{for(let e of s)e.call();s.clear(),t=!1})))},g={},d={};g.if=(e,t)=>{let r=document.createTextNode(""),n=[S(e,t,":if")],l=[e],s=e;for(;(s=e.nextElementSibling)&&s.hasAttribute(":else");)s.removeAttribute(":else"),(t=s.getAttribute(":if"))?(s.removeAttribute(":if"),s.remove(),l.push(s),n.push(S(e,t,":else :if"))):(s.remove(),l.push(s),n.push((()=>1)));return e.replaceWith(s=r),e=>{let t=n.findIndex((t=>t(e)));l[t]!=s&&((s[m]||s).replaceWith(s=l[t]||r),$(s,e))}},g.with=(e,t,r)=>{const n=S(e,t,":with")(r);$(e,p(n,r))};var m=Symbol(":each");g.each=(e,t)=>{let r=function(e){let t=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,r=e.match(/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/);if(!r)return;let n=r[2].trim(),l=r[1].replace(/^\s*\(|\)\s*$/g,"").trim(),s=l.match(t);return s?[l.replace(t,"").trim(),s[1].trim(),n]:[l,"",n]}(t);if(!r)return E(new Error,e,t,":each");const n=e[m]=document.createTextNode("");e.replaceWith(n);const s=S(e,r[2],":each"),i=e.getAttribute(":key"),o=i?S(null,i,":each"):null;e.removeAttribute(":key");const a=e.getAttribute(":ref"),u=new l,c=new l;let f=[];return l=>{let i=s(l);i?"number"==typeof i?i=Array.from({length:i},((e,t)=>[t,t+1])):Array.isArray(i)?i=i.map(((e,t)=>[t+1,e])):"object"==typeof i?i=Object.entries(i):E(Error("Bad list value"),e,t,":each"):i=[];let y=[],h=[];for(let[t,n]of i){let s,i,f=o?.({[r[0]]:n,[r[1]]:t});null==f?s=e.cloneNode(!0):(s=c.get(f))||c.set(f,s=e.cloneNode(!0)),y.push(s),null!=f&&(i=u.get(f))?i[r[0]]=n:(i=p({[r[0]]:n,[a||""]:null,[r[1]]:t},l),null!=f&&u.set(f,i)),h.push(i)}!function(e,t,r,n){const l=new Map,s=new Map;let i,o;for(i=0;i<t.length;i++)l.set(t[i],i);for(i=0;i<r.length;i++)s.set(r[i],i);for(i=o=0;i!==t.length||o!==r.length;){var a=t[i],u=r[o];if(null===a)i++;else if(r.length<=o)e.removeChild(t[i]),i++;else if(t.length<=i)e.insertBefore(u,t[i]||n),o++;else if(a===u)i++,o++;else{var c=s.get(a),f=l.get(u);void 0===c?(e.removeChild(t[i]),i++):void 0===f?(e.insertBefore(u,t[i]||n),o++):(e.insertBefore(t[f],t[i]||n),t[f]=null,f>i+1&&i++,o++)}}}(n.parentNode,f,y,n),f=y;for(let e=0;e<y.length;e++)$(y[e],h[e])}},d.render=(e,t,r)=>{let n=S(e,t,":render")(r);n||E(new Error("Template not found"),e,t,":render");let l=n.content.cloneNode(!0);e.replaceChildren(l),$(e,r)},d.ref=(e,t,r)=>{r[t]=e},d.id=(e,t)=>{let r=S(e,t,":id");return t=>{return n=r(t),e.id=n||0===n?n:"";var n}},d.class=(e,t)=>{let r=S(e,t,":class"),n=e.className;return t=>{let l=r(t),s="string"==typeof l?l:(Array.isArray(l)?l:Object.entries(l).map((([e,t])=>t?e:""))).filter(Boolean).join(" ");e.className=[n,s].filter(Boolean).join(" ")}},d.style=(e,t)=>{let r=S(e,t,":style"),n=e.getAttribute("style")||"";return n.endsWith(";")||(n+="; "),t=>{let l=r(t);if("string"==typeof l)e.setAttribute("style",n+l);else{e.setAttribute("style",n);for(let t in l)e.style.setProperty(t,l[t])}}},d.text=(e,t)=>{let r=S(e,t,":text");return t=>{let n=r(t);e.textContent=null==n?"":n}},d[""]=(e,t)=>{let r=S(e,t,":");if(r)return t=>{let n=r(t);for(let t in n)W(e,t.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(e=>"-"+e.toLowerCase())),n[t])}},d.value=(e,t)=>{let r,n,l=S(e,t,":value"),s="text"===e.type||""===e.type?t=>e.setAttribute("value",e.value=null==t?"":t):"TEXTAREA"===e.tagName||"text"===e.type||""===e.type?t=>(r=e.selectionStart,n=e.selectionEnd,e.setAttribute("value",e.value=null==t?"":t),r&&e.setSelectionRange(r,n)):"checkbox"===e.type?t=>(e.value=t?"on":"",W(e,"checked",t)):"select-one"===e.type?t=>{for(let t in e.options)t.removeAttribute("selected");e.value=t,e.selectedOptions[0]?.setAttribute("selected","")}:t=>e.value=t;return e=>s(l(e))},d.on=(e,t)=>{let r=S(e,t,":on");return t=>{let n=r(t),l=[];for(let t in n)l.push(v(e,t,n[t]));return()=>{for(let e of l)e()}}};var b=(e,t,r,n)=>{let l=n.startsWith("on")&&n.slice(2),s=S(e,t,":"+n);if(s)return l?t=>{let r=s(t)||(()=>{});return v(e,l,r)}:t=>W(e,n,s(t))},v=(e,t,r)=>{if(!r)return;let n=t.split("..").map((t=>{let r={evt:"",target:e,test:()=>!0};return r.evt=(t.startsWith("on")?t.slice(2):t).replace(/\.(\w+)?-?([-\w]+)?/g,((e,t,n="")=>(r.test=A[t]?.(r,...n.split("-"))||r.test,""))),r}));if(1==n.length)return i(r,n[0]);const l=(t,r=0)=>{let s;return s=i((i=>{r&&s();let o=t.call(e,i);"function"!=typeof o&&(o=()=>{}),r+1<n.length&&l(o,r?r+1:1)}),n[r])};let s=l(r);return()=>s();function i(e,{evt:t,target:r,test:n,defer:l,stop:s,prevent:i,...o}){l&&(e=l(e));let a=t=>n(t)&&(s&&t.stopPropagation(),i&&t.preventDefault(),e.call(r,t));return r.addEventListener(t,a,o),()=>r.removeEventListener(t,a,o)}},A={prevent(e){e.prevent=!0},stop(e){e.stop=!0},once(e){e.once=!0},passive(e){e.passive=!0},capture(e){e.capture=!0},window(e){e.target=window},document(e){e.target=document},toggle(e){e.defer=(t,r)=>n=>r?(r.call?.(e.target,n),r=null):r=t()},throttle(e,t){e.defer=e=>w(e,t?Number(t)||0:108)},debounce(e,t){e.defer=e=>N(e,t?Number(t)||0:108)},outside:e=>t=>{let r=e.target;return!(r.contains(t.target)||!1===t.target.isConnected||r.offsetWidth<1&&r.offsetHeight<1)},self:e=>t=>t.target===e.target,ctrl:(e,...t)=>e=>k.ctrl(e)&&t.every((t=>k[t]?k[t](e):e.key===t)),shift:(e,...t)=>e=>k.shift(e)&&t.every((t=>k[t]?k[t](e):e.key===t)),alt:(e,...t)=>e=>k.alt(e)&&t.every((t=>k[t]?k[t](e):e.key===t)),meta:(e,...t)=>e=>k.meta(e)&&t.every((t=>k[t]?k[t](e):e.key===t)),arrow:e=>k.arrow,enter:e=>k.enter,escape:e=>k.escape,tab:e=>k.tab,space:e=>k.space,backspace:e=>k.backspace,delete:e=>k.delete,digit:e=>k.digit,letter:e=>k.letter,character:e=>k.character},k={ctrl:e=>e.ctrlKey||"Control"===e.key||"Ctrl"===e.key,shift:e=>e.shiftKey||"Shift"===e.key,alt:e=>e.altKey||"Alt"===e.key,meta:e=>e.metaKey||"Meta"===e.key||"Command"===e.key,arrow:e=>e.key.startsWith("Arrow"),enter:e=>"Enter"===e.key,escape:e=>e.key.startsWith("Esc"),tab:e=>"Tab"===e.key,space:e=>" "===e.key||"Space"===e.key||" "===e.key,backspace:e=>"Backspace"===e.key,delete:e=>"Delete"===e.key,digit:e=>/^\d$/.test(e.key),letter:e=>/^[a-zA-Z]$/.test(e.key),character:e=>/^\S$/.test(e.key)},w=(e,t)=>{let r,n,l=s=>{r=!0,setTimeout((()=>{if(r=!1,n)return n=!1,l(s),e(s)}),t)};return t=>r?n=!0:(l(t),e(t))},N=(e,t)=>{let r;return n=>{clearTimeout(r),r=setTimeout((()=>{r=null,e(n)}),t)}},W=(e,t,r)=>{null==r||!1===r?e.removeAttribute(t):e.setAttribute(t,!0===r?"":"number"==typeof r||"string"==typeof r?r:"")},x={};function S(e,t,r){let n=x[t];if(!n){let l=/^[\n\s]*if.*\(.*\)/.test(t)||/\b(let|const)\s/.test(t)&&!r.startsWith(":on")?`(() => {${t}})()`:t;try{n=x[t]=new Function("__scope",`with (__scope) { return ${l.trim()} };`)}catch(n){return E(n,e,t,r)}}return l=>{let s;try{s=n.call(e,l)}catch(n){return E(n,e,t,r)}return s}}function E(e,t,n,l){Object.assign(e,{element:t,expression:n}),console.warn(`∴ ${e.message}\n\n${l}=${n?`"${n}"\n\n`:""}`,t),r((()=>{throw e}),0)}$.globals=c;var j=new WeakMap;function $(e,t){if(!e.children)return;if(j.has(e))return Object.assign(j.get(e),t);const r=p(t||{}),n=[],l=(e,t=e.parentNode)=>{for(let l in g){let s=":"+l;if(e.hasAttribute?.(s)){let i=e.getAttribute(s);if(e.removeAttribute(s),n.push(g[l](e,i,r,l)),j.has(e)||e.parentNode!==t)return!1}}if(e.attributes)for(let l=0;l<e.attributes.length;){let s=e.attributes[l];if(":"!==s.name[0]){l++;continue}e.removeAttribute(s.name);let i=s.value,o=s.name.slice(1).split(":");for(let l of o){let s=d[l]||b;if(n.push(s(e,i,r,l)),j.has(e)||e.parentNode!==t)return!1}}for(let t,r=0;t=e.children[r];r++)!1===l(t,e)&&r--};l(e);for(let e of n)if(e){let t;y((()=>{"function"==typeof t&&t(),t=e(r)}))}return j.set(e,r),r}document.currentScript&&$(document.documentElement)})();
|
package/sprae.js
CHANGED
|
@@ -1,3 +1,35 @@
|
|
|
1
|
+
// src/util.js
|
|
2
|
+
var queueMicrotask = Promise.prototype.then.bind(Promise.resolve());
|
|
3
|
+
var refs = /* @__PURE__ */ new WeakMap();
|
|
4
|
+
var set = (value) => {
|
|
5
|
+
const ref = new WeakRef(value);
|
|
6
|
+
refs.set(value, ref);
|
|
7
|
+
return ref;
|
|
8
|
+
};
|
|
9
|
+
var get = (value) => refs.get(value) || set(value);
|
|
10
|
+
var WeakishMap = class extends Map {
|
|
11
|
+
#registry = new FinalizationRegistry((key) => super.delete(key));
|
|
12
|
+
get size() {
|
|
13
|
+
return [...this].length;
|
|
14
|
+
}
|
|
15
|
+
constructor(entries = []) {
|
|
16
|
+
super();
|
|
17
|
+
for (const [key, value] of entries)
|
|
18
|
+
this.set(key, value);
|
|
19
|
+
}
|
|
20
|
+
get(key) {
|
|
21
|
+
return super.get(key)?.deref();
|
|
22
|
+
}
|
|
23
|
+
set(key, value) {
|
|
24
|
+
let ref = super.get(key);
|
|
25
|
+
if (ref)
|
|
26
|
+
this.#registry.unregister(ref);
|
|
27
|
+
ref = get(value);
|
|
28
|
+
this.#registry.register(value, key, ref);
|
|
29
|
+
return super.set(key, ref);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
1
33
|
// src/state.js
|
|
2
34
|
var currentFx;
|
|
3
35
|
var batch = /* @__PURE__ */ new Set();
|
|
@@ -151,37 +183,6 @@ function domdiff_default(parent, a, b, before) {
|
|
|
151
183
|
return b;
|
|
152
184
|
}
|
|
153
185
|
|
|
154
|
-
// src/weakish-map.js
|
|
155
|
-
var refs = /* @__PURE__ */ new WeakMap();
|
|
156
|
-
var set = (value) => {
|
|
157
|
-
const ref = new WeakRef(value);
|
|
158
|
-
refs.set(value, ref);
|
|
159
|
-
return ref;
|
|
160
|
-
};
|
|
161
|
-
var get = (value) => refs.get(value) || set(value);
|
|
162
|
-
var WeakishMap = class extends Map {
|
|
163
|
-
#registry = new FinalizationRegistry((key) => super.delete(key));
|
|
164
|
-
get size() {
|
|
165
|
-
return [...this].length;
|
|
166
|
-
}
|
|
167
|
-
constructor(entries = []) {
|
|
168
|
-
super();
|
|
169
|
-
for (const [key, value] of entries)
|
|
170
|
-
this.set(key, value);
|
|
171
|
-
}
|
|
172
|
-
get(key) {
|
|
173
|
-
return super.get(key)?.deref();
|
|
174
|
-
}
|
|
175
|
-
set(key, value) {
|
|
176
|
-
let ref = super.get(key);
|
|
177
|
-
if (ref)
|
|
178
|
-
this.#registry.unregister(ref);
|
|
179
|
-
ref = get(value);
|
|
180
|
-
this.#registry.register(value, key, ref);
|
|
181
|
-
return super.set(key, ref);
|
|
182
|
-
}
|
|
183
|
-
};
|
|
184
|
-
|
|
185
186
|
// src/directives.js
|
|
186
187
|
var primary = {};
|
|
187
188
|
var secondary = {};
|
|
@@ -212,8 +213,8 @@ primary["if"] = (el, expr) => {
|
|
|
212
213
|
}
|
|
213
214
|
};
|
|
214
215
|
};
|
|
215
|
-
primary["
|
|
216
|
-
let evaluate = parseExpr(el, expr, "
|
|
216
|
+
primary["with"] = (el, expr, rootState) => {
|
|
217
|
+
let evaluate = parseExpr(el, expr, ":with");
|
|
217
218
|
const localState = evaluate(rootState);
|
|
218
219
|
let state2 = state(localState, rootState);
|
|
219
220
|
sprae(el, state2);
|
|
@@ -222,12 +223,12 @@ var _each = Symbol(":each");
|
|
|
222
223
|
primary["each"] = (tpl, expr) => {
|
|
223
224
|
let each = parseForExpression(expr);
|
|
224
225
|
if (!each)
|
|
225
|
-
return exprError(new Error(), tpl, expr);
|
|
226
|
+
return exprError(new Error(), tpl, expr, ":each");
|
|
226
227
|
const holder = tpl[_each] = document.createTextNode("");
|
|
227
228
|
tpl.replaceWith(holder);
|
|
228
229
|
const evaluate = parseExpr(tpl, each[2], ":each");
|
|
229
230
|
const keyExpr = tpl.getAttribute(":key");
|
|
230
|
-
const itemKey = keyExpr ? parseExpr(null, keyExpr) : null;
|
|
231
|
+
const itemKey = keyExpr ? parseExpr(null, keyExpr, ":each") : null;
|
|
231
232
|
tpl.removeAttribute(":key");
|
|
232
233
|
const refExpr = tpl.getAttribute(":ref");
|
|
233
234
|
const scopes = new WeakishMap();
|
|
@@ -286,6 +287,14 @@ function parseForExpression(expression) {
|
|
|
286
287
|
];
|
|
287
288
|
return [item, "", items];
|
|
288
289
|
}
|
|
290
|
+
secondary["render"] = (el, expr, state2) => {
|
|
291
|
+
let evaluate = parseExpr(el, expr, ":render"), tpl = evaluate(state2);
|
|
292
|
+
if (!tpl)
|
|
293
|
+
exprError(new Error("Template not found"), el, expr, ":render");
|
|
294
|
+
let content = tpl.content.cloneNode(true);
|
|
295
|
+
el.replaceChildren(content);
|
|
296
|
+
sprae(el, state2);
|
|
297
|
+
};
|
|
289
298
|
secondary["ref"] = (el, expr, state2) => {
|
|
290
299
|
state2[expr] = el;
|
|
291
300
|
};
|
|
@@ -536,11 +545,11 @@ function parseExpr(el, expression, dir) {
|
|
|
536
545
|
return result;
|
|
537
546
|
};
|
|
538
547
|
}
|
|
539
|
-
function exprError(error, element, expression,
|
|
548
|
+
function exprError(error, element, expression, directive) {
|
|
540
549
|
Object.assign(error, { element, expression });
|
|
541
550
|
console.warn(`\u2234 ${error.message}
|
|
542
551
|
|
|
543
|
-
${
|
|
552
|
+
${directive}=${expression ? `"${expression}"
|
|
544
553
|
|
|
545
554
|
` : ""}`, element);
|
|
546
555
|
queueMicrotask(() => {
|
package/sprae.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e,t,r=new
|
|
1
|
+
var e,t,r=Promise.prototype.then.bind(Promise.resolve()),n=new WeakMap,l=class extends Map{#e=new FinalizationRegistry((e=>super.delete(e)));get size(){return[...this].length}constructor(e=[]){super();for(const[t,r]of e)this.set(t,r)}get(e){return super.get(e)?.deref()}set(e,t){let r=super.get(e);return r&&this.#e.unregister(r),r=(e=>n.get(e)||(e=>{const t=new WeakRef(e);return n.set(e,t),t})(e))(t),this.#e.register(t,e,r),super.set(e,r)}},s=new Set,i=new WeakMap,o=new WeakMap,a=new WeakMap,u=Symbol("parent"),c={Array:Array,Object:Object,Number:Number,String:String,Boolean:Boolean,Date:Date,console:console},f={has:()=>!0,get(t,r){if("symbol"==typeof r)return t[r];if(!(r in t))return t[u]?.[r];if(Array.isArray(t)&&r in Array.prototype)return t[r];let n=t[r];if(e){let n=i.get(t);n||i.set(t,n={}),n[r]?n[r].includes(e)||n[r].push(e):n[r]=[e]}if(n&&n.constructor===Object||Array.isArray(n)){let e=o.get(n);return e||o.set(n,e=new Proxy(n,f)),e}return n},set(e,t,r){if(!(t in e)&&e[u]&&t in e[u])return e[u][t]=r;if(Array.isArray(e)&&t in Array.prototype)return e[t]=r;const n=e[t];if(Object.is(n,r))return!0;e[t]=r;let l=i.get(e)?.[t];if(l)for(let e of l)s.add(e);return h(),!0},deleteProperty:(e,t)=>(e[t]=void 0,delete e[t],!0)},p=(e,t)=>{if(o.has(e))return o.get(e);if(a.has(e))return e;let r=new Proxy(e,f);return o.set(e,r),a.set(r,e),e[u]=t?p(t):c,r},y=t=>{const r=()=>{let n=e;e=r,t(),e=n};return r(),r},h=()=>{t||(t=!0,r((()=>{for(let e of s)e.call();s.clear(),t=!1})))},d={},g={};d.if=(e,t)=>{let r=document.createTextNode(""),n=[S(e,t,":if")],l=[e],s=e;for(;(s=e.nextElementSibling)&&s.hasAttribute(":else");)s.removeAttribute(":else"),(t=s.getAttribute(":if"))?(s.removeAttribute(":if"),s.remove(),l.push(s),n.push(S(e,t,":else :if"))):(s.remove(),l.push(s),n.push((()=>1)));return e.replaceWith(s=r),e=>{let t=n.findIndex((t=>t(e)));l[t]!=s&&((s[m]||s).replaceWith(s=l[t]||r),$(s,e))}},d.with=(e,t,r)=>{const n=S(e,t,":with")(r);$(e,p(n,r))};var m=Symbol(":each");d.each=(e,t)=>{let r=function(e){let t=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,r=e.match(/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/);if(!r)return;let n=r[2].trim(),l=r[1].replace(/^\s*\(|\)\s*$/g,"").trim(),s=l.match(t);return s?[l.replace(t,"").trim(),s[1].trim(),n]:[l,"",n]}(t);if(!r)return E(new Error,e,t,":each");const n=e[m]=document.createTextNode("");e.replaceWith(n);const s=S(e,r[2],":each"),i=e.getAttribute(":key"),o=i?S(null,i,":each"):null;e.removeAttribute(":key");const a=e.getAttribute(":ref"),u=new l,c=new l;let f=[];return l=>{let i=s(l);i?"number"==typeof i?i=Array.from({length:i},((e,t)=>[t,t+1])):Array.isArray(i)?i=i.map(((e,t)=>[t+1,e])):"object"==typeof i?i=Object.entries(i):E(Error("Bad list value"),e,t,":each"):i=[];let y=[],h=[];for(let[t,n]of i){let s,i,f=o?.({[r[0]]:n,[r[1]]:t});null==f?s=e.cloneNode(!0):(s=c.get(f))||c.set(f,s=e.cloneNode(!0)),y.push(s),null!=f&&(i=u.get(f))?i[r[0]]=n:(i=p({[r[0]]:n,[a||""]:null,[r[1]]:t},l),null!=f&&u.set(f,i)),h.push(i)}!function(e,t,r,n){const l=new Map,s=new Map;let i,o;for(i=0;i<t.length;i++)l.set(t[i],i);for(i=0;i<r.length;i++)s.set(r[i],i);for(i=o=0;i!==t.length||o!==r.length;){var a=t[i],u=r[o];if(null===a)i++;else if(r.length<=o)e.removeChild(t[i]),i++;else if(t.length<=i)e.insertBefore(u,t[i]||n),o++;else if(a===u)i++,o++;else{var c=s.get(a),f=l.get(u);void 0===c?(e.removeChild(t[i]),i++):void 0===f?(e.insertBefore(u,t[i]||n),o++):(e.insertBefore(t[f],t[i]||n),t[f]=null,f>i+1&&i++,o++)}}}(n.parentNode,f,y,n),f=y;for(let e=0;e<y.length;e++)$(y[e],h[e])}},g.render=(e,t,r)=>{let n=S(e,t,":render")(r);n||E(new Error("Template not found"),e,t,":render");let l=n.content.cloneNode(!0);e.replaceChildren(l),$(e,r)},g.ref=(e,t,r)=>{r[t]=e},g.id=(e,t)=>{let r=S(e,t,":id");return t=>{return n=r(t),e.id=n||0===n?n:"";var n}},g.class=(e,t)=>{let r=S(e,t,":class"),n=e.className;return t=>{let l=r(t),s="string"==typeof l?l:(Array.isArray(l)?l:Object.entries(l).map((([e,t])=>t?e:""))).filter(Boolean).join(" ");e.className=[n,s].filter(Boolean).join(" ")}},g.style=(e,t)=>{let r=S(e,t,":style"),n=e.getAttribute("style")||"";return n.endsWith(";")||(n+="; "),t=>{let l=r(t);if("string"==typeof l)e.setAttribute("style",n+l);else{e.setAttribute("style",n);for(let t in l)e.style.setProperty(t,l[t])}}},g.text=(e,t)=>{let r=S(e,t,":text");return t=>{let n=r(t);e.textContent=null==n?"":n}},g[""]=(e,t)=>{let r=S(e,t,":");if(r)return t=>{let n=r(t);for(let t in n)W(e,t.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(e=>"-"+e.toLowerCase())),n[t])}},g.value=(e,t)=>{let r,n,l=S(e,t,":value"),s="text"===e.type||""===e.type?t=>e.setAttribute("value",e.value=null==t?"":t):"TEXTAREA"===e.tagName||"text"===e.type||""===e.type?t=>(r=e.selectionStart,n=e.selectionEnd,e.setAttribute("value",e.value=null==t?"":t),r&&e.setSelectionRange(r,n)):"checkbox"===e.type?t=>(e.value=t?"on":"",W(e,"checked",t)):"select-one"===e.type?t=>{for(let t in e.options)t.removeAttribute("selected");e.value=t,e.selectedOptions[0]?.setAttribute("selected","")}:t=>e.value=t;return e=>s(l(e))},g.on=(e,t)=>{let r=S(e,t,":on");return t=>{let n=r(t),l=[];for(let t in n)l.push(v(e,t,n[t]));return()=>{for(let e of l)e()}}};var b=(e,t,r,n)=>{let l=n.startsWith("on")&&n.slice(2),s=S(e,t,":"+n);if(s)return l?t=>{let r=s(t)||(()=>{});return v(e,l,r)}:t=>W(e,n,s(t))},v=(e,t,r)=>{if(!r)return;let n=t.split("..").map((t=>{let r={evt:"",target:e,test:()=>!0};return r.evt=(t.startsWith("on")?t.slice(2):t).replace(/\.(\w+)?-?([-\w]+)?/g,((e,t,n="")=>(r.test=A[t]?.(r,...n.split("-"))||r.test,""))),r}));if(1==n.length)return i(r,n[0]);const l=(t,r=0)=>{let s;return s=i((i=>{r&&s();let o=t.call(e,i);"function"!=typeof o&&(o=()=>{}),r+1<n.length&&l(o,r?r+1:1)}),n[r])};let s=l(r);return()=>s();function i(e,{evt:t,target:r,test:n,defer:l,stop:s,prevent:i,...o}){l&&(e=l(e));let a=t=>n(t)&&(s&&t.stopPropagation(),i&&t.preventDefault(),e.call(r,t));return r.addEventListener(t,a,o),()=>r.removeEventListener(t,a,o)}},A={prevent(e){e.prevent=!0},stop(e){e.stop=!0},once(e){e.once=!0},passive(e){e.passive=!0},capture(e){e.capture=!0},window(e){e.target=window},document(e){e.target=document},toggle(e){e.defer=(t,r)=>n=>r?(r.call?.(e.target,n),r=null):r=t()},throttle(e,t){e.defer=e=>w(e,t?Number(t)||0:108)},debounce(e,t){e.defer=e=>N(e,t?Number(t)||0:108)},outside:e=>t=>{let r=e.target;return!(r.contains(t.target)||!1===t.target.isConnected||r.offsetWidth<1&&r.offsetHeight<1)},self:e=>t=>t.target===e.target,ctrl:(e,...t)=>e=>k.ctrl(e)&&t.every((t=>k[t]?k[t](e):e.key===t)),shift:(e,...t)=>e=>k.shift(e)&&t.every((t=>k[t]?k[t](e):e.key===t)),alt:(e,...t)=>e=>k.alt(e)&&t.every((t=>k[t]?k[t](e):e.key===t)),meta:(e,...t)=>e=>k.meta(e)&&t.every((t=>k[t]?k[t](e):e.key===t)),arrow:e=>k.arrow,enter:e=>k.enter,escape:e=>k.escape,tab:e=>k.tab,space:e=>k.space,backspace:e=>k.backspace,delete:e=>k.delete,digit:e=>k.digit,letter:e=>k.letter,character:e=>k.character},k={ctrl:e=>e.ctrlKey||"Control"===e.key||"Ctrl"===e.key,shift:e=>e.shiftKey||"Shift"===e.key,alt:e=>e.altKey||"Alt"===e.key,meta:e=>e.metaKey||"Meta"===e.key||"Command"===e.key,arrow:e=>e.key.startsWith("Arrow"),enter:e=>"Enter"===e.key,escape:e=>e.key.startsWith("Esc"),tab:e=>"Tab"===e.key,space:e=>" "===e.key||"Space"===e.key||" "===e.key,backspace:e=>"Backspace"===e.key,delete:e=>"Delete"===e.key,digit:e=>/^\d$/.test(e.key),letter:e=>/^[a-zA-Z]$/.test(e.key),character:e=>/^\S$/.test(e.key)},w=(e,t)=>{let r,n,l=s=>{r=!0,setTimeout((()=>{if(r=!1,n)return n=!1,l(s),e(s)}),t)};return t=>r?n=!0:(l(t),e(t))},N=(e,t)=>{let r;return n=>{clearTimeout(r),r=setTimeout((()=>{r=null,e(n)}),t)}},W=(e,t,r)=>{null==r||!1===r?e.removeAttribute(t):e.setAttribute(t,!0===r?"":"number"==typeof r||"string"==typeof r?r:"")},x={};function S(e,t,r){let n=x[t];if(!n){let l=/^[\n\s]*if.*\(.*\)/.test(t)||/\b(let|const)\s/.test(t)&&!r.startsWith(":on")?`(() => {${t}})()`:t;try{n=x[t]=new Function("__scope",`with (__scope) { return ${l.trim()} };`)}catch(n){return E(n,e,t,r)}}return l=>{let s;try{s=n.call(e,l)}catch(n){return E(n,e,t,r)}return s}}function E(e,t,n,l){Object.assign(e,{element:t,expression:n}),console.warn(`∴ ${e.message}\n\n${l}=${n?`"${n}"\n\n`:""}`,t),r((()=>{throw e}),0)}$.globals=c;var j=new WeakMap;function $(e,t){if(!e.children)return;if(j.has(e))return Object.assign(j.get(e),t);const r=p(t||{}),n=[],l=(e,t=e.parentNode)=>{for(let l in d){let s=":"+l;if(e.hasAttribute?.(s)){let i=e.getAttribute(s);if(e.removeAttribute(s),n.push(d[l](e,i,r,l)),j.has(e)||e.parentNode!==t)return!1}}if(e.attributes)for(let l=0;l<e.attributes.length;){let s=e.attributes[l];if(":"!==s.name[0]){l++;continue}e.removeAttribute(s.name);let i=s.value,o=s.name.slice(1).split(":");for(let l of o){let s=g[l]||b;if(n.push(s(e,i,r,l)),j.has(e)||e.parentNode!==t)return!1}}for(let t,r=0;t=e.children[r];r++)!1===l(t,e)&&r--};l(e);for(let e of n)if(e){let t;y((()=>{"function"==typeof t&&t(),t=e(r)}))}return j.set(e,r),r}var C=$;document.currentScript&&$(document.documentElement);export{C as default};
|