svelte-effect-runtime 2.3.1 → 2.4.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.
Files changed (43) hide show
  1. package/.dist/chunks/{client-LYwZZXy7.js → client-CfkB_G4o.js} +3 -3
  2. package/.dist/chunks/{client-LYwZZXy7.js.map → client-CfkB_G4o.js.map} +1 -1
  3. package/.dist/chunks/{descriptors-CU2g4U_i.js → descriptors-OS4VfJuW.js} +1 -1
  4. package/.dist/chunks/{descriptors-CU2g4U_i.js.map → descriptors-OS4VfJuW.js.map} +1 -1
  5. package/.dist/chunks/{dispatcher-g0HYqHOK.js → dispatcher-8B6Ol80H.js} +1 -1
  6. package/.dist/chunks/{dispatcher-g0HYqHOK.js.map → dispatcher-8B6Ol80H.js.map} +1 -1
  7. package/.dist/chunks/{preprocess-33aQ41uE.js → preprocess-Cn4JH9OO.js} +36 -15
  8. package/.dist/chunks/preprocess-Cn4JH9OO.js.map +1 -0
  9. package/.dist/chunks/{transform-B4g76Ur4.js → transform-s9gKPYu5.js} +424 -29
  10. package/.dist/chunks/transform-s9gKPYu5.js.map +1 -0
  11. package/.dist/detect.js.map +1 -1
  12. package/.dist/dispatcher.js +1 -1
  13. package/.dist/internal/generators.js +1 -1
  14. package/.dist/internal/remote-client.js +1 -1
  15. package/.dist/markup/promise.js +1 -1
  16. package/.dist/markup/promise.js.map +1 -1
  17. package/.dist/markup/run.js +1 -1
  18. package/.dist/markup/run.js.map +1 -1
  19. package/.dist/markup/transform/constants.d.ts +3 -3
  20. package/.dist/markup/transform/effect-bindings.d.ts +41 -0
  21. package/.dist/markup/transform/effect-callbacks.d.ts +26 -0
  22. package/.dist/markup/transform/emit.d.ts +4 -1
  23. package/.dist/markup/transform.js +1 -1
  24. package/.dist/markup/value.js +1 -1
  25. package/.dist/markup/value.js.map +1 -1
  26. package/.dist/mod.js +1 -1
  27. package/.dist/mod.js.map +1 -1
  28. package/.dist/preprocess/imports.d.ts +2 -1
  29. package/.dist/preprocess.js +2 -2
  30. package/.dist/remote/client.js +1 -1
  31. package/.dist/remote/server.js.map +1 -1
  32. package/.dist/remote/shared.js.map +1 -1
  33. package/.dist/runtime/preprocess.js +2 -2
  34. package/.dist/runtime/preprocess.js.map +1 -1
  35. package/.dist/server/factories.d.ts +10 -1
  36. package/.dist/server/types.d.ts +10 -1
  37. package/.dist/server.js +1 -1
  38. package/.dist/server.js.map +1 -1
  39. package/.dist/vite.js +5 -5
  40. package/.dist/vite.js.map +1 -1
  41. package/package.json +6 -3
  42. package/.dist/chunks/preprocess-33aQ41uE.js.map +0 -1
  43. package/.dist/chunks/transform-B4g76Ur4.js.map +0 -1
@@ -1,6 +1,6 @@
1
- import { n as get_dispatcher } from "./dispatcher-g0HYqHOK.js";
1
+ import { n as get_dispatcher } from "./dispatcher-8B6Ol80H.js";
2
2
  import { create_remote_http_error, create_remote_transport_error, create_remote_validation_error, is_serialized_remote_failure_envelope } from "../remote/shared.js";
3
- import { t as copy_property_descriptors } from "./descriptors-CU2g4U_i.js";
3
+ import { t as copy_property_descriptors } from "./descriptors-OS4VfJuW.js";
4
4
  import { Effect } from "effect";
5
5
  import { parse } from "devalue";
6
6
  //#region src/remote/client/failures.ts
