sprae 6.1.1 → 7.0.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/package.json +9 -1
- package/readme.md +91 -44
- package/sprae.auto.js +601 -244
- package/sprae.auto.min.js +1 -1
- package/sprae.js +601 -244
- package/sprae.min.js +1 -1
- package/src/core.js +6 -13
- package/src/directives.js +38 -37
- package/src/{state.js → state.proxy.js} +36 -15
- package/src/state.signals-proxy.js +104 -0
- package/src/state.signals.js +82 -0
- package/.gitattributes +0 -2
- package/.github/workflows/node.js.yml +0 -30
- package/examples/todomvc.html +0 -98
- package/r&d.md +0 -620
- package/test/attrs.js +0 -754
- package/test/events.js +0 -138
- package/test/index.html +0 -36
- package/test/register.cjs +0 -20
- package/test/state.js +0 -296
- package/test/test.js +0 -13
- package/todo.md +0 -54
package/sprae.js
CHANGED
|
@@ -1,43 +1,385 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
// node_modules/@preact/signals-core/dist/signals-core.module.js
|
|
2
|
+
function i() {
|
|
3
|
+
throw new Error("Cycle detected");
|
|
4
|
+
}
|
|
5
|
+
var t = Symbol.for("preact-signals");
|
|
6
|
+
function r() {
|
|
7
|
+
if (!(v > 1)) {
|
|
8
|
+
var i2, t2 = false;
|
|
9
|
+
while (void 0 !== f) {
|
|
10
|
+
var r2 = f;
|
|
11
|
+
f = void 0;
|
|
12
|
+
e++;
|
|
13
|
+
while (void 0 !== r2) {
|
|
14
|
+
var n2 = r2.o;
|
|
15
|
+
r2.o = void 0;
|
|
16
|
+
r2.f &= -3;
|
|
17
|
+
if (!(8 & r2.f) && l(r2))
|
|
18
|
+
try {
|
|
19
|
+
r2.c();
|
|
20
|
+
} catch (r3) {
|
|
21
|
+
if (!t2) {
|
|
22
|
+
i2 = r3;
|
|
23
|
+
t2 = true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
r2 = n2;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
e = 0;
|
|
30
|
+
v--;
|
|
31
|
+
if (t2)
|
|
32
|
+
throw i2;
|
|
33
|
+
} else
|
|
34
|
+
v--;
|
|
35
|
+
}
|
|
36
|
+
function n(i2) {
|
|
37
|
+
if (v > 0)
|
|
38
|
+
return i2();
|
|
39
|
+
v++;
|
|
40
|
+
try {
|
|
41
|
+
return i2();
|
|
42
|
+
} finally {
|
|
43
|
+
r();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
var o = void 0;
|
|
47
|
+
var f = void 0;
|
|
48
|
+
var v = 0;
|
|
49
|
+
var e = 0;
|
|
50
|
+
var u = 0;
|
|
51
|
+
function c(i2) {
|
|
52
|
+
if (void 0 !== o) {
|
|
53
|
+
var t2 = i2.n;
|
|
54
|
+
if (void 0 === t2 || t2.t !== o) {
|
|
55
|
+
t2 = { i: 0, S: i2, p: o.s, n: void 0, t: o, e: void 0, x: void 0, r: t2 };
|
|
56
|
+
if (void 0 !== o.s)
|
|
57
|
+
o.s.n = t2;
|
|
58
|
+
o.s = t2;
|
|
59
|
+
i2.n = t2;
|
|
60
|
+
if (32 & o.f)
|
|
61
|
+
i2.S(t2);
|
|
62
|
+
return t2;
|
|
63
|
+
} else if (-1 === t2.i) {
|
|
64
|
+
t2.i = 0;
|
|
65
|
+
if (void 0 !== t2.n) {
|
|
66
|
+
t2.n.p = t2.p;
|
|
67
|
+
if (void 0 !== t2.p)
|
|
68
|
+
t2.p.n = t2.n;
|
|
69
|
+
t2.p = o.s;
|
|
70
|
+
t2.n = void 0;
|
|
71
|
+
o.s.n = t2;
|
|
72
|
+
o.s = t2;
|
|
73
|
+
}
|
|
74
|
+
return t2;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function d(i2) {
|
|
79
|
+
this.v = i2;
|
|
80
|
+
this.i = 0;
|
|
81
|
+
this.n = void 0;
|
|
82
|
+
this.t = void 0;
|
|
83
|
+
}
|
|
84
|
+
d.prototype.brand = t;
|
|
85
|
+
d.prototype.h = function() {
|
|
86
|
+
return true;
|
|
8
87
|
};
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
88
|
+
d.prototype.S = function(i2) {
|
|
89
|
+
if (this.t !== i2 && void 0 === i2.e) {
|
|
90
|
+
i2.x = this.t;
|
|
91
|
+
if (void 0 !== this.t)
|
|
92
|
+
this.t.e = i2;
|
|
93
|
+
this.t = i2;
|
|
14
94
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
95
|
+
};
|
|
96
|
+
d.prototype.U = function(i2) {
|
|
97
|
+
if (void 0 !== this.t) {
|
|
98
|
+
var t2 = i2.e, r2 = i2.x;
|
|
99
|
+
if (void 0 !== t2) {
|
|
100
|
+
t2.x = r2;
|
|
101
|
+
i2.e = void 0;
|
|
102
|
+
}
|
|
103
|
+
if (void 0 !== r2) {
|
|
104
|
+
r2.e = t2;
|
|
105
|
+
i2.x = void 0;
|
|
106
|
+
}
|
|
107
|
+
if (i2 === this.t)
|
|
108
|
+
this.t = r2;
|
|
19
109
|
}
|
|
20
|
-
|
|
21
|
-
|
|
110
|
+
};
|
|
111
|
+
d.prototype.subscribe = function(i2) {
|
|
112
|
+
var t2 = this;
|
|
113
|
+
return O(function() {
|
|
114
|
+
var r2 = t2.value, n2 = 32 & this.f;
|
|
115
|
+
this.f &= -33;
|
|
116
|
+
try {
|
|
117
|
+
i2(r2);
|
|
118
|
+
} finally {
|
|
119
|
+
this.f |= n2;
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
d.prototype.valueOf = function() {
|
|
124
|
+
return this.value;
|
|
125
|
+
};
|
|
126
|
+
d.prototype.toString = function() {
|
|
127
|
+
return this.value + "";
|
|
128
|
+
};
|
|
129
|
+
d.prototype.toJSON = function() {
|
|
130
|
+
return this.value;
|
|
131
|
+
};
|
|
132
|
+
d.prototype.peek = function() {
|
|
133
|
+
return this.v;
|
|
134
|
+
};
|
|
135
|
+
Object.defineProperty(d.prototype, "value", { get: function() {
|
|
136
|
+
var i2 = c(this);
|
|
137
|
+
if (void 0 !== i2)
|
|
138
|
+
i2.i = this.i;
|
|
139
|
+
return this.v;
|
|
140
|
+
}, set: function(t2) {
|
|
141
|
+
if (o instanceof _)
|
|
142
|
+
!function() {
|
|
143
|
+
throw new Error("Computed cannot have side-effects");
|
|
144
|
+
}();
|
|
145
|
+
if (t2 !== this.v) {
|
|
146
|
+
if (e > 100)
|
|
147
|
+
i();
|
|
148
|
+
this.v = t2;
|
|
149
|
+
this.i++;
|
|
150
|
+
u++;
|
|
151
|
+
v++;
|
|
152
|
+
try {
|
|
153
|
+
for (var n2 = this.t; void 0 !== n2; n2 = n2.x)
|
|
154
|
+
n2.t.N();
|
|
155
|
+
} finally {
|
|
156
|
+
r();
|
|
157
|
+
}
|
|
22
158
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
159
|
+
} });
|
|
160
|
+
function a(i2) {
|
|
161
|
+
return new d(i2);
|
|
162
|
+
}
|
|
163
|
+
function l(i2) {
|
|
164
|
+
for (var t2 = i2.s; void 0 !== t2; t2 = t2.n)
|
|
165
|
+
if (t2.S.i !== t2.i || !t2.S.h() || t2.S.i !== t2.i)
|
|
166
|
+
return true;
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
function y(i2) {
|
|
170
|
+
for (var t2 = i2.s; void 0 !== t2; t2 = t2.n) {
|
|
171
|
+
var r2 = t2.S.n;
|
|
172
|
+
if (void 0 !== r2)
|
|
173
|
+
t2.r = r2;
|
|
174
|
+
t2.S.n = t2;
|
|
175
|
+
t2.i = -1;
|
|
176
|
+
if (void 0 === t2.n) {
|
|
177
|
+
i2.s = t2;
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function w(i2) {
|
|
183
|
+
var t2 = i2.s, r2 = void 0;
|
|
184
|
+
while (void 0 !== t2) {
|
|
185
|
+
var n2 = t2.p;
|
|
186
|
+
if (-1 === t2.i) {
|
|
187
|
+
t2.S.U(t2);
|
|
188
|
+
if (void 0 !== n2)
|
|
189
|
+
n2.n = t2.n;
|
|
190
|
+
if (void 0 !== t2.n)
|
|
191
|
+
t2.n.p = n2;
|
|
192
|
+
} else
|
|
193
|
+
r2 = t2;
|
|
194
|
+
t2.S.n = t2.r;
|
|
195
|
+
if (void 0 !== t2.r)
|
|
196
|
+
t2.r = void 0;
|
|
197
|
+
t2 = n2;
|
|
198
|
+
}
|
|
199
|
+
i2.s = r2;
|
|
200
|
+
}
|
|
201
|
+
function _(i2) {
|
|
202
|
+
d.call(this, void 0);
|
|
203
|
+
this.x = i2;
|
|
204
|
+
this.s = void 0;
|
|
205
|
+
this.g = u - 1;
|
|
206
|
+
this.f = 4;
|
|
207
|
+
}
|
|
208
|
+
(_.prototype = new d()).h = function() {
|
|
209
|
+
this.f &= -3;
|
|
210
|
+
if (1 & this.f)
|
|
211
|
+
return false;
|
|
212
|
+
if (32 == (36 & this.f))
|
|
213
|
+
return true;
|
|
214
|
+
this.f &= -5;
|
|
215
|
+
if (this.g === u)
|
|
216
|
+
return true;
|
|
217
|
+
this.g = u;
|
|
218
|
+
this.f |= 1;
|
|
219
|
+
if (this.i > 0 && !l(this)) {
|
|
220
|
+
this.f &= -2;
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
var i2 = o;
|
|
224
|
+
try {
|
|
225
|
+
y(this);
|
|
226
|
+
o = this;
|
|
227
|
+
var t2 = this.x();
|
|
228
|
+
if (16 & this.f || this.v !== t2 || 0 === this.i) {
|
|
229
|
+
this.v = t2;
|
|
230
|
+
this.f &= -17;
|
|
231
|
+
this.i++;
|
|
232
|
+
}
|
|
233
|
+
} catch (i3) {
|
|
234
|
+
this.v = i3;
|
|
235
|
+
this.f |= 16;
|
|
236
|
+
this.i++;
|
|
237
|
+
}
|
|
238
|
+
o = i2;
|
|
239
|
+
w(this);
|
|
240
|
+
this.f &= -2;
|
|
241
|
+
return true;
|
|
242
|
+
};
|
|
243
|
+
_.prototype.S = function(i2) {
|
|
244
|
+
if (void 0 === this.t) {
|
|
245
|
+
this.f |= 36;
|
|
246
|
+
for (var t2 = this.s; void 0 !== t2; t2 = t2.n)
|
|
247
|
+
t2.S.S(t2);
|
|
248
|
+
}
|
|
249
|
+
d.prototype.S.call(this, i2);
|
|
250
|
+
};
|
|
251
|
+
_.prototype.U = function(i2) {
|
|
252
|
+
if (void 0 !== this.t) {
|
|
253
|
+
d.prototype.U.call(this, i2);
|
|
254
|
+
if (void 0 === this.t) {
|
|
255
|
+
this.f &= -33;
|
|
256
|
+
for (var t2 = this.s; void 0 !== t2; t2 = t2.n)
|
|
257
|
+
t2.S.U(t2);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
_.prototype.N = function() {
|
|
262
|
+
if (!(2 & this.f)) {
|
|
263
|
+
this.f |= 6;
|
|
264
|
+
for (var i2 = this.t; void 0 !== i2; i2 = i2.x)
|
|
265
|
+
i2.t.N();
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
_.prototype.peek = function() {
|
|
269
|
+
if (!this.h())
|
|
270
|
+
i();
|
|
271
|
+
if (16 & this.f)
|
|
272
|
+
throw this.v;
|
|
273
|
+
return this.v;
|
|
274
|
+
};
|
|
275
|
+
Object.defineProperty(_.prototype, "value", { get: function() {
|
|
276
|
+
if (1 & this.f)
|
|
277
|
+
i();
|
|
278
|
+
var t2 = c(this);
|
|
279
|
+
this.h();
|
|
280
|
+
if (void 0 !== t2)
|
|
281
|
+
t2.i = this.i;
|
|
282
|
+
if (16 & this.f)
|
|
283
|
+
throw this.v;
|
|
284
|
+
return this.v;
|
|
285
|
+
} });
|
|
286
|
+
function p(i2) {
|
|
287
|
+
return new _(i2);
|
|
288
|
+
}
|
|
289
|
+
function g(i2) {
|
|
290
|
+
var t2 = i2.u;
|
|
291
|
+
i2.u = void 0;
|
|
292
|
+
if ("function" == typeof t2) {
|
|
293
|
+
v++;
|
|
294
|
+
var n2 = o;
|
|
295
|
+
o = void 0;
|
|
296
|
+
try {
|
|
297
|
+
t2();
|
|
298
|
+
} catch (t3) {
|
|
299
|
+
i2.f &= -2;
|
|
300
|
+
i2.f |= 8;
|
|
301
|
+
b(i2);
|
|
302
|
+
throw t3;
|
|
303
|
+
} finally {
|
|
304
|
+
o = n2;
|
|
305
|
+
r();
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
function b(i2) {
|
|
310
|
+
for (var t2 = i2.s; void 0 !== t2; t2 = t2.n)
|
|
311
|
+
t2.S.U(t2);
|
|
312
|
+
i2.x = void 0;
|
|
313
|
+
i2.s = void 0;
|
|
314
|
+
g(i2);
|
|
315
|
+
}
|
|
316
|
+
function x(i2) {
|
|
317
|
+
if (o !== this)
|
|
318
|
+
throw new Error("Out-of-order effect");
|
|
319
|
+
w(this);
|
|
320
|
+
o = i2;
|
|
321
|
+
this.f &= -2;
|
|
322
|
+
if (8 & this.f)
|
|
323
|
+
b(this);
|
|
324
|
+
r();
|
|
325
|
+
}
|
|
326
|
+
function E(i2) {
|
|
327
|
+
this.x = i2;
|
|
328
|
+
this.u = void 0;
|
|
329
|
+
this.s = void 0;
|
|
330
|
+
this.o = void 0;
|
|
331
|
+
this.f = 32;
|
|
332
|
+
}
|
|
333
|
+
E.prototype.c = function() {
|
|
334
|
+
var i2 = this.S();
|
|
335
|
+
try {
|
|
336
|
+
if (8 & this.f)
|
|
337
|
+
return;
|
|
338
|
+
if (void 0 === this.x)
|
|
339
|
+
return;
|
|
340
|
+
var t2 = this.x();
|
|
341
|
+
if ("function" == typeof t2)
|
|
342
|
+
this.u = t2;
|
|
343
|
+
} finally {
|
|
344
|
+
i2();
|
|
30
345
|
}
|
|
31
346
|
};
|
|
347
|
+
E.prototype.S = function() {
|
|
348
|
+
if (1 & this.f)
|
|
349
|
+
i();
|
|
350
|
+
this.f |= 1;
|
|
351
|
+
this.f &= -9;
|
|
352
|
+
g(this);
|
|
353
|
+
y(this);
|
|
354
|
+
v++;
|
|
355
|
+
var t2 = o;
|
|
356
|
+
o = this;
|
|
357
|
+
return x.bind(this, t2);
|
|
358
|
+
};
|
|
359
|
+
E.prototype.N = function() {
|
|
360
|
+
if (!(2 & this.f)) {
|
|
361
|
+
this.f |= 2;
|
|
362
|
+
this.o = f;
|
|
363
|
+
f = this;
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
E.prototype.d = function() {
|
|
367
|
+
this.f |= 8;
|
|
368
|
+
if (!(1 & this.f))
|
|
369
|
+
b(this);
|
|
370
|
+
};
|
|
371
|
+
function O(i2) {
|
|
372
|
+
var t2 = new E(i2);
|
|
373
|
+
try {
|
|
374
|
+
t2.c();
|
|
375
|
+
} catch (i3) {
|
|
376
|
+
t2.d();
|
|
377
|
+
throw i3;
|
|
378
|
+
}
|
|
379
|
+
return t2.d.bind(t2);
|
|
380
|
+
}
|
|
32
381
|
|
|
33
|
-
// src/state.js
|
|
34
|
-
var currentFx;
|
|
35
|
-
var batch = /* @__PURE__ */ new Set();
|
|
36
|
-
var pendingUpdate;
|
|
37
|
-
var targetFxs = /* @__PURE__ */ new WeakMap();
|
|
38
|
-
var targetProxy = /* @__PURE__ */ new WeakMap();
|
|
39
|
-
var proxyTarget = /* @__PURE__ */ new WeakMap();
|
|
40
|
-
var _parent = Symbol("parent");
|
|
382
|
+
// src/state.signals-proxy.js
|
|
41
383
|
var sandbox = {
|
|
42
384
|
Array,
|
|
43
385
|
Object,
|
|
@@ -49,149 +391,164 @@ var sandbox = {
|
|
|
49
391
|
window,
|
|
50
392
|
document,
|
|
51
393
|
history,
|
|
52
|
-
|
|
394
|
+
navigator,
|
|
395
|
+
location,
|
|
396
|
+
screen,
|
|
397
|
+
localStorage,
|
|
398
|
+
sessionStorage,
|
|
399
|
+
alert,
|
|
400
|
+
prompt,
|
|
401
|
+
confirm,
|
|
402
|
+
fetch,
|
|
403
|
+
performance,
|
|
404
|
+
setTimeout,
|
|
405
|
+
setInterval,
|
|
406
|
+
requestAnimationFrame
|
|
53
407
|
};
|
|
54
|
-
var
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
let
|
|
68
|
-
if (
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if (
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
408
|
+
var isObject = (v2) => v2?.constructor === Object;
|
|
409
|
+
var memo = /* @__PURE__ */ new WeakMap();
|
|
410
|
+
var lastProp;
|
|
411
|
+
function createState(values, parent) {
|
|
412
|
+
if (!isObject(values) && !Array.isArray(values))
|
|
413
|
+
return values;
|
|
414
|
+
if (memo.has(values) && !parent)
|
|
415
|
+
return values;
|
|
416
|
+
const _len = Array.isArray(values) && a(values.length), signals = parent ? Object.create(memo.get(parent = createState(parent))) : Array.isArray(values) ? [] : {}, state = new Proxy(signals, {
|
|
417
|
+
has() {
|
|
418
|
+
return true;
|
|
419
|
+
},
|
|
420
|
+
get(signals2, key) {
|
|
421
|
+
let v2;
|
|
422
|
+
if (_len && key === "length")
|
|
423
|
+
v2 = Array.prototype[lastProp] ? _len.peek() : _len.value;
|
|
424
|
+
else
|
|
425
|
+
v2 = (signals2[key] || initSignal(key))?.valueOf();
|
|
426
|
+
if (_len)
|
|
427
|
+
lastProp = key;
|
|
428
|
+
return v2;
|
|
429
|
+
},
|
|
430
|
+
set(signals2, key, v2) {
|
|
431
|
+
if (_len && key === "length")
|
|
432
|
+
_len.value = signals2.length = v2;
|
|
433
|
+
else {
|
|
434
|
+
const s = signals2[key] || initSignal(key);
|
|
435
|
+
if (!s)
|
|
436
|
+
signals2[key] = a(createState(v2?.valueOf()));
|
|
437
|
+
else if (s._set)
|
|
438
|
+
s._set(v2);
|
|
439
|
+
else
|
|
440
|
+
s.value = createState(v2?.valueOf());
|
|
441
|
+
}
|
|
442
|
+
if (_len)
|
|
443
|
+
lastProp = null;
|
|
87
444
|
return true;
|
|
88
|
-
target[prop] = value;
|
|
89
|
-
let propFxs = targetFxs.get(target)?.[prop];
|
|
90
|
-
if (propFxs)
|
|
91
|
-
for (let fx2 of propFxs)
|
|
92
|
-
batch.add(fx2);
|
|
93
|
-
planUpdate();
|
|
94
|
-
return true;
|
|
95
|
-
},
|
|
96
|
-
deleteProperty(target, prop) {
|
|
97
|
-
target[prop] = void 0;
|
|
98
|
-
delete target[prop];
|
|
99
|
-
return true;
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
var state = (obj, parent) => {
|
|
103
|
-
if (targetProxy.has(obj))
|
|
104
|
-
return targetProxy.get(obj);
|
|
105
|
-
if (proxyTarget.has(obj))
|
|
106
|
-
return obj;
|
|
107
|
-
let proxy = new Proxy(obj, handler);
|
|
108
|
-
targetProxy.set(obj, proxy);
|
|
109
|
-
proxyTarget.set(proxy, obj);
|
|
110
|
-
let descriptors = Object.getOwnPropertyDescriptors(obj);
|
|
111
|
-
for (let name in descriptors) {
|
|
112
|
-
let desc = descriptors[name];
|
|
113
|
-
if (desc.get) {
|
|
114
|
-
if (desc.get)
|
|
115
|
-
desc.get = desc.get.bind(proxy), Object.defineProperty(obj, name, desc);
|
|
116
445
|
}
|
|
446
|
+
});
|
|
447
|
+
for (let key in values) {
|
|
448
|
+
signals[key] = initSignal(key);
|
|
117
449
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
var planUpdate = () => {
|
|
132
|
-
if (!pendingUpdate) {
|
|
133
|
-
pendingUpdate = true;
|
|
134
|
-
queueMicrotask(() => {
|
|
135
|
-
for (let fx2 of batch)
|
|
136
|
-
fx2.call();
|
|
137
|
-
batch.clear();
|
|
138
|
-
pendingUpdate = false;
|
|
139
|
-
});
|
|
450
|
+
function initSignal(key) {
|
|
451
|
+
if (values.hasOwnProperty(key)) {
|
|
452
|
+
const desc = Object.getOwnPropertyDescriptor(values, key);
|
|
453
|
+
if (desc?.get) {
|
|
454
|
+
(signals[key] = p(desc.get.bind(state)))._set = desc.set?.bind(state);
|
|
455
|
+
return signals[key];
|
|
456
|
+
}
|
|
457
|
+
return signals[key] = desc.value?.peek ? desc.value : a(createState(desc.value));
|
|
458
|
+
}
|
|
459
|
+
if (parent)
|
|
460
|
+
return parent[key];
|
|
461
|
+
if (sandbox.hasOwnProperty(key))
|
|
462
|
+
return sandbox[key];
|
|
140
463
|
}
|
|
141
|
-
|
|
464
|
+
memo.set(state, signals);
|
|
465
|
+
return state;
|
|
466
|
+
}
|
|
142
467
|
|
|
143
468
|
// src/domdiff.js
|
|
144
|
-
function domdiff_default(parent,
|
|
469
|
+
function domdiff_default(parent, a2, b2, before) {
|
|
145
470
|
const aIdx = /* @__PURE__ */ new Map();
|
|
146
471
|
const bIdx = /* @__PURE__ */ new Map();
|
|
147
|
-
let
|
|
472
|
+
let i2;
|
|
148
473
|
let j;
|
|
149
|
-
for (
|
|
150
|
-
aIdx.set(
|
|
474
|
+
for (i2 = 0; i2 < a2.length; i2++) {
|
|
475
|
+
aIdx.set(a2[i2], i2);
|
|
151
476
|
}
|
|
152
|
-
for (
|
|
153
|
-
bIdx.set(
|
|
477
|
+
for (i2 = 0; i2 < b2.length; i2++) {
|
|
478
|
+
bIdx.set(b2[i2], i2);
|
|
154
479
|
}
|
|
155
|
-
for (
|
|
156
|
-
var aElm =
|
|
480
|
+
for (i2 = j = 0; i2 !== a2.length || j !== b2.length; ) {
|
|
481
|
+
var aElm = a2[i2], bElm = b2[j];
|
|
157
482
|
if (aElm === null) {
|
|
158
|
-
|
|
159
|
-
} else if (
|
|
160
|
-
parent.removeChild(
|
|
161
|
-
|
|
162
|
-
} else if (
|
|
163
|
-
parent.insertBefore(bElm,
|
|
483
|
+
i2++;
|
|
484
|
+
} else if (b2.length <= j) {
|
|
485
|
+
parent.removeChild(a2[i2]);
|
|
486
|
+
i2++;
|
|
487
|
+
} else if (a2.length <= i2) {
|
|
488
|
+
parent.insertBefore(bElm, a2[i2] || before);
|
|
164
489
|
j++;
|
|
165
490
|
} else if (aElm === bElm) {
|
|
166
|
-
|
|
491
|
+
i2++;
|
|
167
492
|
j++;
|
|
168
493
|
} else {
|
|
169
494
|
var curElmInNew = bIdx.get(aElm);
|
|
170
495
|
var wantedElmInOld = aIdx.get(bElm);
|
|
171
496
|
if (curElmInNew === void 0) {
|
|
172
|
-
parent.removeChild(
|
|
173
|
-
|
|
497
|
+
parent.removeChild(a2[i2]);
|
|
498
|
+
i2++;
|
|
174
499
|
} else if (wantedElmInOld === void 0) {
|
|
175
500
|
parent.insertBefore(
|
|
176
501
|
bElm,
|
|
177
|
-
|
|
502
|
+
a2[i2] || before
|
|
178
503
|
);
|
|
179
504
|
j++;
|
|
180
505
|
} else {
|
|
181
506
|
parent.insertBefore(
|
|
182
|
-
|
|
183
|
-
|
|
507
|
+
a2[wantedElmInOld],
|
|
508
|
+
a2[i2] || before
|
|
184
509
|
);
|
|
185
|
-
|
|
186
|
-
if (wantedElmInOld >
|
|
187
|
-
|
|
510
|
+
a2[wantedElmInOld] = null;
|
|
511
|
+
if (wantedElmInOld > i2 + 1)
|
|
512
|
+
i2++;
|
|
188
513
|
j++;
|
|
189
514
|
}
|
|
190
515
|
}
|
|
191
516
|
}
|
|
192
|
-
return
|
|
517
|
+
return b2;
|
|
193
518
|
}
|
|
194
519
|
|
|
520
|
+
// src/util.js
|
|
521
|
+
var queueMicrotask = Promise.prototype.then.bind(Promise.resolve());
|
|
522
|
+
var refs = /* @__PURE__ */ new WeakMap();
|
|
523
|
+
var set = (value) => {
|
|
524
|
+
const ref = new WeakRef(value);
|
|
525
|
+
refs.set(value, ref);
|
|
526
|
+
return ref;
|
|
527
|
+
};
|
|
528
|
+
var get = (value) => refs.get(value) || set(value);
|
|
529
|
+
var WeakishMap = class extends Map {
|
|
530
|
+
#registry = new FinalizationRegistry((key) => super.delete(key));
|
|
531
|
+
get size() {
|
|
532
|
+
return [...this].length;
|
|
533
|
+
}
|
|
534
|
+
constructor(entries = []) {
|
|
535
|
+
super();
|
|
536
|
+
for (const [key, value] of entries)
|
|
537
|
+
this.set(key, value);
|
|
538
|
+
}
|
|
539
|
+
get(key) {
|
|
540
|
+
return super.get(key)?.deref();
|
|
541
|
+
}
|
|
542
|
+
set(key, value) {
|
|
543
|
+
let ref = super.get(key);
|
|
544
|
+
if (ref)
|
|
545
|
+
this.#registry.unregister(ref);
|
|
546
|
+
ref = get(value);
|
|
547
|
+
this.#registry.register(value, key, ref);
|
|
548
|
+
return super.set(key, ref);
|
|
549
|
+
}
|
|
550
|
+
};
|
|
551
|
+
|
|
195
552
|
// src/directives.js
|
|
196
553
|
var primary = {};
|
|
197
554
|
var secondary = {};
|
|
@@ -213,12 +570,12 @@ primary["if"] = (el, expr) => {
|
|
|
213
570
|
break;
|
|
214
571
|
}
|
|
215
572
|
el.replaceWith(cur = holder);
|
|
216
|
-
return (
|
|
217
|
-
let
|
|
218
|
-
if (els[
|
|
573
|
+
return (state) => {
|
|
574
|
+
let i2 = clauses.findIndex((f2) => f2(state));
|
|
575
|
+
if (els[i2] != cur) {
|
|
219
576
|
;
|
|
220
|
-
(cur[_each] || cur).replaceWith(cur = els[
|
|
221
|
-
sprae(cur,
|
|
577
|
+
(cur[_each] || cur).replaceWith(cur = els[i2] || holder);
|
|
578
|
+
sprae(cur, state);
|
|
222
579
|
}
|
|
223
580
|
};
|
|
224
581
|
};
|
|
@@ -237,14 +594,14 @@ primary["each"] = (tpl, expr) => {
|
|
|
237
594
|
const scopes = new WeakishMap();
|
|
238
595
|
const itemEls = new WeakishMap();
|
|
239
596
|
let curEls = [];
|
|
240
|
-
return (
|
|
241
|
-
let list = evaluate(
|
|
597
|
+
return (state) => {
|
|
598
|
+
let list = evaluate(state);
|
|
242
599
|
if (!list)
|
|
243
600
|
list = [];
|
|
244
601
|
else if (typeof list === "number")
|
|
245
|
-
list = Array.from({ length: list }, (
|
|
602
|
+
list = Array.from({ length: list }, (_2, i2) => [i2 + 1, i2]);
|
|
246
603
|
else if (Array.isArray(list))
|
|
247
|
-
list = list.map((item,
|
|
604
|
+
list = list.map((item, i2) => [i2 + 1, item]);
|
|
248
605
|
else if (typeof list === "object")
|
|
249
606
|
list = Object.entries(list);
|
|
250
607
|
else
|
|
@@ -258,7 +615,7 @@ primary["each"] = (tpl, expr) => {
|
|
|
258
615
|
(el = itemEls.get(key)) || itemEls.set(key, el = tpl.cloneNode(true));
|
|
259
616
|
newEls.push(el);
|
|
260
617
|
if (key == null || !(scope = scopes.get(key))) {
|
|
261
|
-
scope =
|
|
618
|
+
scope = createState({ [each[0]]: item, [refExpr || ""]: null, [each[1]]: idx }, state);
|
|
262
619
|
if (key != null)
|
|
263
620
|
scopes.set(key, scope);
|
|
264
621
|
} else
|
|
@@ -267,19 +624,19 @@ primary["each"] = (tpl, expr) => {
|
|
|
267
624
|
}
|
|
268
625
|
domdiff_default(holder.parentNode, curEls, newEls, holder);
|
|
269
626
|
curEls = newEls;
|
|
270
|
-
for (let
|
|
271
|
-
sprae(newEls[
|
|
627
|
+
for (let i2 = 0; i2 < newEls.length; i2++) {
|
|
628
|
+
sprae(newEls[i2], elScopes[i2]);
|
|
272
629
|
}
|
|
273
630
|
};
|
|
274
631
|
};
|
|
275
632
|
primary["with"] = (el, expr, rootState) => {
|
|
276
633
|
let evaluate = parseExpr(el, expr, ":with");
|
|
277
634
|
const localState = evaluate(rootState);
|
|
278
|
-
let
|
|
279
|
-
sprae(el,
|
|
635
|
+
let state = createState(localState, rootState);
|
|
636
|
+
sprae(el, state);
|
|
280
637
|
};
|
|
281
|
-
primary["ref"] = (el, expr,
|
|
282
|
-
|
|
638
|
+
primary["ref"] = (el, expr, state) => {
|
|
639
|
+
state[expr] = el;
|
|
283
640
|
};
|
|
284
641
|
function parseForExpression(expression) {
|
|
285
642
|
let forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
|
|
@@ -299,32 +656,32 @@ function parseForExpression(expression) {
|
|
|
299
656
|
];
|
|
300
657
|
return [item, "", items];
|
|
301
658
|
}
|
|
302
|
-
secondary["render"] = (el, expr,
|
|
303
|
-
let evaluate = parseExpr(el, expr, ":render"), tpl = evaluate(
|
|
659
|
+
secondary["render"] = (el, expr, state) => {
|
|
660
|
+
let evaluate = parseExpr(el, expr, ":render"), tpl = evaluate(state);
|
|
304
661
|
if (!tpl)
|
|
305
662
|
exprError(new Error("Template not found"), el, expr, ":render");
|
|
306
663
|
let content = tpl.content.cloneNode(true);
|
|
307
664
|
el.replaceChildren(content);
|
|
308
|
-
sprae(el,
|
|
665
|
+
sprae(el, state);
|
|
309
666
|
};
|
|
310
667
|
secondary["id"] = (el, expr) => {
|
|
311
668
|
let evaluate = parseExpr(el, expr, ":id");
|
|
312
|
-
const update = (
|
|
313
|
-
return (
|
|
669
|
+
const update = (v2) => el.id = v2 || v2 === 0 ? v2 : "";
|
|
670
|
+
return (state) => update(evaluate(state));
|
|
314
671
|
};
|
|
315
672
|
secondary["class"] = (el, expr) => {
|
|
316
673
|
let evaluate = parseExpr(el, expr, ":class");
|
|
317
674
|
let initClassName = el.getAttribute("class");
|
|
318
|
-
return (
|
|
319
|
-
let
|
|
675
|
+
return (state) => {
|
|
676
|
+
let v2 = evaluate(state);
|
|
320
677
|
let className = [initClassName];
|
|
321
|
-
if (
|
|
322
|
-
if (typeof
|
|
323
|
-
className.push(
|
|
324
|
-
else if (Array.isArray(
|
|
325
|
-
className.push(...
|
|
678
|
+
if (v2) {
|
|
679
|
+
if (typeof v2 === "string")
|
|
680
|
+
className.push(v2);
|
|
681
|
+
else if (Array.isArray(v2))
|
|
682
|
+
className.push(...v2);
|
|
326
683
|
else
|
|
327
|
-
className.push(...Object.entries(
|
|
684
|
+
className.push(...Object.entries(v2).map(([k, v3]) => v3 ? k : ""));
|
|
328
685
|
}
|
|
329
686
|
if (className = className.filter(Boolean).join(" "))
|
|
330
687
|
el.setAttribute("class", className);
|
|
@@ -337,29 +694,29 @@ secondary["style"] = (el, expr) => {
|
|
|
337
694
|
let initStyle = el.getAttribute("style") || "";
|
|
338
695
|
if (!initStyle.endsWith(";"))
|
|
339
696
|
initStyle += "; ";
|
|
340
|
-
return (
|
|
341
|
-
let
|
|
342
|
-
if (typeof
|
|
343
|
-
el.setAttribute("style", initStyle +
|
|
697
|
+
return (state) => {
|
|
698
|
+
let v2 = evaluate(state);
|
|
699
|
+
if (typeof v2 === "string")
|
|
700
|
+
el.setAttribute("style", initStyle + v2);
|
|
344
701
|
else {
|
|
345
702
|
el.setAttribute("style", initStyle);
|
|
346
|
-
for (let k in
|
|
347
|
-
el.style.setProperty(k,
|
|
703
|
+
for (let k in v2)
|
|
704
|
+
el.style.setProperty(k, v2[k]);
|
|
348
705
|
}
|
|
349
706
|
};
|
|
350
707
|
};
|
|
351
708
|
secondary["text"] = (el, expr) => {
|
|
352
709
|
let evaluate = parseExpr(el, expr, ":text");
|
|
353
|
-
return (
|
|
354
|
-
let value = evaluate(
|
|
710
|
+
return (state) => {
|
|
711
|
+
let value = evaluate(state);
|
|
355
712
|
el.textContent = value == null ? "" : value;
|
|
356
713
|
};
|
|
357
714
|
};
|
|
358
715
|
secondary[""] = (el, expr) => {
|
|
359
716
|
let evaluate = parseExpr(el, expr, ":");
|
|
360
717
|
if (evaluate)
|
|
361
|
-
return (
|
|
362
|
-
let value = evaluate(
|
|
718
|
+
return (state) => {
|
|
719
|
+
let value = evaluate(state);
|
|
363
720
|
for (let key in value)
|
|
364
721
|
attr(el, dashcase(key), value[key]);
|
|
365
722
|
};
|
|
@@ -373,33 +730,33 @@ secondary["value"] = (el, expr) => {
|
|
|
373
730
|
el.value = value;
|
|
374
731
|
el.selectedOptions[0]?.setAttribute("selected", "");
|
|
375
732
|
} : (value) => el.value = value;
|
|
376
|
-
return (
|
|
733
|
+
return (state) => update(evaluate(state));
|
|
377
734
|
};
|
|
378
|
-
var directives_default = (el, expr,
|
|
735
|
+
var directives_default = (el, expr, state, name) => {
|
|
379
736
|
let evt = name.startsWith("on") && name.slice(2);
|
|
380
737
|
let evaluate = parseExpr(el, expr, ":" + name);
|
|
381
738
|
if (!evaluate)
|
|
382
739
|
return;
|
|
383
740
|
if (evt)
|
|
384
|
-
return (
|
|
385
|
-
let value = evaluate(
|
|
741
|
+
return (state2) => {
|
|
742
|
+
let value = evaluate(state2) || (() => {
|
|
386
743
|
});
|
|
387
744
|
return on(el, evt, value);
|
|
388
745
|
};
|
|
389
|
-
return (
|
|
746
|
+
return (state2) => attr(el, name, evaluate(state2));
|
|
390
747
|
};
|
|
391
|
-
var on = (el,
|
|
748
|
+
var on = (el, e2, fn) => {
|
|
392
749
|
if (!fn)
|
|
393
750
|
return;
|
|
394
751
|
const ctx = { evt: "", target: el, test: () => true };
|
|
395
|
-
ctx.evt = (
|
|
752
|
+
ctx.evt = (e2.startsWith("on") ? e2.slice(2) : e2).replace(
|
|
396
753
|
/\.(\w+)?-?([-\w]+)?/g,
|
|
397
754
|
(match, mod, param = "") => (ctx.test = mods[mod]?.(ctx, ...param.split("-")) || ctx.test, "")
|
|
398
755
|
);
|
|
399
756
|
const { evt, target, test, defer, stop, prevent, ...opts } = ctx;
|
|
400
757
|
if (defer)
|
|
401
758
|
fn = defer(fn);
|
|
402
|
-
const cb = (
|
|
759
|
+
const cb = (e3) => test(e3) && (stop && e3.stopPropagation(), prevent && e3.preventDefault(), fn.call(target, e3));
|
|
403
760
|
target.addEventListener(evt, cb, opts);
|
|
404
761
|
return () => target.removeEventListener(evt, cb, opts);
|
|
405
762
|
};
|
|
@@ -431,21 +788,21 @@ var mods = {
|
|
|
431
788
|
debounce(ctx, wait) {
|
|
432
789
|
ctx.defer = (fn) => debounce(fn, wait ? Number(wait) || 0 : 108);
|
|
433
790
|
},
|
|
434
|
-
outside: (ctx) => (
|
|
791
|
+
outside: (ctx) => (e2) => {
|
|
435
792
|
let target = ctx.target;
|
|
436
|
-
if (target.contains(
|
|
793
|
+
if (target.contains(e2.target))
|
|
437
794
|
return false;
|
|
438
|
-
if (
|
|
795
|
+
if (e2.target.isConnected === false)
|
|
439
796
|
return false;
|
|
440
797
|
if (target.offsetWidth < 1 && target.offsetHeight < 1)
|
|
441
798
|
return false;
|
|
442
799
|
return true;
|
|
443
800
|
},
|
|
444
|
-
self: (ctx) => (
|
|
445
|
-
ctrl: (ctx, ...param) => (
|
|
446
|
-
shift: (ctx, ...param) => (
|
|
447
|
-
alt: (ctx, ...param) => (
|
|
448
|
-
meta: (ctx, ...param) => (
|
|
801
|
+
self: (ctx) => (e2) => e2.target === ctx.target,
|
|
802
|
+
ctrl: (ctx, ...param) => (e2) => keys.ctrl(e2) && param.every((p2) => keys[p2] ? keys[p2](e2) : e2.key === p2),
|
|
803
|
+
shift: (ctx, ...param) => (e2) => keys.shift(e2) && param.every((p2) => keys[p2] ? keys[p2](e2) : e2.key === p2),
|
|
804
|
+
alt: (ctx, ...param) => (e2) => keys.alt(e2) && param.every((p2) => keys[p2] ? keys[p2](e2) : e2.key === p2),
|
|
805
|
+
meta: (ctx, ...param) => (e2) => keys.meta(e2) && param.every((p2) => keys[p2] ? keys[p2](e2) : e2.key === p2),
|
|
449
806
|
arrow: (ctx) => keys.arrow,
|
|
450
807
|
enter: (ctx) => keys.enter,
|
|
451
808
|
escape: (ctx) => keys.escape,
|
|
@@ -458,52 +815,52 @@ var mods = {
|
|
|
458
815
|
character: (ctx) => keys.character
|
|
459
816
|
};
|
|
460
817
|
var keys = {
|
|
461
|
-
ctrl: (
|
|
462
|
-
shift: (
|
|
463
|
-
alt: (
|
|
464
|
-
meta: (
|
|
465
|
-
arrow: (
|
|
466
|
-
enter: (
|
|
467
|
-
escape: (
|
|
468
|
-
tab: (
|
|
469
|
-
space: (
|
|
470
|
-
backspace: (
|
|
471
|
-
delete: (
|
|
472
|
-
digit: (
|
|
473
|
-
letter: (
|
|
474
|
-
character: (
|
|
818
|
+
ctrl: (e2) => e2.ctrlKey || e2.key === "Control" || e2.key === "Ctrl",
|
|
819
|
+
shift: (e2) => e2.shiftKey || e2.key === "Shift",
|
|
820
|
+
alt: (e2) => e2.altKey || e2.key === "Alt",
|
|
821
|
+
meta: (e2) => e2.metaKey || e2.key === "Meta" || e2.key === "Command",
|
|
822
|
+
arrow: (e2) => e2.key.startsWith("Arrow"),
|
|
823
|
+
enter: (e2) => e2.key === "Enter",
|
|
824
|
+
escape: (e2) => e2.key.startsWith("Esc"),
|
|
825
|
+
tab: (e2) => e2.key === "Tab",
|
|
826
|
+
space: (e2) => e2.key === "\xA0" || e2.key === "Space" || e2.key === " ",
|
|
827
|
+
backspace: (e2) => e2.key === "Backspace",
|
|
828
|
+
delete: (e2) => e2.key === "Delete",
|
|
829
|
+
digit: (e2) => /^\d$/.test(e2.key),
|
|
830
|
+
letter: (e2) => /^[a-zA-Z]$/.test(e2.key),
|
|
831
|
+
character: (e2) => /^\S$/.test(e2.key)
|
|
475
832
|
};
|
|
476
833
|
var throttle = (fn, limit) => {
|
|
477
|
-
let pause, planned, block = (
|
|
834
|
+
let pause, planned, block = (e2) => {
|
|
478
835
|
pause = true;
|
|
479
836
|
setTimeout(() => {
|
|
480
837
|
pause = false;
|
|
481
838
|
if (planned)
|
|
482
|
-
return planned = false, block(
|
|
839
|
+
return planned = false, block(e2), fn(e2);
|
|
483
840
|
}, limit);
|
|
484
841
|
};
|
|
485
|
-
return (
|
|
842
|
+
return (e2) => {
|
|
486
843
|
if (pause)
|
|
487
844
|
return planned = true;
|
|
488
|
-
block(
|
|
489
|
-
return fn(
|
|
845
|
+
block(e2);
|
|
846
|
+
return fn(e2);
|
|
490
847
|
};
|
|
491
848
|
};
|
|
492
849
|
var debounce = (fn, wait) => {
|
|
493
850
|
let timeout;
|
|
494
|
-
return (
|
|
851
|
+
return (e2) => {
|
|
495
852
|
clearTimeout(timeout);
|
|
496
853
|
timeout = setTimeout(() => {
|
|
497
854
|
timeout = null;
|
|
498
|
-
fn(
|
|
855
|
+
fn(e2);
|
|
499
856
|
}, wait);
|
|
500
857
|
};
|
|
501
858
|
};
|
|
502
|
-
var attr = (el, name,
|
|
503
|
-
if (
|
|
859
|
+
var attr = (el, name, v2) => {
|
|
860
|
+
if (v2 == null || v2 === false)
|
|
504
861
|
el.removeAttribute(name);
|
|
505
862
|
else
|
|
506
|
-
el.setAttribute(name,
|
|
863
|
+
el.setAttribute(name, v2 === true ? "" : typeof v2 === "number" || typeof v2 === "string" ? v2 : "");
|
|
507
864
|
};
|
|
508
865
|
var evaluatorMemo = {};
|
|
509
866
|
function parseExpr(el, expression, dir) {
|
|
@@ -511,16 +868,16 @@ function parseExpr(el, expression, dir) {
|
|
|
511
868
|
if (!evaluate) {
|
|
512
869
|
try {
|
|
513
870
|
evaluate = evaluatorMemo[expression] = new Function(`__scope`, `with (__scope) { return ${expression.trim()} };`);
|
|
514
|
-
} catch (
|
|
515
|
-
return exprError(
|
|
871
|
+
} catch (e2) {
|
|
872
|
+
return exprError(e2, el, expression, dir);
|
|
516
873
|
}
|
|
517
874
|
}
|
|
518
|
-
return (
|
|
875
|
+
return (state) => {
|
|
519
876
|
let result;
|
|
520
877
|
try {
|
|
521
|
-
result = evaluate.call(el,
|
|
522
|
-
} catch (
|
|
523
|
-
return exprError(
|
|
878
|
+
result = evaluate.call(el, state);
|
|
879
|
+
} catch (e2) {
|
|
880
|
+
return exprError(e2, el, expression, dir);
|
|
524
881
|
}
|
|
525
882
|
return result;
|
|
526
883
|
};
|
|
@@ -542,13 +899,13 @@ function dashcase(str) {
|
|
|
542
899
|
|
|
543
900
|
// src/core.js
|
|
544
901
|
sprae.globals = sandbox;
|
|
545
|
-
var
|
|
902
|
+
var memo2 = /* @__PURE__ */ new WeakMap();
|
|
546
903
|
function sprae(container, values) {
|
|
547
904
|
if (!container.children)
|
|
548
905
|
return;
|
|
549
|
-
if (
|
|
550
|
-
return Object.assign(
|
|
551
|
-
const
|
|
906
|
+
if (memo2.has(container))
|
|
907
|
+
return n(() => Object.assign(memo2.get(container), values));
|
|
908
|
+
const state = createState(values || {});
|
|
552
909
|
const updates = [];
|
|
553
910
|
const init = (el, parent = el.parentNode) => {
|
|
554
911
|
for (let name in primary) {
|
|
@@ -556,46 +913,46 @@ function sprae(container, values) {
|
|
|
556
913
|
if (el.hasAttribute?.(attrName)) {
|
|
557
914
|
let expr = el.getAttribute(attrName);
|
|
558
915
|
el.removeAttribute(attrName);
|
|
559
|
-
updates.push(primary[name](el, expr,
|
|
560
|
-
if (
|
|
916
|
+
updates.push(primary[name](el, expr, state, name));
|
|
917
|
+
if (memo2.has(el))
|
|
561
918
|
return;
|
|
562
919
|
if (el.parentNode !== parent)
|
|
563
920
|
return false;
|
|
564
921
|
}
|
|
565
922
|
}
|
|
566
923
|
if (el.attributes) {
|
|
567
|
-
for (let
|
|
568
|
-
let attr2 = el.attributes[
|
|
924
|
+
for (let i2 = 0; i2 < el.attributes.length; ) {
|
|
925
|
+
let attr2 = el.attributes[i2], prefix = attr2.name[0];
|
|
569
926
|
if (prefix === ":" || prefix === "@") {
|
|
570
927
|
el.removeAttribute(attr2.name);
|
|
571
|
-
let expr = prefix === "@" ?
|
|
928
|
+
let expr = prefix === "@" ? `${attr2.value.includes("await") ? "async" : ""} event=>{${attr2.value}}` : attr2.value, names = attr2.name.slice(1).split(prefix);
|
|
572
929
|
for (let name of names) {
|
|
573
930
|
if (prefix === "@")
|
|
574
931
|
name = `on` + name;
|
|
575
932
|
let dir = secondary[name] || directives_default;
|
|
576
|
-
updates.push(dir(el, expr,
|
|
933
|
+
updates.push(dir(el, expr, state, name));
|
|
577
934
|
}
|
|
578
935
|
} else
|
|
579
|
-
|
|
936
|
+
i2++;
|
|
580
937
|
}
|
|
581
938
|
}
|
|
582
|
-
for (let
|
|
939
|
+
for (let i2 = 0, child; child = el.children[i2]; i2++) {
|
|
583
940
|
if (init(child, el) === false)
|
|
584
|
-
|
|
941
|
+
i2--;
|
|
585
942
|
}
|
|
586
943
|
};
|
|
587
944
|
init(container);
|
|
588
945
|
for (let update of updates)
|
|
589
946
|
if (update) {
|
|
590
947
|
let teardown;
|
|
591
|
-
|
|
948
|
+
O(() => {
|
|
592
949
|
if (typeof teardown === "function")
|
|
593
950
|
teardown();
|
|
594
|
-
teardown = update(
|
|
951
|
+
teardown = update(state);
|
|
595
952
|
});
|
|
596
953
|
}
|
|
597
|
-
|
|
598
|
-
return
|
|
954
|
+
memo2.set(container, state);
|
|
955
|
+
return state;
|
|
599
956
|
}
|
|
600
957
|
|
|
601
958
|
// src/index.js
|