svelte-effect-runtime 4.0.0 → 4.1.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/chunks/client-DbwVAMWm.js +530 -0
- package/.dist/chunks/client-DbwVAMWm.js.map +1 -0
- package/.dist/chunks/compiler-Dpyu4Owd.js +412 -0
- package/.dist/chunks/compiler-Dpyu4Owd.js.map +1 -0
- package/.dist/chunks/descriptors-q909VWyR.js +216 -0
- package/.dist/chunks/descriptors-q909VWyR.js.map +1 -0
- package/.dist/chunks/diagnostics-DLwwrBWb.js +359 -0
- package/.dist/chunks/diagnostics-DLwwrBWb.js.map +1 -0
- package/.dist/chunks/dispatcher-CTWINW5I.js +534 -0
- package/.dist/chunks/dispatcher-CTWINW5I.js.map +1 -0
- package/.dist/chunks/dispatcher-pZPzarul.js +23 -0
- package/.dist/chunks/dispatcher-pZPzarul.js.map +1 -0
- package/.dist/chunks/{errors-IJjsUwrE.js → errors-qhcbUH6o.js} +56 -44
- package/.dist/chunks/errors-qhcbUH6o.js.map +1 -0
- package/.dist/chunks/live-BW7xZKjb.js +146 -0
- package/.dist/chunks/live-BW7xZKjb.js.map +1 -0
- package/.dist/chunks/live-CHK0RrZu.js +10 -0
- package/.dist/chunks/live-CHK0RrZu.js.map +1 -0
- package/.dist/chunks/{remote-client-CVI4t66c.js → remote-client-mkQAfP1G.js} +29 -23
- package/.dist/chunks/remote-client-mkQAfP1G.js.map +1 -0
- package/.dist/chunks/{runtime-GBQz32DZ.js → runtime-CPosEhGl.js} +3 -27
- package/.dist/chunks/runtime-CPosEhGl.js.map +1 -0
- package/.dist/chunks/{server-D1LcDnZE.js → server-yQrNoiCR.js} +15 -84
- package/.dist/chunks/server-yQrNoiCR.js.map +1 -0
- package/.dist/chunks/source-scan-cSawCvsg.js +1059 -0
- package/.dist/chunks/source-scan-cSawCvsg.js.map +1 -0
- package/.dist/chunks/{transform-jNUr65K9.js → transform-D7TTlPpK.js} +245 -371
- package/.dist/chunks/transform-D7TTlPpK.js.map +1 -0
- package/.dist/compiler/markup-identifiers.d.ts +2 -0
- package/.dist/compiler/remote-client.d.ts +1 -19
- package/.dist/compiler/source-scan.d.ts +11 -108
- package/.dist/compiler/sveltekit-remote-bridge.d.ts +3 -0
- package/.dist/compiler.d.ts +6 -0
- package/.dist/compiler.js +1 -1
- package/.dist/detect.d.ts +0 -31
- package/.dist/detect.js +0 -39
- package/.dist/detect.js.map +1 -1
- package/.dist/diagnostics.d.ts +0 -16
- package/.dist/dispatcher/deps.d.ts +3 -14
- package/.dist/dispatcher/fibers.d.ts +5 -46
- package/.dist/dispatcher/index.d.ts +42 -135
- package/.dist/dispatcher/scope.d.ts +36 -0
- package/.dist/dispatcher/types.d.ts +0 -151
- package/.dist/dispatcher.d.ts +2 -1
- package/.dist/dispatcher.js +2 -2
- package/.dist/errors.d.ts +44 -42
- package/.dist/generated/dispatcher.d.ts +6 -51
- package/.dist/generators.d.ts +2 -12
- package/.dist/internal/descriptors.d.ts +0 -16
- package/.dist/internal/generators.js +14 -9
- package/.dist/internal/generators.js.map +1 -1
- package/.dist/internal/live.d.ts +9 -0
- package/.dist/internal/remote-client.js +2 -2
- package/.dist/internal/remote-server.js +2 -2
- package/.dist/internal/schema.d.ts +0 -54
- package/.dist/live.d.ts +9 -26
- package/.dist/markup/event-attributes.d.ts +0 -32
- package/.dist/markup/promise.d.ts +1 -23
- package/.dist/markup/promise.js +2 -18
- package/.dist/markup/promise.js.map +1 -1
- package/.dist/markup/run.d.ts +1 -10
- package/.dist/markup/run.js +2 -11
- package/.dist/markup/run.js.map +1 -1
- package/.dist/markup/transform/apply.d.ts +5 -4
- package/.dist/markup/transform/classify.d.ts +2 -11
- package/.dist/markup/transform/constants.d.ts +2 -1
- package/.dist/markup/transform/effect-bindings.d.ts +2 -26
- package/.dist/markup/transform/effect-callbacks.d.ts +0 -20
- package/.dist/markup/transform/emit.d.ts +2 -11
- package/.dist/markup/transform/expressions.d.ts +0 -35
- package/.dist/markup/transform/scan.d.ts +3 -22
- package/.dist/markup/transform/types.d.ts +15 -127
- package/.dist/markup/transform.js +1 -1
- package/.dist/markup/value.d.ts +1 -18
- package/.dist/markup/value.js +2 -19
- package/.dist/markup/value.js.map +1 -1
- package/.dist/mod.d.ts +3 -8
- package/.dist/mod.js +5 -5
- package/.dist/mod.js.map +1 -1
- package/.dist/remote/cause-codec.d.ts +3 -37
- package/.dist/remote/client/command.d.ts +3 -17
- package/.dist/remote/client/form-data.d.ts +0 -7
- package/.dist/remote/client/form-enhance.d.ts +0 -7
- package/.dist/remote/client/form-transport.d.ts +14 -20
- package/.dist/remote/client/form.d.ts +4 -24
- package/.dist/remote/client/index.d.ts +2 -1
- package/.dist/remote/client/prerender.d.ts +6 -0
- package/.dist/remote/client/query-result.d.ts +2 -14
- package/.dist/remote/client/query.d.ts +8 -48
- package/.dist/remote/client/responses.d.ts +3 -27
- package/.dist/remote/client/types.d.ts +16 -110
- package/.dist/remote/client/utils.d.ts +0 -8
- package/.dist/remote/client.d.ts +2 -2
- package/.dist/remote/client.js +2 -2
- package/.dist/remote/effect.d.ts +6 -0
- package/.dist/remote/failures.d.ts +4 -0
- package/.dist/remote/query-update.d.ts +2 -0
- package/.dist/remote/resource.d.ts +25 -0
- package/.dist/remote/server.d.ts +5 -50
- package/.dist/remote/server.js +2 -2
- package/.dist/remote/shared.d.ts +6 -145
- package/.dist/remote/shared.js +6 -127
- package/.dist/remote/shared.js.map +1 -1
- package/.dist/runtime/transform.js +26 -31
- package/.dist/runtime/transform.js.map +1 -1
- package/.dist/script-transform/ast.d.ts +0 -46
- package/.dist/script-transform/imports.d.ts +3 -39
- package/.dist/script-transform/index.d.ts +2 -0
- package/.dist/script-transform/lower.d.ts +0 -9
- package/.dist/script-transform/runes.d.ts +0 -10
- package/.dist/script-transform/runtime-block.d.ts +0 -17
- package/.dist/script-transform/source.d.ts +0 -24
- package/.dist/script-transform/types.d.ts +9 -126
- package/.dist/server/effects.d.ts +4 -53
- package/.dist/server/factories.d.ts +7 -7
- package/.dist/server/index.d.ts +1 -1
- package/.dist/server/invalid.d.ts +0 -7
- package/.dist/server/live-snapshot.d.ts +5 -0
- package/.dist/server/remote-handler-context.d.ts +5 -0
- package/.dist/server/runtime.d.ts +6 -24
- package/.dist/server/schema.d.ts +0 -14
- package/.dist/server/transport.d.ts +2 -0
- package/.dist/server/types.d.ts +49 -26
- package/.dist/server/wrappers.d.ts +3 -40
- package/.dist/server.d.ts +1 -1
- package/.dist/server.js +200 -215
- package/.dist/server.js.map +1 -1
- package/.dist/yieldable.d.ts +1 -35
- package/package.json +2 -2
- package/.dist/chunks/client-DcZUV4rR.js +0 -653
- package/.dist/chunks/client-DcZUV4rR.js.map +0 -1
- package/.dist/chunks/compiler-BBPNyXmQ.js +0 -460
- package/.dist/chunks/compiler-BBPNyXmQ.js.map +0 -1
- package/.dist/chunks/dispatcher-DOx8iC6r.js +0 -505
- package/.dist/chunks/dispatcher-DOx8iC6r.js.map +0 -1
- package/.dist/chunks/dispatcher-H-Ia0Os4.js +0 -47
- package/.dist/chunks/dispatcher-H-Ia0Os4.js.map +0 -1
- package/.dist/chunks/errors-IJjsUwrE.js.map +0 -1
- package/.dist/chunks/live-BXAKre_4.js +0 -104
- package/.dist/chunks/live-BXAKre_4.js.map +0 -1
- package/.dist/chunks/remote-client-CVI4t66c.js.map +0 -1
- package/.dist/chunks/runtime-GBQz32DZ.js.map +0 -1
- package/.dist/chunks/schema-D9pct6Y5.js +0 -89
- package/.dist/chunks/schema-D9pct6Y5.js.map +0 -1
- package/.dist/chunks/server-D1LcDnZE.js.map +0 -1
- package/.dist/chunks/source-scan-C4PsggID.js +0 -341
- package/.dist/chunks/source-scan-C4PsggID.js.map +0 -1
- package/.dist/chunks/transform-jNUr65K9.js.map +0 -1
- package/.dist/remote/client/effect.d.ts +0 -29
- package/.dist/remote/client/failures.d.ts +0 -42
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compiler-BBPNyXmQ.js","names":["candidate"],"sources":["../../../modules/svelte-effect-runtime/src/diagnostics.ts","../../../modules/svelte-effect-runtime/src/compiler.ts"],"sourcesContent":["import type { MarkupBraceExpression, ScriptRegion } from \"$/compiler/source-scan.ts\";\nimport { scan_svelte_effect_source } from \"$/compiler/source-scan.ts\";\n\n/**\n * Warning diagnostic produced by the SER Vite diagnostics plugin.\n */\ninterface Diagnostic {\n\tmessage: string;\n\tline: number;\n\tcolumn: number;\n}\n\ninterface SourceLocation {\n\tline: number;\n\tcolumn: number;\n}\n\n/**\n * Finds best-effort SER usage diagnostics in Svelte component markup.\n *\n * @example\n * ```ts\n * const diagnostics = find_svelte_effect_diagnostics(\n * `<button onclick={Effect.gen}>save</button>`,\n * \"Button.svelte\",\n * );\n * ```\n *\n * @since 2.0.0\n * @param code - Svelte component source to scan for suspicious Effect usage.\n * @param filename - Filename used in diagnostic messages.\n * @returns Warning diagnostics with a message and source location.\n */\nexport function find_svelte_effect_diagnostics(\n\tcode: string,\n\tfilename: string,\n): Array<{ message: string; line: number; column: number }> {\n\tconst scan = scan_svelte_effect_source(code, filename);\n\tconst effect_names = find_effect_local_names(scan.scripts);\n\tconst line_starts = make_line_starts(code);\n\n\treturn scan.markup_expressions.flatMap((expression) =>\n\t\tmake_expression_diagnostics(filename, effect_names, expression, line_starts),\n\t);\n}\n\nfunction find_effect_local_names(scripts: readonly ScriptRegion[]): Set<string> {\n\tconst names = new Set<string>([\"Effect\"]);\n\n\tfor (const script of scripts) {\n\t\tconst import_pattern = /import\\s+(type\\s+)?\\{([^}]+)\\}\\s+from\\s+[\"']effect[\"']/g;\n\n\t\tfor (const import_match of script.text.matchAll(import_pattern)) {\n\t\t\tconst is_type_only_import = import_match[1] !== undefined;\n\t\t\tconst specifiers = import_match[2].split(\",\");\n\n\t\t\tif (is_type_only_import) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (const specifier of specifiers) {\n\t\t\t\tconst local_name = parse_effect_import_local_name(specifier);\n\n\t\t\t\tif (local_name) {\n\t\t\t\t\tnames.add(local_name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn names;\n}\n\nfunction parse_effect_import_local_name(specifier: string): string | undefined {\n\tconst trimmed = specifier.trim();\n\tconst match = trimmed.match(/^Effect(?:\\s+as\\s+([A-Za-z_$][\\w$]*))?$/);\n\n\tif (!match) {\n\t\treturn undefined;\n\t}\n\n\treturn match[1] ?? \"Effect\";\n}\n\nfunction make_expression_diagnostics(\n\tfilename: string,\n\teffect_names: Set<string>,\n\texpression: MarkupBraceExpression,\n\tline_starts: number[],\n): Diagnostic[] {\n\tconst attribute_name = expression.attribute_name;\n\tconst expression_text = expression.expression_text;\n\t/** The source scanner exposes a name only for a direct single-expression value. */\n\tconst is_event_attribute = attribute_name !== undefined && attribute_name.startsWith(\"on\");\n\tconst is_attribute = attribute_name !== undefined;\n\n\tif (!contains_effect_reference(expression_text, effect_names)) {\n\t\treturn [];\n\t}\n\n\tif (starts_with_yield_star(expression_text)) {\n\t\treturn [];\n\t}\n\n\tconst loc = get_line_column(line_starts, expression.open);\n\n\tif (\n\t\tis_event_attribute &&\n\t\tis_callback_expression(expression_text) &&\n\t\tcontains_yield_star(expression_text)\n\t) {\n\t\treturn [\n\t\t\tmake_diagnostic(\n\t\t\t\tloc,\n\t\t\t\tmake_hidden_event_yield_warning(filename, attribute_name, expression_text),\n\t\t\t),\n\t\t];\n\t}\n\n\tif (contains_effect_runner(expression_text, effect_names)) {\n\t\treturn [\n\t\t\tmake_diagnostic(\n\t\t\t\tloc,\n\t\t\t\tmake_explicit_runner_warning(filename, attribute_name, expression_text),\n\t\t\t),\n\t\t];\n\t}\n\n\tif (is_bare_effect_gen(expression_text, effect_names)) {\n\t\treturn [\n\t\t\tmake_diagnostic(\n\t\t\t\tloc,\n\t\t\t\tmake_bare_effect_gen_warning(filename, attribute_name, expression_text),\n\t\t\t),\n\t\t];\n\t}\n\n\tif (is_event_attribute && is_callback_expression(expression_text)) {\n\t\treturn [\n\t\t\tmake_diagnostic(\n\t\t\t\tloc,\n\t\t\t\tmake_event_callback_returns_effect_warning(\n\t\t\t\t\tfilename,\n\t\t\t\t\tattribute_name,\n\t\t\t\t\texpression_text,\n\t\t\t\t),\n\t\t\t),\n\t\t];\n\t}\n\n\tif (is_event_attribute) {\n\t\treturn [\n\t\t\tmake_diagnostic(\n\t\t\t\tloc,\n\t\t\t\tmake_event_attribute_effect_warning(filename, attribute_name, expression_text),\n\t\t\t),\n\t\t];\n\t}\n\n\tif (is_attribute) {\n\t\treturn [\n\t\t\tmake_diagnostic(\n\t\t\t\tloc,\n\t\t\t\tmake_attribute_effect_warning(filename, attribute_name, expression_text),\n\t\t\t),\n\t\t];\n\t}\n\n\treturn [make_diagnostic(loc, make_sync_markup_effect_warning(filename, expression_text))];\n}\n\nfunction make_diagnostic(loc: { line: number; column: number }, message: string): Diagnostic {\n\treturn {\n\t\tmessage,\n\t\tline: loc.line,\n\t\tcolumn: loc.column,\n\t};\n}\n\nfunction make_hidden_event_yield_warning(\n\tfilename: string,\n\tattribute_name: string,\n\texpression_text: string,\n): string {\n\treturn [\n\t\t`[svelte-effect-runtime] Detected yield* hidden inside an event callback.`,\n\t\t`${filename}: ${attribute_name}={${expression_text}}`,\n\t\t`SER can only lower yield* at the event attribute boundary.`,\n\t\t`Write the event expression directly, for example: ${attribute_name}={yield* save()}`,\n\t].join(\"\\n\");\n}\n\nfunction make_explicit_runner_warning(\n\tfilename: string,\n\tattribute_name: string | undefined,\n\texpression_text: string,\n): string {\n\tconst location = attribute_name\n\t\t? `${attribute_name}={${expression_text}}`\n\t\t: `{${expression_text}}`;\n\n\treturn [\n\t\t`[svelte-effect-runtime] Detected an explicit Effect runner inside Svelte markup.`,\n\t\t`${filename}: ${location}`,\n\t\t`Explicit runners bypass SER cancellation and error handling for markup effects.`,\n\t\t`Prefer yield* so SER can manage the Effect lifecycle.`,\n\t].join(\"\\n\");\n}\n\nfunction make_bare_effect_gen_warning(\n\tfilename: string,\n\tattribute_name: string | undefined,\n\texpression_text: string,\n): string {\n\tconst location = attribute_name\n\t\t? `${attribute_name}={${expression_text}}`\n\t\t: `{${expression_text}}`;\n\tconst fixed = attribute_name\n\t\t? `${attribute_name}={yield* ${expression_text}(function* () { ... })}`\n\t\t: `{yield* ${expression_text}(function* () { ... })}`;\n\n\treturn [\n\t\t`[svelte-effect-runtime] Detected Effect.gen used as a value instead of an Effect program.`,\n\t\t`${filename}: ${location}`,\n\t\t`${expression_text} is a constructor, not the result of running a generator.`,\n\t\t`Use: ${fixed}`,\n\t].join(\"\\n\");\n}\n\nfunction make_event_callback_returns_effect_warning(\n\tfilename: string,\n\tattribute_name: string,\n\texpression_text: string,\n): string {\n\treturn [\n\t\t`[svelte-effect-runtime] Detected an event callback that returns an Effect but does not run it.`,\n\t\t`${filename}: ${attribute_name}={${expression_text}}`,\n\t\t`Svelte will call the callback and receive an Effect value, but SER will not manage it from inside the callback.`,\n\t\t`Use yield* at the event attribute boundary or explicitly run the Effect if you really want to bypass SER.`,\n\t].join(\"\\n\");\n}\n\nfunction make_event_attribute_effect_warning(\n\tfilename: string,\n\tattribute_name: string,\n\texpression_text: string,\n): string {\n\tconst fixed = `${attribute_name}={yield* ${expression_text}}`;\n\n\treturn [\n\t\t`[svelte-effect-runtime] Detected an event attribute that looks like an Effect but is not written with yield*.`,\n\t\t`${filename}: ${attribute_name}={${expression_text}}`,\n\t\t`If you are trying to use Effect in this event handler, use yield* at the beginning.`,\n\t\t`Use: ${fixed}`,\n\t].join(\"\\n\");\n}\n\nfunction make_attribute_effect_warning(\n\tfilename: string,\n\tattribute_name: string,\n\texpression_text: string,\n): string {\n\tconst fixed = `${attribute_name}={yield* ${expression_text}}`;\n\n\treturn [\n\t\t`[svelte-effect-runtime] Detected an attribute value that looks like an Effect but is not written with yield*.`,\n\t\t`${filename}: ${attribute_name}={${expression_text}}`,\n\t\t`Svelte attributes need the resolved Effect value, not the Effect object itself.`,\n\t\t`Use: ${fixed}`,\n\t].join(\"\\n\");\n}\n\nfunction make_sync_markup_effect_warning(filename: string, expression_text: string): string {\n\treturn [\n\t\t`[svelte-effect-runtime] Detected a markup expression that creates an Effect but is not written with yield*.`,\n\t\t`${filename}: {${expression_text}}`,\n\t\t`This expression will produce an Effect value, not its result.`,\n\t\t`Use yield* where Svelte expects the resolved value.`,\n\t].join(\"\\n\");\n}\n\nfunction contains_effect_reference(expression_text: string, effect_names: Set<string>): boolean {\n\tconst name_pattern = make_effect_name_pattern(effect_names);\n\tconst effect_pattern = new RegExp(\n\t\t`\\\\b(?:${name_pattern})\\\\.(?:gen|succeed|fail|try|tryPromise|promise|sync|all|void|log|runPromise|runSync|runFork)\\\\b`,\n\t);\n\n\treturn effect_pattern.test(expression_text);\n}\n\nfunction contains_effect_runner(expression_text: string, effect_names: Set<string>): boolean {\n\tconst name_pattern = make_effect_name_pattern(effect_names);\n\tconst runner_pattern = new RegExp(`\\\\b(?:${name_pattern})\\\\.run(?:Promise|Sync|Fork)\\\\b`);\n\n\treturn runner_pattern.test(expression_text);\n}\n\nfunction is_bare_effect_gen(expression_text: string, effect_names: Set<string>): boolean {\n\tconst name_pattern = make_effect_name_pattern(effect_names);\n\tconst bare_gen_pattern = new RegExp(`^(?:${name_pattern})\\\\.gen$`);\n\n\treturn bare_gen_pattern.test(expression_text);\n}\n\nfunction make_effect_name_pattern(effect_names: Set<string>): string {\n\treturn [...effect_names]\n\t\t.map(escape_regexp)\n\t\t.sort((a, b) => b.length - a.length)\n\t\t.join(\"|\");\n}\n\nfunction starts_with_yield_star(expression_text: string): boolean {\n\treturn /^yield\\s*\\*/.test(expression_text);\n}\n\nfunction contains_yield_star(expression_text: string): boolean {\n\treturn /\\byield\\s*\\*/.test(expression_text);\n}\n\nfunction is_callback_expression(expression_text: string): boolean {\n\treturn (\n\t\t/^(?:async\\s+)?(?:\\([^)]*\\)|[A-Za-z_$][\\w$]*)\\s*=>/.test(expression_text) ||\n\t\t/^(?:async\\s+)?function\\b/.test(expression_text)\n\t);\n}\n\nfunction get_line_column(line_starts: number[], position: number): SourceLocation {\n\tlet low = 0;\n\tlet high = line_starts.length - 1;\n\n\twhile (low <= high) {\n\t\tconst mid = Math.floor((low + high) / 2);\n\n\t\tif (line_starts[mid] <= position) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\thigh = mid - 1;\n\t\t}\n\t}\n\n\tconst line_index = Math.max(0, high);\n\tconst line = line_index + 1;\n\tconst column = position - line_starts[line_index];\n\n\treturn { line, column };\n}\n\nfunction make_line_starts(code: string): number[] {\n\tconst line_starts = [0];\n\n\tfor (let i = 0; i < code.length; i += 1) {\n\t\tif (code[i] !== \"\\n\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tline_starts.push(i + 1);\n\t}\n\n\treturn line_starts;\n}\n\nfunction escape_regexp(value: string): string {\n\treturn value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}","import { find_svelte_effect_diagnostics } from \"./diagnostics.ts\";\nimport type { Plugin } from \"vite\";\n\n/**\n * Options for the {@link effect} Vite plugin.\n *\n * @since 2.0.0\n */\nexport interface EffectOptions {\n\t/** Whether to emit debug logging in the generated remote client module. */\n\tdebug?: boolean;\n}\n\ninterface SvelteComponentModuleFilter {\n\tset_extensions(extensions: readonly string[]): void;\n\tis_module(id: string): boolean;\n}\n\ninterface VitePluginSvelteApi {\n\toptions?: {\n\t\textensions?: readonly unknown[];\n\t};\n}\n\ntype VitePluginSvelte = Plugin & {\n\tapi?: VitePluginSvelteApi;\n};\n\ntype VitePluginSvelteWithExtensions = Plugin & {\n\tapi: {\n\t\toptions: {\n\t\t\textensions: readonly string[];\n\t\t};\n\t};\n};\n\nconst default_svelte_component_extensions = [\".svelte\"] as const;\n\n/**\n * Vite plugin for SvelteKit. The server import plugin rewrites server-side\n * imports to the server entrypoint; the remote client plugin wraps SvelteKit's\n * generated client remote exports in Effect-returning adapters.\n *\n * @example\n * ```ts\n * import { effect } from \"svelte-effect-runtime/compiler\";\n * import { sveltekit } from \"@sveltejs/kit/vite\";\n *\n * export default defineConfig({ plugins: [effect(), sveltekit()] });\n * ```\n *\n * @since 2.0.0\n * @param options - Optional configuration.\n * @returns Vite plugins that integrate the runtime with SvelteKit.\n */\nexport function effect(options?: EffectOptions): Plugin[] {\n\tconst component_filter = make_svelte_component_module_filter();\n\n\treturn [\n\t\tmake_diagnostics_plugin(component_filter),\n\t\tmake_reserved_helper_guard_plugin(component_filter),\n\t\tmake_svelte_transform_plugin(component_filter),\n\t\tmake_server_rewrite_plugin(),\n\t\tmake_remote_client_wrapper_plugin(options),\n\t];\n}\n\nfunction make_diagnostics_plugin(component_filter: SvelteComponentModuleFilter): Plugin {\n\tconst warned_diagnostics = new Set<string>();\n\n\treturn {\n\t\tname: \"svelte-effect-runtime:diagnostics\",\n\n\t\ttransform(code: string, id: string) {\n\t\t\tif (!component_filter.is_module(id)) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst clean_id = id.split(\"?\")[0] ?? id;\n\t\t\tconst diagnostics = find_svelte_effect_diagnostics(code, clean_id);\n\n\t\t\tfor (const diagnostic of diagnostics) {\n\t\t\t\tconst diagnostic_key = [\n\t\t\t\t\tclean_id,\n\t\t\t\t\tdiagnostic.line,\n\t\t\t\t\tdiagnostic.column,\n\t\t\t\t\tdiagnostic.message,\n\t\t\t\t].join(\":\");\n\n\t\t\t\tif (warned_diagnostics.has(diagnostic_key)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\twarned_diagnostics.add(diagnostic_key);\n\n\t\t\t\tthis.warn({\n\t\t\t\t\tid: clean_id,\n\t\t\t\t\tmessage: diagnostic.message,\n\t\t\t\t\tloc: {\n\t\t\t\t\t\tline: diagnostic.line,\n\t\t\t\t\t\tcolumn: diagnostic.column,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t},\n\t};\n}\n\nfunction make_reserved_helper_guard_plugin(component_filter: SvelteComponentModuleFilter): Plugin {\n\treturn {\n\t\tname: \"svelte-effect-runtime:reserved-helper-guard\",\n\n\t\ttransform(code: string, id: string) {\n\t\t\tif (!component_filter.is_module(id) || !has_ser_syntax(code)) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst reserved_names = find_reserved_helper_names(code);\n\n\t\t\tif (reserved_names.length === 0) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tthis.warn(make_reserved_helper_warning(reserved_names));\n\n\t\t\treturn undefined;\n\t\t},\n\t};\n}\n\nfunction make_svelte_transform_plugin(component_filter: SvelteComponentModuleFilter): Plugin {\n\treturn {\n\t\tname: \"svelte-effect-runtime:svelte-transform\",\n\n\t\tconfigResolved(config) {\n\t\t\tconst extensions = find_svelte_component_extensions(config.plugins);\n\t\t\tconst conflicting_plugin_names = find_pre_transform_plugin_names(config.plugins);\n\n\t\t\tif (extensions) {\n\t\t\t\tcomponent_filter.set_extensions(extensions);\n\t\t\t}\n\n\t\t\tif (conflicting_plugin_names.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconfig.logger.info(make_pre_transform_plugin_notice(conflicting_plugin_names));\n\t\t},\n\n\t\tasync transform(code: string, id: string, options?: { ssr?: boolean }) {\n\t\t\tif (!component_filter.is_module(id)) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst { transform_svelte_effect } = await import(\"./runtime/transform.ts\");\n\t\t\tconst result = transform_svelte_effect(code, id, {\n\t\t\t\ttarget: options?.ssr ? \"server\" : \"client\",\n\t\t\t});\n\n\t\t\tif (result.code === code) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn { code: result.code, map: null };\n\t\t},\n\t};\n}\n\nfunction make_svelte_component_module_filter(): SvelteComponentModuleFilter {\n\tlet extensions: readonly string[] = default_svelte_component_extensions;\n\n\treturn {\n\t\tset_extensions(next_extensions) {\n\t\t\tconst normalized_extensions = normalize_svelte_component_extensions(next_extensions);\n\n\t\t\tif (normalized_extensions.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\textensions = normalized_extensions;\n\t\t},\n\n\t\tis_module(id) {\n\t\t\treturn is_svelte_component_module(id, extensions);\n\t\t},\n\t};\n}\n\nfunction normalize_svelte_component_extensions(extensions: readonly string[]): string[] {\n\tconst normalized_extensions = extensions\n\t\t.filter((extension) => extension.length > 0)\n\t\t.map((extension) => (extension.startsWith(\".\") ? extension : `.${extension}`));\n\n\treturn [...new Set(normalized_extensions)];\n}\n\nfunction find_svelte_component_extensions(\n\tplugins: readonly Plugin[],\n): readonly string[] | undefined {\n\tconst svelte_plugin = plugins.find(has_svelte_component_extensions);\n\n\treturn svelte_plugin?.api?.options?.extensions;\n}\n\nfunction has_svelte_component_extensions(plugin: Plugin): plugin is VitePluginSvelteWithExtensions {\n\tconst candidate = plugin as VitePluginSvelte;\n\tconst extensions = candidate.api?.options?.extensions;\n\n\tif (!plugin.name.startsWith(\"vite-plugin-svelte\")) {\n\t\treturn false;\n\t}\n\n\treturn (\n\t\tArray.isArray(extensions) && extensions.every((extension) => typeof extension === \"string\")\n\t);\n}\n\nfunction find_pre_transform_plugin_names(plugins: readonly Plugin[]): string[] {\n\treturn plugins\n\t\t.filter(\n\t\t\t(plugin) =>\n\t\t\t\t!plugin.name.startsWith(\"svelte-effect-runtime:\") &&\n\t\t\t\t!is_known_framework_pre_transform_plugin(plugin.name) &&\n\t\t\t\thas_pre_transform_priority(plugin),\n\t\t)\n\t\t.map((plugin) => plugin.name);\n}\n\nconst ansi_reset = \"\\x1b[0m\";\nconst ansi_light_green = \"\\x1b[92m\";\n\nfunction make_pre_transform_plugin_notice(plugin_names: readonly string[]): string {\n\tconst formatted_plugins = plugin_names.map((plugin_name) => ` - ${plugin_name}`).join(\"\\n\");\n\n\treturn [\n\t\t`${ansi_light_green}[svelte-effect-runtime]${ansi_reset} Svelte Effect Runtime noticed possible Vite plugin ordering conflicts.`,\n\t\t\"\",\n\t\t\"These plugins run before normal Svelte component transforms:\",\n\t\tformatted_plugins,\n\t\t\"\",\n\t\t\"This is usually fine, but if you see Svelte parser errors around <script effect>\",\n\t\t\"or yield* in components, one of those plugins may be reading component files before\",\n\t\t\"SER has lowered its syntax.\",\n\t].join(\"\\n\");\n}\n\nfunction is_known_framework_pre_transform_plugin(name: string): boolean {\n\treturn name.startsWith(\"vite:\") || name === \"vite-plugin-svelte:preprocess\";\n}\n\nfunction has_pre_transform_priority(plugin: Plugin): boolean {\n\tif (plugin.enforce === \"pre\" && plugin.transform) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\ttypeof plugin.transform === \"object\" &&\n\t\tplugin.transform !== null &&\n\t\t\"order\" in plugin.transform &&\n\t\tplugin.transform.order === \"pre\"\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction make_server_rewrite_plugin(): Plugin {\n\treturn {\n\t\tname: \"svelte-effect-runtime:server-imports\",\n\n\t\tconfig() {\n\t\t\treturn { optimizeDeps: { exclude: [\"svelte-effect-runtime\"] } };\n\t\t},\n\n\t\tasync transform(code: string, id: string) {\n\t\t\tif (!is_server_runtime_module(id)) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tif (!code.includes(\"svelte-effect-runtime\")) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst rewritten = await rewrite_server_imports(code, id);\n\n\t\t\tif (rewritten === code) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn { code: rewritten, map: null };\n\t\t},\n\t};\n}\n\nasync function rewrite_server_imports(code: string, id: string): Promise<string> {\n\tconst [{ default: MagicString }, ts] = await Promise.all([\n\t\timport(\"magic-string\"),\n\t\timport(\"typescript\"),\n\t]);\n\tconst filename = id.split(\"?\", 2)[0] ?? id;\n\tconst source_file = ts.createSourceFile(\n\t\tfilename,\n\t\tcode,\n\t\tts.ScriptTarget.Latest,\n\t\ttrue,\n\t\tget_script_kind(filename, ts),\n\t);\n\tconst magic = new MagicString(code);\n\tlet changed = false;\n\n\tconst rewrite_specifier = (specifier: import(\"typescript\").StringLiteralLike) => {\n\t\tconst replacement = get_server_import_replacement(specifier.text);\n\n\t\tif (!replacement) {\n\t\t\treturn;\n\t\t}\n\n\t\tmagic.overwrite(\n\t\t\tspecifier.getStart(source_file),\n\t\t\tspecifier.end,\n\t\t\tJSON.stringify(replacement),\n\t\t);\n\t\tchanged = true;\n\t};\n\n\tconst visit = (node: import(\"typescript\").Node) => {\n\t\tif (ts.isImportDeclaration(node) && ts.isStringLiteralLike(node.moduleSpecifier)) {\n\t\t\trewrite_specifier(node.moduleSpecifier);\n\t\t}\n\n\t\tif (\n\t\t\tts.isExportDeclaration(node) &&\n\t\t\tnode.moduleSpecifier &&\n\t\t\tts.isStringLiteralLike(node.moduleSpecifier)\n\t\t) {\n\t\t\trewrite_specifier(node.moduleSpecifier);\n\t\t}\n\n\t\tif (ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.ImportKeyword) {\n\t\t\tconst [specifier] = node.arguments;\n\n\t\t\tif (specifier && ts.isStringLiteralLike(specifier)) {\n\t\t\t\trewrite_specifier(specifier);\n\t\t\t}\n\t\t}\n\n\t\tts.forEachChild(node, visit);\n\t};\n\n\tvisit(source_file);\n\n\treturn changed ? magic.toString() : code;\n}\n\nfunction get_server_import_replacement(specifier: string): string | undefined {\n\tif (specifier === \"svelte-effect-runtime\") {\n\t\treturn \"svelte-effect-runtime/server\";\n\t}\n\n\tif (specifier === \"svelte-effect-runtime/internal/generators\") {\n\t\treturn \"svelte-effect-runtime/server\";\n\t}\n\n\treturn undefined;\n}\n\nfunction get_script_kind(filename: string, ts: typeof import(\"typescript\")) {\n\tconst normalized_filename = filename.toLowerCase();\n\n\tif (has_file_extension(normalized_filename, [\".tsx\"])) {\n\t\treturn ts.ScriptKind.TSX;\n\t}\n\n\tif (has_file_extension(normalized_filename, [\".jsx\"])) {\n\t\treturn ts.ScriptKind.JSX;\n\t}\n\n\tif (has_file_extension(normalized_filename, [\".js\", \".mjs\", \".cjs\"])) {\n\t\treturn ts.ScriptKind.JS;\n\t}\n\n\treturn ts.ScriptKind.TS;\n}\n\nfunction has_file_extension(filename: string, extensions: readonly string[]): boolean {\n\treturn extensions.some((extension) => filename.endsWith(extension));\n}\n\nfunction make_remote_client_wrapper_plugin(options?: EffectOptions): Plugin {\n\treturn {\n\t\tname: \"svelte-effect-runtime:remote-client\",\n\t\tenforce: \"post\",\n\n\t\tconfig() {\n\t\t\treturn { ssr: { noExternal: [\"svelte-effect-runtime\"] } };\n\t\t},\n\n\t\tconfigResolved(config) {\n\t\t\tconst no_external = config.ssr.noExternal;\n\t\t\tconst runtime_package = \"svelte-effect-runtime\";\n\n\t\t\tif (no_external === true) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (Array.isArray(no_external)) {\n\t\t\t\tconst has_runtime_package = no_external.some((entry) => entry === runtime_package);\n\n\t\t\t\tif (!has_runtime_package) {\n\t\t\t\t\tno_external.push(runtime_package);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconfig.ssr.noExternal = [no_external, runtime_package].filter(\n\t\t\t\t(value): value is string | RegExp => value !== undefined,\n\t\t\t);\n\t\t},\n\n\t\tasync transform(code: string, id: string) {\n\t\t\tif (!is_remote_module(id) || !code.includes(\"__sveltekit/remote\")) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst rewritten = await rewrite_remote_client_exports(code, options);\n\n\t\t\tif (rewritten === code) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn { code: rewritten, map: null };\n\t\t},\n\t};\n}\n\nfunction is_server_runtime_module(id: string): boolean {\n\tconst [filename] = id.split(\"?\", 2);\n\n\treturn (\n\t\t/\\.(server|remote)(?:\\.[cm])?\\.[jt]s$/.test(filename) ||\n\t\t/(?:^|[\\\\/])hooks\\.server(?:\\.[cm])?\\.[jt]s$/.test(filename)\n\t);\n}\n\nfunction is_remote_module(id: string): boolean {\n\treturn /\\.(remote|remote\\.[cm]?)\\.[jt]s(?:\\?.*)?$/.test(id) || id.includes(\".remote.\");\n}\n\nfunction is_svelte_component_module(id: string, extensions: readonly string[]): boolean {\n\tconst [filename, query = \"\"] = id.split(\"?\", 2);\n\n\tif (!extensions.some((extension) => filename.endsWith(extension))) {\n\t\treturn false;\n\t}\n\n\tif (query.length === 0) {\n\t\treturn true;\n\t}\n\n\tconst params = new URLSearchParams(query);\n\tconst allowed_params = [\"t\", \"v\"];\n\n\treturn [...params.keys()].every((key) => allowed_params.includes(key));\n}\n\nfunction has_ser_syntax(code: string): boolean {\n\treturn /\\byield\\s*\\*/.test(code) || /<script\\b[^>]*\\beffect(?:[\\s=>]|$)/.test(code);\n}\n\nfunction find_reserved_helper_names(code: string): string[] {\n\tconst script_segments = [...code.matchAll(/<script\\b[^>]*>([\\s\\S]*?)<\\/script\\s*>/gi)].map(\n\t\t(match) => match[1] ?? \"\",\n\t);\n\tconst markup_segments = [...code.matchAll(/\\{[^{}]*(?:Dispatcher|Code)[^{}]*\\}/g)].map(\n\t\t(match) => match[0],\n\t);\n\tconst search_segments = [...script_segments, ...markup_segments];\n\n\treturn [\"Dispatcher\", \"Code\"].filter((name) =>\n\t\tsearch_segments.some((segment) => new RegExp(`\\\\b${name}\\\\b`).test(segment)),\n\t);\n}\n\nfunction make_reserved_helper_warning(names: string[]): string {\n\tconst quoted_names = names.map((name) => `\\`${name}\\``);\n\tconst subject =\n\t\tquoted_names.length === 1\n\t\t\t? quoted_names[0]\n\t\t\t: `${quoted_names.slice(0, -1).join(\", \")} and ${\n\t\t\t\t\tquoted_names[quoted_names.length - 1]\n\t\t\t\t}`;\n\tconst verb = names.length === 1 ? \"is\" : \"are\";\n\n\treturn [\n\t\t`[svelte-effect-runtime] ${subject} ${verb} reserved for generated markup helpers.`,\n\t\t`Rename or alias local bindings that use ${subject} before using SER syntax in this component.`,\n\t].join(\" \");\n}\n\n/**\n * Rewrites SvelteKit's generated client remote module from:\n *\n * `export const get_post = __remote.query(\"hash/get_post\")`\n *\n * into an Effect-aware wrapper around the same native function.\n *\n * @example\n * ```ts\n * const rewritten = await rewrite_remote_client_exports(remote_module_code);\n * ```\n *\n * @since 2.0.0\n * @param code - The generated client remote module code.\n * @param options - Optional plugin options.\n * @returns A promise that resolves to the rewritten module code.\n * @internal\n */\nexport async function rewrite_remote_client_exports(\n\tcode: string,\n\toptions?: EffectOptions,\n): Promise<string> {\n\tconst remote_client = await import(\"./compiler/remote-client.ts\");\n\n\treturn remote_client.rewrite_remote_client_exports(code, options);\n}\n"],"mappings":"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"}
|
|
@@ -1,505 +0,0 @@
|
|
|
1
|
-
import { a as DispatcherDisposedError, v as RuntimeAlreadyInitializedError } from "./errors-IJjsUwrE.js";
|
|
2
|
-
import { Cause, Effect, Exit, Fiber, Layer, ManagedRuntime } from "effect";
|
|
3
|
-
import { createSubscriber } from "svelte/reactivity";
|
|
4
|
-
import { isRedirect } from "@sveltejs/kit";
|
|
5
|
-
//#region src/dispatcher/fibers.ts
|
|
6
|
-
/**
|
|
7
|
-
* Interrupts a dispatcher fiber through its managed runtime.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```ts
|
|
11
|
-
* interrupt_fiber(runtime, fiber);
|
|
12
|
-
* ```
|
|
13
|
-
*
|
|
14
|
-
* @since 2.0.0
|
|
15
|
-
* @param runtime - Managed runtime that owns the fiber.
|
|
16
|
-
* @param fiber - Fiber to interrupt.
|
|
17
|
-
* @returns Nothing.
|
|
18
|
-
* @internal
|
|
19
|
-
*/
|
|
20
|
-
function interrupt_fiber(runtime, fiber) {
|
|
21
|
-
runtime.runFork(Fiber.interrupt(fiber));
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Watches a dispatcher fiber, runs completion callbacks, and surfaces
|
|
25
|
-
* non-interrupt failures on the microtask queue.
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* ```ts
|
|
29
|
-
* watch_fiber_exit({ runtime, fiber, on_complete: cleanup });
|
|
30
|
-
* ```
|
|
31
|
-
*
|
|
32
|
-
* @since 2.0.0
|
|
33
|
-
* @param options - Runtime, fiber, and callbacks used for the watcher.
|
|
34
|
-
* @returns Nothing.
|
|
35
|
-
* @internal
|
|
36
|
-
*/
|
|
37
|
-
function watch_fiber_exit(options) {
|
|
38
|
-
const { runtime, fiber, on_complete, on_success, on_failure, surface_failure = true } = options;
|
|
39
|
-
runtime.runFork(Effect.flatMap(Fiber.await(fiber), (exit) => Effect.sync(() => {
|
|
40
|
-
if (Exit.isSuccess(exit)) {
|
|
41
|
-
on_success?.(exit.value);
|
|
42
|
-
on_complete?.();
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
if (!Cause.hasInterruptsOnly(exit.cause)) {
|
|
46
|
-
const error = Cause.squash(exit.cause);
|
|
47
|
-
on_failure?.(error);
|
|
48
|
-
if (surface_failure) queueMicrotask(() => {
|
|
49
|
-
throw error;
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
on_complete?.();
|
|
53
|
-
})));
|
|
54
|
-
}
|
|
55
|
-
//#endregion
|
|
56
|
-
//#region src/dispatcher/deps.ts
|
|
57
|
-
const object_dep_ids = /* @__PURE__ */ new WeakMap();
|
|
58
|
-
const symbol_dep_ids = /* @__PURE__ */ new Map();
|
|
59
|
-
let next_object_dep_id = 0;
|
|
60
|
-
let next_symbol_dep_id = 0;
|
|
61
|
-
/**
|
|
62
|
-
* Builds a deterministic cache key from a dependency array.
|
|
63
|
-
*
|
|
64
|
-
* @example
|
|
65
|
-
* ```ts
|
|
66
|
-
* const key = hash_deps([user_id, filters]);
|
|
67
|
-
* ```
|
|
68
|
-
*
|
|
69
|
-
* @since 2.0.0
|
|
70
|
-
* @param deps - Dependency array to encode for cache lookup.
|
|
71
|
-
* @returns A structured string key suitable for Map lookups.
|
|
72
|
-
* @internal
|
|
73
|
-
*/
|
|
74
|
-
function hash_deps(deps) {
|
|
75
|
-
const parts = deps.map((dep) => {
|
|
76
|
-
if (dep === null) return "l:null";
|
|
77
|
-
if (dep === void 0) return "u:undefined";
|
|
78
|
-
const type = typeof dep;
|
|
79
|
-
if (type === "string") return ["s", dep];
|
|
80
|
-
if (type === "number") return `n:${Object.is(dep, -0) ? "-0" : String(dep)}`;
|
|
81
|
-
if (type === "bigint") return `b:${dep}`;
|
|
82
|
-
if (type === "boolean") return dep ? "t:true" : "f:false";
|
|
83
|
-
if (type === "symbol") return hash_symbol_dep(dep);
|
|
84
|
-
return hash_object_dep(dep);
|
|
85
|
-
});
|
|
86
|
-
return JSON.stringify(parts);
|
|
87
|
-
}
|
|
88
|
-
function hash_symbol_dep(dep) {
|
|
89
|
-
let id = symbol_dep_ids.get(dep);
|
|
90
|
-
if (id === void 0) {
|
|
91
|
-
next_symbol_dep_id += 1;
|
|
92
|
-
id = next_symbol_dep_id;
|
|
93
|
-
symbol_dep_ids.set(dep, id);
|
|
94
|
-
}
|
|
95
|
-
return `y:${id}`;
|
|
96
|
-
}
|
|
97
|
-
function hash_object_dep(dep) {
|
|
98
|
-
let id = object_dep_ids.get(dep);
|
|
99
|
-
if (id === void 0) {
|
|
100
|
-
next_object_dep_id += 1;
|
|
101
|
-
id = next_object_dep_id;
|
|
102
|
-
object_dep_ids.set(dep, id);
|
|
103
|
-
}
|
|
104
|
-
return `o:${id}`;
|
|
105
|
-
}
|
|
106
|
-
//#endregion
|
|
107
|
-
//#region src/dispatcher/types.ts
|
|
108
|
-
/**
|
|
109
|
-
* Stable operation codes used by transform-generated dispatcher events.
|
|
110
|
-
*
|
|
111
|
-
* @example
|
|
112
|
-
* ```ts
|
|
113
|
-
* const type = Code.Markup.Promise;
|
|
114
|
-
* ```
|
|
115
|
-
*
|
|
116
|
-
* @since 3.3.0
|
|
117
|
-
* @internal
|
|
118
|
-
*/
|
|
119
|
-
const Code = { Markup: {
|
|
120
|
-
Promise: "MarkupPromise",
|
|
121
|
-
Run: "MarkupRun",
|
|
122
|
-
Value: "MarkupValue"
|
|
123
|
-
} };
|
|
124
|
-
//#endregion
|
|
125
|
-
//#region src/dispatcher/index.ts
|
|
126
|
-
/**
|
|
127
|
-
* Unified effect block dispatcher. Manages the fiber lifecycle of every
|
|
128
|
-
* effect block and wires results into reactive channels.
|
|
129
|
-
*
|
|
130
|
-
* @example
|
|
131
|
-
* ```ts
|
|
132
|
-
* const dispatcher = new Dispatcher();
|
|
133
|
-
* const cancel = dispatcher.fork(Effect.log("running"));
|
|
134
|
-
* cancel();
|
|
135
|
-
* ```
|
|
136
|
-
*
|
|
137
|
-
* @since 2.0.0
|
|
138
|
-
* @internal
|
|
139
|
-
*/
|
|
140
|
-
var Dispatcher = class Dispatcher {
|
|
141
|
-
/** The underlying Effect runtime that executes forked programs. */
|
|
142
|
-
#runtime;
|
|
143
|
-
/** Active fibers keyed by cache id or generated fork id. */
|
|
144
|
-
#fibers = /* @__PURE__ */ new Map();
|
|
145
|
-
/** Reactive value cells keyed by value cache id. */
|
|
146
|
-
#value_cells = /* @__PURE__ */ new Map();
|
|
147
|
-
/** Notifies subscribed Svelte template effects when value cells change. */
|
|
148
|
-
#notify_value_cells = () => {};
|
|
149
|
-
/** Subscribes the current Svelte tracking scope to value cell changes. */
|
|
150
|
-
#subscribe_value_cells = createSubscriber((update) => {
|
|
151
|
-
this.#notify_value_cells = update;
|
|
152
|
-
return () => {
|
|
153
|
-
if (this.#notify_value_cells !== update) return;
|
|
154
|
-
this.#notify_value_cells = () => {};
|
|
155
|
-
};
|
|
156
|
-
});
|
|
157
|
-
/** Pending promises keyed by promise cache id. */
|
|
158
|
-
#promise_values = /* @__PURE__ */ new Map();
|
|
159
|
-
/** Current cache key per value block id. */
|
|
160
|
-
#value_ids = /* @__PURE__ */ new Map();
|
|
161
|
-
/** Current cache key per promise block id. */
|
|
162
|
-
#promise_ids = /* @__PURE__ */ new Map();
|
|
163
|
-
/** Whether dispose has been called, blocking new work. */
|
|
164
|
-
#disposed = false;
|
|
165
|
-
/** Monotonically increasing counter for unnamed fiber keys. */
|
|
166
|
-
#next_fiber_id = 0;
|
|
167
|
-
/**
|
|
168
|
-
* Creates a dispatcher with an optional layer and installs it as the global
|
|
169
|
-
* singleton returned by {@link get_dispatcher}.
|
|
170
|
-
*
|
|
171
|
-
* @example
|
|
172
|
-
* ```ts
|
|
173
|
-
* const dispatcher = Dispatcher.make(Db.Live);
|
|
174
|
-
* ```
|
|
175
|
-
*
|
|
176
|
-
* @since 2.0.0
|
|
177
|
-
* @param layer - Optional Effect layer to provide to the runtime.
|
|
178
|
-
* @returns The newly created dispatcher.
|
|
179
|
-
*/
|
|
180
|
-
static make(layer) {
|
|
181
|
-
if (current_dispatcher) throw new RuntimeAlreadyInitializedError("ClientRuntime");
|
|
182
|
-
const runtime = ManagedRuntime.make(layer ?? Layer.empty);
|
|
183
|
-
const dispatcher = new Dispatcher(runtime);
|
|
184
|
-
current_dispatcher = dispatcher;
|
|
185
|
-
return dispatcher;
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Creates a dispatcher backed by the provided managed runtime.
|
|
189
|
-
*
|
|
190
|
-
* @example
|
|
191
|
-
* ```ts
|
|
192
|
-
* const dispatcher = new Dispatcher(runtime);
|
|
193
|
-
* ```
|
|
194
|
-
*
|
|
195
|
-
* @since 2.0.0
|
|
196
|
-
* @param runtime - Managed runtime to use, or an empty-layer runtime when
|
|
197
|
-
* omitted.
|
|
198
|
-
*/
|
|
199
|
-
constructor(runtime) {
|
|
200
|
-
this.#runtime = runtime ?? ManagedRuntime.make(Layer.empty);
|
|
201
|
-
}
|
|
202
|
-
emit(event) {
|
|
203
|
-
switch (event.type) {
|
|
204
|
-
case Code.Markup.Value: return this.#emit_markup_value(event);
|
|
205
|
-
case Code.Markup.Promise: return this.#emit_markup_promise(event);
|
|
206
|
-
case Code.Markup.Run: return this.#emit_markup_run(event);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Forks an effect as a managed fiber and returns a cleanup function.
|
|
211
|
-
*
|
|
212
|
-
* @example
|
|
213
|
-
* ```ts
|
|
214
|
-
* const dispose = dispatcher.fork(Effect.log("clicked"));
|
|
215
|
-
* ```
|
|
216
|
-
*
|
|
217
|
-
* @since 2.0.0
|
|
218
|
-
* @param effect - Effect to fork.
|
|
219
|
-
* @returns A function that interrupts the fiber.
|
|
220
|
-
*/
|
|
221
|
-
fork(effect) {
|
|
222
|
-
if (this.#disposed) return () => {};
|
|
223
|
-
const fiber = this.#runtime.runFork(effect);
|
|
224
|
-
const key = `fork:${this.#next_fiber_id}`;
|
|
225
|
-
this.#next_fiber_id += 1;
|
|
226
|
-
this.#fibers.set(key, fiber);
|
|
227
|
-
watch_fiber_exit({
|
|
228
|
-
runtime: this.#runtime,
|
|
229
|
-
fiber,
|
|
230
|
-
on_complete: () => this.#fibers.delete(key)
|
|
231
|
-
});
|
|
232
|
-
let disposed = false;
|
|
233
|
-
return () => {
|
|
234
|
-
if (disposed) return;
|
|
235
|
-
disposed = true;
|
|
236
|
-
interrupt_fiber(this.#runtime, fiber);
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* Forks an effect and exposes its result as a cached reactive value.
|
|
241
|
-
*
|
|
242
|
-
* @example
|
|
243
|
-
* ```ts
|
|
244
|
-
* const user = dispatcher.value({ id, deps, fallback, factory });
|
|
245
|
-
* ```
|
|
246
|
-
*
|
|
247
|
-
* @since 2.0.0
|
|
248
|
-
* @param options - Value id, dependency array, fallback, and effect factory.
|
|
249
|
-
* @returns The cached value if resolved, otherwise the fallback.
|
|
250
|
-
*/
|
|
251
|
-
value(options) {
|
|
252
|
-
if (this.#disposed) return options.fallback;
|
|
253
|
-
const cache_key = this.#make_value_cache_key(options.id, options.deps);
|
|
254
|
-
const old_key = this.#value_ids.get(options.id);
|
|
255
|
-
this.#subscribe_value_cells();
|
|
256
|
-
const cell = this.#value_cells.get(cache_key);
|
|
257
|
-
if (old_key !== void 0 && old_key !== cache_key) {
|
|
258
|
-
const old_fiber = this.#interrupt_cached_fiber(old_key);
|
|
259
|
-
this.#clear_pending_value_cell(old_key, old_fiber);
|
|
260
|
-
}
|
|
261
|
-
this.#value_ids.set(options.id, cache_key);
|
|
262
|
-
if (this.#should_start_value_fiber(cache_key, cell)) this.#start_value_fiber(cache_key, options);
|
|
263
|
-
if (cell?.status === "success") return cell.value;
|
|
264
|
-
if (cell?.status === "failure") throw cell.error;
|
|
265
|
-
return options.fallback;
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Forks an effect and exposes its completion as a cached promise.
|
|
269
|
-
*
|
|
270
|
-
* @example
|
|
271
|
-
* ```ts
|
|
272
|
-
* const promise = dispatcher.promise({ id, deps, factory });
|
|
273
|
-
* ```
|
|
274
|
-
*
|
|
275
|
-
* @since 2.0.0
|
|
276
|
-
* @param options - Promise id, dependency array, and effect factory.
|
|
277
|
-
* @returns A promise that resolves with the effect result.
|
|
278
|
-
*/
|
|
279
|
-
promise(options) {
|
|
280
|
-
if (this.#disposed) return Promise.reject(new DispatcherDisposedError());
|
|
281
|
-
const cache_key = this.#make_promise_cache_key(options.id, options.deps);
|
|
282
|
-
const old_key = this.#promise_ids.get(options.id);
|
|
283
|
-
if (old_key !== void 0 && old_key !== cache_key) {
|
|
284
|
-
this.#interrupt_cached_fiber(old_key);
|
|
285
|
-
this.#promise_values.delete(old_key);
|
|
286
|
-
}
|
|
287
|
-
this.#promise_ids.set(options.id, cache_key);
|
|
288
|
-
const existing = this.#promise_values.get(cache_key);
|
|
289
|
-
if (existing) return existing;
|
|
290
|
-
const promise = this.#start_promise_fiber(cache_key, options);
|
|
291
|
-
this.#promise_values.set(cache_key, promise);
|
|
292
|
-
return promise;
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Runs an event-handler effect and surfaces failures to Svelte.
|
|
296
|
-
*
|
|
297
|
-
* @example
|
|
298
|
-
* ```ts
|
|
299
|
-
* await dispatcher.run(Effect.log("submit"));
|
|
300
|
-
* ```
|
|
301
|
-
*
|
|
302
|
-
* @since 2.0.0
|
|
303
|
-
* @param effect - Effect to execute.
|
|
304
|
-
* @returns A promise that resolves or rejects when the effect completes.
|
|
305
|
-
*/
|
|
306
|
-
run(effect) {
|
|
307
|
-
if (this.#disposed) return Promise.reject(new DispatcherDisposedError());
|
|
308
|
-
const ExitProgram = Effect.exit(effect);
|
|
309
|
-
return this.#runtime.runPromise(ExitProgram).then((exit) => {
|
|
310
|
-
const result = exit;
|
|
311
|
-
if (Exit.isSuccess(result)) return result.value;
|
|
312
|
-
if (Cause.hasInterruptsOnly(result.cause)) return;
|
|
313
|
-
const error = Cause.squash(result.cause);
|
|
314
|
-
if (isRedirect(error)) return;
|
|
315
|
-
queueMicrotask(() => {
|
|
316
|
-
throw error;
|
|
317
|
-
});
|
|
318
|
-
throw error;
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
#emit_markup_value(event) {
|
|
322
|
-
if (this.#is_server_render()) return event.fallback;
|
|
323
|
-
return this.value({
|
|
324
|
-
id: event.id,
|
|
325
|
-
deps: event.deps,
|
|
326
|
-
fallback: event.fallback,
|
|
327
|
-
factory: event.fn
|
|
328
|
-
});
|
|
329
|
-
}
|
|
330
|
-
#emit_markup_promise(event) {
|
|
331
|
-
if (this.#is_server_render()) {
|
|
332
|
-
if (event.options?.ssr === "pending") return new Promise(() => {});
|
|
333
|
-
if ("ssr_fallback" in event) return Promise.resolve(event.ssr_fallback);
|
|
334
|
-
}
|
|
335
|
-
return this.promise({
|
|
336
|
-
id: event.id,
|
|
337
|
-
deps: event.deps,
|
|
338
|
-
factory: event.fn
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
#emit_markup_run(event) {
|
|
342
|
-
const Program = Effect.gen(event.fn);
|
|
343
|
-
return this.run(Program);
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* Cancels all running fibers and releases cached values.
|
|
347
|
-
*
|
|
348
|
-
* @example
|
|
349
|
-
* ```ts
|
|
350
|
-
* dispatcher.dispose();
|
|
351
|
-
* ```
|
|
352
|
-
*
|
|
353
|
-
* @since 2.0.0
|
|
354
|
-
* @returns Nothing.
|
|
355
|
-
*/
|
|
356
|
-
dispose() {
|
|
357
|
-
this.#disposed = true;
|
|
358
|
-
for (const fiber of this.#fibers.values()) interrupt_fiber(this.#runtime, fiber);
|
|
359
|
-
this.#fibers.clear();
|
|
360
|
-
this.#clear_value_cells();
|
|
361
|
-
this.#promise_values.clear();
|
|
362
|
-
this.#value_ids.clear();
|
|
363
|
-
this.#promise_ids.clear();
|
|
364
|
-
this.#runtime.dispose().catch((error) => {
|
|
365
|
-
queueMicrotask(() => {
|
|
366
|
-
throw error;
|
|
367
|
-
});
|
|
368
|
-
});
|
|
369
|
-
}
|
|
370
|
-
#make_value_cache_key(id, deps) {
|
|
371
|
-
return `value:${id}::${hash_deps(deps)}`;
|
|
372
|
-
}
|
|
373
|
-
#make_promise_cache_key(id, deps) {
|
|
374
|
-
return `promise:${id}::${hash_deps(deps)}`;
|
|
375
|
-
}
|
|
376
|
-
#is_server_render() {
|
|
377
|
-
return typeof document === "undefined";
|
|
378
|
-
}
|
|
379
|
-
#interrupt_cached_fiber(cache_key) {
|
|
380
|
-
const old_fiber = this.#fibers.get(cache_key);
|
|
381
|
-
if (!old_fiber) return;
|
|
382
|
-
interrupt_fiber(this.#runtime, old_fiber);
|
|
383
|
-
this.#fibers.delete(cache_key);
|
|
384
|
-
return old_fiber;
|
|
385
|
-
}
|
|
386
|
-
#should_start_value_fiber(cache_key, cell) {
|
|
387
|
-
return !this.#disposed && !this.#fibers.has(cache_key) && cell === void 0;
|
|
388
|
-
}
|
|
389
|
-
#start_value_fiber(cache_key, options) {
|
|
390
|
-
const Program = Effect.gen(function* () {
|
|
391
|
-
return yield* Effect.gen(options.factory);
|
|
392
|
-
});
|
|
393
|
-
const fiber = this.#runtime.runFork(Program);
|
|
394
|
-
this.#fibers.set(cache_key, fiber);
|
|
395
|
-
queueMicrotask(() => {
|
|
396
|
-
if (!this.#is_current_fiber(cache_key, fiber)) return;
|
|
397
|
-
if (this.#value_cells.has(cache_key)) return;
|
|
398
|
-
this.#set_value_cell(cache_key, {
|
|
399
|
-
status: "pending",
|
|
400
|
-
fiber
|
|
401
|
-
});
|
|
402
|
-
});
|
|
403
|
-
watch_fiber_exit({
|
|
404
|
-
runtime: this.#runtime,
|
|
405
|
-
fiber,
|
|
406
|
-
surface_failure: false,
|
|
407
|
-
on_complete: () => this.#complete_fiber(cache_key, fiber),
|
|
408
|
-
on_success: (value) => this.#publish_value_success(cache_key, fiber, value),
|
|
409
|
-
on_failure: (error) => this.#publish_value_failure(cache_key, fiber, error)
|
|
410
|
-
});
|
|
411
|
-
}
|
|
412
|
-
#start_promise_fiber(cache_key, options) {
|
|
413
|
-
const Program = Effect.gen(function* () {
|
|
414
|
-
return yield* Effect.gen(options.factory);
|
|
415
|
-
});
|
|
416
|
-
const fiber = this.#runtime.runFork(Program);
|
|
417
|
-
this.#fibers.set(cache_key, fiber);
|
|
418
|
-
return this.#runtime.runPromise(Effect.flatMap(Fiber.await(fiber), (exit) => Effect.sync(() => {
|
|
419
|
-
if (this.#is_current_fiber(cache_key, fiber)) {
|
|
420
|
-
this.#fibers.delete(cache_key);
|
|
421
|
-
this.#promise_values.delete(cache_key);
|
|
422
|
-
if (this.#promise_ids.get(options.id) === cache_key) this.#promise_ids.delete(options.id);
|
|
423
|
-
}
|
|
424
|
-
if (Exit.isSuccess(exit)) return exit.value;
|
|
425
|
-
throw Cause.squash(exit.cause);
|
|
426
|
-
})));
|
|
427
|
-
}
|
|
428
|
-
#clear_pending_value_cell(cache_key, fiber) {
|
|
429
|
-
const cell = this.#value_cells.get(cache_key);
|
|
430
|
-
if (cell?.status !== "pending") return;
|
|
431
|
-
if (fiber !== void 0 && cell.fiber !== fiber) return;
|
|
432
|
-
this.#delete_value_cell(cache_key);
|
|
433
|
-
}
|
|
434
|
-
#complete_fiber(cache_key, fiber) {
|
|
435
|
-
if (!this.#is_current_fiber(cache_key, fiber)) return;
|
|
436
|
-
this.#fibers.delete(cache_key);
|
|
437
|
-
}
|
|
438
|
-
#publish_value_success(cache_key, fiber, value) {
|
|
439
|
-
if (!this.#is_current_fiber(cache_key, fiber)) return;
|
|
440
|
-
this.#set_value_cell(cache_key, {
|
|
441
|
-
status: "success",
|
|
442
|
-
value
|
|
443
|
-
});
|
|
444
|
-
}
|
|
445
|
-
#publish_value_failure(cache_key, fiber, error) {
|
|
446
|
-
if (!this.#is_current_fiber(cache_key, fiber)) return;
|
|
447
|
-
this.#set_value_cell(cache_key, {
|
|
448
|
-
status: "failure",
|
|
449
|
-
error
|
|
450
|
-
});
|
|
451
|
-
}
|
|
452
|
-
#set_value_cell(cache_key, cell) {
|
|
453
|
-
this.#value_cells.set(cache_key, cell);
|
|
454
|
-
this.#notify_value_cells();
|
|
455
|
-
}
|
|
456
|
-
#delete_value_cell(cache_key) {
|
|
457
|
-
if (!this.#value_cells.delete(cache_key)) return;
|
|
458
|
-
this.#notify_value_cells();
|
|
459
|
-
}
|
|
460
|
-
#clear_value_cells() {
|
|
461
|
-
if (this.#value_cells.size === 0) return;
|
|
462
|
-
this.#value_cells.clear();
|
|
463
|
-
this.#notify_value_cells();
|
|
464
|
-
}
|
|
465
|
-
#is_current_fiber(cache_key, fiber) {
|
|
466
|
-
return !this.#disposed && this.#fibers.get(cache_key) === fiber;
|
|
467
|
-
}
|
|
468
|
-
};
|
|
469
|
-
let current_dispatcher = null;
|
|
470
|
-
/**
|
|
471
|
-
* Resolves the active dispatcher, creating a default one if necessary.
|
|
472
|
-
*
|
|
473
|
-
* @example
|
|
474
|
-
* ```ts
|
|
475
|
-
* const dispatcher = get_dispatcher();
|
|
476
|
-
* ```
|
|
477
|
-
*
|
|
478
|
-
* @since 2.0.0
|
|
479
|
-
* @returns The active dispatcher singleton.
|
|
480
|
-
* @internal
|
|
481
|
-
*/
|
|
482
|
-
function get_dispatcher() {
|
|
483
|
-
current_dispatcher ??= new Dispatcher();
|
|
484
|
-
return current_dispatcher;
|
|
485
|
-
}
|
|
486
|
-
/**
|
|
487
|
-
* Resets the internal singleton dispatcher used by source-level tests.
|
|
488
|
-
*
|
|
489
|
-
* @example
|
|
490
|
-
* ```ts
|
|
491
|
-
* reset_dispatcher();
|
|
492
|
-
* ```
|
|
493
|
-
*
|
|
494
|
-
* @since 2.0.0
|
|
495
|
-
* @returns Nothing.
|
|
496
|
-
* @internal
|
|
497
|
-
*/
|
|
498
|
-
function reset_dispatcher() {
|
|
499
|
-
current_dispatcher?.dispose();
|
|
500
|
-
current_dispatcher = null;
|
|
501
|
-
}
|
|
502
|
-
//#endregion
|
|
503
|
-
export { Code as i, get_dispatcher as n, reset_dispatcher as r, Dispatcher as t };
|
|
504
|
-
|
|
505
|
-
//# sourceMappingURL=dispatcher-DOx8iC6r.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher-DOx8iC6r.js","names":["#notify_value_cells","#runtime","#emit_markup_value","#emit_markup_promise","#emit_markup_run","#disposed","#next_fiber_id","#fibers","#make_value_cache_key","#value_ids","#subscribe_value_cells","#value_cells","#interrupt_cached_fiber","#clear_pending_value_cell","#should_start_value_fiber","#start_value_fiber","#make_promise_cache_key","#promise_ids","#promise_values","#start_promise_fiber","#is_server_render","#clear_value_cells","#is_current_fiber","#set_value_cell","#complete_fiber","#publish_value_success","#publish_value_failure","#delete_value_cell"],"sources":["../../../modules/svelte-effect-runtime/src/dispatcher/fibers.ts","../../../modules/svelte-effect-runtime/src/dispatcher/deps.ts","../../../modules/svelte-effect-runtime/src/dispatcher/types.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\ton_complete?: () => void;\n\ton_success?: (value: A) => void;\n\ton_failure?: (error: unknown) => void;\n\tsurface_failure?: boolean;\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\truntime: ManagedRuntimeType<unknown, unknown>,\n\tfiber: FiberType<unknown, unknown>,\n): void {\n\truntime.runFork(Fiber.interrupt(fiber) as Effect.Effect<unknown, unknown, unknown>);\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\toptions: {\n\t\truntime: ManagedRuntimeType<unknown, unknown>;\n\t\tfiber: FiberType<unknown, unknown>;\n\t} & FiberWatchCallbacks<A>,\n): void {\n\tconst { runtime, fiber, on_complete, on_success, on_failure, surface_failure = true } = options;\n\n\truntime.runFork(\n\t\tEffect.flatMap(Fiber.await(fiber), (exit) =>\n\t\t\tEffect.sync(() => {\n\t\t\t\tif (Exit.isSuccess(exit)) {\n\t\t\t\t\ton_success?.(exit.value as A);\n\t\t\t\t\ton_complete?.();\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!Cause.hasInterruptsOnly(exit.cause)) {\n\t\t\t\t\tconst error = Cause.squash(exit.cause);\n\n\t\t\t\t\ton_failure?.(error);\n\n\t\t\t\t\tif (surface_failure) {\n\t\t\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ton_complete?.();\n\t\t\t}),\n\t\t),\n\t);\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\tconst parts = deps.map((dep) => {\n\t\tif (dep === null) {\n\t\t\treturn \"l:null\";\n\t\t}\n\n\t\tif (dep === undefined) {\n\t\t\treturn \"u:undefined\";\n\t\t}\n\n\t\tconst type = typeof dep;\n\n\t\tif (type === \"string\") {\n\t\t\treturn [\"s\", dep];\n\t\t}\n\n\t\tif (type === \"number\") {\n\t\t\treturn `n:${Object.is(dep, -0) ? \"-0\" : String(dep)}`;\n\t\t}\n\n\t\tif (type === \"bigint\") {\n\t\t\treturn `b:${dep}`;\n\t\t}\n\n\t\tif (type === \"boolean\") {\n\t\t\treturn dep ? \"t:true\" : \"f:false\";\n\t\t}\n\n\t\tif (type === \"symbol\") {\n\t\t\treturn hash_symbol_dep(dep as symbol);\n\t\t}\n\n\t\treturn hash_object_dep(dep as object);\n\t});\n\n\treturn JSON.stringify(parts);\n}\n\nfunction hash_symbol_dep(dep: symbol): string {\n\tlet id = symbol_dep_ids.get(dep);\n\n\tif (id === undefined) {\n\t\tnext_symbol_dep_id += 1;\n\t\tid = next_symbol_dep_id;\n\t\tsymbol_dep_ids.set(dep, id);\n\t}\n\n\treturn `y:${id}`;\n}\n\nfunction hash_object_dep(dep: object): string {\n\tlet id = object_dep_ids.get(dep);\n\n\tif (id === undefined) {\n\t\tnext_object_dep_id += 1;\n\t\tid = next_object_dep_id;\n\t\tobject_dep_ids.set(dep, id);\n\t}\n\n\treturn `o:${id}`;\n}\n","import type { Effect } from \"effect\";\n\n/**\n * Stable operation codes used by transform-generated dispatcher events.\n *\n * @example\n * ```ts\n * const type = Code.Markup.Promise;\n * ```\n *\n * @since 3.3.0\n * @internal\n */\nexport const Code = {\n\tMarkup: {\n\t\tPromise: \"MarkupPromise\",\n\t\tRun: \"MarkupRun\",\n\t\tValue: \"MarkupValue\",\n\t},\n} as const;\n\n/**\n * Options for markup promise behavior during server rendering.\n *\n * @example\n * ```ts\n * const options: MarkupPromiseOptions = { ssr: \"pending\" };\n * ```\n *\n * @since 3.3.0\n * @internal\n */\nexport interface MarkupPromiseOptions {\n\t/** Keep the SSR promise pending so Svelte renders an await block fallback. */\n\tssr?: \"pending\";\n}\n\n/**\n * Minimal cleanup handle returned by dispatcher lifecycle hooks.\n *\n * @example\n * ```ts\n * const dispose: Dispose = dispatcher.fork(program);\n * dispose();\n * ```\n *\n * @since 2.0.0\n * @internal\n */\nexport type Dispose = () => void;\n\n/**\n * Options for a cached dispatcher value block.\n *\n * @example\n * ```ts\n * const options: ValueOptions<number> = {\n * id: \"count\",\n * deps: [],\n * fallback: 0,\n * factory: () => Effect.succeed(1),\n * };\n * ```\n *\n * @since 2.0.0\n * @internal\n */\nexport interface ValueOptions<A> {\n\t/** Stable cache key for this value block. */\n\tid: string;\n\t/** Reactive dependency array. */\n\tdeps: readonly unknown[];\n\t/** Value returned synchronously while the effect is running or during SSR. */\n\tfallback: A;\n\t/** Generator function that yields the effect to run. */\n\tfactory: () => Effect.gen.Return<A, unknown, unknown>;\n}\n\n/**\n * Options for a cached dispatcher promise block.\n *\n * @example\n * ```ts\n * const options: PromiseOptions<number> = {\n * id: \"count\",\n * deps: [],\n * factory: () => Effect.succeed(1),\n * };\n * ```\n *\n * @since 2.0.0\n * @internal\n */\nexport interface PromiseOptions<A> {\n\t/** Stable cache key for this promise block. */\n\tid: string;\n\t/** Reactive dependency array. */\n\tdeps: readonly unknown[];\n\t/** Generator function that yields the effect to run. */\n\tfactory: () => Effect.gen.Return<A, unknown, unknown>;\n}\n\n/**\n * Generated event that reads a markup expression through the cached value\n * channel.\n *\n * @example\n * ```ts\n * const event: MarkupValueEvent<number, undefined> = {\n * type: Code.Markup.Value,\n * id: \"Component.svelte:1:2\",\n * deps: [],\n * fallback: undefined,\n * fn: function* () {\n * return yield* Effect.succeed(1);\n * },\n * };\n * ```\n *\n * @since 3.3.0\n * @internal\n */\nexport interface MarkupValueEvent<A, F> {\n\t/** Dispatcher code identifying a markup value read. */\n\ttype: typeof Code.Markup.Value;\n\t/** Stable identifier generated from the expression's source position. */\n\tid: string;\n\t/** Reactive dependency array captured from free identifiers. */\n\tdeps: readonly unknown[];\n\t/** Value returned synchronously while the effect is pending. */\n\tfallback: F;\n\t/** Generator function that yields the effect to run. */\n\tfn: () => Effect.gen.Return<A, unknown, unknown>;\n}\n\n/**\n * Generated event that reads a markup expression through the cached promise\n * channel.\n *\n * @example\n * ```ts\n * const event: MarkupPromiseEvent<number> = {\n * type: Code.Markup.Promise,\n * id: \"Component.svelte:1:2\",\n * deps: [],\n * fn: function* () {\n * return yield* Effect.succeed(1);\n * },\n * };\n * ```\n *\n * @since 3.3.0\n * @internal\n */\nexport interface MarkupPromiseEvent<A> {\n\t/** Dispatcher code identifying a markup promise read. */\n\ttype: typeof Code.Markup.Promise;\n\t/** Stable identifier generated from the expression's source position. */\n\tid: string;\n\t/** Reactive dependency array captured from free identifiers. */\n\tdeps: readonly unknown[];\n\t/** Generator function that yields the effect to run. */\n\tfn: () => Effect.gen.Return<A, unknown, unknown>;\n\t/** Value resolved during SSR when a fallback is required. */\n\tssr_fallback?: A;\n\t/** Optional SSR behavior for await blocks and similar contexts. */\n\toptions?: MarkupPromiseOptions;\n}\n\n/**\n * Generated event that runs an event-handler Effect.\n *\n * @example\n * ```ts\n * const event: MarkupRunEvent<void> = {\n * type: Code.Markup.Run,\n * fn: function* () {\n * yield* Effect.void;\n * },\n * };\n * ```\n *\n * @since 3.3.0\n * @internal\n */\nexport interface MarkupRunEvent<A> {\n\t/** Dispatcher code identifying a markup event-handler run. */\n\ttype: typeof Code.Markup.Run;\n\t/** Generator function that yields the effect to run. */\n\tfn: () => Effect.gen.Return<A, unknown, unknown>;\n}\n\n/**\n * Union of generated dispatcher events.\n *\n * @example\n * ```ts\n * const event: DispatcherEvent<number, undefined> = {\n * type: Code.Markup.Value,\n * id: \"Component.svelte:1:2\",\n * deps: [],\n * fallback: undefined,\n * fn: function* () {\n * return yield* Effect.succeed(1);\n * },\n * };\n * ```\n *\n * @since 3.3.0\n * @internal\n */\nexport type DispatcherEvent<A, F = A> =\n\t| MarkupPromiseEvent<A>\n\t| MarkupRunEvent<A>\n\t| MarkupValueEvent<A, F>;\n","import type { ManagedRuntime as ManagedRuntimeType } from \"effect/ManagedRuntime\";\nimport { Cause, Effect, Exit, Fiber, Layer, ManagedRuntime } from \"effect\";\nimport { createSubscriber } from \"svelte/reactivity\";\nimport type { Fiber as FiberType } from \"effect/Fiber\";\nimport { isRedirect } from \"@sveltejs/kit\";\n\nimport { RuntimeAlreadyInitializedError, DispatcherDisposedError } from \"$/errors.ts\";\nimport { interrupt_fiber, watch_fiber_exit } from \"./fibers.ts\";\nimport { hash_deps } from \"./deps.ts\";\nimport { Code } from \"./types.ts\";\nimport type {\n\tDispatcherEvent,\n\tDispose,\n\tMarkupPromiseEvent,\n\tMarkupRunEvent,\n\tMarkupValueEvent,\n\tPromiseOptions,\n\tValueOptions,\n} from \"./types.ts\";\n\nexport { Code } from \"./types.ts\";\nexport type { Dispose, PromiseOptions, ValueOptions } from \"./types.ts\";\n\ntype ValueCell<A> =\n\t| {\n\t\t\treadonly status: \"pending\";\n\t\t\treadonly fiber: FiberType<unknown, unknown>;\n\t }\n\t| {\n\t\t\treadonly status: \"success\";\n\t\t\treadonly value: A;\n\t }\n\t| {\n\t\t\treadonly status: \"failure\";\n\t\t\treadonly error: unknown;\n\t };\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\t/** The underlying Effect runtime that executes forked programs. */\n\t#runtime: ManagedRuntimeType<unknown, unknown>;\n\t/** Active fibers keyed by cache id or generated fork id. */\n\t#fibers = new Map<string, FiberType<unknown, unknown>>();\n\t/** Reactive value cells keyed by value cache id. */\n\t#value_cells = new Map<string, ValueCell<unknown>>();\n\t/** Notifies subscribed Svelte template effects when value cells change. */\n\t#notify_value_cells = (): void => {};\n\t/** Subscribes the current Svelte tracking scope to value cell changes. */\n\t#subscribe_value_cells = createSubscriber((update) => {\n\t\tthis.#notify_value_cells = update;\n\n\t\treturn () => {\n\t\t\tif (this.#notify_value_cells !== update) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.#notify_value_cells = (): void => {};\n\t\t};\n\t});\n\t/** Pending promises keyed by promise cache id. */\n\t#promise_values = new Map<string, Promise<unknown>>();\n\t/** Current cache key per value block id. */\n\t#value_ids = new Map<string, string>();\n\t/** Current cache key per promise block id. */\n\t#promise_ids = new Map<string, string>();\n\t/** Whether dispose has been called, blocking new work. */\n\t#disposed = false;\n\t/** Monotonically increasing counter for unnamed fiber keys. */\n\t#next_fiber_id = 0;\n\n\t/**\n\t * Creates a dispatcher with an optional layer and installs it as the global\n\t * singleton returned by {@link get_dispatcher}.\n\t *\n\t * @example\n\t * ```ts\n\t * const dispatcher = Dispatcher.make(Db.Live);\n\t * ```\n\t *\n\t * @since 2.0.0\n\t * @param layer - Optional Effect layer to provide to the runtime.\n\t * @returns The newly created dispatcher.\n\t */\n\tstatic make<R = never>(layer?: Layer.Layer<R>): Dispatcher {\n\t\tif (current_dispatcher) {\n\t\t\tthrow new RuntimeAlreadyInitializedError(\"ClientRuntime\");\n\t\t}\n\n\t\tconst runtime = ManagedRuntime.make(layer ?? (Layer.empty as unknown as Layer.Layer<R>));\n\n\t\tconst dispatcher = new Dispatcher(runtime as ManagedRuntimeType<unknown, unknown>);\n\t\tcurrent_dispatcher = dispatcher;\n\n\t\treturn dispatcher;\n\t}\n\n\t/**\n\t * Creates a dispatcher backed by the provided managed runtime.\n\t *\n\t * @example\n\t * ```ts\n\t * const dispatcher = new Dispatcher(runtime);\n\t * ```\n\t *\n\t * @since 2.0.0\n\t * @param runtime - Managed runtime to use, or an empty-layer runtime when\n\t * omitted.\n\t */\n\tconstructor(runtime?: ManagedRuntimeType<unknown, unknown>) {\n\t\tthis.#runtime =\n\t\t\truntime ??\n\t\t\t(ManagedRuntime.make(Layer.empty) as unknown as ManagedRuntimeType<unknown, unknown>);\n\t}\n\n\t/**\n\t * Handles a transform-generated dispatcher event.\n\t *\n\t * @example\n\t * ```ts\n\t * const value = dispatcher.emit({\n\t * type: Code.Markup.Value,\n\t * id: \"Component.svelte:1:2\",\n\t * deps: [],\n\t * fallback: undefined,\n\t * fn: function* () {\n\t * return yield* Effect.succeed(1);\n\t * },\n\t * });\n\t * ```\n\t *\n\t * @since 3.3.0\n\t * @param event - Generated event describing the dispatcher operation to run.\n\t * @returns The operation result for the emitted dispatcher event.\n\t */\n\temit<A, F>(event: MarkupValueEvent<A, F>): A | F;\n\temit<A>(event: MarkupPromiseEvent<A>): Promise<A>;\n\temit<A>(event: MarkupRunEvent<A>): Promise<A>;\n\temit<A, F>(event: DispatcherEvent<A, F>): A | F | Promise<A>;\n\temit<A, F>(event: DispatcherEvent<A, F>): A | F | Promise<A> {\n\t\tswitch (event.type) {\n\t\t\tcase Code.Markup.Value:\n\t\t\t\treturn this.#emit_markup_value(event);\n\n\t\t\tcase Code.Markup.Promise:\n\t\t\t\treturn this.#emit_markup_promise(event);\n\n\t\t\tcase Code.Markup.Run:\n\t\t\t\treturn this.#emit_markup_run(event);\n\t\t}\n\t}\n\n\t/**\n\t * Forks an effect as a managed fiber and returns a cleanup function.\n\t *\n\t * @example\n\t * ```ts\n\t * const dispose = dispatcher.fork(Effect.log(\"clicked\"));\n\t * ```\n\t *\n\t * @since 2.0.0\n\t * @param effect - Effect to fork.\n\t * @returns A function that interrupts the fiber.\n\t */\n\tfork<A, E, R>(effect: Effect.Effect<A, E, R>): Dispose {\n\t\tif (this.#disposed) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst fiber = this.#runtime.runFork(effect as Effect.Effect<unknown, unknown, unknown>);\n\t\tconst key = `fork:${this.#next_fiber_id}`;\n\n\t\tthis.#next_fiber_id += 1;\n\t\tthis.#fibers.set(key, fiber);\n\t\twatch_fiber_exit({\n\t\t\truntime: this.#runtime,\n\t\t\tfiber,\n\t\t\ton_complete: () => this.#fibers.delete(key),\n\t\t});\n\n\t\tlet disposed = false;\n\n\t\treturn (): void => {\n\t\t\tif (disposed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdisposed = true;\n\t\t\tinterrupt_fiber(this.#runtime, fiber);\n\t\t};\n\t}\n\n\t/**\n\t * Forks an effect and exposes its result as a cached reactive value.\n\t *\n\t * @example\n\t * ```ts\n\t * const user = dispatcher.value({ id, deps, fallback, factory });\n\t * ```\n\t *\n\t * @since 2.0.0\n\t * @param options - Value id, dependency array, fallback, and effect factory.\n\t * @returns The cached value if resolved, otherwise the fallback.\n\t */\n\tvalue<A>(options: ValueOptions<A>): A {\n\t\tif (this.#disposed) {\n\t\t\treturn options.fallback;\n\t\t}\n\n\t\tconst cache_key = this.#make_value_cache_key(options.id, options.deps);\n\t\tconst old_key = this.#value_ids.get(options.id);\n\n\t\tthis.#subscribe_value_cells();\n\n\t\tconst cell = this.#value_cells.get(cache_key);\n\n\t\tif (old_key !== undefined && old_key !== cache_key) {\n\t\t\tconst old_fiber = this.#interrupt_cached_fiber(old_key);\n\n\t\t\tthis.#clear_pending_value_cell(old_key, old_fiber);\n\t\t}\n\n\t\tthis.#value_ids.set(options.id, cache_key);\n\n\t\tif (this.#should_start_value_fiber(cache_key, cell)) {\n\t\t\tthis.#start_value_fiber(cache_key, options);\n\t\t}\n\n\t\tif (cell?.status === \"success\") {\n\t\t\treturn cell.value as A;\n\t\t}\n\n\t\tif (cell?.status === \"failure\") {\n\t\t\tthrow cell.error;\n\t\t}\n\n\t\treturn options.fallback;\n\t}\n\n\t/**\n\t * Forks an effect and exposes its completion as a cached promise.\n\t *\n\t * @example\n\t * ```ts\n\t * const promise = dispatcher.promise({ id, deps, factory });\n\t * ```\n\t *\n\t * @since 2.0.0\n\t * @param options - Promise id, dependency array, and effect factory.\n\t * @returns A promise that resolves with the effect result.\n\t */\n\tpromise<A>(options: PromiseOptions<A>): Promise<A> {\n\t\tif (this.#disposed) {\n\t\t\treturn Promise.reject(new DispatcherDisposedError());\n\t\t}\n\n\t\tconst cache_key = this.#make_promise_cache_key(options.id, options.deps);\n\t\tconst old_key = this.#promise_ids.get(options.id);\n\n\t\tif (old_key !== undefined && old_key !== cache_key) {\n\t\t\tthis.#interrupt_cached_fiber(old_key);\n\t\t\tthis.#promise_values.delete(old_key);\n\t\t}\n\n\t\tthis.#promise_ids.set(options.id, cache_key);\n\n\t\tconst existing = this.#promise_values.get(cache_key);\n\n\t\tif (existing) {\n\t\t\treturn existing as Promise<A>;\n\t\t}\n\n\t\tconst promise = this.#start_promise_fiber(cache_key, options);\n\n\t\tthis.#promise_values.set(cache_key, promise);\n\n\t\treturn promise;\n\t}\n\n\t/**\n\t * Runs an event-handler effect and surfaces failures to Svelte.\n\t *\n\t * @example\n\t * ```ts\n\t * await dispatcher.run(Effect.log(\"submit\"));\n\t * ```\n\t *\n\t * @since 2.0.0\n\t * @param effect - Effect to execute.\n\t * @returns A promise that resolves or rejects when the effect completes.\n\t */\n\trun<A, E, R>(effect: Effect.Effect<A, E, R>): Promise<A> {\n\t\tif (this.#disposed) {\n\t\t\treturn Promise.reject(new DispatcherDisposedError());\n\t\t}\n\n\t\tconst ExitProgram = Effect.exit(effect) as Effect.Effect<unknown, unknown, unknown>;\n\n\t\treturn this.#runtime.runPromise(ExitProgram).then((exit: unknown) => {\n\t\t\tconst result = exit as Exit.Exit<A, E>;\n\n\t\t\tif (Exit.isSuccess(result)) {\n\t\t\t\treturn result.value;\n\t\t\t}\n\n\t\t\tif (Cause.hasInterruptsOnly(result.cause)) {\n\t\t\t\treturn undefined as A;\n\t\t\t}\n\n\t\t\tconst error = Cause.squash(result.cause);\n\n\t\t\tif (isRedirect(error)) {\n\t\t\t\treturn undefined as A;\n\t\t\t}\n\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tthrow error;\n\t\t\t});\n\n\t\t\tthrow error;\n\t\t});\n\t}\n\n\t#emit_markup_value<A, F>(event: MarkupValueEvent<A, F>): A | F {\n\t\tif (this.#is_server_render()) {\n\t\t\treturn event.fallback;\n\t\t}\n\n\t\treturn this.value<A | F>({\n\t\t\tid: event.id,\n\t\t\tdeps: event.deps,\n\t\t\tfallback: event.fallback,\n\t\t\tfactory: event.fn,\n\t\t});\n\t}\n\n\t#emit_markup_promise<A>(event: MarkupPromiseEvent<A>): Promise<A> {\n\t\tif (this.#is_server_render()) {\n\t\t\tif (event.options?.ssr === \"pending\") {\n\t\t\t\treturn new Promise<A>(() => {});\n\t\t\t}\n\n\t\t\tif (\"ssr_fallback\" in event) {\n\t\t\t\treturn Promise.resolve(event.ssr_fallback as A);\n\t\t\t}\n\t\t}\n\n\t\treturn this.promise({\n\t\t\tid: event.id,\n\t\t\tdeps: event.deps,\n\t\t\tfactory: event.fn,\n\t\t});\n\t}\n\n\t#emit_markup_run<A>(event: MarkupRunEvent<A>): Promise<A> {\n\t\tconst Program = Effect.gen(event.fn);\n\n\t\treturn this.run(Program);\n\t}\n\n\t/**\n\t * Cancels all running fibers and releases cached values.\n\t *\n\t * @example\n\t * ```ts\n\t * dispatcher.dispose();\n\t * ```\n\t *\n\t * @since 2.0.0\n\t * @returns Nothing.\n\t */\n\tdispose(): void {\n\t\tthis.#disposed = true;\n\n\t\tfor (const fiber of this.#fibers.values()) {\n\t\t\tinterrupt_fiber(this.#runtime, fiber);\n\t\t}\n\n\t\tthis.#fibers.clear();\n\t\tthis.#clear_value_cells();\n\t\tthis.#promise_values.clear();\n\t\tthis.#value_ids.clear();\n\t\tthis.#promise_ids.clear();\n\n\t\tvoid this.#runtime.dispose().catch((error: unknown) => {\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tthrow error;\n\t\t\t});\n\t\t});\n\t}\n\n\t#make_value_cache_key(id: string, deps: readonly unknown[]): string {\n\t\treturn `value:${id}::${hash_deps(deps)}`;\n\t}\n\n\t#make_promise_cache_key(id: string, deps: readonly unknown[]): string {\n\t\treturn `promise:${id}::${hash_deps(deps)}`;\n\t}\n\n\t#is_server_render(): boolean {\n\t\treturn typeof document === \"undefined\";\n\t}\n\n\t#interrupt_cached_fiber(cache_key: string): FiberType<unknown, unknown> | undefined {\n\t\tconst old_fiber = this.#fibers.get(cache_key);\n\n\t\tif (!old_fiber) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tinterrupt_fiber(this.#runtime, old_fiber);\n\t\tthis.#fibers.delete(cache_key);\n\n\t\treturn old_fiber;\n\t}\n\n\t#should_start_value_fiber(cache_key: string, cell: ValueCell<unknown> | undefined): boolean {\n\t\treturn !this.#disposed && !this.#fibers.has(cache_key) && cell === undefined;\n\t}\n\n\t#start_value_fiber<A>(cache_key: string, options: ValueOptions<A>): void {\n\t\tconst Program = Effect.gen(function* () {\n\t\t\tconst result = yield* Effect.gen(options.factory);\n\n\t\t\treturn result;\n\t\t});\n\t\tconst fiber = this.#runtime.runFork(Program as Effect.Effect<unknown, unknown, unknown>);\n\n\t\tthis.#fibers.set(cache_key, fiber);\n\n\t\tqueueMicrotask(() => {\n\t\t\tif (!this.#is_current_fiber(cache_key, fiber)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.#value_cells.has(cache_key)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.#set_value_cell(cache_key, {\n\t\t\t\tstatus: \"pending\",\n\t\t\t\tfiber,\n\t\t\t});\n\t\t});\n\n\t\twatch_fiber_exit({\n\t\t\truntime: this.#runtime,\n\t\t\tfiber,\n\t\t\tsurface_failure: false,\n\t\t\ton_complete: () => this.#complete_fiber(cache_key, fiber),\n\t\t\ton_success: (value) => this.#publish_value_success(cache_key, fiber, value),\n\t\t\ton_failure: (error) => this.#publish_value_failure(cache_key, fiber, error),\n\t\t});\n\t}\n\n\t#start_promise_fiber<A>(cache_key: string, options: PromiseOptions<A>): Promise<A> {\n\t\tconst Program = Effect.gen(function* () {\n\t\t\tconst result = yield* Effect.gen(options.factory);\n\n\t\t\treturn result;\n\t\t});\n\t\tconst fiber = this.#runtime.runFork(Program as Effect.Effect<unknown, unknown, unknown>);\n\n\t\tthis.#fibers.set(cache_key, fiber);\n\n\t\treturn this.#runtime.runPromise(\n\t\t\tEffect.flatMap(Fiber.await(fiber), (exit) =>\n\t\t\t\tEffect.sync(() => {\n\t\t\t\t\tconst is_current = this.#is_current_fiber(cache_key, fiber);\n\n\t\t\t\t\tif (is_current) {\n\t\t\t\t\t\tthis.#fibers.delete(cache_key);\n\t\t\t\t\t\tthis.#promise_values.delete(cache_key);\n\n\t\t\t\t\t\tif (this.#promise_ids.get(options.id) === cache_key) {\n\t\t\t\t\t\t\tthis.#promise_ids.delete(options.id);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Exit.isSuccess(exit)) {\n\t\t\t\t\t\treturn exit.value as A;\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow Cause.squash(exit.cause);\n\t\t\t\t}),\n\t\t\t),\n\t\t);\n\t}\n\n\t#clear_pending_value_cell(\n\t\tcache_key: string,\n\t\tfiber: FiberType<unknown, unknown> | undefined,\n\t): void {\n\t\tconst cell = this.#value_cells.get(cache_key);\n\n\t\tif (cell?.status !== \"pending\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (fiber !== undefined && cell.fiber !== fiber) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#delete_value_cell(cache_key);\n\t}\n\n\t#complete_fiber(cache_key: string, fiber: FiberType<unknown, unknown>): void {\n\t\tif (!this.#is_current_fiber(cache_key, fiber)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#fibers.delete(cache_key);\n\t}\n\n\t#publish_value_success<A>(\n\t\tcache_key: string,\n\t\tfiber: FiberType<unknown, unknown>,\n\t\tvalue: A,\n\t): void {\n\t\tif (!this.#is_current_fiber(cache_key, fiber)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#set_value_cell(cache_key, {\n\t\t\tstatus: \"success\",\n\t\t\tvalue,\n\t\t});\n\t}\n\n\t#publish_value_failure(\n\t\tcache_key: string,\n\t\tfiber: FiberType<unknown, unknown>,\n\t\terror: unknown,\n\t): void {\n\t\tif (!this.#is_current_fiber(cache_key, fiber)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#set_value_cell(cache_key, {\n\t\t\tstatus: \"failure\",\n\t\t\terror,\n\t\t});\n\t}\n\n\t#set_value_cell(cache_key: string, cell: ValueCell<unknown>): void {\n\t\tthis.#value_cells.set(cache_key, cell);\n\t\tthis.#notify_value_cells();\n\t}\n\n\t#delete_value_cell(cache_key: string): void {\n\t\tconst deleted = this.#value_cells.delete(cache_key);\n\n\t\tif (!deleted) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#notify_value_cells();\n\t}\n\n\t#clear_value_cells(): void {\n\t\tif (this.#value_cells.size === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#value_cells.clear();\n\t\tthis.#notify_value_cells();\n\t}\n\n\t#is_current_fiber(cache_key: string, fiber: FiberType<unknown, unknown>): boolean {\n\t\treturn !this.#disposed && this.#fibers.get(cache_key) === fiber;\n\t}\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\tcurrent_dispatcher ??= new Dispatcher();\n\n\treturn 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\tcurrent_dispatcher?.dispose();\n\tcurrent_dispatcher = null;\n}\n"],"mappings":"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"}
|