@@ -581,4 +581,4 @@ function make_live_query_resource(resource) {
581
581
  //#endregion
582
582
  export { create_remote_command_adapter as i, create_remote_query_adapter as n, create_remote_form_adapter as r, create_remote_live_query_adapter as t };
583
583
 
584
- //# sourceMappingURL=client-LYwZZXy7.js.map
584
+ //# sourceMappingURL=client-CfkB_G4o.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-LYwZZXy7.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/remote/client/failures.ts","../../../modules/svelte-effect-runtime/src/remote/client/responses.ts","../../../modules/svelte-effect-runtime/src/remote/client/effect.ts","../../../modules/svelte-effect-runtime/src/remote/client/utils.ts","../../../modules/svelte-effect-runtime/src/remote/client/command.ts","../../../modules/svelte-effect-runtime/src/remote/client/form-data.ts","../../../modules/svelte-effect-runtime/src/remote/client/form-transport.ts","../../../modules/svelte-effect-runtime/src/remote/client/form-enhance.ts","../../../modules/svelte-effect-runtime/src/remote/client/form.ts","../../../modules/svelte-effect-runtime/src/remote/client/query-result.ts","../../../modules/svelte-effect-runtime/src/remote/client/query.ts"],"sourcesContent":["import {\n create_remote_http_error,\n create_remote_transport_error,\n create_remote_validation_error,\n is_serialized_remote_failure_envelope,\n} from \"$/remote/shared.ts\";\nimport type { FormIssue, RemoteFailure } from \"$/remote/shared.ts\";\nimport { parse } from \"devalue\";\n\n/**\n * Decodes a raw wire value into a remote failure when it uses the runtime\n * failure envelope.\n *\n * @example\n * ```ts\n * const failure = decode_remote_error(body);\n * ```\n *\n * @since 2.0.0\n * @param raw - Raw value received from the network or SvelteKit error body.\n * @param decode - Optional devalue decoder for custom error payloads.\n * @returns The decoded failure/value, or a transport error when decoding fails.\n */\nexport function decode_remote_error(\n raw: unknown,\n decode?: (encoded: string) => unknown,\n): RemoteFailure<unknown> | unknown {\n const embedded = parse_embedded_remote_failure(raw);\n\n if (embedded !== raw) {\n return decode_remote_error(embedded, decode);\n }\n\n if (is_serialized_remote_failure_envelope(raw)) {\n try {\n const decoded = decode ? decode(raw.encoded) : parse(raw.encoded);\n\n return decoded as RemoteFailure<unknown>;\n } catch {\n return create_remote_transport_error(\n new Error(\n \"[REMOTE_ERROR_DECODE_FAILED]: Failed to decode remote error payload\",\n ),\n raw,\n );\n }\n }\n\n return raw;\n}\n\nfunction parse_embedded_remote_failure(raw: unknown): unknown {\n if (typeof raw === \"string\") {\n return parse_json_or_original(raw);\n }\n\n if (typeof raw !== \"object\" || raw === null || !(\"message\" in raw)) {\n return raw;\n }\n\n const message = (raw as { message?: unknown }).message;\n\n if (typeof message !== \"string\") {\n return raw;\n }\n\n const parsed = parse_json_or_original(message);\n\n return parsed === message ? raw : parsed;\n}\n\nfunction parse_json_or_original(value: string): unknown {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n\n/**\n * Checks whether a decoded value is a tagged remote failure.\n *\n * @example\n * ```ts\n * if (is_decoded_remote_failure(value)) throw value;\n * ```\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value carries a `_tag` discriminator.\n */\nexport function is_decoded_remote_failure(\n value: unknown,\n): value is RemoteFailure<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"_tag\" in value\n );\n}\n\n/**\n * Checks whether a response body represents SvelteKit validation issues.\n *\n * @example\n * ```ts\n * if (is_validation_body(body)) return body.issues;\n * ```\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value contains a form issue list.\n */\nexport function is_validation_body(\n value: unknown,\n): value is { issues: readonly FormIssue[] } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Array.isArray((value as { issues?: unknown }).issues)\n );\n}\n\n/**\n * Normalizes native thrown values into the runtime's remote failure model.\n *\n * @example\n * ```ts\n * const failure = normalize_native_error(error);\n * ```\n *\n * @since 2.0.0\n * @param error - Unknown value thrown by a native remote helper.\n * @returns A typed remote failure.\n */\nexport function normalize_native_error(error: unknown): RemoteFailure<unknown> {\n const body = get_error_body(error);\n const decoded = decode_remote_error(body);\n const status = get_error_status(error);\n\n if (is_decoded_remote_failure(decoded)) {\n return decoded;\n }\n\n if (status === 400 && is_validation_body(body)) {\n return create_remote_validation_error(body.issues, body, status);\n }\n\n if (status !== undefined) {\n return create_remote_http_error(status, body, error);\n }\n\n return create_remote_transport_error(error);\n}\n\nfunction get_error_status(error: unknown): number | undefined {\n if (typeof error !== \"object\" || error === null) {\n return undefined;\n }\n\n const status = (error as { status?: unknown }).status;\n\n return typeof status === \"number\" ? status : undefined;\n}\n\nfunction get_error_body(error: unknown): unknown {\n if (typeof error !== \"object\" || error === null) {\n return undefined;\n }\n\n if (\"body\" in error) {\n return (error as { body?: unknown }).body;\n }\n\n if (\"data\" in error) {\n return (error as { data?: unknown }).data;\n }\n\n return undefined;\n}\n","import {\n create_remote_http_error,\n create_remote_validation_error,\n} from \"$/remote/shared.ts\";\nimport type { RemoteFailure } from \"$/remote/shared.ts\";\n\nimport {\n decode_remote_error,\n is_decoded_remote_failure,\n is_validation_body,\n} from \"./failures.ts\";\n\n/**\n * Decodes a failed fetch response into the runtime failure model.\n *\n * @example\n * ```ts\n * const failure = await decode_response_failure(response);\n * ```\n *\n * @since 2.0.0\n * @param response - Failed fetch response returned by the remote endpoint.\n * @returns Remote failure represented by the response.\n */\nexport async function decode_response_failure(\n response: Response,\n): Promise<RemoteFailure<unknown>> {\n const body = await response.json().catch(() => undefined);\n const decoded = decode_remote_error(body);\n\n if (is_decoded_remote_failure(decoded)) {\n return decoded;\n }\n\n if (response.status === 400 && is_validation_body(body)) {\n return create_remote_validation_error(body.issues, body, response.status);\n }\n\n return create_remote_http_error(response.status, body);\n}\n\n/**\n * Decodes either a raw value or `Response` returned by a native remote helper.\n *\n * @example\n * ```ts\n * const output = await decode_response_or_value(result, decode_payload);\n * ```\n *\n * @since 2.0.0\n * @param value - Native result value or fetch response.\n * @param decode_payload - Function used to decode successful payloads.\n * @returns Decoded successful output.\n */\nexport async function decode_response_or_value<Output>(\n value: unknown,\n decode_payload: (value: unknown) => unknown,\n): Promise<Output> {\n if (value instanceof Response) {\n if (!value.ok) {\n throw await decode_response_failure(value);\n }\n\n const data = await value.json();\n\n return decode_payload(data) as Output;\n }\n\n return decode_payload(value) as Output;\n}\n","import type { RemoteFailure } from \"$/remote/shared.ts\";\nimport { Effect } from \"effect\";\n\nimport {\n is_decoded_remote_failure,\n normalize_native_error,\n} from \"./failures.ts\";\n\n/**\n * Wraps a promise-producing remote operation in an Effect with failure mapping.\n *\n * @example\n * ```ts\n * const program = make_effect_from_promise(() => native_remote(input));\n * ```\n *\n * @since 2.0.0\n * @param run - Promise-producing operation that invokes a native remote helper.\n * @returns Effect that maps thrown values into remote failures.\n */\nexport function make_effect_from_promise<Output>(\n run: () => Promise<Output>,\n): Effect.Effect<Output, RemoteFailure<unknown>> {\n return Effect.tryPromise({\n try: run,\n catch: (error: unknown) => {\n if (is_decoded_remote_failure(error)) {\n return error;\n }\n\n return normalize_native_error(error);\n },\n }) as Effect.Effect<Output, RemoteFailure<unknown>>;\n}\n","export { copy_property_descriptors } from \"$/internal/descriptors.ts\";\nimport type { NativeMethod } from \"./types.ts\";\n\n/**\n * Checks whether a value has a callable method property.\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @param key - Method key to look up.\n * @returns Whether the value has a function at `key`.\n */\nexport function has_method<K extends PropertyKey>(\n value: unknown,\n key: K,\n): value is Record<K, NativeMethod> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as Record<PropertyKey, unknown>)[key] === \"function\"\n );\n}\n","import type { RemoteFailure } from \"$/remote/shared.ts\";\nimport type { Effect } from \"effect\";\n\nimport { decode_response_or_value } from \"./responses.ts\";\nimport { make_effect_from_promise } from \"./effect.ts\";\nimport { copy_property_descriptors, has_method } from \"./utils.ts\";\nimport type { NativeMethod, Pending } from \"./types.ts\";\n\n/**\n * Creates a remote command adapter. The adapter preserves the native\n * pending getter and turns each invocation into an Effect.\n *\n * @since 2.0.0\n * @param native_factory - SvelteKit's native command function or a legacy\n * response factory used by tests.\n * @param decode_payload - Function to decode the response payload.\n * @param _base - Deprecated transport base retained for compatibility.\n * @param pending - Optional pending counter for legacy response factories.\n * @returns A function returning an Effect of the response.\n * @internal\n */\nexport function create_remote_command_adapter<Input, Output>(\n native_factory: unknown,\n decode_payload: (value: unknown) => unknown,\n _base = \"\",\n pending?: Pending,\n): (input: Input) => Effect.Effect<Output, RemoteFailure<unknown>> {\n const invoke = has_method(native_factory, \"invoke\")\n ? native_factory.invoke\n : undefined;\n\n if (typeof native_factory !== \"function\" && !invoke) {\n throw new Error(\n \"[INVALID_COMMAND_FACTORY]: Invalid command factory: expected a function\",\n );\n }\n\n const count = pending ?? { value: 0 };\n\n const adapter = (input: Input) =>\n make_effect_from_promise(async () => {\n count.value += 1;\n\n try {\n const result = invoke\n ? await invoke(input)\n : await (native_factory as NativeMethod)(input);\n\n return await decode_response_or_value<Output>(result, decode_payload);\n } finally {\n count.value -= 1;\n }\n });\n\n copy_property_descriptors(native_factory, adapter);\n\n if (!Object.prototype.hasOwnProperty.call(adapter, \"pending\")) {\n Object.defineProperty(adapter, \"pending\", {\n get: () => count.value,\n });\n }\n\n return adapter;\n}\n","/**\n * Encodes remote form input into SvelteKit-compatible form data.\n *\n * @since 2.0.0\n * @param input - Input value supplied to the remote form.\n * @returns FormData payload for the remote endpoint.\n */\nexport function to_form_data(input: unknown): FormData {\n const form_data = new FormData();\n\n append_form_value(form_data, \"\", input);\n\n return form_data;\n}\n\nfunction append_form_value(\n form_data: FormData,\n path: string,\n value: unknown,\n): void {\n if (value === undefined) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n append_form_value(form_data, `${path}[]`, item);\n }\n\n return;\n }\n\n if (value instanceof Blob) {\n form_data.append(path, value);\n\n return;\n }\n\n if (typeof value === \"object\" && value !== null) {\n for (const [key, child] of Object.entries(value)) {\n const child_path = path.length === 0 ? key : `${path}.${key}`;\n\n append_form_value(form_data, child_path, child);\n }\n\n return;\n }\n\n if (typeof value === \"number\") {\n form_data.append(`n:${path}`, String(value));\n\n return;\n }\n\n if (typeof value === \"boolean\") {\n if (value) {\n form_data.append(`b:${path}`, \"on\");\n }\n\n return;\n }\n\n form_data.append(path, value === null ? \"\" : String(value));\n}\n","import {\n create_remote_http_error,\n create_remote_transport_error,\n create_remote_validation_error,\n} from \"$/remote/shared.ts\";\nimport type { FormIssue } from \"$/remote/shared.ts\";\nimport { parse } from \"devalue\";\n\nimport { decode_remote_error, is_decoded_remote_failure } from \"./failures.ts\";\nimport { decode_response_failure } from \"./responses.ts\";\nimport { to_form_data } from \"./form-data.ts\";\nimport type { NativeFormRecord } from \"./types.ts\";\n\n/**\n * Submits a native remote form through the SvelteKit remote endpoint.\n *\n * @since 2.0.0\n * @param form_obj - Native form object being adapted.\n * @param input - Form input value.\n * @param decode_payload - Function to decode successful payloads.\n * @param remote_base - Base URL for the remote endpoint.\n * @returns Decoded form output.\n */\nexport async function submit_remote_form<Output>(\n form_obj: NativeFormRecord,\n input: unknown,\n decode_payload: (value: unknown) => unknown,\n remote_base: string,\n): Promise<Output> {\n const action_id = get_remote_action_id(form_obj);\n\n if (!action_id || remote_base.length === 0) {\n throw create_remote_transport_error(\n new Error(\n \"[REMOTE_FORM_ENDPOINT_MISSING]: Form has no submit method or remote endpoint\",\n ),\n );\n }\n\n const response = await fetch(to_remote_form_url(remote_base, action_id), {\n method: \"POST\",\n body: to_form_data(input),\n });\n\n if (!response.ok) {\n throw await decode_response_failure(response);\n }\n\n const envelope = await response.json();\n\n return decode_form_response<Output>(envelope, decode_payload);\n}\n\n/**\n * Extracts SvelteKit's remote action id from a native form action URL.\n *\n * @since 2.0.0\n * @param form_obj - Native form object being adapted.\n * @returns Remote action id when present.\n */\nexport function get_remote_action_id(\n form_obj: NativeFormRecord,\n): string | undefined {\n const action = form_obj.action;\n\n if (typeof action !== \"string\") {\n return undefined;\n }\n\n const fallback = \"http://localhost/\";\n const href = typeof location === \"undefined\" ? fallback : location.href;\n const url = new URL(action, href);\n\n return url.searchParams.get(\"/remote\") ??\n url.searchParams.get(\"remote\") ??\n undefined;\n}\n\nfunction to_remote_form_url(remote_base: string, action_id: string): string {\n const parts = action_id.split(\"/\");\n const head = parts.slice(0, 2).join(\"/\");\n const tail = parts.slice(2).join(\"/\");\n const normalized_base = remote_base.replace(/\\/$/, \"\");\n\n if (tail.length === 0) {\n return `${normalized_base}/${head}`;\n }\n\n return `${normalized_base}/${head}/${encodeURIComponent(tail)}`;\n}\n\nfunction decode_form_response<Output>(\n envelope: unknown,\n decode_payload: (value: unknown) => unknown,\n): Output {\n if (\n typeof envelope !== \"object\" ||\n envelope === null ||\n !(\"type\" in envelope)\n ) {\n throw create_remote_transport_error(\n new Error(\n \"[REMOTE_FORM_RESPONSE_INVALID]: Invalid remote form response\",\n ),\n envelope,\n );\n }\n\n const response = envelope as {\n type: string;\n result?: unknown;\n error?: unknown;\n status?: number;\n };\n\n if (response.type === \"error\") {\n const decoded = decode_remote_error(response.error);\n\n if (is_decoded_remote_failure(decoded)) {\n throw decoded;\n }\n\n throw create_remote_http_error(\n response.status ?? 500,\n response.error,\n );\n }\n\n if (response.type !== \"result\" || typeof response.result !== \"string\") {\n throw create_remote_transport_error(\n new Error(\n \"[REMOTE_FORM_RESPONSE_UNSUPPORTED]: Unsupported remote form response\",\n ),\n envelope,\n );\n }\n\n const parsed = parse(response.result);\n const decoded = decode_payload(parsed) as {\n issues?: readonly FormIssue[];\n result?: Output;\n };\n\n if (decoded.issues && decoded.issues.length > 0) {\n throw create_remote_validation_error(decoded.issues, decoded, 400);\n }\n\n return decoded.result as Output;\n}\n","import { get_dispatcher } from \"$/dispatcher.ts\";\nimport type { RemoteFailure } from \"$/remote/shared.ts\";\nimport { Effect } from \"effect\";\n\nimport { make_effect_from_promise } from \"./effect.ts\";\nimport { has_method } from \"./utils.ts\";\nimport type { NativeMethod } from \"./types.ts\";\n\n/**\n * Wraps a remote form enhance callback so Effect return values are run.\n *\n * @since 2.0.0\n * @param callback - Native enhance callback to wrap.\n * @returns Wrapped callback or undefined.\n */\nexport function wrap_enhance_callback(\n callback: NativeMethod | undefined,\n): NativeMethod | undefined {\n if (!callback) {\n return undefined;\n }\n\n return (event: unknown) => {\n const wrapped_event = wrap_submit_callback(event);\n const result = callback(wrapped_event);\n\n if (Effect.isEffect(result)) {\n return get_dispatcher().run(result);\n }\n\n return result;\n };\n}\n\nfunction wrap_submit_callback(event: unknown): unknown {\n if (\n typeof event !== \"object\" || event === null || !has_method(event, \"submit\")\n ) {\n return event;\n }\n\n const original_submit = event.submit;\n const { submit: _submit, ...descriptors } = Object.getOwnPropertyDescriptors(\n event,\n );\n\n void _submit;\n\n return Object.defineProperties({}, {\n ...descriptors,\n submit: {\n configurable: true,\n enumerable: false,\n value: () => make_submit_effect(original_submit),\n },\n });\n}\n\nfunction make_submit_effect(\n original_submit: NativeMethod,\n): Effect.Effect<unknown, RemoteFailure<unknown>> & Record<string, unknown> {\n let updates_args: unknown[] | undefined;\n\n const effect = make_effect_from_promise(async () => {\n const result = original_submit();\n\n if (updates_args && has_method(result, \"updates\")) {\n return await Promise.resolve(result.updates(...updates_args));\n }\n\n return await Promise.resolve(result);\n }) as\n & Effect.Effect<unknown, RemoteFailure<unknown>>\n & Record<string, unknown>;\n\n Object.defineProperty(effect, \"updates\", {\n configurable: true,\n enumerable: false,\n value: (...args: unknown[]) => {\n updates_args ??= args;\n\n return effect;\n },\n });\n\n return effect;\n}\n","import type { RemoteFormInput } from \"@sveltejs/kit\";\n\nimport { decode_response_or_value } from \"./responses.ts\";\nimport { make_effect_from_promise } from \"./effect.ts\";\nimport { get_remote_action_id, submit_remote_form } from \"./form-transport.ts\";\nimport { copy_property_descriptors, has_method } from \"./utils.ts\";\nimport { wrap_enhance_callback } from \"./form-enhance.ts\";\nimport type { EffectRemoteForm, NativeFormRecord } from \"./types.ts\";\n\n/**\n * Creates a remote form adapter. The callable preserves SvelteKit's native\n * form descriptors while wrapping `validate`, `enhance`, and programmatic\n * submission in Effect-returning APIs.\n *\n * @example\n * ```ts\n * const createPost = create_remote_form_adapter(nativeForm, (value) => value);\n * yield* createPost.validate({ includeUntouched: true });\n * ```\n *\n * @since 2.0.0\n * @param native_factory - SvelteKit's native form object.\n * @param decode_payload - Function to decode the response payload.\n * @param remote_base - Base URL for SvelteKit's remote endpoint.\n * @returns A callable form function whose properties mirror the native form.\n * @internal\n */\nexport function create_remote_form_adapter<\n Input extends RemoteFormInput | void,\n Output,\n>(\n native_factory: unknown,\n decode_payload: (value: unknown) => unknown,\n remote_base = \"\",\n): EffectRemoteForm<Input, Output> {\n const form_obj = native_factory as NativeFormRecord;\n\n const submit_effect = (input: Input) =>\n make_effect_from_promise(async () => {\n const can_use_remote_endpoint = remote_base.length > 0 &&\n get_remote_action_id(form_obj) !== undefined;\n\n if (has_method(form_obj, \"submit\") && !can_use_remote_endpoint) {\n const result = await form_obj.submit(input);\n\n return await decode_response_or_value<Output>(result, decode_payload);\n }\n\n return await submit_remote_form<Output>(\n form_obj,\n input,\n decode_payload,\n remote_base,\n );\n });\n\n const callable = ((input: Input) => submit_effect(input)) as EffectRemoteForm<\n Input,\n Output\n >;\n\n copy_property_descriptors(\n form_obj,\n callable,\n new Set([\"submit\", \"validate\", \"enhance\", \"for\", \"preflight\"]),\n );\n\n Object.defineProperty(callable, \"submit\", {\n configurable: true,\n enumerable: false,\n value: submit_effect,\n });\n\n if (has_method(form_obj, \"validate\")) {\n Object.defineProperty(callable, \"validate\", {\n configurable: true,\n enumerable: false,\n value: (options?: Record<string, unknown>) =>\n make_effect_from_promise(async () => {\n await form_obj.validate(options);\n }),\n });\n }\n\n if (has_method(form_obj, \"enhance\")) {\n Object.defineProperty(callable, \"enhance\", {\n configurable: true,\n enumerable: false,\n value: (callback?: Parameters<typeof wrap_enhance_callback>[0]) =>\n form_obj.enhance(wrap_enhance_callback(callback)),\n });\n }\n\n if (has_method(form_obj, \"for\")) {\n Object.defineProperty(callable, \"for\", {\n configurable: true,\n enumerable: false,\n value: (key: string | number | boolean) =>\n create_remote_form_adapter<Input, Output>(\n form_obj.for(key),\n decode_payload,\n remote_base,\n ),\n });\n }\n\n if (has_method(form_obj, \"preflight\")) {\n Object.defineProperty(callable, \"preflight\", {\n configurable: true,\n enumerable: false,\n value: (schema: unknown) => {\n form_obj.preflight(schema);\n\n return callable;\n },\n });\n }\n\n return callable;\n}\n","import { decode_response_or_value } from \"./responses.ts\";\nimport { has_method } from \"./utils.ts\";\n\n/**\n * Resolves native query results, including SvelteKit run handles.\n *\n * @example\n * ```ts\n * const output = await resolve_query_result(result, decode_payload);\n * ```\n *\n * @since 2.0.0\n * @param value - Native query result or query run handle.\n * @param decode_payload - Function used to decode successful payloads.\n * @returns Decoded query output.\n */\nexport async function resolve_query_result<Output>(\n value: unknown,\n decode_payload: (value: unknown) => unknown,\n): Promise<Output> {\n if (has_method(value, \"then\")) {\n const result = await Promise.resolve(value);\n\n return decode_response_or_value(result, decode_payload);\n }\n\n if (has_method(value, \"run\")) {\n const result = await value.run();\n\n return decode_response_or_value(result, decode_payload);\n }\n\n const result = await Promise.resolve(value);\n\n return decode_response_or_value(result, decode_payload);\n}\n","import { copy_property_descriptors, has_method } from \"./utils.ts\";\nimport { normalize_native_error } from \"./failures.ts\";\nimport { resolve_query_result } from \"./query-result.ts\";\nimport { make_effect_from_promise } from \"./effect.ts\";\nimport type { RemoteFailure } from \"$/remote/shared.ts\";\nimport type { NativeMethod } from \"./types.ts\";\nimport { Effect } from \"effect\";\n\ntype RemoteResourceEffect<Output> =\n & Effect.Effect<Output, RemoteFailure<unknown>>\n & {\n readonly current: Output | undefined;\n readonly error: unknown;\n readonly loading: boolean;\n readonly ready: boolean;\n };\n\ntype RemoteResourceLike<Output> =\n | RemoteResourceEffect<Output>\n | RemoteLiveQueryResource<Output>;\n\ntype RemoteQueryEffect<Output> =\n & RemoteResourceEffect<Output>\n & {\n readonly refresh: () => Effect.Effect<void, unknown, never>;\n readonly set: (value: Output) => void;\n readonly withOverride: (\n update: (current: Output) => Output,\n ) => unknown;\n };\n\ntype RemoteLiveQueryEffect<Output> = Effect.Effect<\n RemoteLiveQueryResource<Output>,\n RemoteFailure<unknown>\n>;\n\ntype RemoteLiveQueryResource<Output> =\n & {\n readonly connected: boolean;\n readonly current: Output | undefined;\n readonly done: boolean;\n readonly error: unknown;\n readonly loading: boolean;\n readonly ready: boolean;\n readonly reconnect: () => Effect.Effect<void, unknown, never>;\n }\n & AsyncIterable<Output>;\n\ntype NativeRemoteResource<Output> = {\n readonly connected?: boolean;\n readonly current?: Output;\n readonly done?: boolean;\n readonly error?: unknown;\n readonly loading?: boolean;\n readonly ready?: boolean;\n readonly reconnect?: () => Promise<void>;\n readonly refresh?: () => Promise<void>;\n readonly set?: (value: Output) => void;\n readonly withOverride?: (update: (current: Output) => Output) => unknown;\n readonly [Symbol.asyncIterator]?: () => AsyncIterator<Output>;\n};\n\n/**\n * Creates a remote query adapter. The returned function takes input and\n * returns an `Effect` that executes SvelteKit's native query function.\n *\n * @example\n * ```ts\n * const getUser = create_remote_query_adapter(nativeQuery, (value) => value);\n * const user = yield* getUser({ id: 1 });\n * ```\n *\n * @since 2.0.0\n * @param native_factory - SvelteKit's native query function or a legacy\n * response factory used by tests.\n * @param decode_payload - Function to decode the response payload.\n * @param _base - Deprecated transport base retained for compatibility.\n * @returns A function returning an Effect of the response.\n * @internal\n */\nexport function create_remote_query_adapter<Input, Output>(\n native_factory: unknown,\n decode_payload: (value: unknown) => unknown,\n _base = \"\",\n): (input: Input) => RemoteQueryEffect<Output> {\n const load = has_method(native_factory, \"load\")\n ? native_factory.load\n : undefined;\n const query = typeof native_factory === \"function\"\n ? native_factory as NativeMethod\n : undefined;\n\n if (!query && !load) {\n throw new Error(\n \"[INVALID_QUERY_FACTORY]: Invalid query factory: expected a function\",\n );\n }\n\n const wrapped = ((input: Input) => {\n if (!query) {\n return make_effect_from_promise(async () => {\n const result = await load?.(input);\n\n return await resolve_query_result<Output>(result, decode_payload);\n }) as RemoteQueryEffect<Output>;\n }\n\n const resource = query(input);\n const effect = make_effect_from_promise(async () =>\n await resolve_query_result<Output>(resource, decode_payload)\n ) as RemoteQueryEffect<Output>;\n\n attach_query_resource(resource, effect);\n\n return effect;\n }) as (input: Input) => RemoteQueryEffect<Output>;\n\n copy_property_descriptors(native_factory, wrapped);\n\n return wrapped;\n}\n\n/**\n * Creates a remote live query adapter. The returned function takes input and\n * returns an `Effect` that resolves to a live query resource with stream state\n * and reconnect controls.\n *\n * @example\n * ```ts\n * const getTime = create_remote_live_query_adapter(nativeLive, (value) => value);\n * const time = yield* getTime();\n * const current = time.current;\n * ```\n *\n * @since 2.0.0\n * @param native_factory - SvelteKit's native live query function.\n * @param _decode_payload - Deprecated payload decoder retained for parity with\n * other remote adapters.\n * @param _base - Deprecated transport base retained for compatibility.\n * @returns A function returning an Effect-backed live query resource.\n * @internal\n */\nexport function create_remote_live_query_adapter<Input, Output>(\n native_factory: unknown,\n _decode_payload: (value: unknown) => unknown,\n _base = \"\",\n): (input: Input) => RemoteLiveQueryEffect<Output> {\n const query = typeof native_factory === \"function\"\n ? native_factory as NativeMethod\n : undefined;\n\n if (!query) {\n throw new Error(\n \"[INVALID_LIVE_QUERY_FACTORY]: Invalid live query factory: expected a function\",\n );\n }\n\n const wrapped = ((input: Input) =>\n Effect.try({\n try: () => {\n const resource = query(input);\n\n return make_live_query_resource<Output>(resource);\n },\n catch: normalize_native_error,\n }) as RemoteLiveQueryEffect<Output>) as (\n input: Input,\n ) => RemoteLiveQueryEffect<Output>;\n\n copy_property_descriptors(native_factory, wrapped);\n\n return wrapped;\n}\n\nfunction is_resource<Output>(\n resource: unknown,\n): resource is NativeRemoteResource<Output> {\n const resource_type = typeof resource;\n\n return (\n (resource_type === \"object\" && resource !== null) ||\n resource_type === \"function\"\n );\n}\n\nfunction attach_resource_getters<Output>(\n resource: unknown,\n effect: RemoteResourceLike<Output>,\n): void {\n const methods = is_resource<Output>(resource) ? resource : undefined;\n const keys = [\"current\", \"error\", \"loading\", \"ready\"] as const;\n\n if (!methods) {\n return;\n }\n\n for (const key of keys) {\n if (!(key in methods)) {\n continue;\n }\n\n Object.defineProperty(effect, key, {\n configurable: true,\n get: () => methods[key],\n });\n }\n}\n\nfunction attach_query_resource<Output>(\n resource: unknown,\n effect: RemoteQueryEffect<Output>,\n): void {\n const methods = is_resource<Output>(resource) ? resource : undefined;\n const refresh = methods?.refresh;\n const set = methods?.set;\n const with_override = methods?.withOverride;\n\n attach_resource_getters(resource, effect);\n\n if (!methods) {\n return;\n }\n\n if (typeof refresh === \"function\") {\n Object.defineProperty(effect, \"refresh\", {\n configurable: true,\n value: () =>\n make_effect_from_promise(() => Promise.resolve(refresh.call(resource))),\n });\n }\n\n if (typeof set === \"function\") {\n Object.defineProperty(effect, \"set\", {\n configurable: true,\n value: (value: Output) => set.call(resource, value),\n });\n }\n\n if (typeof with_override === \"function\") {\n Object.defineProperty(effect, \"withOverride\", {\n configurable: true,\n value: (update: (current: Output) => Output) =>\n with_override.call(resource, update),\n });\n }\n}\n\nfunction attach_live_query_resource<Output>(\n resource: unknown,\n effect: RemoteLiveQueryResource<Output>,\n): void {\n const methods = is_resource<Output>(resource) ? resource : undefined;\n const async_iterator = methods?.[Symbol.asyncIterator];\n const reconnect = methods?.reconnect;\n const keys = [\"connected\", \"done\"] as const;\n\n attach_resource_getters(resource, effect);\n\n if (!methods) {\n return;\n }\n\n for (const key of keys) {\n if (!(key in methods)) {\n continue;\n }\n\n Object.defineProperty(effect, key, {\n configurable: true,\n get: () => methods[key],\n });\n }\n\n if (typeof reconnect === \"function\") {\n Object.defineProperty(effect, \"reconnect\", {\n configurable: true,\n value: () =>\n make_effect_from_promise(() =>\n Promise.resolve(reconnect.call(resource))\n ),\n });\n }\n\n if (typeof async_iterator === \"function\") {\n Object.defineProperty(effect, Symbol.asyncIterator, {\n configurable: true,\n value: () => async_iterator.call(resource),\n });\n }\n}\n\nfunction make_live_query_resource<Output>(\n resource: unknown,\n): RemoteLiveQueryResource<Output> {\n const live_resource = {} as RemoteLiveQueryResource<Output>;\n\n attach_live_query_resource(resource, live_resource);\n\n return live_resource;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"client-CfkB_G4o.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/remote/client/failures.ts","../../../modules/svelte-effect-runtime/src/remote/client/responses.ts","../../../modules/svelte-effect-runtime/src/remote/client/effect.ts","../../../modules/svelte-effect-runtime/src/remote/client/utils.ts","../../../modules/svelte-effect-runtime/src/remote/client/command.ts","../../../modules/svelte-effect-runtime/src/remote/client/form-data.ts","../../../modules/svelte-effect-runtime/src/remote/client/form-transport.ts","../../../modules/svelte-effect-runtime/src/remote/client/form-enhance.ts","../../../modules/svelte-effect-runtime/src/remote/client/form.ts","../../../modules/svelte-effect-runtime/src/remote/client/query-result.ts","../../../modules/svelte-effect-runtime/src/remote/client/query.ts"],"sourcesContent":["import {\n create_remote_http_error,\n create_remote_transport_error,\n create_remote_validation_error,\n is_serialized_remote_failure_envelope,\n} from \"$/remote/shared.ts\";\nimport type { FormIssue, RemoteFailure } from \"$/remote/shared.ts\";\nimport { parse } from \"devalue\";\n\n/**\n * Decodes a raw wire value into a remote failure when it uses the runtime\n * failure envelope.\n *\n * @example\n * ```ts\n * const failure = decode_remote_error(body);\n * ```\n *\n * @since 2.0.0\n * @param raw - Raw value received from the network or SvelteKit error body.\n * @param decode - Optional devalue decoder for custom error payloads.\n * @returns The decoded failure/value, or a transport error when decoding fails.\n */\nexport function decode_remote_error(\n raw: unknown,\n decode?: (encoded: string) => unknown,\n): RemoteFailure<unknown> | unknown {\n const embedded = parse_embedded_remote_failure(raw);\n\n if (embedded !== raw) {\n return decode_remote_error(embedded, decode);\n }\n\n if (is_serialized_remote_failure_envelope(raw)) {\n try {\n const decoded = decode ? decode(raw.encoded) : parse(raw.encoded);\n\n return decoded as RemoteFailure<unknown>;\n } catch {\n return create_remote_transport_error(\n new Error(\n \"[REMOTE_ERROR_DECODE_FAILED]: Failed to decode remote error payload\",\n ),\n raw,\n );\n }\n }\n\n return raw;\n}\n\nfunction parse_embedded_remote_failure(raw: unknown): unknown {\n if (typeof raw === \"string\") {\n return parse_json_or_original(raw);\n }\n\n if (typeof raw !== \"object\" || raw === null || !(\"message\" in raw)) {\n return raw;\n }\n\n const message = (raw as { message?: unknown }).message;\n\n if (typeof message !== \"string\") {\n return raw;\n }\n\n const parsed = parse_json_or_original(message);\n\n return parsed === message ? raw : parsed;\n}\n\nfunction parse_json_or_original(value: string): unknown {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n\n/**\n * Checks whether a decoded value is a tagged remote failure.\n *\n * @example\n * ```ts\n * if (is_decoded_remote_failure(value)) throw value;\n * ```\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value carries a `_tag` discriminator.\n */\nexport function is_decoded_remote_failure(\n value: unknown,\n): value is RemoteFailure<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"_tag\" in value\n );\n}\n\n/**\n * Checks whether a response body represents SvelteKit validation issues.\n *\n * @example\n * ```ts\n * if (is_validation_body(body)) return body.issues;\n * ```\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value contains a form issue list.\n */\nexport function is_validation_body(\n value: unknown,\n): value is { issues: readonly FormIssue[] } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Array.isArray((value as { issues?: unknown }).issues)\n );\n}\n\n/**\n * Normalizes native thrown values into the runtime's remote failure model.\n *\n * @example\n * ```ts\n * const failure = normalize_native_error(error);\n * ```\n *\n * @since 2.0.0\n * @param error - Unknown value thrown by a native remote helper.\n * @returns A typed remote failure.\n */\nexport function normalize_native_error(error: unknown): RemoteFailure<unknown> {\n const body = get_error_body(error);\n const decoded = decode_remote_error(body);\n const status = get_error_status(error);\n\n if (is_decoded_remote_failure(decoded)) {\n return decoded;\n }\n\n if (status === 400 && is_validation_body(body)) {\n return create_remote_validation_error(body.issues, body, status);\n }\n\n if (status !== undefined) {\n return create_remote_http_error(status, body, error);\n }\n\n return create_remote_transport_error(error);\n}\n\nfunction get_error_status(error: unknown): number | undefined {\n if (typeof error !== \"object\" || error === null) {\n return undefined;\n }\n\n const status = (error as { status?: unknown }).status;\n\n return typeof status === \"number\" ? status : undefined;\n}\n\nfunction get_error_body(error: unknown): unknown {\n if (typeof error !== \"object\" || error === null) {\n return undefined;\n }\n\n if (\"body\" in error) {\n return (error as { body?: unknown }).body;\n }\n\n if (\"data\" in error) {\n return (error as { data?: unknown }).data;\n }\n\n return undefined;\n}\n","import {\n create_remote_http_error,\n create_remote_validation_error,\n} from \"$/remote/shared.ts\";\nimport type { RemoteFailure } from \"$/remote/shared.ts\";\n\nimport {\n decode_remote_error,\n is_decoded_remote_failure,\n is_validation_body,\n} from \"./failures.ts\";\n\n/**\n * Decodes a failed fetch response into the runtime failure model.\n *\n * @example\n * ```ts\n * const failure = await decode_response_failure(response);\n * ```\n *\n * @since 2.0.0\n * @param response - Failed fetch response returned by the remote endpoint.\n * @returns Remote failure represented by the response.\n */\nexport async function decode_response_failure(\n response: Response,\n): Promise<RemoteFailure<unknown>> {\n const body = await response.json().catch(() => undefined);\n const decoded = decode_remote_error(body);\n\n if (is_decoded_remote_failure(decoded)) {\n return decoded;\n }\n\n if (response.status === 400 && is_validation_body(body)) {\n return create_remote_validation_error(body.issues, body, response.status);\n }\n\n return create_remote_http_error(response.status, body);\n}\n\n/**\n * Decodes either a raw value or `Response` returned by a native remote helper.\n *\n * @example\n * ```ts\n * const output = await decode_response_or_value(result, decode_payload);\n * ```\n *\n * @since 2.0.0\n * @param value - Native result value or fetch response.\n * @param decode_payload - Function used to decode successful payloads.\n * @returns Decoded successful output.\n */\nexport async function decode_response_or_value<Output>(\n value: unknown,\n decode_payload: (value: unknown) => unknown,\n): Promise<Output> {\n if (value instanceof Response) {\n if (!value.ok) {\n throw await decode_response_failure(value);\n }\n\n const data = await value.json();\n\n return decode_payload(data) as Output;\n }\n\n return decode_payload(value) as Output;\n}\n","import type { RemoteFailure } from \"$/remote/shared.ts\";\nimport { Effect } from \"effect\";\n\nimport {\n is_decoded_remote_failure,\n normalize_native_error,\n} from \"./failures.ts\";\n\n/**\n * Wraps a promise-producing remote operation in an Effect with failure mapping.\n *\n * @example\n * ```ts\n * const program = make_effect_from_promise(() => native_remote(input));\n * ```\n *\n * @since 2.0.0\n * @param run - Promise-producing operation that invokes a native remote helper.\n * @returns Effect that maps thrown values into remote failures.\n */\nexport function make_effect_from_promise<Output>(\n run: () => Promise<Output>,\n): Effect.Effect<Output, RemoteFailure<unknown>> {\n return Effect.tryPromise({\n try: run,\n catch: (error: unknown) => {\n if (is_decoded_remote_failure(error)) {\n return error;\n }\n\n return normalize_native_error(error);\n },\n }) as Effect.Effect<Output, RemoteFailure<unknown>>;\n}\n","export { copy_property_descriptors } from \"$/internal/descriptors.ts\";\nimport type { NativeMethod } from \"./types.ts\";\n\n/**\n * Checks whether a value has a callable method property.\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @param key - Method key to look up.\n * @returns Whether the value has a function at `key`.\n */\nexport function has_method<K extends PropertyKey>(\n value: unknown,\n key: K,\n): value is Record<K, NativeMethod> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as Record<PropertyKey, unknown>)[key] === \"function\"\n );\n}\n","import type { RemoteFailure } from \"$/remote/shared.ts\";\nimport type { Effect } from \"effect\";\n\nimport { decode_response_or_value } from \"./responses.ts\";\nimport { make_effect_from_promise } from \"./effect.ts\";\nimport { copy_property_descriptors, has_method } from \"./utils.ts\";\nimport type { NativeMethod, Pending } from \"./types.ts\";\n\n/**\n * Creates a remote command adapter. The adapter preserves the native\n * pending getter and turns each invocation into an Effect.\n *\n * @since 2.0.0\n * @param native_factory - SvelteKit's native command function or a legacy\n * response factory used by tests.\n * @param decode_payload - Function to decode the response payload.\n * @param _base - Deprecated transport base retained for compatibility.\n * @param pending - Optional pending counter for legacy response factories.\n * @returns A function returning an Effect of the response.\n * @internal\n */\nexport function create_remote_command_adapter<Input, Output>(\n native_factory: unknown,\n decode_payload: (value: unknown) => unknown,\n _base = \"\",\n pending?: Pending,\n): (input: Input) => Effect.Effect<Output, RemoteFailure<unknown>> {\n const invoke = has_method(native_factory, \"invoke\")\n ? native_factory.invoke\n : undefined;\n\n if (typeof native_factory !== \"function\" && !invoke) {\n throw new Error(\n \"[INVALID_COMMAND_FACTORY]: Invalid command factory: expected a function\",\n );\n }\n\n const count = pending ?? { value: 0 };\n\n const adapter = (input: Input) =>\n make_effect_from_promise(async () => {\n count.value += 1;\n\n try {\n const result = invoke\n ? await invoke(input)\n : await (native_factory as NativeMethod)(input);\n\n return await decode_response_or_value<Output>(result, decode_payload);\n } finally {\n count.value -= 1;\n }\n });\n\n copy_property_descriptors(native_factory, adapter);\n\n if (!Object.prototype.hasOwnProperty.call(adapter, \"pending\")) {\n Object.defineProperty(adapter, \"pending\", {\n get: () => count.value,\n });\n }\n\n return adapter;\n}\n","/**\n * Encodes remote form input into SvelteKit-compatible form data.\n *\n * @since 2.0.0\n * @param input - Input value supplied to the remote form.\n * @returns FormData payload for the remote endpoint.\n */\nexport function to_form_data(input: unknown): FormData {\n const form_data = new FormData();\n\n append_form_value(form_data, \"\", input);\n\n return form_data;\n}\n\nfunction append_form_value(\n form_data: FormData,\n path: string,\n value: unknown,\n): void {\n if (value === undefined) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n append_form_value(form_data, `${path}[]`, item);\n }\n\n return;\n }\n\n if (value instanceof Blob) {\n form_data.append(path, value);\n\n return;\n }\n\n if (typeof value === \"object\" && value !== null) {\n for (const [key, child] of Object.entries(value)) {\n const child_path = path.length === 0 ? key : `${path}.${key}`;\n\n append_form_value(form_data, child_path, child);\n }\n\n return;\n }\n\n if (typeof value === \"number\") {\n form_data.append(`n:${path}`, String(value));\n\n return;\n }\n\n if (typeof value === \"boolean\") {\n if (value) {\n form_data.append(`b:${path}`, \"on\");\n }\n\n return;\n }\n\n form_data.append(path, value === null ? \"\" : String(value));\n}\n","import {\n create_remote_http_error,\n create_remote_transport_error,\n create_remote_validation_error,\n} from \"$/remote/shared.ts\";\nimport type { FormIssue } from \"$/remote/shared.ts\";\nimport { parse } from \"devalue\";\n\nimport { decode_remote_error, is_decoded_remote_failure } from \"./failures.ts\";\nimport { decode_response_failure } from \"./responses.ts\";\nimport { to_form_data } from \"./form-data.ts\";\nimport type { NativeFormRecord } from \"./types.ts\";\n\n/**\n * Submits a native remote form through the SvelteKit remote endpoint.\n *\n * @since 2.0.0\n * @param form_obj - Native form object being adapted.\n * @param input - Form input value.\n * @param decode_payload - Function to decode successful payloads.\n * @param remote_base - Base URL for the remote endpoint.\n * @returns Decoded form output.\n */\nexport async function submit_remote_form<Output>(\n form_obj: NativeFormRecord,\n input: unknown,\n decode_payload: (value: unknown) => unknown,\n remote_base: string,\n): Promise<Output> {\n const action_id = get_remote_action_id(form_obj);\n\n if (!action_id || remote_base.length === 0) {\n throw create_remote_transport_error(\n new Error(\n \"[REMOTE_FORM_ENDPOINT_MISSING]: Form has no submit method or remote endpoint\",\n ),\n );\n }\n\n const response = await fetch(to_remote_form_url(remote_base, action_id), {\n method: \"POST\",\n body: to_form_data(input),\n });\n\n if (!response.ok) {\n throw await decode_response_failure(response);\n }\n\n const envelope = await response.json();\n\n return decode_form_response<Output>(envelope, decode_payload);\n}\n\n/**\n * Extracts SvelteKit's remote action id from a native form action URL.\n *\n * @since 2.0.0\n * @param form_obj - Native form object being adapted.\n * @returns Remote action id when present.\n */\nexport function get_remote_action_id(\n form_obj: NativeFormRecord,\n): string | undefined {\n const action = form_obj.action;\n\n if (typeof action !== \"string\") {\n return undefined;\n }\n\n const fallback = \"http://localhost/\";\n const href = typeof location === \"undefined\" ? fallback : location.href;\n const url = new URL(action, href);\n\n return url.searchParams.get(\"/remote\") ??\n url.searchParams.get(\"remote\") ??\n undefined;\n}\n\nfunction to_remote_form_url(remote_base: string, action_id: string): string {\n const parts = action_id.split(\"/\");\n const head = parts.slice(0, 2).join(\"/\");\n const tail = parts.slice(2).join(\"/\");\n const normalized_base = remote_base.replace(/\\/$/, \"\");\n\n if (tail.length === 0) {\n return `${normalized_base}/${head}`;\n }\n\n return `${normalized_base}/${head}/${encodeURIComponent(tail)}`;\n}\n\nfunction decode_form_response<Output>(\n envelope: unknown,\n decode_payload: (value: unknown) => unknown,\n): Output {\n if (\n typeof envelope !== \"object\" ||\n envelope === null ||\n !(\"type\" in envelope)\n ) {\n throw create_remote_transport_error(\n new Error(\n \"[REMOTE_FORM_RESPONSE_INVALID]: Invalid remote form response\",\n ),\n envelope,\n );\n }\n\n const response = envelope as {\n type: string;\n result?: unknown;\n error?: unknown;\n status?: number;\n };\n\n if (response.type === \"error\") {\n const decoded = decode_remote_error(response.error);\n\n if (is_decoded_remote_failure(decoded)) {\n throw decoded;\n }\n\n throw create_remote_http_error(\n response.status ?? 500,\n response.error,\n );\n }\n\n if (response.type !== \"result\" || typeof response.result !== \"string\") {\n throw create_remote_transport_error(\n new Error(\n \"[REMOTE_FORM_RESPONSE_UNSUPPORTED]: Unsupported remote form response\",\n ),\n envelope,\n );\n }\n\n const parsed = parse(response.result);\n const decoded = decode_payload(parsed) as {\n issues?: readonly FormIssue[];\n result?: Output;\n };\n\n if (decoded.issues && decoded.issues.length > 0) {\n throw create_remote_validation_error(decoded.issues, decoded, 400);\n }\n\n return decoded.result as Output;\n}\n","import { get_dispatcher } from \"$/dispatcher.ts\";\nimport type { RemoteFailure } from \"$/remote/shared.ts\";\nimport { Effect } from \"effect\";\n\nimport { make_effect_from_promise } from \"./effect.ts\";\nimport { has_method } from \"./utils.ts\";\nimport type { NativeMethod } from \"./types.ts\";\n\n/**\n * Wraps a remote form enhance callback so Effect return values are run.\n *\n * @since 2.0.0\n * @param callback - Native enhance callback to wrap.\n * @returns Wrapped callback or undefined.\n */\nexport function wrap_enhance_callback(\n callback: NativeMethod | undefined,\n): NativeMethod | undefined {\n if (!callback) {\n return undefined;\n }\n\n return (event: unknown) => {\n const wrapped_event = wrap_submit_callback(event);\n const result = callback(wrapped_event);\n\n if (Effect.isEffect(result)) {\n return get_dispatcher().run(result);\n }\n\n return result;\n };\n}\n\nfunction wrap_submit_callback(event: unknown): unknown {\n if (\n typeof event !== \"object\" || event === null || !has_method(event, \"submit\")\n ) {\n return event;\n }\n\n const original_submit = event.submit;\n const { submit: _submit, ...descriptors } = Object.getOwnPropertyDescriptors(\n event,\n );\n\n void _submit;\n\n return Object.defineProperties({}, {\n ...descriptors,\n submit: {\n configurable: true,\n enumerable: false,\n value: () => make_submit_effect(original_submit),\n },\n });\n}\n\nfunction make_submit_effect(\n original_submit: NativeMethod,\n): Effect.Effect<unknown, RemoteFailure<unknown>> & Record<string, unknown> {\n let updates_args: unknown[] | undefined;\n\n const effect = make_effect_from_promise(async () => {\n const result = original_submit();\n\n if (updates_args && has_method(result, \"updates\")) {\n return await Promise.resolve(result.updates(...updates_args));\n }\n\n return await Promise.resolve(result);\n }) as\n & Effect.Effect<unknown, RemoteFailure<unknown>>\n & Record<string, unknown>;\n\n Object.defineProperty(effect, \"updates\", {\n configurable: true,\n enumerable: false,\n value: (...args: unknown[]) => {\n updates_args ??= args;\n\n return effect;\n },\n });\n\n return effect;\n}\n","import type { RemoteFormInput } from \"@sveltejs/kit\";\n\nimport { decode_response_or_value } from \"./responses.ts\";\nimport { make_effect_from_promise } from \"./effect.ts\";\nimport { get_remote_action_id, submit_remote_form } from \"./form-transport.ts\";\nimport { copy_property_descriptors, has_method } from \"./utils.ts\";\nimport { wrap_enhance_callback } from \"./form-enhance.ts\";\nimport type { EffectRemoteForm, NativeFormRecord } from \"./types.ts\";\n\n/**\n * Creates a remote form adapter. The callable preserves SvelteKit's native\n * form descriptors while wrapping `validate`, `enhance`, and programmatic\n * submission in Effect-returning APIs.\n *\n * @example\n * ```ts\n * const createPost = create_remote_form_adapter(nativeForm, (value) => value);\n * yield* createPost.validate({ includeUntouched: true });\n * ```\n *\n * @since 2.0.0\n * @param native_factory - SvelteKit's native form object.\n * @param decode_payload - Function to decode the response payload.\n * @param remote_base - Base URL for SvelteKit's remote endpoint.\n * @returns A callable form function whose properties mirror the native form.\n * @internal\n */\nexport function create_remote_form_adapter<\n Input extends RemoteFormInput | void,\n Output,\n>(\n native_factory: unknown,\n decode_payload: (value: unknown) => unknown,\n remote_base = \"\",\n): EffectRemoteForm<Input, Output> {\n const form_obj = native_factory as NativeFormRecord;\n\n const submit_effect = (input: Input) =>\n make_effect_from_promise(async () => {\n const can_use_remote_endpoint = remote_base.length > 0 &&\n get_remote_action_id(form_obj) !== undefined;\n\n if (has_method(form_obj, \"submit\") && !can_use_remote_endpoint) {\n const result = await form_obj.submit(input);\n\n return await decode_response_or_value<Output>(result, decode_payload);\n }\n\n return await submit_remote_form<Output>(\n form_obj,\n input,\n decode_payload,\n remote_base,\n );\n });\n\n const callable = ((input: Input) => submit_effect(input)) as EffectRemoteForm<\n Input,\n Output\n >;\n\n copy_property_descriptors(\n form_obj,\n callable,\n new Set([\"submit\", \"validate\", \"enhance\", \"for\", \"preflight\"]),\n );\n\n Object.defineProperty(callable, \"submit\", {\n configurable: true,\n enumerable: false,\n value: submit_effect,\n });\n\n if (has_method(form_obj, \"validate\")) {\n Object.defineProperty(callable, \"validate\", {\n configurable: true,\n enumerable: false,\n value: (options?: Record<string, unknown>) =>\n make_effect_from_promise(async () => {\n await form_obj.validate(options);\n }),\n });\n }\n\n if (has_method(form_obj, \"enhance\")) {\n Object.defineProperty(callable, \"enhance\", {\n configurable: true,\n enumerable: false,\n value: (callback?: Parameters<typeof wrap_enhance_callback>[0]) =>\n form_obj.enhance(wrap_enhance_callback(callback)),\n });\n }\n\n if (has_method(form_obj, \"for\")) {\n Object.defineProperty(callable, \"for\", {\n configurable: true,\n enumerable: false,\n value: (key: string | number | boolean) =>\n create_remote_form_adapter<Input, Output>(\n form_obj.for(key),\n decode_payload,\n remote_base,\n ),\n });\n }\n\n if (has_method(form_obj, \"preflight\")) {\n Object.defineProperty(callable, \"preflight\", {\n configurable: true,\n enumerable: false,\n value: (schema: unknown) => {\n form_obj.preflight(schema);\n\n return callable;\n },\n });\n }\n\n return callable;\n}\n","import { decode_response_or_value } from \"./responses.ts\";\nimport { has_method } from \"./utils.ts\";\n\n/**\n * Resolves native query results, including SvelteKit run handles.\n *\n * @example\n * ```ts\n * const output = await resolve_query_result(result, decode_payload);\n * ```\n *\n * @since 2.0.0\n * @param value - Native query result or query run handle.\n * @param decode_payload - Function used to decode successful payloads.\n * @returns Decoded query output.\n */\nexport async function resolve_query_result<Output>(\n value: unknown,\n decode_payload: (value: unknown) => unknown,\n): Promise<Output> {\n if (has_method(value, \"then\")) {\n const result = await Promise.resolve(value);\n\n return decode_response_or_value(result, decode_payload);\n }\n\n if (has_method(value, \"run\")) {\n const result = await value.run();\n\n return decode_response_or_value(result, decode_payload);\n }\n\n const result = await Promise.resolve(value);\n\n return decode_response_or_value(result, decode_payload);\n}\n","import { copy_property_descriptors, has_method } from \"./utils.ts\";\nimport { normalize_native_error } from \"./failures.ts\";\nimport { resolve_query_result } from \"./query-result.ts\";\nimport { make_effect_from_promise } from \"./effect.ts\";\nimport type { RemoteFailure } from \"$/remote/shared.ts\";\nimport type { NativeMethod } from \"./types.ts\";\nimport { Effect } from \"effect\";\n\ntype RemoteResourceEffect<Output> =\n & Effect.Effect<Output, RemoteFailure<unknown>>\n & {\n readonly current: Output | undefined;\n readonly error: unknown;\n readonly loading: boolean;\n readonly ready: boolean;\n };\n\ntype RemoteResourceLike<Output> =\n | RemoteResourceEffect<Output>\n | RemoteLiveQueryResource<Output>;\n\ntype RemoteQueryEffect<Output> =\n & RemoteResourceEffect<Output>\n & {\n readonly refresh: () => Effect.Effect<void, unknown, never>;\n readonly set: (value: Output) => void;\n readonly withOverride: (\n update: (current: Output) => Output,\n ) => unknown;\n };\n\ntype RemoteLiveQueryEffect<Output> = Effect.Effect<\n RemoteLiveQueryResource<Output>,\n RemoteFailure<unknown>\n>;\n\ntype RemoteLiveQueryResource<Output> =\n & {\n readonly connected: boolean;\n readonly current: Output | undefined;\n readonly done: boolean;\n readonly error: unknown;\n readonly loading: boolean;\n readonly ready: boolean;\n readonly reconnect: () => Effect.Effect<void, unknown, never>;\n }\n & AsyncIterable<Output>;\n\ntype NativeRemoteResource<Output> = {\n readonly connected?: boolean;\n readonly current?: Output;\n readonly done?: boolean;\n readonly error?: unknown;\n readonly loading?: boolean;\n readonly ready?: boolean;\n readonly reconnect?: () => Promise<void>;\n readonly refresh?: () => Promise<void>;\n readonly set?: (value: Output) => void;\n readonly withOverride?: (update: (current: Output) => Output) => unknown;\n readonly [Symbol.asyncIterator]?: () => AsyncIterator<Output>;\n};\n\n/**\n * Creates a remote query adapter. The returned function takes input and\n * returns an `Effect` that executes SvelteKit's native query function.\n *\n * @example\n * ```ts\n * const getUser = create_remote_query_adapter(nativeQuery, (value) => value);\n * const user = yield* getUser({ id: 1 });\n * ```\n *\n * @since 2.0.0\n * @param native_factory - SvelteKit's native query function or a legacy\n * response factory used by tests.\n * @param decode_payload - Function to decode the response payload.\n * @param _base - Deprecated transport base retained for compatibility.\n * @returns A function returning an Effect of the response.\n * @internal\n */\nexport function create_remote_query_adapter<Input, Output>(\n native_factory: unknown,\n decode_payload: (value: unknown) => unknown,\n _base = \"\",\n): (input: Input) => RemoteQueryEffect<Output> {\n const load = has_method(native_factory, \"load\")\n ? native_factory.load\n : undefined;\n const query = typeof native_factory === \"function\"\n ? native_factory as NativeMethod\n : undefined;\n\n if (!query && !load) {\n throw new Error(\n \"[INVALID_QUERY_FACTORY]: Invalid query factory: expected a function\",\n );\n }\n\n const wrapped = ((input: Input) => {\n if (!query) {\n return make_effect_from_promise(async () => {\n const result = await load?.(input);\n\n return await resolve_query_result<Output>(result, decode_payload);\n }) as RemoteQueryEffect<Output>;\n }\n\n const resource = query(input);\n const effect = make_effect_from_promise(async () =>\n await resolve_query_result<Output>(resource, decode_payload)\n ) as RemoteQueryEffect<Output>;\n\n attach_query_resource(resource, effect);\n\n return effect;\n }) as (input: Input) => RemoteQueryEffect<Output>;\n\n copy_property_descriptors(native_factory, wrapped);\n\n return wrapped;\n}\n\n/**\n * Creates a remote live query adapter. The returned function takes input and\n * returns an `Effect` that resolves to a live query resource with stream state\n * and reconnect controls.\n *\n * @example\n * ```ts\n * const getTime = create_remote_live_query_adapter(nativeLive, (value) => value);\n * const time = yield* getTime();\n * const current = time.current;\n * ```\n *\n * @since 2.0.0\n * @param native_factory - SvelteKit's native live query function.\n * @param _decode_payload - Deprecated payload decoder retained for parity with\n * other remote adapters.\n * @param _base - Deprecated transport base retained for compatibility.\n * @returns A function returning an Effect-backed live query resource.\n * @internal\n */\nexport function create_remote_live_query_adapter<Input, Output>(\n native_factory: unknown,\n _decode_payload: (value: unknown) => unknown,\n _base = \"\",\n): (input: Input) => RemoteLiveQueryEffect<Output> {\n const query = typeof native_factory === \"function\"\n ? native_factory as NativeMethod\n : undefined;\n\n if (!query) {\n throw new Error(\n \"[INVALID_LIVE_QUERY_FACTORY]: Invalid live query factory: expected a function\",\n );\n }\n\n const wrapped = ((input: Input) =>\n Effect.try({\n try: () => {\n const resource = query(input);\n\n return make_live_query_resource<Output>(resource);\n },\n catch: normalize_native_error,\n }) as RemoteLiveQueryEffect<Output>) as (\n input: Input,\n ) => RemoteLiveQueryEffect<Output>;\n\n copy_property_descriptors(native_factory, wrapped);\n\n return wrapped;\n}\n\nfunction is_resource<Output>(\n resource: unknown,\n): resource is NativeRemoteResource<Output> {\n const resource_type = typeof resource;\n\n return (\n (resource_type === \"object\" && resource !== null) ||\n resource_type === \"function\"\n );\n}\n\nfunction attach_resource_getters<Output>(\n resource: unknown,\n effect: RemoteResourceLike<Output>,\n): void {\n const methods = is_resource<Output>(resource) ? resource : undefined;\n const keys = [\"current\", \"error\", \"loading\", \"ready\"] as const;\n\n if (!methods) {\n return;\n }\n\n for (const key of keys) {\n if (!(key in methods)) {\n continue;\n }\n\n Object.defineProperty(effect, key, {\n configurable: true,\n get: () => methods[key],\n });\n }\n}\n\nfunction attach_query_resource<Output>(\n resource: unknown,\n effect: RemoteQueryEffect<Output>,\n): void {\n const methods = is_resource<Output>(resource) ? resource : undefined;\n const refresh = methods?.refresh;\n const set = methods?.set;\n const with_override = methods?.withOverride;\n\n attach_resource_getters(resource, effect);\n\n if (!methods) {\n return;\n }\n\n if (typeof refresh === \"function\") {\n Object.defineProperty(effect, \"refresh\", {\n configurable: true,\n value: () =>\n make_effect_from_promise(() => Promise.resolve(refresh.call(resource))),\n });\n }\n\n if (typeof set === \"function\") {\n Object.defineProperty(effect, \"set\", {\n configurable: true,\n value: (value: Output) => set.call(resource, value),\n });\n }\n\n if (typeof with_override === \"function\") {\n Object.defineProperty(effect, \"withOverride\", {\n configurable: true,\n value: (update: (current: Output) => Output) =>\n with_override.call(resource, update),\n });\n }\n}\n\nfunction attach_live_query_resource<Output>(\n resource: unknown,\n effect: RemoteLiveQueryResource<Output>,\n): void {\n const methods = is_resource<Output>(resource) ? resource : undefined;\n const async_iterator = methods?.[Symbol.asyncIterator];\n const reconnect = methods?.reconnect;\n const keys = [\"connected\", \"done\"] as const;\n\n attach_resource_getters(resource, effect);\n\n if (!methods) {\n return;\n }\n\n for (const key of keys) {\n if (!(key in methods)) {\n continue;\n }\n\n Object.defineProperty(effect, key, {\n configurable: true,\n get: () => methods[key],\n });\n }\n\n if (typeof reconnect === \"function\") {\n Object.defineProperty(effect, \"reconnect\", {\n configurable: true,\n value: () =>\n make_effect_from_promise(() =>\n Promise.resolve(reconnect.call(resource))\n ),\n });\n }\n\n if (typeof async_iterator === \"function\") {\n Object.defineProperty(effect, Symbol.asyncIterator, {\n configurable: true,\n value: () => async_iterator.call(resource),\n });\n }\n}\n\nfunction make_live_query_resource<Output>(\n resource: unknown,\n): RemoteLiveQueryResource<Output> {\n const live_resource = {} as RemoteLiveQueryResource<Output>;\n\n attach_live_query_resource(resource, live_resource);\n\n return live_resource;\n}\n"],"mappings":"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"}
@@ -33,4 +33,4 @@ function copy_property_descriptors(source, target, exclude = default_excluded_de
33
33
  //#endregion
34
34
  export { copy_property_descriptors as t };
35
35
 
36
- //# sourceMappingURL=descriptors-CU2g4U_i.js.map
36
+ //# sourceMappingURL=descriptors-OS4VfJuW.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"descriptors-OS4VfJuW.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;AACF,CAAC;;;;;;;;;;;;;;;;;AAkBD,SAAgB,0BACd,QACA,QACA,UAAoC,kCAC9B;CACN,IAAI,OAAO,WAAW,YAAY,OAAO,WAAW,YAClD;CAGF,IAAI,WAAW,MACb;CAGF,KAAK,MAAM,OAAO,QAAQ,QAAQ,MAAM,GAAG;EACzC,IAAI,iCAAiC,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,GAC9D;EAGF,MAAM,aAAa,OAAO,yBAAyB,QAAQ,GAAG;EAE9D,IAAI,CAAC,YACH;EAGF,OAAO,eAAe,QAAQ,KAAK,UAAU;CAC/C;AACF"}
@@ -336,4 +336,4 @@ function reset_dispatcher() {
336
336
  //#endregion
337
337
  export { get_dispatcher as n, reset_dispatcher as r, Dispatcher as t };
338
338
 
339
- //# sourceMappingURL=dispatcher-g0HYqHOK.js.map
339
+ //# sourceMappingURL=dispatcher-8B6Ol80H.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispatcher-g0HYqHOK.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(\n new Error(\"[DISPATCHER_DISPOSED]: Dispatcher has been disposed\"),\n );\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(\n new Error(\"[DISPATCHER_DISPOSED]: Dispatcher has been disposed\"),\n );\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":"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"}
1
+ {"version":3,"file":"dispatcher-8B6Ol80H.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(\n new Error(\"[DISPATCHER_DISPOSED]: Dispatcher has been disposed\"),\n );\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(\n new Error(\"[DISPATCHER_DISPOSED]: Dispatcher has been disposed\"),\n );\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":"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"}
@@ -1,4 +1,4 @@
1
- import { a as find_yield_star_node, c as AsyncEffectInSyncRuneError, i as extract_binding_names, l as AwaitInEffectWorkError, n as collect_yield_star_nodes, o as is_yield_star_expression, r as contains_top_level_await, s as collect_free_identifiers } from "./transform-B4g76Ur4.js";
1
+ import { a as find_yield_star_node, c as AsyncEffectInSyncRuneError, i as extract_binding_names, l as AwaitInEffectWorkError, n as collect_yield_star_nodes, o as is_yield_star_expression, r as contains_top_level_await, s as collect_free_identifiers } from "./transform-s9gKPYu5.js";
2
2
  import { contains_top_level_yield_star } from "../detect.js";
3
3
  import MagicString from "magic-string";
4
4
  import ts from "typescript";
@@ -10,10 +10,15 @@ import ts from "typescript";
10
10
  * @param has_effect_import - Whether the user already imports `Effect`.
11
11
  * @param has_dispatcher_import - Whether the user already imports
12
12
  * `get_dispatcher`.
13
+ * @param has_untrack_import - Whether the user already imports `untrack`.
13
14
  * @returns Newline-separated import statements to inject.
14
15
  */
15
- function make_imports(has_effect_import, has_dispatcher_import) {
16
- return [!has_effect_import && `import { Effect } from "effect";`, !has_dispatcher_import && `import { get_dispatcher } from "svelte-effect-runtime/internal/generators";`].filter(Boolean).join("\n");
16
+ function make_imports(has_effect_import, has_dispatcher_import, has_untrack_import) {
17
+ return [
18
+ !has_dispatcher_import && `import { get_dispatcher } from "svelte-effect-runtime/internal/generators";`,
19
+ !has_untrack_import && `import { untrack } from "svelte";`,
20
+ !has_effect_import && `import { Effect } from "effect";`
21
+ ].filter(Boolean).join("\n");
17
22
  }
18
23
  /**
19
24
  * Checks whether a source file imports a local binding from a module.
@@ -86,19 +91,19 @@ function slice_start(content, node) {
86
91
  */
87
92
  function make_runtime_block(blocks) {
88
93
  const merged_block = merge_effect_blocks(blocks);
89
- const dep_reads = merged_block.deps.length === 0 ? [] : [` void [${merged_block.deps.join(", ")}];`];
94
+ const dep_reads = merged_block.deps.map((dep) => ` ${dep};`);
90
95
  const body = merged_block.statements.map((statement) => ` ${statement}`).join("\n");
91
96
  return [
92
97
  "",
93
98
  "$effect(() => {",
94
99
  ...dep_reads,
95
- " const __SER__dispatcher = get_dispatcher();",
96
- " const __SER__program = Effect.gen(function* () {",
100
+ " const __SER___dispatcher = get_dispatcher();",
101
+ " const __SER___program = Effect.gen(function* () {",
97
102
  body,
98
103
  " });",
99
- " const __SER__cancel = __SER__dispatcher.fork(__SER__program);",
100
- " import.meta.hot?.dispose(__SER__cancel);",
101
- " return __SER__cancel;",
104
+ " const __SER___cancel = untrack(() => __SER___dispatcher.fork(__SER___program));",
105
+ " import.meta.hot?.dispose(__SER___cancel);",
106
+ " return __SER___cancel;",
102
107
  "});",
103
108
  ""
104
109
  ].join("\n");
@@ -301,10 +306,11 @@ function lower_expression_statement(stmt, content, context) {
301
306
  if (ts.isBinaryExpression(expr) && expr.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
302
307
  const target = slice(content, expr.left).trim();
303
308
  const yield_text = extract_yield_star_full_text(expr, content);
309
+ const target_names = collect_assignment_target_names(expr.left);
304
310
  return {
305
311
  temps: [],
306
312
  rewritten_text: "",
307
- effect_blocks: [make_effect_block([`${target} = ${yield_text};`], collect_deps(yield_text))],
313
+ effect_blocks: [make_effect_block([`${target} = ${yield_text};`], collect_deps(yield_text, target_names))],
308
314
  range: {
309
315
  start: stmt.getStart(),
310
316
  end: stmt.end
@@ -372,8 +378,22 @@ function make_effect_block(statements, deps) {
372
378
  deps: [...new Set(deps)]
373
379
  };
374
380
  }
375
- function collect_deps(expr_text) {
376
- return collect_free_identifiers(expr_text).filter((identifier) => !identifier.startsWith("__SER__"));
381
+ function collect_deps(expr_text, excluded_names = []) {
382
+ const excluded = new Set(excluded_names);
383
+ return collect_free_identifiers(expr_text).filter((identifier) => !identifier.startsWith("__SER___") && !excluded.has(identifier));
384
+ }
385
+ function collect_assignment_target_names(node) {
386
+ if (ts.isIdentifier(node)) return [node.text];
387
+ if (ts.isParenthesizedExpression(node)) return collect_assignment_target_names(node.expression);
388
+ if (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) return collect_assignment_target_names(node.expression);
389
+ if (ts.isObjectLiteralExpression(node)) return node.properties.flatMap((property) => {
390
+ if (ts.isShorthandPropertyAssignment(property)) return [property.name.text];
391
+ if (ts.isPropertyAssignment(property)) return collect_assignment_target_names(property.initializer);
392
+ if (ts.isSpreadAssignment(property)) return collect_assignment_target_names(property.expression);
393
+ return [];
394
+ });
395
+ if (ts.isArrayLiteralExpression(node)) return node.elements.flatMap((element) => ts.isSpreadElement(element) ? collect_assignment_target_names(element.expression) : collect_assignment_target_names(element));
396
+ return [];
377
397
  }
378
398
  //#endregion
379
399
  //#region src/preprocess/index.ts
@@ -404,13 +424,14 @@ function transform_script_effect(content, filename) {
404
424
  let has_effect = false;
405
425
  const context = { next_temp_name(hint) {
406
426
  const suffix = temp_counter === 0 ? "" : `_${temp_counter}`;
407
- const name = hint ? `__SER__${hint}${suffix}` : `__SER__${temp_counter}`;
427
+ const name = hint ? `__SER___${hint}${suffix}` : `__SER___${temp_counter}`;
408
428
  temp_counter += 1;
409
429
  return name;
410
430
  } };
411
431
  /** Phase 1: detect imports already provided by the user. */
412
432
  const has_effect_import = has_local_import_binding(source_file, "effect", "Effect");
413
433
  const has_dispatcher_import = has_local_import_binding(source_file, "svelte-effect-runtime/internal/generators", "get_dispatcher");
434
+ const has_untrack_import = has_local_import_binding(source_file, "svelte", "untrack");
414
435
  /** Phase 2: lower every top-level statement that contains `yield*`. */
415
436
  for (const stmt of source_file.statements) {
416
437
  validate_rune_yield_usage(stmt, content, filename);
@@ -436,7 +457,7 @@ function transform_script_effect(content, filename) {
436
457
  };
437
458
  }
438
459
  /** Phase 3: inject runtime imports after the last user import. */
439
- const imports = make_imports(has_effect_import, has_dispatcher_import);
460
+ const imports = make_imports(has_effect_import, has_dispatcher_import, has_untrack_import);
440
461
  const last_import = [...source_file.statements].reverse().find(ts.isImportDeclaration);
441
462
  if (last_import) magic.appendRight(last_import.end, "\n" + imports);
442
463
  else magic.prepend(imports + "\n");
@@ -456,4 +477,4 @@ function transform_script_effect(content, filename) {
456
477
  //#endregion
457
478
  export { transform_script_effect as t };
458
479
 
459
- //# sourceMappingURL=preprocess-33aQ41uE.js.map
480
+ //# sourceMappingURL=preprocess-Cn4JH9OO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preprocess-Cn4JH9OO.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/preprocess/imports.ts","../../../modules/svelte-effect-runtime/src/preprocess/source.ts","../../../modules/svelte-effect-runtime/src/preprocess/runtime-block.ts","../../../modules/svelte-effect-runtime/src/preprocess/runes.ts","../../../modules/svelte-effect-runtime/src/preprocess/lower.ts","../../../modules/svelte-effect-runtime/src/preprocess/index.ts"],"sourcesContent":["import ts from \"typescript\";\n\n/**\n * Builds the import statements injected by the script preprocessor.\n *\n * @since 2.0.0\n * @param has_effect_import - Whether the user already imports `Effect`.\n * @param has_dispatcher_import - Whether the user already imports\n * `get_dispatcher`.\n * @param has_untrack_import - Whether the user already imports `untrack`.\n * @returns Newline-separated import statements to inject.\n */\nexport function make_imports(\n has_effect_import: boolean,\n has_dispatcher_import: boolean,\n has_untrack_import: boolean,\n): string {\n return [\n !has_dispatcher_import &&\n `import { get_dispatcher } from \"svelte-effect-runtime/internal/generators\";`,\n !has_untrack_import && `import { untrack } from \"svelte\";`,\n !has_effect_import && `import { Effect } from \"effect\";`,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\n/**\n * Checks whether a source file imports a local binding from a module.\n *\n * @since 2.0.0\n * @param source_file - Parsed TypeScript source file to inspect.\n * @param module_name - Module specifier to match.\n * @param local_name - Local binding name to look for.\n * @returns Whether that binding is already locally available.\n */\nexport function has_local_import_binding(\n source_file: ts.SourceFile,\n module_name: string,\n local_name: string,\n): boolean {\n return source_file.statements.some((stmt) => {\n if (\n !ts.isImportDeclaration(stmt) ||\n !ts.isStringLiteral(stmt.moduleSpecifier) ||\n stmt.moduleSpecifier.text !== module_name\n ) {\n return false;\n }\n\n const clause = stmt.importClause;\n\n if (!clause) {\n return false;\n }\n\n if (clause.name?.text === local_name) {\n return true;\n }\n\n const named_bindings = clause.namedBindings;\n\n if (!named_bindings) {\n return false;\n }\n\n if (ts.isNamespaceImport(named_bindings)) {\n return named_bindings.name.text === local_name;\n }\n\n return named_bindings.elements.some(\n (element) => element.name.text === local_name,\n );\n });\n}\n","import type MagicString from \"magic-string\";\nimport type ts from \"typescript\";\n\n/**\n * Creates a source map from transformed script back to the original block.\n *\n * @since 2.0.0\n * @param magic - MagicString instance holding the transformed source.\n * @param filename - Source filename used for the source map entry.\n * @returns A plain source map object.\n */\nexport function create_source_map(\n magic: MagicString,\n filename: string,\n): Record<string, unknown> {\n const map = magic.generateMap({\n hires: true,\n includeContent: true,\n source: filename,\n });\n\n return map as unknown as Record<string, unknown>;\n}\n\n/**\n * Slices a substring matching a node's full source range.\n *\n * @since 2.0.0\n * @param content - Original source text.\n * @param node - AST node whose full range should be extracted.\n * @returns Source text including leading trivia.\n */\nexport function slice(content: string, node: ts.Node): string {\n return content.slice(node.getFullStart(), node.end);\n}\n\n/**\n * Slices a substring matching a node's source range without leading trivia.\n *\n * @since 2.0.0\n * @param content - Original source text.\n * @param node - AST node whose non-trivia range should be extracted.\n * @returns Source text excluding leading trivia.\n */\nexport function slice_start(content: string, node: ts.Node): string {\n return content.slice(node.getStart(), node.end);\n}\n","import type { EffectBlock } from \"./types.ts\";\n\n/**\n * Builds the runtime blocks appended to lowered script effect code.\n *\n * @since 2.0.0\n * @param blocks - Effect bodies and dependency reads to emit.\n * @returns Full `$effect` blocks that fork generated `Effect.gen` programs.\n */\nexport function make_runtime_block(blocks: EffectBlock[]): string {\n const merged_block = merge_effect_blocks(blocks);\n const dep_reads = merged_block.deps.map((dep) => ` ${dep};`);\n\n const body = merged_block.statements\n .map((statement) => ` ${statement}`)\n .join(\"\\n\");\n\n return [\n \"\",\n \"$effect(() => {\",\n ...dep_reads,\n \" const __SER___dispatcher = get_dispatcher();\",\n \" const __SER___program = Effect.gen(function* () {\",\n body,\n \" });\",\n \" const __SER___cancel = untrack(() => __SER___dispatcher.fork(__SER___program));\",\n \" import.meta.hot?.dispose(__SER___cancel);\",\n \" return __SER___cancel;\",\n \"});\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction merge_effect_blocks(blocks: EffectBlock[]): EffectBlock {\n const statements = blocks.flatMap((block) => block.statements);\n const deps = blocks.flatMap((block) => block.deps);\n\n return {\n statements,\n deps: [...new Set(deps)],\n };\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport { AsyncEffectInSyncRuneError } from \"$/error.ts\";\nimport { slice } from \"./source.ts\";\n\nimport ts from \"typescript\";\n\nconst ASYNC_EXPRESSION_RUNES = new Set([\n \"$derived\",\n \"$inspect\",\n \"$state\",\n \"$state.raw\",\n]);\n\nconst CALLBACK_RUNES = new Set([\n \"$derived.by\",\n \"$effect\",\n \"$effect.pre\",\n \"$effect.root\",\n]);\n\n/**\n * Validates that `yield*` only appears in rune positions the script-effect\n * transform can lower without changing the rune's normal Svelte contract.\n *\n * @since 2.0.0\n * @param node - AST node to scan.\n * @param content - Original script source used for diagnostics.\n * @param filename - Source filename used for diagnostics.\n * @returns Nothing.\n */\nexport function validate_rune_yield_usage(\n node: ts.Node,\n content: string,\n filename: string,\n): void {\n visit_rune_yield_usage(node, content, filename);\n}\n\n/**\n * Identifies `$state(...)` and `$state.raw(...)` initializer calls.\n *\n * @since 2.0.0\n * @param expr - Expression to classify.\n * @param content - Original script source used to preserve argument text.\n * @returns State rune details when the expression is a state initializer.\n */\nexport function get_state_rune_initializer(\n expr: ts.Expression,\n content: string,\n): { rune_name: \"$state\" | \"$state.raw\"; value_text: string } | undefined {\n if (!ts.isCallExpression(expr)) {\n return undefined;\n }\n\n const rune_name = get_rune_name(expr.expression);\n\n if (rune_name !== \"$state\" && rune_name !== \"$state.raw\") {\n return undefined;\n }\n\n const first_arg = expr.arguments[0];\n\n if (!first_arg) {\n return undefined;\n }\n\n return {\n rune_name,\n value_text: slice(content, first_arg).trim(),\n };\n}\n\nfunction visit_rune_yield_usage(\n node: ts.Node,\n content: string,\n filename: string,\n): void {\n if (ts.isCallExpression(node)) {\n validate_call_expression(node, content, filename);\n }\n\n node.forEachChild((child) => {\n visit_rune_yield_usage(child, content, filename);\n });\n}\n\nfunction validate_call_expression(\n call: ts.CallExpression,\n content: string,\n filename: string,\n): void {\n const rune_name = get_rune_name(call.expression);\n\n if (!rune_name) {\n return;\n }\n\n if (\n !ASYNC_EXPRESSION_RUNES.has(rune_name) &&\n contains_top_level_yield_star(call)\n ) {\n throw new AsyncEffectInSyncRuneError(\n rune_name,\n slice(content, call),\n filename,\n );\n }\n\n if (!CALLBACK_RUNES.has(rune_name)) {\n return;\n }\n\n const callback = call.arguments[0];\n\n if (!callback || !callback_has_top_level_yield_star(callback)) {\n return;\n }\n\n throw new AsyncEffectInSyncRuneError(\n rune_name,\n slice(content, call),\n filename,\n );\n}\n\nfunction callback_has_top_level_yield_star(node: ts.Expression): boolean {\n if (\n (ts.isArrowFunction(node) ||\n ts.isFunctionExpression(node)) &&\n node.body !== undefined\n ) {\n return contains_top_level_yield_star(node.body);\n }\n\n return contains_top_level_yield_star(node);\n}\n\nfunction get_rune_name(expr: ts.Expression): string | undefined {\n if (ts.isIdentifier(expr) && is_rune_root(expr.text)) {\n return expr.text;\n }\n\n if (!ts.isPropertyAccessExpression(expr)) {\n return undefined;\n }\n\n const root_name = get_rune_name(expr.expression);\n\n if (!root_name) {\n return undefined;\n }\n\n return `${root_name}.${expr.name.text}`;\n}\n\nfunction is_rune_root(name: string): boolean {\n return (\n name === \"$bindable\" ||\n name === \"$derived\" ||\n name === \"$effect\" ||\n name === \"$host\" ||\n name === \"$inspect\" ||\n name === \"$props\" ||\n name === \"$state\"\n );\n}\n","import { collect_free_identifiers } from \"$/markup/transform/expressions.ts\";\nimport { contains_top_level_yield_star } from \"$/detect.ts\";\nimport {\n collect_yield_star_nodes,\n extract_binding_names,\n find_yield_star_node,\n is_yield_star_expression,\n} from \"./ast.ts\";\nimport { get_state_rune_initializer } from \"./runes.ts\";\nimport { slice, slice_start } from \"./source.ts\";\nimport type {\n EffectBlock,\n LoweredExpression,\n LoweredStatement,\n ScriptLoweringContext,\n TempBinding,\n} from \"./types.ts\";\n\nimport ts from \"typescript\";\n\n/**\n * Delegates a statement to the correct lowerer based on syntax kind.\n *\n * @since 2.0.0\n * @param stmt - Statement to lower.\n * @param content - Original source text.\n * @param context - Lowering services for this transform pass.\n * @returns Lowered statement descriptor.\n */\nexport function lower_statement(\n stmt: ts.Statement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n if (ts.isExpressionStatement(stmt)) {\n return lower_expression_statement(stmt, content, context);\n }\n\n if (ts.isVariableStatement(stmt)) {\n return lower_variable_statement(stmt, content, context);\n }\n\n const text = slice(content, stmt);\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [make_effect_block([text], collect_deps(text))],\n range: { start: stmt.getFullStart(), end: stmt.end },\n };\n}\n\nfunction lower_variable_statement(\n stmt: ts.VariableStatement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n const temps: TempBinding[] = [];\n const rewritten_decls: string[] = [];\n const statements: string[] = [];\n const deps: string[] = [];\n\n const decl_list = stmt.declarationList;\n const kind = (decl_list.flags & ts.NodeFlags.Let) !== 0 ? \"let\" : \"const\";\n let has_bare_yield = false;\n\n for (const decl of decl_list.declarations) {\n if (!decl.initializer || !contains_top_level_yield_star(decl.initializer)) {\n rewritten_decls.push(slice(content, decl).trim());\n continue;\n }\n\n const binding_text = slice(content, decl.name).trim();\n\n if (ts.isIdentifier(decl.name)) {\n const original_name = binding_text;\n\n if (is_yield_star_expression(decl.initializer)) {\n const temp_name = context.next_temp_name(original_name);\n\n temps.push({ name: temp_name });\n has_bare_yield = true;\n rewritten_decls.push(`${original_name} = $derived(${temp_name})`);\n\n const yield_text = extract_yield_star_full_text(\n decl.initializer,\n content,\n );\n\n statements.push(`${temp_name} = ${yield_text};`);\n deps.push(...collect_deps(yield_text));\n } else {\n const state_rune = get_state_rune_initializer(\n decl.initializer,\n content,\n );\n\n if (state_rune) {\n has_bare_yield = true;\n rewritten_decls.push(\n `${original_name} = ${state_rune.rune_name}(undefined)`,\n );\n statements.push(`${original_name} = ${state_rune.value_text};`);\n deps.push(...collect_deps(state_rune.value_text));\n continue;\n }\n\n const lowered = lower_expression_yields(\n decl.initializer,\n content,\n original_name,\n context,\n );\n\n temps.push(...lowered.temps);\n for (const block of lowered.effect_blocks) {\n statements.push(...block.statements);\n deps.push(...block.deps);\n }\n\n const rewritten_expr = rewrite_state_rune_as_derived(\n lowered.rewritten_expr,\n );\n\n rewritten_decls.push(`${original_name} = ${rewritten_expr}`);\n }\n } else {\n has_bare_yield = true;\n\n const temp_name = context.next_temp_name(\"destructure\");\n const names = extract_binding_names(decl.name);\n\n temps.push({ name: temp_name });\n temps.push(...names.map((name) => ({ name })));\n\n const yield_text = extract_yield_star_full_text(\n decl.initializer,\n content,\n );\n\n statements.push(`${temp_name} = ${yield_text};`);\n statements.push(`(${binding_text} = ${temp_name});`);\n deps.push(...collect_deps(yield_text));\n }\n }\n\n const rewritten_text = rewritten_decls.length === 0\n ? \"\"\n : `${has_bare_yield ? \"let\" : kind} ${rewritten_decls.join(\", \")};`;\n\n return {\n temps,\n rewritten_text,\n effect_blocks: statements.length === 0\n ? []\n : [make_effect_block(statements, deps)],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n}\n\nfunction lower_expression_statement(\n stmt: ts.ExpressionStatement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n const expr = stmt.expression;\n\n if (!contains_top_level_yield_star(expr)) {\n return {\n temps: [],\n rewritten_text: slice(content, stmt).trim(),\n effect_blocks: [],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n if (is_yield_star_expression(expr)) {\n const text = slice(content, expr).trim();\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [make_effect_block([text + \";\"], collect_deps(text))],\n range: { start: stmt.getFullStart(), end: stmt.end },\n };\n }\n\n if (\n ts.isBinaryExpression(expr) &&\n expr.operatorToken.kind === ts.SyntaxKind.EqualsToken\n ) {\n const target = slice(content, expr.left).trim();\n const yield_text = extract_yield_star_full_text(expr, content);\n const target_names = collect_assignment_target_names(expr.left);\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [\n make_effect_block(\n [`${target} = ${yield_text};`],\n collect_deps(yield_text, target_names),\n ),\n ],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n const lowered = lower_expression_yields(\n expr,\n content,\n \"call\",\n context,\n );\n\n return {\n temps: lowered.temps,\n rewritten_text: lowered.rewritten_expr + \";\",\n effect_blocks: lowered.effect_blocks,\n range: { start: stmt.getStart(), end: stmt.end },\n };\n}\n\nfunction lower_expression_yields(\n expr: ts.Expression,\n content: string,\n hint: string,\n context: ScriptLoweringContext,\n): LoweredExpression {\n const replacements: Array<{\n start: number;\n end: number;\n text: string;\n }> = [];\n\n const temps: TempBinding[] = [];\n const statements: string[] = [];\n const deps: string[] = [];\n\n collect_yield_star_nodes(expr, (node) => {\n const temp_name = context.next_temp_name(hint);\n const yield_text = slice_start(content, node).trim();\n\n temps.push({ name: temp_name });\n statements.push(`${temp_name} = ${yield_text};`);\n deps.push(...collect_deps(yield_text));\n replacements.push({\n start: node.getStart(),\n end: node.end,\n text: temp_name,\n });\n });\n\n if (replacements.length === 0) {\n return {\n temps,\n rewritten_expr: slice(content, expr).trim(),\n effect_blocks: [],\n };\n }\n\n replacements.sort((a, b) => b.start - a.start);\n\n let text = slice(content, expr);\n\n const offset_in_expr = expr.getFullStart();\n\n for (const replacement of replacements) {\n text = text.slice(0, replacement.start - offset_in_expr) +\n replacement.text +\n text.slice(replacement.end - offset_in_expr);\n }\n\n return {\n temps,\n rewritten_expr: text.trim(),\n effect_blocks: [make_effect_block(statements, deps)],\n };\n}\n\nfunction rewrite_state_rune_as_derived(expression: string): string {\n const state_call = expression.match(/^\\$state(?:\\.raw)?\\(([\\s\\S]*)\\)$/);\n\n if (!state_call) {\n return expression;\n }\n\n return `$derived(${state_call[1]})`;\n}\n\nfunction extract_yield_star_full_text(\n expr: ts.Expression,\n content: string,\n): string {\n let found: string | undefined;\n\n find_yield_star_node(expr, (node) => {\n found = slice_start(content, node).trim();\n });\n\n return found ?? \"undefined\";\n}\n\nfunction make_effect_block(\n statements: string[],\n deps: string[],\n): EffectBlock {\n return {\n statements,\n deps: [...new Set(deps)],\n };\n}\n\nfunction collect_deps(\n expr_text: string,\n excluded_names: readonly string[] = [],\n): string[] {\n const excluded = new Set(excluded_names);\n\n return collect_free_identifiers(expr_text).filter(\n (identifier) =>\n !identifier.startsWith(\"__SER___\") && !excluded.has(identifier),\n );\n}\n\nfunction collect_assignment_target_names(node: ts.Node): string[] {\n if (ts.isIdentifier(node)) {\n return [node.text];\n }\n\n if (ts.isParenthesizedExpression(node)) {\n return collect_assignment_target_names(node.expression);\n }\n\n if (\n ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)\n ) {\n return collect_assignment_target_names(node.expression);\n }\n\n if (ts.isObjectLiteralExpression(node)) {\n return node.properties.flatMap((property) => {\n if (ts.isShorthandPropertyAssignment(property)) {\n return [property.name.text];\n }\n\n if (ts.isPropertyAssignment(property)) {\n return collect_assignment_target_names(property.initializer);\n }\n\n if (ts.isSpreadAssignment(property)) {\n return collect_assignment_target_names(property.expression);\n }\n\n return [];\n });\n }\n\n if (ts.isArrayLiteralExpression(node)) {\n return node.elements.flatMap((element) =>\n ts.isSpreadElement(element)\n ? collect_assignment_target_names(element.expression)\n : collect_assignment_target_names(element)\n );\n }\n\n return [];\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport { has_local_import_binding, make_imports } from \"./imports.ts\";\nimport { create_source_map, slice } from \"./source.ts\";\nimport { AwaitInEffectWorkError } from \"$/error.ts\";\nimport { make_runtime_block } from \"./runtime-block.ts\";\nimport { contains_top_level_await } from \"./ast.ts\";\nimport { lower_statement } from \"./lower.ts\";\nimport { validate_rune_yield_usage } from \"./runes.ts\";\nimport type { BlockRef, EffectBlock, ScriptTransformResult } from \"./types.ts\";\n\nimport MagicString from \"magic-string\";\nimport ts from \"typescript\";\n\nexport type { BlockRef, ScriptTransformResult } from \"./types.ts\";\n\n/**\n * Transforms a `<script effect>` body by extracting top-level `yield*`\n * expressions into `$state` temp bindings and wrapping the lowered\n * assignments in a dependency-tracked `$effect` block.\n *\n * @example\n * ```ts\n * const result = transform_script_effect(\n * `let user = $state(yield* getUser(id));`,\n * \"App.svelte\",\n * );\n * ```\n *\n * @since 2.0.0\n * @param content - The raw `<script effect>` body content.\n * @param filename - The source filename, used in error messages.\n * @returns The transformed code and any block references.\n */\nexport function transform_script_effect(\n content: string,\n filename: string,\n): ScriptTransformResult {\n let temp_counter = 0;\n\n const source_file = ts.createSourceFile(\n filename,\n content,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n const magic = new MagicString(content);\n const effect_blocks: EffectBlock[] = [];\n const block_refs: BlockRef[] = [];\n\n let has_effect = false;\n\n const context = {\n next_temp_name(hint?: string) {\n const suffix = temp_counter === 0 ? \"\" : `_${temp_counter}`;\n const name = hint\n ? `__SER___${hint}${suffix}`\n : `__SER___${temp_counter}`;\n\n temp_counter += 1;\n\n return name;\n },\n };\n\n /** Phase 1: detect imports already provided by the user. */\n const has_effect_import = has_local_import_binding(\n source_file,\n \"effect\",\n \"Effect\",\n );\n\n const has_dispatcher_import = has_local_import_binding(\n source_file,\n \"svelte-effect-runtime/internal/generators\",\n \"get_dispatcher\",\n );\n\n const has_untrack_import = has_local_import_binding(\n source_file,\n \"svelte\",\n \"untrack\",\n );\n\n /** Phase 2: lower every top-level statement that contains `yield*`. */\n for (const stmt of source_file.statements) {\n validate_rune_yield_usage(stmt, content, filename);\n\n const has_top_level_yield_star = contains_top_level_yield_star(stmt);\n\n if (!has_top_level_yield_star) {\n continue;\n }\n\n if (contains_top_level_await(stmt)) {\n const text = slice(content, stmt);\n throw new AwaitInEffectWorkError(filename, text);\n }\n\n has_effect = true;\n const lowered = lower_statement(stmt, content, context);\n\n magic.overwrite(\n lowered.range.start,\n lowered.range.end,\n lowered.rewritten_text,\n );\n\n if (lowered.temps.length > 0) {\n const prefix = lowered.temps\n .map((temp) => `let ${temp.name} = $state(undefined);`)\n .join(\"\\n\");\n\n magic.appendLeft(lowered.range.start, prefix + \"\\n\");\n }\n\n effect_blocks.push(...lowered.effect_blocks);\n }\n\n if (!has_effect) {\n block_refs.push({ id: filename, kind: \"script\" });\n\n return { code: content, blocks: block_refs };\n }\n\n /** Phase 3: inject runtime imports after the last user import. */\n const imports = make_imports(\n has_effect_import,\n has_dispatcher_import,\n has_untrack_import,\n );\n\n const last_import = [...source_file.statements]\n .reverse()\n .find(ts.isImportDeclaration);\n\n if (last_import) {\n magic.appendRight(last_import.end, \"\\n\" + imports);\n } else {\n magic.prepend(imports + \"\\n\");\n }\n\n /** Phase 4: append the runtime program and lifecycle wiring. */\n const runtime_block = make_runtime_block(effect_blocks);\n magic.append(\"\\n\" + runtime_block);\n\n block_refs.push({ id: filename, kind: \"script\" });\n\n return {\n code: magic.toString(),\n blocks: block_refs,\n map: create_source_map(magic, filename),\n };\n}\n"],"mappings":"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"}