atmx-web 0.103.0 → 0.106.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atmx.es.js +135 -58
- package/dist/atmx.umd.js +2 -2
- package/dist/core/query.d.ts +11 -0
- package/dist/index.d.ts +7 -2
- package/package.json +1 -1
package/dist/atmx.es.js
CHANGED
|
@@ -128,7 +128,7 @@ function p(e) {
|
|
|
128
128
|
};
|
|
129
129
|
}
|
|
130
130
|
function m(e) {
|
|
131
|
-
let t = `https://atmx.axiomcore.dev/${e.engineVersion || "v0.
|
|
131
|
+
let t = `https://atmx.axiomcore.dev/${e.engineVersion || "v0.106.0"}/axiom_runtime.wasm`;
|
|
132
132
|
return e.disableCacheBuster || (t += `?t=${Date.now()}`), t;
|
|
133
133
|
}
|
|
134
134
|
async function h(e) {
|
|
@@ -294,7 +294,8 @@ function w(e, t, n, r) {
|
|
|
294
294
|
break;
|
|
295
295
|
}
|
|
296
296
|
}
|
|
297
|
-
|
|
297
|
+
let i = e.parentElement?.querySelector(`[name="${n}"]`);
|
|
298
|
+
r ? (e.textContent = r, e.removeAttribute("hidden"), e.style.removeProperty("display"), i && (i.setAttribute("aria-invalid", "true"), i.classList.add("border-red-500", "focus:border-red-500", "focus:ring-red-500"))) : (e.setAttribute("hidden", ""), e.style.setProperty("display", "none", "important"), e.textContent = "", i && (i.removeAttribute("aria-invalid"), i.classList.remove("border-red-500", "focus:border-red-500", "focus:ring-red-500")));
|
|
298
299
|
}
|
|
299
300
|
Array.from(e.attributes).forEach((n) => {
|
|
300
301
|
if (n.name.startsWith("ax-bind:")) {
|
|
@@ -412,7 +413,7 @@ var A = 0, j = class {
|
|
|
412
413
|
let r = ++A;
|
|
413
414
|
this.currentReqId = r;
|
|
414
415
|
let { path: i, remainingArgs: a } = o(this.route, this.args), s = new Uint8Array();
|
|
415
|
-
Object.keys(a).length > 0 && (s = new TextEncoder().encode(JSON.stringify(a))),
|
|
416
|
+
Object.keys(a).length > 0 && (s = new TextEncoder().encode(JSON.stringify(a))), Q.debug && (console.groupCollapsed(`%c➔ WASM QUERY [#${r}]`, "color: #7c3aed; font-weight: bold;"), console.log("Namespace:", this.route.namespace), console.log("Endpoint ID:", this.route.id), console.log("Path:", i), console.groupEnd()), t.set(r, {
|
|
416
417
|
isStream: this.route.isStream,
|
|
417
418
|
onResponse: (t) => {
|
|
418
419
|
if (this.currentReqId === r) {
|
|
@@ -442,17 +443,71 @@ var A = 0, j = class {
|
|
|
442
443
|
let c = p(this.route.namespace), l = p(this.route.method), d = p(i), m = f(s), h = p(""), g = p("");
|
|
443
444
|
u.axiom_wasm_call(r, c.ptr, c.len, this.route.id, l.ptr, l.len, d.ptr, d.len, h.ptr, h.len, g.ptr, g.len, m, s.length), u.axiom_free_memory(c.ptr, c.len), u.axiom_free_memory(l.ptr, l.len), u.axiom_free_memory(d.ptr, d.len), u.axiom_free_memory(h.ptr, h.len), u.axiom_free_memory(g.ptr, g.len);
|
|
444
445
|
}
|
|
445
|
-
}, M = /* @__PURE__ */ new Map()
|
|
446
|
+
}, M = /* @__PURE__ */ new Map();
|
|
447
|
+
function N(n, r = {}, i = {}) {
|
|
448
|
+
return new Promise((s, c) => {
|
|
449
|
+
let l = a(n);
|
|
450
|
+
if (!l) return c(/* @__PURE__ */ Error(`ATMX Route not found: ${n}`));
|
|
451
|
+
let d = ++A, { path: m, remainingArgs: h } = o(l, {
|
|
452
|
+
...r,
|
|
453
|
+
...i
|
|
454
|
+
}), g = h;
|
|
455
|
+
l.bodyParam && h[l.bodyParam] !== void 0 && typeof h[l.bodyParam] == "object" && (g = h[l.bodyParam]);
|
|
456
|
+
let _ = new Uint8Array();
|
|
457
|
+
Object.keys(g).length > 0 && (_ = new TextEncoder().encode(JSON.stringify(g))), t.set(d, {
|
|
458
|
+
isStream: l.isStream,
|
|
459
|
+
onResponse: (t) => {
|
|
460
|
+
t.eventType === e.Error ? (document.dispatchEvent(new CustomEvent("atmx:error", { detail: t.error })), c(t.error)) : t.data && s(t.data);
|
|
461
|
+
},
|
|
462
|
+
onComplete: () => {}
|
|
463
|
+
});
|
|
464
|
+
let v = p(l.namespace), y = p(l.method), b = p(m), x = p(""), S = p(""), C = f(_);
|
|
465
|
+
u.axiom_wasm_call(d, v.ptr, v.len, l.id, y.ptr, y.len, b.ptr, b.len, x.ptr, x.len, S.ptr, S.len, C, _.length), u.axiom_free_memory(v.ptr, v.len), u.axiom_free_memory(y.ptr, y.len), u.axiom_free_memory(b.ptr, b.len), u.axiom_free_memory(x.ptr, x.len), u.axiom_free_memory(S.ptr, S.len), C && u.axiom_free_memory(C, _.length);
|
|
466
|
+
});
|
|
467
|
+
}
|
|
446
468
|
function P(e, t) {
|
|
469
|
+
let [n, r] = e.split("."), i = `atmx_cache_${e}`;
|
|
470
|
+
t && Object.keys(t).length > 0 && (i += `:${JSON.stringify(t)}`), Object.keys(sessionStorage).forEach((e) => {
|
|
471
|
+
(e === i || !t && e.startsWith(i + ":")) && sessionStorage.removeItem(e);
|
|
472
|
+
}), M.forEach((e, i) => {
|
|
473
|
+
e.route.namespace === n && e.route.name === r && (!t || Object.keys(t).length === 0 || JSON.stringify(e.args) === JSON.stringify(t)) && e.fetch(!0);
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
function F(e, t = {}, n) {
|
|
477
|
+
let r = `${e}:${JSON.stringify(t)}`;
|
|
478
|
+
try {
|
|
479
|
+
sessionStorage.setItem(`atmx_cache_${r}`, JSON.stringify(n));
|
|
480
|
+
} catch {}
|
|
481
|
+
let i = M.get(r);
|
|
482
|
+
i && i.update({
|
|
483
|
+
state: "data",
|
|
484
|
+
source: "cache",
|
|
485
|
+
isFetching: !1,
|
|
486
|
+
data: n,
|
|
487
|
+
error: null
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
function I(e) {
|
|
491
|
+
let t = e ? `atmx_cache_${e}.` : "atmx_cache_";
|
|
492
|
+
Object.keys(sessionStorage).forEach((e) => {
|
|
493
|
+
e.startsWith(t) && sessionStorage.removeItem(e);
|
|
494
|
+
}), M.forEach((t) => {
|
|
495
|
+
(!e || t.route.namespace === e) && t.fetch(!0);
|
|
496
|
+
});
|
|
497
|
+
}
|
|
498
|
+
//#endregion
|
|
499
|
+
//#region src/dom/lifecycle.ts
|
|
500
|
+
var L = 0;
|
|
501
|
+
function R(e, t) {
|
|
447
502
|
let n = `ax-on:${t}`;
|
|
448
503
|
e.hasAttribute(n) && S(e.getAttribute(n), D(e));
|
|
449
504
|
}
|
|
450
|
-
function
|
|
451
|
-
if (!
|
|
505
|
+
function z(e, t, n) {
|
|
506
|
+
if (!Q.debug) return;
|
|
452
507
|
let r = e === "OUT" ? "#7c3aed" : "#059669";
|
|
453
508
|
console.groupCollapsed(`%c${e === "OUT" ? "➔ WASM CALL" : "← WASM RESP"} [#${t}]`, `color: ${r}; font-weight: bold;`), console.log("Details:", n), console.groupEnd();
|
|
454
509
|
}
|
|
455
|
-
function
|
|
510
|
+
function B(e, t) {
|
|
456
511
|
let n = t.trim().match(/^([\w\.\-]+)(?:\((.*)\))?$/);
|
|
457
512
|
if (!n) return null;
|
|
458
513
|
let r = n[1], i = {};
|
|
@@ -469,10 +524,10 @@ function I(e, t) {
|
|
|
469
524
|
args: i
|
|
470
525
|
};
|
|
471
526
|
}
|
|
472
|
-
function
|
|
527
|
+
function V(e) {
|
|
473
528
|
let t = e.getAttribute("ax-query");
|
|
474
529
|
if (!t) return;
|
|
475
|
-
let n =
|
|
530
|
+
let n = B(e, t);
|
|
476
531
|
if (!n) return;
|
|
477
532
|
let r = a(n.target);
|
|
478
533
|
if (!r) {
|
|
@@ -484,30 +539,30 @@ function L(e) {
|
|
|
484
539
|
}
|
|
485
540
|
let i = `${n.target}:${JSON.stringify(n.args)}`, o = M.get(i);
|
|
486
541
|
o || (o = new j(i, r, n.args), M.set(i, o)), e._axListener || (e._axListener = (t) => {
|
|
487
|
-
k(e, t), (t.state === "data" || t.state === "error") && (
|
|
542
|
+
k(e, t), (t.state === "data" || t.state === "error") && (R(e, t.state), e.dispatchEvent(new CustomEvent(`atmx:${t.state}`, {
|
|
488
543
|
bubbles: !0,
|
|
489
544
|
detail: t.data || t.error
|
|
490
545
|
})));
|
|
491
546
|
}, o.subscribe(e._axListener)), o.fetch();
|
|
492
547
|
}
|
|
493
|
-
function
|
|
548
|
+
function H(e) {
|
|
494
549
|
let t = e.getAttribute("ax-mutate");
|
|
495
550
|
if (!t) return;
|
|
496
|
-
let n =
|
|
551
|
+
let n = B(e, t);
|
|
497
552
|
if (!n) return;
|
|
498
553
|
let r = a(n.target);
|
|
499
554
|
if (!r) {
|
|
500
555
|
k(e, {
|
|
501
556
|
state: "error",
|
|
502
557
|
error: { message: `Route not found: ${n.target}` }
|
|
503
|
-
}),
|
|
558
|
+
}), R(e, "error");
|
|
504
559
|
return;
|
|
505
560
|
}
|
|
506
561
|
k(e, {
|
|
507
562
|
state: "mutating",
|
|
508
563
|
error: null,
|
|
509
564
|
data: null
|
|
510
|
-
}),
|
|
565
|
+
}), R(e, "mutating");
|
|
511
566
|
let i = {};
|
|
512
567
|
e instanceof HTMLFormElement && new FormData(e).forEach((t, n) => {
|
|
513
568
|
let r = e.elements.namedItem(n), a = !1;
|
|
@@ -536,11 +591,11 @@ function R(e) {
|
|
|
536
591
|
for (let [t, n] of Object.entries(l)) e.append(t, String(n));
|
|
537
592
|
p = new TextEncoder().encode(e.toString());
|
|
538
593
|
} else p = new TextEncoder().encode(JSON.stringify(l));
|
|
539
|
-
|
|
594
|
+
U(e, r.namespace, r.id, r.method, s, p, r.isStream, !0, u, f);
|
|
540
595
|
}
|
|
541
|
-
function
|
|
542
|
-
let m = ++
|
|
543
|
-
|
|
596
|
+
function U(e, n, r, i, a, o, s, c, l = {}, d = !1) {
|
|
597
|
+
let m = ++L;
|
|
598
|
+
z("OUT", m, {
|
|
544
599
|
namespace: n,
|
|
545
600
|
endpointId: r,
|
|
546
601
|
method: i,
|
|
@@ -549,16 +604,16 @@ function z(e, n, r, i, a, o, s, c, l = {}, d = !1) {
|
|
|
549
604
|
payload: o.length > 0 ? d ? new TextDecoder().decode(o) : JSON.parse(new TextDecoder().decode(o)) : null
|
|
550
605
|
}), t.set(m, {
|
|
551
606
|
isStream: s,
|
|
552
|
-
onResponse: (t) =>
|
|
607
|
+
onResponse: (t) => W(e, t, c, m),
|
|
553
608
|
onComplete: () => {
|
|
554
|
-
|
|
609
|
+
Q.debug && console.log(`%c✔ Stream Complete [#${m}]`, "color: #94a3b8;");
|
|
555
610
|
}
|
|
556
611
|
});
|
|
557
612
|
let h = p(n), g = p(i), _ = p(a), v = p(""), y = p(Object.keys(l).length > 0 ? JSON.stringify(l) : ""), b = f(o);
|
|
558
613
|
u.axiom_wasm_call(m, h.ptr, h.len, r, g.ptr, g.len, _.ptr, _.len, v.ptr, v.len, y.ptr, y.len, b, o.length), u.axiom_free_memory(h.ptr, h.len), u.axiom_free_memory(g.ptr, g.len), u.axiom_free_memory(_.ptr, _.len), u.axiom_free_memory(v.ptr, v.len), u.axiom_free_memory(y.ptr, y.len), b && u.axiom_free_memory(b, o.length);
|
|
559
614
|
}
|
|
560
|
-
function
|
|
561
|
-
if (
|
|
615
|
+
function W(t, n, r, i) {
|
|
616
|
+
if (z("IN", i, {
|
|
562
617
|
eventType: e[n.eventType],
|
|
563
618
|
data: n.data,
|
|
564
619
|
error: n.error
|
|
@@ -568,7 +623,7 @@ function B(t, n, r, i) {
|
|
|
568
623
|
error: n.error,
|
|
569
624
|
isFetching: !1,
|
|
570
625
|
isMutating: !1
|
|
571
|
-
}),
|
|
626
|
+
}), R(t, "error"), t.dispatchEvent(new CustomEvent("atmx:error", {
|
|
572
627
|
bubbles: !0,
|
|
573
628
|
detail: n.error
|
|
574
629
|
}));
|
|
@@ -585,18 +640,23 @@ function B(t, n, r, i) {
|
|
|
585
640
|
isFetching: o,
|
|
586
641
|
isMutating: !1
|
|
587
642
|
}), r) {
|
|
588
|
-
let e = t.getAttribute("ax-
|
|
589
|
-
|
|
590
|
-
let n = x(e
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
643
|
+
let e = t.getAttribute("ax-invalidates");
|
|
644
|
+
e && e.split(",").map((e) => e.trim()).forEach((e) => {
|
|
645
|
+
let n = x(`\`${e}\``, D(t)) || e;
|
|
646
|
+
Q.invalidate(n);
|
|
647
|
+
});
|
|
648
|
+
let n = t.getAttribute("ax-store-token");
|
|
649
|
+
if (n) {
|
|
650
|
+
let e = x(n, D(t));
|
|
651
|
+
if (e) {
|
|
652
|
+
let n = a(B(t, t.getAttribute("ax-mutate")).target)?.namespace || "default", r = t.getAttribute("ax-token-target");
|
|
653
|
+
(r ? r.split(",").map((e) => e.trim()) : [n]).forEach((t) => {
|
|
654
|
+
Q.setNamespaceAuthToken(t, e);
|
|
595
655
|
});
|
|
596
656
|
}
|
|
597
657
|
}
|
|
598
658
|
}
|
|
599
|
-
|
|
659
|
+
R(t, s), t.dispatchEvent(new CustomEvent(r ? "atmx:success" : "atmx:data", {
|
|
600
660
|
bubbles: !0,
|
|
601
661
|
detail: n.data
|
|
602
662
|
}));
|
|
@@ -604,15 +664,15 @@ function B(t, n, r, i) {
|
|
|
604
664
|
}
|
|
605
665
|
//#endregion
|
|
606
666
|
//#region src/dom/scanner.ts
|
|
607
|
-
var
|
|
667
|
+
var G = new IntersectionObserver((e) => {
|
|
608
668
|
e.forEach((e) => {
|
|
609
669
|
if (e.isIntersecting) {
|
|
610
670
|
let t = e.target;
|
|
611
|
-
t.hasAttribute("ax-query") &&
|
|
671
|
+
t.hasAttribute("ax-query") && V(t), G.unobserve(t);
|
|
612
672
|
}
|
|
613
673
|
});
|
|
614
674
|
});
|
|
615
|
-
function
|
|
675
|
+
function K(e) {
|
|
616
676
|
e.querySelectorAll("[\\:ax-query], [\\:ax-mutate]").forEach((e) => {
|
|
617
677
|
if (e.hasAttribute(":ax-query")) {
|
|
618
678
|
let t = x(e.getAttribute(":ax-query"), D(e));
|
|
@@ -624,11 +684,11 @@ function H(e) {
|
|
|
624
684
|
}
|
|
625
685
|
});
|
|
626
686
|
}
|
|
627
|
-
function
|
|
628
|
-
|
|
687
|
+
function q(e = document) {
|
|
688
|
+
K(e), e.querySelectorAll("[ax-query]").forEach((e) => {
|
|
629
689
|
let t = e, n = t.getAttribute("ax-query");
|
|
630
690
|
if (!n) return;
|
|
631
|
-
let r =
|
|
691
|
+
let r = B(t, n);
|
|
632
692
|
if (r) {
|
|
633
693
|
let e = `${r.target}:${JSON.stringify(r.args)}`;
|
|
634
694
|
try {
|
|
@@ -643,20 +703,20 @@ function U(e = document) {
|
|
|
643
703
|
}
|
|
644
704
|
});
|
|
645
705
|
}
|
|
646
|
-
function
|
|
647
|
-
|
|
706
|
+
function J(e = document) {
|
|
707
|
+
K(e), e.querySelectorAll("[ax-query]").forEach((e) => {
|
|
648
708
|
let t = e;
|
|
649
709
|
k(t, {});
|
|
650
710
|
let n = t.getAttribute("ax-trigger") || "load";
|
|
651
|
-
n === "load" ?
|
|
652
|
-
e.preventDefault(),
|
|
711
|
+
n === "load" ? V(t) : n === "intersect" ? G.observe(t) : t.addEventListener(n, (e) => {
|
|
712
|
+
e.preventDefault(), V(t);
|
|
653
713
|
});
|
|
654
714
|
}), e.querySelectorAll("[ax-mutate]").forEach((e) => {
|
|
655
715
|
let t = e;
|
|
656
716
|
k(t, {});
|
|
657
717
|
let n = t.tagName === "FORM" ? "submit" : "click";
|
|
658
718
|
t.addEventListener(n, (e) => {
|
|
659
|
-
(t.tagName === "A" || t.tagName === "BUTTON" || t.tagName === "FORM") && e.preventDefault(),
|
|
719
|
+
(t.tagName === "A" || t.tagName === "BUTTON" || t.tagName === "FORM") && e.preventDefault(), H(t);
|
|
660
720
|
});
|
|
661
721
|
}), e.querySelectorAll("[ax-trigger=\"refresh\"]").forEach((e) => {
|
|
662
722
|
let t = e;
|
|
@@ -664,20 +724,20 @@ function W(e = document) {
|
|
|
664
724
|
e.preventDefault();
|
|
665
725
|
let n = t.closest("[ax-query]");
|
|
666
726
|
if (n) {
|
|
667
|
-
let e =
|
|
727
|
+
let e = B(n, n.getAttribute("ax-query"));
|
|
668
728
|
if (e && a(e.target)) {
|
|
669
729
|
let t = `${e.target}:${JSON.stringify(e.args)}`, r = M.get(t);
|
|
670
|
-
r ? r.fetch(!0) :
|
|
730
|
+
r ? r.fetch(!0) : V(n);
|
|
671
731
|
}
|
|
672
732
|
}
|
|
673
733
|
});
|
|
674
734
|
});
|
|
675
735
|
}
|
|
676
|
-
function
|
|
736
|
+
function Y() {
|
|
677
737
|
new MutationObserver((e) => {
|
|
678
738
|
e.forEach((e) => {
|
|
679
739
|
e.addedNodes.forEach((e) => {
|
|
680
|
-
e instanceof HTMLElement &&
|
|
740
|
+
e instanceof HTMLElement && J(e);
|
|
681
741
|
});
|
|
682
742
|
});
|
|
683
743
|
}).observe(document.body, {
|
|
@@ -687,7 +747,7 @@ function G() {
|
|
|
687
747
|
}
|
|
688
748
|
//#endregion
|
|
689
749
|
//#region src/dom/components/engine-status.ts
|
|
690
|
-
var
|
|
750
|
+
var X = class extends HTMLElement {
|
|
691
751
|
constructor() {
|
|
692
752
|
super();
|
|
693
753
|
}
|
|
@@ -708,11 +768,11 @@ var K = class extends HTMLElement {
|
|
|
708
768
|
}) : (this.innerText = t, this.getAttribute("class") || (this.className = `text-xs font-bold ${n}`));
|
|
709
769
|
}
|
|
710
770
|
};
|
|
711
|
-
typeof window < "u" && !customElements.get("ax-engine-status") && customElements.define("ax-engine-status",
|
|
771
|
+
typeof window < "u" && !customElements.get("ax-engine-status") && customElements.define("ax-engine-status", X);
|
|
712
772
|
//#endregion
|
|
713
773
|
//#region src/index.ts
|
|
714
|
-
var
|
|
715
|
-
version =
|
|
774
|
+
var Z = "0.106.0", Q = new class {
|
|
775
|
+
version = Z;
|
|
716
776
|
initialized = !1;
|
|
717
777
|
debug = !1;
|
|
718
778
|
async init(e) {
|
|
@@ -722,15 +782,15 @@ var q = "0.103.0", J = new class {
|
|
|
722
782
|
initDurationMs: 0
|
|
723
783
|
};
|
|
724
784
|
let t = await h(e);
|
|
725
|
-
return t.ok ? (this.debug = e.debug || !1,
|
|
785
|
+
return t.ok ? (this.debug = e.debug || !1, Y(), J(document.body), this.initialized = !0, this.debug && console.log("%c🚀 ATMX Debug Mode: Enabled", "color: #2563eb; font-weight: bold;"), console.log(`✅ ATMX v${this.version} Online (${t.initDurationMs}ms). Reactive Engine Started.`), document.dispatchEvent(new CustomEvent("atmx:ready", { detail: t }))) : (console.error("❌ ATMX Initialization Failed:", t.error), document.dispatchEvent(new CustomEvent("atmx:error", { detail: t.error }))), t;
|
|
726
786
|
}
|
|
727
787
|
hydrate(e) {
|
|
728
788
|
let t = document;
|
|
729
|
-
e && (t = typeof e == "string" ? document.querySelector(e) : e), t &&
|
|
789
|
+
e && (t = typeof e == "string" ? document.querySelector(e) : e), t && q(t);
|
|
730
790
|
}
|
|
731
791
|
triggerQuery(e) {
|
|
732
792
|
let t = typeof e == "string" ? document.querySelector(e) : e;
|
|
733
|
-
t && t instanceof HTMLElement && t.hasAttribute("ax-query") &&
|
|
793
|
+
t && t instanceof HTMLElement && t.hasAttribute("ax-query") && V(t);
|
|
734
794
|
}
|
|
735
795
|
on(e, t) {
|
|
736
796
|
document.addEventListener(`atmx:${e}`, t);
|
|
@@ -751,7 +811,7 @@ var q = "0.103.0", J = new class {
|
|
|
751
811
|
v(e, t);
|
|
752
812
|
}
|
|
753
813
|
connect(e) {
|
|
754
|
-
let t =
|
|
814
|
+
let t = B(null, e);
|
|
755
815
|
if (!t) return;
|
|
756
816
|
let n = a(t.target);
|
|
757
817
|
if (!n) return;
|
|
@@ -759,7 +819,7 @@ var q = "0.103.0", J = new class {
|
|
|
759
819
|
i || (i = new j(r, n, t.args), M.set(r, i)), i.fetch();
|
|
760
820
|
}
|
|
761
821
|
disconnect(e) {
|
|
762
|
-
let n =
|
|
822
|
+
let n = B(null, e);
|
|
763
823
|
if (!n) return;
|
|
764
824
|
let r = a(n.target);
|
|
765
825
|
if (!r) return;
|
|
@@ -767,14 +827,31 @@ var q = "0.103.0", J = new class {
|
|
|
767
827
|
o && (o.currentReqId && t.delete(o.currentReqId), M.delete(i), this.debug && console.log(`🔌 ATMX Disconnected Stream: ${e}`));
|
|
768
828
|
}
|
|
769
829
|
send(e, t) {
|
|
770
|
-
let n =
|
|
830
|
+
let n = B(null, e);
|
|
771
831
|
if (!n) return;
|
|
772
832
|
let r = a(n.target);
|
|
773
833
|
if (!r) return;
|
|
774
834
|
let i = `${r.namespace}:${r.id}:${JSON.stringify(n.args)}`, o = M.get(i);
|
|
775
835
|
o && o.currentReqId ? y(o.currentReqId, t) : console.warn(`ATMX: Cannot send message, stream not active for ${e}`);
|
|
776
836
|
}
|
|
837
|
+
mutate(e, t, n) {
|
|
838
|
+
return N(e, t, n);
|
|
839
|
+
}
|
|
840
|
+
invalidate(e, t) {
|
|
841
|
+
P(e, t);
|
|
842
|
+
}
|
|
843
|
+
setQueryData(e, t, n) {
|
|
844
|
+
F(e, t, n);
|
|
845
|
+
}
|
|
846
|
+
clearCache(e) {
|
|
847
|
+
I(e);
|
|
848
|
+
}
|
|
849
|
+
onError(e) {
|
|
850
|
+
document.addEventListener("atmx:error", (t) => {
|
|
851
|
+
e(t.detail);
|
|
852
|
+
});
|
|
853
|
+
}
|
|
777
854
|
}();
|
|
778
|
-
typeof window < "u" && (window.atmx =
|
|
855
|
+
typeof window < "u" && (window.atmx = Q);
|
|
779
856
|
//#endregion
|
|
780
|
-
export {
|
|
857
|
+
export { Z as ATMX_VERSION, f as allocBytes, p as allocString, Q as atmx, o as buildRequestPath, v as clearAuthToken, h as initWasm, t as pendingRequests, a as resolveRoute, y as sendStreamMessage, g as setAuthToken, b as setGlobalAuthToken, u as wasmEngine };
|
package/dist/atmx.umd.js
CHANGED
|
@@ -825,5 +825,5 @@
|
|
|
825
825
|
|
|
826
826
|
return Object.assign(__wbg_init, { initSync }, exports);
|
|
827
827
|
})({ __proto__: null });
|
|
828
|
-
`,d=null,f=`atmx_auth_store`;function p(e){if(e.length===0)return 0;let t=d.axiom_malloc(e.length);return new Uint8Array(d.memory.buffer).set(e,t),t}function m(e){if(!e)return{ptr:0,len:0};let t=new TextEncoder().encode(e);return{ptr:p(t),len:t.length}}function h(e){let t=`https://atmx.axiomcore.dev/${e.engineVersion||`v0.
|
|
829
|
-
`);for(let t of e)if(t.startsWith(n+`:`)){r=t.substring(n.length+1).trim();break}}r?(e.textContent=r,e.removeAttribute(`hidden`),e.style.removeProperty(`display`)):(e.setAttribute(`hidden`,``),e.style.setProperty(`display`,`none`,`important`))}Array.from(e.attributes).forEach(n=>{if(n.name.startsWith(`ax-bind:`)){let i=n.name.substring(8),a=S(n.value,t,r);a===!1||a==null?e.removeAttribute(i):e.setAttribute(i,a===!0?i:String(a))}}),Array.from(e.children).forEach(e=>{T(e,t,!1,r)})}}function E(e,t,n){e.style.display=`none`,e.hasAttribute(`data-ax-for-id`)||e.setAttribute(`data-ax-for-id`,Math.random().toString(36).substr(2,9));let r=e.getAttribute(`data-ax-for-id`),i=e.getAttribute(`ax-for`).match(/^\s*(?:(?:\(\s*([\w\$]+)\s*,\s*([\w\$]+)\s*\))|([\w\$]+))\s+in\s+(.+)$/);if(!i)return;let a=i[1]||i[3],o=i[2],s=i[4],c=S(s,t,n),l=e.parentElement;if(!l)return;let u=Array.from(l.querySelectorAll(`[data-ax-clone-of="${r}"]`));if(!c||!Array.isArray(c)){u.forEach(e=>e.remove());return}let d=e.getAttribute(`ax-key`),f=[];c.forEach((i,s)=>{let c={...n,[a]:i};o&&(c[o]=s);let p=String(s);d&&(p=String(S(d,t,c)));let m=u.find(e=>e.getAttribute(`data-ax-key`)===p);m||(m=e.cloneNode(!0),m.removeAttribute(`ax-for`),m.style.removeProperty(`display`),m.style.length===0&&m.removeAttribute(`style`),m.setAttribute(`data-ax-clone-of`,r),m.setAttribute(`data-ax-key`,p)),l.insertBefore(m,e),T(m,t,!0,c),f.push(m)}),u.forEach(e=>{f.includes(e)||e.remove()})}var D=new WeakMap;function O(e){return D.has(e)||D.set(e,{state:`idle`,isFetching:!1,isMutating:!1,source:null,data:null,error:null}),D.get(e)}function k(e){let t=e.parentElement;for(;t;){if(t.hasAttribute(`ax-query`)||t.hasAttribute(`ax-mutate`)){let e=D.get(t);if(e&&e.data)return e.data}t=t.parentElement}return{}}function A(e,t){let n=O(e);Object.assign(n,t),t.state===`loading`&&(n.isFetching=!0),t.state===`mutating`&&(n.isMutating=!0),(t.state===`success`||t.state===`data`&&t.isFetching===!1)&&(n.isFetching=!1,n.isMutating=!1),D.set(e,n),w(e,n)}var j=0,M=class{key;route;args;state;listeners=new Set;currentReqId=null;constructor(e,t,n){this.key=e,this.route=t,this.args=n;let r=null;try{let t=sessionStorage.getItem(`atmx_cache_${e}`);t&&(r=JSON.parse(t))}catch{}r?this.state={state:`data`,isFetching:!1,source:`cache`,data:r,error:null}:this.state={state:`idle`,isFetching:!1,source:null,data:null,error:null}}subscribe(e){this.listeners.add(e),e(this.state)}update(e){if(this.state={...this.state,...e},this.state.data)try{sessionStorage.setItem(`atmx_cache_${this.key}`,JSON.stringify(this.state.data))}catch{}this.listeners.forEach(e=>e(this.state))}fetch(e=!1){if(this.state.isFetching&&!e)return;this.update({state:this.state.data?`data`:`loading`,isFetching:!0,error:null});let r=++j;this.currentReqId=r;let{path:i,remainingArgs:a}=s(this.route,this.args),o=new Uint8Array;Object.keys(a).length>0&&(o=new TextEncoder().encode(JSON.stringify(a))),Y.debug&&(console.groupCollapsed(`%c➔ WASM QUERY [#${r}]`,`color: #7c3aed; font-weight: bold;`),console.log(`Namespace:`,this.route.namespace),console.log(`Endpoint ID:`,this.route.id),console.log(`Path:`,i),console.groupEnd()),n.set(r,{isStream:this.route.isStream,onResponse:e=>{if(this.currentReqId===r){if(e.eventType===t.Error){this.update({state:`error`,error:e.error,isFetching:!1});return}if(e.data){let n=`network`,r=!1;e.eventType===t.CacheHit?(n=`cache`,r=!1):e.eventType===t.CacheHitAndFetching?(n=`cache`,r=!0):e.eventType===t.NetworkSuccess&&(n=`network`,r=!1),this.update({state:`data`,data:e.data,source:n,isFetching:r})}}},onComplete:()=>{this.currentReqId===r&&this.update({isFetching:!1})}});let c=m(this.route.namespace),l=m(this.route.method),u=m(i),f=p(o),h=m(``),g=m(``);d.axiom_wasm_call(r,c.ptr,c.len,this.route.id,l.ptr,l.len,u.ptr,u.len,h.ptr,h.len,g.ptr,g.len,f,o.length),d.axiom_free_memory(c.ptr,c.len),d.axiom_free_memory(l.ptr,l.len),d.axiom_free_memory(u.ptr,u.len),d.axiom_free_memory(h.ptr,h.len),d.axiom_free_memory(g.ptr,g.len)}},N=new Map,P=0;function F(e,t){let n=`ax-on:${t}`;e.hasAttribute(n)&&C(e.getAttribute(n),O(e))}function I(e,t,n){if(!Y.debug)return;let r=e===`OUT`?`#7c3aed`:`#059669`;console.groupCollapsed(`%c${e===`OUT`?`➔ WASM CALL`:`← WASM RESP`} [#${t}]`,`color: ${r}; font-weight: bold;`),console.log(`Details:`,n),console.groupEnd()}function L(e,t){let n=t.trim().match(/^([\w\.\-]+)(?:\((.*)\))?$/);if(!n)return null;let r=n[1],i={};if(n[2]&&n[2].trim()!==``)try{if(e){let t=O(e),r=t.data||k(e);i=Function(`$data`,`$state`,`return (${n[2]});`)(r??null,t)||{}}else i=Function(`return (${n[2]});`)()||{}}catch(e){console.error(`ATMX Scope Error in "${t}":`,e)}return{target:r,args:i}}function R(e){let t=e.getAttribute(`ax-query`);if(!t)return;let n=L(e,t);if(!n)return;let r=o(n.target);if(!r){A(e,{state:`error`,error:{message:`Route not found: ${n.target}`}});return}let i=`${n.target}:${JSON.stringify(n.args)}`,a=N.get(i);a||(a=new M(i,r,n.args),N.set(i,a)),e._axListener||(e._axListener=t=>{A(e,t),(t.state===`data`||t.state===`error`)&&(F(e,t.state),e.dispatchEvent(new CustomEvent(`atmx:${t.state}`,{bubbles:!0,detail:t.data||t.error})))},a.subscribe(e._axListener)),a.fetch()}function z(e){let t=e.getAttribute(`ax-mutate`);if(!t)return;let n=L(e,t);if(!n)return;let r=o(n.target);if(!r){A(e,{state:`error`,error:{message:`Route not found: ${n.target}`}}),F(e,`error`);return}A(e,{state:`mutating`,error:null,data:null}),F(e,`mutating`);let i={};e instanceof HTMLFormElement&&new FormData(e).forEach((t,n)=>{let r=e.elements.namedItem(n),a=!1;r instanceof HTMLInputElement?a=r.type===`number`:r instanceof RadioNodeList&&r.length>0&&(a=r[0].type===`number`);let o=a&&t!==``?Number(t):t;if(n.includes(`.`)){let e=n.split(`.`),t=i;for(let n=0;n<e.length-1;n++)t[e[n]]||(t[e[n]]={}),t=t[e[n]];t[e[e.length-1]]=o}else i[n]=o});let{path:a,remainingArgs:c}=s(r,{...i,...n.args}),l=c;r.bodyParam&&c[r.bodyParam]!==void 0&&typeof c[r.bodyParam]==`object`&&(l=c[r.bodyParam]);let u={},d=e.getAttribute(`ax-headers`);if(d)try{u=Function(`return (`+d+`);`)()||{}}catch(e){console.error(`ATMX: Invalid ax-headers syntax`,e)}let f=Object.entries(u).some(([e,t])=>e.toLowerCase()===`content-type`&&t.includes(`application/x-www-form-urlencoded`)),p=new Uint8Array;if(Object.keys(l).length>0)if(f){let e=new URLSearchParams;for(let[t,n]of Object.entries(l))e.append(t,String(n));p=new TextEncoder().encode(e.toString())}else p=new TextEncoder().encode(JSON.stringify(l));B(e,r.namespace,r.id,r.method,a,p,r.isStream,!0,u,f)}function B(e,t,r,i,a,o,s,c,l={},u=!1){let f=++P;I(`OUT`,f,{namespace:t,endpointId:r,method:i,path:a,headers:l,payload:o.length>0?u?new TextDecoder().decode(o):JSON.parse(new TextDecoder().decode(o)):null}),n.set(f,{isStream:s,onResponse:t=>V(e,t,c,f),onComplete:()=>{Y.debug&&console.log(`%c✔ Stream Complete [#${f}]`,`color: #94a3b8;`)}});let h=m(t),g=m(i),_=m(a),v=m(``),y=m(Object.keys(l).length>0?JSON.stringify(l):``),b=p(o);d.axiom_wasm_call(f,h.ptr,h.len,r,g.ptr,g.len,_.ptr,_.len,v.ptr,v.len,y.ptr,y.len,b,o.length),d.axiom_free_memory(h.ptr,h.len),d.axiom_free_memory(g.ptr,g.len),d.axiom_free_memory(_.ptr,_.len),d.axiom_free_memory(v.ptr,v.len),d.axiom_free_memory(y.ptr,y.len),b&&d.axiom_free_memory(b,o.length)}function V(e,n,r,i){if(I(`IN`,i,{eventType:t[n.eventType],data:n.data,error:n.error}),n.eventType===t.Error){A(e,{state:`error`,error:n.error,isFetching:!1,isMutating:!1}),F(e,`error`),e.dispatchEvent(new CustomEvent(`atmx:error`,{bubbles:!0,detail:n.error}));return}if(n.data){let i=`network`,a=!1;n.eventType===t.CacheHit?i=`cache`:n.eventType===t.CacheHitAndFetching?(i=`cache`,a=!0):n.eventType===t.NetworkSuccess&&(i=`network`);let s=r?`success`:`data`;if(A(e,{state:s,data:n.data,source:i,isFetching:a,isMutating:!1}),r){let t=e.getAttribute(`ax-store-token`);if(t){let n=S(t,O(e));if(n){let t=o(L(e,e.getAttribute(`ax-mutate`)).target)?.namespace||`default`,r=e.getAttribute(`ax-token-target`);(r?r.split(`,`).map(e=>e.trim()):[t]).forEach(e=>{Y.setNamespaceAuthToken(e,n)})}}}F(e,s),e.dispatchEvent(new CustomEvent(r?`atmx:success`:`atmx:data`,{bubbles:!0,detail:n.data}))}}var H=new IntersectionObserver(e=>{e.forEach(e=>{if(e.isIntersecting){let t=e.target;t.hasAttribute(`ax-query`)&&R(t),H.unobserve(t)}})});function U(e){e.querySelectorAll(`[\\:ax-query], [\\:ax-mutate]`).forEach(e=>{if(e.hasAttribute(`:ax-query`)){let t=S(e.getAttribute(`:ax-query`),O(e));t&&e.setAttribute(`ax-query`,String(t)),e.removeAttribute(`:ax-query`)}if(e.hasAttribute(`:ax-mutate`)){let t=S(e.getAttribute(`:ax-mutate`),O(e));t&&e.setAttribute(`ax-mutate`,String(t)),e.removeAttribute(`:ax-mutate`)}})}function W(e=document){U(e),e.querySelectorAll(`[ax-query]`).forEach(e=>{let t=e,n=t.getAttribute(`ax-query`);if(!n)return;let r=L(t,n);if(r){let e=`${r.target}:${JSON.stringify(r.args)}`;try{let n=sessionStorage.getItem(`atmx_cache_${e}`);n&&A(t,{state:`data`,data:JSON.parse(n),source:`cache`,isFetching:!0})}catch{}}})}function G(e=document){U(e),e.querySelectorAll(`[ax-query]`).forEach(e=>{let t=e;A(t,{});let n=t.getAttribute(`ax-trigger`)||`load`;n===`load`?R(t):n===`intersect`?H.observe(t):t.addEventListener(n,e=>{e.preventDefault(),R(t)})}),e.querySelectorAll(`[ax-mutate]`).forEach(e=>{let t=e;A(t,{});let n=t.tagName===`FORM`?`submit`:`click`;t.addEventListener(n,e=>{(t.tagName===`A`||t.tagName===`BUTTON`||t.tagName===`FORM`)&&e.preventDefault(),z(t)})}),e.querySelectorAll(`[ax-trigger="refresh"]`).forEach(e=>{let t=e;t.addEventListener(`click`,e=>{e.preventDefault();let n=t.closest(`[ax-query]`);if(n){let e=L(n,n.getAttribute(`ax-query`));if(e&&o(e.target)){let t=`${e.target}:${JSON.stringify(e.args)}`,r=N.get(t);r?r.fetch(!0):R(n)}}})})}function K(){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e instanceof HTMLElement&&G(e)})})}).observe(document.body,{childList:!0,subtree:!0})}var q=class extends HTMLElement{constructor(){super()}connectedCallback(){let e=this.getAttribute(`loading-text`)||`Initializing...`,t=this.getAttribute(`ready-text`)||`Online`,n=this.getAttribute(`error-text`)||`Failed to Connect`;this.renderState(`loading`,e,`text-amber-500 animate-pulse`),document.addEventListener(`atmx:ready`,()=>{this.renderState(`ready`,t,`text-green-600`)}),document.addEventListener(`atmx:error`,e=>{let t=e;t.detail&&t.detail.stage===`runtime`&&this.renderState(`error`,`${n}: ${t.detail.message}`,`text-red-600`)})}renderState(e,t,n){this.setAttribute(`data-state`,e);let r=this.querySelectorAll(`[data-ax-when]`);r.length>0?r.forEach(t=>{t.getAttribute(`data-ax-when`)===e?t.removeAttribute(`hidden`):t.setAttribute(`hidden`,``)}):(this.innerText=t,this.getAttribute(`class`)||(this.className=`text-xs font-bold ${n}`))}};typeof window<`u`&&!customElements.get(`ax-engine-status`)&&customElements.define(`ax-engine-status`,q);var J=`0.103.0`,Y=new class{version=J;initialized=!1;debug=!1;async init(e){if(this.initialized)return{ok:!0,contracts:{},initDurationMs:0};let t=await g(e);return t.ok?(this.debug=e.debug||!1,K(),G(document.body),this.initialized=!0,this.debug&&console.log(`%c🚀 ATMX Debug Mode: Enabled`,`color: #2563eb; font-weight: bold;`),console.log(`✅ ATMX v${this.version} Online (${t.initDurationMs}ms). Reactive Engine Started.`),document.dispatchEvent(new CustomEvent(`atmx:ready`,{detail:t}))):(console.error(`❌ ATMX Initialization Failed:`,t.error),document.dispatchEvent(new CustomEvent(`atmx:error`,{detail:t.error}))),t}hydrate(e){let t=document;e&&(t=typeof e==`string`?document.querySelector(e):e),t&&W(t)}triggerQuery(e){let t=typeof e==`string`?document.querySelector(e):e;t&&t instanceof HTMLElement&&t.hasAttribute(`ax-query`)&&R(t)}on(e,t){document.addEventListener(`atmx:${e}`,t)}setAuthToken(e,t,n){_(e,t,n)}setNamespaceAuthToken(e,t,n=!0){v(e,t,n)}setGlobalAuthToken(e){x(e)}sendStreamMessage(e,t){b(e,t)}clearAuthToken(e,t){y(e,t)}connect(e){let t=L(null,e);if(!t)return;let n=o(t.target);if(!n)return;let r=`${n.namespace}:${n.id}:${JSON.stringify(t.args)}`,i=N.get(r);i||(i=new M(r,n,t.args),N.set(r,i)),i.fetch()}disconnect(e){let t=L(null,e);if(!t)return;let r=o(t.target);if(!r)return;let i=`${r.namespace}:${r.id}:${JSON.stringify(t.args)}`,a=N.get(i);a&&(a.currentReqId&&n.delete(a.currentReqId),N.delete(i),this.debug&&console.log(`🔌 ATMX Disconnected Stream: ${e}`))}send(e,t){let n=L(null,e);if(!n)return;let r=o(n.target);if(!r)return;let i=`${r.namespace}:${r.id}:${JSON.stringify(n.args)}`,a=N.get(i);a&&a.currentReqId?b(a.currentReqId,t):console.warn(`ATMX: Cannot send message, stream not active for ${e}`)}};typeof window<`u`&&(window.atmx=Y),e.ATMX_VERSION=J,e.allocBytes=p,e.allocString=m,e.atmx=Y,e.buildRequestPath=s,e.clearAuthToken=y,e.initWasm=g,e.pendingRequests=n,e.resolveRoute=o,e.sendStreamMessage=b,e.setAuthToken=_,e.setGlobalAuthToken=x,Object.defineProperty(e,`wasmEngine`,{enumerable:!0,get:function(){return d}})});
|
|
828
|
+
`,d=null,f=`atmx_auth_store`;function p(e){if(e.length===0)return 0;let t=d.axiom_malloc(e.length);return new Uint8Array(d.memory.buffer).set(e,t),t}function m(e){if(!e)return{ptr:0,len:0};let t=new TextEncoder().encode(e);return{ptr:p(t),len:t.length}}function h(e){let t=`https://atmx.axiomcore.dev/${e.engineVersion||`v0.106.0`}/axiom_runtime.wasm`;return e.disableCacheBuster||(t+=`?t=${Date.now()}`),t}async function g(e){let t=performance.now(),n={ok:!1,contracts:{},initDurationMs:0};try{if(!window.wasm_bindgen){let e=document.createElement(`script`);e.type=`text/javascript`,e.text=`${u}\nwindow.wasm_bindgen = wasm_bindgen;`,document.head.appendChild(e)}let t=window.wasm_bindgen,i=h(e);try{d=await t(fetch(i))}catch(e){throw{stage:`ffiBoundary`,category:`network`,code:`WasmFetchFailed`,message:`Failed to download WASM engine: ${e.message}`,retryable:!0}}r(d),setInterval(()=>{d&&d.axiom_process_responses()},16);let o=m(``),s=d.axiom_wasm_initialize(o.ptr,o.len);if(d.axiom_free_memory(o.ptr,o.len),s!==0)throw{stage:`runtime`,category:`server`,code:`InitFailed`,message:`Engine init failed (Code: ${s})`,retryable:!1};try{let e=JSON.parse(localStorage.getItem(f)||`{}`);for(let[t,n]of Object.entries(e))for(let[e,r]of Object.entries(n))_(t,e,r,!1)}catch(e){console.warn(`ATMX: Failed to hydrate auth tokens`,e)}for(let[t,r]of Object.entries(e.contracts))try{let i=await fetch(r.contractUrl);if(!i.ok)throw Error(`HTTP ${i.status}`);let o=await i.arrayBuffer(),s=0;try{let e=new TextDecoder().decode(o),n=JSON.parse(e),r=n?.ir?.endpoints;r&&(s=Array.isArray(r)?r.length:Object.keys(r).length),a(t,n)}catch(e){console.error(`ATMX: Failed to parse .axiom contract for '${t}'`,e)}let c=new Uint8Array(o),l=p(c),u=m(t),f=m(r.baseUrl),h=d.axiom_wasm_load_contract(u.ptr,u.len,f.ptr,f.len,l,c.length,0,0,0,0);if(d.axiom_free_memory(l,c.length),d.axiom_free_memory(u.ptr,u.len),d.axiom_free_memory(f.ptr,f.len),h!==0&&h!==-1)throw Error(`Load error (Code: ${h})`);e.debug&&console.log(`%c🔒 Axiom Contract Loaded: ${t} (${s} endpoints)`,`color: #10b981; font-weight: bold;`),n.contracts[t]={loaded:!0,endpointCount:s},document.dispatchEvent(new CustomEvent(`atmx:contract-loaded`,{detail:{namespace:t,endpointCount:s}}))}catch(e){n.contracts[t]={loaded:!1,endpointCount:0,error:e.message},console.error(`ATMX: Contract failed for ${t}`,e)}n.ok=!0}catch(e){n.ok=!1,n.error=e.stage?e:{stage:`runtime`,category:`unknown`,code:`FatalError`,message:e.message||String(e),retryable:!1}}return n.initDurationMs=Math.round(performance.now()-t),n}function _(e,t,n,r=!0){if(!d)return;if(r)try{let r=JSON.parse(localStorage.getItem(f)||`{}`);r[e]||(r[e]={}),r[e][t]=n,localStorage.setItem(f,JSON.stringify(r))}catch{}let i=m(e),a=m(t),o=m(n);d.axiom_wasm_set_auth_token(i.ptr,i.len,a.ptr,a.len,o.ptr,o.len),d.axiom_free_memory(i.ptr,i.len),d.axiom_free_memory(a.ptr,a.len),d.axiom_free_memory(o.ptr,o.len)}function v(e,t,n=!0){if(!d)return;let r=l(e),i=n?JSON.parse(localStorage.getItem(f)||`{}`):{};n&&!i[e]&&(i[e]={});for(let a of r){let r=m(a.namespace),o=m(a.name),s=m(t);d.axiom_wasm_set_auth_token(r.ptr,r.len,o.ptr,o.len,s.ptr,s.len),d.axiom_free_memory(r.ptr,r.len),d.axiom_free_memory(o.ptr,o.len),d.axiom_free_memory(s.ptr,s.len),n&&(i[e][a.name]=t)}n&&localStorage.setItem(f,JSON.stringify(i))}function y(e,t){if(!d)return;try{let n=JSON.parse(localStorage.getItem(f)||`{}`);n[e]&&(delete n[e][t],localStorage.setItem(f,JSON.stringify(n)))}catch{}let n=m(e),r=m(t);d.axiom_wasm_clear_auth_token(n.ptr,n.len,r.ptr,r.len),d.axiom_free_memory(n.ptr,n.len),d.axiom_free_memory(r.ptr,r.len)}function b(e,t){if(!d)return;let n=new TextEncoder().encode(JSON.stringify(t)),r=p(n);d.axiom_wasm_send_stream_message(e,r,n.length),d.axiom_free_memory(r,n.length)}function x(e,t=!0){if(!d)return;let n=c(),r=t?JSON.parse(localStorage.getItem(f)||`{}`):{};for(let i of n){let n=m(i.namespace),a=m(i.name),o=m(e);d.axiom_wasm_set_auth_token(n.ptr,n.len,a.ptr,a.len,o.ptr,o.len),d.axiom_free_memory(n.ptr,n.len),d.axiom_free_memory(a.ptr,a.len),d.axiom_free_memory(o.ptr,o.len),t&&(r[i.namespace]||(r[i.namespace]={}),r[i.namespace][i.name]=e)}t&&localStorage.setItem(f,JSON.stringify(r))}function S(e,t,n={}){if(e)try{let r=Object.keys(n),i=Object.values(n);return Function(`$data`,`$error`,`$state`,...r,`return (${e});`)(t.data??null,t.error??null,t,...i)}catch(t){console.error(`ATMX Eval Error: ${e}`,t);return}}function C(e,t,n={}){if(e)try{let r=Object.keys(n),i=Object.values(n);Function(`$data`,`$error`,`$state`,...r,e)(t.data??null,t.error??null,t,...i)}catch(t){console.error(`ATMX Action Error: ${e}`,t)}}function w(e,t){T(e,t,!0,{})}function T(e,t,n,r){if(!(!n&&(e.hasAttribute(`ax-query`)||e.hasAttribute(`ax-mutate`)))&&!(!n&&e.hasAttribute(`data-ax-clone-of`))){if(e.hasAttribute(`ax-for`)){E(e,t,r);return}if(e.hasAttribute(`ax-when`)&&(e.getAttribute(`ax-when`).split(`,`).map(e=>e.trim()).includes(t.state)?(e.removeAttribute(`hidden`),e.style.removeProperty(`display`)):(e.setAttribute(`hidden`,`true`),e.style.setProperty(`display`,`none`,`important`))),e.hasAttribute(`ax-if`)&&(S(e.getAttribute(`ax-if`),t,r)?(e.removeAttribute(`hidden`),e.style.removeProperty(`display`)):(e.setAttribute(`hidden`,``),e.style.setProperty(`display`,`none`,`important`))),e.hasAttribute(`ax-text`)){let n=S(e.getAttribute(`ax-text`),t,r);e.textContent=n==null?``:String(n)}if(e.hasAttribute(`ax-error-for`)){let n=e.getAttribute(`ax-error-for`),r=``;if(t.state===`error`&&t.error?.code===`ValidationError`){let e=(t.error.details||``).split(`
|
|
829
|
+
`);for(let t of e)if(t.startsWith(n+`:`)){r=t.substring(n.length+1).trim();break}}let i=e.parentElement?.querySelector(`[name="${n}"]`);r?(e.textContent=r,e.removeAttribute(`hidden`),e.style.removeProperty(`display`),i&&(i.setAttribute(`aria-invalid`,`true`),i.classList.add(`border-red-500`,`focus:border-red-500`,`focus:ring-red-500`))):(e.setAttribute(`hidden`,``),e.style.setProperty(`display`,`none`,`important`),e.textContent=``,i&&(i.removeAttribute(`aria-invalid`),i.classList.remove(`border-red-500`,`focus:border-red-500`,`focus:ring-red-500`)))}Array.from(e.attributes).forEach(n=>{if(n.name.startsWith(`ax-bind:`)){let i=n.name.substring(8),a=S(n.value,t,r);a===!1||a==null?e.removeAttribute(i):e.setAttribute(i,a===!0?i:String(a))}}),Array.from(e.children).forEach(e=>{T(e,t,!1,r)})}}function E(e,t,n){e.style.display=`none`,e.hasAttribute(`data-ax-for-id`)||e.setAttribute(`data-ax-for-id`,Math.random().toString(36).substr(2,9));let r=e.getAttribute(`data-ax-for-id`),i=e.getAttribute(`ax-for`).match(/^\s*(?:(?:\(\s*([\w\$]+)\s*,\s*([\w\$]+)\s*\))|([\w\$]+))\s+in\s+(.+)$/);if(!i)return;let a=i[1]||i[3],o=i[2],s=i[4],c=S(s,t,n),l=e.parentElement;if(!l)return;let u=Array.from(l.querySelectorAll(`[data-ax-clone-of="${r}"]`));if(!c||!Array.isArray(c)){u.forEach(e=>e.remove());return}let d=e.getAttribute(`ax-key`),f=[];c.forEach((i,s)=>{let c={...n,[a]:i};o&&(c[o]=s);let p=String(s);d&&(p=String(S(d,t,c)));let m=u.find(e=>e.getAttribute(`data-ax-key`)===p);m||(m=e.cloneNode(!0),m.removeAttribute(`ax-for`),m.style.removeProperty(`display`),m.style.length===0&&m.removeAttribute(`style`),m.setAttribute(`data-ax-clone-of`,r),m.setAttribute(`data-ax-key`,p)),l.insertBefore(m,e),T(m,t,!0,c),f.push(m)}),u.forEach(e=>{f.includes(e)||e.remove()})}var D=new WeakMap;function O(e){return D.has(e)||D.set(e,{state:`idle`,isFetching:!1,isMutating:!1,source:null,data:null,error:null}),D.get(e)}function k(e){let t=e.parentElement;for(;t;){if(t.hasAttribute(`ax-query`)||t.hasAttribute(`ax-mutate`)){let e=D.get(t);if(e&&e.data)return e.data}t=t.parentElement}return{}}function A(e,t){let n=O(e);Object.assign(n,t),t.state===`loading`&&(n.isFetching=!0),t.state===`mutating`&&(n.isMutating=!0),(t.state===`success`||t.state===`data`&&t.isFetching===!1)&&(n.isFetching=!1,n.isMutating=!1),D.set(e,n),w(e,n)}var j=0,M=class{key;route;args;state;listeners=new Set;currentReqId=null;constructor(e,t,n){this.key=e,this.route=t,this.args=n;let r=null;try{let t=sessionStorage.getItem(`atmx_cache_${e}`);t&&(r=JSON.parse(t))}catch{}r?this.state={state:`data`,isFetching:!1,source:`cache`,data:r,error:null}:this.state={state:`idle`,isFetching:!1,source:null,data:null,error:null}}subscribe(e){this.listeners.add(e),e(this.state)}update(e){if(this.state={...this.state,...e},this.state.data)try{sessionStorage.setItem(`atmx_cache_${this.key}`,JSON.stringify(this.state.data))}catch{}this.listeners.forEach(e=>e(this.state))}fetch(e=!1){if(this.state.isFetching&&!e)return;this.update({state:this.state.data?`data`:`loading`,isFetching:!0,error:null});let r=++j;this.currentReqId=r;let{path:i,remainingArgs:a}=s(this.route,this.args),o=new Uint8Array;Object.keys(a).length>0&&(o=new TextEncoder().encode(JSON.stringify(a))),$.debug&&(console.groupCollapsed(`%c➔ WASM QUERY [#${r}]`,`color: #7c3aed; font-weight: bold;`),console.log(`Namespace:`,this.route.namespace),console.log(`Endpoint ID:`,this.route.id),console.log(`Path:`,i),console.groupEnd()),n.set(r,{isStream:this.route.isStream,onResponse:e=>{if(this.currentReqId===r){if(e.eventType===t.Error){this.update({state:`error`,error:e.error,isFetching:!1});return}if(e.data){let n=`network`,r=!1;e.eventType===t.CacheHit?(n=`cache`,r=!1):e.eventType===t.CacheHitAndFetching?(n=`cache`,r=!0):e.eventType===t.NetworkSuccess&&(n=`network`,r=!1),this.update({state:`data`,data:e.data,source:n,isFetching:r})}}},onComplete:()=>{this.currentReqId===r&&this.update({isFetching:!1})}});let c=m(this.route.namespace),l=m(this.route.method),u=m(i),f=p(o),h=m(``),g=m(``);d.axiom_wasm_call(r,c.ptr,c.len,this.route.id,l.ptr,l.len,u.ptr,u.len,h.ptr,h.len,g.ptr,g.len,f,o.length),d.axiom_free_memory(c.ptr,c.len),d.axiom_free_memory(l.ptr,l.len),d.axiom_free_memory(u.ptr,u.len),d.axiom_free_memory(h.ptr,h.len),d.axiom_free_memory(g.ptr,g.len)}},N=new Map;function P(e,r={},i={}){return new Promise((a,c)=>{let l=o(e);if(!l)return c(Error(`ATMX Route not found: ${e}`));let u=++j,{path:f,remainingArgs:h}=s(l,{...r,...i}),g=h;l.bodyParam&&h[l.bodyParam]!==void 0&&typeof h[l.bodyParam]==`object`&&(g=h[l.bodyParam]);let _=new Uint8Array;Object.keys(g).length>0&&(_=new TextEncoder().encode(JSON.stringify(g))),n.set(u,{isStream:l.isStream,onResponse:e=>{e.eventType===t.Error?(document.dispatchEvent(new CustomEvent(`atmx:error`,{detail:e.error})),c(e.error)):e.data&&a(e.data)},onComplete:()=>{}});let v=m(l.namespace),y=m(l.method),b=m(f),x=m(``),S=m(``),C=p(_);d.axiom_wasm_call(u,v.ptr,v.len,l.id,y.ptr,y.len,b.ptr,b.len,x.ptr,x.len,S.ptr,S.len,C,_.length),d.axiom_free_memory(v.ptr,v.len),d.axiom_free_memory(y.ptr,y.len),d.axiom_free_memory(b.ptr,b.len),d.axiom_free_memory(x.ptr,x.len),d.axiom_free_memory(S.ptr,S.len),C&&d.axiom_free_memory(C,_.length)})}function F(e,t){let[n,r]=e.split(`.`),i=`atmx_cache_${e}`;t&&Object.keys(t).length>0&&(i+=`:${JSON.stringify(t)}`),Object.keys(sessionStorage).forEach(e=>{(e===i||!t&&e.startsWith(i+`:`))&&sessionStorage.removeItem(e)}),N.forEach((e,i)=>{e.route.namespace===n&&e.route.name===r&&(!t||Object.keys(t).length===0||JSON.stringify(e.args)===JSON.stringify(t))&&e.fetch(!0)})}function I(e,t={},n){let r=`${e}:${JSON.stringify(t)}`;try{sessionStorage.setItem(`atmx_cache_${r}`,JSON.stringify(n))}catch{}let i=N.get(r);i&&i.update({state:`data`,source:`cache`,isFetching:!1,data:n,error:null})}function L(e){let t=e?`atmx_cache_${e}.`:`atmx_cache_`;Object.keys(sessionStorage).forEach(e=>{e.startsWith(t)&&sessionStorage.removeItem(e)}),N.forEach(t=>{(!e||t.route.namespace===e)&&t.fetch(!0)})}var R=0;function z(e,t){let n=`ax-on:${t}`;e.hasAttribute(n)&&C(e.getAttribute(n),O(e))}function B(e,t,n){if(!$.debug)return;let r=e===`OUT`?`#7c3aed`:`#059669`;console.groupCollapsed(`%c${e===`OUT`?`➔ WASM CALL`:`← WASM RESP`} [#${t}]`,`color: ${r}; font-weight: bold;`),console.log(`Details:`,n),console.groupEnd()}function V(e,t){let n=t.trim().match(/^([\w\.\-]+)(?:\((.*)\))?$/);if(!n)return null;let r=n[1],i={};if(n[2]&&n[2].trim()!==``)try{if(e){let t=O(e),r=t.data||k(e);i=Function(`$data`,`$state`,`return (${n[2]});`)(r??null,t)||{}}else i=Function(`return (${n[2]});`)()||{}}catch(e){console.error(`ATMX Scope Error in "${t}":`,e)}return{target:r,args:i}}function H(e){let t=e.getAttribute(`ax-query`);if(!t)return;let n=V(e,t);if(!n)return;let r=o(n.target);if(!r){A(e,{state:`error`,error:{message:`Route not found: ${n.target}`}});return}let i=`${n.target}:${JSON.stringify(n.args)}`,a=N.get(i);a||(a=new M(i,r,n.args),N.set(i,a)),e._axListener||(e._axListener=t=>{A(e,t),(t.state===`data`||t.state===`error`)&&(z(e,t.state),e.dispatchEvent(new CustomEvent(`atmx:${t.state}`,{bubbles:!0,detail:t.data||t.error})))},a.subscribe(e._axListener)),a.fetch()}function U(e){let t=e.getAttribute(`ax-mutate`);if(!t)return;let n=V(e,t);if(!n)return;let r=o(n.target);if(!r){A(e,{state:`error`,error:{message:`Route not found: ${n.target}`}}),z(e,`error`);return}A(e,{state:`mutating`,error:null,data:null}),z(e,`mutating`);let i={};e instanceof HTMLFormElement&&new FormData(e).forEach((t,n)=>{let r=e.elements.namedItem(n),a=!1;r instanceof HTMLInputElement?a=r.type===`number`:r instanceof RadioNodeList&&r.length>0&&(a=r[0].type===`number`);let o=a&&t!==``?Number(t):t;if(n.includes(`.`)){let e=n.split(`.`),t=i;for(let n=0;n<e.length-1;n++)t[e[n]]||(t[e[n]]={}),t=t[e[n]];t[e[e.length-1]]=o}else i[n]=o});let{path:a,remainingArgs:c}=s(r,{...i,...n.args}),l=c;r.bodyParam&&c[r.bodyParam]!==void 0&&typeof c[r.bodyParam]==`object`&&(l=c[r.bodyParam]);let u={},d=e.getAttribute(`ax-headers`);if(d)try{u=Function(`return (`+d+`);`)()||{}}catch(e){console.error(`ATMX: Invalid ax-headers syntax`,e)}let f=Object.entries(u).some(([e,t])=>e.toLowerCase()===`content-type`&&t.includes(`application/x-www-form-urlencoded`)),p=new Uint8Array;if(Object.keys(l).length>0)if(f){let e=new URLSearchParams;for(let[t,n]of Object.entries(l))e.append(t,String(n));p=new TextEncoder().encode(e.toString())}else p=new TextEncoder().encode(JSON.stringify(l));W(e,r.namespace,r.id,r.method,a,p,r.isStream,!0,u,f)}function W(e,t,r,i,a,o,s,c,l={},u=!1){let f=++R;B(`OUT`,f,{namespace:t,endpointId:r,method:i,path:a,headers:l,payload:o.length>0?u?new TextDecoder().decode(o):JSON.parse(new TextDecoder().decode(o)):null}),n.set(f,{isStream:s,onResponse:t=>G(e,t,c,f),onComplete:()=>{$.debug&&console.log(`%c✔ Stream Complete [#${f}]`,`color: #94a3b8;`)}});let h=m(t),g=m(i),_=m(a),v=m(``),y=m(Object.keys(l).length>0?JSON.stringify(l):``),b=p(o);d.axiom_wasm_call(f,h.ptr,h.len,r,g.ptr,g.len,_.ptr,_.len,v.ptr,v.len,y.ptr,y.len,b,o.length),d.axiom_free_memory(h.ptr,h.len),d.axiom_free_memory(g.ptr,g.len),d.axiom_free_memory(_.ptr,_.len),d.axiom_free_memory(v.ptr,v.len),d.axiom_free_memory(y.ptr,y.len),b&&d.axiom_free_memory(b,o.length)}function G(e,n,r,i){if(B(`IN`,i,{eventType:t[n.eventType],data:n.data,error:n.error}),n.eventType===t.Error){A(e,{state:`error`,error:n.error,isFetching:!1,isMutating:!1}),z(e,`error`),e.dispatchEvent(new CustomEvent(`atmx:error`,{bubbles:!0,detail:n.error}));return}if(n.data){let i=`network`,a=!1;n.eventType===t.CacheHit?i=`cache`:n.eventType===t.CacheHitAndFetching?(i=`cache`,a=!0):n.eventType===t.NetworkSuccess&&(i=`network`);let s=r?`success`:`data`;if(A(e,{state:s,data:n.data,source:i,isFetching:a,isMutating:!1}),r){let t=e.getAttribute(`ax-invalidates`);t&&t.split(`,`).map(e=>e.trim()).forEach(t=>{let n=S(`\`${t}\``,O(e))||t;$.invalidate(n)});let n=e.getAttribute(`ax-store-token`);if(n){let t=S(n,O(e));if(t){let n=o(V(e,e.getAttribute(`ax-mutate`)).target)?.namespace||`default`,r=e.getAttribute(`ax-token-target`);(r?r.split(`,`).map(e=>e.trim()):[n]).forEach(e=>{$.setNamespaceAuthToken(e,t)})}}}z(e,s),e.dispatchEvent(new CustomEvent(r?`atmx:success`:`atmx:data`,{bubbles:!0,detail:n.data}))}}var K=new IntersectionObserver(e=>{e.forEach(e=>{if(e.isIntersecting){let t=e.target;t.hasAttribute(`ax-query`)&&H(t),K.unobserve(t)}})});function q(e){e.querySelectorAll(`[\\:ax-query], [\\:ax-mutate]`).forEach(e=>{if(e.hasAttribute(`:ax-query`)){let t=S(e.getAttribute(`:ax-query`),O(e));t&&e.setAttribute(`ax-query`,String(t)),e.removeAttribute(`:ax-query`)}if(e.hasAttribute(`:ax-mutate`)){let t=S(e.getAttribute(`:ax-mutate`),O(e));t&&e.setAttribute(`ax-mutate`,String(t)),e.removeAttribute(`:ax-mutate`)}})}function J(e=document){q(e),e.querySelectorAll(`[ax-query]`).forEach(e=>{let t=e,n=t.getAttribute(`ax-query`);if(!n)return;let r=V(t,n);if(r){let e=`${r.target}:${JSON.stringify(r.args)}`;try{let n=sessionStorage.getItem(`atmx_cache_${e}`);n&&A(t,{state:`data`,data:JSON.parse(n),source:`cache`,isFetching:!0})}catch{}}})}function Y(e=document){q(e),e.querySelectorAll(`[ax-query]`).forEach(e=>{let t=e;A(t,{});let n=t.getAttribute(`ax-trigger`)||`load`;n===`load`?H(t):n===`intersect`?K.observe(t):t.addEventListener(n,e=>{e.preventDefault(),H(t)})}),e.querySelectorAll(`[ax-mutate]`).forEach(e=>{let t=e;A(t,{});let n=t.tagName===`FORM`?`submit`:`click`;t.addEventListener(n,e=>{(t.tagName===`A`||t.tagName===`BUTTON`||t.tagName===`FORM`)&&e.preventDefault(),U(t)})}),e.querySelectorAll(`[ax-trigger="refresh"]`).forEach(e=>{let t=e;t.addEventListener(`click`,e=>{e.preventDefault();let n=t.closest(`[ax-query]`);if(n){let e=V(n,n.getAttribute(`ax-query`));if(e&&o(e.target)){let t=`${e.target}:${JSON.stringify(e.args)}`,r=N.get(t);r?r.fetch(!0):H(n)}}})})}function X(){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e instanceof HTMLElement&&Y(e)})})}).observe(document.body,{childList:!0,subtree:!0})}var Z=class extends HTMLElement{constructor(){super()}connectedCallback(){let e=this.getAttribute(`loading-text`)||`Initializing...`,t=this.getAttribute(`ready-text`)||`Online`,n=this.getAttribute(`error-text`)||`Failed to Connect`;this.renderState(`loading`,e,`text-amber-500 animate-pulse`),document.addEventListener(`atmx:ready`,()=>{this.renderState(`ready`,t,`text-green-600`)}),document.addEventListener(`atmx:error`,e=>{let t=e;t.detail&&t.detail.stage===`runtime`&&this.renderState(`error`,`${n}: ${t.detail.message}`,`text-red-600`)})}renderState(e,t,n){this.setAttribute(`data-state`,e);let r=this.querySelectorAll(`[data-ax-when]`);r.length>0?r.forEach(t=>{t.getAttribute(`data-ax-when`)===e?t.removeAttribute(`hidden`):t.setAttribute(`hidden`,``)}):(this.innerText=t,this.getAttribute(`class`)||(this.className=`text-xs font-bold ${n}`))}};typeof window<`u`&&!customElements.get(`ax-engine-status`)&&customElements.define(`ax-engine-status`,Z);var Q=`0.106.0`,$=new class{version=Q;initialized=!1;debug=!1;async init(e){if(this.initialized)return{ok:!0,contracts:{},initDurationMs:0};let t=await g(e);return t.ok?(this.debug=e.debug||!1,X(),Y(document.body),this.initialized=!0,this.debug&&console.log(`%c🚀 ATMX Debug Mode: Enabled`,`color: #2563eb; font-weight: bold;`),console.log(`✅ ATMX v${this.version} Online (${t.initDurationMs}ms). Reactive Engine Started.`),document.dispatchEvent(new CustomEvent(`atmx:ready`,{detail:t}))):(console.error(`❌ ATMX Initialization Failed:`,t.error),document.dispatchEvent(new CustomEvent(`atmx:error`,{detail:t.error}))),t}hydrate(e){let t=document;e&&(t=typeof e==`string`?document.querySelector(e):e),t&&J(t)}triggerQuery(e){let t=typeof e==`string`?document.querySelector(e):e;t&&t instanceof HTMLElement&&t.hasAttribute(`ax-query`)&&H(t)}on(e,t){document.addEventListener(`atmx:${e}`,t)}setAuthToken(e,t,n){_(e,t,n)}setNamespaceAuthToken(e,t,n=!0){v(e,t,n)}setGlobalAuthToken(e){x(e)}sendStreamMessage(e,t){b(e,t)}clearAuthToken(e,t){y(e,t)}connect(e){let t=V(null,e);if(!t)return;let n=o(t.target);if(!n)return;let r=`${n.namespace}:${n.id}:${JSON.stringify(t.args)}`,i=N.get(r);i||(i=new M(r,n,t.args),N.set(r,i)),i.fetch()}disconnect(e){let t=V(null,e);if(!t)return;let r=o(t.target);if(!r)return;let i=`${r.namespace}:${r.id}:${JSON.stringify(t.args)}`,a=N.get(i);a&&(a.currentReqId&&n.delete(a.currentReqId),N.delete(i),this.debug&&console.log(`🔌 ATMX Disconnected Stream: ${e}`))}send(e,t){let n=V(null,e);if(!n)return;let r=o(n.target);if(!r)return;let i=`${r.namespace}:${r.id}:${JSON.stringify(n.args)}`,a=N.get(i);a&&a.currentReqId?b(a.currentReqId,t):console.warn(`ATMX: Cannot send message, stream not active for ${e}`)}mutate(e,t,n){return P(e,t,n)}invalidate(e,t){F(e,t)}setQueryData(e,t,n){I(e,t,n)}clearCache(e){L(e)}onError(e){document.addEventListener(`atmx:error`,t=>{e(t.detail)})}};typeof window<`u`&&(window.atmx=$),e.ATMX_VERSION=Q,e.allocBytes=p,e.allocString=m,e.atmx=$,e.buildRequestPath=s,e.clearAuthToken=y,e.initWasm=g,e.pendingRequests=n,e.resolveRoute=o,e.sendStreamMessage=b,e.setAuthToken=_,e.setGlobalAuthToken=x,Object.defineProperty(e,`wasmEngine`,{enumerable:!0,get:function(){return d}})});
|
package/dist/core/query.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Route } from './router';
|
|
2
2
|
import { AtmxContextData } from './context';
|
|
3
|
+
export declare let globalReqCounter: number;
|
|
3
4
|
type Listener = (state: Partial<AtmxContextData>) => void;
|
|
4
5
|
export declare class ActiveQuery {
|
|
5
6
|
key: string;
|
|
@@ -14,4 +15,14 @@ export declare class ActiveQuery {
|
|
|
14
15
|
fetch(force?: boolean): void;
|
|
15
16
|
}
|
|
16
17
|
export declare const queryRegistry: Map<string, ActiveQuery>;
|
|
18
|
+
/**
|
|
19
|
+
* IMPROVEMENT 1: Programmatic Mutations
|
|
20
|
+
*/
|
|
21
|
+
export declare function executeProgrammaticMutation(routeKey: string, args?: Record<string, any>, payloadObj?: Record<string, any>): Promise<any>;
|
|
22
|
+
/**
|
|
23
|
+
* IMPROVEMENT 3: Cache Invalidation
|
|
24
|
+
*/
|
|
25
|
+
export declare function invalidateQuery(routeKey: string, args?: Record<string, any>): void;
|
|
26
|
+
export declare function setQueryData(routeKey: string, args: Record<string, any> | undefined, newData: any): void;
|
|
27
|
+
export declare function clearAllCaches(namespace?: string): void;
|
|
17
28
|
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AtmxConfig, InitResult } from './core/types';
|
|
2
|
-
export declare const ATMX_VERSION = "0.
|
|
1
|
+
import { AtmxConfig, AxiomError, InitResult } from './core/types';
|
|
2
|
+
export declare const ATMX_VERSION = "0.106.0";
|
|
3
3
|
declare class ATMX {
|
|
4
4
|
version: string;
|
|
5
5
|
initialized: boolean;
|
|
@@ -16,6 +16,11 @@ declare class ATMX {
|
|
|
16
16
|
connect(rpcCall: string): void;
|
|
17
17
|
disconnect(rpcCall: string): void;
|
|
18
18
|
send(rpcCall: string, payload: any): void;
|
|
19
|
+
mutate(rpcCall: string, args?: Record<string, any>, payload?: any): Promise<any>;
|
|
20
|
+
invalidate(rpcCall: string, args?: Record<string, any>): void;
|
|
21
|
+
setQueryData(rpcCall: string, args: Record<string, any>, data: any): void;
|
|
22
|
+
clearCache(namespace?: string): void;
|
|
23
|
+
onError(callback: (error: AxiomError) => void): void;
|
|
19
24
|
}
|
|
20
25
|
export declare const atmx: ATMX;
|
|
21
26
|
export { initWasm, wasmEngine, allocBytes, allocString, setAuthToken, clearAuthToken, setGlobalAuthToken, sendStreamMessage, } from './core/wasm';
|