@shivaedev/react 0.0.0 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +294 -0
- package/LICENSE +21 -0
- package/README.md +844 -1
- package/dist/actionTrace.d.ts +3 -0
- package/dist/actionTrace.d.ts.map +1 -0
- package/dist/actionTrace.js +5 -0
- package/dist/actionTrace.js.map +1 -0
- package/dist/client/QueryView.d.ts +10 -0
- package/dist/client/QueryView.d.ts.map +1 -0
- package/dist/client/QueryView.js +13 -0
- package/dist/client/QueryView.js.map +1 -0
- package/dist/client/actionCompletion.d.ts +12 -0
- package/dist/client/actionCompletion.d.ts.map +1 -0
- package/dist/client/actionCompletion.js +68 -0
- package/dist/client/actionCompletion.js.map +1 -0
- package/dist/client/authAction.d.ts +15 -0
- package/dist/client/authAction.d.ts.map +1 -0
- package/dist/client/authAction.js +11 -0
- package/dist/client/authAction.js.map +1 -0
- package/dist/client/create.d.ts +21 -0
- package/dist/client/create.d.ts.map +1 -0
- package/dist/client/create.js +35 -0
- package/dist/client/create.js.map +1 -0
- package/dist/client/editor.d.ts +33 -0
- package/dist/client/editor.d.ts.map +1 -0
- package/dist/client/editor.js +50 -0
- package/dist/client/editor.js.map +1 -0
- package/dist/client/mountLive.d.ts +4 -0
- package/dist/client/mountLive.d.ts.map +1 -0
- package/dist/client/mountLive.js +46 -0
- package/dist/client/mountLive.js.map +1 -0
- package/dist/client/pendingCommand.d.ts +13 -0
- package/dist/client/pendingCommand.d.ts.map +1 -0
- package/dist/client/pendingCommand.js +30 -0
- package/dist/client/pendingCommand.js.map +1 -0
- package/dist/client/resultState.d.ts +32 -0
- package/dist/client/resultState.d.ts.map +1 -0
- package/dist/client/resultState.js +62 -0
- package/dist/client/resultState.js.map +1 -0
- package/dist/client/saveState.d.ts +11 -0
- package/dist/client/saveState.d.ts.map +1 -0
- package/dist/client/saveState.js +37 -0
- package/dist/client/saveState.js.map +1 -0
- package/dist/client/sessionBoundary.d.ts +15 -0
- package/dist/client/sessionBoundary.d.ts.map +1 -0
- package/dist/client/sessionBoundary.js +70 -0
- package/dist/client/sessionBoundary.js.map +1 -0
- package/dist/client/testing.d.ts +28 -0
- package/dist/client/testing.d.ts.map +1 -0
- package/dist/client/testing.js +108 -0
- package/dist/client/testing.js.map +1 -0
- package/dist/client/useDraftOwner.d.ts +3 -0
- package/dist/client/useDraftOwner.d.ts.map +1 -0
- package/dist/client/useDraftOwner.js +36 -0
- package/dist/client/useDraftOwner.js.map +1 -0
- package/dist/client/useLoaderQuery.d.ts +8 -0
- package/dist/client/useLoaderQuery.d.ts.map +1 -0
- package/dist/client/useLoaderQuery.js +10 -0
- package/dist/client/useLoaderQuery.js.map +1 -0
- package/dist/fieldRejection.d.ts +25 -0
- package/dist/fieldRejection.d.ts.map +1 -0
- package/dist/fieldRejection.js +21 -0
- package/dist/fieldRejection.js.map +1 -0
- package/dist/internal/NoticeContext.d.ts +7 -0
- package/dist/internal/NoticeContext.d.ts.map +1 -0
- package/dist/internal/NoticeContext.js +3 -0
- package/dist/internal/NoticeContext.js.map +1 -0
- package/dist/internal/loadedQuery.d.ts +16 -0
- package/dist/internal/loadedQuery.d.ts.map +1 -0
- package/dist/internal/loadedQuery.js +11 -0
- package/dist/internal/loadedQuery.js.map +1 -0
- package/dist/internal/noticeEntry.d.ts +21 -0
- package/dist/internal/noticeEntry.d.ts.map +1 -0
- package/dist/internal/noticeEntry.js +45 -0
- package/dist/internal/noticeEntry.js.map +1 -0
- package/dist/internal/noticeStore.d.ts +12 -0
- package/dist/internal/noticeStore.d.ts.map +1 -0
- package/dist/internal/noticeStore.js +37 -0
- package/dist/internal/noticeStore.js.map +1 -0
- package/dist/internal/queryHandoff.d.ts +9 -0
- package/dist/internal/queryHandoff.d.ts.map +1 -0
- package/dist/internal/queryHandoff.js +50 -0
- package/dist/internal/queryHandoff.js.map +1 -0
- package/dist/internal/sessionRecheck.d.ts +4 -0
- package/dist/internal/sessionRecheck.d.ts.map +1 -0
- package/dist/internal/sessionRecheck.js +14 -0
- package/dist/internal/sessionRecheck.js.map +1 -0
- package/dist/internal/useLoaderHandoff.d.ts +4 -0
- package/dist/internal/useLoaderHandoff.d.ts.map +1 -0
- package/dist/internal/useLoaderHandoff.js +18 -0
- package/dist/internal/useLoaderHandoff.js.map +1 -0
- package/dist/internal/useNoticePublisher.d.ts +4 -0
- package/dist/internal/useNoticePublisher.d.ts.map +1 -0
- package/dist/internal/useNoticePublisher.js +8 -0
- package/dist/internal/useNoticePublisher.js.map +1 -0
- package/dist/internal/useQueryNotice.d.ts +8 -0
- package/dist/internal/useQueryNotice.d.ts.map +1 -0
- package/dist/internal/useQueryNotice.js +26 -0
- package/dist/internal/useQueryNotice.js.map +1 -0
- package/dist/internal/useSubmissionCallbacks.d.ts +11 -0
- package/dist/internal/useSubmissionCallbacks.d.ts.map +1 -0
- package/dist/internal/useSubmissionCallbacks.js +45 -0
- package/dist/internal/useSubmissionCallbacks.js.map +1 -0
- package/dist/loadQuery.d.ts +6 -0
- package/dist/loadQuery.d.ts.map +1 -0
- package/dist/loadQuery.js +29 -0
- package/dist/loadQuery.js.map +1 -0
- package/dist/notices.d.ts +32 -0
- package/dist/notices.d.ts.map +1 -0
- package/dist/notices.js +34 -0
- package/dist/notices.js.map +1 -0
- package/dist/queryRoute.d.ts +20 -0
- package/dist/queryRoute.d.ts.map +1 -0
- package/dist/queryRoute.js +20 -0
- package/dist/queryRoute.js.map +1 -0
- package/dist/resumeSignal.d.ts +6 -0
- package/dist/resumeSignal.d.ts.map +1 -0
- package/dist/resumeSignal.js +5 -0
- package/dist/resumeSignal.js.map +1 -0
- package/dist/submission.d.ts +19 -0
- package/dist/submission.d.ts.map +1 -0
- package/dist/submission.js +19 -0
- package/dist/submission.js.map +1 -0
- package/package.json +104 -4
- package/src/actionTrace.ts +5 -0
- package/src/client/QueryView.ts +27 -0
- package/src/client/actionCompletion.ts +82 -0
- package/src/client/authAction.ts +22 -0
- package/src/client/create.ts +55 -0
- package/src/client/editor.ts +89 -0
- package/src/client/mountLive.ts +57 -0
- package/src/client/pendingCommand.ts +42 -0
- package/src/client/resultState.ts +102 -0
- package/src/client/saveState.ts +54 -0
- package/src/client/sessionBoundary.ts +107 -0
- package/src/client/testing.ts +142 -0
- package/src/client/useDraftOwner.ts +42 -0
- package/src/client/useLoaderQuery.ts +16 -0
- package/src/fieldRejection.ts +51 -0
- package/src/internal/NoticeContext.ts +4 -0
- package/src/internal/loadedQuery.ts +18 -0
- package/src/internal/noticeEntry.ts +65 -0
- package/src/internal/noticeStore.ts +46 -0
- package/src/internal/queryHandoff.ts +60 -0
- package/src/internal/sessionRecheck.ts +17 -0
- package/src/internal/useLoaderHandoff.ts +20 -0
- package/src/internal/useNoticePublisher.ts +10 -0
- package/src/internal/useQueryNotice.ts +32 -0
- package/src/internal/useSubmissionCallbacks.ts +57 -0
- package/src/loadQuery.ts +34 -0
- package/src/notices.ts +65 -0
- package/src/queryRoute.ts +30 -0
- package/src/resumeSignal.ts +13 -0
- package/src/submission.ts +39 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as Atom from "effect/reactivity/Atom";
|
|
2
|
+
import { noticeEntry } from "./noticeEntry.js";
|
|
3
|
+
export function noticeStore(registry) {
|
|
4
|
+
const entries = Atom.make([]);
|
|
5
|
+
let nextId = 0;
|
|
6
|
+
function remove(id) {
|
|
7
|
+
registry.set(entries, registry.get(entries).filter((entry) => entry.id !== id));
|
|
8
|
+
}
|
|
9
|
+
const store = {
|
|
10
|
+
active: false,
|
|
11
|
+
close: () => {
|
|
12
|
+
store.active = false;
|
|
13
|
+
for (const entry of registry.get(entries)) {
|
|
14
|
+
entry.release();
|
|
15
|
+
}
|
|
16
|
+
registry.set(entries, []);
|
|
17
|
+
},
|
|
18
|
+
entries,
|
|
19
|
+
publish: (descriptor, action) => {
|
|
20
|
+
if (!store.active) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const entry = noticeEntry(registry, nextId, descriptor, remove, action);
|
|
24
|
+
nextId += 1;
|
|
25
|
+
registry.set(entries, [...registry.get(entries), entry]);
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
return store;
|
|
29
|
+
}
|
|
30
|
+
export function publishNotice(store, runtime, descriptor) {
|
|
31
|
+
if (!(store?.active && descriptor)) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const action = descriptor.action;
|
|
35
|
+
store.publish(descriptor, action === undefined ? undefined : { atom: runtime.fn(() => action.run).pipe(Atom.setIdleTTL(0)), label: action.label });
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=noticeStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noticeStore.js","sourceRoot":"","sources":["../../src/internal/noticeStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAC;AAG/C,OAAO,EAAuC,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpF,MAAM,UAAU,WAAW,CAAC,QAAmC;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAyB,EAAE,CAAC,CAAC;IACtD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,SAAS,MAAM,CAAC,EAAU;QACzB,QAAQ,CAAC,GAAG,CACX,OAAO,EACP,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CACxD,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG;QACb,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,GAAG,EAAE;YACX,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACrB,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3C,KAAK,CAAC,OAAO,EAAE,CAAC;YACjB,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO;QACP,OAAO,EAAE,CAAC,UAA2D,EAAE,MAAqB,EAAE,EAAE;YAC/F,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO;YACR,CAAC;YACD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACxE,MAAM,IAAI,CAAC,CAAC;YACZ,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1D,CAAC;KACD,CAAC;IACF,OAAO,KAAK,CAAC;AACd,CAAC;AACD,MAAM,UAAU,aAAa,CAC5B,KAAiD,EACjD,OAA+B,EAC/B,UAA2C;IAE3C,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO;IACR,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACjC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACpJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as Atom from "effect/reactivity/Atom";
|
|
2
|
+
import type * as AtomRegistry from "effect/reactivity/AtomRegistry";
|
|
3
|
+
export declare function keepLoaderQuery(registry: AtomRegistry.AtomRegistry, atom: Atom.Atom<unknown>, signal: AbortSignal): {
|
|
4
|
+
complete: () => void;
|
|
5
|
+
release: () => void;
|
|
6
|
+
};
|
|
7
|
+
export declare function acceptLoaderQuery(registry: AtomRegistry.AtomRegistry, atom: Atom.Atom<unknown>): void;
|
|
8
|
+
export declare function pendingLoaderQuery(registry: AtomRegistry.AtomRegistry, atom: Atom.Atom<unknown>): Promise<void> | undefined;
|
|
9
|
+
//# sourceMappingURL=queryHandoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryHandoff.d.ts","sourceRoot":"","sources":["../../src/internal/queryHandoff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAC;AAC/C,OAAO,KAAK,KAAK,YAAY,MAAM,gCAAgC,CAAC;AAUpE,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW;;;EAiCjH;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAIrG;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAO3H"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as Atom from "effect/reactivity/Atom";
|
|
2
|
+
const handoffs = new WeakMap();
|
|
3
|
+
export function keepLoaderQuery(registry, atom, signal) {
|
|
4
|
+
let atoms = handoffs.get(registry);
|
|
5
|
+
if (!atoms) {
|
|
6
|
+
atoms = new WeakMap();
|
|
7
|
+
handoffs.set(registry, atoms);
|
|
8
|
+
}
|
|
9
|
+
const readers = atoms.get(atom) ?? new Set();
|
|
10
|
+
atoms.set(atom, readers);
|
|
11
|
+
const key = Atom.isSerializable(atom) ? atom[Atom.SerializableTypeId].key : atom;
|
|
12
|
+
if (atom.initialValueTarget && !registry.getNodes().has(key)) {
|
|
13
|
+
// A removed reactive wrapper may have missed invalidations while its source stayed idle.
|
|
14
|
+
registry.refresh(atom);
|
|
15
|
+
}
|
|
16
|
+
const unmount = registry.mount(atom);
|
|
17
|
+
const ready = Promise.withResolvers();
|
|
18
|
+
const handoff = { pending: true, ready: ready.promise, release };
|
|
19
|
+
function complete() {
|
|
20
|
+
handoff.pending = false;
|
|
21
|
+
ready.resolve();
|
|
22
|
+
}
|
|
23
|
+
function release() {
|
|
24
|
+
if (readers.delete(handoff)) {
|
|
25
|
+
complete();
|
|
26
|
+
signal.removeEventListener("abort", release);
|
|
27
|
+
unmount();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
readers.add(handoff);
|
|
31
|
+
signal.addEventListener("abort", release, { once: true });
|
|
32
|
+
if (signal.aborted) {
|
|
33
|
+
release();
|
|
34
|
+
}
|
|
35
|
+
return { complete, release };
|
|
36
|
+
}
|
|
37
|
+
export function acceptLoaderQuery(registry, atom) {
|
|
38
|
+
for (const handoff of handoffs.get(registry)?.get(atom) ?? []) {
|
|
39
|
+
handoff.release();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function pendingLoaderQuery(registry, atom) {
|
|
43
|
+
for (const handoff of handoffs.get(registry)?.get(atom) ?? []) {
|
|
44
|
+
if (handoff.pending) {
|
|
45
|
+
return handoff.ready;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=queryHandoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryHandoff.js","sourceRoot":"","sources":["../../src/internal/queryHandoff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAC;AAS/C,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAwE,CAAC;AAErG,MAAM,UAAU,eAAe,CAAC,QAAmC,EAAE,IAAwB,EAAE,MAAmB;IACjH,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;QACtB,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAW,CAAC;IACtD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACjF,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9D,yFAAyF;QACzF,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,EAAQ,CAAC;IAC5C,MAAM,OAAO,GAAY,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;IAC1E,SAAS,QAAQ;QAChB,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;QACxB,KAAK,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IACD,SAAS,OAAO;QACf,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,QAAQ,EAAE,CAAC;YACX,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAmC,EAAE,IAAwB;IAC9F,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/D,OAAO,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAmC,EAAE,IAAwB;IAC/F,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/D,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,OAAO,CAAC,KAAK,CAAC;QACtB,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type * as AtomRegistry from "effect/reactivity/AtomRegistry";
|
|
2
|
+
export declare function registerSessionRecheck(registry: AtomRegistry.AtomRegistry, recheck: () => void): () => void;
|
|
3
|
+
export declare function recheckUnauthorized(registry: AtomRegistry.AtomRegistry, error: unknown): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=sessionRecheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionRecheck.d.ts","sourceRoot":"","sources":["../../src/internal/sessionRecheck.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,YAAY,MAAM,gCAAgC,CAAC;AAIpE,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAK3G;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAI5G"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Predicate } from "effect";
|
|
2
|
+
const rechecks = new WeakMap();
|
|
3
|
+
export function registerSessionRecheck(registry, recheck) {
|
|
4
|
+
rechecks.set(registry, recheck);
|
|
5
|
+
return () => {
|
|
6
|
+
rechecks.delete(registry);
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export async function recheckUnauthorized(registry, error) {
|
|
10
|
+
if (Predicate.isTagged(error, "Unauthorized")) {
|
|
11
|
+
await rechecks.get(registry)?.();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=sessionRecheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionRecheck.js","sourceRoot":"","sources":["../../src/internal/sessionRecheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAyC,CAAC;AAEtE,MAAM,UAAU,sBAAsB,CAAC,QAAmC,EAAE,OAAmB;IAC9F,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,GAAG,EAAE;QACX,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAmC,EAAE,KAAc;IAC5F,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;QAC/C,MAAM,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;IAClC,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type * as Atom from "effect/reactivity/Atom";
|
|
2
|
+
import type * as AtomRegistry from "effect/reactivity/AtomRegistry";
|
|
3
|
+
export declare function useLoaderHandoff(registry: AtomRegistry.AtomRegistry, atom: Atom.Atom<unknown>): void;
|
|
4
|
+
//# sourceMappingURL=useLoaderHandoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLoaderHandoff.d.ts","sourceRoot":"","sources":["../../src/internal/useLoaderHandoff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,KAAK,YAAY,MAAM,gCAAgC,CAAC;AAIpE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAcpG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useEffect, useRef } from "react";
|
|
2
|
+
import { pendingLoaderQuery } from "./queryHandoff.js";
|
|
3
|
+
export function useLoaderHandoff(registry, atom) {
|
|
4
|
+
const committedRef = useRef(undefined);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
committedRef.current = { atom, registry };
|
|
7
|
+
return () => {
|
|
8
|
+
committedRef.current = undefined;
|
|
9
|
+
};
|
|
10
|
+
}, [registry, atom]);
|
|
11
|
+
if (committedRef.current?.registry !== registry || committedRef.current.atom !== atom) {
|
|
12
|
+
const pending = pendingLoaderQuery(registry, atom);
|
|
13
|
+
if (pending !== undefined) {
|
|
14
|
+
throw pending;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=useLoaderHandoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLoaderHandoff.js","sourceRoot":"","sources":["../../src/internal/useLoaderHandoff.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,UAAU,gBAAgB,CAAC,QAAmC,EAAE,IAAwB;IAC7F,MAAM,YAAY,GAAG,MAAM,CAAkG,SAAS,CAAC,CAAC;IACxI,SAAS,CAAC,GAAG,EAAE;QACd,YAAY,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC1C,OAAO,GAAG,EAAE;YACX,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC;QAClC,CAAC,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACrB,IAAI,YAAY,CAAC,OAAO,EAAE,QAAQ,KAAK,QAAQ,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACvF,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,OAAO,CAAC;QACf,CAAC;IACF,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type * as Atom from "effect/reactivity/Atom";
|
|
2
|
+
import type { NoticeDescriptor } from "#notices.ts";
|
|
3
|
+
export declare function useNoticePublisher<R, E>(runtime: Atom.AtomRuntime<R, E>): (descriptor: NoticeDescriptor<R> | undefined) => void;
|
|
4
|
+
//# sourceMappingURL=useNoticePublisher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNoticePublisher.d.ts","sourceRoot":"","sources":["../../src/internal/useNoticePublisher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,wBAAwB,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,IAAI,CAG/H"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { useContext, useMemo } from "react";
|
|
2
|
+
import { NoticeContext } from "./NoticeContext.js";
|
|
3
|
+
import { publishNotice } from "./noticeStore.js";
|
|
4
|
+
export function useNoticePublisher(runtime) {
|
|
5
|
+
const store = useContext(NoticeContext);
|
|
6
|
+
return useMemo(() => (descriptor) => publishNotice(store, runtime, descriptor), [store, runtime]);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=useNoticePublisher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNoticePublisher.js","sourceRoot":"","sources":["../../src/internal/useNoticePublisher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,UAAU,kBAAkB,CAAO,OAA+B;IACvE,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IACxC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,UAA2C,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACpI,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Cause } from "effect";
|
|
2
|
+
import * as AsyncResult from "effect/reactivity/AsyncResult";
|
|
3
|
+
import type { NoticeDescriptor } from "#notices.ts";
|
|
4
|
+
export declare function useQueryNotice<A, E>(result: AsyncResult.AsyncResult<A, E>, refreshing: boolean, notice: ((failure: {
|
|
5
|
+
readonly cause: Cause.Cause<E>;
|
|
6
|
+
readonly refreshing: boolean;
|
|
7
|
+
}) => NoticeDescriptor | undefined) | undefined): void;
|
|
8
|
+
//# sourceMappingURL=useQueryNotice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQueryNotice.d.ts","sourceRoot":"","sources":["../../src/internal/useQueryNotice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAS,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,+BAA+B,CAAC;AAG7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMpD,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAClC,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EACrC,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;CAAE,KAAK,gBAAgB,GAAG,SAAS,CAAC,GAAG,SAAS,QAkBjI"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Layer } from "effect";
|
|
2
|
+
import * as AsyncResult from "effect/reactivity/AsyncResult";
|
|
3
|
+
import * as Atom from "effect/reactivity/Atom";
|
|
4
|
+
import { useContext, useEffect, useInsertionEffect, useRef } from "react";
|
|
5
|
+
import { NoticeContext } from "./NoticeContext.js";
|
|
6
|
+
import { publishNotice } from "./noticeStore.js";
|
|
7
|
+
const runtime = Atom.runtime(Layer.empty);
|
|
8
|
+
export function useQueryNotice(result, refreshing, notice) {
|
|
9
|
+
const store = useContext(NoticeContext);
|
|
10
|
+
const latestRef = useRef(notice);
|
|
11
|
+
useInsertionEffect(() => {
|
|
12
|
+
latestRef.current = notice;
|
|
13
|
+
}, [notice]);
|
|
14
|
+
const seenRef = useRef(undefined);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
if (result.waiting || seenRef.current === result) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
seenRef.current = result;
|
|
20
|
+
if (store?.active && AsyncResult.isFailure(result)) {
|
|
21
|
+
const descriptor = latestRef.current?.({ cause: result.cause, refreshing });
|
|
22
|
+
publishNotice(store, runtime, descriptor);
|
|
23
|
+
}
|
|
24
|
+
}, [result, refreshing, store]);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=useQueryNotice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQueryNotice.js","sourceRoot":"","sources":["../../src/internal/useQueryNotice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAE1C,MAAM,UAAU,cAAc,CAC7B,MAAqC,EACrC,UAAmB,EACnB,MAAiI;IAEjI,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,kBAAkB,CAAC,GAAG,EAAE;QACvB,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;IAC5B,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACb,MAAM,OAAO,GAAG,MAAM,CAA4C,SAAS,CAAC,CAAC;IAC7E,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAClD,OAAO;QACR,CAAC;QACD,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC;QACzB,IAAI,KAAK,EAAE,MAAM,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACpD,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YAC5E,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC;IACF,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Effect, type Schema } from "effect";
|
|
2
|
+
import type * as Atom from "effect/reactivity/Atom";
|
|
3
|
+
import type { Decoded, Fields } from "@shivaedev/form/shape.ts";
|
|
4
|
+
import { type AtomServices, type RejectField } from "#fieldRejection.ts";
|
|
5
|
+
import type { NoticeFeedback } from "#notices.ts";
|
|
6
|
+
export declare function useSubmissionCallbacks<TFields extends Fields, A, E, R, TRuntime, TRuntimeError>(fields: Schema.Struct<TFields>, save: (values: Decoded<TFields>) => Effect.Effect<A, E, AtomServices<R>>, rejectField: RejectField<TFields, E> | undefined, runtime: Atom.AtomRuntime<TRuntime, TRuntimeError>, notices: NoticeFeedback<Decoded<TFields>, A, E, TRuntime> | undefined): {
|
|
7
|
+
active: boolean;
|
|
8
|
+
rejectField: (error: E) => import("#fieldRejection.ts").FieldRejection<import("@shivaedev/form/shape.ts").Name<TFields>> | undefined;
|
|
9
|
+
save: (values: Decoded<TFields>) => Effect.Effect<A, E, AtomServices<R>>;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=useSubmissionCallbacks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSubmissionCallbacks.d.ts","sourceRoot":"","sources":["../../src/internal/useSubmissionCallbacks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,KAAK,IAAI,MAAM,wBAAwB,CAAC;AAEpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,KAAK,YAAY,EAAoB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,wBAAgB,sBAAsB,CAAC,OAAO,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAC9F,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9B,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EACxE,WAAW,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,SAAS,EAChD,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,EAClD,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,SAAS;;yBA0B9C,CAAC;mBACP,OAAO,CAAC,OAAO,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;EAgBxE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { useInsertionEffect, useMemo, useRef } from "react";
|
|
3
|
+
import { fieldRejectionOf } from "#fieldRejection.ts";
|
|
4
|
+
import { useNoticePublisher } from "./useNoticePublisher.js";
|
|
5
|
+
export function useSubmissionCallbacks(fields, save, rejectField, runtime, notices) {
|
|
6
|
+
const publish = useNoticePublisher(runtime);
|
|
7
|
+
const latestRef = useRef({ notices, rejectField, save });
|
|
8
|
+
useInsertionEffect(() => {
|
|
9
|
+
latestRef.current = { notices, rejectField, save };
|
|
10
|
+
}, [notices, rejectField, save]);
|
|
11
|
+
const callbacks = useMemo(() => {
|
|
12
|
+
const automatic = fieldRejectionOf(fields);
|
|
13
|
+
function rejected(error, values) {
|
|
14
|
+
return Effect.sync(() => {
|
|
15
|
+
if (callbacks.active) {
|
|
16
|
+
publish(latestRef.current.notices?.onFailure?.(error, values));
|
|
17
|
+
}
|
|
18
|
+
}).pipe(Effect.andThen(Effect.fail(error)));
|
|
19
|
+
}
|
|
20
|
+
function completed(value, values) {
|
|
21
|
+
return Effect.sync(() => {
|
|
22
|
+
if (callbacks.active) {
|
|
23
|
+
publish(latestRef.current.notices?.onSuccess?.(value, values));
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
active: false,
|
|
30
|
+
rejectField: (error) => (latestRef.current.rejectField ?? automatic)(error),
|
|
31
|
+
save: (values) => Effect.suspend(() => latestRef.current.save(values)).pipe(Effect.matchEffect({
|
|
32
|
+
onFailure: (error) => rejected(error, values),
|
|
33
|
+
onSuccess: (value) => completed(value, values),
|
|
34
|
+
})),
|
|
35
|
+
};
|
|
36
|
+
}, [fields, publish]);
|
|
37
|
+
useInsertionEffect(() => {
|
|
38
|
+
callbacks.active = true;
|
|
39
|
+
return () => {
|
|
40
|
+
callbacks.active = false;
|
|
41
|
+
};
|
|
42
|
+
}, [callbacks]);
|
|
43
|
+
return callbacks;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=useSubmissionCallbacks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSubmissionCallbacks.js","sourceRoot":"","sources":["../../src/internal/useSubmissionCallbacks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAe,MAAM,QAAQ,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE5D,OAAO,EAAqB,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AAE3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,UAAU,sBAAsB,CACrC,MAA8B,EAC9B,IAAwE,EACxE,WAAgD,EAChD,OAAkD,EAClD,OAAqE;IAErE,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,kBAAkB,CAAC,GAAG,EAAE;QACvB,SAAS,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE;QAC9B,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC3C,SAAS,QAAQ,CAAC,KAAQ,EAAE,MAAwB;YACnD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBACvB,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;oBACtB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChE,CAAC;YACF,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,SAAS,SAAS,CAAC,KAAQ,EAAE,MAAwB;YACpD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBACvB,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;oBACtB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChE,CAAC;gBACD,OAAO,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACJ,CAAC;QACD,OAAO;YACN,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,CAAC,KAAQ,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC,KAAK,CAAC;YAC9E,IAAI,EAAE,CAAC,MAAwB,EAAwC,EAAE,CACxE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACxD,MAAM,CAAC,WAAW,CAAC;gBAClB,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAC7C,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;aAC9C,CAAC,CACF;SACF,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtB,kBAAkB,CAAC,GAAG,EAAE;QACvB,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;QACxB,OAAO,GAAG,EAAE;YACX,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;QAC1B,CAAC,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAChB,OAAO,SAAS,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { LoaderFnContext } from "@tanstack/react-router";
|
|
2
|
+
import type * as AsyncResult from "effect/reactivity/AsyncResult";
|
|
3
|
+
import type * as Atom from "effect/reactivity/Atom";
|
|
4
|
+
import * as AtomRegistry from "effect/reactivity/AtomRegistry";
|
|
5
|
+
export declare function loadQuery<A, E>(registry: AtomRegistry.AtomRegistry, atom: Atom.Atom<AsyncResult.AsyncResult<A, E>>, { abortController }: Pick<LoaderFnContext, "abortController">): Promise<A>;
|
|
6
|
+
//# sourceMappingURL=loadQuery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadQuery.d.ts","sourceRoot":"","sources":["../src/loadQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,KAAK,WAAW,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,KAAK,IAAI,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,YAAY,MAAM,gCAAgC,CAAC;AAI/D,wBAAsB,SAAS,CAAC,CAAC,EAAE,CAAC,EACnC,QAAQ,EAAE,YAAY,CAAC,YAAY,EACnC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC9C,EAAE,eAAe,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC,GAC3D,OAAO,CAAC,CAAC,CAAC,CAqBZ"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import * as AtomRegistry from "effect/reactivity/AtomRegistry";
|
|
3
|
+
import { keepLoaderQuery } from "#internal/queryHandoff.ts";
|
|
4
|
+
import { recheckUnauthorized } from "#internal/sessionRecheck.ts";
|
|
5
|
+
export async function loadQuery(registry, atom, { abortController }) {
|
|
6
|
+
const { signal } = abortController;
|
|
7
|
+
const handoff = keepLoaderQuery(registry, atom, signal);
|
|
8
|
+
try {
|
|
9
|
+
const result = await Effect.runPromise(Effect.result(AtomRegistry.getResult(registry, atom, { suspendOnWaiting: true })), { signal });
|
|
10
|
+
if (result._tag === "Failure") {
|
|
11
|
+
await recheckUnauthorized(registry, result.failure);
|
|
12
|
+
throw result.failure;
|
|
13
|
+
}
|
|
14
|
+
return result.success;
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
handoff.release();
|
|
18
|
+
if (signal.aborted) {
|
|
19
|
+
const canceled = new Error("Query loading canceled", { cause: error });
|
|
20
|
+
canceled.name = "AbortError";
|
|
21
|
+
throw canceled;
|
|
22
|
+
}
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
handoff.complete();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=loadQuery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadQuery.js","sourceRoot":"","sources":["../src/loadQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,KAAK,YAAY,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,SAAS,CAC9B,QAAmC,EACnC,IAA8C,EAC9C,EAAE,eAAe,EAA4C;IAE7D,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC;IACnC,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACxD,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACtI,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,MAAM,CAAC,OAAO,CAAC;QACtB,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACvE,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC;YAC7B,MAAM,QAAQ,CAAC;QAChB,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;YAAS,CAAC;QACV,OAAO,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Duration, Effect } from "effect";
|
|
2
|
+
import type * as AsyncResult from "effect/reactivity/AsyncResult";
|
|
3
|
+
import { type ReactNode } from "react";
|
|
4
|
+
import type { AtomServices } from "#fieldRejection.ts";
|
|
5
|
+
export interface NoticeDescriptor<R = never> {
|
|
6
|
+
readonly action?: {
|
|
7
|
+
readonly label: ReactNode;
|
|
8
|
+
readonly run: Effect.Effect<unknown, unknown, AtomServices<R>>;
|
|
9
|
+
} | undefined;
|
|
10
|
+
readonly expiresIn?: Duration.Input | undefined;
|
|
11
|
+
readonly message: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export interface Notice {
|
|
14
|
+
readonly action?: {
|
|
15
|
+
readonly label: ReactNode;
|
|
16
|
+
readonly pending: boolean;
|
|
17
|
+
readonly result: AsyncResult.AsyncResult<unknown, unknown>;
|
|
18
|
+
readonly run: () => void;
|
|
19
|
+
} | undefined;
|
|
20
|
+
readonly dismiss: () => void;
|
|
21
|
+
readonly id: number;
|
|
22
|
+
readonly message: ReactNode;
|
|
23
|
+
}
|
|
24
|
+
export interface NoticeFeedback<TInput, A, E, R = never> {
|
|
25
|
+
readonly onFailure?: (error: E, input: TInput) => NoticeDescriptor<R> | undefined;
|
|
26
|
+
readonly onSuccess?: (value: A, input: TInput) => NoticeDescriptor<R> | undefined;
|
|
27
|
+
}
|
|
28
|
+
export declare function NoticeHost({ children, render }: {
|
|
29
|
+
readonly children: ReactNode;
|
|
30
|
+
readonly render: (notice: Notice) => ReactNode;
|
|
31
|
+
}): ReactNode;
|
|
32
|
+
//# sourceMappingURL=notices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notices.d.ts","sourceRoot":"","sources":["../src/notices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,KAAK,WAAW,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAA2B,KAAK,SAAS,EAAwC,MAAM,OAAO,CAAC;AACtG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,KAAK;IAC1C,QAAQ,CAAC,MAAM,CAAC,EACb;QACA,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;QAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9D,GACD,SAAS,CAAC;IACb,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;CAC5B;AACD,MAAM,WAAW,MAAM;IACtB,QAAQ,CAAC,MAAM,CAAC,EACb;QACA,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;QAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3D,QAAQ,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC;KACxB,GACD,SAAS,CAAC;IACb,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;CAC5B;AACD,MAAM,WAAW,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,gBAAgB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAClF,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,gBAAgB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;CAClF;AAcD,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAA;CAAE,GAAG,SAAS,CAe5I"}
|
package/dist/notices.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { RegistryContext, useAtomValue } from "@effect/atom-react";
|
|
2
|
+
import { createElement, Fragment, useContext, useLayoutEffect, useMemo } from "react";
|
|
3
|
+
import { NoticeContext } from "#internal/NoticeContext.ts";
|
|
4
|
+
import { noticeStore } from "#internal/noticeStore.ts";
|
|
5
|
+
function Entry({ entry, render }) {
|
|
6
|
+
const result = useAtomValue(entry.status);
|
|
7
|
+
return render({
|
|
8
|
+
action: entry.action === undefined ? undefined : { ...entry.action, pending: result.waiting, result },
|
|
9
|
+
dismiss: entry.dismiss,
|
|
10
|
+
id: entry.id,
|
|
11
|
+
message: entry.message,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
function Entries({ store, render }) {
|
|
15
|
+
const entries = useAtomValue(store.entries);
|
|
16
|
+
return entries.map((entry) => createElement(Entry, { entry, key: entry.id, render }));
|
|
17
|
+
}
|
|
18
|
+
export function NoticeHost({ children, render }) {
|
|
19
|
+
const registry = useContext(RegistryContext);
|
|
20
|
+
const store = useMemo(() => noticeStore(registry), [registry]);
|
|
21
|
+
useLayoutEffect(() => {
|
|
22
|
+
store.active = true;
|
|
23
|
+
return () => {
|
|
24
|
+
store.active = false;
|
|
25
|
+
queueMicrotask(() => {
|
|
26
|
+
if (!store.active) {
|
|
27
|
+
store.close();
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
}, [store]);
|
|
32
|
+
return createElement(NoticeContext.Provider, { value: store }, createElement(Fragment, null, children, createElement(Entries, { render, store })));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=notices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notices.js","sourceRoot":"","sources":["../src/notices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAkB,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEtG,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AA6BvD,SAAS,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAmF;IAChH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC;QACb,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE;QACrG,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,OAAO,EAAE,KAAK,CAAC,OAAO;KACtB,CAAC,CAAC;AACJ,CAAC;AACD,SAAS,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAsG;IACrI,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACvF,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAoF;IAChI,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/D,eAAe,CAAC,GAAG,EAAE;QACpB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,OAAO,GAAG,EAAE;YACX,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACrB,cAAc,CAAC,GAAG,EAAE;gBACnB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBACnB,KAAK,CAAC,KAAK,EAAE,CAAC;gBACf,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,OAAO,aAAa,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACpJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type LoaderFnContext } from "@tanstack/react-router";
|
|
2
|
+
import type * as AsyncResult from "effect/reactivity/AsyncResult";
|
|
3
|
+
import type * as Atom from "effect/reactivity/Atom";
|
|
4
|
+
import type * as AtomRegistry from "effect/reactivity/AtomRegistry";
|
|
5
|
+
export declare function queryRoute<TParams extends object, TSearch extends object, A, E>(query: (route: {
|
|
6
|
+
readonly params: TParams;
|
|
7
|
+
readonly search: TSearch;
|
|
8
|
+
}) => Atom.Atom<AsyncResult.AsyncResult<A, E>>): {
|
|
9
|
+
loader: (context: Pick<LoaderFnContext, "abortController"> & {
|
|
10
|
+
readonly context: {
|
|
11
|
+
readonly registry: AtomRegistry.AtomRegistry;
|
|
12
|
+
};
|
|
13
|
+
readonly deps: TSearch;
|
|
14
|
+
readonly params: TParams;
|
|
15
|
+
}) => Promise<A>;
|
|
16
|
+
loaderDeps: ({ search }: {
|
|
17
|
+
readonly search: TSearch;
|
|
18
|
+
}) => TSearch;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=queryRoute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryRoute.d.ts","sourceRoot":"","sources":["../src/queryRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,wBAAwB,CAAC;AAExE,OAAO,KAAK,KAAK,WAAW,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,KAAK,IAAI,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,KAAK,YAAY,MAAM,gCAAgC,CAAC;AAGpE,wBAAgB,UAAU,CAAC,OAAO,SAAS,MAAM,EAAE,OAAO,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAC9E,KAAK,EAAE,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAGjH,MAAM,YACI,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC,GAAG;QACnD,QAAQ,CAAC,OAAO,EAAE;YAAE,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,YAAY,CAAA;SAAE,CAAC;QACnE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;KACzB,KACC,OAAO,CAAC,CAAC,CAAC;IAUb,UAAU,eAAe;QAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE;EAEtD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { notFound } from "@tanstack/react-router";
|
|
2
|
+
import { Predicate } from "effect";
|
|
3
|
+
import { loadQuery } from "./loadQuery.js";
|
|
4
|
+
export function queryRoute(query) {
|
|
5
|
+
return {
|
|
6
|
+
loader: async (context) => {
|
|
7
|
+
try {
|
|
8
|
+
return await loadQuery(context.context.registry, query({ params: context.params, search: context.deps }), context);
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
if (Predicate.isTagged(error, "NotFound")) {
|
|
12
|
+
throw notFound();
|
|
13
|
+
}
|
|
14
|
+
throw error;
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
loaderDeps: ({ search }) => search,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=queryRoute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryRoute.js","sourceRoot":"","sources":["../src/queryRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAInC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,UAAU,UAAU,CACzB,KAAkH;IAElH,OAAO;QACN,MAAM,EAAE,KAAK,EACZ,OAIC,EACY,EAAE;YACf,IAAI,CAAC;gBACJ,OAAO,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YACpH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;oBAC3C,MAAM,QAAQ,EAAE,CAAC;gBAClB,CAAC;gBACD,MAAM,KAAK,CAAC;YACb,CAAC;QACF,CAAC;QACD,UAAU,EAAE,CAAC,EAAE,MAAM,EAAgC,EAAE,EAAE,CAAC,MAAM;KAChE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ResumeOptions as ContractOptions, type ResumeSource as ContractSource, type ResumeWindow as ContractWindow } from "@shivaedev/contract/resume.ts";
|
|
2
|
+
export type ResumeSource = ContractSource;
|
|
3
|
+
export type ResumeWindow = ContractWindow;
|
|
4
|
+
export type ResumeOptions = ContractOptions;
|
|
5
|
+
export declare function resumeSignal(options: ResumeOptions): import("effect/reactivity/Atom").Atom<number>;
|
|
6
|
+
//# sourceMappingURL=resumeSignal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resumeSignal.d.ts","sourceRoot":"","sources":["../src/resumeSignal.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,aAAa,IAAI,eAAe,EACrC,KAAK,YAAY,IAAI,cAAc,EACnC,KAAK,YAAY,IAAI,cAAc,EAEnC,MAAM,+BAA+B,CAAC;AAEvC,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC;AAC1C,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC;AAC1C,MAAM,MAAM,aAAa,GAAG,eAAe,CAAC;AAC5C,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,iDAElD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resumeSignal.js","sourceRoot":"","sources":["../src/resumeSignal.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,YAAY,IAAI,oBAAoB,GACpC,MAAM,+BAA+B,CAAC;AAKvC,MAAM,UAAU,YAAY,CAAC,OAAsB;IAClD,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Effect, Schema } from "effect";
|
|
2
|
+
import type * as Atom from "effect/reactivity/Atom";
|
|
3
|
+
import type { PersistedDraftConfig } from "@shivaedev/form/persistence.ts";
|
|
4
|
+
import type { Decoded, Encoded, FieldFailure, Fields, Form, Services } from "@shivaedev/form/shape.ts";
|
|
5
|
+
import { type AtomServices, type RejectField } from "./fieldRejection.ts";
|
|
6
|
+
export interface SubmissionConfig<TFields extends Fields, A, E, R, TRuntimeError> {
|
|
7
|
+
readonly fields: Schema.Struct<TFields>;
|
|
8
|
+
readonly initialValues: Encoded<TFields>;
|
|
9
|
+
readonly persistedDraft?: PersistedDraftConfig | undefined;
|
|
10
|
+
readonly rejectField: RejectField<TFields, E> | undefined;
|
|
11
|
+
readonly runtime: Atom.AtomRuntime<Services<TFields, R>, TRuntimeError>;
|
|
12
|
+
readonly save: (values: Decoded<TFields>) => Effect.Effect<A, E, AtomServices<R>>;
|
|
13
|
+
}
|
|
14
|
+
export interface Submission<TFields extends Fields, A, E, TRuntimeError> {
|
|
15
|
+
readonly form: Form<TFields, A, E | FieldFailure, TRuntimeError>;
|
|
16
|
+
readonly submitted: () => Encoded<TFields> | undefined;
|
|
17
|
+
}
|
|
18
|
+
export declare function submission<TFields extends Fields, A, E, R, TRuntimeError>(config: SubmissionConfig<TFields, A, E, R, TRuntimeError>): Submission<TFields, A, E, TRuntimeError>;
|
|
19
|
+
//# sourceMappingURL=submission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submission.d.ts","sourceRoot":"","sources":["../src/submission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,KAAK,IAAI,MAAM,wBAAwB,CAAC;AAEpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEvG,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAa,MAAM,qBAAqB,CAAC;AAErF,MAAM,WAAW,gBAAgB,CAAC,OAAO,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IAC1D,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IACxE,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;CAClF;AAED,MAAM,WAAW,UAAU,CAAC,OAAO,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa;IACtE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,aAAa,CAAC,CAAC;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;CACvD;AAED,wBAAgB,UAAU,CAAC,OAAO,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EACxE,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,GACvD,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAc1C"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { form } from "@shivaedev/form/form.ts";
|
|
2
|
+
import { actionTrace } from "#actionTrace.ts";
|
|
3
|
+
import { rejecting } from "./fieldRejection.js";
|
|
4
|
+
export function submission(config) {
|
|
5
|
+
const { fields, initialValues, runtime } = config;
|
|
6
|
+
const save = rejecting(fields, config.save, config.rejectField);
|
|
7
|
+
let submitted;
|
|
8
|
+
const currentForm = form(fields, {
|
|
9
|
+
initialValues,
|
|
10
|
+
onSubmit: (values, submitter, snapshot) => {
|
|
11
|
+
submitted = snapshot;
|
|
12
|
+
return actionTrace(save(values, submitter), "ui.submit");
|
|
13
|
+
},
|
|
14
|
+
persistedDraft: config.persistedDraft,
|
|
15
|
+
runtime,
|
|
16
|
+
});
|
|
17
|
+
return { form: currentForm, submitted: () => submitted };
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=submission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submission.js","sourceRoot":"","sources":["../src/submission.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAuC,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAgBrF,MAAM,UAAU,UAAU,CACzB,MAAyD;IAEzD,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAClD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAChE,IAAI,SAAuC,CAAC;IAC5C,MAAM,WAAW,GAAsD,IAAI,CAAC,MAAM,EAAE;QACnF,aAAa;QACb,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;YACzC,SAAS,GAAG,QAAQ,CAAC;YACrB,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC;QAC1D,CAAC;QACD,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,OAAO;KACP,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;AAC1D,CAAC"}
|