svelte-effect-runtime 1.6.2 → 2.0.0-beta.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/.dist/chunks/client-BeOE81fW.js +577 -0
- package/.dist/chunks/client-BeOE81fW.js.map +1 -0
- package/.dist/chunks/descriptors-CU2g4U_i.js +36 -0
- package/.dist/chunks/descriptors-CU2g4U_i.js.map +1 -0
- package/.dist/chunks/dispatcher-BSg2-ttN.js +339 -0
- package/.dist/chunks/dispatcher-BSg2-ttN.js.map +1 -0
- package/.dist/chunks/preprocess-BZyUYWY7.js +430 -0
- package/.dist/chunks/preprocess-BZyUYWY7.js.map +1 -0
- package/.dist/chunks/transform-BtlxgJrg.js +836 -0
- package/.dist/chunks/transform-BtlxgJrg.js.map +1 -0
- package/.dist/detect.d.ts +34 -0
- package/.dist/detect.js +56 -0
- package/.dist/detect.js.map +1 -0
- package/.dist/dispatcher/deps.d.ts +14 -0
- package/.dist/dispatcher/fibers.d.ts +52 -0
- package/.dist/dispatcher/index.d.ts +138 -0
- package/.dist/dispatcher/types.d.ts +63 -0
- package/.dist/dispatcher.d.ts +2 -0
- package/.dist/dispatcher.js +2 -0
- package/.dist/error.d.ts +77 -0
- package/.dist/generators.d.ts +16 -0
- package/.dist/internal/descriptors.d.ts +17 -0
- package/.dist/internal/generators.d.ts +6 -0
- package/.dist/internal/generators.js +5 -0
- package/.dist/internal/remote-client.d.ts +6 -0
- package/.dist/internal/remote-client.js +2 -0
- package/.dist/internal/remote-server.d.ts +6 -0
- package/.dist/internal/remote-server.js +2 -0
- package/.dist/markup/promise.d.ts +15 -0
- package/.dist/markup/promise.js +26 -0
- package/.dist/markup/promise.js.map +1 -0
- package/.dist/markup/run.d.ts +12 -0
- package/.dist/markup/run.js +21 -0
- package/.dist/markup/run.js.map +1 -0
- package/.dist/markup/transform/apply.d.ts +6 -0
- package/.dist/markup/transform/classify.d.ts +15 -0
- package/.dist/markup/transform/constants.d.ts +5 -0
- package/.dist/markup/transform/emit.d.ts +12 -0
- package/.dist/markup/transform/expressions.d.ts +39 -0
- package/.dist/markup/transform/index.d.ts +19 -0
- package/.dist/markup/transform/scan.d.ts +8 -0
- package/.dist/markup/transform/types.d.ts +64 -0
- package/.dist/markup/transform.d.ts +1 -0
- package/.dist/markup/transform.js +2 -0
- package/.dist/markup/value.d.ts +20 -0
- package/.dist/markup/value.js +32 -0
- package/.dist/markup/value.js.map +1 -0
- package/.dist/mod.d.ts +186 -0
- package/.dist/mod.js +190 -0
- package/.dist/mod.js.map +1 -0
- package/.dist/preprocess/ast.d.ts +51 -0
- package/.dist/preprocess/imports.d.ts +22 -0
- package/.dist/preprocess/index.d.ts +21 -0
- package/.dist/preprocess/lower.d.ts +12 -0
- package/.dist/preprocess/runtime-block.d.ts +8 -0
- package/.dist/preprocess/source.d.ts +29 -0
- package/.dist/preprocess/types.d.ts +70 -0
- package/.dist/preprocess.d.ts +2 -0
- package/.dist/preprocess.js +3 -0
- package/.dist/remote/client/command.d.ts +17 -0
- package/.dist/remote/client/effect.d.ts +15 -0
- package/.dist/remote/client/failures.d.ts +57 -0
- package/.dist/remote/client/form-data.d.ts +8 -0
- package/.dist/remote/client/form-enhance.d.ts +9 -0
- package/.dist/remote/client/form-transport.d.ts +20 -0
- package/.dist/remote/client/form.d.ts +21 -0
- package/.dist/remote/client/index.d.ts +4 -0
- package/.dist/remote/client/query-result.d.ts +14 -0
- package/.dist/remote/client/query.d.ts +57 -0
- package/.dist/remote/client/responses.d.ts +28 -0
- package/.dist/remote/client/types.d.ts +83 -0
- package/.dist/remote/client/utils.d.ts +11 -0
- package/.dist/remote/client.d.ts +2 -0
- package/.dist/remote/client.js +2 -0
- package/.dist/remote/server.d.ts +66 -0
- package/.dist/remote/server.js +104 -0
- package/.dist/remote/server.js.map +1 -0
- package/.dist/remote/shared.d.ts +202 -0
- package/.dist/remote/shared.js +161 -0
- package/.dist/remote/shared.js.map +1 -0
- package/.dist/runtime/preprocess.d.ts +38 -0
- package/.dist/runtime/preprocess.js +54 -0
- package/.dist/runtime/preprocess.js.map +1 -0
- package/.dist/server/effects.d.ts +49 -0
- package/.dist/server/factories.d.ts +97 -0
- package/.dist/server/index.d.ts +3 -0
- package/.dist/server/invalid.d.ts +9 -0
- package/.dist/server/runtime.d.ts +66 -0
- package/.dist/server/schema.d.ts +42 -0
- package/.dist/server/types.d.ts +271 -0
- package/.dist/server/wrappers.d.ts +45 -0
- package/.dist/server.d.ts +2 -0
- package/.dist/server.js +527 -0
- package/.dist/server.js.map +1 -0
- package/.dist/vite.d.ts +42 -0
- package/.dist/vite.js +118 -0
- package/.dist/vite.js.map +1 -0
- package/README.md +2 -0
- package/package.json +66 -101
- package/dist/chunks/client-vV6UAwoP.js +0 -199
- package/dist/chunks/client-vV6UAwoP.js.map +0 -1
- package/dist/chunks/effect-Crj3S8Cg.js +0 -51
- package/dist/chunks/effect-Crj3S8Cg.js.map +0 -1
- package/dist/chunks/effect-compat-BhW0YPIs.js +0 -103
- package/dist/chunks/effect-compat-BhW0YPIs.js.map +0 -1
- package/dist/chunks/magic-string.es-BnGH-5YR.js +0 -1013
- package/dist/chunks/magic-string.es-BnGH-5YR.js.map +0 -1
- package/dist/chunks/markup-CkPUZIJt.js +0 -13390
- package/dist/chunks/markup-CkPUZIJt.js.map +0 -1
- package/dist/chunks/preprocess-BFePqOC6.js +0 -49
- package/dist/chunks/preprocess-BFePqOC6.js.map +0 -1
- package/dist/chunks/server-Dea1CJuY.js +0 -704
- package/dist/chunks/server-Dea1CJuY.js.map +0 -1
- package/dist/chunks/v3-D0c0MKPf.js +0 -1
- package/dist/chunks/v4-MMhHmzIG.js +0 -1
- package/dist/chunks/vite-BlUTKv2u.js +0 -152
- package/dist/chunks/vite-BlUTKv2u.js.map +0 -1
- package/dist/client.d.ts +0 -1
- package/dist/client.js +0 -2
- package/dist/effect.d.ts +0 -1
- package/dist/effect.js +0 -2
- package/dist/internal/app-server-shim.d.ts +0 -8
- package/dist/internal/effect-compat.d.ts +0 -21
- package/dist/internal/markup.d.ts +0 -11
- package/dist/internal/markup.js +0 -2
- package/dist/internal/remote-client.d.ts +0 -36
- package/dist/internal/remote-client.js +0 -527
- package/dist/internal/remote-client.js.map +0 -1
- package/dist/internal/remote-shared.d.ts +0 -186
- package/dist/internal/remote-shared.js +0 -122
- package/dist/internal/remote-shared.js.map +0 -1
- package/dist/internal/transform.d.ts +0 -18
- package/dist/internal/transform.js +0 -418
- package/dist/internal/transform.js.map +0 -1
- package/dist/language-server.d.ts +0 -9
- package/dist/language-server.js +0 -4
- package/dist/mod.d.ts +0 -22
- package/dist/mod.js +0 -3
- package/dist/preprocess.d.ts +0 -29
- package/dist/preprocess.js +0 -20
- package/dist/preprocess.js.map +0 -1
- package/dist/root-node.d.ts +0 -1
- package/dist/root-node.js +0 -63
- package/dist/root-node.js.map +0 -1
- package/dist/server.d.ts +0 -81
- package/dist/server.js +0 -85
- package/dist/server.js.map +0 -1
- package/dist/v3/client.d.ts +0 -117
- package/dist/v3/effect.d.ts +0 -17
- package/dist/v3/mod.d.ts +0 -27
- package/dist/v3/preprocess.d.ts +0 -28
- package/dist/v3/root-node.d.ts +0 -59
- package/dist/v3/server.d.ts +0 -297
- package/dist/v3/vite.d.ts +0 -46
- package/dist/v4/client.d.ts +0 -2
- package/dist/v4/effect.d.ts +0 -24
- package/dist/v4/effect.js +0 -19
- package/dist/v4/effect.js.map +0 -1
- package/dist/v4/mod.d.ts +0 -27
- package/dist/v4/mod.js +0 -3
- package/dist/v4/preprocess.d.ts +0 -34
- package/dist/v4/preprocess.js +0 -32
- package/dist/v4/preprocess.js.map +0 -1
- package/dist/v4/root-node.d.ts +0 -59
- package/dist/v4/root-node.js +0 -4
- package/dist/v4/server.d.ts +0 -340
- package/dist/v4/server.js +0 -71
- package/dist/v4/server.js.map +0 -1
- package/dist/v4/vite.d.ts +0 -34
- package/dist/v4/vite.js +0 -31
- package/dist/v4/vite.js.map +0 -1
- package/dist/vite.d.ts +0 -31
- package/dist/vite.js +0 -24
- package/dist/vite.js.map +0 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
//#region src/internal/descriptors.ts
|
|
2
|
+
const default_excluded_descriptor_keys = new Set([
|
|
3
|
+
"length",
|
|
4
|
+
"name",
|
|
5
|
+
"prototype"
|
|
6
|
+
]);
|
|
7
|
+
/**
|
|
8
|
+
* Copies own property descriptors from a native helper to a wrapper while
|
|
9
|
+
* skipping function metadata and any caller-specific keys.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* copy_property_descriptors(native_remote, wrapped_remote);
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @since 2.0.0
|
|
17
|
+
* @param source - Source object or function whose descriptors should be
|
|
18
|
+
* mirrored.
|
|
19
|
+
* @param target - Wrapper object or function that receives copied descriptors.
|
|
20
|
+
* @param exclude - Additional property keys that should not be copied.
|
|
21
|
+
* @returns Nothing.
|
|
22
|
+
*/
|
|
23
|
+
function copy_property_descriptors(source, target, exclude = default_excluded_descriptor_keys) {
|
|
24
|
+
if (typeof source !== "object" && typeof source !== "function") return;
|
|
25
|
+
if (source === null) return;
|
|
26
|
+
for (const key of Reflect.ownKeys(source)) {
|
|
27
|
+
if (default_excluded_descriptor_keys.has(key) || exclude.has(key)) continue;
|
|
28
|
+
const descriptor = Object.getOwnPropertyDescriptor(source, key);
|
|
29
|
+
if (!descriptor) continue;
|
|
30
|
+
Object.defineProperty(target, key, descriptor);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { copy_property_descriptors as t };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=descriptors-CU2g4U_i.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptors-CU2g4U_i.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/internal/descriptors.ts"],"sourcesContent":["const default_excluded_descriptor_keys = new Set<PropertyKey>([\n \"length\",\n \"name\",\n \"prototype\",\n]);\n\n/**\n * Copies own property descriptors from a native helper to a wrapper while\n * skipping function metadata and any caller-specific keys.\n *\n * @example\n * ```ts\n * copy_property_descriptors(native_remote, wrapped_remote);\n * ```\n *\n * @since 2.0.0\n * @param source - Source object or function whose descriptors should be\n * mirrored.\n * @param target - Wrapper object or function that receives copied descriptors.\n * @param exclude - Additional property keys that should not be copied.\n * @returns Nothing.\n */\nexport function copy_property_descriptors(\n source: unknown,\n target: object,\n exclude: ReadonlySet<PropertyKey> = default_excluded_descriptor_keys,\n): void {\n if (typeof source !== \"object\" && typeof source !== \"function\") {\n return;\n }\n\n if (source === null) {\n return;\n }\n\n for (const key of Reflect.ownKeys(source)) {\n if (default_excluded_descriptor_keys.has(key) || exclude.has(key)) {\n continue;\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(source, key);\n\n if (!descriptor) {\n continue;\n }\n\n Object.defineProperty(target, key, descriptor);\n }\n}\n"],"mappings":";AAAA,MAAM,mCAAmC,IAAI,IAAiB;CAC5D;CACA;CACA;CACD,CAAC;;;;;;;;;;;;;;;;;AAkBF,SAAgB,0BACd,QACA,QACA,UAAoC,kCAC9B;AACN,KAAI,OAAO,WAAW,YAAY,OAAO,WAAW,WAClD;AAGF,KAAI,WAAW,KACb;AAGF,MAAK,MAAM,OAAO,QAAQ,QAAQ,OAAO,EAAE;AACzC,MAAI,iCAAiC,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,CAC/D;EAGF,MAAM,aAAa,OAAO,yBAAyB,QAAQ,IAAI;AAE/D,MAAI,CAAC,WACH;AAGF,SAAO,eAAe,QAAQ,KAAK,WAAW"}
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
import { Cause, Effect, Exit, Fiber, Layer, ManagedRuntime } from "effect";
|
|
2
|
+
//#region src/dispatcher/fibers.ts
|
|
3
|
+
/**
|
|
4
|
+
* Interrupts a dispatcher fiber through its managed runtime.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* interrupt_fiber(runtime, fiber);
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* @since 2.0.0
|
|
12
|
+
* @param runtime - Managed runtime that owns the fiber.
|
|
13
|
+
* @param fiber - Fiber to interrupt.
|
|
14
|
+
* @returns Nothing.
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
function interrupt_fiber(runtime, fiber) {
|
|
18
|
+
runtime.runFork(Fiber.interrupt(fiber));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Watches a dispatcher fiber, runs completion callbacks, and surfaces
|
|
22
|
+
* non-interrupt failures on the microtask queue.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* watch_fiber_exit({ runtime, fiber, on_complete: cleanup });
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @since 2.0.0
|
|
30
|
+
* @param options - Runtime, fiber, and callbacks used for the watcher.
|
|
31
|
+
* @returns Nothing.
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
function watch_fiber_exit(options) {
|
|
35
|
+
const { runtime, fiber, on_complete, on_success } = options;
|
|
36
|
+
runtime.runFork(Effect.flatMap(Fiber.await(fiber), (exit) => Effect.sync(() => {
|
|
37
|
+
on_complete?.();
|
|
38
|
+
if (Exit.isSuccess(exit)) {
|
|
39
|
+
on_success?.(exit.value);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (!Cause.hasInterruptsOnly(exit.cause)) queueMicrotask(() => {
|
|
43
|
+
throw Cause.squash(exit.cause);
|
|
44
|
+
});
|
|
45
|
+
})));
|
|
46
|
+
}
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region src/dispatcher/deps.ts
|
|
49
|
+
const object_dep_ids = /* @__PURE__ */ new WeakMap();
|
|
50
|
+
const symbol_dep_ids = /* @__PURE__ */ new Map();
|
|
51
|
+
let next_object_dep_id = 0;
|
|
52
|
+
let next_symbol_dep_id = 0;
|
|
53
|
+
/**
|
|
54
|
+
* Builds a deterministic cache key from a dependency array.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* const key = hash_deps([user_id, filters]);
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* @since 2.0.0
|
|
62
|
+
* @param deps - Dependency array to encode for cache lookup.
|
|
63
|
+
* @returns A structured string key suitable for Map lookups.
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
function hash_deps(deps) {
|
|
67
|
+
const parts = deps.map((dep) => {
|
|
68
|
+
if (dep === null) return "l:null";
|
|
69
|
+
if (dep === void 0) return "u:undefined";
|
|
70
|
+
const type = typeof dep;
|
|
71
|
+
if (type === "string") return ["s", dep];
|
|
72
|
+
if (type === "number") return `n:${Object.is(dep, -0) ? "-0" : String(dep)}`;
|
|
73
|
+
if (type === "bigint") return `b:${dep}`;
|
|
74
|
+
if (type === "boolean") return dep ? "t:true" : "f:false";
|
|
75
|
+
if (type === "symbol") return hash_symbol_dep(dep);
|
|
76
|
+
return hash_object_dep(dep);
|
|
77
|
+
});
|
|
78
|
+
return JSON.stringify(parts);
|
|
79
|
+
}
|
|
80
|
+
function hash_symbol_dep(dep) {
|
|
81
|
+
let id = symbol_dep_ids.get(dep);
|
|
82
|
+
if (id === void 0) {
|
|
83
|
+
next_symbol_dep_id += 1;
|
|
84
|
+
id = next_symbol_dep_id;
|
|
85
|
+
symbol_dep_ids.set(dep, id);
|
|
86
|
+
}
|
|
87
|
+
return `y:${id}`;
|
|
88
|
+
}
|
|
89
|
+
function hash_object_dep(dep) {
|
|
90
|
+
let id = object_dep_ids.get(dep);
|
|
91
|
+
if (id === void 0) {
|
|
92
|
+
next_object_dep_id += 1;
|
|
93
|
+
id = next_object_dep_id;
|
|
94
|
+
object_dep_ids.set(dep, id);
|
|
95
|
+
}
|
|
96
|
+
return `o:${id}`;
|
|
97
|
+
}
|
|
98
|
+
//#endregion
|
|
99
|
+
//#region src/dispatcher/index.ts
|
|
100
|
+
/**
|
|
101
|
+
* Unified effect block dispatcher. Manages the fiber lifecycle of every
|
|
102
|
+
* effect block and wires results into reactive channels.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```ts
|
|
106
|
+
* const dispatcher = new Dispatcher();
|
|
107
|
+
* const cancel = dispatcher.fork(Effect.log("running"));
|
|
108
|
+
* cancel();
|
|
109
|
+
* ```
|
|
110
|
+
*
|
|
111
|
+
* @since 2.0.0
|
|
112
|
+
* @internal
|
|
113
|
+
*/
|
|
114
|
+
var Dispatcher = class Dispatcher {
|
|
115
|
+
/** The underlying Effect runtime that executes forked programs. */
|
|
116
|
+
#runtime;
|
|
117
|
+
/** Active fibers keyed by cache id or generated fork id. */
|
|
118
|
+
#fibers = /* @__PURE__ */ new Map();
|
|
119
|
+
/** Resolved values and pending promises keyed by cache id. */
|
|
120
|
+
#values = /* @__PURE__ */ new Map();
|
|
121
|
+
/** Current cache key per value block id. */
|
|
122
|
+
#value_ids = /* @__PURE__ */ new Map();
|
|
123
|
+
/** Whether dispose has been called, blocking new work. */
|
|
124
|
+
#disposed = false;
|
|
125
|
+
/** Monotonically increasing counter for unnamed fiber keys. */
|
|
126
|
+
#next_fiber_id = 0;
|
|
127
|
+
/**
|
|
128
|
+
* Creates a dispatcher with an optional layer and installs it as the global
|
|
129
|
+
* singleton returned by {@link get_dispatcher}.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```ts
|
|
133
|
+
* const dispatcher = Dispatcher.make(Db.Live);
|
|
134
|
+
* ```
|
|
135
|
+
*
|
|
136
|
+
* @since 2.0.0
|
|
137
|
+
* @param layer - Optional Effect layer to provide to the runtime.
|
|
138
|
+
* @returns The newly created dispatcher.
|
|
139
|
+
*/
|
|
140
|
+
static make(layer) {
|
|
141
|
+
const dispatcher = new Dispatcher(ManagedRuntime.make(layer ?? Layer.empty));
|
|
142
|
+
current_dispatcher = dispatcher;
|
|
143
|
+
return dispatcher;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Creates a dispatcher backed by the provided managed runtime.
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```ts
|
|
150
|
+
* const dispatcher = new Dispatcher(runtime);
|
|
151
|
+
* ```
|
|
152
|
+
*
|
|
153
|
+
* @since 2.0.0
|
|
154
|
+
* @param runtime - Managed runtime to use, or an empty-layer runtime when
|
|
155
|
+
* omitted.
|
|
156
|
+
*/
|
|
157
|
+
constructor(runtime) {
|
|
158
|
+
this.#runtime = runtime ?? ManagedRuntime.make(Layer.empty);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Forks an effect as a managed fiber and returns a cleanup function.
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```ts
|
|
165
|
+
* const dispose = dispatcher.fork(Effect.log("clicked"));
|
|
166
|
+
* ```
|
|
167
|
+
*
|
|
168
|
+
* @since 2.0.0
|
|
169
|
+
* @param effect - Effect to fork.
|
|
170
|
+
* @returns A function that interrupts the fiber.
|
|
171
|
+
*/
|
|
172
|
+
fork(effect) {
|
|
173
|
+
if (this.#disposed) return () => {};
|
|
174
|
+
const fiber = this.#runtime.runFork(effect);
|
|
175
|
+
const key = `fork:${this.#next_fiber_id}`;
|
|
176
|
+
this.#next_fiber_id += 1;
|
|
177
|
+
this.#fibers.set(key, fiber);
|
|
178
|
+
watch_fiber_exit({
|
|
179
|
+
runtime: this.#runtime,
|
|
180
|
+
fiber,
|
|
181
|
+
on_complete: () => this.#fibers.delete(key)
|
|
182
|
+
});
|
|
183
|
+
let disposed = false;
|
|
184
|
+
return () => {
|
|
185
|
+
if (disposed) return;
|
|
186
|
+
disposed = true;
|
|
187
|
+
interrupt_fiber(this.#runtime, fiber);
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Forks an effect and exposes its result as a cached reactive value.
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```ts
|
|
195
|
+
* const user = dispatcher.value({ id, deps, fallback, factory });
|
|
196
|
+
* ```
|
|
197
|
+
*
|
|
198
|
+
* @since 2.0.0
|
|
199
|
+
* @param options - Value id, dependency array, fallback, and effect factory.
|
|
200
|
+
* @returns The cached value if resolved, otherwise the fallback.
|
|
201
|
+
*/
|
|
202
|
+
value(options) {
|
|
203
|
+
const cache_key = `${options.id}::${hash_deps(options.deps)}`;
|
|
204
|
+
const old_key = this.#value_ids.get(options.id);
|
|
205
|
+
if (old_key !== void 0 && old_key !== cache_key) this.#interrupt_cached_fiber(old_key);
|
|
206
|
+
this.#value_ids.set(options.id, cache_key);
|
|
207
|
+
if (this.#should_start_value_fiber(cache_key)) this.#start_value_fiber(cache_key, options);
|
|
208
|
+
if (this.#values.has(cache_key)) return this.#values.get(cache_key);
|
|
209
|
+
return options.fallback;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Forks an effect and exposes its completion as a cached promise.
|
|
213
|
+
*
|
|
214
|
+
* @example
|
|
215
|
+
* ```ts
|
|
216
|
+
* const promise = dispatcher.promise({ id, deps, factory });
|
|
217
|
+
* ```
|
|
218
|
+
*
|
|
219
|
+
* @since 2.0.0
|
|
220
|
+
* @param options - Promise id, dependency array, and effect factory.
|
|
221
|
+
* @returns A promise that resolves with the effect result.
|
|
222
|
+
*/
|
|
223
|
+
promise(options) {
|
|
224
|
+
if (this.#disposed) return Promise.reject(/* @__PURE__ */ new Error("Dispatcher has been disposed"));
|
|
225
|
+
const cache_key = `promise:${options.id}::${hash_deps(options.deps)}`;
|
|
226
|
+
const existing = this.#values.get(cache_key);
|
|
227
|
+
if (existing instanceof Promise) return existing;
|
|
228
|
+
const program = Effect.gen(function* () {
|
|
229
|
+
return yield* Effect.gen(options.factory);
|
|
230
|
+
});
|
|
231
|
+
const promise = this.#runtime.runPromise(program).then((value) => {
|
|
232
|
+
this.#values.delete(cache_key);
|
|
233
|
+
return value;
|
|
234
|
+
}).catch((error) => {
|
|
235
|
+
this.#values.delete(cache_key);
|
|
236
|
+
throw error;
|
|
237
|
+
});
|
|
238
|
+
this.#values.set(cache_key, promise);
|
|
239
|
+
return promise;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Runs an event-handler effect and surfaces failures to Svelte.
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```ts
|
|
246
|
+
* await dispatcher.run(Effect.log("submit"));
|
|
247
|
+
* ```
|
|
248
|
+
*
|
|
249
|
+
* @since 2.0.0
|
|
250
|
+
* @param effect - Effect to execute.
|
|
251
|
+
* @returns A promise that resolves or rejects when the effect completes.
|
|
252
|
+
*/
|
|
253
|
+
run(effect) {
|
|
254
|
+
if (this.#disposed) return Promise.reject(/* @__PURE__ */ new Error("Dispatcher has been disposed"));
|
|
255
|
+
return this.#runtime.runPromise(effect).catch((error) => {
|
|
256
|
+
queueMicrotask(() => {
|
|
257
|
+
throw error;
|
|
258
|
+
});
|
|
259
|
+
throw error;
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Cancels all running fibers and releases cached values.
|
|
264
|
+
*
|
|
265
|
+
* @example
|
|
266
|
+
* ```ts
|
|
267
|
+
* dispatcher.dispose();
|
|
268
|
+
* ```
|
|
269
|
+
*
|
|
270
|
+
* @since 2.0.0
|
|
271
|
+
* @returns Nothing.
|
|
272
|
+
*/
|
|
273
|
+
dispose() {
|
|
274
|
+
this.#disposed = true;
|
|
275
|
+
for (const fiber of this.#fibers.values()) interrupt_fiber(this.#runtime, fiber);
|
|
276
|
+
this.#fibers.clear();
|
|
277
|
+
this.#values.clear();
|
|
278
|
+
this.#value_ids.clear();
|
|
279
|
+
}
|
|
280
|
+
#interrupt_cached_fiber(cache_key) {
|
|
281
|
+
const old_fiber = this.#fibers.get(cache_key);
|
|
282
|
+
if (!old_fiber) return;
|
|
283
|
+
interrupt_fiber(this.#runtime, old_fiber);
|
|
284
|
+
this.#fibers.delete(cache_key);
|
|
285
|
+
}
|
|
286
|
+
#should_start_value_fiber(cache_key) {
|
|
287
|
+
return !this.#disposed && !this.#fibers.has(cache_key) && !this.#values.has(cache_key);
|
|
288
|
+
}
|
|
289
|
+
#start_value_fiber(cache_key, options) {
|
|
290
|
+
const program = Effect.gen(function* () {
|
|
291
|
+
return yield* Effect.gen(options.factory);
|
|
292
|
+
});
|
|
293
|
+
const fiber = this.#runtime.runFork(program);
|
|
294
|
+
this.#fibers.set(cache_key, fiber);
|
|
295
|
+
watch_fiber_exit({
|
|
296
|
+
runtime: this.#runtime,
|
|
297
|
+
fiber,
|
|
298
|
+
on_complete: () => this.#fibers.delete(cache_key),
|
|
299
|
+
on_success: (value) => this.#values.set(cache_key, value)
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
let current_dispatcher = null;
|
|
304
|
+
/**
|
|
305
|
+
* Resolves the active dispatcher, creating a default one if necessary.
|
|
306
|
+
*
|
|
307
|
+
* @example
|
|
308
|
+
* ```ts
|
|
309
|
+
* const dispatcher = get_dispatcher();
|
|
310
|
+
* ```
|
|
311
|
+
*
|
|
312
|
+
* @since 2.0.0
|
|
313
|
+
* @returns The active dispatcher singleton.
|
|
314
|
+
* @internal
|
|
315
|
+
*/
|
|
316
|
+
function get_dispatcher() {
|
|
317
|
+
current_dispatcher ??= new Dispatcher();
|
|
318
|
+
return current_dispatcher;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Resets the internal singleton dispatcher used by source-level tests.
|
|
322
|
+
*
|
|
323
|
+
* @example
|
|
324
|
+
* ```ts
|
|
325
|
+
* reset_dispatcher();
|
|
326
|
+
* ```
|
|
327
|
+
*
|
|
328
|
+
* @since 2.0.0
|
|
329
|
+
* @returns Nothing.
|
|
330
|
+
* @internal
|
|
331
|
+
*/
|
|
332
|
+
function reset_dispatcher() {
|
|
333
|
+
current_dispatcher?.dispose();
|
|
334
|
+
current_dispatcher = null;
|
|
335
|
+
}
|
|
336
|
+
//#endregion
|
|
337
|
+
export { get_dispatcher as n, reset_dispatcher as r, Dispatcher as t };
|
|
338
|
+
|
|
339
|
+
//# sourceMappingURL=dispatcher-BSg2-ttN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher-BSg2-ttN.js","names":["#runtime","#disposed","#next_fiber_id","#fibers","#value_ids","#interrupt_cached_fiber","#should_start_value_fiber","#start_value_fiber","#values"],"sources":["../../../modules/svelte-effect-runtime/src/dispatcher/fibers.ts","../../../modules/svelte-effect-runtime/src/dispatcher/deps.ts","../../../modules/svelte-effect-runtime/src/dispatcher/index.ts"],"sourcesContent":["import { Cause, Effect, Exit, Fiber } from \"effect\";\nimport type { Fiber as FiberType } from \"effect/Fiber\";\nimport type { ManagedRuntime as ManagedRuntimeType } from \"effect/ManagedRuntime\";\n\n/**\n * Callbacks fired when a watched dispatcher fiber completes.\n *\n * @example\n * ```ts\n * const callbacks: FiberWatchCallbacks<number> = {\n * on_success: (value) => cache.set(key, value),\n * };\n * ```\n *\n * @since 2.0.0\n * @internal\n */\nexport interface FiberWatchCallbacks<A> {\n on_complete?: () => void;\n on_success?: (value: A) => void;\n}\n\n/**\n * Interrupts a dispatcher fiber through its managed runtime.\n *\n * @example\n * ```ts\n * interrupt_fiber(runtime, fiber);\n * ```\n *\n * @since 2.0.0\n * @param runtime - Managed runtime that owns the fiber.\n * @param fiber - Fiber to interrupt.\n * @returns Nothing.\n * @internal\n */\nexport function interrupt_fiber(\n runtime: ManagedRuntimeType<unknown, unknown>,\n fiber: FiberType<unknown, unknown>,\n): void {\n runtime.runFork(\n Fiber.interrupt(fiber) as Effect.Effect<unknown, unknown, unknown>,\n );\n}\n\n/**\n * Watches a dispatcher fiber, runs completion callbacks, and surfaces\n * non-interrupt failures on the microtask queue.\n *\n * @example\n * ```ts\n * watch_fiber_exit({ runtime, fiber, on_complete: cleanup });\n * ```\n *\n * @since 2.0.0\n * @param options - Runtime, fiber, and callbacks used for the watcher.\n * @returns Nothing.\n * @internal\n */\nexport function watch_fiber_exit<A>(\n options: {\n runtime: ManagedRuntimeType<unknown, unknown>;\n fiber: FiberType<unknown, unknown>;\n } & FiberWatchCallbacks<A>,\n): void {\n const { runtime, fiber, on_complete, on_success } = options;\n\n runtime.runFork(\n Effect.flatMap(Fiber.await(fiber), (exit) =>\n Effect.sync(() => {\n on_complete?.();\n\n if (Exit.isSuccess(exit)) {\n on_success?.(exit.value as A);\n\n return;\n }\n\n if (!Cause.hasInterruptsOnly(exit.cause)) {\n queueMicrotask(() => {\n throw Cause.squash(exit.cause);\n });\n }\n })),\n );\n}\n","const object_dep_ids = new WeakMap<object, number>();\nconst symbol_dep_ids = new Map<symbol, number>();\n\nlet next_object_dep_id = 0;\nlet next_symbol_dep_id = 0;\n\n/**\n * Builds a deterministic cache key from a dependency array.\n *\n * @example\n * ```ts\n * const key = hash_deps([user_id, filters]);\n * ```\n *\n * @since 2.0.0\n * @param deps - Dependency array to encode for cache lookup.\n * @returns A structured string key suitable for Map lookups.\n * @internal\n */\nexport function hash_deps(deps: readonly unknown[]): string {\n const parts = deps.map((dep) => {\n if (dep === null) {\n return \"l:null\";\n }\n\n if (dep === undefined) {\n return \"u:undefined\";\n }\n\n const type = typeof dep;\n\n if (type === \"string\") {\n return [\"s\", dep];\n }\n\n if (type === \"number\") {\n return `n:${Object.is(dep, -0) ? \"-0\" : String(dep)}`;\n }\n\n if (type === \"bigint\") {\n return `b:${dep}`;\n }\n\n if (type === \"boolean\") {\n return dep ? \"t:true\" : \"f:false\";\n }\n\n if (type === \"symbol\") {\n return hash_symbol_dep(dep as symbol);\n }\n\n return hash_object_dep(dep as object);\n });\n\n return JSON.stringify(parts);\n}\n\nfunction hash_symbol_dep(dep: symbol): string {\n let id = symbol_dep_ids.get(dep);\n\n if (id === undefined) {\n next_symbol_dep_id += 1;\n id = next_symbol_dep_id;\n symbol_dep_ids.set(dep, id);\n }\n\n return `y:${id}`;\n}\n\nfunction hash_object_dep(dep: object): string {\n let id = object_dep_ids.get(dep);\n\n if (id === undefined) {\n next_object_dep_id += 1;\n id = next_object_dep_id;\n object_dep_ids.set(dep, id);\n }\n\n return `o:${id}`;\n}\n","import { Effect, Layer, ManagedRuntime } from \"effect\";\nimport type { Fiber as FiberType } from \"effect/Fiber\";\nimport type { ManagedRuntime as ManagedRuntimeType } from \"effect/ManagedRuntime\";\n\nimport { interrupt_fiber, watch_fiber_exit } from \"./fibers.ts\";\nimport { hash_deps } from \"./deps.ts\";\nimport type { Dispose, PromiseOptions, ValueOptions } from \"./types.ts\";\n\nexport type { Dispose, PromiseOptions, ValueOptions } from \"./types.ts\";\n\n/**\n * Unified effect block dispatcher. Manages the fiber lifecycle of every\n * effect block and wires results into reactive channels.\n *\n * @example\n * ```ts\n * const dispatcher = new Dispatcher();\n * const cancel = dispatcher.fork(Effect.log(\"running\"));\n * cancel();\n * ```\n *\n * @since 2.0.0\n * @internal\n */\nexport class Dispatcher {\n /** The underlying Effect runtime that executes forked programs. */\n #runtime: ManagedRuntimeType<unknown, unknown>;\n /** Active fibers keyed by cache id or generated fork id. */\n #fibers = new Map<string, FiberType<unknown, unknown>>();\n /** Resolved values and pending promises keyed by cache id. */\n #values = new Map<string, unknown>();\n /** Current cache key per value block id. */\n #value_ids = new Map<string, string>();\n /** Whether dispose has been called, blocking new work. */\n #disposed = false;\n /** Monotonically increasing counter for unnamed fiber keys. */\n #next_fiber_id = 0;\n\n /**\n * Creates a dispatcher with an optional layer and installs it as the global\n * singleton returned by {@link get_dispatcher}.\n *\n * @example\n * ```ts\n * const dispatcher = Dispatcher.make(Db.Live);\n * ```\n *\n * @since 2.0.0\n * @param layer - Optional Effect layer to provide to the runtime.\n * @returns The newly created dispatcher.\n */\n static make<R = never>(\n layer?: Layer.Layer<R>,\n ): Dispatcher {\n const runtime = ManagedRuntime.make(\n layer ?? (Layer.empty as unknown as Layer.Layer<R>),\n );\n\n const dispatcher = new Dispatcher(\n runtime as ManagedRuntimeType<unknown, unknown>,\n );\n current_dispatcher = dispatcher;\n\n return dispatcher;\n }\n\n /**\n * Creates a dispatcher backed by the provided managed runtime.\n *\n * @example\n * ```ts\n * const dispatcher = new Dispatcher(runtime);\n * ```\n *\n * @since 2.0.0\n * @param runtime - Managed runtime to use, or an empty-layer runtime when\n * omitted.\n */\n constructor(runtime?: ManagedRuntimeType<unknown, unknown>) {\n this.#runtime = runtime ??\n ManagedRuntime.make(Layer.empty) as unknown as ManagedRuntimeType<\n unknown,\n unknown\n >;\n }\n\n /**\n * Forks an effect as a managed fiber and returns a cleanup function.\n *\n * @example\n * ```ts\n * const dispose = dispatcher.fork(Effect.log(\"clicked\"));\n * ```\n *\n * @since 2.0.0\n * @param effect - Effect to fork.\n * @returns A function that interrupts the fiber.\n */\n fork<A, E, R>(effect: Effect.Effect<A, E, R>): Dispose {\n if (this.#disposed) {\n return () => {};\n }\n\n const fiber = this.#runtime.runFork(\n effect as Effect.Effect<unknown, unknown, unknown>,\n );\n const key = `fork:${this.#next_fiber_id}`;\n\n this.#next_fiber_id += 1;\n this.#fibers.set(key, fiber);\n watch_fiber_exit({\n runtime: this.#runtime,\n fiber,\n on_complete: () => this.#fibers.delete(key),\n });\n\n let disposed = false;\n\n return (): void => {\n if (disposed) {\n return;\n }\n\n disposed = true;\n interrupt_fiber(this.#runtime, fiber);\n };\n }\n\n /**\n * Forks an effect and exposes its result as a cached reactive value.\n *\n * @example\n * ```ts\n * const user = dispatcher.value({ id, deps, fallback, factory });\n * ```\n *\n * @since 2.0.0\n * @param options - Value id, dependency array, fallback, and effect factory.\n * @returns The cached value if resolved, otherwise the fallback.\n */\n value<A>(options: ValueOptions<A>): A {\n const cache_key = `${options.id}::${hash_deps(options.deps)}`;\n const old_key = this.#value_ids.get(options.id);\n\n if (old_key !== undefined && old_key !== cache_key) {\n this.#interrupt_cached_fiber(old_key);\n }\n\n this.#value_ids.set(options.id, cache_key);\n\n if (this.#should_start_value_fiber(cache_key)) {\n this.#start_value_fiber(cache_key, options);\n }\n\n if (this.#values.has(cache_key)) {\n return this.#values.get(cache_key) as A;\n }\n\n return options.fallback;\n }\n\n /**\n * Forks an effect and exposes its completion as a cached promise.\n *\n * @example\n * ```ts\n * const promise = dispatcher.promise({ id, deps, factory });\n * ```\n *\n * @since 2.0.0\n * @param options - Promise id, dependency array, and effect factory.\n * @returns A promise that resolves with the effect result.\n */\n promise<A>(options: PromiseOptions<A>): Promise<A> {\n if (this.#disposed) {\n return Promise.reject(new Error(\"Dispatcher has been disposed\"));\n }\n\n const cache_key = `promise:${options.id}::${hash_deps(options.deps)}`;\n const existing = this.#values.get(cache_key);\n\n if (existing instanceof Promise) {\n return existing as Promise<A>;\n }\n\n const program = Effect.gen(function* () {\n const result = yield* Effect.gen(options.factory);\n\n return result;\n });\n const promise = this.#runtime\n .runPromise(program as Effect.Effect<unknown, unknown, unknown>)\n .then((value) => {\n this.#values.delete(cache_key);\n\n return value;\n })\n .catch((error: unknown) => {\n this.#values.delete(cache_key);\n\n throw error;\n }) as Promise<A>;\n\n this.#values.set(cache_key, promise);\n\n return promise;\n }\n\n /**\n * Runs an event-handler effect and surfaces failures to Svelte.\n *\n * @example\n * ```ts\n * await dispatcher.run(Effect.log(\"submit\"));\n * ```\n *\n * @since 2.0.0\n * @param effect - Effect to execute.\n * @returns A promise that resolves or rejects when the effect completes.\n */\n run<A, E, R>(effect: Effect.Effect<A, E, R>): Promise<A> {\n if (this.#disposed) {\n return Promise.reject(new Error(\"Dispatcher has been disposed\"));\n }\n\n return this.#runtime\n .runPromise(effect as Effect.Effect<unknown, unknown, unknown>)\n .catch((error: unknown) => {\n queueMicrotask(() => {\n throw error;\n });\n\n throw error;\n }) as Promise<A>;\n }\n\n /**\n * Cancels all running fibers and releases cached values.\n *\n * @example\n * ```ts\n * dispatcher.dispose();\n * ```\n *\n * @since 2.0.0\n * @returns Nothing.\n */\n dispose(): void {\n this.#disposed = true;\n\n for (const fiber of this.#fibers.values()) {\n interrupt_fiber(this.#runtime, fiber);\n }\n\n this.#fibers.clear();\n this.#values.clear();\n this.#value_ids.clear();\n }\n\n #interrupt_cached_fiber(cache_key: string): void {\n const old_fiber = this.#fibers.get(cache_key);\n\n if (!old_fiber) {\n return;\n }\n\n interrupt_fiber(this.#runtime, old_fiber);\n this.#fibers.delete(cache_key);\n }\n\n #should_start_value_fiber(cache_key: string): boolean {\n return (\n !this.#disposed &&\n !this.#fibers.has(cache_key) &&\n !this.#values.has(cache_key)\n );\n }\n\n #start_value_fiber<A>(cache_key: string, options: ValueOptions<A>): void {\n const program = Effect.gen(function* () {\n const result = yield* Effect.gen(options.factory);\n\n return result;\n });\n const fiber = this.#runtime.runFork(\n program as Effect.Effect<unknown, unknown, unknown>,\n );\n\n this.#fibers.set(cache_key, fiber);\n watch_fiber_exit({\n runtime: this.#runtime,\n fiber,\n on_complete: () => this.#fibers.delete(cache_key),\n on_success: (value) => this.#values.set(cache_key, value),\n });\n }\n}\n\nlet current_dispatcher: Dispatcher | null = null;\n\n/**\n * Resolves the active dispatcher, creating a default one if necessary.\n *\n * @example\n * ```ts\n * const dispatcher = get_dispatcher();\n * ```\n *\n * @since 2.0.0\n * @returns The active dispatcher singleton.\n * @internal\n */\nexport function get_dispatcher(): Dispatcher {\n current_dispatcher ??= new Dispatcher();\n\n return current_dispatcher;\n}\n\n/**\n * Resets the internal singleton dispatcher used by source-level tests.\n *\n * @example\n * ```ts\n * reset_dispatcher();\n * ```\n *\n * @since 2.0.0\n * @returns Nothing.\n * @internal\n */\nexport function reset_dispatcher(): void {\n current_dispatcher?.dispose();\n current_dispatcher = null;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAoCA,SAAgB,gBACd,SACA,OACM;AACN,SAAQ,QACN,MAAM,UAAU,MAAM,CACvB;;;;;;;;;;;;;;;;AAiBH,SAAgB,iBACd,SAIM;CACN,MAAM,EAAE,SAAS,OAAO,aAAa,eAAe;AAEpD,SAAQ,QACN,OAAO,QAAQ,MAAM,MAAM,MAAM,GAAG,SAClC,OAAO,WAAW;AAChB,iBAAe;AAEf,MAAI,KAAK,UAAU,KAAK,EAAE;AACxB,gBAAa,KAAK,MAAW;AAE7B;;AAGF,MAAI,CAAC,MAAM,kBAAkB,KAAK,MAAM,CACtC,sBAAqB;AACnB,SAAM,MAAM,OAAO,KAAK,MAAM;IAC9B;GAEJ,CAAC,CACN;;;;ACpFH,MAAM,iCAAiB,IAAI,SAAyB;AACpD,MAAM,iCAAiB,IAAI,KAAqB;AAEhD,IAAI,qBAAqB;AACzB,IAAI,qBAAqB;;;;;;;;;;;;;;AAezB,SAAgB,UAAU,MAAkC;CAC1D,MAAM,QAAQ,KAAK,KAAK,QAAQ;AAC9B,MAAI,QAAQ,KACV,QAAO;AAGT,MAAI,QAAQ,KAAA,EACV,QAAO;EAGT,MAAM,OAAO,OAAO;AAEpB,MAAI,SAAS,SACX,QAAO,CAAC,KAAK,IAAI;AAGnB,MAAI,SAAS,SACX,QAAO,KAAK,OAAO,GAAG,KAAK,GAAG,GAAG,OAAO,OAAO,IAAI;AAGrD,MAAI,SAAS,SACX,QAAO,KAAK;AAGd,MAAI,SAAS,UACX,QAAO,MAAM,WAAW;AAG1B,MAAI,SAAS,SACX,QAAO,gBAAgB,IAAc;AAGvC,SAAO,gBAAgB,IAAc;GACrC;AAEF,QAAO,KAAK,UAAU,MAAM;;AAG9B,SAAS,gBAAgB,KAAqB;CAC5C,IAAI,KAAK,eAAe,IAAI,IAAI;AAEhC,KAAI,OAAO,KAAA,GAAW;AACpB,wBAAsB;AACtB,OAAK;AACL,iBAAe,IAAI,KAAK,GAAG;;AAG7B,QAAO,KAAK;;AAGd,SAAS,gBAAgB,KAAqB;CAC5C,IAAI,KAAK,eAAe,IAAI,IAAI;AAEhC,KAAI,OAAO,KAAA,GAAW;AACpB,wBAAsB;AACtB,OAAK;AACL,iBAAe,IAAI,KAAK,GAAG;;AAG7B,QAAO,KAAK;;;;;;;;;;;;;;;;;;ACtDd,IAAa,aAAb,MAAa,WAAW;;CAEtB;;CAEA,0BAAU,IAAI,KAA0C;;CAExD,0BAAU,IAAI,KAAsB;;CAEpC,6BAAa,IAAI,KAAqB;;CAEtC,YAAY;;CAEZ,iBAAiB;;;;;;;;;;;;;;CAejB,OAAO,KACL,OACY;EAKZ,MAAM,aAAa,IAAI,WAJP,eAAe,KAC7B,SAAU,MAAM,MACjB,CAIA;AACD,uBAAqB;AAErB,SAAO;;;;;;;;;;;;;;CAeT,YAAY,SAAgD;AAC1D,QAAA,UAAgB,WACd,eAAe,KAAK,MAAM,MAAM;;;;;;;;;;;;;;CAkBpC,KAAc,QAAyC;AACrD,MAAI,MAAA,SACF,cAAa;EAGf,MAAM,QAAQ,MAAA,QAAc,QAC1B,OACD;EACD,MAAM,MAAM,QAAQ,MAAA;AAEpB,QAAA,iBAAuB;AACvB,QAAA,OAAa,IAAI,KAAK,MAAM;AAC5B,mBAAiB;GACf,SAAS,MAAA;GACT;GACA,mBAAmB,MAAA,OAAa,OAAO,IAAI;GAC5C,CAAC;EAEF,IAAI,WAAW;AAEf,eAAmB;AACjB,OAAI,SACF;AAGF,cAAW;AACX,mBAAgB,MAAA,SAAe,MAAM;;;;;;;;;;;;;;;CAgBzC,MAAS,SAA6B;EACpC,MAAM,YAAY,GAAG,QAAQ,GAAG,IAAI,UAAU,QAAQ,KAAK;EAC3D,MAAM,UAAU,MAAA,UAAgB,IAAI,QAAQ,GAAG;AAE/C,MAAI,YAAY,KAAA,KAAa,YAAY,UACvC,OAAA,uBAA6B,QAAQ;AAGvC,QAAA,UAAgB,IAAI,QAAQ,IAAI,UAAU;AAE1C,MAAI,MAAA,yBAA+B,UAAU,CAC3C,OAAA,kBAAwB,WAAW,QAAQ;AAG7C,MAAI,MAAA,OAAa,IAAI,UAAU,CAC7B,QAAO,MAAA,OAAa,IAAI,UAAU;AAGpC,SAAO,QAAQ;;;;;;;;;;;;;;CAejB,QAAW,SAAwC;AACjD,MAAI,MAAA,SACF,QAAO,QAAQ,uBAAO,IAAI,MAAM,+BAA+B,CAAC;EAGlE,MAAM,YAAY,WAAW,QAAQ,GAAG,IAAI,UAAU,QAAQ,KAAK;EACnE,MAAM,WAAW,MAAA,OAAa,IAAI,UAAU;AAE5C,MAAI,oBAAoB,QACtB,QAAO;EAGT,MAAM,UAAU,OAAO,IAAI,aAAa;AAGtC,UAFe,OAAO,OAAO,IAAI,QAAQ,QAAQ;IAGjD;EACF,MAAM,UAAU,MAAA,QACb,WAAW,QAAoD,CAC/D,MAAM,UAAU;AACf,SAAA,OAAa,OAAO,UAAU;AAE9B,UAAO;IACP,CACD,OAAO,UAAmB;AACzB,SAAA,OAAa,OAAO,UAAU;AAE9B,SAAM;IACN;AAEJ,QAAA,OAAa,IAAI,WAAW,QAAQ;AAEpC,SAAO;;;;;;;;;;;;;;CAeT,IAAa,QAA4C;AACvD,MAAI,MAAA,SACF,QAAO,QAAQ,uBAAO,IAAI,MAAM,+BAA+B,CAAC;AAGlE,SAAO,MAAA,QACJ,WAAW,OAAmD,CAC9D,OAAO,UAAmB;AACzB,wBAAqB;AACnB,UAAM;KACN;AAEF,SAAM;IACN;;;;;;;;;;;;;CAcN,UAAgB;AACd,QAAA,WAAiB;AAEjB,OAAK,MAAM,SAAS,MAAA,OAAa,QAAQ,CACvC,iBAAgB,MAAA,SAAe,MAAM;AAGvC,QAAA,OAAa,OAAO;AACpB,QAAA,OAAa,OAAO;AACpB,QAAA,UAAgB,OAAO;;CAGzB,wBAAwB,WAAyB;EAC/C,MAAM,YAAY,MAAA,OAAa,IAAI,UAAU;AAE7C,MAAI,CAAC,UACH;AAGF,kBAAgB,MAAA,SAAe,UAAU;AACzC,QAAA,OAAa,OAAO,UAAU;;CAGhC,0BAA0B,WAA4B;AACpD,SACE,CAAC,MAAA,YACD,CAAC,MAAA,OAAa,IAAI,UAAU,IAC5B,CAAC,MAAA,OAAa,IAAI,UAAU;;CAIhC,mBAAsB,WAAmB,SAAgC;EACvE,MAAM,UAAU,OAAO,IAAI,aAAa;AAGtC,UAFe,OAAO,OAAO,IAAI,QAAQ,QAAQ;IAGjD;EACF,MAAM,QAAQ,MAAA,QAAc,QAC1B,QACD;AAED,QAAA,OAAa,IAAI,WAAW,MAAM;AAClC,mBAAiB;GACf,SAAS,MAAA;GACT;GACA,mBAAmB,MAAA,OAAa,OAAO,UAAU;GACjD,aAAa,UAAU,MAAA,OAAa,IAAI,WAAW,MAAM;GAC1D,CAAC;;;AAIN,IAAI,qBAAwC;;;;;;;;;;;;;AAc5C,SAAgB,iBAA6B;AAC3C,wBAAuB,IAAI,YAAY;AAEvC,QAAO;;;;;;;;;;;;;;AAeT,SAAgB,mBAAyB;AACvC,qBAAoB,SAAS;AAC7B,sBAAqB"}
|