@unbndl/store 1.0.2 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/store/src/fromStore.d.ts +1 -1
- package/dist/store.js +172 -147
- package/dist/store.umd.cjs +1 -1
- package/package.json +9 -2
- package/src/fromStore.ts +2 -2
- /package/dist/{index.d.ts → store.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function fromStore<M extends object>(target: HTMLElement, contextLabel?: string):
|
|
1
|
+
export declare function fromStore<M extends object>(target: HTMLElement, contextLabel?: string): import('@unbndl/view').Source<M>;
|
package/dist/store.js
CHANGED
|
@@ -85,7 +85,7 @@ var ee = u(), te = class extends CustomEvent {
|
|
|
85
85
|
};
|
|
86
86
|
function d(e, ...t) {
|
|
87
87
|
let n = { execute() {
|
|
88
|
-
e(...t.map((e) => e
|
|
88
|
+
console.log("▶️ Executing created effect:", t, e), e(...t.map((e) => e.open(n))), t.forEach((e) => e.close());
|
|
89
89
|
} };
|
|
90
90
|
n.execute();
|
|
91
91
|
}
|
|
@@ -132,7 +132,7 @@ var f = class e {
|
|
|
132
132
|
n && f.scheduler.subscribe(t, e, n);
|
|
133
133
|
}
|
|
134
134
|
runEffects(e, t) {
|
|
135
|
-
if (f.scheduler.scheduleEffects(t, e), this.host) {
|
|
135
|
+
if (console.log("⚙️ Running effects for signal", e, t), f.scheduler.scheduleEffects(t, e), this.host) {
|
|
136
136
|
let n = new te(this.eventType, {
|
|
137
137
|
property: e,
|
|
138
138
|
value: t[e]
|
|
@@ -157,7 +157,7 @@ var f = class e {
|
|
|
157
157
|
this.proxy[e] = t;
|
|
158
158
|
}
|
|
159
159
|
toObject() {
|
|
160
|
-
return this.
|
|
160
|
+
return this.proxy;
|
|
161
161
|
}
|
|
162
162
|
update(e) {
|
|
163
163
|
Object.assign(this.proxy, e);
|
|
@@ -201,7 +201,7 @@ function m(e) {
|
|
|
201
201
|
default: return !1;
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
|
-
var
|
|
204
|
+
var h = class {
|
|
205
205
|
constructor(e, ...t) {
|
|
206
206
|
this.effectFn = () => e(...t);
|
|
207
207
|
}
|
|
@@ -209,17 +209,17 @@ var ie = class {
|
|
|
209
209
|
this.effectFn();
|
|
210
210
|
}
|
|
211
211
|
};
|
|
212
|
-
function
|
|
212
|
+
function g(e, t) {
|
|
213
213
|
return Object.assign(e, { render: t }), e;
|
|
214
214
|
}
|
|
215
|
-
function
|
|
215
|
+
function _(e, t, ...n) {
|
|
216
216
|
let r = e.cloneNode(!0);
|
|
217
217
|
return Array.from(t.entries()).forEach(([e, t]) => {
|
|
218
218
|
let i = r.querySelector(`[data-${e}]`);
|
|
219
219
|
i && t.forEach((e) => e(i, r, ...n));
|
|
220
220
|
}), r;
|
|
221
221
|
}
|
|
222
|
-
var
|
|
222
|
+
var v = class e {
|
|
223
223
|
static {
|
|
224
224
|
this.parser = new DOMParser();
|
|
225
225
|
}
|
|
@@ -255,7 +255,7 @@ var se = class e {
|
|
|
255
255
|
}
|
|
256
256
|
});
|
|
257
257
|
}
|
|
258
|
-
return
|
|
258
|
+
return g(s, (...e) => _(s, c, ...e));
|
|
259
259
|
}
|
|
260
260
|
static {
|
|
261
261
|
this.OPEN_RE = /<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/;
|
|
@@ -294,35 +294,35 @@ var se = class e {
|
|
|
294
294
|
let n = this.plugins;
|
|
295
295
|
for (let r = 0; r < n.length; r++) {
|
|
296
296
|
let i = n[r];
|
|
297
|
-
if (e.kind === i.place &&
|
|
297
|
+
if (e.kind === i.place && y(t, i)) return i.mutator(e, t);
|
|
298
298
|
}
|
|
299
299
|
}
|
|
300
300
|
};
|
|
301
|
-
function
|
|
301
|
+
function y(e, t) {
|
|
302
302
|
return typeof t.types == "function" ? t.types(e, t) : t.types.includes(typeof e);
|
|
303
303
|
}
|
|
304
|
-
var
|
|
304
|
+
var b = class {
|
|
305
305
|
constructor(e) {
|
|
306
306
|
this.place = e;
|
|
307
307
|
}
|
|
308
308
|
apply(e, t) {
|
|
309
309
|
throw "abstract method 'apply' called";
|
|
310
310
|
}
|
|
311
|
-
},
|
|
311
|
+
}, x = class extends b {
|
|
312
312
|
constructor(e, t) {
|
|
313
313
|
super(e), this.content = t;
|
|
314
314
|
}
|
|
315
315
|
apply(e, t) {
|
|
316
316
|
(e.parentNode || t).replaceChild(this.content, e);
|
|
317
317
|
}
|
|
318
|
-
},
|
|
318
|
+
}, ie = class extends b {
|
|
319
319
|
constructor(e, t) {
|
|
320
320
|
super(e), this.text = t, this.name = e.attrName;
|
|
321
321
|
}
|
|
322
322
|
apply(e) {
|
|
323
323
|
e.setAttribute(this.name, this.text);
|
|
324
324
|
}
|
|
325
|
-
},
|
|
325
|
+
}, ae = class extends b {
|
|
326
326
|
constructor(e, t) {
|
|
327
327
|
super(e), this.fn = t;
|
|
328
328
|
}
|
|
@@ -331,12 +331,12 @@ var h = class {
|
|
|
331
331
|
return (e, t, ...r) => {
|
|
332
332
|
let i = new Comment(` <<< ${n} `), a = new Comment(` >>> ${n} `), o = new DocumentFragment();
|
|
333
333
|
o.replaceChildren(i, a), (e.parentNode || t).replaceChild(o, e), d((...e) => {
|
|
334
|
-
|
|
334
|
+
oe(this.fn(...e), i, a);
|
|
335
335
|
}, ...r);
|
|
336
336
|
};
|
|
337
337
|
}
|
|
338
338
|
};
|
|
339
|
-
function
|
|
339
|
+
function oe(e, t, n) {
|
|
340
340
|
let r = t.parentNode;
|
|
341
341
|
if (!r) throw Error("No parent for placeholder");
|
|
342
342
|
let i = (e) => {
|
|
@@ -345,26 +345,24 @@ function v(e, t, n) {
|
|
|
345
345
|
return t.replaceChildren(...n), t;
|
|
346
346
|
} else if (e instanceof Node) return e;
|
|
347
347
|
else return new Text(e?.toString() || "");
|
|
348
|
-
}, a = i(e);
|
|
349
|
-
console.log("📸 Rendered for view:", e, a);
|
|
350
|
-
let o = t.nextSibling;
|
|
348
|
+
}, a = i(e), o = t.nextSibling;
|
|
351
349
|
for (; o && o !== n;) {
|
|
352
350
|
let e = o;
|
|
353
351
|
o = o.nextSibling, r.removeChild(e);
|
|
354
352
|
}
|
|
355
353
|
a && r.insertBefore(a, n);
|
|
356
354
|
}
|
|
357
|
-
var
|
|
355
|
+
var se = class extends b {
|
|
358
356
|
constructor(e, t) {
|
|
359
357
|
super(e), this.fn = t, this.name = e.attrName;
|
|
360
358
|
}
|
|
361
359
|
apply(e, t) {
|
|
362
360
|
return (e, t, ...n) => d((...t) => {
|
|
363
|
-
|
|
361
|
+
ce(this.fn(...t), e, this.name);
|
|
364
362
|
}, ...n);
|
|
365
363
|
}
|
|
366
364
|
};
|
|
367
|
-
function
|
|
365
|
+
function ce(e, t, n) {
|
|
368
366
|
let r = n.match(/^([.$])(.+)$/);
|
|
369
367
|
if (r) {
|
|
370
368
|
let [n, i, a] = r;
|
|
@@ -388,7 +386,7 @@ function b(e, t, n) {
|
|
|
388
386
|
default: t.setAttribute(n, e?.toString());
|
|
389
387
|
}
|
|
390
388
|
}
|
|
391
|
-
var
|
|
389
|
+
var le = class extends b {
|
|
392
390
|
constructor(e, t) {
|
|
393
391
|
super(e), this.fn = t;
|
|
394
392
|
}
|
|
@@ -399,7 +397,7 @@ var x = class extends h {
|
|
|
399
397
|
}, ...n);
|
|
400
398
|
}
|
|
401
399
|
};
|
|
402
|
-
new
|
|
400
|
+
new v().use([
|
|
403
401
|
{
|
|
404
402
|
place: "element content",
|
|
405
403
|
types: [
|
|
@@ -409,7 +407,7 @@ new se().use([
|
|
|
409
407
|
"symbol",
|
|
410
408
|
"boolean"
|
|
411
409
|
],
|
|
412
|
-
mutator: (e, t) => new
|
|
410
|
+
mutator: (e, t) => new x(e, new Text(t?.toString() || ""))
|
|
413
411
|
},
|
|
414
412
|
{
|
|
415
413
|
place: "attr value",
|
|
@@ -419,27 +417,35 @@ new se().use([
|
|
|
419
417
|
"bigint",
|
|
420
418
|
"symbol"
|
|
421
419
|
],
|
|
422
|
-
mutator: (e, t) => new
|
|
420
|
+
mutator: (e, t) => new ie(e, t?.toString() || "")
|
|
423
421
|
},
|
|
424
422
|
{
|
|
425
423
|
place: "element content",
|
|
426
424
|
types: (e) => e instanceof Node,
|
|
427
|
-
mutator: (e, t) => new
|
|
425
|
+
mutator: (e, t) => new x(e, t)
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
place: "element content",
|
|
429
|
+
types: (e) => Array.isArray(e),
|
|
430
|
+
mutator: (e, t) => {
|
|
431
|
+
let n = new DocumentFragment(), r = t.map((e) => e instanceof Node ? e : new Text(e?.toString() || ""));
|
|
432
|
+
return n.append(...r), new x(e, n);
|
|
433
|
+
}
|
|
428
434
|
},
|
|
429
435
|
{
|
|
430
436
|
place: "element content",
|
|
431
437
|
types: ["function"],
|
|
432
|
-
mutator: (e, t) => new
|
|
438
|
+
mutator: (e, t) => new ae(e, t)
|
|
433
439
|
},
|
|
434
440
|
{
|
|
435
441
|
place: "attr value",
|
|
436
442
|
types: ["function"],
|
|
437
|
-
mutator: (e, t) => new
|
|
443
|
+
mutator: (e, t) => new se(e, t)
|
|
438
444
|
},
|
|
439
445
|
{
|
|
440
446
|
place: "tag content",
|
|
441
447
|
types: ["function"],
|
|
442
|
-
mutator: (e, t) => new
|
|
448
|
+
mutator: (e, t) => new le(e, t)
|
|
443
449
|
}
|
|
444
450
|
]);
|
|
445
451
|
var ue = class e extends HTMLElement {
|
|
@@ -510,13 +516,13 @@ var me = class {
|
|
|
510
516
|
}
|
|
511
517
|
attachObserver(e) {
|
|
512
518
|
let t = this.provider.attach((t) => {
|
|
513
|
-
let { property: n, value: r } = t.detail, i = new
|
|
519
|
+
let { property: n, value: r } = t.detail, i = new h(e, {
|
|
514
520
|
property: n,
|
|
515
521
|
value: r
|
|
516
522
|
});
|
|
517
|
-
|
|
523
|
+
console.log("📡Signal received:", n, r), i.execute();
|
|
518
524
|
});
|
|
519
|
-
return
|
|
525
|
+
return console.log("👀 Initial observation:", t), t;
|
|
520
526
|
}
|
|
521
527
|
}, he = class {
|
|
522
528
|
constructor(e, t, n = "service:message", r = !0) {
|
|
@@ -530,19 +536,22 @@ var me = class {
|
|
|
530
536
|
});
|
|
531
537
|
}
|
|
532
538
|
start() {
|
|
533
|
-
this._running || (this._running = !0, this._pending.forEach((e) => this.process(e)));
|
|
539
|
+
this._running || (console.log(`Starting ${this._eventType} service`), this._running = !0, this._pending.forEach((e) => this.process(e)));
|
|
534
540
|
}
|
|
535
541
|
consume(e) {
|
|
536
|
-
if (e.length
|
|
542
|
+
if (e.length !== 0) {
|
|
537
543
|
let t = e;
|
|
538
|
-
this._running ? this.process(t) : this._pending.push(t);
|
|
544
|
+
this._running ? this.process(t) : (console.log(`📥 Queueing ${this._eventType} message`, e), this._pending.push(t));
|
|
539
545
|
}
|
|
540
546
|
}
|
|
541
547
|
process(e) {
|
|
548
|
+
console.log(`📤 Processing ${this._eventType} message`, e);
|
|
542
549
|
let t = this._update(e, this._context.toObject());
|
|
543
|
-
if (!Array.isArray(t))
|
|
544
|
-
|
|
545
|
-
|
|
550
|
+
if (console.log("⏭️ next state: ", t), !Array.isArray(t)) this._context.update(t);
|
|
551
|
+
else {
|
|
552
|
+
let [e, ...n] = t;
|
|
553
|
+
n.forEach((e) => e.then((e) => this.consume(e))), this._context.update(e);
|
|
554
|
+
}
|
|
546
555
|
}
|
|
547
556
|
};
|
|
548
557
|
function ge(e, t) {
|
|
@@ -589,7 +598,7 @@ var _e = class {
|
|
|
589
598
|
super((e, t) => this.update(e, t), t, e.EVENT_TYPE), this._redirectForLogin = n;
|
|
590
599
|
}
|
|
591
600
|
update(e, t) {
|
|
592
|
-
switch (e[0]) {
|
|
601
|
+
switch (console.log("Auth update", e), e[0]) {
|
|
593
602
|
case "auth/signin":
|
|
594
603
|
let { token: n, redirect: r } = e[1];
|
|
595
604
|
return [D(n), T(r)];
|
|
@@ -613,7 +622,7 @@ function T(e, t = {}) {
|
|
|
613
622
|
function E(e, t = {}) {
|
|
614
623
|
if (e) {
|
|
615
624
|
let n = window.location.href, r = new URL(e, n);
|
|
616
|
-
Object.entries(t).forEach(([e, t]) => r.searchParams.set(e, t)), console.log("
|
|
625
|
+
Object.entries(t).forEach(([e, t]) => r.searchParams.set(e, t)), console.log("Auth redirecting to ", e), window.history.pushState({}, "", e), window.history.go();
|
|
617
626
|
}
|
|
618
627
|
}
|
|
619
628
|
function D(e) {
|
|
@@ -673,7 +682,7 @@ var be = P(), xe = class extends CustomEvent {
|
|
|
673
682
|
};
|
|
674
683
|
function F(e, ...t) {
|
|
675
684
|
let n = { execute() {
|
|
676
|
-
e(...t.map((e) => e.open(n))), t.forEach((e) => e.close());
|
|
685
|
+
console.log("▶️ Executing created effect:", t, e), e(...t.map((e) => e.open(n))), t.forEach((e) => e.close());
|
|
677
686
|
} };
|
|
678
687
|
n.execute();
|
|
679
688
|
}
|
|
@@ -720,7 +729,7 @@ var I = class e {
|
|
|
720
729
|
n && I.scheduler.subscribe(t, e, n);
|
|
721
730
|
}
|
|
722
731
|
runEffects(e, t) {
|
|
723
|
-
if (I.scheduler.scheduleEffects(t, e), this.host) {
|
|
732
|
+
if (console.log("⚙️ Running effects for signal", e, t), I.scheduler.scheduleEffects(t, e), this.host) {
|
|
724
733
|
let n = new xe(this.eventType, {
|
|
725
734
|
property: e,
|
|
726
735
|
value: t[e]
|
|
@@ -910,7 +919,7 @@ var z = class {
|
|
|
910
919
|
apply(e) {
|
|
911
920
|
e.setAttribute(this.name, this.text);
|
|
912
921
|
}
|
|
913
|
-
},
|
|
922
|
+
}, Ae = class extends z {
|
|
914
923
|
constructor(e, t) {
|
|
915
924
|
super(e), this.fn = t;
|
|
916
925
|
}
|
|
@@ -919,12 +928,12 @@ var z = class {
|
|
|
919
928
|
return (e, t, ...r) => {
|
|
920
929
|
let i = new Comment(` <<< ${n} `), a = new Comment(` >>> ${n} `), o = new DocumentFragment();
|
|
921
930
|
o.replaceChildren(i, a), (e.parentNode || t).replaceChild(o, e), F((...e) => {
|
|
922
|
-
|
|
931
|
+
je(this.fn(...e), i, a);
|
|
923
932
|
}, ...r);
|
|
924
933
|
};
|
|
925
934
|
}
|
|
926
935
|
};
|
|
927
|
-
function
|
|
936
|
+
function je(e, t, n) {
|
|
928
937
|
let r = t.parentNode;
|
|
929
938
|
if (!r) throw Error("No parent for placeholder");
|
|
930
939
|
let i = (e) => {
|
|
@@ -940,17 +949,17 @@ function Ae(e, t, n) {
|
|
|
940
949
|
}
|
|
941
950
|
a && r.insertBefore(a, n);
|
|
942
951
|
}
|
|
943
|
-
var
|
|
952
|
+
var Me = class extends z {
|
|
944
953
|
constructor(e, t) {
|
|
945
954
|
super(e), this.fn = t, this.name = e.attrName;
|
|
946
955
|
}
|
|
947
956
|
apply(e, t) {
|
|
948
957
|
return (e, t, ...n) => F((...t) => {
|
|
949
|
-
|
|
958
|
+
Ne(this.fn(...t), e, this.name);
|
|
950
959
|
}, ...n);
|
|
951
960
|
}
|
|
952
961
|
};
|
|
953
|
-
function
|
|
962
|
+
function Ne(e, t, n) {
|
|
954
963
|
let r = n.match(/^([.$])(.+)$/);
|
|
955
964
|
if (r) {
|
|
956
965
|
let [n, i, a] = r;
|
|
@@ -974,7 +983,7 @@ function Me(e, t, n) {
|
|
|
974
983
|
default: t.setAttribute(n, e?.toString());
|
|
975
984
|
}
|
|
976
985
|
}
|
|
977
|
-
var
|
|
986
|
+
var Pe = class extends z {
|
|
978
987
|
constructor(e, t) {
|
|
979
988
|
super(e), this.fn = t;
|
|
980
989
|
}
|
|
@@ -1023,20 +1032,20 @@ new De().use([
|
|
|
1023
1032
|
{
|
|
1024
1033
|
place: "element content",
|
|
1025
1034
|
types: ["function"],
|
|
1026
|
-
mutator: (e, t) => new
|
|
1035
|
+
mutator: (e, t) => new Ae(e, t)
|
|
1027
1036
|
},
|
|
1028
1037
|
{
|
|
1029
1038
|
place: "attr value",
|
|
1030
1039
|
types: ["function"],
|
|
1031
|
-
mutator: (e, t) => new
|
|
1040
|
+
mutator: (e, t) => new Me(e, t)
|
|
1032
1041
|
},
|
|
1033
1042
|
{
|
|
1034
1043
|
place: "tag content",
|
|
1035
1044
|
types: ["function"],
|
|
1036
|
-
mutator: (e, t) => new
|
|
1045
|
+
mutator: (e, t) => new Pe(e, t)
|
|
1037
1046
|
}
|
|
1038
1047
|
]);
|
|
1039
|
-
var
|
|
1048
|
+
var V = class e extends HTMLElement {
|
|
1040
1049
|
static {
|
|
1041
1050
|
this.DISCOVERY_EVENT = "un-provider:discover";
|
|
1042
1051
|
}
|
|
@@ -1048,11 +1057,11 @@ var H = class e extends HTMLElement {
|
|
|
1048
1057
|
}
|
|
1049
1058
|
static {
|
|
1050
1059
|
document.addEventListener(e.DISCOVERY_EVENT, (e) => {
|
|
1051
|
-
let [t, n] = e.detail, r =
|
|
1060
|
+
let [t, n] = e.detail, r = Le(t);
|
|
1052
1061
|
r && n(r);
|
|
1053
1062
|
}), document.addEventListener(e.REGISTRY_EVENT, (e) => {
|
|
1054
1063
|
let [t, n] = e.detail;
|
|
1055
|
-
|
|
1064
|
+
Ie(t, n);
|
|
1056
1065
|
});
|
|
1057
1066
|
}
|
|
1058
1067
|
constructor(t, n) {
|
|
@@ -1074,9 +1083,9 @@ var H = class e extends HTMLElement {
|
|
|
1074
1083
|
this.removeEventListener(e.CHANGE_EVENT, t);
|
|
1075
1084
|
}
|
|
1076
1085
|
};
|
|
1077
|
-
function
|
|
1086
|
+
function Fe(e, t) {
|
|
1078
1087
|
return new Promise((n, r) => {
|
|
1079
|
-
let i = new CustomEvent(
|
|
1088
|
+
let i = new CustomEvent(V.DISCOVERY_EVENT, {
|
|
1080
1089
|
bubbles: !0,
|
|
1081
1090
|
composed: !0,
|
|
1082
1091
|
detail: [t, (e) => e ? n(e) : r()]
|
|
@@ -1084,20 +1093,20 @@ function Pe(e, t) {
|
|
|
1084
1093
|
e.isConnected ? e.dispatchEvent(i) : document.dispatchEvent(i);
|
|
1085
1094
|
});
|
|
1086
1095
|
}
|
|
1087
|
-
var
|
|
1088
|
-
function
|
|
1089
|
-
|
|
1096
|
+
var H = {};
|
|
1097
|
+
function Ie(e, t) {
|
|
1098
|
+
H[e] = t;
|
|
1090
1099
|
}
|
|
1091
|
-
function
|
|
1092
|
-
return
|
|
1100
|
+
function Le(e) {
|
|
1101
|
+
return H[e];
|
|
1093
1102
|
}
|
|
1094
|
-
var
|
|
1103
|
+
var Re = class {
|
|
1095
1104
|
constructor(e) {
|
|
1096
1105
|
this.contextLabel = e;
|
|
1097
1106
|
}
|
|
1098
1107
|
observe(e, t) {
|
|
1099
1108
|
return new Promise((n, r) => {
|
|
1100
|
-
this.provider ? n(this.attachObserver(t)) :
|
|
1109
|
+
this.provider ? n(this.attachObserver(t)) : Fe(e, this.contextLabel).then((e) => {
|
|
1101
1110
|
this.provider = e, n(this.attachObserver(t));
|
|
1102
1111
|
}).catch((e) => r(e));
|
|
1103
1112
|
});
|
|
@@ -1108,11 +1117,11 @@ var Le = class {
|
|
|
1108
1117
|
property: n,
|
|
1109
1118
|
value: r
|
|
1110
1119
|
});
|
|
1111
|
-
|
|
1120
|
+
console.log("📡Signal received:", n, r), i.execute();
|
|
1112
1121
|
});
|
|
1113
|
-
return
|
|
1122
|
+
return console.log("👀 Initial observation:", t), t;
|
|
1114
1123
|
}
|
|
1115
|
-
},
|
|
1124
|
+
}, ze = class {
|
|
1116
1125
|
constructor(e, t, n = "service:message", r = !0) {
|
|
1117
1126
|
this._pending = [], this._context = t, this._update = e, this._eventType = n, this._running = r;
|
|
1118
1127
|
}
|
|
@@ -1124,50 +1133,60 @@ var Le = class {
|
|
|
1124
1133
|
});
|
|
1125
1134
|
}
|
|
1126
1135
|
start() {
|
|
1127
|
-
this._running || (this._running = !0, this._pending.forEach((e) => this.process(e)));
|
|
1136
|
+
this._running || (console.log(`Starting ${this._eventType} service`), this._running = !0, this._pending.forEach((e) => this.process(e)));
|
|
1128
1137
|
}
|
|
1129
1138
|
consume(e) {
|
|
1130
|
-
if (e.length
|
|
1139
|
+
if (e.length !== 0) {
|
|
1131
1140
|
let t = e;
|
|
1132
|
-
this._running ? this.process(t) : this._pending.push(t);
|
|
1141
|
+
this._running ? this.process(t) : (console.log(`📥 Queueing ${this._eventType} message`, e), this._pending.push(t));
|
|
1133
1142
|
}
|
|
1134
1143
|
}
|
|
1135
1144
|
process(e) {
|
|
1145
|
+
console.log(`📤 Processing ${this._eventType} message`, e);
|
|
1136
1146
|
let t = this._update(e, this._context.toObject());
|
|
1137
|
-
if (!Array.isArray(t))
|
|
1138
|
-
|
|
1139
|
-
|
|
1147
|
+
if (console.log("⏭️ next state: ", t), !Array.isArray(t)) this._context.update(t);
|
|
1148
|
+
else {
|
|
1149
|
+
let [e, ...n] = t;
|
|
1150
|
+
n.forEach((e) => e.then((e) => this.consume(e))), this._context.update(e);
|
|
1151
|
+
}
|
|
1140
1152
|
}
|
|
1141
|
-
}
|
|
1153
|
+
};
|
|
1154
|
+
function Be(e, t) {
|
|
1155
|
+
return new Ve(e, t);
|
|
1156
|
+
}
|
|
1157
|
+
var Ve = class {
|
|
1142
1158
|
constructor(e, t) {
|
|
1143
|
-
this.client = e, this.observer = new
|
|
1159
|
+
this.client = e, this.observer = new Re(t);
|
|
1144
1160
|
}
|
|
1145
1161
|
start(e) {
|
|
1146
1162
|
return this.observer.observe(this.client, (t) => {
|
|
1147
1163
|
e(t.property, t.value);
|
|
1148
1164
|
});
|
|
1149
1165
|
}
|
|
1150
|
-
},
|
|
1166
|
+
}, U = class {
|
|
1151
1167
|
constructor(e, t) {
|
|
1152
|
-
this.origin = e;
|
|
1153
|
-
let n =
|
|
1168
|
+
this.initialized = !1, this.origin = e;
|
|
1169
|
+
let n = He(t).map(([e, t]) => [t, e]);
|
|
1154
1170
|
this.inverse = Object.fromEntries(n);
|
|
1155
1171
|
}
|
|
1156
1172
|
mapObservation(e) {
|
|
1157
|
-
let t = Object.entries(e)
|
|
1158
|
-
|
|
1173
|
+
let t = Object.entries(e).map(([e, t]) => {
|
|
1174
|
+
let n = this.inverse[e];
|
|
1175
|
+
return n ? [n, t] : [];
|
|
1176
|
+
});
|
|
1177
|
+
return Object.fromEntries(t.filter((e) => e.length > 0));
|
|
1159
1178
|
}
|
|
1160
1179
|
start(e) {
|
|
1161
1180
|
return this.origin.start((t, n) => {
|
|
1162
1181
|
let r = this.inverse[t];
|
|
1163
|
-
e(r, n);
|
|
1164
|
-
}).then((e) => this.mapObservation(e));
|
|
1182
|
+
e(r, n), this.initialized = !0;
|
|
1183
|
+
}).then((e) => this.initialized ? {} : this.mapObservation(e));
|
|
1165
1184
|
}
|
|
1166
1185
|
};
|
|
1167
|
-
function
|
|
1186
|
+
function He(e) {
|
|
1168
1187
|
return Object.entries(e).map(([e, t]) => [e, t]);
|
|
1169
1188
|
}
|
|
1170
|
-
var
|
|
1189
|
+
var Ue = class extends CustomEvent {
|
|
1171
1190
|
constructor(e, t) {
|
|
1172
1191
|
super(e, {
|
|
1173
1192
|
bubbles: !0,
|
|
@@ -1177,13 +1196,13 @@ var Ve = class extends CustomEvent {
|
|
|
1177
1196
|
});
|
|
1178
1197
|
}
|
|
1179
1198
|
};
|
|
1180
|
-
function
|
|
1199
|
+
function W(e, ...t) {
|
|
1181
1200
|
let n = { execute() {
|
|
1182
|
-
e(...t.map((e) => e.open(n))), t.forEach((e) => e.close());
|
|
1201
|
+
console.log("▶️ Executing created effect:", t, e), e(...t.map((e) => e.open(n))), t.forEach((e) => e.close());
|
|
1183
1202
|
} };
|
|
1184
1203
|
n.execute();
|
|
1185
1204
|
}
|
|
1186
|
-
var
|
|
1205
|
+
var G = class e {
|
|
1187
1206
|
constructor() {
|
|
1188
1207
|
this.signals = /* @__PURE__ */ new WeakMap(), this.scheduled = /* @__PURE__ */ new WeakSet();
|
|
1189
1208
|
}
|
|
@@ -1204,7 +1223,7 @@ var K = class e {
|
|
|
1204
1223
|
this.scheduled.delete(e), e.execute();
|
|
1205
1224
|
}));
|
|
1206
1225
|
}
|
|
1207
|
-
},
|
|
1226
|
+
}, We = class {
|
|
1208
1227
|
constructor() {
|
|
1209
1228
|
this.running = [], this.eventType = "un-effect:change";
|
|
1210
1229
|
}
|
|
@@ -1223,11 +1242,11 @@ var K = class e {
|
|
|
1223
1242
|
}
|
|
1224
1243
|
subscribe(e, t) {
|
|
1225
1244
|
let n = this.current();
|
|
1226
|
-
n &&
|
|
1245
|
+
n && G.scheduler.subscribe(t, e, n);
|
|
1227
1246
|
}
|
|
1228
1247
|
runEffects(e, t) {
|
|
1229
|
-
if (
|
|
1230
|
-
let n = new
|
|
1248
|
+
if (console.log("⚙️ Running effects for signal", e, t), G.scheduler.scheduleEffects(t, e), this.host) {
|
|
1249
|
+
let n = new Ue(this.eventType, {
|
|
1231
1250
|
property: e,
|
|
1232
1251
|
value: t[e]
|
|
1233
1252
|
});
|
|
@@ -1237,12 +1256,12 @@ var K = class e {
|
|
|
1237
1256
|
setHost(e, t) {
|
|
1238
1257
|
this.host = e, t && (this.eventType = t);
|
|
1239
1258
|
}
|
|
1240
|
-
},
|
|
1259
|
+
}, K = class {
|
|
1241
1260
|
static {
|
|
1242
1261
|
this.CHANGE_EVENT_TYPE = "un-context:change";
|
|
1243
1262
|
}
|
|
1244
1263
|
constructor(e, t) {
|
|
1245
|
-
t ? (this.manager = t.manager, this.object = t.object, this.proxy = t.proxy, this.update(e)) : (this.manager = new
|
|
1264
|
+
t ? (this.manager = t.manager, this.object = t.object, this.proxy = t.proxy, this.update(e)) : (this.manager = new We(), this.object = e, this.proxy = Ge(this.object, this.manager));
|
|
1246
1265
|
}
|
|
1247
1266
|
get(e) {
|
|
1248
1267
|
return this.proxy[e];
|
|
@@ -1260,7 +1279,7 @@ var K = class e {
|
|
|
1260
1279
|
this.update(e(this.proxy));
|
|
1261
1280
|
}
|
|
1262
1281
|
createEffect(e) {
|
|
1263
|
-
|
|
1282
|
+
W(e, this);
|
|
1264
1283
|
}
|
|
1265
1284
|
setHost(e, t) {
|
|
1266
1285
|
this.manager.setHost(e, t);
|
|
@@ -1272,19 +1291,19 @@ var K = class e {
|
|
|
1272
1291
|
this.manager.pop();
|
|
1273
1292
|
}
|
|
1274
1293
|
};
|
|
1275
|
-
function
|
|
1294
|
+
function Ge(e, t) {
|
|
1276
1295
|
return new Proxy(e, {
|
|
1277
1296
|
get: (e, n, r) => {
|
|
1278
1297
|
let i = Reflect.get(e, n, r);
|
|
1279
|
-
return t.isRunning() &&
|
|
1298
|
+
return t.isRunning() && q(i) && t.subscribe(n, e), i;
|
|
1280
1299
|
},
|
|
1281
1300
|
set: (e, n, r, i) => {
|
|
1282
1301
|
let a = Reflect.set(e, n, r, i);
|
|
1283
|
-
return a &&
|
|
1302
|
+
return a && q(r) && t.runEffects(n, e), a;
|
|
1284
1303
|
}
|
|
1285
1304
|
});
|
|
1286
1305
|
}
|
|
1287
|
-
function
|
|
1306
|
+
function q(e) {
|
|
1288
1307
|
switch (typeof e) {
|
|
1289
1308
|
case "object":
|
|
1290
1309
|
case "number":
|
|
@@ -1295,17 +1314,17 @@ function J(e) {
|
|
|
1295
1314
|
default: return !1;
|
|
1296
1315
|
}
|
|
1297
1316
|
}
|
|
1298
|
-
function
|
|
1317
|
+
function Ke(e, t) {
|
|
1299
1318
|
return Object.assign(e, { render: t }), e;
|
|
1300
1319
|
}
|
|
1301
|
-
function
|
|
1320
|
+
function qe(e, t, ...n) {
|
|
1302
1321
|
let r = e.cloneNode(!0);
|
|
1303
1322
|
return Array.from(t.entries()).forEach(([e, t]) => {
|
|
1304
1323
|
let i = r.querySelector(`[data-${e}]`);
|
|
1305
1324
|
i && t.forEach((e) => e(i, r, ...n));
|
|
1306
1325
|
}), r;
|
|
1307
1326
|
}
|
|
1308
|
-
var
|
|
1327
|
+
var Je = class e {
|
|
1309
1328
|
static {
|
|
1310
1329
|
this.parser = new DOMParser();
|
|
1311
1330
|
}
|
|
@@ -1341,7 +1360,7 @@ var Ke = class e {
|
|
|
1341
1360
|
}
|
|
1342
1361
|
});
|
|
1343
1362
|
}
|
|
1344
|
-
return
|
|
1363
|
+
return Ke(s, (...e) => qe(s, c, ...e));
|
|
1345
1364
|
}
|
|
1346
1365
|
static {
|
|
1347
1366
|
this.OPEN_RE = /<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/;
|
|
@@ -1380,35 +1399,35 @@ var Ke = class e {
|
|
|
1380
1399
|
let n = this.plugins;
|
|
1381
1400
|
for (let r = 0; r < n.length; r++) {
|
|
1382
1401
|
let i = n[r];
|
|
1383
|
-
if (e.kind === i.place &&
|
|
1402
|
+
if (e.kind === i.place && Ye(t, i)) return i.mutator(e, t);
|
|
1384
1403
|
}
|
|
1385
1404
|
}
|
|
1386
1405
|
};
|
|
1387
|
-
function
|
|
1406
|
+
function Ye(e, t) {
|
|
1388
1407
|
return typeof t.types == "function" ? t.types(e, t) : t.types.includes(typeof e);
|
|
1389
1408
|
}
|
|
1390
|
-
var
|
|
1409
|
+
var J = class {
|
|
1391
1410
|
constructor(e) {
|
|
1392
1411
|
this.place = e;
|
|
1393
1412
|
}
|
|
1394
1413
|
apply(e, t) {
|
|
1395
1414
|
throw "abstract method 'apply' called";
|
|
1396
1415
|
}
|
|
1397
|
-
},
|
|
1416
|
+
}, Y = class extends J {
|
|
1398
1417
|
constructor(e, t) {
|
|
1399
1418
|
super(e), this.content = t;
|
|
1400
1419
|
}
|
|
1401
1420
|
apply(e, t) {
|
|
1402
1421
|
(e.parentNode || t).replaceChild(this.content, e);
|
|
1403
1422
|
}
|
|
1404
|
-
},
|
|
1423
|
+
}, Xe = class extends J {
|
|
1405
1424
|
constructor(e, t) {
|
|
1406
1425
|
super(e), this.text = t, this.name = e.attrName;
|
|
1407
1426
|
}
|
|
1408
1427
|
apply(e) {
|
|
1409
1428
|
e.setAttribute(this.name, this.text);
|
|
1410
1429
|
}
|
|
1411
|
-
},
|
|
1430
|
+
}, Ze = class extends J {
|
|
1412
1431
|
constructor(e, t) {
|
|
1413
1432
|
super(e), this.fn = t;
|
|
1414
1433
|
}
|
|
@@ -1416,13 +1435,13 @@ var Y = class {
|
|
|
1416
1435
|
let n = this.place.nodeLabel;
|
|
1417
1436
|
return (e, t, ...r) => {
|
|
1418
1437
|
let i = new Comment(` <<< ${n} `), a = new Comment(` >>> ${n} `), o = new DocumentFragment();
|
|
1419
|
-
o.replaceChildren(i, a), (e.parentNode || t).replaceChild(o, e),
|
|
1420
|
-
|
|
1438
|
+
o.replaceChildren(i, a), (e.parentNode || t).replaceChild(o, e), W((...e) => {
|
|
1439
|
+
Qe(this.fn(...e), i, a);
|
|
1421
1440
|
}, ...r);
|
|
1422
1441
|
};
|
|
1423
1442
|
}
|
|
1424
1443
|
};
|
|
1425
|
-
function
|
|
1444
|
+
function Qe(e, t, n) {
|
|
1426
1445
|
let r = t.parentNode;
|
|
1427
1446
|
if (!r) throw Error("No parent for placeholder");
|
|
1428
1447
|
let i = (e) => {
|
|
@@ -1438,17 +1457,17 @@ function Xe(e, t, n) {
|
|
|
1438
1457
|
}
|
|
1439
1458
|
a && r.insertBefore(a, n);
|
|
1440
1459
|
}
|
|
1441
|
-
var
|
|
1460
|
+
var $e = class extends J {
|
|
1442
1461
|
constructor(e, t) {
|
|
1443
1462
|
super(e), this.fn = t, this.name = e.attrName;
|
|
1444
1463
|
}
|
|
1445
1464
|
apply(e, t) {
|
|
1446
|
-
return (e, t, ...n) =>
|
|
1447
|
-
|
|
1465
|
+
return (e, t, ...n) => W((...t) => {
|
|
1466
|
+
et(this.fn(...t), e, this.name);
|
|
1448
1467
|
}, ...n);
|
|
1449
1468
|
}
|
|
1450
1469
|
};
|
|
1451
|
-
function
|
|
1470
|
+
function et(e, t, n) {
|
|
1452
1471
|
let r = n.match(/^([.$])(.+)$/);
|
|
1453
1472
|
if (r) {
|
|
1454
1473
|
let [n, i, a] = r;
|
|
@@ -1457,7 +1476,7 @@ function Qe(e, t, n) {
|
|
|
1457
1476
|
t[a] = e;
|
|
1458
1477
|
break;
|
|
1459
1478
|
case "$":
|
|
1460
|
-
"viewModel" in t && t.viewModel instanceof
|
|
1479
|
+
"viewModel" in t && t.viewModel instanceof K && t.viewModel.set(a, e);
|
|
1461
1480
|
break;
|
|
1462
1481
|
}
|
|
1463
1482
|
} else switch (typeof e) {
|
|
@@ -1472,18 +1491,18 @@ function Qe(e, t, n) {
|
|
|
1472
1491
|
default: t.setAttribute(n, e?.toString());
|
|
1473
1492
|
}
|
|
1474
1493
|
}
|
|
1475
|
-
var
|
|
1494
|
+
var X = class extends J {
|
|
1476
1495
|
constructor(e, t) {
|
|
1477
1496
|
super(e), this.fn = t;
|
|
1478
1497
|
}
|
|
1479
1498
|
apply(e, t) {
|
|
1480
|
-
return (e, t, ...n) =>
|
|
1499
|
+
return (e, t, ...n) => W((...t) => {
|
|
1481
1500
|
let n = this.fn(...t);
|
|
1482
1501
|
typeof n == "function" && n(e);
|
|
1483
1502
|
}, ...n);
|
|
1484
1503
|
}
|
|
1485
1504
|
};
|
|
1486
|
-
new
|
|
1505
|
+
new Je().use([
|
|
1487
1506
|
{
|
|
1488
1507
|
place: "element content",
|
|
1489
1508
|
types: [
|
|
@@ -1493,7 +1512,7 @@ new Ke().use([
|
|
|
1493
1512
|
"symbol",
|
|
1494
1513
|
"boolean"
|
|
1495
1514
|
],
|
|
1496
|
-
mutator: (e, t) => new
|
|
1515
|
+
mutator: (e, t) => new Y(e, new Text(t?.toString() || ""))
|
|
1497
1516
|
},
|
|
1498
1517
|
{
|
|
1499
1518
|
place: "attr value",
|
|
@@ -1503,38 +1522,38 @@ new Ke().use([
|
|
|
1503
1522
|
"bigint",
|
|
1504
1523
|
"symbol"
|
|
1505
1524
|
],
|
|
1506
|
-
mutator: (e, t) => new
|
|
1525
|
+
mutator: (e, t) => new Xe(e, t?.toString() || "")
|
|
1507
1526
|
},
|
|
1508
1527
|
{
|
|
1509
1528
|
place: "element content",
|
|
1510
1529
|
types: (e) => e instanceof Node,
|
|
1511
|
-
mutator: (e, t) => new
|
|
1530
|
+
mutator: (e, t) => new Y(e, t)
|
|
1512
1531
|
},
|
|
1513
1532
|
{
|
|
1514
1533
|
place: "element content",
|
|
1515
1534
|
types: (e) => Array.isArray(e),
|
|
1516
1535
|
mutator: (e, t) => {
|
|
1517
1536
|
let n = new DocumentFragment(), r = t.map((e) => e instanceof Node ? e : new Text(e?.toString() || ""));
|
|
1518
|
-
return n.append(...r), new
|
|
1537
|
+
return n.append(...r), new Y(e, n);
|
|
1519
1538
|
}
|
|
1520
1539
|
},
|
|
1521
1540
|
{
|
|
1522
1541
|
place: "element content",
|
|
1523
1542
|
types: ["function"],
|
|
1524
|
-
mutator: (e, t) => new
|
|
1543
|
+
mutator: (e, t) => new Ze(e, t)
|
|
1525
1544
|
},
|
|
1526
1545
|
{
|
|
1527
1546
|
place: "attr value",
|
|
1528
1547
|
types: ["function"],
|
|
1529
|
-
mutator: (e, t) => new
|
|
1548
|
+
mutator: (e, t) => new $e(e, t)
|
|
1530
1549
|
},
|
|
1531
1550
|
{
|
|
1532
1551
|
place: "tag content",
|
|
1533
1552
|
types: ["function"],
|
|
1534
|
-
mutator: (e, t) => new
|
|
1553
|
+
mutator: (e, t) => new X(e, t)
|
|
1535
1554
|
}
|
|
1536
1555
|
]);
|
|
1537
|
-
var Z = class extends
|
|
1556
|
+
var Z = class extends K {
|
|
1538
1557
|
constructor(e, t) {
|
|
1539
1558
|
super(e, t);
|
|
1540
1559
|
}
|
|
@@ -1543,57 +1562,63 @@ var Z = class extends q {
|
|
|
1543
1562
|
}
|
|
1544
1563
|
with(e, ...t) {
|
|
1545
1564
|
let n = Object.fromEntries(t.map((e) => [e, e]));
|
|
1546
|
-
return this.merge(new
|
|
1565
|
+
return this.merge(new U(e, n));
|
|
1547
1566
|
}
|
|
1548
1567
|
withCalculated(e, t) {
|
|
1549
|
-
return this.merge(new
|
|
1568
|
+
return this.merge(new U(e, t));
|
|
1550
1569
|
}
|
|
1551
1570
|
withRenamed(e, t) {
|
|
1552
|
-
return this.merge(new
|
|
1571
|
+
return this.merge(new U(e, t));
|
|
1553
1572
|
}
|
|
1554
1573
|
merge(e) {
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1574
|
+
if (e) {
|
|
1575
|
+
let t = /* @__PURE__ */ new Map();
|
|
1576
|
+
e.start((e, n) => {
|
|
1577
|
+
this.set(e, n), t.set(e, !0);
|
|
1578
|
+
}).then((e) => {
|
|
1579
|
+
Object.keys(e).filter((e) => !t.get(e)).forEach((t) => {
|
|
1580
|
+
this.set(t, e[t]);
|
|
1581
|
+
});
|
|
1582
|
+
});
|
|
1583
|
+
}
|
|
1584
|
+
return this;
|
|
1560
1585
|
}
|
|
1561
1586
|
render(e) {
|
|
1562
1587
|
return e.render(this);
|
|
1563
1588
|
}
|
|
1564
1589
|
};
|
|
1565
|
-
function
|
|
1590
|
+
function tt(e) {
|
|
1566
1591
|
return e === void 0 ? new Z({}) : new Z(e);
|
|
1567
1592
|
}
|
|
1568
1593
|
//#endregion
|
|
1569
1594
|
//#region src/store.ts
|
|
1570
|
-
var
|
|
1595
|
+
var nt = /* @__PURE__ */ t({
|
|
1571
1596
|
CONTEXT_DEFAULT: () => Q,
|
|
1572
|
-
Provider: () =>
|
|
1597
|
+
Provider: () => rt,
|
|
1573
1598
|
Service: () => $,
|
|
1574
|
-
dispatch: () =>
|
|
1575
|
-
}), Q = "context:store", $ = class e extends
|
|
1599
|
+
dispatch: () => it
|
|
1600
|
+
}), Q = "context:store", $ = class e extends ze {
|
|
1576
1601
|
static {
|
|
1577
1602
|
this.EVENT_TYPE = "store:message";
|
|
1578
1603
|
}
|
|
1579
1604
|
constructor(t, n) {
|
|
1580
1605
|
super((e, t) => n(t, e), t, e.EVENT_TYPE);
|
|
1581
1606
|
}
|
|
1582
|
-
},
|
|
1607
|
+
}, rt = class extends V {
|
|
1583
1608
|
constructor(e, t) {
|
|
1584
|
-
super(t, Q), this.viewModel =
|
|
1609
|
+
super(t, Q), this.viewModel = tt({ authenticated: !1 }).with(k(this), "authenticated", "username", "token"), this._updateFn = e;
|
|
1585
1610
|
}
|
|
1586
1611
|
connectedCallback() {
|
|
1587
1612
|
new $(this.context, (e, t) => this._updateFn(e, t, this.viewModel.toObject())).attach(this);
|
|
1588
1613
|
}
|
|
1589
1614
|
};
|
|
1590
|
-
function
|
|
1615
|
+
function it(e, t) {
|
|
1591
1616
|
console.log("📨 Dispatching message:", t, e), e.dispatchEvent(new j.Dispatch(t, $.EVENT_TYPE));
|
|
1592
1617
|
}
|
|
1593
1618
|
//#endregion
|
|
1594
1619
|
//#region src/fromStore.ts
|
|
1595
|
-
function
|
|
1596
|
-
return
|
|
1620
|
+
function at(e, t = Q) {
|
|
1621
|
+
return Be(e, t);
|
|
1597
1622
|
}
|
|
1598
1623
|
//#endregion
|
|
1599
|
-
export {
|
|
1624
|
+
export { nt as Store, at as fromStore };
|
package/dist/store.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.store={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Object.defineProperty,n=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},r=class extends Error{};r.prototype.name=`InvalidTokenError`;function i(e){return decodeURIComponent(atob(e).replace(/(.)/g,(e,t)=>{let n=t.charCodeAt(0).toString(16).toUpperCase();return n.length<2&&(n=`0`+n),`%`+n}))}function a(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`);switch(t.length%4){case 0:break;case 2:t+=`==`;break;case 3:t+=`=`;break;default:throw Error(`base64 string is not of the correct length`)}try{return i(t)}catch{return atob(t)}}function o(e,t){if(typeof e!=`string`)throw new r(`Invalid token specified: must be a string`);t||={};let n=t.header===!0?0:1,i=e.split(`.`)[n];if(typeof i!=`string`)throw new r(`Invalid token specified: missing part #${n+1}`);let o;try{o=a(i)}catch(e){throw new r(`Invalid token specified: invalid base64 for part #${n+1} (${e.message})`)}try{return JSON.parse(o)}catch(e){throw new r(`Invalid token specified: invalid json for part #${n+1} (${e.message})`)}}var s=Object.defineProperty,c=((e,t)=>{let n={};for(var r in e)s(n,r,{get:e[r],enumerable:!0});return t||s(n,Symbol.toStringTag,{value:`Module`}),n})({Dispatch:()=>u,None:()=>l,dispatch:()=>ee,dispatcher:()=>d}),l=[],u=class extends CustomEvent{constructor(e,t=`un:message`){super(t,{bubbles:!0,composed:!0,detail:e})}};function d(e=`un:message`){return(t,...n)=>t.dispatchEvent(new u(n,e))}var ee=d(),te=class extends CustomEvent{constructor(e,t){super(e,{bubbles:!0,cancelable:!0,composed:!0,detail:t})}};function f(e,...t){let n={execute(){e(...t.map(e=>e instanceof m?e.open(n):e)),t.forEach(e=>e instanceof m&&e.close())}};n.execute()}var p=class e{constructor(){this.signals=new WeakMap,this.scheduled=new WeakSet}static{this.scheduler=new e}subscribe(e,t,n){let r=this.signals.get(e);r||(r=new Map,this.signals.set(e,r));let i=r.get(t);i||(i=new Set,r.set(t,i)),i.add(n)}scheduleEffects(e,t){let n=this.signals.get(e);if(!n)return;let r=n.get(t);if(r)for(let e of r)this.scheduled.has(e)||(this.scheduled.add(e),setTimeout(()=>{this.scheduled.delete(e),e.execute()}))}},ne=class{constructor(){this.running=[],this.eventType=`un-effect:change`}isRunning(){return this.running.length>0}push(e){this.running.push(e)}pop(){this.running.pop()}current(){let e=this.running.length;return e?this.running[e-1]:void 0}subscribe(e,t){let n=this.current();n&&p.scheduler.subscribe(t,e,n)}runEffects(e,t){if(p.scheduler.scheduleEffects(t,e),this.host){let n=new te(this.eventType,{property:e,value:t[e]});this.host.dispatchEvent(n)}}setHost(e,t){this.host=e,t&&(this.eventType=t)}},m=class{static{this.CHANGE_EVENT_TYPE=`un-context:change`}constructor(e,t){t?(this.manager=t.manager,this.object=t.object,this.proxy=t.proxy,this.update(e)):(this.manager=new ne,this.object=e,this.proxy=re(this.object,this.manager))}get(e){return this.proxy[e]}set(e,t){this.proxy[e]=t}toObject(){return this.object}update(e){Object.assign(this.proxy,e)}apply(e){this.update(e(this.proxy))}createEffect(e){f(e,this)}setHost(e,t){this.manager.setHost(e,t)}open(e){return this.manager.push(e),this.proxy}close(){this.manager.pop()}};function re(e,t){return new Proxy(e,{get:(e,n,r)=>{let i=Reflect.get(e,n,r);return t.isRunning()&&h(i)&&t.subscribe(n,e),i},set:(e,n,r,i)=>{let a=Reflect.set(e,n,r,i);return a&&h(r)&&t.runEffects(n,e),a}})}function h(e){switch(typeof e){case`object`:case`number`:case`string`:case`symbol`:case`boolean`:case`undefined`:return!0;default:return!1}}var g=class{constructor(e,...t){this.effectFn=()=>e(...t)}execute(){this.effectFn()}};function _(e,t){return Object.assign(e,{render:t}),e}function v(e,t,...n){let r=e.cloneNode(!0);return Array.from(t.entries()).forEach(([e,t])=>{let i=r.querySelector(`[data-${e}]`);i&&t.forEach(e=>e(i,r,...n))}),r}var ie=class e{static{this.parser=new DOMParser}constructor(e){this.docType=`text/html`,this.plugins=[],e&&(this.docType=e)}use(e){this.plugins=this.plugins.concat(e)}parse(t,n){let r={},i=t.map((e,i)=>{if(i>=n.length)return[e];let a=n[i],o=this.classifyPlace(i,t),s=this.tryReplacements(o,a);if(s){let t=r[o.nodeLabel];switch(t?t.push(s):r[o.nodeLabel]=[s],o.kind){case`attr value`:return[e,`"" data-${o.nodeLabel}`];case`tag content`:return[e,`data-${o.nodeLabel}`];case`element content`:return[e,`<ins data-${o.nodeLabel}></ins>`]}}else throw console.error(`No match for template parameter`,o,a),`Failed to render template parameter ${i} around ${e}`;return[e]}).flat().join(``),a=e.parser.parseFromString(i,this.docType),o=a.head.childElementCount?a.head.children:a.body.children,s=new DocumentFragment;s.replaceChildren(...o);let c=new Map;for(let e in r){let t=s.querySelector(`[data-${e}]`);t&&r[e].forEach(n=>{let r=n.apply(t,s);if(r){let t=c.get(e);t?t.push(r):c.set(e,[r])}})}return _(s,(...e)=>v(s,c,...e))}static{this.OPEN_RE=/<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/}static{this.IN_TAG_RE=/^(\s+|[^<>]*|"[^"]*")*$/}static{this.ATTR_RE=/([$.]?[a-zA-Z][$a-zA-Z0-9.-]*)=\s*$/}static{this.CLOSE_RE=/[/]?>[^<]*$/}classifyPlace(t,n){let r=null;for(let i=t;i>=0&&!(n[i].match(e.CLOSE_RE)||(r=n[i].match(e.OPEN_RE),r)||!n[i].match(e.IN_TAG_RE));i--);if(r){let i=n[t].match(e.ATTR_RE);return i?{kind:`attr value`,nodeLabel:`node${t}`,tagName:r[1],attrName:i[1]}:{kind:`tag content`,nodeLabel:`node${t}`,tagName:r[1]}}return{kind:`element content`,nodeLabel:`node${t}`}}tryReplacements(e,t){let n=this.plugins;for(let r=0;r<n.length;r++){let i=n[r];if(e.kind===i.place&&ae(t,i))return i.mutator(e,t)}}};function ae(e,t){return typeof t.types==`function`?t.types(e,t):t.types.includes(typeof e)}var y=class{constructor(e){this.place=e}apply(e,t){throw`abstract method 'apply' called`}},b=class extends y{constructor(e,t){super(e),this.content=t}apply(e,t){(e.parentNode||t).replaceChild(this.content,e)}},oe=class extends y{constructor(e,t){super(e),this.text=t,this.name=e.attrName}apply(e){e.setAttribute(this.name,this.text)}},se=class extends y{constructor(e,t){super(e),this.fn=t}apply(e,t){let n=this.place.nodeLabel;return(e,t,...r)=>{let i=new Comment(` <<< ${n} `),a=new Comment(` >>> ${n} `),o=new DocumentFragment;o.replaceChildren(i,a),(e.parentNode||t).replaceChild(o,e),f((...e)=>{ce(this.fn(...e),i,a)},...r)}}};function ce(e,t,n){let r=t.parentNode;if(!r)throw Error(`No parent for placeholder`);let i=e=>{if(Array.isArray(e)){let t=new DocumentFragment,n=e.map(i);return t.replaceChildren(...n),t}else if(e instanceof Node)return e;else return new Text(e?.toString()||``)},a=i(e);console.log(`📸 Rendered for view:`,e,a);let o=t.nextSibling;for(;o&&o!==n;){let e=o;o=o.nextSibling,r.removeChild(e)}a&&r.insertBefore(a,n)}var le=class extends y{constructor(e,t){super(e),this.fn=t,this.name=e.attrName}apply(e,t){return(e,t,...n)=>f((...t)=>{ue(this.fn(...t),e,this.name)},...n)}};function ue(e,t,n){let r=n.match(/^([.$])(.+)$/);if(r){let[n,i,a]=r;switch(i){case`.`:t[a]=e;break;case`$`:`viewModel`in t&&t.viewModel instanceof m&&t.viewModel.set(a,e);break}}else switch(typeof e){case`string`:t.setAttribute(n,e);break;case`undefined`:case`object`:case`boolean`:e?t.setAttribute(n,n):t.removeAttribute(n);break;default:t.setAttribute(n,e?.toString())}}var de=class extends y{constructor(e,t){super(e),this.fn=t}apply(e,t){return(e,t,...n)=>f((...t)=>{let n=this.fn(...t);typeof n==`function`&&n(e)},...n)}};new ie().use([{place:`element content`,types:[`string`,`number`,`bigint`,`symbol`,`boolean`],mutator:(e,t)=>new b(e,new Text(t?.toString()||``))},{place:`attr value`,types:[`string`,`number`,`bigint`,`symbol`],mutator:(e,t)=>new oe(e,t?.toString()||``)},{place:`element content`,types:e=>e instanceof Node,mutator:(e,t)=>new b(e,t)},{place:`element content`,types:[`function`],mutator:(e,t)=>new se(e,t)},{place:`attr value`,types:[`function`],mutator:(e,t)=>new le(e,t)},{place:`tag content`,types:[`function`],mutator:(e,t)=>new de(e,t)}]);var fe=class e extends HTMLElement{static{this.DISCOVERY_EVENT=`un-provider:discover`}static{this.REGISTRY_EVENT=`un-provider:register`}static{this.CHANGE_EVENT=`un-provider:change`}static{document.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail,r=he(t);r&&n(r)}),document.addEventListener(e.REGISTRY_EVENT,e=>{let[t,n]=e.detail;me(t,n)})}constructor(t,n){super(),this.contextLabel=n,this.context=new m(t),this.context.setHost(this,e.CHANGE_EVENT),this.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail;t===this.contextLabel&&(e.stopPropagation(),n(this))});let r=new CustomEvent(e.REGISTRY_EVENT,{bubbles:!0,composed:!0,detail:[this.contextLabel,this]});this.dispatchEvent(r)}attach(t){return this.addEventListener(e.CHANGE_EVENT,t),this.context.toObject()}detach(t){this.removeEventListener(e.CHANGE_EVENT,t)}};function pe(e,t){return new Promise((n,r)=>{let i=new CustomEvent(fe.DISCOVERY_EVENT,{bubbles:!0,composed:!0,detail:[t,e=>e?n(e):r()]});e.isConnected?e.dispatchEvent(i):document.dispatchEvent(i)})}var x={};function me(e,t){x[e]=t}function he(e){return x[e]}var ge=class{constructor(e){this.contextLabel=e}observe(e,t){return new Promise((n,r)=>{this.provider?n(this.attachObserver(t)):pe(e,this.contextLabel).then(e=>{this.provider=e,n(this.attachObserver(t))}).catch(e=>r(e))})}attachObserver(e){let t=this.provider.attach(t=>{let{property:n,value:r}=t.detail,i=new g(e,{property:n,value:r});this.observed&&(this.observed[n]=r,i.execute())});return this.observed=t,t}},_e=class{constructor(e,t,n=`service:message`,r=!0){this._pending=[],this._context=t,this._update=e,this._eventType=n,this._running=r}attach(e){e.addEventListener(this._eventType,e=>{e.stopPropagation();let t=e.detail;this.consume(t)})}start(){this._running||(this._running=!0,this._pending.forEach(e=>this.process(e)))}consume(e){if(e.length===0){let t=e;this._running?this.process(t):this._pending.push(t)}}process(e){let t=this._update(e,this._context.toObject());if(!Array.isArray(t))return t;let[n,...r]=t;return r.forEach(e=>e.then(e=>this.consume(e))),n}};function ve(e,t){return new ye(e,t)}var ye=class{constructor(e,t){this.client=e,this.observer=new ge(t)}start(e){return this.observer.observe(this.client,t=>{e(t.property,t.value)})}},be=`context:auth`,S=class e{static{this.TOKEN_KEY=`un-auth:token`}constructor(e){this.authenticated=!1,this.username=e||`anonymous`}static deauthenticate(t){return t.authenticated=!1,t.username=`anonymous`,localStorage.removeItem(e.TOKEN_KEY),t}},C=class e extends S{constructor(e){super();let t=o(e);console.log(`Token payload`,t),this.token=e,this.authenticated=!0,this.username=t.username}static authenticate(t){let n=new e(t);return localStorage.setItem(S.TOKEN_KEY,t),n}static authenticateFromLocalStorage(){let t=localStorage.getItem(S.TOKEN_KEY);return t?e.authenticate(t):new S}},w=class e extends _e{static{this.EVENT_TYPE=`auth:message`}constructor(t,n){super((e,t)=>this.update(e,t),t,e.EVENT_TYPE),this._redirectForLogin=n}update(e,t){switch(e[0]){case`auth/signin`:let{token:n,redirect:r}=e[1];return[D(n),T(r)];case`auth/signout`:return[O(t),T(this._redirectForLogin)];case`auth/redirect`:E(this._redirectForLogin,{next:window.location.href});break;default:let i=e[0];throw Error(`Unhandled Auth message "${i}"`)}return t}};c.dispatcher(w.EVENT_TYPE);function T(e,t={}){return new Promise(n=>{E(e,t),n(c.None)})}function E(e,t={}){if(e){let n=window.location.href,r=new URL(e,n);Object.entries(t).forEach(([e,t])=>r.searchParams.set(e,t)),console.log(`Redirecting to `,e),window.location.assign(r)}}function D(e){let{authenticated:t,username:n}=C.authenticate(e);return{authenticated:t,username:n,token:e}}function O(e){let{authenticated:t,username:n}=S.deauthenticate(new S(e.username));return{username:n,authenticated:t,token:void 0}}function k(e,t=be){return ve(e,t)}var A=Object.defineProperty,j=((e,t)=>{let n={};for(var r in e)A(n,r,{get:e[r],enumerable:!0});return t||A(n,Symbol.toStringTag,{value:`Module`}),n})({Dispatch:()=>N,None:()=>M,dispatch:()=>xe,dispatcher:()=>P}),M=[],N=class extends CustomEvent{constructor(e,t=`un:message`){super(t,{bubbles:!0,composed:!0,detail:e})}};function P(e=`un:message`){return(t,...n)=>t.dispatchEvent(new N(n,e))}var xe=P(),Se=class extends CustomEvent{constructor(e,t){super(e,{bubbles:!0,cancelable:!0,composed:!0,detail:t})}};function F(e,...t){let n={execute(){e(...t.map(e=>e.open(n))),t.forEach(e=>e.close())}};n.execute()}var I=class e{constructor(){this.signals=new WeakMap,this.scheduled=new WeakSet}static{this.scheduler=new e}subscribe(e,t,n){let r=this.signals.get(e);r||(r=new Map,this.signals.set(e,r));let i=r.get(t);i||(i=new Set,r.set(t,i)),i.add(n)}scheduleEffects(e,t){let n=this.signals.get(e);if(!n)return;let r=n.get(t);if(r)for(let e of r)this.scheduled.has(e)||(this.scheduled.add(e),setTimeout(()=>{this.scheduled.delete(e),e.execute()}))}},Ce=class{constructor(){this.running=[],this.eventType=`un-effect:change`}isRunning(){return this.running.length>0}push(e){this.running.push(e)}pop(){this.running.pop()}current(){let e=this.running.length;return e?this.running[e-1]:void 0}subscribe(e,t){let n=this.current();n&&I.scheduler.subscribe(t,e,n)}runEffects(e,t){if(I.scheduler.scheduleEffects(t,e),this.host){let n=new Se(this.eventType,{property:e,value:t[e]});this.host.dispatchEvent(n)}}setHost(e,t){this.host=e,t&&(this.eventType=t)}},L=class{static{this.CHANGE_EVENT_TYPE=`un-context:change`}constructor(e,t){t?(this.manager=t.manager,this.object=t.object,this.proxy=t.proxy,this.update(e)):(this.manager=new Ce,this.object=e,this.proxy=we(this.object,this.manager))}get(e){return this.proxy[e]}set(e,t){this.proxy[e]=t}toObject(){return this.proxy}update(e){Object.assign(this.proxy,e)}apply(e){this.update(e(this.proxy))}createEffect(e){F(e,this)}setHost(e,t){this.manager.setHost(e,t)}open(e){return this.manager.push(e),this.proxy}close(){this.manager.pop()}};function we(e,t){return new Proxy(e,{get:(e,n,r)=>{let i=Reflect.get(e,n,r);return t.isRunning()&&R(i)&&t.subscribe(n,e),i},set:(e,n,r,i)=>{let a=Reflect.set(e,n,r,i);return a&&R(r)&&t.runEffects(n,e),a}})}function R(e){switch(typeof e){case`object`:case`number`:case`string`:case`symbol`:case`boolean`:case`undefined`:return!0;default:return!1}}var Te=class{constructor(e,...t){this.effectFn=()=>e(...t)}execute(){this.effectFn()}};function Ee(e,t){return Object.assign(e,{render:t}),e}function De(e,t,...n){let r=e.cloneNode(!0);return Array.from(t.entries()).forEach(([e,t])=>{let i=r.querySelector(`[data-${e}]`);i&&t.forEach(e=>e(i,r,...n))}),r}var Oe=class e{static{this.parser=new DOMParser}constructor(e){this.docType=`text/html`,this.plugins=[],e&&(this.docType=e)}use(e){this.plugins=this.plugins.concat(e)}parse(t,n){let r={},i=t.map((e,i)=>{if(i>=n.length)return[e];let a=n[i],o=this.classifyPlace(i,t),s=this.tryReplacements(o,a);if(s){let t=r[o.nodeLabel];switch(t?t.push(s):r[o.nodeLabel]=[s],o.kind){case`attr value`:return[e,`"" data-${o.nodeLabel}`];case`tag content`:return[e,`data-${o.nodeLabel}`];case`element content`:return[e,`<ins data-${o.nodeLabel}></ins>`]}}else throw console.error(`No match for template parameter`,o,a),`Failed to render template parameter ${i} around ${e}`;return[e]}).flat().join(``),a=e.parser.parseFromString(i,this.docType),o=a.head.childElementCount?a.head.children:a.body.children,s=new DocumentFragment;s.replaceChildren(...o);let c=new Map;for(let e in r){let t=s.querySelector(`[data-${e}]`);t&&r[e].forEach(n=>{let r=n.apply(t,s);if(r){let t=c.get(e);t?t.push(r):c.set(e,[r])}})}return Ee(s,(...e)=>De(s,c,...e))}static{this.OPEN_RE=/<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/}static{this.IN_TAG_RE=/^(\s+|[^<>]*|"[^"]*")*$/}static{this.ATTR_RE=/([$.]?[a-zA-Z][$a-zA-Z0-9.-]*)=\s*$/}static{this.CLOSE_RE=/[/]?>[^<]*$/}classifyPlace(t,n){let r=null;for(let i=t;i>=0&&!(n[i].match(e.CLOSE_RE)||(r=n[i].match(e.OPEN_RE),r)||!n[i].match(e.IN_TAG_RE));i--);if(r){let i=n[t].match(e.ATTR_RE);return i?{kind:`attr value`,nodeLabel:`node${t}`,tagName:r[1],attrName:i[1]}:{kind:`tag content`,nodeLabel:`node${t}`,tagName:r[1]}}return{kind:`element content`,nodeLabel:`node${t}`}}tryReplacements(e,t){let n=this.plugins;for(let r=0;r<n.length;r++){let i=n[r];if(e.kind===i.place&&ke(t,i))return i.mutator(e,t)}}};function ke(e,t){return typeof t.types==`function`?t.types(e,t):t.types.includes(typeof e)}var z=class{constructor(e){this.place=e}apply(e,t){throw`abstract method 'apply' called`}},B=class extends z{constructor(e,t){super(e),this.content=t}apply(e,t){(e.parentNode||t).replaceChild(this.content,e)}},Ae=class extends z{constructor(e,t){super(e),this.text=t,this.name=e.attrName}apply(e){e.setAttribute(this.name,this.text)}},je=class extends z{constructor(e,t){super(e),this.fn=t}apply(e,t){let n=this.place.nodeLabel;return(e,t,...r)=>{let i=new Comment(` <<< ${n} `),a=new Comment(` >>> ${n} `),o=new DocumentFragment;o.replaceChildren(i,a),(e.parentNode||t).replaceChild(o,e),F((...e)=>{Me(this.fn(...e),i,a)},...r)}}};function Me(e,t,n){let r=t.parentNode;if(!r)throw Error(`No parent for placeholder`);let i=e=>{if(Array.isArray(e)){let t=new DocumentFragment,n=e.map(i);return t.replaceChildren(...n),t}else if(e instanceof Node)return e;else return new Text(e?.toString()||``)},a=i(e),o=t.nextSibling;for(;o&&o!==n;){let e=o;o=o.nextSibling,r.removeChild(e)}a&&r.insertBefore(a,n)}var Ne=class extends z{constructor(e,t){super(e),this.fn=t,this.name=e.attrName}apply(e,t){return(e,t,...n)=>F((...t)=>{Pe(this.fn(...t),e,this.name)},...n)}};function Pe(e,t,n){let r=n.match(/^([.$])(.+)$/);if(r){let[n,i,a]=r;switch(i){case`.`:t[a]=e;break;case`$`:`viewModel`in t&&t.viewModel instanceof L&&t.viewModel.set(a,e);break}}else switch(typeof e){case`string`:t.setAttribute(n,e);break;case`undefined`:case`object`:case`boolean`:e?t.setAttribute(n,n):t.removeAttribute(n);break;default:t.setAttribute(n,e?.toString())}}var Fe=class extends z{constructor(e,t){super(e),this.fn=t}apply(e,t){return(e,t,...n)=>F((...t)=>{let n=this.fn(...t);typeof n==`function`&&n(e)},...n)}};new Oe().use([{place:`element content`,types:[`string`,`number`,`bigint`,`symbol`,`boolean`],mutator:(e,t)=>new B(e,new Text(t?.toString()||``))},{place:`attr value`,types:[`string`,`number`,`bigint`,`symbol`],mutator:(e,t)=>new Ae(e,t?.toString()||``)},{place:`element content`,types:e=>e instanceof Node,mutator:(e,t)=>new B(e,t)},{place:`element content`,types:e=>Array.isArray(e),mutator:(e,t)=>{let n=new DocumentFragment,r=t.map(e=>e instanceof Node?e:new Text(e?.toString()||``));return n.append(...r),new B(e,n)}},{place:`element content`,types:[`function`],mutator:(e,t)=>new je(e,t)},{place:`attr value`,types:[`function`],mutator:(e,t)=>new Ne(e,t)},{place:`tag content`,types:[`function`],mutator:(e,t)=>new Fe(e,t)}]);var V=class e extends HTMLElement{static{this.DISCOVERY_EVENT=`un-provider:discover`}static{this.REGISTRY_EVENT=`un-provider:register`}static{this.CHANGE_EVENT=`un-provider:change`}static{document.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail,r=Re(t);r&&n(r)}),document.addEventListener(e.REGISTRY_EVENT,e=>{let[t,n]=e.detail;Le(t,n)})}constructor(t,n){super(),this.contextLabel=n,this.context=new L(t),this.context.setHost(this,e.CHANGE_EVENT),this.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail;t===this.contextLabel&&(e.stopPropagation(),n(this))});let r=new CustomEvent(e.REGISTRY_EVENT,{bubbles:!0,composed:!0,detail:[this.contextLabel,this]});this.dispatchEvent(r)}attach(t){return this.addEventListener(e.CHANGE_EVENT,t),this.context.toObject()}detach(t){this.removeEventListener(e.CHANGE_EVENT,t)}};function Ie(e,t){return new Promise((n,r)=>{let i=new CustomEvent(V.DISCOVERY_EVENT,{bubbles:!0,composed:!0,detail:[t,e=>e?n(e):r()]});e.isConnected?e.dispatchEvent(i):document.dispatchEvent(i)})}var H={};function Le(e,t){H[e]=t}function Re(e){return H[e]}var ze=class{constructor(e){this.contextLabel=e}observe(e,t){return new Promise((n,r)=>{this.provider?n(this.attachObserver(t)):Ie(e,this.contextLabel).then(e=>{this.provider=e,n(this.attachObserver(t))}).catch(e=>r(e))})}attachObserver(e){let t=this.provider.attach(t=>{let{property:n,value:r}=t.detail,i=new Te(e,{property:n,value:r});this.observed&&(this.observed[n]=r,i.execute())});return this.observed=t,t}},Be=class{constructor(e,t,n=`service:message`,r=!0){this._pending=[],this._context=t,this._update=e,this._eventType=n,this._running=r}attach(e){e.addEventListener(this._eventType,e=>{e.stopPropagation();let t=e.detail;this.consume(t)})}start(){this._running||(this._running=!0,this._pending.forEach(e=>this.process(e)))}consume(e){if(e.length===0){let t=e;this._running?this.process(t):this._pending.push(t)}}process(e){let t=this._update(e,this._context.toObject());if(!Array.isArray(t))return t;let[n,...r]=t;return r.forEach(e=>e.then(e=>this.consume(e))),n}},Ve=class{constructor(e,t){this.client=e,this.observer=new ze(t)}start(e){return this.observer.observe(this.client,t=>{e(t.property,t.value)})}},U=class{constructor(e,t){this.origin=e;let n=He(t).map(([e,t])=>[t,e]);this.inverse=Object.fromEntries(n)}mapObservation(e){let t=Object.entries(e);return Object.fromEntries(t.map(([e,t])=>[this.inverse[e],t]).filter(e=>e.length>0))}start(e){return this.origin.start((t,n)=>{let r=this.inverse[t];e(r,n)}).then(e=>this.mapObservation(e))}};function He(e){return Object.entries(e).map(([e,t])=>[e,t])}var Ue=class extends CustomEvent{constructor(e,t){super(e,{bubbles:!0,cancelable:!0,composed:!0,detail:t})}};function W(e,...t){let n={execute(){e(...t.map(e=>e.open(n))),t.forEach(e=>e.close())}};n.execute()}var G=class e{constructor(){this.signals=new WeakMap,this.scheduled=new WeakSet}static{this.scheduler=new e}subscribe(e,t,n){let r=this.signals.get(e);r||(r=new Map,this.signals.set(e,r));let i=r.get(t);i||(i=new Set,r.set(t,i)),i.add(n)}scheduleEffects(e,t){let n=this.signals.get(e);if(!n)return;let r=n.get(t);if(r)for(let e of r)this.scheduled.has(e)||(this.scheduled.add(e),setTimeout(()=>{this.scheduled.delete(e),e.execute()}))}},We=class{constructor(){this.running=[],this.eventType=`un-effect:change`}isRunning(){return this.running.length>0}push(e){this.running.push(e)}pop(){this.running.pop()}current(){let e=this.running.length;return e?this.running[e-1]:void 0}subscribe(e,t){let n=this.current();n&&G.scheduler.subscribe(t,e,n)}runEffects(e,t){if(G.scheduler.scheduleEffects(t,e),this.host){let n=new Ue(this.eventType,{property:e,value:t[e]});this.host.dispatchEvent(n)}}setHost(e,t){this.host=e,t&&(this.eventType=t)}},K=class{static{this.CHANGE_EVENT_TYPE=`un-context:change`}constructor(e,t){t?(this.manager=t.manager,this.object=t.object,this.proxy=t.proxy,this.update(e)):(this.manager=new We,this.object=e,this.proxy=Ge(this.object,this.manager))}get(e){return this.proxy[e]}set(e,t){this.proxy[e]=t}toObject(){return this.proxy}update(e){Object.assign(this.proxy,e)}apply(e){this.update(e(this.proxy))}createEffect(e){W(e,this)}setHost(e,t){this.manager.setHost(e,t)}open(e){return this.manager.push(e),this.proxy}close(){this.manager.pop()}};function Ge(e,t){return new Proxy(e,{get:(e,n,r)=>{let i=Reflect.get(e,n,r);return t.isRunning()&&q(i)&&t.subscribe(n,e),i},set:(e,n,r,i)=>{let a=Reflect.set(e,n,r,i);return a&&q(r)&&t.runEffects(n,e),a}})}function q(e){switch(typeof e){case`object`:case`number`:case`string`:case`symbol`:case`boolean`:case`undefined`:return!0;default:return!1}}function Ke(e,t){return Object.assign(e,{render:t}),e}function qe(e,t,...n){let r=e.cloneNode(!0);return Array.from(t.entries()).forEach(([e,t])=>{let i=r.querySelector(`[data-${e}]`);i&&t.forEach(e=>e(i,r,...n))}),r}var Je=class e{static{this.parser=new DOMParser}constructor(e){this.docType=`text/html`,this.plugins=[],e&&(this.docType=e)}use(e){this.plugins=this.plugins.concat(e)}parse(t,n){let r={},i=t.map((e,i)=>{if(i>=n.length)return[e];let a=n[i],o=this.classifyPlace(i,t),s=this.tryReplacements(o,a);if(s){let t=r[o.nodeLabel];switch(t?t.push(s):r[o.nodeLabel]=[s],o.kind){case`attr value`:return[e,`"" data-${o.nodeLabel}`];case`tag content`:return[e,`data-${o.nodeLabel}`];case`element content`:return[e,`<ins data-${o.nodeLabel}></ins>`]}}else throw console.error(`No match for template parameter`,o,a),`Failed to render template parameter ${i} around ${e}`;return[e]}).flat().join(``),a=e.parser.parseFromString(i,this.docType),o=a.head.childElementCount?a.head.children:a.body.children,s=new DocumentFragment;s.replaceChildren(...o);let c=new Map;for(let e in r){let t=s.querySelector(`[data-${e}]`);t&&r[e].forEach(n=>{let r=n.apply(t,s);if(r){let t=c.get(e);t?t.push(r):c.set(e,[r])}})}return Ke(s,(...e)=>qe(s,c,...e))}static{this.OPEN_RE=/<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/}static{this.IN_TAG_RE=/^(\s+|[^<>]*|"[^"]*")*$/}static{this.ATTR_RE=/([$.]?[a-zA-Z][$a-zA-Z0-9.-]*)=\s*$/}static{this.CLOSE_RE=/[/]?>[^<]*$/}classifyPlace(t,n){let r=null;for(let i=t;i>=0&&!(n[i].match(e.CLOSE_RE)||(r=n[i].match(e.OPEN_RE),r)||!n[i].match(e.IN_TAG_RE));i--);if(r){let i=n[t].match(e.ATTR_RE);return i?{kind:`attr value`,nodeLabel:`node${t}`,tagName:r[1],attrName:i[1]}:{kind:`tag content`,nodeLabel:`node${t}`,tagName:r[1]}}return{kind:`element content`,nodeLabel:`node${t}`}}tryReplacements(e,t){let n=this.plugins;for(let r=0;r<n.length;r++){let i=n[r];if(e.kind===i.place&&Ye(t,i))return i.mutator(e,t)}}};function Ye(e,t){return typeof t.types==`function`?t.types(e,t):t.types.includes(typeof e)}var J=class{constructor(e){this.place=e}apply(e,t){throw`abstract method 'apply' called`}},Y=class extends J{constructor(e,t){super(e),this.content=t}apply(e,t){(e.parentNode||t).replaceChild(this.content,e)}},Xe=class extends J{constructor(e,t){super(e),this.text=t,this.name=e.attrName}apply(e){e.setAttribute(this.name,this.text)}},Ze=class extends J{constructor(e,t){super(e),this.fn=t}apply(e,t){let n=this.place.nodeLabel;return(e,t,...r)=>{let i=new Comment(` <<< ${n} `),a=new Comment(` >>> ${n} `),o=new DocumentFragment;o.replaceChildren(i,a),(e.parentNode||t).replaceChild(o,e),W((...e)=>{Qe(this.fn(...e),i,a)},...r)}}};function Qe(e,t,n){let r=t.parentNode;if(!r)throw Error(`No parent for placeholder`);let i=e=>{if(Array.isArray(e)){let t=new DocumentFragment,n=e.map(i);return t.replaceChildren(...n),t}else if(e instanceof Node)return e;else return new Text(e?.toString()||``)},a=i(e),o=t.nextSibling;for(;o&&o!==n;){let e=o;o=o.nextSibling,r.removeChild(e)}a&&r.insertBefore(a,n)}var $e=class extends J{constructor(e,t){super(e),this.fn=t,this.name=e.attrName}apply(e,t){return(e,t,...n)=>W((...t)=>{et(this.fn(...t),e,this.name)},...n)}};function et(e,t,n){let r=n.match(/^([.$])(.+)$/);if(r){let[n,i,a]=r;switch(i){case`.`:t[a]=e;break;case`$`:`viewModel`in t&&t.viewModel instanceof K&&t.viewModel.set(a,e);break}}else switch(typeof e){case`string`:t.setAttribute(n,e);break;case`undefined`:case`object`:case`boolean`:e?t.setAttribute(n,n):t.removeAttribute(n);break;default:t.setAttribute(n,e?.toString())}}var X=class extends J{constructor(e,t){super(e),this.fn=t}apply(e,t){return(e,t,...n)=>W((...t)=>{let n=this.fn(...t);typeof n==`function`&&n(e)},...n)}};new Je().use([{place:`element content`,types:[`string`,`number`,`bigint`,`symbol`,`boolean`],mutator:(e,t)=>new Y(e,new Text(t?.toString()||``))},{place:`attr value`,types:[`string`,`number`,`bigint`,`symbol`],mutator:(e,t)=>new Xe(e,t?.toString()||``)},{place:`element content`,types:e=>e instanceof Node,mutator:(e,t)=>new Y(e,t)},{place:`element content`,types:e=>Array.isArray(e),mutator:(e,t)=>{let n=new DocumentFragment,r=t.map(e=>e instanceof Node?e:new Text(e?.toString()||``));return n.append(...r),new Y(e,n)}},{place:`element content`,types:[`function`],mutator:(e,t)=>new Ze(e,t)},{place:`attr value`,types:[`function`],mutator:(e,t)=>new $e(e,t)},{place:`tag content`,types:[`function`],mutator:(e,t)=>new X(e,t)}]);var Z=class extends K{constructor(e,t){super(e,t)}get $(){return this.toObject()}with(e,...t){let n=Object.fromEntries(t.map(e=>[e,e]));return this.merge(new U(e,n))}withCalculated(e,t){return this.merge(new U(e,t))}withRenamed(e,t){return this.merge(new U(e,t))}merge(e){return e&&e.start((e,t)=>{this.set(e,t)}).then(e=>{Object.keys(e).forEach(t=>this.set(t,e[t]))}),this}render(e){return e.render(this)}};function tt(e){return e===void 0?new Z({}):new Z(e)}var nt=n({CONTEXT_DEFAULT:()=>Q,Provider:()=>rt,Service:()=>$,dispatch:()=>it}),Q=`context:store`,$=class e extends Be{static{this.EVENT_TYPE=`store:message`}constructor(t,n){super((e,t)=>n(t,e),t,e.EVENT_TYPE)}},rt=class extends V{constructor(e,t){super(t,Q),this.viewModel=tt({authenticated:!1}).with(k(this),`authenticated`,`username`,`token`),this._updateFn=e}connectedCallback(){new $(this.context,(e,t)=>this._updateFn(e,t,this.viewModel.toObject())).attach(this)}};function it(e,t){console.log(`📨 Dispatching message:`,t,e),e.dispatchEvent(new j.Dispatch(t,$.EVENT_TYPE))}function at(e,t=Q){return new Ve(e,t)}Object.defineProperty(e,`Store`,{enumerable:!0,get:function(){return nt}}),e.fromStore=at});
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.store={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Object.defineProperty,n=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},r=class extends Error{};r.prototype.name=`InvalidTokenError`;function i(e){return decodeURIComponent(atob(e).replace(/(.)/g,(e,t)=>{let n=t.charCodeAt(0).toString(16).toUpperCase();return n.length<2&&(n=`0`+n),`%`+n}))}function a(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`);switch(t.length%4){case 0:break;case 2:t+=`==`;break;case 3:t+=`=`;break;default:throw Error(`base64 string is not of the correct length`)}try{return i(t)}catch{return atob(t)}}function o(e,t){if(typeof e!=`string`)throw new r(`Invalid token specified: must be a string`);t||={};let n=t.header===!0?0:1,i=e.split(`.`)[n];if(typeof i!=`string`)throw new r(`Invalid token specified: missing part #${n+1}`);let o;try{o=a(i)}catch(e){throw new r(`Invalid token specified: invalid base64 for part #${n+1} (${e.message})`)}try{return JSON.parse(o)}catch(e){throw new r(`Invalid token specified: invalid json for part #${n+1} (${e.message})`)}}var s=Object.defineProperty,c=((e,t)=>{let n={};for(var r in e)s(n,r,{get:e[r],enumerable:!0});return t||s(n,Symbol.toStringTag,{value:`Module`}),n})({Dispatch:()=>u,None:()=>l,dispatch:()=>ee,dispatcher:()=>d}),l=[],u=class extends CustomEvent{constructor(e,t=`un:message`){super(t,{bubbles:!0,composed:!0,detail:e})}};function d(e=`un:message`){return(t,...n)=>t.dispatchEvent(new u(n,e))}var ee=d(),te=class extends CustomEvent{constructor(e,t){super(e,{bubbles:!0,cancelable:!0,composed:!0,detail:t})}};function f(e,...t){let n={execute(){console.log(`▶️ Executing created effect:`,t,e),e(...t.map(e=>e.open(n))),t.forEach(e=>e.close())}};n.execute()}var p=class e{constructor(){this.signals=new WeakMap,this.scheduled=new WeakSet}static{this.scheduler=new e}subscribe(e,t,n){let r=this.signals.get(e);r||(r=new Map,this.signals.set(e,r));let i=r.get(t);i||(i=new Set,r.set(t,i)),i.add(n)}scheduleEffects(e,t){let n=this.signals.get(e);if(!n)return;let r=n.get(t);if(r)for(let e of r)this.scheduled.has(e)||(this.scheduled.add(e),setTimeout(()=>{this.scheduled.delete(e),e.execute()}))}},ne=class{constructor(){this.running=[],this.eventType=`un-effect:change`}isRunning(){return this.running.length>0}push(e){this.running.push(e)}pop(){this.running.pop()}current(){let e=this.running.length;return e?this.running[e-1]:void 0}subscribe(e,t){let n=this.current();n&&p.scheduler.subscribe(t,e,n)}runEffects(e,t){if(console.log(`⚙️ Running effects for signal`,e,t),p.scheduler.scheduleEffects(t,e),this.host){let n=new te(this.eventType,{property:e,value:t[e]});this.host.dispatchEvent(n)}}setHost(e,t){this.host=e,t&&(this.eventType=t)}},m=class{static{this.CHANGE_EVENT_TYPE=`un-context:change`}constructor(e,t){t?(this.manager=t.manager,this.object=t.object,this.proxy=t.proxy,this.update(e)):(this.manager=new ne,this.object=e,this.proxy=re(this.object,this.manager))}get(e){return this.proxy[e]}set(e,t){this.proxy[e]=t}toObject(){return this.proxy}update(e){Object.assign(this.proxy,e)}apply(e){this.update(e(this.proxy))}createEffect(e){f(e,this)}setHost(e,t){this.manager.setHost(e,t)}open(e){return this.manager.push(e),this.proxy}close(){this.manager.pop()}};function re(e,t){return new Proxy(e,{get:(e,n,r)=>{let i=Reflect.get(e,n,r);return t.isRunning()&&h(i)&&t.subscribe(n,e),i},set:(e,n,r,i)=>{let a=Reflect.set(e,n,r,i);return a&&h(r)&&t.runEffects(n,e),a}})}function h(e){switch(typeof e){case`object`:case`number`:case`string`:case`symbol`:case`boolean`:case`undefined`:return!0;default:return!1}}var g=class{constructor(e,...t){this.effectFn=()=>e(...t)}execute(){this.effectFn()}};function _(e,t){return Object.assign(e,{render:t}),e}function v(e,t,...n){let r=e.cloneNode(!0);return Array.from(t.entries()).forEach(([e,t])=>{let i=r.querySelector(`[data-${e}]`);i&&t.forEach(e=>e(i,r,...n))}),r}var ie=class e{static{this.parser=new DOMParser}constructor(e){this.docType=`text/html`,this.plugins=[],e&&(this.docType=e)}use(e){this.plugins=this.plugins.concat(e)}parse(t,n){let r={},i=t.map((e,i)=>{if(i>=n.length)return[e];let a=n[i],o=this.classifyPlace(i,t),s=this.tryReplacements(o,a);if(s){let t=r[o.nodeLabel];switch(t?t.push(s):r[o.nodeLabel]=[s],o.kind){case`attr value`:return[e,`"" data-${o.nodeLabel}`];case`tag content`:return[e,`data-${o.nodeLabel}`];case`element content`:return[e,`<ins data-${o.nodeLabel}></ins>`]}}else throw console.error(`No match for template parameter`,o,a),`Failed to render template parameter ${i} around ${e}`;return[e]}).flat().join(``),a=e.parser.parseFromString(i,this.docType),o=a.head.childElementCount?a.head.children:a.body.children,s=new DocumentFragment;s.replaceChildren(...o);let c=new Map;for(let e in r){let t=s.querySelector(`[data-${e}]`);t&&r[e].forEach(n=>{let r=n.apply(t,s);if(r){let t=c.get(e);t?t.push(r):c.set(e,[r])}})}return _(s,(...e)=>v(s,c,...e))}static{this.OPEN_RE=/<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/}static{this.IN_TAG_RE=/^(\s+|[^<>]*|"[^"]*")*$/}static{this.ATTR_RE=/([$.]?[a-zA-Z][$a-zA-Z0-9.-]*)=\s*$/}static{this.CLOSE_RE=/[/]?>[^<]*$/}classifyPlace(t,n){let r=null;for(let i=t;i>=0&&!(n[i].match(e.CLOSE_RE)||(r=n[i].match(e.OPEN_RE),r)||!n[i].match(e.IN_TAG_RE));i--);if(r){let i=n[t].match(e.ATTR_RE);return i?{kind:`attr value`,nodeLabel:`node${t}`,tagName:r[1],attrName:i[1]}:{kind:`tag content`,nodeLabel:`node${t}`,tagName:r[1]}}return{kind:`element content`,nodeLabel:`node${t}`}}tryReplacements(e,t){let n=this.plugins;for(let r=0;r<n.length;r++){let i=n[r];if(e.kind===i.place&&ae(t,i))return i.mutator(e,t)}}};function ae(e,t){return typeof t.types==`function`?t.types(e,t):t.types.includes(typeof e)}var y=class{constructor(e){this.place=e}apply(e,t){throw`abstract method 'apply' called`}},b=class extends y{constructor(e,t){super(e),this.content=t}apply(e,t){(e.parentNode||t).replaceChild(this.content,e)}},oe=class extends y{constructor(e,t){super(e),this.text=t,this.name=e.attrName}apply(e){e.setAttribute(this.name,this.text)}},se=class extends y{constructor(e,t){super(e),this.fn=t}apply(e,t){let n=this.place.nodeLabel;return(e,t,...r)=>{let i=new Comment(` <<< ${n} `),a=new Comment(` >>> ${n} `),o=new DocumentFragment;o.replaceChildren(i,a),(e.parentNode||t).replaceChild(o,e),f((...e)=>{ce(this.fn(...e),i,a)},...r)}}};function ce(e,t,n){let r=t.parentNode;if(!r)throw Error(`No parent for placeholder`);let i=e=>{if(Array.isArray(e)){let t=new DocumentFragment,n=e.map(i);return t.replaceChildren(...n),t}else if(e instanceof Node)return e;else return new Text(e?.toString()||``)},a=i(e),o=t.nextSibling;for(;o&&o!==n;){let e=o;o=o.nextSibling,r.removeChild(e)}a&&r.insertBefore(a,n)}var le=class extends y{constructor(e,t){super(e),this.fn=t,this.name=e.attrName}apply(e,t){return(e,t,...n)=>f((...t)=>{ue(this.fn(...t),e,this.name)},...n)}};function ue(e,t,n){let r=n.match(/^([.$])(.+)$/);if(r){let[n,i,a]=r;switch(i){case`.`:t[a]=e;break;case`$`:`viewModel`in t&&t.viewModel instanceof m&&t.viewModel.set(a,e);break}}else switch(typeof e){case`string`:t.setAttribute(n,e);break;case`undefined`:case`object`:case`boolean`:e?t.setAttribute(n,n):t.removeAttribute(n);break;default:t.setAttribute(n,e?.toString())}}var de=class extends y{constructor(e,t){super(e),this.fn=t}apply(e,t){return(e,t,...n)=>f((...t)=>{let n=this.fn(...t);typeof n==`function`&&n(e)},...n)}};new ie().use([{place:`element content`,types:[`string`,`number`,`bigint`,`symbol`,`boolean`],mutator:(e,t)=>new b(e,new Text(t?.toString()||``))},{place:`attr value`,types:[`string`,`number`,`bigint`,`symbol`],mutator:(e,t)=>new oe(e,t?.toString()||``)},{place:`element content`,types:e=>e instanceof Node,mutator:(e,t)=>new b(e,t)},{place:`element content`,types:e=>Array.isArray(e),mutator:(e,t)=>{let n=new DocumentFragment,r=t.map(e=>e instanceof Node?e:new Text(e?.toString()||``));return n.append(...r),new b(e,n)}},{place:`element content`,types:[`function`],mutator:(e,t)=>new se(e,t)},{place:`attr value`,types:[`function`],mutator:(e,t)=>new le(e,t)},{place:`tag content`,types:[`function`],mutator:(e,t)=>new de(e,t)}]);var fe=class e extends HTMLElement{static{this.DISCOVERY_EVENT=`un-provider:discover`}static{this.REGISTRY_EVENT=`un-provider:register`}static{this.CHANGE_EVENT=`un-provider:change`}static{document.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail,r=he(t);r&&n(r)}),document.addEventListener(e.REGISTRY_EVENT,e=>{let[t,n]=e.detail;me(t,n)})}constructor(t,n){super(),this.contextLabel=n,this.context=new m(t),this.context.setHost(this,e.CHANGE_EVENT),this.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail;t===this.contextLabel&&(e.stopPropagation(),n(this))});let r=new CustomEvent(e.REGISTRY_EVENT,{bubbles:!0,composed:!0,detail:[this.contextLabel,this]});this.dispatchEvent(r)}attach(t){return this.addEventListener(e.CHANGE_EVENT,t),this.context.toObject()}detach(t){this.removeEventListener(e.CHANGE_EVENT,t)}};function pe(e,t){return new Promise((n,r)=>{let i=new CustomEvent(fe.DISCOVERY_EVENT,{bubbles:!0,composed:!0,detail:[t,e=>e?n(e):r()]});e.isConnected?e.dispatchEvent(i):document.dispatchEvent(i)})}var x={};function me(e,t){x[e]=t}function he(e){return x[e]}var ge=class{constructor(e){this.contextLabel=e}observe(e,t){return new Promise((n,r)=>{this.provider?n(this.attachObserver(t)):pe(e,this.contextLabel).then(e=>{this.provider=e,n(this.attachObserver(t))}).catch(e=>r(e))})}attachObserver(e){let t=this.provider.attach(t=>{let{property:n,value:r}=t.detail,i=new g(e,{property:n,value:r});console.log(`📡Signal received:`,n,r),i.execute()});return console.log(`👀 Initial observation:`,t),t}},_e=class{constructor(e,t,n=`service:message`,r=!0){this._pending=[],this._context=t,this._update=e,this._eventType=n,this._running=r}attach(e){e.addEventListener(this._eventType,e=>{e.stopPropagation();let t=e.detail;this.consume(t)})}start(){this._running||(console.log(`Starting ${this._eventType} service`),this._running=!0,this._pending.forEach(e=>this.process(e)))}consume(e){if(e.length!==0){let t=e;this._running?this.process(t):(console.log(`📥 Queueing ${this._eventType} message`,e),this._pending.push(t))}}process(e){console.log(`📤 Processing ${this._eventType} message`,e);let t=this._update(e,this._context.toObject());if(console.log(`⏭️ next state: `,t),!Array.isArray(t))this._context.update(t);else{let[e,...n]=t;n.forEach(e=>e.then(e=>this.consume(e))),this._context.update(e)}}};function ve(e,t){return new ye(e,t)}var ye=class{constructor(e,t){this.client=e,this.observer=new ge(t)}start(e){return this.observer.observe(this.client,t=>{e(t.property,t.value)})}},be=`context:auth`,S=class e{static{this.TOKEN_KEY=`un-auth:token`}constructor(e){this.authenticated=!1,this.username=e||`anonymous`}static deauthenticate(t){return t.authenticated=!1,t.username=`anonymous`,localStorage.removeItem(e.TOKEN_KEY),t}},C=class e extends S{constructor(e){super();let t=o(e);console.log(`Token payload`,t),this.token=e,this.authenticated=!0,this.username=t.username}static authenticate(t){let n=new e(t);return localStorage.setItem(S.TOKEN_KEY,t),n}static authenticateFromLocalStorage(){let t=localStorage.getItem(S.TOKEN_KEY);return t?e.authenticate(t):new S}},w=class e extends _e{static{this.EVENT_TYPE=`auth:message`}constructor(t,n){super((e,t)=>this.update(e,t),t,e.EVENT_TYPE),this._redirectForLogin=n}update(e,t){switch(console.log(`Auth update`,e),e[0]){case`auth/signin`:let{token:n,redirect:r}=e[1];return[D(n),T(r)];case`auth/signout`:return[O(t),T(this._redirectForLogin)];case`auth/redirect`:E(this._redirectForLogin,{next:window.location.href});break;default:let i=e[0];throw Error(`Unhandled Auth message "${i}"`)}return t}};c.dispatcher(w.EVENT_TYPE);function T(e,t={}){return new Promise(n=>{E(e,t),n(c.None)})}function E(e,t={}){if(e){let n=window.location.href,r=new URL(e,n);Object.entries(t).forEach(([e,t])=>r.searchParams.set(e,t)),console.log(`Auth redirecting to `,e),window.history.pushState({},``,e),window.history.go()}}function D(e){let{authenticated:t,username:n}=C.authenticate(e);return{authenticated:t,username:n,token:e}}function O(e){let{authenticated:t,username:n}=S.deauthenticate(new S(e.username));return{username:n,authenticated:t,token:void 0}}function k(e,t=be){return ve(e,t)}var A=Object.defineProperty,j=((e,t)=>{let n={};for(var r in e)A(n,r,{get:e[r],enumerable:!0});return t||A(n,Symbol.toStringTag,{value:`Module`}),n})({Dispatch:()=>N,None:()=>M,dispatch:()=>xe,dispatcher:()=>P}),M=[],N=class extends CustomEvent{constructor(e,t=`un:message`){super(t,{bubbles:!0,composed:!0,detail:e})}};function P(e=`un:message`){return(t,...n)=>t.dispatchEvent(new N(n,e))}var xe=P(),Se=class extends CustomEvent{constructor(e,t){super(e,{bubbles:!0,cancelable:!0,composed:!0,detail:t})}};function F(e,...t){let n={execute(){console.log(`▶️ Executing created effect:`,t,e),e(...t.map(e=>e.open(n))),t.forEach(e=>e.close())}};n.execute()}var I=class e{constructor(){this.signals=new WeakMap,this.scheduled=new WeakSet}static{this.scheduler=new e}subscribe(e,t,n){let r=this.signals.get(e);r||(r=new Map,this.signals.set(e,r));let i=r.get(t);i||(i=new Set,r.set(t,i)),i.add(n)}scheduleEffects(e,t){let n=this.signals.get(e);if(!n)return;let r=n.get(t);if(r)for(let e of r)this.scheduled.has(e)||(this.scheduled.add(e),setTimeout(()=>{this.scheduled.delete(e),e.execute()}))}},Ce=class{constructor(){this.running=[],this.eventType=`un-effect:change`}isRunning(){return this.running.length>0}push(e){this.running.push(e)}pop(){this.running.pop()}current(){let e=this.running.length;return e?this.running[e-1]:void 0}subscribe(e,t){let n=this.current();n&&I.scheduler.subscribe(t,e,n)}runEffects(e,t){if(console.log(`⚙️ Running effects for signal`,e,t),I.scheduler.scheduleEffects(t,e),this.host){let n=new Se(this.eventType,{property:e,value:t[e]});this.host.dispatchEvent(n)}}setHost(e,t){this.host=e,t&&(this.eventType=t)}},L=class{static{this.CHANGE_EVENT_TYPE=`un-context:change`}constructor(e,t){t?(this.manager=t.manager,this.object=t.object,this.proxy=t.proxy,this.update(e)):(this.manager=new Ce,this.object=e,this.proxy=we(this.object,this.manager))}get(e){return this.proxy[e]}set(e,t){this.proxy[e]=t}toObject(){return this.proxy}update(e){Object.assign(this.proxy,e)}apply(e){this.update(e(this.proxy))}createEffect(e){F(e,this)}setHost(e,t){this.manager.setHost(e,t)}open(e){return this.manager.push(e),this.proxy}close(){this.manager.pop()}};function we(e,t){return new Proxy(e,{get:(e,n,r)=>{let i=Reflect.get(e,n,r);return t.isRunning()&&R(i)&&t.subscribe(n,e),i},set:(e,n,r,i)=>{let a=Reflect.set(e,n,r,i);return a&&R(r)&&t.runEffects(n,e),a}})}function R(e){switch(typeof e){case`object`:case`number`:case`string`:case`symbol`:case`boolean`:case`undefined`:return!0;default:return!1}}var Te=class{constructor(e,...t){this.effectFn=()=>e(...t)}execute(){this.effectFn()}};function Ee(e,t){return Object.assign(e,{render:t}),e}function De(e,t,...n){let r=e.cloneNode(!0);return Array.from(t.entries()).forEach(([e,t])=>{let i=r.querySelector(`[data-${e}]`);i&&t.forEach(e=>e(i,r,...n))}),r}var Oe=class e{static{this.parser=new DOMParser}constructor(e){this.docType=`text/html`,this.plugins=[],e&&(this.docType=e)}use(e){this.plugins=this.plugins.concat(e)}parse(t,n){let r={},i=t.map((e,i)=>{if(i>=n.length)return[e];let a=n[i],o=this.classifyPlace(i,t),s=this.tryReplacements(o,a);if(s){let t=r[o.nodeLabel];switch(t?t.push(s):r[o.nodeLabel]=[s],o.kind){case`attr value`:return[e,`"" data-${o.nodeLabel}`];case`tag content`:return[e,`data-${o.nodeLabel}`];case`element content`:return[e,`<ins data-${o.nodeLabel}></ins>`]}}else throw console.error(`No match for template parameter`,o,a),`Failed to render template parameter ${i} around ${e}`;return[e]}).flat().join(``),a=e.parser.parseFromString(i,this.docType),o=a.head.childElementCount?a.head.children:a.body.children,s=new DocumentFragment;s.replaceChildren(...o);let c=new Map;for(let e in r){let t=s.querySelector(`[data-${e}]`);t&&r[e].forEach(n=>{let r=n.apply(t,s);if(r){let t=c.get(e);t?t.push(r):c.set(e,[r])}})}return Ee(s,(...e)=>De(s,c,...e))}static{this.OPEN_RE=/<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/}static{this.IN_TAG_RE=/^(\s+|[^<>]*|"[^"]*")*$/}static{this.ATTR_RE=/([$.]?[a-zA-Z][$a-zA-Z0-9.-]*)=\s*$/}static{this.CLOSE_RE=/[/]?>[^<]*$/}classifyPlace(t,n){let r=null;for(let i=t;i>=0&&!(n[i].match(e.CLOSE_RE)||(r=n[i].match(e.OPEN_RE),r)||!n[i].match(e.IN_TAG_RE));i--);if(r){let i=n[t].match(e.ATTR_RE);return i?{kind:`attr value`,nodeLabel:`node${t}`,tagName:r[1],attrName:i[1]}:{kind:`tag content`,nodeLabel:`node${t}`,tagName:r[1]}}return{kind:`element content`,nodeLabel:`node${t}`}}tryReplacements(e,t){let n=this.plugins;for(let r=0;r<n.length;r++){let i=n[r];if(e.kind===i.place&&ke(t,i))return i.mutator(e,t)}}};function ke(e,t){return typeof t.types==`function`?t.types(e,t):t.types.includes(typeof e)}var z=class{constructor(e){this.place=e}apply(e,t){throw`abstract method 'apply' called`}},B=class extends z{constructor(e,t){super(e),this.content=t}apply(e,t){(e.parentNode||t).replaceChild(this.content,e)}},Ae=class extends z{constructor(e,t){super(e),this.text=t,this.name=e.attrName}apply(e){e.setAttribute(this.name,this.text)}},je=class extends z{constructor(e,t){super(e),this.fn=t}apply(e,t){let n=this.place.nodeLabel;return(e,t,...r)=>{let i=new Comment(` <<< ${n} `),a=new Comment(` >>> ${n} `),o=new DocumentFragment;o.replaceChildren(i,a),(e.parentNode||t).replaceChild(o,e),F((...e)=>{Me(this.fn(...e),i,a)},...r)}}};function Me(e,t,n){let r=t.parentNode;if(!r)throw Error(`No parent for placeholder`);let i=e=>{if(Array.isArray(e)){let t=new DocumentFragment,n=e.map(i);return t.replaceChildren(...n),t}else if(e instanceof Node)return e;else return new Text(e?.toString()||``)},a=i(e),o=t.nextSibling;for(;o&&o!==n;){let e=o;o=o.nextSibling,r.removeChild(e)}a&&r.insertBefore(a,n)}var Ne=class extends z{constructor(e,t){super(e),this.fn=t,this.name=e.attrName}apply(e,t){return(e,t,...n)=>F((...t)=>{Pe(this.fn(...t),e,this.name)},...n)}};function Pe(e,t,n){let r=n.match(/^([.$])(.+)$/);if(r){let[n,i,a]=r;switch(i){case`.`:t[a]=e;break;case`$`:`viewModel`in t&&t.viewModel instanceof L&&t.viewModel.set(a,e);break}}else switch(typeof e){case`string`:t.setAttribute(n,e);break;case`undefined`:case`object`:case`boolean`:e?t.setAttribute(n,n):t.removeAttribute(n);break;default:t.setAttribute(n,e?.toString())}}var Fe=class extends z{constructor(e,t){super(e),this.fn=t}apply(e,t){return(e,t,...n)=>F((...t)=>{let n=this.fn(...t);typeof n==`function`&&n(e)},...n)}};new Oe().use([{place:`element content`,types:[`string`,`number`,`bigint`,`symbol`,`boolean`],mutator:(e,t)=>new B(e,new Text(t?.toString()||``))},{place:`attr value`,types:[`string`,`number`,`bigint`,`symbol`],mutator:(e,t)=>new Ae(e,t?.toString()||``)},{place:`element content`,types:e=>e instanceof Node,mutator:(e,t)=>new B(e,t)},{place:`element content`,types:e=>Array.isArray(e),mutator:(e,t)=>{let n=new DocumentFragment,r=t.map(e=>e instanceof Node?e:new Text(e?.toString()||``));return n.append(...r),new B(e,n)}},{place:`element content`,types:[`function`],mutator:(e,t)=>new je(e,t)},{place:`attr value`,types:[`function`],mutator:(e,t)=>new Ne(e,t)},{place:`tag content`,types:[`function`],mutator:(e,t)=>new Fe(e,t)}]);var V=class e extends HTMLElement{static{this.DISCOVERY_EVENT=`un-provider:discover`}static{this.REGISTRY_EVENT=`un-provider:register`}static{this.CHANGE_EVENT=`un-provider:change`}static{document.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail,r=Re(t);r&&n(r)}),document.addEventListener(e.REGISTRY_EVENT,e=>{let[t,n]=e.detail;Le(t,n)})}constructor(t,n){super(),this.contextLabel=n,this.context=new L(t),this.context.setHost(this,e.CHANGE_EVENT),this.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail;t===this.contextLabel&&(e.stopPropagation(),n(this))});let r=new CustomEvent(e.REGISTRY_EVENT,{bubbles:!0,composed:!0,detail:[this.contextLabel,this]});this.dispatchEvent(r)}attach(t){return this.addEventListener(e.CHANGE_EVENT,t),this.context.toObject()}detach(t){this.removeEventListener(e.CHANGE_EVENT,t)}};function Ie(e,t){return new Promise((n,r)=>{let i=new CustomEvent(V.DISCOVERY_EVENT,{bubbles:!0,composed:!0,detail:[t,e=>e?n(e):r()]});e.isConnected?e.dispatchEvent(i):document.dispatchEvent(i)})}var H={};function Le(e,t){H[e]=t}function Re(e){return H[e]}var ze=class{constructor(e){this.contextLabel=e}observe(e,t){return new Promise((n,r)=>{this.provider?n(this.attachObserver(t)):Ie(e,this.contextLabel).then(e=>{this.provider=e,n(this.attachObserver(t))}).catch(e=>r(e))})}attachObserver(e){let t=this.provider.attach(t=>{let{property:n,value:r}=t.detail,i=new Te(e,{property:n,value:r});console.log(`📡Signal received:`,n,r),i.execute()});return console.log(`👀 Initial observation:`,t),t}},Be=class{constructor(e,t,n=`service:message`,r=!0){this._pending=[],this._context=t,this._update=e,this._eventType=n,this._running=r}attach(e){e.addEventListener(this._eventType,e=>{e.stopPropagation();let t=e.detail;this.consume(t)})}start(){this._running||(console.log(`Starting ${this._eventType} service`),this._running=!0,this._pending.forEach(e=>this.process(e)))}consume(e){if(e.length!==0){let t=e;this._running?this.process(t):(console.log(`📥 Queueing ${this._eventType} message`,e),this._pending.push(t))}}process(e){console.log(`📤 Processing ${this._eventType} message`,e);let t=this._update(e,this._context.toObject());if(console.log(`⏭️ next state: `,t),!Array.isArray(t))this._context.update(t);else{let[e,...n]=t;n.forEach(e=>e.then(e=>this.consume(e))),this._context.update(e)}}};function Ve(e,t){return new He(e,t)}var He=class{constructor(e,t){this.client=e,this.observer=new ze(t)}start(e){return this.observer.observe(this.client,t=>{e(t.property,t.value)})}},U=class{constructor(e,t){this.initialized=!1,this.origin=e;let n=Ue(t).map(([e,t])=>[t,e]);this.inverse=Object.fromEntries(n)}mapObservation(e){let t=Object.entries(e).map(([e,t])=>{let n=this.inverse[e];return n?[n,t]:[]});return Object.fromEntries(t.filter(e=>e.length>0))}start(e){return this.origin.start((t,n)=>{let r=this.inverse[t];e(r,n),this.initialized=!0}).then(e=>this.initialized?{}:this.mapObservation(e))}};function Ue(e){return Object.entries(e).map(([e,t])=>[e,t])}var We=class extends CustomEvent{constructor(e,t){super(e,{bubbles:!0,cancelable:!0,composed:!0,detail:t})}};function W(e,...t){let n={execute(){console.log(`▶️ Executing created effect:`,t,e),e(...t.map(e=>e.open(n))),t.forEach(e=>e.close())}};n.execute()}var G=class e{constructor(){this.signals=new WeakMap,this.scheduled=new WeakSet}static{this.scheduler=new e}subscribe(e,t,n){let r=this.signals.get(e);r||(r=new Map,this.signals.set(e,r));let i=r.get(t);i||(i=new Set,r.set(t,i)),i.add(n)}scheduleEffects(e,t){let n=this.signals.get(e);if(!n)return;let r=n.get(t);if(r)for(let e of r)this.scheduled.has(e)||(this.scheduled.add(e),setTimeout(()=>{this.scheduled.delete(e),e.execute()}))}},Ge=class{constructor(){this.running=[],this.eventType=`un-effect:change`}isRunning(){return this.running.length>0}push(e){this.running.push(e)}pop(){this.running.pop()}current(){let e=this.running.length;return e?this.running[e-1]:void 0}subscribe(e,t){let n=this.current();n&&G.scheduler.subscribe(t,e,n)}runEffects(e,t){if(console.log(`⚙️ Running effects for signal`,e,t),G.scheduler.scheduleEffects(t,e),this.host){let n=new We(this.eventType,{property:e,value:t[e]});this.host.dispatchEvent(n)}}setHost(e,t){this.host=e,t&&(this.eventType=t)}},K=class{static{this.CHANGE_EVENT_TYPE=`un-context:change`}constructor(e,t){t?(this.manager=t.manager,this.object=t.object,this.proxy=t.proxy,this.update(e)):(this.manager=new Ge,this.object=e,this.proxy=Ke(this.object,this.manager))}get(e){return this.proxy[e]}set(e,t){this.proxy[e]=t}toObject(){return this.proxy}update(e){Object.assign(this.proxy,e)}apply(e){this.update(e(this.proxy))}createEffect(e){W(e,this)}setHost(e,t){this.manager.setHost(e,t)}open(e){return this.manager.push(e),this.proxy}close(){this.manager.pop()}};function Ke(e,t){return new Proxy(e,{get:(e,n,r)=>{let i=Reflect.get(e,n,r);return t.isRunning()&&q(i)&&t.subscribe(n,e),i},set:(e,n,r,i)=>{let a=Reflect.set(e,n,r,i);return a&&q(r)&&t.runEffects(n,e),a}})}function q(e){switch(typeof e){case`object`:case`number`:case`string`:case`symbol`:case`boolean`:case`undefined`:return!0;default:return!1}}function qe(e,t){return Object.assign(e,{render:t}),e}function Je(e,t,...n){let r=e.cloneNode(!0);return Array.from(t.entries()).forEach(([e,t])=>{let i=r.querySelector(`[data-${e}]`);i&&t.forEach(e=>e(i,r,...n))}),r}var Ye=class e{static{this.parser=new DOMParser}constructor(e){this.docType=`text/html`,this.plugins=[],e&&(this.docType=e)}use(e){this.plugins=this.plugins.concat(e)}parse(t,n){let r={},i=t.map((e,i)=>{if(i>=n.length)return[e];let a=n[i],o=this.classifyPlace(i,t),s=this.tryReplacements(o,a);if(s){let t=r[o.nodeLabel];switch(t?t.push(s):r[o.nodeLabel]=[s],o.kind){case`attr value`:return[e,`"" data-${o.nodeLabel}`];case`tag content`:return[e,`data-${o.nodeLabel}`];case`element content`:return[e,`<ins data-${o.nodeLabel}></ins>`]}}else throw console.error(`No match for template parameter`,o,a),`Failed to render template parameter ${i} around ${e}`;return[e]}).flat().join(``),a=e.parser.parseFromString(i,this.docType),o=a.head.childElementCount?a.head.children:a.body.children,s=new DocumentFragment;s.replaceChildren(...o);let c=new Map;for(let e in r){let t=s.querySelector(`[data-${e}]`);t&&r[e].forEach(n=>{let r=n.apply(t,s);if(r){let t=c.get(e);t?t.push(r):c.set(e,[r])}})}return qe(s,(...e)=>Je(s,c,...e))}static{this.OPEN_RE=/<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/}static{this.IN_TAG_RE=/^(\s+|[^<>]*|"[^"]*")*$/}static{this.ATTR_RE=/([$.]?[a-zA-Z][$a-zA-Z0-9.-]*)=\s*$/}static{this.CLOSE_RE=/[/]?>[^<]*$/}classifyPlace(t,n){let r=null;for(let i=t;i>=0&&!(n[i].match(e.CLOSE_RE)||(r=n[i].match(e.OPEN_RE),r)||!n[i].match(e.IN_TAG_RE));i--);if(r){let i=n[t].match(e.ATTR_RE);return i?{kind:`attr value`,nodeLabel:`node${t}`,tagName:r[1],attrName:i[1]}:{kind:`tag content`,nodeLabel:`node${t}`,tagName:r[1]}}return{kind:`element content`,nodeLabel:`node${t}`}}tryReplacements(e,t){let n=this.plugins;for(let r=0;r<n.length;r++){let i=n[r];if(e.kind===i.place&&Xe(t,i))return i.mutator(e,t)}}};function Xe(e,t){return typeof t.types==`function`?t.types(e,t):t.types.includes(typeof e)}var J=class{constructor(e){this.place=e}apply(e,t){throw`abstract method 'apply' called`}},Y=class extends J{constructor(e,t){super(e),this.content=t}apply(e,t){(e.parentNode||t).replaceChild(this.content,e)}},Ze=class extends J{constructor(e,t){super(e),this.text=t,this.name=e.attrName}apply(e){e.setAttribute(this.name,this.text)}},X=class extends J{constructor(e,t){super(e),this.fn=t}apply(e,t){let n=this.place.nodeLabel;return(e,t,...r)=>{let i=new Comment(` <<< ${n} `),a=new Comment(` >>> ${n} `),o=new DocumentFragment;o.replaceChildren(i,a),(e.parentNode||t).replaceChild(o,e),W((...e)=>{Qe(this.fn(...e),i,a)},...r)}}};function Qe(e,t,n){let r=t.parentNode;if(!r)throw Error(`No parent for placeholder`);let i=e=>{if(Array.isArray(e)){let t=new DocumentFragment,n=e.map(i);return t.replaceChildren(...n),t}else if(e instanceof Node)return e;else return new Text(e?.toString()||``)},a=i(e),o=t.nextSibling;for(;o&&o!==n;){let e=o;o=o.nextSibling,r.removeChild(e)}a&&r.insertBefore(a,n)}var $e=class extends J{constructor(e,t){super(e),this.fn=t,this.name=e.attrName}apply(e,t){return(e,t,...n)=>W((...t)=>{et(this.fn(...t),e,this.name)},...n)}};function et(e,t,n){let r=n.match(/^([.$])(.+)$/);if(r){let[n,i,a]=r;switch(i){case`.`:t[a]=e;break;case`$`:`viewModel`in t&&t.viewModel instanceof K&&t.viewModel.set(a,e);break}}else switch(typeof e){case`string`:t.setAttribute(n,e);break;case`undefined`:case`object`:case`boolean`:e?t.setAttribute(n,n):t.removeAttribute(n);break;default:t.setAttribute(n,e?.toString())}}var tt=class extends J{constructor(e,t){super(e),this.fn=t}apply(e,t){return(e,t,...n)=>W((...t)=>{let n=this.fn(...t);typeof n==`function`&&n(e)},...n)}};new Ye().use([{place:`element content`,types:[`string`,`number`,`bigint`,`symbol`,`boolean`],mutator:(e,t)=>new Y(e,new Text(t?.toString()||``))},{place:`attr value`,types:[`string`,`number`,`bigint`,`symbol`],mutator:(e,t)=>new Ze(e,t?.toString()||``)},{place:`element content`,types:e=>e instanceof Node,mutator:(e,t)=>new Y(e,t)},{place:`element content`,types:e=>Array.isArray(e),mutator:(e,t)=>{let n=new DocumentFragment,r=t.map(e=>e instanceof Node?e:new Text(e?.toString()||``));return n.append(...r),new Y(e,n)}},{place:`element content`,types:[`function`],mutator:(e,t)=>new X(e,t)},{place:`attr value`,types:[`function`],mutator:(e,t)=>new $e(e,t)},{place:`tag content`,types:[`function`],mutator:(e,t)=>new tt(e,t)}]);var Z=class extends K{constructor(e,t){super(e,t)}get $(){return this.toObject()}with(e,...t){let n=Object.fromEntries(t.map(e=>[e,e]));return this.merge(new U(e,n))}withCalculated(e,t){return this.merge(new U(e,t))}withRenamed(e,t){return this.merge(new U(e,t))}merge(e){if(e){let t=new Map;e.start((e,n)=>{this.set(e,n),t.set(e,!0)}).then(e=>{Object.keys(e).filter(e=>!t.get(e)).forEach(t=>{this.set(t,e[t])})})}return this}render(e){return e.render(this)}};function nt(e){return e===void 0?new Z({}):new Z(e)}var rt=n({CONTEXT_DEFAULT:()=>Q,Provider:()=>it,Service:()=>$,dispatch:()=>at}),Q=`context:store`,$=class e extends Be{static{this.EVENT_TYPE=`store:message`}constructor(t,n){super((e,t)=>n(t,e),t,e.EVENT_TYPE)}},it=class extends V{constructor(e,t){super(t,Q),this.viewModel=nt({authenticated:!1}).with(k(this),`authenticated`,`username`,`token`),this._updateFn=e}connectedCallback(){new $(this.context,(e,t)=>this._updateFn(e,t,this.viewModel.toObject())).attach(this)}};function at(e,t){console.log(`📨 Dispatching message:`,t,e),e.dispatchEvent(new j.Dispatch(t,$.EVENT_TYPE))}function ot(e,t=Q){return Ve(e,t)}Object.defineProperty(e,`Store`,{enumerable:!0,get:function(){return rt}}),e.fromStore=ot});
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbndl/store",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "Unbundled library for maintaining client-side state in a store, following the Elm architecture and MVU",
|
|
5
5
|
"main": "./dist/store.js",
|
|
6
6
|
"type": "module",
|
|
7
|
+
"types": "./dist/store.d.ts",
|
|
7
8
|
"scripts": {
|
|
8
9
|
"build": "npx vite build",
|
|
9
10
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
@@ -19,5 +20,11 @@
|
|
|
19
20
|
"The Elm Architecture (TEA)"
|
|
20
21
|
],
|
|
21
22
|
"author": "ken@mnmlst.me",
|
|
22
|
-
"license": "BSD-3-Clause"
|
|
23
|
+
"license": "BSD-3-Clause",
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"route-parser": "^0.0.5"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/route-parser": "^0.1.7"
|
|
29
|
+
}
|
|
23
30
|
}
|
package/src/fromStore.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { fromService } from "@unbndl/service";
|
|
2
2
|
import * as Store from "./store.ts";
|
|
3
3
|
|
|
4
4
|
export function fromStore<M extends object>(
|
|
5
5
|
target: HTMLElement,
|
|
6
6
|
contextLabel: string = Store.CONTEXT_DEFAULT
|
|
7
7
|
) {
|
|
8
|
-
return
|
|
8
|
+
return fromService<M>(target, contextLabel);
|
|
9
9
|
}
|
|
File without changes
|