svelte-effect-runtime 1.5.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"remote-client.js","names":[],"sources":["../../../modules/svelte-effect-runtime/internal/remote-client.ts"],"sourcesContent":["import { Effect } from \"effect\";\nimport { tick } from \"svelte\";\nimport { create_remote_effect_from_promise } from \"$/client.ts\";\nimport { create_async_effect } from \"$internal/effect-compat.ts\";\nimport {\n create_remote_http_error,\n create_remote_transport_error,\n create_remote_validation_error,\n type FormIssue,\n is_remote_validation_issue,\n is_serialized_remote_failure_envelope,\n REMOTE_ERROR_DECODER,\n type RemoteFailure,\n} from \"$internal/remote-shared.ts\";\n\ntype AnyCallable = (...args: Array<unknown>) => unknown;\n\ntype Decode_remote_payload = <ErrorType = unknown>(\n encoded: string,\n) => ErrorType;\n\ninterface HttpErrorLike {\n readonly body?: unknown;\n readonly status?: number;\n}\n\ninterface RedirectLike {\n readonly location: string;\n readonly status: number;\n}\n\ninterface Remote_request_dependencies {\n readonly app?: {\n readonly decoders?: Record<string, unknown>;\n readonly hooks?: {\n readonly transport?: Record<string, unknown>;\n };\n };\n readonly app_dir: string;\n readonly apply_refreshes?: (value: string) => void;\n readonly base: string;\n readonly get_remote_request_headers: () => HeadersInit;\n readonly remote_request: (\n url: string,\n headers: HeadersInit,\n ) => Promise<string>;\n readonly stringify_remote_arg: (\n value: unknown,\n transport: unknown,\n sort?: boolean,\n ) => string;\n}\n\ntype Query_adapter_mode = \"query\" | \"query_batch\" | \"prerender\";\n\ntype Form_request_dependencies = Remote_request_dependencies & {\n readonly app: {\n readonly decoders?: Record<string, unknown>;\n readonly encoders?: Record<string, unknown>;\n };\n readonly app_dir: string;\n readonly apply_refreshes: (value: string) => void;\n readonly base: string;\n readonly binary_form_content_type: string;\n readonly goto: (url: string, options?: unknown, code?: number) => void;\n readonly invalidate_all: () => Promise<void> | void;\n readonly serialize_binary_form: (\n data: unknown,\n meta: Record<string, unknown>,\n ) => {\n readonly blob: Blob;\n };\n};\n\ninterface Attached_form_tracker {\n current: HTMLFormElement | null;\n}\n\nfunction is_development_environment(): boolean {\n const vite_environment = (\n import.meta as ImportMeta & {\n env?: {\n DEV?: boolean;\n };\n }\n ).env;\n\n if (typeof vite_environment?.DEV === \"boolean\") {\n return vite_environment.DEV;\n }\n\n const node_process = (globalThis as typeof globalThis & {\n process?: {\n env?: {\n DEV?: string;\n NODE_ENV?: string;\n SVELTE_EFFECT_RUNTIME_DEBUG?: string;\n };\n };\n }).process;\n\n return (\n node_process?.env?.SVELTE_EFFECT_RUNTIME_DEBUG === \"1\" ||\n node_process?.env?.DEV === \"1\" ||\n node_process?.env?.NODE_ENV === \"development\"\n );\n}\n\nconst ENABLE_REMOTE_CLIENT_DEBUG_LOGS = is_development_environment();\n\nfunction log_remote_client_step(\n step: string,\n details?: Record<string, unknown>,\n): void {\n if (!ENABLE_REMOTE_CLIENT_DEBUG_LOGS) {\n return;\n }\n\n console.log(\"[svelte-effect-runtime][remote-client]\", step, details ?? {});\n}\n\nfunction define_hidden_property<Value extends object, Property>(\n value: Value,\n key: string | symbol,\n property: Property,\n): Value {\n Object.defineProperty(value, key, {\n value: property,\n enumerable: false,\n });\n\n return value;\n}\n\nfunction define_remote_error_decoder<Value extends object>(\n value: Value,\n decode_payload: Decode_remote_payload,\n): Value {\n return define_hidden_property(value, REMOTE_ERROR_DECODER, decode_payload);\n}\n\nfunction is_http_error_like(value: unknown): value is HttpErrorLike {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n typeof (value as { status?: unknown }).status === \"number\",\n );\n}\n\nfunction is_redirect_like(value: unknown): value is RedirectLike {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n typeof (value as { location?: unknown }).location === \"string\" &&\n typeof (value as { status?: unknown }).status === \"number\",\n );\n}\n\nfunction get_error_status(value: unknown): number {\n return is_http_error_like(value) ? value.status ?? 500 : 500;\n}\n\nfunction decode_remote_error<ErrorType>(\n error: unknown,\n decode_payload: Decode_remote_payload,\n): RemoteFailure<ErrorType> {\n log_remote_client_step(\"decode_remote_error:start\", {\n error,\n });\n\n if (is_http_error_like(error)) {\n const body = error.body;\n\n if (is_serialized_remote_failure_envelope(body)) {\n try {\n return decode_payload<ErrorType>(\n body.encoded,\n ) as RemoteFailure<ErrorType>;\n } catch (cause) {\n return create_remote_transport_error(cause, body);\n }\n }\n\n if (get_error_status(error) === 400) {\n return create_remote_validation_error([], {\n body,\n status: 400,\n });\n }\n\n return create_remote_http_error(error, {\n body,\n status: get_error_status(error),\n });\n }\n\n const decoded = create_remote_http_error(error);\n log_remote_client_step(\"decode_remote_error:http_error\", {\n decoded,\n });\n return decoded;\n}\n\nfunction create_effect_call<Success, ErrorType>(\n create_promise: () => PromiseLike<Success>,\n decode_payload: Decode_remote_payload,\n): Effect.Effect<Success, RemoteFailure<ErrorType>, never> {\n return create_remote_effect_from_promise<Success, ErrorType>(\n () => {\n log_remote_client_step(\"create_effect_call:start\");\n return create_promise();\n },\n (error) => decode_remote_error<ErrorType>(error, decode_payload),\n );\n}\n\nfunction create_decoded_native_callable(\n native: AnyCallable,\n decode_payload: Decode_remote_payload,\n): AnyCallable {\n const wrapped = ((...args: Array<unknown>) => {\n const result = native(...args);\n\n if (\n result && (typeof result === \"object\" || typeof result === \"function\")\n ) {\n define_remote_error_decoder(result as object, decode_payload);\n }\n\n return result;\n }) as AnyCallable;\n\n define_hidden_property(wrapped, \"native\", native);\n define_remote_error_decoder(wrapped as object, decode_payload);\n\n return wrapped;\n}\n\nfunction get_transport(\n dependencies?: Remote_request_dependencies,\n): Record<string, unknown> {\n return dependencies?.app?.hooks?.transport ?? {};\n}\n\nfunction stringify_remote_payload(\n arg: unknown,\n dependencies: Remote_request_dependencies,\n sort = true,\n): string {\n if (arg === undefined) {\n return \"\";\n }\n\n return dependencies.stringify_remote_arg(\n arg,\n get_transport(dependencies),\n sort,\n );\n}\n\nasync function execute_query_request<Success>(\n id: string,\n arg: unknown,\n decode_payload: Decode_remote_payload,\n dependencies: Remote_request_dependencies,\n): Promise<Success> {\n const payload = stringify_remote_payload(arg, dependencies);\n const url = `${dependencies.base}/${dependencies.app_dir}/remote/${id}${\n payload ? `?payload=${payload}` : \"\"\n }`;\n const encoded = await dependencies.remote_request(\n url,\n dependencies.get_remote_request_headers(),\n );\n\n return decode_payload<Success>(encoded);\n}\n\nasync function execute_query_batch_request<Success>(\n id: string,\n arg: unknown,\n decode_payload: Decode_remote_payload,\n dependencies: Remote_request_dependencies,\n): Promise<Success> {\n const payload = stringify_remote_payload(arg, dependencies);\n const response = await fetch(\n `${dependencies.base}/${dependencies.app_dir}/remote/${id}`,\n {\n method: \"POST\",\n body: JSON.stringify({\n payloads: [payload],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n ...dependencies.get_remote_request_headers(),\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to execute batch query\");\n }\n\n const result = await response.json() as {\n readonly type: string;\n readonly result?: string;\n readonly status?: number;\n readonly error?: unknown;\n readonly location?: string;\n };\n\n if (result.type === \"error\") {\n throw {\n body: result.error,\n status: result.status ?? 500,\n };\n }\n\n if (result.type === \"redirect\") {\n throw {\n location: result.location,\n status: 307,\n };\n }\n\n const entries = decode_payload<\n Array<{\n readonly data?: Success;\n readonly error?: unknown;\n readonly status?: number;\n readonly type: string;\n }>\n >(result.result ?? \"\");\n const first = entries[0];\n\n if (!first) {\n throw new Error(\"Batch query returned no entries.\");\n }\n\n if (first.type === \"error\") {\n throw {\n body: first.error,\n status: first.status ?? 500,\n };\n }\n\n return first.data as Success;\n}\n\nasync function execute_prerender_request<Success>(\n id: string,\n arg: unknown,\n decode_payload: Decode_remote_payload,\n dependencies: Remote_request_dependencies,\n): Promise<Success> {\n const payload = stringify_remote_payload(arg, dependencies);\n const url = `${dependencies.base}/${dependencies.app_dir}/remote/${id}${\n payload ? `/${payload}` : \"\"\n }`;\n const encoded = await dependencies.remote_request(\n url,\n dependencies.get_remote_request_headers(),\n );\n\n return decode_payload<Success>(encoded);\n}\n\nfunction create_query_request<Success>(\n mode: Query_adapter_mode,\n id: string,\n arg: unknown,\n decode_payload: Decode_remote_payload,\n dependencies?: Remote_request_dependencies,\n native_with_decoder?: AnyCallable,\n): Promise<Success> {\n if (!dependencies || !native_with_decoder) {\n return Promise.resolve(native_with_decoder?.(arg) as Success);\n }\n\n switch (mode) {\n case \"query\":\n return execute_query_request<Success>(\n id,\n arg,\n decode_payload,\n dependencies,\n );\n case \"query_batch\":\n return execute_query_batch_request<Success>(\n id,\n arg,\n decode_payload,\n dependencies,\n );\n case \"prerender\":\n return execute_prerender_request<Success>(\n id,\n arg,\n decode_payload,\n dependencies,\n );\n }\n}\n\nasync function execute_command_request<Success>(\n id: string,\n arg: unknown,\n decode_payload: Decode_remote_payload,\n dependencies: Remote_request_dependencies,\n): Promise<Success> {\n const response = await fetch(\n `${dependencies.base}/${dependencies.app_dir}/remote/${id}`,\n {\n method: \"POST\",\n body: JSON.stringify({\n payload: stringify_remote_payload(arg, dependencies, false),\n refreshes: [],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n ...dependencies.get_remote_request_headers(),\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to execute remote command\");\n }\n\n const result = await response.json() as {\n readonly type: string;\n readonly result?: string;\n readonly status?: number;\n readonly error?: unknown;\n readonly refreshes?: string;\n };\n\n if (result.type === \"error\") {\n throw {\n body: result.error,\n status: result.status ?? 500,\n };\n }\n\n if (result.type === \"redirect\") {\n throw new Error(\n \"Redirects are not allowed in commands. Return a result instead and use goto on the client.\",\n );\n }\n\n if (result.refreshes) {\n dependencies.apply_refreshes?.(result.refreshes);\n }\n\n return decode_payload<Success>(result.result ?? \"\");\n}\n\nexport function create_remote_query_adapter(\n native_query_factory: (id: string) => AnyCallable,\n decode_payload: Decode_remote_payload,\n dependencies?: Remote_request_dependencies,\n mode: Query_adapter_mode = \"query\",\n) {\n return (id: string) => {\n const native = native_query_factory(id);\n const native_with_decoder = create_decoded_native_callable(\n native,\n decode_payload,\n );\n const wrapped = ((arg?: unknown) =>\n create_effect_call(\n () =>\n create_query_request(\n mode,\n id,\n arg,\n decode_payload,\n dependencies,\n native_with_decoder,\n ),\n decode_payload,\n )) as AnyCallable;\n\n define_hidden_property(wrapped, \"native\", native_with_decoder);\n\n return wrapped;\n };\n}\n\nexport function create_remote_command_adapter(\n native_command_factory: (id: string) => AnyCallable,\n decode_payload: Decode_remote_payload,\n dependencies?: Remote_request_dependencies,\n) {\n return (id: string) => {\n const native = native_command_factory(id);\n const native_with_decoder = create_decoded_native_callable(\n native,\n decode_payload,\n );\n let local_pending = 0;\n const wrapped = ((arg?: unknown) =>\n create_effect_call(\n async () => {\n local_pending += 1;\n\n try {\n if (!dependencies) {\n return await Promise.resolve(native_with_decoder(arg));\n }\n\n return await execute_command_request(\n id,\n arg,\n decode_payload,\n dependencies,\n );\n } finally {\n local_pending -= 1;\n }\n },\n decode_payload,\n )) as AnyCallable;\n\n define_hidden_property(wrapped, \"native\", native_with_decoder);\n Object.defineProperty(wrapped, \"pending\", {\n get: () =>\n ((native as { pending?: number }).pending ?? 0) + local_pending,\n });\n\n return wrapped;\n };\n}\n\nfunction normalize_form_issues(issues: unknown): ReadonlyArray<FormIssue> {\n if (!Array.isArray(issues)) {\n return [];\n }\n\n return issues.flatMap((issue) =>\n is_remote_validation_issue(issue)\n ? [{\n message: issue.message,\n path: [...issue.path],\n }]\n : []\n );\n}\n\nfunction get_root_form_issues(\n native: {\n readonly fields?: {\n readonly allIssues?: unknown;\n };\n },\n): ReadonlyArray<FormIssue> {\n return normalize_form_issues(native.fields?.allIssues);\n}\n\nfunction get_attachment(\n value: Record<string | symbol, unknown>,\n): (form: HTMLFormElement) => void | (() => void) {\n for (const symbol of Object.getOwnPropertySymbols(value)) {\n const candidate = value[symbol];\n\n if (typeof candidate === \"function\") {\n return candidate as (form: HTMLFormElement) => void | (() => void);\n }\n }\n\n throw new Error(\n \"Failed to find the Svelte attachment for the remote form enhancement.\",\n );\n}\n\nfunction build_form_field_name(path: ReadonlyArray<string | number>): string {\n let name = \"\";\n\n for (const segment of path) {\n if (typeof segment === \"number\") {\n name += `[${segment}]`;\n continue;\n }\n\n name += name === \"\" ? segment : `.${segment}`;\n }\n\n return name;\n}\n\nfunction append_hidden_input(\n form: HTMLFormElement,\n name: string,\n value: string,\n): void {\n const input = document.createElement(\"input\");\n input.type = \"hidden\";\n input.name = name;\n input.value = value;\n form.append(input);\n}\n\nfunction append_file_input(\n form: HTMLFormElement,\n name: string,\n value: File,\n): void {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.name = name;\n\n if (typeof DataTransfer === \"function\") {\n const transfer = new DataTransfer();\n transfer.items.add(value);\n\n try {\n input.files = transfer.files;\n } catch {\n // ignore and fall back below\n }\n }\n\n if (input.files?.length) {\n form.append(input);\n return;\n }\n\n append_hidden_input(form, name, value.name);\n}\n\nfunction append_form_value(\n form: HTMLFormElement,\n value: unknown,\n path: ReadonlyArray<string | number>,\n): void {\n if (value === undefined) {\n return;\n }\n\n if (value instanceof File) {\n append_file_input(form, build_form_field_name(path), value);\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((entry, index) => {\n append_form_value(form, entry, [...path, index]);\n });\n return;\n }\n\n if (value && typeof value === \"object\") {\n for (\n const [key, entry] of Object.entries(value as Record<string, unknown>)\n ) {\n append_form_value(form, entry, [...path, key]);\n }\n return;\n }\n\n const base_name = build_form_field_name(path);\n\n if (typeof value === \"number\") {\n append_hidden_input(form, `n:${base_name}`, String(value));\n return;\n }\n\n if (typeof value === \"boolean\") {\n append_hidden_input(form, `b:${base_name}`, value ? \"on\" : \"\");\n return;\n }\n\n append_hidden_input(\n form,\n base_name,\n value === null ? \"\" : String(value),\n );\n}\n\nfunction apply_input_to_fields(fields: unknown, input: unknown): void {\n if (!fields || typeof fields !== \"object\") {\n return;\n }\n\n const maybe_field = fields as {\n readonly set?: (value: unknown) => void;\n };\n\n if (typeof maybe_field.set === \"function\") {\n maybe_field.set(input);\n return;\n }\n\n if (!input || typeof input !== \"object\") {\n return;\n }\n\n for (const [key, value] of Object.entries(input as Record<string, unknown>)) {\n apply_input_to_fields(\n (fields as Record<string, unknown>)[key],\n value,\n );\n }\n}\n\ntype Submitter_like = {\n click(): void;\n} & Record<string, unknown>;\n\nfunction is_submitter_like(value: unknown): value is Submitter_like {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n typeof (value as { click?: unknown }).click === \"function\",\n );\n}\n\nfunction get_submitter(\n form: HTMLFormElement,\n): Submitter_like | undefined {\n const submitter = form.querySelector(\"button:not([type]), [type='submit']\");\n return is_submitter_like(submitter) ? submitter : undefined;\n}\n\nfunction request_form_submit(form: HTMLFormElement): void {\n const submitter = get_submitter(form);\n log_remote_client_step(\"request_form_submit\", {\n action: form.action,\n has_submitter: Boolean(submitter),\n submitter,\n });\n\n if (typeof SubmitEvent === \"function\") {\n form.dispatchEvent(\n new SubmitEvent(\"submit\", {\n bubbles: true,\n cancelable: true,\n submitter: submitter as HTMLElement | null | undefined,\n }),\n );\n return;\n }\n\n const event = new Event(\"submit\", {\n bubbles: true,\n cancelable: true,\n }) as Event & {\n readonly submitter?: Submitter_like;\n };\n Object.defineProperty(event, \"submitter\", {\n configurable: true,\n value: submitter,\n });\n form.dispatchEvent(event);\n}\n\nasync function wait_for_pending_settle(\n native: {\n readonly pending?: number;\n },\n): Promise<void> {\n await tick();\n\n while ((native.pending ?? 0) > 0) {\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n\n await tick();\n}\n\nasync function submit_attached_form<Success, ErrorType>(\n form: {\n readonly native: {\n readonly fields?: {\n readonly allIssues?: unknown;\n } & Record<string, unknown>;\n readonly pending?: number;\n readonly result?: Success;\n };\n },\n element: HTMLFormElement,\n input: unknown,\n): Promise<Effect.Effect<Success, RemoteFailure<ErrorType>, never>> {\n log_remote_client_step(\"submit_attached_form:start\", {\n action: element.action,\n input,\n });\n\n if (input !== undefined) {\n apply_input_to_fields(form.native.fields, input);\n }\n\n await tick();\n request_form_submit(element);\n await wait_for_pending_settle(form.native);\n\n const issues = get_root_form_issues(form.native);\n log_remote_client_step(\"submit_attached_form:after_submit\", {\n issues,\n pending: form.native.pending ?? 0,\n result: form.native.result,\n });\n\n if (issues.length > 0) {\n return Effect.fail(\n create_remote_validation_error(issues, {\n body: issues,\n status: 400,\n }),\n );\n }\n\n return Effect.succeed(form.native.result as Success);\n}\n\nfunction create_form_submit_effect<Success, ErrorType>(\n form: {\n readonly native: {\n readonly action: string;\n readonly result?: Success;\n readonly fields?: {\n readonly allIssues?: unknown;\n };\n enhance(\n callback: (args: {\n readonly form: HTMLFormElement;\n readonly data: unknown;\n readonly submit: () => Promise<unknown>;\n }) => Promise<void> | void,\n ): Record<string | symbol, unknown>;\n };\n },\n input: unknown,\n decode_payload: Decode_remote_payload,\n attached_form_tracker: Attached_form_tracker,\n _dependencies: Form_request_dependencies,\n): Effect.Effect<Success, RemoteFailure<ErrorType>, never> {\n return create_async_effect<Success, RemoteFailure<ErrorType>>((resume) => {\n log_remote_client_step(\"create_form_submit_effect:start\", {\n action: form.native.action,\n input,\n attached: Boolean(attached_form_tracker.current),\n });\n\n if (typeof document === \"undefined\") {\n resume(\n Effect.fail(\n create_remote_http_error(\n new Error(\"Programmatic remote form submission requires a DOM.\"),\n ),\n ),\n );\n return;\n }\n\n let settled = false;\n let dispose_attachment: void | (() => void);\n const temp_form = document.createElement(\"form\");\n temp_form.method = \"POST\";\n temp_form.action = form.native.action;\n temp_form.hidden = true;\n document.body.append(temp_form);\n\n const cleanup = () => {\n if (typeof dispose_attachment === \"function\") {\n dispose_attachment();\n }\n\n temp_form.remove();\n };\n\n const finish = (\n effect: Effect.Effect<Success, RemoteFailure<ErrorType>, never>,\n ) => {\n if (settled) {\n return;\n }\n\n settled = true;\n cleanup();\n resume(effect);\n };\n\n try {\n const attached_form = attached_form_tracker.current;\n\n if (attached_form) {\n log_remote_client_step(\n \"create_form_submit_effect:attached_form_branch\",\n {\n action: attached_form.action,\n },\n );\n void submit_attached_form<Success, ErrorType>(\n form,\n attached_form,\n input,\n ).then(finish, (error) => {\n finish(\n Effect.fail(decode_remote_error<ErrorType>(error, decode_payload)),\n );\n });\n return;\n }\n\n log_remote_client_step(\n \"create_form_submit_effect:detached_fallback_branch\",\n {\n action: form.native.action,\n },\n );\n const enhanced = form.native.enhance(async ({ submit }) => {\n try {\n log_remote_client_step(\n \"create_form_submit_effect:fallback_submit:start\",\n {\n action: form.native.action,\n },\n );\n await submit();\n const issues = get_root_form_issues(form.native);\n log_remote_client_step(\n \"create_form_submit_effect:fallback_submit:after\",\n {\n issues,\n result: form.native.result,\n },\n );\n\n if (issues.length > 0) {\n finish(\n Effect.fail(\n create_remote_validation_error(issues, {\n body: issues,\n status: 400,\n }),\n ),\n );\n return;\n }\n\n finish(Effect.succeed(form.native.result as Success));\n } catch (error) {\n if (is_redirect_like(error)) {\n finish(Effect.die(error));\n return;\n }\n\n finish(\n Effect.fail(decode_remote_error<ErrorType>(error, decode_payload)),\n );\n }\n });\n\n dispose_attachment = get_attachment(enhanced)(temp_form);\n\n if (input && typeof input === \"object\") {\n append_form_value(temp_form, input, []);\n }\n\n const submitter = document.createElement(\"button\");\n submitter.type = \"submit\";\n temp_form.append(submitter);\n if (typeof temp_form.requestSubmit === \"function\") {\n temp_form.requestSubmit(submitter);\n } else {\n submitter.click();\n }\n } catch (error) {\n log_remote_client_step(\"create_form_submit_effect:error\", {\n error,\n });\n finish(\n Effect.fail(decode_remote_error<ErrorType>(error, decode_payload)),\n );\n }\n });\n}\n\nfunction wrap_attachment(\n native_attachment: (element: HTMLFormElement) => void | (() => void),\n native: Record<string, unknown>,\n tracker: Attached_form_tracker,\n): (element: HTMLFormElement) => () => void {\n return (element: HTMLFormElement) => {\n log_remote_client_step(\"wrap_native_form:attach\", {\n action: element.action,\n native_action: (native as { action?: unknown }).action,\n });\n tracker.current = element;\n const cleanup = native_attachment.call(native, element);\n\n return () => {\n log_remote_client_step(\"wrap_native_form:detach\", {\n action: element.action,\n });\n if (tracker.current === element) {\n tracker.current = null;\n }\n\n if (typeof cleanup === \"function\") {\n cleanup();\n }\n };\n };\n}\n\nfunction copy_native_descriptors(\n source: Record<string | symbol, unknown>,\n target: Record<string | symbol, unknown>,\n options: {\n readonly native: Record<string, unknown>;\n readonly tracker: Attached_form_tracker;\n readonly wrap_for?: (key: string | number) => Record<string, unknown>;\n readonly wrap_enhance?: (\n callback: (args: {\n readonly form: HTMLFormElement;\n readonly data: unknown;\n readonly submit: () => Promise<unknown>;\n }) => Promise<void> | void,\n ) => Record<string | symbol, unknown>;\n },\n): void {\n for (const key of Reflect.ownKeys(source)) {\n const descriptor = Object.getOwnPropertyDescriptor(source, key);\n if (!descriptor) {\n continue;\n }\n\n if (\n key === \"for\" &&\n typeof descriptor.value === \"function\" &&\n options.wrap_for\n ) {\n Object.defineProperty(target, key, {\n configurable: descriptor.configurable ?? true,\n enumerable: descriptor.enumerable ?? false,\n writable: descriptor.writable ?? false,\n value: options.wrap_for,\n });\n continue;\n }\n\n if (\n key === \"enhance\" &&\n typeof descriptor.value === \"function\" &&\n options.wrap_enhance\n ) {\n Object.defineProperty(target, key, {\n configurable: descriptor.configurable ?? true,\n enumerable: descriptor.enumerable ?? false,\n writable: descriptor.writable ?? false,\n value: options.wrap_enhance,\n });\n continue;\n }\n\n if (typeof key === \"symbol\" && typeof descriptor.value === \"function\") {\n Object.defineProperty(target, key, {\n configurable: descriptor.configurable ?? true,\n enumerable: descriptor.enumerable ?? true,\n writable: descriptor.writable ?? true,\n value: wrap_attachment(\n descriptor.value as (\n element: HTMLFormElement,\n ) => void | (() => void),\n options.native,\n options.tracker,\n ),\n });\n continue;\n }\n\n Object.defineProperty(target, key, descriptor);\n }\n}\n\nfunction wrap_enhanced(\n enhanced: Record<string | symbol, unknown>,\n native: Record<string, unknown>,\n tracker: Attached_form_tracker,\n): Record<string | symbol, unknown> {\n const wrapped: Record<string | symbol, unknown> = {};\n copy_native_descriptors(enhanced, wrapped, { native, tracker });\n return wrapped;\n}\n\nfunction wrap_native_form(\n native: Record<string, unknown>,\n decode_payload: Decode_remote_payload,\n dependencies: Form_request_dependencies,\n): Record<string | symbol, unknown> {\n const tracker: Attached_form_tracker = { current: null };\n const wrapped: Record<string | symbol, unknown> = {};\n\n copy_native_descriptors(\n native as Record<string | symbol, unknown>,\n wrapped,\n {\n native,\n tracker,\n wrap_for: (key: string | number) => {\n const native_for = (native as { for?: unknown }).for;\n if (typeof native_for !== \"function\") {\n throw new Error(\n \"Underlying SvelteKit form does not expose a `for` method.\",\n );\n }\n return wrap_native_form(\n (native_for as (key: string | number) => Record<string, unknown>)\n .call(native, key),\n decode_payload,\n dependencies,\n ) as Record<string, unknown>;\n },\n wrap_enhance: (callback) => {\n const native_enhance = (native as { enhance?: unknown }).enhance;\n if (typeof native_enhance !== \"function\") {\n throw new Error(\n \"Underlying SvelteKit form does not expose an `enhance` method.\",\n );\n }\n const enhanced = (native_enhance as (\n cb: typeof callback,\n ) => Record<string | symbol, unknown>).call(native, callback);\n return wrap_enhanced(enhanced, native, tracker);\n },\n },\n );\n\n Object.defineProperty(wrapped, \"native\", {\n configurable: true,\n enumerable: false,\n value: native,\n writable: false,\n });\n\n Object.defineProperty(wrapped, \"submit\", {\n configurable: true,\n enumerable: false,\n writable: false,\n value: (input: unknown) =>\n create_form_submit_effect(\n wrapped as {\n readonly native: {\n readonly action: string;\n readonly result?: unknown;\n readonly fields?: {\n readonly allIssues?: unknown;\n };\n enhance(\n callback: (args: {\n readonly form: HTMLFormElement;\n readonly data: unknown;\n readonly submit: () => Promise<unknown>;\n }) => Promise<void> | void,\n ): Record<string | symbol, unknown>;\n };\n },\n input,\n decode_payload,\n tracker,\n dependencies,\n ),\n });\n\n define_remote_error_decoder(wrapped, decode_payload);\n\n return wrapped;\n}\n\nexport function create_remote_form_adapter(\n native_form_factory: (id: string) => Record<string, unknown>,\n decode_payload: Decode_remote_payload,\n dependencies: Form_request_dependencies,\n) {\n return (id: string) => {\n const native = native_form_factory(id);\n return wrap_native_form(native, decode_payload, dependencies);\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"remote-client.js","names":[],"sources":["../../../modules/svelte-effect-runtime/internal/remote-client.ts"],"sourcesContent":["import { Effect } from \"effect\";\nimport { tick } from \"svelte\";\nimport { create_remote_effect_from_promise } from \"$/client.ts\";\nimport { create_async_effect } from \"$internal/effect-compat.ts\";\nimport {\n create_remote_http_error,\n create_remote_transport_error,\n create_remote_validation_error,\n type FormIssue,\n is_remote_validation_issue,\n is_serialized_remote_failure_envelope,\n REMOTE_ERROR_DECODER,\n type RemoteFailure,\n} from \"$internal/remote-shared.ts\";\n\ntype AnyCallable = (...args: Array<unknown>) => unknown;\n\ntype Decode_remote_payload = <ErrorType = unknown>(\n encoded: string,\n) => ErrorType;\n\ninterface HttpErrorLike {\n readonly body?: unknown;\n readonly status?: number;\n}\n\ninterface RedirectLike {\n readonly location: string;\n readonly status: number;\n}\n\ninterface Remote_request_dependencies {\n readonly app?: {\n readonly decoders?: Record<string, unknown>;\n readonly hooks?: {\n readonly transport?: Record<string, unknown>;\n };\n };\n readonly app_dir: string;\n readonly apply_refreshes?: (value: string) => void;\n readonly base: string;\n readonly get_remote_request_headers: () => HeadersInit;\n readonly remote_request: (\n url: string,\n headers: HeadersInit,\n ) => Promise<string>;\n readonly stringify_remote_arg: (\n value: unknown,\n transport: unknown,\n sort?: boolean,\n ) => string;\n}\n\ntype Query_adapter_mode = \"query\" | \"query_batch\" | \"prerender\";\n\ntype Form_request_dependencies = Remote_request_dependencies & {\n readonly app: {\n readonly decoders?: Record<string, unknown>;\n readonly encoders?: Record<string, unknown>;\n };\n readonly app_dir: string;\n readonly apply_refreshes: (value: string) => void;\n readonly base: string;\n readonly binary_form_content_type: string;\n readonly goto: (url: string, options?: unknown, code?: number) => void;\n readonly invalidate_all: () => Promise<void> | void;\n readonly serialize_binary_form: (\n data: unknown,\n meta: Record<string, unknown>,\n ) => {\n readonly blob: Blob;\n };\n};\n\ninterface Attached_form_tracker {\n current: HTMLFormElement | null;\n}\n\nfunction is_development_environment(): boolean {\n const vite_environment = (\n import.meta as ImportMeta & {\n env?: {\n DEV?: boolean;\n };\n }\n ).env;\n\n if (typeof vite_environment?.DEV === \"boolean\") {\n return vite_environment.DEV;\n }\n\n const node_process = (globalThis as typeof globalThis & {\n process?: {\n env?: {\n DEV?: string;\n NODE_ENV?: string;\n SVELTE_EFFECT_RUNTIME_DEBUG?: string;\n };\n };\n }).process;\n\n return (\n node_process?.env?.SVELTE_EFFECT_RUNTIME_DEBUG === \"1\" ||\n node_process?.env?.DEV === \"1\" ||\n node_process?.env?.NODE_ENV === \"development\"\n );\n}\n\nconst ENABLE_REMOTE_CLIENT_DEBUG_LOGS = is_development_environment();\n\nfunction log_remote_client_step(\n step: string,\n details?: Record<string, unknown>,\n): void {\n if (!ENABLE_REMOTE_CLIENT_DEBUG_LOGS) {\n return;\n }\n\n console.log(\"[svelte-effect-runtime][remote-client]\", step, details ?? {});\n}\n\nfunction define_hidden_property<Value extends object, Property>(\n value: Value,\n key: string | symbol,\n property: Property,\n): Value {\n Object.defineProperty(value, key, {\n value: property,\n enumerable: false,\n });\n\n return value;\n}\n\nfunction define_remote_error_decoder<Value extends object>(\n value: Value,\n decode_payload: Decode_remote_payload,\n): Value {\n return define_hidden_property(value, REMOTE_ERROR_DECODER, decode_payload);\n}\n\nfunction is_http_error_like(value: unknown): value is HttpErrorLike {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n typeof (value as { status?: unknown }).status === \"number\",\n );\n}\n\nfunction is_redirect_like(value: unknown): value is RedirectLike {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n typeof (value as { location?: unknown }).location === \"string\" &&\n typeof (value as { status?: unknown }).status === \"number\",\n );\n}\n\nfunction get_error_status(value: unknown): number {\n return is_http_error_like(value) ? value.status ?? 500 : 500;\n}\n\nfunction decode_remote_error<ErrorType>(\n error: unknown,\n decode_payload: Decode_remote_payload,\n): RemoteFailure<ErrorType> {\n log_remote_client_step(\"decode_remote_error:start\", {\n error,\n });\n\n if (is_http_error_like(error)) {\n const body = error.body;\n\n if (is_serialized_remote_failure_envelope(body)) {\n try {\n return decode_payload<ErrorType>(\n body.encoded,\n ) as RemoteFailure<ErrorType>;\n } catch (cause) {\n return create_remote_transport_error(cause, body);\n }\n }\n\n if (get_error_status(error) === 400) {\n return create_remote_validation_error([], {\n body,\n status: 400,\n });\n }\n\n return create_remote_http_error(error, {\n body,\n status: get_error_status(error),\n });\n }\n\n const decoded = create_remote_http_error(error);\n log_remote_client_step(\"decode_remote_error:http_error\", {\n decoded,\n });\n return decoded;\n}\n\nfunction create_effect_call<Success, ErrorType>(\n create_promise: () => PromiseLike<Success>,\n decode_payload: Decode_remote_payload,\n): Effect.Effect<Success, RemoteFailure<ErrorType>, never> {\n return create_remote_effect_from_promise<Success, ErrorType>(\n () => {\n log_remote_client_step(\"create_effect_call:start\");\n return create_promise();\n },\n (error) => decode_remote_error<ErrorType>(error, decode_payload),\n );\n}\n\nfunction create_decoded_native_callable(\n native: AnyCallable,\n decode_payload: Decode_remote_payload,\n): AnyCallable {\n const wrapped = ((...args: Array<unknown>) => {\n const result = native(...args);\n\n if (\n result && (typeof result === \"object\" || typeof result === \"function\")\n ) {\n define_remote_error_decoder(result as object, decode_payload);\n }\n\n return result;\n }) as AnyCallable;\n\n define_hidden_property(wrapped, \"native\", native);\n define_remote_error_decoder(wrapped as object, decode_payload);\n\n return wrapped;\n}\n\nfunction get_transport(\n dependencies?: Remote_request_dependencies,\n): Record<string, unknown> {\n return dependencies?.app?.hooks?.transport ?? {};\n}\n\nfunction stringify_remote_payload(\n arg: unknown,\n dependencies: Remote_request_dependencies,\n sort = true,\n): string {\n if (arg === undefined) {\n return \"\";\n }\n\n return dependencies.stringify_remote_arg(\n arg,\n get_transport(dependencies),\n sort,\n );\n}\n\nasync function execute_query_request<Success>(\n id: string,\n arg: unknown,\n decode_payload: Decode_remote_payload,\n dependencies: Remote_request_dependencies,\n): Promise<Success> {\n const payload = stringify_remote_payload(arg, dependencies);\n const url = `${dependencies.base}/${dependencies.app_dir}/remote/${id}${\n payload ? `?payload=${payload}` : \"\"\n }`;\n const encoded = await dependencies.remote_request(\n url,\n dependencies.get_remote_request_headers(),\n );\n\n return decode_payload<Success>(encoded);\n}\n\nasync function execute_query_batch_request<Success>(\n id: string,\n arg: unknown,\n decode_payload: Decode_remote_payload,\n dependencies: Remote_request_dependencies,\n): Promise<Success> {\n const payload = stringify_remote_payload(arg, dependencies);\n const response = await fetch(\n `${dependencies.base}/${dependencies.app_dir}/remote/${id}`,\n {\n method: \"POST\",\n body: JSON.stringify({\n payloads: [payload],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n ...dependencies.get_remote_request_headers(),\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to execute batch query\");\n }\n\n const result = await response.json() as {\n readonly type: string;\n readonly result?: string;\n readonly status?: number;\n readonly error?: unknown;\n readonly location?: string;\n };\n\n if (result.type === \"error\") {\n throw {\n body: result.error,\n status: result.status ?? 500,\n };\n }\n\n if (result.type === \"redirect\") {\n throw {\n location: result.location,\n status: 307,\n };\n }\n\n const entries = decode_payload<\n Array<{\n readonly data?: Success;\n readonly error?: unknown;\n readonly status?: number;\n readonly type: string;\n }>\n >(result.result ?? \"\");\n const first = entries[0];\n\n if (!first) {\n throw new Error(\"Batch query returned no entries.\");\n }\n\n if (first.type === \"error\") {\n throw {\n body: first.error,\n status: first.status ?? 500,\n };\n }\n\n return first.data as Success;\n}\n\nasync function execute_prerender_request<Success>(\n id: string,\n arg: unknown,\n decode_payload: Decode_remote_payload,\n dependencies: Remote_request_dependencies,\n): Promise<Success> {\n const payload = stringify_remote_payload(arg, dependencies);\n const url = `${dependencies.base}/${dependencies.app_dir}/remote/${id}${\n payload ? `/${payload}` : \"\"\n }`;\n const encoded = await dependencies.remote_request(\n url,\n dependencies.get_remote_request_headers(),\n );\n\n return decode_payload<Success>(encoded);\n}\n\nfunction create_query_request<Success>(\n mode: Query_adapter_mode,\n id: string,\n arg: unknown,\n decode_payload: Decode_remote_payload,\n dependencies?: Remote_request_dependencies,\n native_with_decoder?: AnyCallable,\n): Promise<Success> {\n if (!dependencies || !native_with_decoder) {\n return Promise.resolve(native_with_decoder?.(arg) as Success);\n }\n\n switch (mode) {\n case \"query\":\n return execute_query_request<Success>(\n id,\n arg,\n decode_payload,\n dependencies,\n );\n case \"query_batch\":\n return execute_query_batch_request<Success>(\n id,\n arg,\n decode_payload,\n dependencies,\n );\n case \"prerender\":\n return execute_prerender_request<Success>(\n id,\n arg,\n decode_payload,\n dependencies,\n );\n }\n}\n\nasync function execute_command_request<Success>(\n id: string,\n arg: unknown,\n decode_payload: Decode_remote_payload,\n dependencies: Remote_request_dependencies,\n): Promise<Success> {\n const response = await fetch(\n `${dependencies.base}/${dependencies.app_dir}/remote/${id}`,\n {\n method: \"POST\",\n body: JSON.stringify({\n payload: stringify_remote_payload(arg, dependencies, false),\n refreshes: [],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n ...dependencies.get_remote_request_headers(),\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to execute remote command\");\n }\n\n const result = await response.json() as {\n readonly type: string;\n readonly result?: string;\n readonly status?: number;\n readonly error?: unknown;\n readonly refreshes?: string;\n };\n\n if (result.type === \"error\") {\n throw {\n body: result.error,\n status: result.status ?? 500,\n };\n }\n\n if (result.type === \"redirect\") {\n throw new Error(\n \"Redirects are not allowed in commands. Return a result instead and use goto on the client.\",\n );\n }\n\n if (result.refreshes) {\n dependencies.apply_refreshes?.(result.refreshes);\n }\n\n return decode_payload<Success>(result.result ?? \"\");\n}\n\nexport function create_remote_query_adapter(\n native_query_factory: (id: string) => AnyCallable,\n decode_payload: Decode_remote_payload,\n dependencies?: Remote_request_dependencies,\n mode: Query_adapter_mode = \"query\",\n) {\n return (id: string) => {\n const native = native_query_factory(id);\n const native_with_decoder = create_decoded_native_callable(\n native,\n decode_payload,\n );\n const wrapped = ((arg?: unknown) =>\n create_effect_call(\n () =>\n create_query_request(\n mode,\n id,\n arg,\n decode_payload,\n dependencies,\n native_with_decoder,\n ),\n decode_payload,\n )) as AnyCallable;\n\n define_hidden_property(wrapped, \"native\", native_with_decoder);\n\n return wrapped;\n };\n}\n\nexport function create_remote_command_adapter(\n native_command_factory: (id: string) => AnyCallable,\n decode_payload: Decode_remote_payload,\n dependencies?: Remote_request_dependencies,\n) {\n return (id: string) => {\n const native = native_command_factory(id);\n const native_with_decoder = create_decoded_native_callable(\n native,\n decode_payload,\n );\n let local_pending = 0;\n const wrapped = ((arg?: unknown) =>\n create_effect_call(\n async () => {\n local_pending += 1;\n\n try {\n if (!dependencies) {\n return await Promise.resolve(native_with_decoder(arg));\n }\n\n return await execute_command_request(\n id,\n arg,\n decode_payload,\n dependencies,\n );\n } finally {\n local_pending -= 1;\n }\n },\n decode_payload,\n )) as AnyCallable;\n\n define_hidden_property(wrapped, \"native\", native_with_decoder);\n Object.defineProperty(wrapped, \"pending\", {\n get: () =>\n ((native as { pending?: number }).pending ?? 0) + local_pending,\n });\n\n return wrapped;\n };\n}\n\nfunction normalize_form_issues(issues: unknown): ReadonlyArray<FormIssue> {\n if (!Array.isArray(issues)) {\n return [];\n }\n\n return issues.flatMap((issue) =>\n is_remote_validation_issue(issue)\n ? [{\n message: issue.message,\n path: [...issue.path],\n }]\n : []\n );\n}\n\nfunction get_root_form_issues(\n native: {\n readonly fields?: {\n readonly allIssues?: unknown;\n };\n },\n): ReadonlyArray<FormIssue> {\n return normalize_form_issues(native.fields?.allIssues);\n}\n\nfunction get_attachment(\n value: Record<string | symbol, unknown>,\n): (form: HTMLFormElement) => void | (() => void) {\n for (const symbol of Object.getOwnPropertySymbols(value)) {\n const candidate = value[symbol];\n\n if (typeof candidate === \"function\") {\n return candidate as (form: HTMLFormElement) => void | (() => void);\n }\n }\n\n throw new Error(\n \"Failed to find the Svelte attachment for the remote form enhancement.\",\n );\n}\n\nfunction build_form_field_name(path: ReadonlyArray<string | number>): string {\n let name = \"\";\n\n for (const segment of path) {\n if (typeof segment === \"number\") {\n name += `[${segment}]`;\n continue;\n }\n\n name += name === \"\" ? segment : `.${segment}`;\n }\n\n return name;\n}\n\nfunction append_hidden_input(\n form: HTMLFormElement,\n name: string,\n value: string,\n): void {\n const input = document.createElement(\"input\");\n input.type = \"hidden\";\n input.name = name;\n input.value = value;\n form.append(input);\n}\n\nfunction append_file_input(\n form: HTMLFormElement,\n name: string,\n value: File,\n): void {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.name = name;\n\n if (typeof DataTransfer === \"function\") {\n const transfer = new DataTransfer();\n transfer.items.add(value);\n\n try {\n input.files = transfer.files;\n } catch {\n // ignore and fall back below\n }\n }\n\n if (input.files?.length) {\n form.append(input);\n return;\n }\n\n append_hidden_input(form, name, value.name);\n}\n\nfunction append_form_value(\n form: HTMLFormElement,\n value: unknown,\n path: ReadonlyArray<string | number>,\n): void {\n if (value === undefined) {\n return;\n }\n\n if (value instanceof File) {\n append_file_input(form, build_form_field_name(path), value);\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((entry, index) => {\n append_form_value(form, entry, [...path, index]);\n });\n return;\n }\n\n if (value && typeof value === \"object\") {\n for (\n const [key, entry] of Object.entries(value as Record<string, unknown>)\n ) {\n append_form_value(form, entry, [...path, key]);\n }\n return;\n }\n\n const base_name = build_form_field_name(path);\n\n if (typeof value === \"number\") {\n append_hidden_input(form, `n:${base_name}`, String(value));\n return;\n }\n\n if (typeof value === \"boolean\") {\n append_hidden_input(form, `b:${base_name}`, value ? \"on\" : \"\");\n return;\n }\n\n append_hidden_input(\n form,\n base_name,\n value === null ? \"\" : String(value),\n );\n}\n\nfunction apply_input_to_fields(fields: unknown, input: unknown): void {\n if (!fields || typeof fields !== \"object\") {\n return;\n }\n\n const maybe_field = fields as {\n readonly set?: (value: unknown) => void;\n };\n\n if (typeof maybe_field.set === \"function\") {\n maybe_field.set(input);\n return;\n }\n\n if (!input || typeof input !== \"object\") {\n return;\n }\n\n for (const [key, value] of Object.entries(input as Record<string, unknown>)) {\n apply_input_to_fields(\n (fields as Record<string, unknown>)[key],\n value,\n );\n }\n}\n\ntype Submitter_like = {\n click(): void;\n} & Record<string, unknown>;\n\nfunction is_submitter_like(value: unknown): value is Submitter_like {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n typeof (value as { click?: unknown }).click === \"function\",\n );\n}\n\nfunction get_submitter(\n form: HTMLFormElement,\n): Submitter_like | undefined {\n const submitter = form.querySelector(\"button:not([type]), [type='submit']\");\n return is_submitter_like(submitter) ? submitter : undefined;\n}\n\nfunction request_form_submit(form: HTMLFormElement): void {\n const submitter = get_submitter(form);\n log_remote_client_step(\"request_form_submit\", {\n action: form.action,\n has_submitter: Boolean(submitter),\n submitter,\n });\n\n if (typeof SubmitEvent === \"function\") {\n form.dispatchEvent(\n new SubmitEvent(\"submit\", {\n bubbles: true,\n cancelable: true,\n submitter: submitter as HTMLElement | null | undefined,\n }),\n );\n return;\n }\n\n const event = new Event(\"submit\", {\n bubbles: true,\n cancelable: true,\n }) as Event & {\n readonly submitter?: Submitter_like;\n };\n Object.defineProperty(event, \"submitter\", {\n configurable: true,\n value: submitter,\n });\n form.dispatchEvent(event);\n}\n\nasync function wait_for_pending_settle(\n native: {\n readonly pending?: number;\n },\n): Promise<void> {\n await tick();\n\n while ((native.pending ?? 0) > 0) {\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n\n await tick();\n}\n\nasync function submit_attached_form<Success, ErrorType>(\n form: {\n readonly native: {\n readonly fields?: {\n readonly allIssues?: unknown;\n } & Record<string, unknown>;\n readonly pending?: number;\n readonly result?: Success;\n };\n },\n element: HTMLFormElement,\n input: unknown,\n): Promise<Effect.Effect<Success, RemoteFailure<ErrorType>, never>> {\n log_remote_client_step(\"submit_attached_form:start\", {\n action: element.action,\n input,\n });\n\n if (input !== undefined) {\n apply_input_to_fields(form.native.fields, input);\n }\n\n await tick();\n request_form_submit(element);\n await wait_for_pending_settle(form.native);\n\n const issues = get_root_form_issues(form.native);\n log_remote_client_step(\"submit_attached_form:after_submit\", {\n issues,\n pending: form.native.pending ?? 0,\n result: form.native.result,\n });\n\n if (issues.length > 0) {\n return Effect.fail(\n create_remote_validation_error(issues, {\n body: issues,\n status: 400,\n }),\n );\n }\n\n return Effect.succeed(form.native.result as Success);\n}\n\nfunction create_form_submit_effect<Success, ErrorType>(\n form: {\n readonly native: {\n readonly action: string;\n readonly result?: Success;\n readonly fields?: {\n readonly allIssues?: unknown;\n };\n enhance(\n callback: (args: {\n readonly form: HTMLFormElement;\n readonly data: unknown;\n readonly submit: () => Promise<unknown>;\n }) => Promise<void> | void,\n ): Record<string | symbol, unknown>;\n };\n },\n input: unknown,\n decode_payload: Decode_remote_payload,\n attached_form_tracker: Attached_form_tracker,\n _dependencies: Form_request_dependencies,\n): Effect.Effect<Success, RemoteFailure<ErrorType>, never> {\n return create_async_effect<Success, RemoteFailure<ErrorType>>((resume) => {\n log_remote_client_step(\"create_form_submit_effect:start\", {\n action: form.native.action,\n input,\n attached: Boolean(attached_form_tracker.current),\n });\n\n if (typeof document === \"undefined\") {\n resume(\n Effect.fail(\n create_remote_http_error(\n new Error(\"Programmatic remote form submission requires a DOM.\"),\n ),\n ),\n );\n return;\n }\n\n let settled = false;\n let dispose_attachment: void | (() => void);\n const temp_form = document.createElement(\"form\");\n temp_form.method = \"POST\";\n temp_form.action = form.native.action;\n temp_form.hidden = true;\n document.body.append(temp_form);\n\n const cleanup = () => {\n if (typeof dispose_attachment === \"function\") {\n dispose_attachment();\n }\n\n temp_form.remove();\n };\n\n const finish = (\n effect: Effect.Effect<Success, RemoteFailure<ErrorType>, never>,\n ) => {\n if (settled) {\n return;\n }\n\n settled = true;\n cleanup();\n resume(effect);\n };\n\n try {\n const attached_form = attached_form_tracker.current;\n\n if (attached_form) {\n log_remote_client_step(\n \"create_form_submit_effect:attached_form_branch\",\n {\n action: attached_form.action,\n },\n );\n void submit_attached_form<Success, ErrorType>(\n form,\n attached_form,\n input,\n ).then(finish, (error) => {\n finish(\n Effect.fail(decode_remote_error<ErrorType>(error, decode_payload)),\n );\n });\n return;\n }\n\n log_remote_client_step(\n \"create_form_submit_effect:detached_fallback_branch\",\n {\n action: form.native.action,\n },\n );\n const enhanced = form.native.enhance(async ({ submit }) => {\n try {\n log_remote_client_step(\n \"create_form_submit_effect:fallback_submit:start\",\n {\n action: form.native.action,\n },\n );\n await submit();\n const issues = get_root_form_issues(form.native);\n log_remote_client_step(\n \"create_form_submit_effect:fallback_submit:after\",\n {\n issues,\n result: form.native.result,\n },\n );\n\n if (issues.length > 0) {\n finish(\n Effect.fail(\n create_remote_validation_error(issues, {\n body: issues,\n status: 400,\n }),\n ),\n );\n return;\n }\n\n finish(Effect.succeed(form.native.result as Success));\n } catch (error) {\n if (is_redirect_like(error)) {\n finish(Effect.die(error));\n return;\n }\n\n finish(\n Effect.fail(decode_remote_error<ErrorType>(error, decode_payload)),\n );\n }\n });\n\n dispose_attachment = get_attachment(enhanced)(temp_form);\n\n if (input && typeof input === \"object\") {\n append_form_value(temp_form, input, []);\n }\n\n const submitter = document.createElement(\"button\");\n submitter.type = \"submit\";\n temp_form.append(submitter);\n if (typeof temp_form.requestSubmit === \"function\") {\n temp_form.requestSubmit(submitter);\n } else {\n submitter.click();\n }\n } catch (error) {\n log_remote_client_step(\"create_form_submit_effect:error\", {\n error,\n });\n finish(\n Effect.fail(decode_remote_error<ErrorType>(error, decode_payload)),\n );\n }\n });\n}\n\nfunction wrap_attachment(\n native_attachment: (element: HTMLFormElement) => void | (() => void),\n native: Record<string, unknown>,\n tracker: Attached_form_tracker,\n): (element: HTMLFormElement) => () => void {\n return (element: HTMLFormElement) => {\n log_remote_client_step(\"wrap_native_form:attach\", {\n action: element.action,\n native_action: (native as { action?: unknown }).action,\n });\n tracker.current = element;\n const cleanup = native_attachment.call(native, element);\n\n return () => {\n log_remote_client_step(\"wrap_native_form:detach\", {\n action: element.action,\n });\n if (tracker.current === element) {\n tracker.current = null;\n }\n\n if (typeof cleanup === \"function\") {\n cleanup();\n }\n };\n };\n}\n\ntype EffectEnhanceCallback = (\n args: {\n readonly form: HTMLFormElement;\n readonly data: unknown;\n readonly submit: () => Effect.Effect<\n void,\n RemoteFailure<unknown>,\n never\n >;\n },\n) => Effect.Effect<unknown, unknown, never> | void;\n\ntype ValidateOptions = {\n readonly includeUntouched?: boolean;\n readonly preflightOnly?: boolean;\n};\n\nfunction copy_native_descriptors(\n source: Record<string | symbol, unknown>,\n target: Record<string | symbol, unknown>,\n options: {\n readonly native: Record<string, unknown>;\n readonly tracker: Attached_form_tracker;\n readonly wrap_for?: (key: string | number) => Record<string, unknown>;\n readonly wrap_enhance?: (\n callback: EffectEnhanceCallback,\n ) => Record<string | symbol, unknown>;\n readonly wrap_validate?: (\n options?: ValidateOptions,\n ) => Effect.Effect<void, RemoteFailure<unknown>, never>;\n },\n): void {\n for (const key of Reflect.ownKeys(source)) {\n const descriptor = Object.getOwnPropertyDescriptor(source, key);\n if (!descriptor) {\n continue;\n }\n\n if (\n key === \"for\" &&\n typeof descriptor.value === \"function\" &&\n options.wrap_for\n ) {\n Object.defineProperty(target, key, {\n configurable: descriptor.configurable ?? true,\n enumerable: descriptor.enumerable ?? false,\n writable: descriptor.writable ?? false,\n value: options.wrap_for,\n });\n continue;\n }\n\n if (\n key === \"enhance\" &&\n typeof descriptor.value === \"function\" &&\n options.wrap_enhance\n ) {\n Object.defineProperty(target, key, {\n configurable: descriptor.configurable ?? true,\n enumerable: descriptor.enumerable ?? false,\n writable: descriptor.writable ?? false,\n value: options.wrap_enhance,\n });\n continue;\n }\n\n if (\n key === \"validate\" &&\n typeof descriptor.value === \"function\" &&\n options.wrap_validate\n ) {\n Object.defineProperty(target, key, {\n configurable: descriptor.configurable ?? true,\n enumerable: descriptor.enumerable ?? false,\n writable: descriptor.writable ?? false,\n value: options.wrap_validate,\n });\n continue;\n }\n\n if (typeof key === \"symbol\" && typeof descriptor.value === \"function\") {\n Object.defineProperty(target, key, {\n configurable: descriptor.configurable ?? true,\n enumerable: descriptor.enumerable ?? true,\n writable: descriptor.writable ?? true,\n value: wrap_attachment(\n descriptor.value as (\n element: HTMLFormElement,\n ) => void | (() => void),\n options.native,\n options.tracker,\n ),\n });\n continue;\n }\n\n Object.defineProperty(target, key, descriptor);\n }\n}\n\nfunction wrap_enhanced(\n enhanced: Record<string | symbol, unknown>,\n native: Record<string, unknown>,\n tracker: Attached_form_tracker,\n): Record<string | symbol, unknown> {\n const wrapped: Record<string | symbol, unknown> = {};\n copy_native_descriptors(enhanced, wrapped, { native, tracker });\n return wrapped;\n}\n\nfunction wrap_native_form(\n native: Record<string, unknown>,\n decode_payload: Decode_remote_payload,\n dependencies: Form_request_dependencies,\n): Record<string | symbol, unknown> {\n const tracker: Attached_form_tracker = { current: null };\n const wrapped: Record<string | symbol, unknown> = {};\n\n copy_native_descriptors(\n native as Record<string | symbol, unknown>,\n wrapped,\n {\n native,\n tracker,\n wrap_for: (key: string | number) => {\n const native_for = (native as { for?: unknown }).for;\n if (typeof native_for !== \"function\") {\n throw new Error(\n \"Underlying SvelteKit form does not expose a `for` method.\",\n );\n }\n return wrap_native_form(\n (native_for as (key: string | number) => Record<string, unknown>)\n .call(native, key),\n decode_payload,\n dependencies,\n ) as Record<string, unknown>;\n },\n wrap_enhance: (effect_callback) => {\n const native_enhance = (native as { enhance?: unknown }).enhance;\n if (typeof native_enhance !== \"function\") {\n throw new Error(\n \"Underlying SvelteKit form does not expose an `enhance` method.\",\n );\n }\n\n // Adapt the user's Effect-shaped callback to SvelteKit's native\n // Promise-shaped callback. The user receives `submit` as a thunk\n // returning Effect<void, RemoteFailure, never>; we run their Effect\n // through Effect.runPromise so any failure propagates back to\n // SvelteKit as a rejected Promise.\n const native_callback = async (args: {\n form: HTMLFormElement;\n data: unknown;\n submit: () => Promise<unknown>;\n }) => {\n const effect_submit = (): Effect.Effect<\n void,\n RemoteFailure<unknown>,\n never\n > =>\n Effect.tryPromise({\n try: () => args.submit() as Promise<void>,\n catch: (error) =>\n decode_remote_error<unknown>(error, decode_payload),\n });\n\n const program = effect_callback({\n form: args.form,\n data: args.data,\n submit: effect_submit,\n });\n\n if (program === undefined) {\n return;\n }\n\n await Effect.runPromise(\n program as Effect.Effect<unknown, unknown, never>,\n );\n };\n\n const enhanced = (native_enhance as (\n cb: typeof native_callback,\n ) => Record<string | symbol, unknown>).call(native, native_callback);\n return wrap_enhanced(enhanced, native, tracker);\n },\n wrap_validate: (validate_options) => {\n const native_validate = (native as { validate?: unknown }).validate;\n if (typeof native_validate !== \"function\") {\n throw new Error(\n \"Underlying SvelteKit form does not expose a `validate` method.\",\n );\n }\n return Effect.tryPromise({\n try: () =>\n (native_validate as (\n opts?: ValidateOptions,\n ) => Promise<void>).call(native, validate_options),\n catch: (error) =>\n decode_remote_error<unknown>(error, decode_payload),\n });\n },\n },\n );\n\n Object.defineProperty(wrapped, \"native\", {\n configurable: true,\n enumerable: false,\n value: native,\n writable: false,\n });\n\n Object.defineProperty(wrapped, \"submit\", {\n configurable: true,\n enumerable: false,\n writable: false,\n value: (input: unknown) =>\n create_form_submit_effect(\n wrapped as {\n readonly native: {\n readonly action: string;\n readonly result?: unknown;\n readonly fields?: {\n readonly allIssues?: unknown;\n };\n enhance(\n callback: (args: {\n readonly form: HTMLFormElement;\n readonly data: unknown;\n readonly submit: () => Promise<unknown>;\n }) => Promise<void> | void,\n ): Record<string | symbol, unknown>;\n };\n },\n input,\n decode_payload,\n tracker,\n dependencies,\n ),\n });\n\n define_remote_error_decoder(wrapped, decode_payload);\n\n return wrapped;\n}\n\nexport function create_remote_form_adapter(\n native_form_factory: (id: string) => Record<string, unknown>,\n decode_payload: Decode_remote_payload,\n dependencies: Form_request_dependencies,\n) {\n return (id: string) => {\n const native = native_form_factory(id);\n return wrap_native_form(native, decode_payload, dependencies);\n };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { t as transformEffectMarkup } from "./chunks/markup-BMn2sQOB.js";
1
+ import { t as transformEffectMarkup } from "./chunks/markup-D4zJP7U1.js";
2
2
  import { transformEffectScript } from "./internal/transform.js";
3
3
  import { effect_preprocess } from "./preprocess.js";
4
4
  export { effect_preprocess, transformEffectMarkup as transform_effect_markup, transformEffectScript as transform_effect_script };
@@ -1,4 +1,4 @@
1
- import { t as effect_preprocess$1 } from "./chunks/preprocess-CGKEA3Py.js";
1
+ import { t as effect_preprocess$1 } from "./chunks/preprocess-DIC5iR0_.js";
2
2
  //#region preprocess.ts
3
3
  /**
4
4
  * Low-level `.svelte` preprocessor used by the higher-level `effect()`
package/dist/root-node.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { a as run_component_effect, c as to_native, o as run_inline_effect, r as get_effect_runtime_or_throw, s as to_effect, t as ClientRuntime } from "./chunks/client-vV6UAwoP.js";
2
2
  import "./chunks/v3-D0c0MKPf.js";
3
3
  import { a as RequestEvent$1, c as get_server_runtime_or_throw$1, i as Query$1, n as Form$1, o as ServerRuntime$1, r as Prerender$1, s as create_effect_transport$1, t as Command$1 } from "./chunks/server-Dea1CJuY.js";
4
- import { t as effect } from "./chunks/effect-Cx8OzrcW.js";
4
+ import { t as effect } from "./chunks/effect-zCli5qgO.js";
5
5
  //#region v3/root-node.ts
6
6
  /**
7
7
  * Define a read-only remote function that returns an `Effect` on the client.
@@ -101,19 +101,43 @@ export type EffectPrerenderFunction<Input, Output, Error = never> = ((arg: Optio
101
101
  };
102
102
  /**
103
103
  * Shape of an Effect-returning remote `form`. Usable anywhere the native
104
- * SvelteKit form is; additionally exposes `submit(data)` to run the form
105
- * program as an Effect, and `for(...)` to clone the binding for a given
106
- * input.
104
+ * SvelteKit form is, with Effect-aware overrides for the surfaces that
105
+ * SvelteKit exposes as Promises:
106
+ *
107
+ * - `submit(data)` runs the form program as an Effect.
108
+ * - `enhance(callback)` callback receives an Effect-returning `submit`
109
+ * thunk and may itself return an Effect.
110
+ * - `validate(options?)` returns an Effect instead of a Promise.
111
+ * - `for(id)` recursively returns an `EffectForm`.
107
112
  *
108
113
  * @see https://ser.barekey.dev/content/remote-functions/form
109
114
  */
110
- export type EffectForm<Input extends RemoteFormInput | void, Output, Error = never> = RemoteForm<Input, Output> & {
115
+ export type EffectForm<Input extends RemoteFormInput | void, Output, Error = never> = Omit<RemoteForm<Input, Output>, "enhance" | "validate" | "for"> & {
111
116
  /** Underlying SvelteKit `form` object, for fallback direct usage. */
112
117
  native: RemoteForm<Input, Output>;
113
118
  /** Submit the form programmatically and receive the result as an Effect. */
114
119
  submit(data: OptionalArgument<Input>): Effect.Effect<Output, import("../internal/remote-shared.js").RemoteFailure<Error>, never>;
120
+ /**
121
+ * Effect-aware version of SvelteKit's `enhance`. The callback receives
122
+ * `submit` as a thunk returning an Effect, and may return an Effect
123
+ * (which the runtime will run for you) or `void`.
124
+ */
125
+ enhance(callback: (args: {
126
+ readonly form: HTMLFormElement;
127
+ readonly data: Input;
128
+ readonly submit: () => Effect.Effect<void, import("../internal/remote-shared.js").RemoteFailure<Error>, never>;
129
+ }) => Effect.Effect<unknown, unknown, never> | void): {
130
+ method: "POST";
131
+ action: string;
132
+ [attachment: symbol]: (node: HTMLFormElement) => void;
133
+ };
134
+ /** Effect-returning version of SvelteKit's `validate`. */
135
+ validate(options?: {
136
+ readonly includeUntouched?: boolean;
137
+ readonly preflightOnly?: boolean;
138
+ }): Effect.Effect<void, import("../internal/remote-shared.js").RemoteFailure<Error>, never>;
115
139
  /** Clone the form binding for a specific value - mirrors `RemoteForm.for`. */
116
- for: RemoteForm<Input, Output>["for"] extends (...args: infer Args) => infer Result ? (...args: Args) => EffectForm<Input, Output, Error> : never;
140
+ for: RemoteForm<Input, Output>["for"] extends (...args: infer Args) => unknown ? (...args: Args) => EffectForm<Input, Output, Error> : never;
117
141
  };
118
142
  /**
119
143
  * Type of the SvelteKit `RequestEvent` exposed through the {@link RequestEvent}
package/dist/v4/effect.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as effect$1 } from "../chunks/effect-Cx8OzrcW.js";
1
+ import { t as effect$1 } from "../chunks/effect-zCli5qgO.js";
2
2
  import { with_v4_effect_preprocess_options } from "./preprocess.js";
3
3
  //#region v4/effect.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { t as effect_preprocess$1 } from "../chunks/preprocess-CGKEA3Py.js";
1
+ import { t as effect_preprocess$1 } from "../chunks/preprocess-DIC5iR0_.js";
2
2
  //#region v4/preprocess.ts
3
3
  const V4_RUNTIME_MODULE_ID = "svelte-effect-runtime/v4";
4
4
  /**
@@ -127,18 +127,38 @@ export type EffectPrerenderFunction<Input, Output, Error = never> = ((arg: Optio
127
127
  native: RemotePrerenderFunction<Input, Output>;
128
128
  };
129
129
  /**
130
- * v4 shape of an Effect-returning remote `form`. Adds `submit(data)` and
131
- * `for(...)` on top of the underlying SvelteKit form.
130
+ * v4 shape of an Effect-returning remote `form`. Effect-aware overrides for
131
+ * the surfaces that SvelteKit exposes as Promises: `submit(data)`,
132
+ * `enhance(callback)`, `validate(options?)`, and `for(id)`.
132
133
  *
133
134
  * @see https://ser.barekey.dev/content/remote-functions/form
134
135
  */
135
- export type EffectForm<Input extends RemoteFormInput | void, Output, Error = never> = RemoteForm<Input, Output> & {
136
+ export type EffectForm<Input extends RemoteFormInput | void, Output, Error = never> = Omit<RemoteForm<Input, Output>, "enhance" | "validate" | "for"> & {
136
137
  /** Underlying SvelteKit `form` object, for fallback direct usage. */
137
138
  native: RemoteForm<Input, Output>;
138
139
  /** Submit the form programmatically and receive the result as an Effect. */
139
140
  submit(data: OptionalArgument<Input>): Effect_type.Effect<Output, RemoteFailure<Error>, never>;
141
+ /**
142
+ * Effect-aware version of SvelteKit's `enhance`. The callback receives
143
+ * `submit` as a thunk returning an Effect, and may return an Effect
144
+ * (which the runtime will run for you) or `void`.
145
+ */
146
+ enhance(callback: (args: {
147
+ readonly form: HTMLFormElement;
148
+ readonly data: Input;
149
+ readonly submit: () => Effect_type.Effect<void, RemoteFailure<Error>, never>;
150
+ }) => Effect_type.Effect<unknown, unknown, never> | void): {
151
+ method: "POST";
152
+ action: string;
153
+ [attachment: symbol]: (node: HTMLFormElement) => void;
154
+ };
155
+ /** Effect-returning version of SvelteKit's `validate`. */
156
+ validate(options?: {
157
+ readonly includeUntouched?: boolean;
158
+ readonly preflightOnly?: boolean;
159
+ }): Effect_type.Effect<void, RemoteFailure<Error>, never>;
140
160
  /** Clone the form binding for a specific value - mirrors `RemoteForm.for`. */
141
- for: RemoteForm<Input, Output>["for"] extends (...args: infer Args) => infer Result ? (...args: Args) => EffectForm<Input, Output, Error> & Result : never;
161
+ for: RemoteForm<Input, Output>["for"] extends (...args: infer Args) => unknown ? (...args: Args) => EffectForm<Input, Output, Error> : never;
142
162
  };
143
163
  /**
144
164
  * v4 type of the SvelteKit `RequestEvent` exposed through the
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","names":["base_server.Query","base_server.Command","base_server.Form","base_server.Prerender","base_server.ServerRuntime","base_server.create_effect_transport","base_server.get_server_runtime_or_throw","base_server.normalize_remote_helper_error"],"sources":["../../../modules/svelte-effect-runtime/v4/server.ts"],"sourcesContent":["/**\n * v4 server-side entrypoint for `svelte-effect-runtime`.\n *\n * Provides Effect v4-flavoured remote-function helpers and the updated\n * `ServerRuntime` builder whose `RuntimeOperator` signature accepts the\n * v4-style `Layer.provide(...)` operator. Usually consumed indirectly: the\n * Vite plugin rewrites `svelte-effect-runtime/v4` imports inside `.remote.ts`\n * to resolve here at build time.\n *\n * @example\n * ```ts\n * import { Query, ServerRuntime } from \"svelte-effect-runtime/v4/_server\";\n * import { Effect, Layer, Schema } from \"effect\";\n *\n * ServerRuntime.make(Layer.provide(MyServiceLayer));\n *\n * export const hello = Query(Schema.String, (name) =>\n * Effect.succeed(`hello ${name}`)\n * );\n * ```\n *\n * @see https://ser.barekey.dev/content/reference/server-runtime\n *\n * @module\n */\nimport type {\n RemoteForm as SvelteKitRemoteForm,\n RemoteFormInput as SvelteKitRemoteFormInput,\n} from \"@sveltejs/kit\";\nimport type { getRequestEvent as get_native_request_event } from \"$app/server\";\nimport type { Effect as Effect_type, Layer as Layer_type } from \"effect\";\nimport * as base_server from \"$/v3/server.ts\";\nimport type { FormError, RemoteFailure } from \"$internal/remote-shared.ts\";\nimport {\n type EffectContextKey,\n type EffectSchemaLike,\n make_context_key,\n} from \"$internal/effect-compat.ts\";\n\n/**\n * Single entry in a {@link Transport} table. Describes how to encode a value\n * to a wire payload and decode it back.\n *\n * @see https://ser.barekey.dev/content/reference/transport\n */\nexport interface Transporter<T = unknown, U = { value: unknown }> {\n /** Restore the original value from the wire payload. */\n decode: (data: U) => T;\n /**\n * Encode the value to a wire payload, or return `false` when this transporter\n * does not apply to the supplied value.\n */\n encode: (value: T) => false | U;\n}\n\n/**\n * Named collection of {@link Transporter}s used by devalue to round-trip\n * custom types across the client/server boundary.\n *\n * @see https://ser.barekey.dev/content/reference/transport\n */\nexport type Transport = Record<string, Transporter>;\n\n/** Alias for SvelteKit's native remote-form input shape. */\nexport type RemoteFormInput = SvelteKitRemoteFormInput;\n\n/** SvelteKit's native `query` function signature, re-exported for typing. */\nexport type RemoteQueryFunction<Input, Output> = (\n arg: OptionalArgument<Input>,\n) => Promise<Output>;\n\n/** SvelteKit's native `command` shape, re-exported for typing. */\nexport type RemoteCommand<Input, Output> =\n & ((\n arg: OptionalArgument<Input>,\n ) => Promise<Output> & {\n updates(...updates: Array<unknown>): Promise<Output>;\n })\n & {\n readonly pending: number;\n };\n\n/** SvelteKit's native `prerender` function signature, re-exported for typing. */\nexport type RemotePrerenderFunction<Input, Output> = (\n arg: OptionalArgument<Input>,\n) => Promise<Output>;\n\n/** SvelteKit's native `form` shape, re-exported for typing. */\nexport type RemoteForm<Input extends RemoteFormInput | void, Output> =\n SvelteKitRemoteForm<Input, Output>;\n\ntype OptionalArgument<Input> = undefined extends Input ? Input | void : Input;\n\ntype RuntimeOperator = (\n self: Layer_type.Layer<unknown, unknown, unknown>,\n) => Layer_type.Layer<unknown, unknown, unknown>;\n\ntype RuntimeSeedLayer<Requirements> = Layer_type.Layer<\n Requirements,\n never,\n Requirements\n>;\n\ntype ProvidedBy<Op> = Op extends (\n self: RuntimeSeedLayer<infer Requirements>,\n) => Layer_type.Layer<unknown, unknown, infer Incoming>\n ? Exclude<Requirements, Incoming>\n : never;\n\ntype ProvidedByAll<Ops extends ReadonlyArray<RuntimeOperator>> = Ops extends\n readonly [infer Head, ...infer Tail] ?\n | ProvidedBy<Head>\n | ProvidedByAll<Extract<Tail, ReadonlyArray<RuntimeOperator>>>\n : never;\n\ntype ApplyOperator<Seed, Op> = Op extends (self: Seed) => infer Out ? Out\n : never;\n\ntype ApplyOperators<\n Seed,\n Ops extends ReadonlyArray<RuntimeOperator>,\n> = Ops extends readonly [infer Head, ...infer Tail] ? ApplyOperators<\n ApplyOperator<Seed, Head>,\n Extract<Tail, ReadonlyArray<RuntimeOperator>>\n >\n : Seed;\n\ntype FinalRuntimeLayer<Ops extends ReadonlyArray<RuntimeOperator>> =\n ApplyOperators<RuntimeSeedLayer<ProvidedByAll<Ops>>, Ops> extends infer Out\n ? Out extends Layer_type.Layer<unknown, unknown, infer Incoming>\n ? [Incoming] extends [never] ? Out\n : never\n : never\n : never;\n\ntype SchemaInput<SchemaType extends EffectSchemaLike> = SchemaType extends\n { readonly Encoded: infer Input } ? Input\n : never;\n\ntype SchemaOutput<SchemaType extends EffectSchemaLike> = SchemaType extends\n { readonly Type: infer Output } ? Output\n : never;\n\ntype FieldHelpers<FormShape, SchemaType> = FormShape extends\n Record<string, unknown> ? {\n [Key in keyof FormShape as Key extends string ? Key : never]: (\n message: string,\n ) => Effect_type.Effect<never, FormError<SchemaType>, never>;\n }\n : Record<PropertyKey, never>;\n\n/**\n * Proxy passed into v4 `Form` handlers for reporting validation issues. Call\n * `invalid.form(message)` for a top-level issue, or `invalid.<field>(message)`\n * to attach the issue to a specific field.\n *\n * @see https://ser.barekey.dev/content/remote-functions/form\n */\nexport type Invalid<SchemaType = unknown> =\n & {\n /** Attach a top-level form issue with the supplied message. */\n form: (\n message: string,\n ) => Effect_type.Effect<never, FormError<SchemaType>, never>;\n }\n & FieldHelpers<\n SchemaType extends EffectSchemaLike ? SchemaOutput<SchemaType> : unknown,\n SchemaType\n >;\n\n/**\n * v4 shape of an Effect-returning remote `query`. Exposes the underlying\n * SvelteKit function via `native`.\n *\n * @see https://ser.barekey.dev/content/remote-functions/query\n */\nexport type EffectQueryFunction<Input, Output, Error = never> =\n & ((\n arg: OptionalArgument<Input>,\n ) => Effect_type.Effect<\n Output,\n RemoteFailure<Error>,\n never\n >)\n & {\n /** Underlying SvelteKit `query` function, for fallback direct usage. */\n native: RemoteQueryFunction<Input, Output>;\n };\n\n/**\n * v4 shape of an Effect-returning remote `command`. Tracks in-flight\n * submissions via `pending`.\n *\n * @see https://ser.barekey.dev/content/remote-functions/command\n */\nexport type EffectCommand<Input, Output, Error = never> =\n & ((\n arg: OptionalArgument<Input>,\n ) => Effect_type.Effect<\n Output,\n RemoteFailure<Error>,\n never\n >)\n & {\n /** Underlying SvelteKit `command` function, for fallback direct usage. */\n native: RemoteCommand<Input, Output>;\n /** Count of currently in-flight invocations of this command. */\n readonly pending: number;\n };\n\n/**\n * v4 shape of an Effect-returning remote `prerender` function.\n *\n * @see https://ser.barekey.dev/content/remote-functions/prerender\n */\nexport type EffectPrerenderFunction<Input, Output, Error = never> =\n & ((\n arg: OptionalArgument<Input>,\n ) => Effect_type.Effect<\n Output,\n RemoteFailure<Error>,\n never\n >)\n & {\n /** Underlying SvelteKit `prerender` function, for fallback direct usage. */\n native: RemotePrerenderFunction<Input, Output>;\n };\n\n/**\n * v4 shape of an Effect-returning remote `form`. Adds `submit(data)` and\n * `for(...)` on top of the underlying SvelteKit form.\n *\n * @see https://ser.barekey.dev/content/remote-functions/form\n */\nexport type EffectForm<\n Input extends RemoteFormInput | void,\n Output,\n Error = never,\n> = RemoteForm<Input, Output> & {\n /** Underlying SvelteKit `form` object, for fallback direct usage. */\n native: RemoteForm<Input, Output>;\n /** Submit the form programmatically and receive the result as an Effect. */\n submit(\n data: OptionalArgument<Input>,\n ): Effect_type.Effect<\n Output,\n RemoteFailure<Error>,\n never\n >;\n /** Clone the form binding for a specific value - mirrors `RemoteForm.for`. */\n for: RemoteForm<Input, Output>[\"for\"] extends\n (...args: infer Args) => infer Result\n ? (...args: Args) => EffectForm<Input, Output, Error> & Result\n : never;\n};\n\n/**\n * v4 type of the SvelteKit `RequestEvent` exposed through the\n * {@link RequestEvent} Effect service.\n */\nexport type RequestEventService = ReturnType<typeof get_native_request_event>;\n\n/**\n * Builder shape returned by {@link ServerRuntime} in the v4 runtime. Accepts\n * v4-style `Layer` operators and installs a singleton `ManagedRuntime`.\n *\n * @see https://ser.barekey.dev/content/reference/server-runtime\n */\nexport interface ServerRuntimeSeed {\n /** Compose operators into a Layer without installing a runtime. */\n pipe(): Layer_type.Layer<never>;\n /** Compose operators into a Layer without installing a runtime. */\n pipe<const Ops extends readonly [RuntimeOperator, ...Array<RuntimeOperator>]>(\n ...ops: Ops\n ): FinalRuntimeLayer<Ops>;\n /** Build and install the singleton server runtime. */\n make(): void;\n /** Build and install the singleton server runtime. */\n make<const Ops extends readonly [RuntimeOperator, ...Array<RuntimeOperator>]>(\n ...ops: Ops\n ): void;\n}\n\n/**\n * Subset of `ManagedRuntime` surface used by generated v4 server wrappers.\n *\n * @internal Internal - do not use.\n */\nexport interface EffectManagedRuntime {\n /** Execute an Effect and resolve with its raw `Exit`. */\n runPromiseExit<A, E, R>(\n effect: Effect_type.Effect<A, E, R>,\n ): Promise<unknown>;\n /** Tear down the runtime and release its root scope. */\n dispose(): Promise<void>;\n}\n\n/**\n * Signature of `Query.batch` in the v4 runtime - kept loosely typed because\n * the v4 server-side implementation delegates to the v3 batch factory.\n *\n * @see https://ser.barekey.dev/content/remote-functions/query\n */\nexport interface EffectQueryBatchFactory {\n /** Build a batched query from validator + handler arguments. */\n (...args: Array<unknown>): unknown;\n}\n\n/**\n * v4 overload set for the {@link Query} factory. Mirrors\n * {@link import(\"$/v3/server.ts\").EffectQueryFactory} using v4 schema-like\n * inference.\n *\n * @see https://ser.barekey.dev/content/remote-functions/query\n */\nexport interface EffectQueryFactory {\n /** Define a void-input query. */\n <Output, Error, Requirements>(\n fn: () => Effect_type.Effect<Output, Error, Requirements>,\n ): EffectQueryFunction<void, Output, Error>;\n /** Define a query that bypasses schema validation. */\n <Input, Output, Error, Requirements>(\n validate: \"unchecked\",\n fn: (arg: Input) => Effect_type.Effect<Output, Error, Requirements>,\n ): EffectQueryFunction<Input, Output, Error>;\n /** Define a query whose input is validated by an Effect.Schema. */\n <SchemaType extends EffectSchemaLike, Output, Error, Requirements>(\n validate: SchemaType,\n fn: (\n arg: SchemaOutput<SchemaType>,\n ) => Effect_type.Effect<Output, Error, Requirements>,\n ): EffectQueryFunction<SchemaInput<SchemaType>, Output, Error>;\n /** Define a batched query - mirrors SvelteKit's `query.batch`. */\n batch: EffectQueryBatchFactory;\n}\n\n/**\n * v4 overload set for the {@link Command} factory.\n *\n * @see https://ser.barekey.dev/content/remote-functions/command\n */\nexport interface EffectCommandFactory {\n /** Define a void-input command. */\n <Output, Error, Requirements>(\n fn: () => Effect_type.Effect<Output, Error, Requirements>,\n ): EffectCommand<void, Output, Error>;\n /** Define a command that bypasses schema validation. */\n <Input, Output, Error, Requirements>(\n validate: \"unchecked\",\n fn: (arg: Input) => Effect_type.Effect<Output, Error, Requirements>,\n ): EffectCommand<Input, Output, Error>;\n /** Define a command whose input is validated by an Effect.Schema. */\n <SchemaType extends EffectSchemaLike, Output, Error, Requirements>(\n validate: SchemaType,\n fn: (\n arg: SchemaOutput<SchemaType>,\n ) => Effect_type.Effect<Output, Error, Requirements>,\n ): EffectCommand<SchemaInput<SchemaType>, Output, Error>;\n}\n\ntype RemotePrerenderInputsGenerator<Input> = (\n event: RequestEventService,\n) => AsyncIterable<Input> | Iterable<Input>;\n\n/**\n * v4 overload set for the {@link Form} factory.\n *\n * @see https://ser.barekey.dev/content/remote-functions/form\n */\nexport interface EffectFormFactory {\n /** Define a form handler with no input data. */\n <Output, Error, Requirements>(\n fn: () => Effect_type.Effect<Output, Error, Requirements>,\n ): EffectForm<void, Output, Error>;\n /** Define a form handler that bypasses schema validation. */\n <Input extends RemoteFormInput, Output, Error, Requirements>(\n validate: \"unchecked\",\n fn: (\n args: {\n data: Input;\n invalid: Invalid;\n },\n ) => Effect_type.Effect<Output, Error | FormError, Requirements>,\n ): EffectForm<Input, Output, Error>;\n /** Define a form handler whose submitted data is validated by a schema. */\n <SchemaType extends EffectSchemaLike, Output, Error, Requirements>(\n validate: SchemaType,\n fn: (\n args: {\n data: SchemaOutput<SchemaType>;\n invalid: Invalid<SchemaType>;\n },\n ) => Effect_type.Effect<\n Output,\n Error | FormError<SchemaType>,\n Requirements\n >,\n ): EffectForm<SchemaInput<SchemaType> & RemoteFormInput, Output, Error>;\n}\n\n/**\n * v4 overload set for the {@link Prerender} factory. Supports the same three\n * validation flavours as the other factories plus a SvelteKit `options` bag\n * with `inputs` / `dynamic` flags.\n *\n * @see https://ser.barekey.dev/content/remote-functions/prerender\n */\nexport interface EffectPrerenderFactory {\n <Output, Error, Requirements>(\n fn: () => Effect_type.Effect<Output, Error, Requirements>,\n options?: {\n inputs?: RemotePrerenderInputsGenerator<void>;\n dynamic?: boolean;\n },\n ): EffectPrerenderFunction<void, Output, Error>;\n <Input, Output, Error, Requirements>(\n validate: \"unchecked\",\n fn: (arg: Input) => Effect_type.Effect<Output, Error, Requirements>,\n options?: {\n inputs?: RemotePrerenderInputsGenerator<Input>;\n dynamic?: boolean;\n },\n ): EffectPrerenderFunction<Input, Output, Error>;\n <SchemaType extends EffectSchemaLike, Output, Error, Requirements>(\n validate: SchemaType,\n fn: (\n arg: SchemaOutput<SchemaType>,\n ) => Effect_type.Effect<Output, Error, Requirements>,\n options?: {\n inputs?: RemotePrerenderInputsGenerator<SchemaInput<SchemaType>>;\n dynamic?: boolean;\n },\n ): EffectPrerenderFunction<SchemaInput<SchemaType>, Output, Error>;\n}\n\n/**\n * v4 flavour of {@link import(\"$/v3/server.ts\").Query} - define a read-only\n * remote function returning an Effect.\n *\n * @see https://ser.barekey.dev/content/remote-functions/query\n */\nexport const Query: EffectQueryFactory = base_server.Query;\n/**\n * v4 flavour of {@link import(\"$/v3/server.ts\").Command} - define a\n * write-oriented remote function returning an Effect.\n *\n * @see https://ser.barekey.dev/content/remote-functions/command\n */\nexport const Command: EffectCommandFactory = base_server.Command;\n/**\n * v4 flavour of {@link import(\"$/v3/server.ts\").Form} - define a remote form\n * handler that maps submitted data into an Effect program.\n *\n * @see https://ser.barekey.dev/content/remote-functions/form\n */\nexport const Form: EffectFormFactory = base_server.Form;\n/**\n * v4 flavour of {@link import(\"$/v3/server.ts\").Prerender} - define a\n * prerenderable remote function backed by an Effect program.\n *\n * @see https://ser.barekey.dev/content/remote-functions/prerender\n */\nexport const Prerender: EffectPrerenderFactory = base_server.Prerender;\n/**\n * v4 Effect `Context.Tag` for the current SvelteKit `RequestEvent`. Shaped\n * like an `Effect` so handlers can `yield* RequestEvent` directly.\n *\n * @see https://ser.barekey.dev/content/runtimes/server\n */\nexport const RequestEvent = make_context_key<\n RequestEventService,\n RequestEventService\n>(\n \"svelte-effect-runtime/RequestEvent\",\n) as\n & EffectContextKey<RequestEventService, RequestEventService>\n & Effect_type.Effect<RequestEventService, never, RequestEventService>;\n/**\n * v4 server-side runtime builder. Equivalent to the v3 builder but typed\n * against the v4 `Layer` operator signature.\n *\n * @see https://ser.barekey.dev/content/reference/server-runtime\n */\nexport const ServerRuntime: ServerRuntimeSeed = base_server.ServerRuntime;\n/**\n * Build a devalue transport table from Effect schemas so remote payloads can\n * round-trip custom data across the client/server boundary.\n *\n * @see https://ser.barekey.dev/content/reference/transport\n */\nexport const create_effect_transport:\n typeof base_server.create_effect_transport =\n base_server.create_effect_transport;\n/**\n * Resolve the active v4 server runtime, lazily creating a default empty\n * runtime when none has been registered.\n *\n * @internal Internal - do not use.\n * @see https://ser.barekey.dev/content/reference/server-runtime\n */\nexport const get_server_runtime_or_throw: () => EffectManagedRuntime =\n base_server.get_server_runtime_or_throw;\n/**\n * Remap low-level request-store crashes into a clearer setup error when remote\n * helpers are evaluated outside SvelteKit's remote-function runtime.\n *\n * @internal Internal - do not use.\n */\nexport const normalize_remote_helper_error =\n base_server.normalize_remote_helper_error;\n"],"mappings":";;;;;;;;;AAybA,MAAa,QAA4BA;;;;;;;AAOzC,MAAa,UAAgCC;;;;;;;AAO7C,MAAa,OAA0BC;;;;;;;AAOvC,MAAa,YAAoCC;;;;;;;AAOjD,MAAa,eAAe,iBAI1B,qCACD;;;;;;;AASD,MAAa,gBAAmCC;;;;;;;AAOhD,MAAa,0BAETC;;;;;;;;AAQJ,MAAa,8BACXC;;;;;;;AAOF,MAAa,gCACXC"}
1
+ {"version":3,"file":"server.js","names":["base_server.Query","base_server.Command","base_server.Form","base_server.Prerender","base_server.ServerRuntime","base_server.create_effect_transport","base_server.get_server_runtime_or_throw","base_server.normalize_remote_helper_error"],"sources":["../../../modules/svelte-effect-runtime/v4/server.ts"],"sourcesContent":["/**\n * v4 server-side entrypoint for `svelte-effect-runtime`.\n *\n * Provides Effect v4-flavoured remote-function helpers and the updated\n * `ServerRuntime` builder whose `RuntimeOperator` signature accepts the\n * v4-style `Layer.provide(...)` operator. Usually consumed indirectly: the\n * Vite plugin rewrites `svelte-effect-runtime/v4` imports inside `.remote.ts`\n * to resolve here at build time.\n *\n * @example\n * ```ts\n * import { Query, ServerRuntime } from \"svelte-effect-runtime/v4/_server\";\n * import { Effect, Layer, Schema } from \"effect\";\n *\n * ServerRuntime.make(Layer.provide(MyServiceLayer));\n *\n * export const hello = Query(Schema.String, (name) =>\n * Effect.succeed(`hello ${name}`)\n * );\n * ```\n *\n * @see https://ser.barekey.dev/content/reference/server-runtime\n *\n * @module\n */\nimport type {\n RemoteForm as SvelteKitRemoteForm,\n RemoteFormInput as SvelteKitRemoteFormInput,\n} from \"@sveltejs/kit\";\nimport type { getRequestEvent as get_native_request_event } from \"$app/server\";\nimport type { Effect as Effect_type, Layer as Layer_type } from \"effect\";\nimport * as base_server from \"$/v3/server.ts\";\nimport type { FormError, RemoteFailure } from \"$internal/remote-shared.ts\";\nimport {\n type EffectContextKey,\n type EffectSchemaLike,\n make_context_key,\n} from \"$internal/effect-compat.ts\";\n\n/**\n * Single entry in a {@link Transport} table. Describes how to encode a value\n * to a wire payload and decode it back.\n *\n * @see https://ser.barekey.dev/content/reference/transport\n */\nexport interface Transporter<T = unknown, U = { value: unknown }> {\n /** Restore the original value from the wire payload. */\n decode: (data: U) => T;\n /**\n * Encode the value to a wire payload, or return `false` when this transporter\n * does not apply to the supplied value.\n */\n encode: (value: T) => false | U;\n}\n\n/**\n * Named collection of {@link Transporter}s used by devalue to round-trip\n * custom types across the client/server boundary.\n *\n * @see https://ser.barekey.dev/content/reference/transport\n */\nexport type Transport = Record<string, Transporter>;\n\n/** Alias for SvelteKit's native remote-form input shape. */\nexport type RemoteFormInput = SvelteKitRemoteFormInput;\n\n/** SvelteKit's native `query` function signature, re-exported for typing. */\nexport type RemoteQueryFunction<Input, Output> = (\n arg: OptionalArgument<Input>,\n) => Promise<Output>;\n\n/** SvelteKit's native `command` shape, re-exported for typing. */\nexport type RemoteCommand<Input, Output> =\n & ((\n arg: OptionalArgument<Input>,\n ) => Promise<Output> & {\n updates(...updates: Array<unknown>): Promise<Output>;\n })\n & {\n readonly pending: number;\n };\n\n/** SvelteKit's native `prerender` function signature, re-exported for typing. */\nexport type RemotePrerenderFunction<Input, Output> = (\n arg: OptionalArgument<Input>,\n) => Promise<Output>;\n\n/** SvelteKit's native `form` shape, re-exported for typing. */\nexport type RemoteForm<Input extends RemoteFormInput | void, Output> =\n SvelteKitRemoteForm<Input, Output>;\n\ntype OptionalArgument<Input> = undefined extends Input ? Input | void : Input;\n\ntype RuntimeOperator = (\n self: Layer_type.Layer<unknown, unknown, unknown>,\n) => Layer_type.Layer<unknown, unknown, unknown>;\n\ntype RuntimeSeedLayer<Requirements> = Layer_type.Layer<\n Requirements,\n never,\n Requirements\n>;\n\ntype ProvidedBy<Op> = Op extends (\n self: RuntimeSeedLayer<infer Requirements>,\n) => Layer_type.Layer<unknown, unknown, infer Incoming>\n ? Exclude<Requirements, Incoming>\n : never;\n\ntype ProvidedByAll<Ops extends ReadonlyArray<RuntimeOperator>> = Ops extends\n readonly [infer Head, ...infer Tail] ?\n | ProvidedBy<Head>\n | ProvidedByAll<Extract<Tail, ReadonlyArray<RuntimeOperator>>>\n : never;\n\ntype ApplyOperator<Seed, Op> = Op extends (self: Seed) => infer Out ? Out\n : never;\n\ntype ApplyOperators<\n Seed,\n Ops extends ReadonlyArray<RuntimeOperator>,\n> = Ops extends readonly [infer Head, ...infer Tail] ? ApplyOperators<\n ApplyOperator<Seed, Head>,\n Extract<Tail, ReadonlyArray<RuntimeOperator>>\n >\n : Seed;\n\ntype FinalRuntimeLayer<Ops extends ReadonlyArray<RuntimeOperator>> =\n ApplyOperators<RuntimeSeedLayer<ProvidedByAll<Ops>>, Ops> extends infer Out\n ? Out extends Layer_type.Layer<unknown, unknown, infer Incoming>\n ? [Incoming] extends [never] ? Out\n : never\n : never\n : never;\n\ntype SchemaInput<SchemaType extends EffectSchemaLike> = SchemaType extends\n { readonly Encoded: infer Input } ? Input\n : never;\n\ntype SchemaOutput<SchemaType extends EffectSchemaLike> = SchemaType extends\n { readonly Type: infer Output } ? Output\n : never;\n\ntype FieldHelpers<FormShape, SchemaType> = FormShape extends\n Record<string, unknown> ? {\n [Key in keyof FormShape as Key extends string ? Key : never]: (\n message: string,\n ) => Effect_type.Effect<never, FormError<SchemaType>, never>;\n }\n : Record<PropertyKey, never>;\n\n/**\n * Proxy passed into v4 `Form` handlers for reporting validation issues. Call\n * `invalid.form(message)` for a top-level issue, or `invalid.<field>(message)`\n * to attach the issue to a specific field.\n *\n * @see https://ser.barekey.dev/content/remote-functions/form\n */\nexport type Invalid<SchemaType = unknown> =\n & {\n /** Attach a top-level form issue with the supplied message. */\n form: (\n message: string,\n ) => Effect_type.Effect<never, FormError<SchemaType>, never>;\n }\n & FieldHelpers<\n SchemaType extends EffectSchemaLike ? SchemaOutput<SchemaType> : unknown,\n SchemaType\n >;\n\n/**\n * v4 shape of an Effect-returning remote `query`. Exposes the underlying\n * SvelteKit function via `native`.\n *\n * @see https://ser.barekey.dev/content/remote-functions/query\n */\nexport type EffectQueryFunction<Input, Output, Error = never> =\n & ((\n arg: OptionalArgument<Input>,\n ) => Effect_type.Effect<\n Output,\n RemoteFailure<Error>,\n never\n >)\n & {\n /** Underlying SvelteKit `query` function, for fallback direct usage. */\n native: RemoteQueryFunction<Input, Output>;\n };\n\n/**\n * v4 shape of an Effect-returning remote `command`. Tracks in-flight\n * submissions via `pending`.\n *\n * @see https://ser.barekey.dev/content/remote-functions/command\n */\nexport type EffectCommand<Input, Output, Error = never> =\n & ((\n arg: OptionalArgument<Input>,\n ) => Effect_type.Effect<\n Output,\n RemoteFailure<Error>,\n never\n >)\n & {\n /** Underlying SvelteKit `command` function, for fallback direct usage. */\n native: RemoteCommand<Input, Output>;\n /** Count of currently in-flight invocations of this command. */\n readonly pending: number;\n };\n\n/**\n * v4 shape of an Effect-returning remote `prerender` function.\n *\n * @see https://ser.barekey.dev/content/remote-functions/prerender\n */\nexport type EffectPrerenderFunction<Input, Output, Error = never> =\n & ((\n arg: OptionalArgument<Input>,\n ) => Effect_type.Effect<\n Output,\n RemoteFailure<Error>,\n never\n >)\n & {\n /** Underlying SvelteKit `prerender` function, for fallback direct usage. */\n native: RemotePrerenderFunction<Input, Output>;\n };\n\n/**\n * v4 shape of an Effect-returning remote `form`. Effect-aware overrides for\n * the surfaces that SvelteKit exposes as Promises: `submit(data)`,\n * `enhance(callback)`, `validate(options?)`, and `for(id)`.\n *\n * @see https://ser.barekey.dev/content/remote-functions/form\n */\nexport type EffectForm<\n Input extends RemoteFormInput | void,\n Output,\n Error = never,\n> =\n & Omit<RemoteForm<Input, Output>, \"enhance\" | \"validate\" | \"for\">\n & {\n /** Underlying SvelteKit `form` object, for fallback direct usage. */\n native: RemoteForm<Input, Output>;\n /** Submit the form programmatically and receive the result as an Effect. */\n submit(\n data: OptionalArgument<Input>,\n ): Effect_type.Effect<\n Output,\n RemoteFailure<Error>,\n never\n >;\n /**\n * Effect-aware version of SvelteKit's `enhance`. The callback receives\n * `submit` as a thunk returning an Effect, and may return an Effect\n * (which the runtime will run for you) or `void`.\n */\n enhance(\n callback: (args: {\n readonly form: HTMLFormElement;\n readonly data: Input;\n readonly submit: () => Effect_type.Effect<\n void,\n RemoteFailure<Error>,\n never\n >;\n }) => Effect_type.Effect<unknown, unknown, never> | void,\n ): {\n method: \"POST\";\n action: string;\n [attachment: symbol]: (node: HTMLFormElement) => void;\n };\n /** Effect-returning version of SvelteKit's `validate`. */\n validate(options?: {\n readonly includeUntouched?: boolean;\n readonly preflightOnly?: boolean;\n }): Effect_type.Effect<void, RemoteFailure<Error>, never>;\n /** Clone the form binding for a specific value - mirrors `RemoteForm.for`. */\n for: RemoteForm<Input, Output>[\"for\"] extends\n (...args: infer Args) => unknown\n ? (...args: Args) => EffectForm<Input, Output, Error>\n : never;\n };\n\n/**\n * v4 type of the SvelteKit `RequestEvent` exposed through the\n * {@link RequestEvent} Effect service.\n */\nexport type RequestEventService = ReturnType<typeof get_native_request_event>;\n\n/**\n * Builder shape returned by {@link ServerRuntime} in the v4 runtime. Accepts\n * v4-style `Layer` operators and installs a singleton `ManagedRuntime`.\n *\n * @see https://ser.barekey.dev/content/reference/server-runtime\n */\nexport interface ServerRuntimeSeed {\n /** Compose operators into a Layer without installing a runtime. */\n pipe(): Layer_type.Layer<never>;\n /** Compose operators into a Layer without installing a runtime. */\n pipe<const Ops extends readonly [RuntimeOperator, ...Array<RuntimeOperator>]>(\n ...ops: Ops\n ): FinalRuntimeLayer<Ops>;\n /** Build and install the singleton server runtime. */\n make(): void;\n /** Build and install the singleton server runtime. */\n make<const Ops extends readonly [RuntimeOperator, ...Array<RuntimeOperator>]>(\n ...ops: Ops\n ): void;\n}\n\n/**\n * Subset of `ManagedRuntime` surface used by generated v4 server wrappers.\n *\n * @internal Internal - do not use.\n */\nexport interface EffectManagedRuntime {\n /** Execute an Effect and resolve with its raw `Exit`. */\n runPromiseExit<A, E, R>(\n effect: Effect_type.Effect<A, E, R>,\n ): Promise<unknown>;\n /** Tear down the runtime and release its root scope. */\n dispose(): Promise<void>;\n}\n\n/**\n * Signature of `Query.batch` in the v4 runtime - kept loosely typed because\n * the v4 server-side implementation delegates to the v3 batch factory.\n *\n * @see https://ser.barekey.dev/content/remote-functions/query\n */\nexport interface EffectQueryBatchFactory {\n /** Build a batched query from validator + handler arguments. */\n (...args: Array<unknown>): unknown;\n}\n\n/**\n * v4 overload set for the {@link Query} factory. Mirrors\n * {@link import(\"$/v3/server.ts\").EffectQueryFactory} using v4 schema-like\n * inference.\n *\n * @see https://ser.barekey.dev/content/remote-functions/query\n */\nexport interface EffectQueryFactory {\n /** Define a void-input query. */\n <Output, Error, Requirements>(\n fn: () => Effect_type.Effect<Output, Error, Requirements>,\n ): EffectQueryFunction<void, Output, Error>;\n /** Define a query that bypasses schema validation. */\n <Input, Output, Error, Requirements>(\n validate: \"unchecked\",\n fn: (arg: Input) => Effect_type.Effect<Output, Error, Requirements>,\n ): EffectQueryFunction<Input, Output, Error>;\n /** Define a query whose input is validated by an Effect.Schema. */\n <SchemaType extends EffectSchemaLike, Output, Error, Requirements>(\n validate: SchemaType,\n fn: (\n arg: SchemaOutput<SchemaType>,\n ) => Effect_type.Effect<Output, Error, Requirements>,\n ): EffectQueryFunction<SchemaInput<SchemaType>, Output, Error>;\n /** Define a batched query - mirrors SvelteKit's `query.batch`. */\n batch: EffectQueryBatchFactory;\n}\n\n/**\n * v4 overload set for the {@link Command} factory.\n *\n * @see https://ser.barekey.dev/content/remote-functions/command\n */\nexport interface EffectCommandFactory {\n /** Define a void-input command. */\n <Output, Error, Requirements>(\n fn: () => Effect_type.Effect<Output, Error, Requirements>,\n ): EffectCommand<void, Output, Error>;\n /** Define a command that bypasses schema validation. */\n <Input, Output, Error, Requirements>(\n validate: \"unchecked\",\n fn: (arg: Input) => Effect_type.Effect<Output, Error, Requirements>,\n ): EffectCommand<Input, Output, Error>;\n /** Define a command whose input is validated by an Effect.Schema. */\n <SchemaType extends EffectSchemaLike, Output, Error, Requirements>(\n validate: SchemaType,\n fn: (\n arg: SchemaOutput<SchemaType>,\n ) => Effect_type.Effect<Output, Error, Requirements>,\n ): EffectCommand<SchemaInput<SchemaType>, Output, Error>;\n}\n\ntype RemotePrerenderInputsGenerator<Input> = (\n event: RequestEventService,\n) => AsyncIterable<Input> | Iterable<Input>;\n\n/**\n * v4 overload set for the {@link Form} factory.\n *\n * @see https://ser.barekey.dev/content/remote-functions/form\n */\nexport interface EffectFormFactory {\n /** Define a form handler with no input data. */\n <Output, Error, Requirements>(\n fn: () => Effect_type.Effect<Output, Error, Requirements>,\n ): EffectForm<void, Output, Error>;\n /** Define a form handler that bypasses schema validation. */\n <Input extends RemoteFormInput, Output, Error, Requirements>(\n validate: \"unchecked\",\n fn: (\n args: {\n data: Input;\n invalid: Invalid;\n },\n ) => Effect_type.Effect<Output, Error | FormError, Requirements>,\n ): EffectForm<Input, Output, Error>;\n /** Define a form handler whose submitted data is validated by a schema. */\n <SchemaType extends EffectSchemaLike, Output, Error, Requirements>(\n validate: SchemaType,\n fn: (\n args: {\n data: SchemaOutput<SchemaType>;\n invalid: Invalid<SchemaType>;\n },\n ) => Effect_type.Effect<\n Output,\n Error | FormError<SchemaType>,\n Requirements\n >,\n ): EffectForm<SchemaInput<SchemaType> & RemoteFormInput, Output, Error>;\n}\n\n/**\n * v4 overload set for the {@link Prerender} factory. Supports the same three\n * validation flavours as the other factories plus a SvelteKit `options` bag\n * with `inputs` / `dynamic` flags.\n *\n * @see https://ser.barekey.dev/content/remote-functions/prerender\n */\nexport interface EffectPrerenderFactory {\n <Output, Error, Requirements>(\n fn: () => Effect_type.Effect<Output, Error, Requirements>,\n options?: {\n inputs?: RemotePrerenderInputsGenerator<void>;\n dynamic?: boolean;\n },\n ): EffectPrerenderFunction<void, Output, Error>;\n <Input, Output, Error, Requirements>(\n validate: \"unchecked\",\n fn: (arg: Input) => Effect_type.Effect<Output, Error, Requirements>,\n options?: {\n inputs?: RemotePrerenderInputsGenerator<Input>;\n dynamic?: boolean;\n },\n ): EffectPrerenderFunction<Input, Output, Error>;\n <SchemaType extends EffectSchemaLike, Output, Error, Requirements>(\n validate: SchemaType,\n fn: (\n arg: SchemaOutput<SchemaType>,\n ) => Effect_type.Effect<Output, Error, Requirements>,\n options?: {\n inputs?: RemotePrerenderInputsGenerator<SchemaInput<SchemaType>>;\n dynamic?: boolean;\n },\n ): EffectPrerenderFunction<SchemaInput<SchemaType>, Output, Error>;\n}\n\n/**\n * v4 flavour of {@link import(\"$/v3/server.ts\").Query} - define a read-only\n * remote function returning an Effect.\n *\n * @see https://ser.barekey.dev/content/remote-functions/query\n */\nexport const Query: EffectQueryFactory = base_server.Query;\n/**\n * v4 flavour of {@link import(\"$/v3/server.ts\").Command} - define a\n * write-oriented remote function returning an Effect.\n *\n * @see https://ser.barekey.dev/content/remote-functions/command\n */\nexport const Command: EffectCommandFactory = base_server.Command;\n/**\n * v4 flavour of {@link import(\"$/v3/server.ts\").Form} - define a remote form\n * handler that maps submitted data into an Effect program.\n *\n * @see https://ser.barekey.dev/content/remote-functions/form\n */\nexport const Form: EffectFormFactory = base_server.Form;\n/**\n * v4 flavour of {@link import(\"$/v3/server.ts\").Prerender} - define a\n * prerenderable remote function backed by an Effect program.\n *\n * @see https://ser.barekey.dev/content/remote-functions/prerender\n */\nexport const Prerender: EffectPrerenderFactory = base_server.Prerender;\n/**\n * v4 Effect `Context.Tag` for the current SvelteKit `RequestEvent`. Shaped\n * like an `Effect` so handlers can `yield* RequestEvent` directly.\n *\n * @see https://ser.barekey.dev/content/runtimes/server\n */\nexport const RequestEvent = make_context_key<\n RequestEventService,\n RequestEventService\n>(\n \"svelte-effect-runtime/RequestEvent\",\n) as\n & EffectContextKey<RequestEventService, RequestEventService>\n & Effect_type.Effect<RequestEventService, never, RequestEventService>;\n/**\n * v4 server-side runtime builder. Equivalent to the v3 builder but typed\n * against the v4 `Layer` operator signature.\n *\n * @see https://ser.barekey.dev/content/reference/server-runtime\n */\nexport const ServerRuntime: ServerRuntimeSeed = base_server.ServerRuntime;\n/**\n * Build a devalue transport table from Effect schemas so remote payloads can\n * round-trip custom data across the client/server boundary.\n *\n * @see https://ser.barekey.dev/content/reference/transport\n */\nexport const create_effect_transport:\n typeof base_server.create_effect_transport =\n base_server.create_effect_transport;\n/**\n * Resolve the active v4 server runtime, lazily creating a default empty\n * runtime when none has been registered.\n *\n * @internal Internal - do not use.\n * @see https://ser.barekey.dev/content/reference/server-runtime\n */\nexport const get_server_runtime_or_throw: () => EffectManagedRuntime =\n base_server.get_server_runtime_or_throw;\n/**\n * Remap low-level request-store crashes into a clearer setup error when remote\n * helpers are evaluated outside SvelteKit's remote-function runtime.\n *\n * @internal Internal - do not use.\n */\nexport const normalize_remote_helper_error =\n base_server.normalize_remote_helper_error;\n"],"mappings":";;;;;;;;;AAqdA,MAAa,QAA4BA;;;;;;;AAOzC,MAAa,UAAgCC;;;;;;;AAO7C,MAAa,OAA0BC;;;;;;;AAOvC,MAAa,YAAoCC;;;;;;;AAOjD,MAAa,eAAe,iBAI1B,qCACD;;;;;;;AASD,MAAa,gBAAmCC;;;;;;;AAOhD,MAAa,0BAETC;;;;;;;;AAQJ,MAAa,8BACXC;;;;;;;AAOF,MAAa,gCACXC"}
package/dist/v4/vite.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as sveltekit_effect_runtime$1, t as svelte_effect_runtime$1 } from "../chunks/vite-C8ujN78r.js";
1
+ import { n as sveltekit_effect_runtime$1, t as svelte_effect_runtime$1 } from "../chunks/vite-Bm2RdiT3.js";
2
2
  import { with_v4_effect_preprocess_options } from "./preprocess.js";
3
3
  //#region v4/vite.ts
4
4
  /**
package/dist/vite.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as sveltekit_effect_runtime$1, t as svelte_effect_runtime$1 } from "./chunks/vite-C8ujN78r.js";
1
+ import { n as sveltekit_effect_runtime$1, t as svelte_effect_runtime$1 } from "./chunks/vite-Bm2RdiT3.js";
2
2
  //#region vite.ts
3
3
  /**
4
4
  * Compose the low-level Svelte preprocessor directly into a plain Vite +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svelte-effect-runtime",
3
- "version": "1.5.0",
3
+ "version": "1.6.1",
4
4
  "description": "Client-side Effect runtime support for Svelte <script> blocks.",
5
5
  "license": "BSD-3-Clause",
6
6
  "type": "module",