svelte-effect-runtime 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dist/chunks/{client-LYwZZXy7.js → client-CfkB_G4o.js} +3 -3
- package/.dist/chunks/{client-LYwZZXy7.js.map → client-CfkB_G4o.js.map} +1 -1
- package/.dist/chunks/{descriptors-CU2g4U_i.js → descriptors-OS4VfJuW.js} +1 -1
- package/.dist/chunks/{descriptors-CU2g4U_i.js.map → descriptors-OS4VfJuW.js.map} +1 -1
- package/.dist/chunks/{dispatcher-g0HYqHOK.js → dispatcher-8B6Ol80H.js} +1 -1
- package/.dist/chunks/{dispatcher-g0HYqHOK.js.map → dispatcher-8B6Ol80H.js.map} +1 -1
- package/.dist/chunks/{preprocess-33aQ41uE.js → preprocess-Cn4JH9OO.js} +36 -15
- package/.dist/chunks/preprocess-Cn4JH9OO.js.map +1 -0
- package/.dist/chunks/{transform-B4g76Ur4.js → transform-s9gKPYu5.js} +424 -29
- package/.dist/chunks/transform-s9gKPYu5.js.map +1 -0
- package/.dist/detect.js.map +1 -1
- package/.dist/dispatcher.js +1 -1
- package/.dist/internal/generators.js +1 -1
- package/.dist/internal/remote-client.js +1 -1
- package/.dist/markup/promise.js +1 -1
- package/.dist/markup/promise.js.map +1 -1
- package/.dist/markup/run.js +1 -1
- package/.dist/markup/run.js.map +1 -1
- package/.dist/markup/transform/constants.d.ts +3 -3
- package/.dist/markup/transform/effect-bindings.d.ts +41 -0
- package/.dist/markup/transform/effect-callbacks.d.ts +26 -0
- package/.dist/markup/transform/emit.d.ts +4 -1
- package/.dist/markup/transform.js +1 -1
- package/.dist/markup/value.js +1 -1
- package/.dist/markup/value.js.map +1 -1
- package/.dist/mod.js +1 -1
- package/.dist/mod.js.map +1 -1
- package/.dist/preprocess/imports.d.ts +2 -1
- package/.dist/preprocess.js +2 -2
- package/.dist/remote/client.js +1 -1
- package/.dist/remote/server.js.map +1 -1
- package/.dist/remote/shared.js.map +1 -1
- package/.dist/runtime/preprocess.js +2 -2
- package/.dist/runtime/preprocess.js.map +1 -1
- package/.dist/server/factories.d.ts +10 -1
- package/.dist/server/types.d.ts +10 -1
- package/.dist/server.js +1 -1
- package/.dist/server.js.map +1 -1
- package/.dist/vite.js +5 -5
- package/.dist/vite.js.map +1 -1
- package/package.json +6 -3
- package/.dist/chunks/preprocess-33aQ41uE.js.map +0 -1
- package/.dist/chunks/transform-B4g76Ur4.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/remote/shared.ts"],"sourcesContent":["/**\n * Shared types, markers, and constructors used by both the client-side remote\n * adapters and the server-side handler runtime. These types define the error\n * protocol that flows across the network boundary.\n *\n * @since 2.0.0\n */\n\n/**\n * Well-known marker injected into every serialised remote-failure envelope\n * so the client can reliably distinguish runtime errors from domain values.\n *\n * @since 2.0.0\n * @internal\n */\nexport const EFFECT_REMOTE_ERROR_MARKER = \"__svelte_effect_remote__\";\n\n/**\n * Well-known symbol used to attach a payload decoder to a remote function\n * so the client's transport layer can decode domain error types.\n *\n * @since 2.0.0\n * @internal\n */\nexport const REMOTE_ERROR_DECODER = Symbol.for(\n \"svelte-effect-runtime/remote-error-decoder\",\n);\n\n/** Form validation helpers and types. */\n\n/**\n * A single field-level or form-level validation issue reported by a\n * {@link Form} handler.\n *\n * @since 2.0.0\n */\nexport interface FormIssue {\n /** Human-readable validation message. */\n message: string;\n /** Path to the offending field as an array of string-or-number keys. */\n path: (string | number)[];\n}\n\n/**\n * Error subtype thrown by {@link Form} handlers to signal validation\n * failures. The `issues` array is forwarded to SvelteKit's `invalid()`\n * helper on the server and surfaced as `FormError` on the client.\n *\n * @since 2.0.0\n */\nexport interface FormError<SchemaType = unknown> {\n readonly _tag: \"FormError\";\n readonly issues: readonly FormIssue[];\n /** Phantom type slot for the schema this error was derived from. */\n readonly _schema?: SchemaType;\n}\n\n/**\n * Creates a {@link FormError} holding the given issues.\n *\n * @since 2.0.0\n * @param issues - The validation issues to attach.\n * @returns A FormError with the `_tag` set and no schema reference.\n */\nexport function create_form_error(issues: readonly FormIssue[]): FormError {\n return { _tag: \"FormError\", issues };\n}\n\n/**\n * Type guard that narrows an unknown value to a {@link FormError}.\n *\n * @since 2.0.0\n * @param value - The value to check.\n * @returns `true` when the value is a FormError.\n */\nexport function is_form_error(value: unknown): value is FormError {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<string, unknown>)._tag === \"FormError\"\n );\n}\n\n/** Remote error types shared by client and server helpers. */\n\n/**\n * Union of all wire-level error shapes that a remote function can\n * surface on its error channel.\n *\n * @example\n * ```ts\n * const result = yield* myQuery();\n * // error channel is RemoteFailure<DomainError>\n * ```\n *\n * @since 2.0.0\n */\nexport type RemoteFailure<ErrorType> =\n | ErrorType\n | RemoteValidationError\n | RemoteHttpError\n | RemoteTransportError;\n\n/**\n * Validation errors that originate from a server-side {@link Form}\n * handler calling `invalid()` (SvelteKit's `fail`).\n *\n * @since 2.0.0\n */\nexport interface RemoteValidationError {\n readonly _tag: \"RemoteValidationError\";\n readonly issues?: readonly FormIssue[];\n readonly body?: unknown;\n readonly status: number;\n}\n\n/**\n * HTTP-level errors with a status code and optional response body. Raised\n * when the server explicitly calls SvelteKit's `error(status, body)`.\n *\n * @since 2.0.0\n */\nexport interface RemoteHttpError {\n readonly _tag: \"RemoteHttpError\";\n readonly status: number;\n readonly body?: unknown;\n readonly cause?: unknown;\n}\n\n/**\n * Transport-level errors raised by the client adapter when the network\n * request fails or the response cannot be decoded.\n *\n * @since 2.0.0\n */\nexport interface RemoteTransportError {\n readonly _tag: \"RemoteTransportError\";\n readonly cause?: unknown;\n readonly body?: unknown;\n}\n\n/**\n * Wire format for an encoded remote failure. The server wraps domain\n * errors in this envelope before serialising them with devalue.\n *\n * @since 2.0.0\n * @internal\n */\nexport interface SerializedRemoteFailureEnvelope {\n readonly __svelte_effect_remote__: true;\n readonly encoded: string;\n}\n\n/** Constructors for structured remote error values. */\n\n/**\n * Creates a {@link RemoteValidationError} from a list of form issues.\n *\n * @since 2.0.0\n * @param issues - The validation issues reported by the server handler.\n * @param body - Optional response body returned alongside the error.\n * @param status - HTTP status code (defaults to 400).\n * @returns A remote-validation error shape.\n * @internal\n */\nexport function create_remote_validation_error(\n issues: readonly FormIssue[],\n body?: unknown,\n status = 400,\n): RemoteValidationError {\n\n return { _tag: \"RemoteValidationError\", issues, body, status };\n}\n\n/**\n * Creates a {@link RemoteHttpError} for a given HTTP status.\n *\n * @since 2.0.0\n * @param status - The HTTP status code.\n * @param body - Optional response body.\n * @param cause - Optional underlying cause.\n * @returns A remote HTTP error shape.\n * @internal\n */\nexport function create_remote_http_error(\n status: number,\n body?: unknown,\n cause?: unknown,\n): RemoteHttpError {\n\n return { _tag: \"RemoteHttpError\", status, body, cause };\n}\n\n/**\n * Creates a {@link RemoteTransportError} for network or decode failures.\n *\n * @since 2.0.0\n * @param cause - The underlying error that caused the transport failure.\n * @param body - Optional response body if one was received.\n * @returns A remote transport error shape.\n * @internal\n */\nexport function create_remote_transport_error(\n cause: unknown,\n body?: unknown,\n): RemoteTransportError {\n\n return { _tag: \"RemoteTransportError\", cause, body };\n}\n\n/**\n * Wraps a devalue-encoded error string inside a\n * {@link SerializedRemoteFailureEnvelope}.\n *\n * @since 2.0.0\n * @param encoded - The devalue-encoded error value.\n * @returns The wire-format envelope.\n * @internal\n */\nexport function create_serialized_remote_failure_envelope(\n encoded: string,\n): SerializedRemoteFailureEnvelope {\n\n return { __svelte_effect_remote__: true, encoded };\n}\n\n/** Type guards for structured remote error values. */\n\n/**\n * Checks whether a value is a {@link SerializedRemoteFailureEnvelope}.\n *\n * @since 2.0.0\n * @param value - The value to check.\n * @returns `true` when the value is a serialised failure envelope.\n * @internal\n */\nexport function is_serialized_remote_failure_envelope(\n value: unknown,\n): value is SerializedRemoteFailureEnvelope {\n\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<string, unknown>).__svelte_effect_remote__ === true\n );\n}\n\n/**\n * Checks whether a value is a {@link RemoteValidationError}.\n *\n * @since 2.0.0\n * @param value - The value to check.\n * @returns `true` when the value is a remote validation error.\n */\nexport function is_remote_validation_error(\n value: unknown,\n): value is RemoteValidationError {\n\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<string, unknown>)._tag === \"RemoteValidationError\"\n );\n}\n\n/**\n * Checks whether a value is a {@link RemoteHttpError}.\n *\n * @since 2.0.0\n * @param value - The value to check.\n * @returns `true` when the value is a remote HTTP error.\n */\nexport function is_remote_http_error(\n value: unknown,\n): value is RemoteHttpError {\n\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<string, unknown>)._tag === \"RemoteHttpError\"\n );\n}\n\n/**\n * Checks whether a value is a {@link RemoteTransportError}.\n *\n * @since 2.0.0\n * @param value - The value to check.\n * @returns `true` when the value is a remote transport error.\n */\nexport function is_remote_transport_error(\n value: unknown,\n): value is RemoteTransportError {\n\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<string, unknown>)._tag === \"RemoteTransportError\"\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAa,6BAA6B;;;;;;;;AAS1C,MAAa,uBAAuB,OAAO,IACzC,
|
|
1
|
+
{"version":3,"file":"shared.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/remote/shared.ts"],"sourcesContent":["/**\n * Shared types, markers, and constructors used by both the client-side remote\n * adapters and the server-side handler runtime. These types define the error\n * protocol that flows across the network boundary.\n *\n * @since 2.0.0\n */\n\n/**\n * Well-known marker injected into every serialised remote-failure envelope\n * so the client can reliably distinguish runtime errors from domain values.\n *\n * @since 2.0.0\n * @internal\n */\nexport const EFFECT_REMOTE_ERROR_MARKER = \"__svelte_effect_remote__\";\n\n/**\n * Well-known symbol used to attach a payload decoder to a remote function\n * so the client's transport layer can decode domain error types.\n *\n * @since 2.0.0\n * @internal\n */\nexport const REMOTE_ERROR_DECODER = Symbol.for(\n \"svelte-effect-runtime/remote-error-decoder\",\n);\n\n/** Form validation helpers and types. */\n\n/**\n * A single field-level or form-level validation issue reported by a\n * {@link Form} handler.\n *\n * @since 2.0.0\n */\nexport interface FormIssue {\n /** Human-readable validation message. */\n message: string;\n /** Path to the offending field as an array of string-or-number keys. */\n path: (string | number)[];\n}\n\n/**\n * Error subtype thrown by {@link Form} handlers to signal validation\n * failures. The `issues` array is forwarded to SvelteKit's `invalid()`\n * helper on the server and surfaced as `FormError` on the client.\n *\n * @since 2.0.0\n */\nexport interface FormError<SchemaType = unknown> {\n readonly _tag: \"FormError\";\n readonly issues: readonly FormIssue[];\n /** Phantom type slot for the schema this error was derived from. */\n readonly _schema?: SchemaType;\n}\n\n/**\n * Creates a {@link FormError} holding the given issues.\n *\n * @since 2.0.0\n * @param issues - The validation issues to attach.\n * @returns A FormError with the `_tag` set and no schema reference.\n */\nexport function create_form_error(issues: readonly FormIssue[]): FormError {\n return { _tag: \"FormError\", issues };\n}\n\n/**\n * Type guard that narrows an unknown value to a {@link FormError}.\n *\n * @since 2.0.0\n * @param value - The value to check.\n * @returns `true` when the value is a FormError.\n */\nexport function is_form_error(value: unknown): value is FormError {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<string, unknown>)._tag === \"FormError\"\n );\n}\n\n/** Remote error types shared by client and server helpers. */\n\n/**\n * Union of all wire-level error shapes that a remote function can\n * surface on its error channel.\n *\n * @example\n * ```ts\n * const result = yield* myQuery();\n * // error channel is RemoteFailure<DomainError>\n * ```\n *\n * @since 2.0.0\n */\nexport type RemoteFailure<ErrorType> =\n | ErrorType\n | RemoteValidationError\n | RemoteHttpError\n | RemoteTransportError;\n\n/**\n * Validation errors that originate from a server-side {@link Form}\n * handler calling `invalid()` (SvelteKit's `fail`).\n *\n * @since 2.0.0\n */\nexport interface RemoteValidationError {\n readonly _tag: \"RemoteValidationError\";\n readonly issues?: readonly FormIssue[];\n readonly body?: unknown;\n readonly status: number;\n}\n\n/**\n * HTTP-level errors with a status code and optional response body. Raised\n * when the server explicitly calls SvelteKit's `error(status, body)`.\n *\n * @since 2.0.0\n */\nexport interface RemoteHttpError {\n readonly _tag: \"RemoteHttpError\";\n readonly status: number;\n readonly body?: unknown;\n readonly cause?: unknown;\n}\n\n/**\n * Transport-level errors raised by the client adapter when the network\n * request fails or the response cannot be decoded.\n *\n * @since 2.0.0\n */\nexport interface RemoteTransportError {\n readonly _tag: \"RemoteTransportError\";\n readonly cause?: unknown;\n readonly body?: unknown;\n}\n\n/**\n * Wire format for an encoded remote failure. The server wraps domain\n * errors in this envelope before serialising them with devalue.\n *\n * @since 2.0.0\n * @internal\n */\nexport interface SerializedRemoteFailureEnvelope {\n readonly __svelte_effect_remote__: true;\n readonly encoded: string;\n}\n\n/** Constructors for structured remote error values. */\n\n/**\n * Creates a {@link RemoteValidationError} from a list of form issues.\n *\n * @since 2.0.0\n * @param issues - The validation issues reported by the server handler.\n * @param body - Optional response body returned alongside the error.\n * @param status - HTTP status code (defaults to 400).\n * @returns A remote-validation error shape.\n * @internal\n */\nexport function create_remote_validation_error(\n issues: readonly FormIssue[],\n body?: unknown,\n status = 400,\n): RemoteValidationError {\n\n return { _tag: \"RemoteValidationError\", issues, body, status };\n}\n\n/**\n * Creates a {@link RemoteHttpError} for a given HTTP status.\n *\n * @since 2.0.0\n * @param status - The HTTP status code.\n * @param body - Optional response body.\n * @param cause - Optional underlying cause.\n * @returns A remote HTTP error shape.\n * @internal\n */\nexport function create_remote_http_error(\n status: number,\n body?: unknown,\n cause?: unknown,\n): RemoteHttpError {\n\n return { _tag: \"RemoteHttpError\", status, body, cause };\n}\n\n/**\n * Creates a {@link RemoteTransportError} for network or decode failures.\n *\n * @since 2.0.0\n * @param cause - The underlying error that caused the transport failure.\n * @param body - Optional response body if one was received.\n * @returns A remote transport error shape.\n * @internal\n */\nexport function create_remote_transport_error(\n cause: unknown,\n body?: unknown,\n): RemoteTransportError {\n\n return { _tag: \"RemoteTransportError\", cause, body };\n}\n\n/**\n * Wraps a devalue-encoded error string inside a\n * {@link SerializedRemoteFailureEnvelope}.\n *\n * @since 2.0.0\n * @param encoded - The devalue-encoded error value.\n * @returns The wire-format envelope.\n * @internal\n */\nexport function create_serialized_remote_failure_envelope(\n encoded: string,\n): SerializedRemoteFailureEnvelope {\n\n return { __svelte_effect_remote__: true, encoded };\n}\n\n/** Type guards for structured remote error values. */\n\n/**\n * Checks whether a value is a {@link SerializedRemoteFailureEnvelope}.\n *\n * @since 2.0.0\n * @param value - The value to check.\n * @returns `true` when the value is a serialised failure envelope.\n * @internal\n */\nexport function is_serialized_remote_failure_envelope(\n value: unknown,\n): value is SerializedRemoteFailureEnvelope {\n\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<string, unknown>).__svelte_effect_remote__ === true\n );\n}\n\n/**\n * Checks whether a value is a {@link RemoteValidationError}.\n *\n * @since 2.0.0\n * @param value - The value to check.\n * @returns `true` when the value is a remote validation error.\n */\nexport function is_remote_validation_error(\n value: unknown,\n): value is RemoteValidationError {\n\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<string, unknown>)._tag === \"RemoteValidationError\"\n );\n}\n\n/**\n * Checks whether a value is a {@link RemoteHttpError}.\n *\n * @since 2.0.0\n * @param value - The value to check.\n * @returns `true` when the value is a remote HTTP error.\n */\nexport function is_remote_http_error(\n value: unknown,\n): value is RemoteHttpError {\n\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<string, unknown>)._tag === \"RemoteHttpError\"\n );\n}\n\n/**\n * Checks whether a value is a {@link RemoteTransportError}.\n *\n * @since 2.0.0\n * @param value - The value to check.\n * @returns `true` when the value is a remote transport error.\n */\nexport function is_remote_transport_error(\n value: unknown,\n): value is RemoteTransportError {\n\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<string, unknown>)._tag === \"RemoteTransportError\"\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAa,6BAA6B;;;;;;;;AAS1C,MAAa,uBAAuB,OAAO,IACzC,4CACF;;;;;;;;AAsCA,SAAgB,kBAAkB,QAAyC;CACzE,OAAO;EAAE,MAAM;EAAa;CAAO;AACrC;;;;;;;;AASA,SAAgB,cAAc,OAAoC;CAChE,OACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,SAAS;AAEhD;;;;;;;;;;;;AAoFA,SAAgB,+BACd,QACA,MACA,SAAS,KACc;CAEvB,OAAO;EAAE,MAAM;EAAyB;EAAQ;EAAM;CAAO;AAC/D;;;;;;;;;;;AAYA,SAAgB,yBACd,QACA,MACA,OACiB;CAEjB,OAAO;EAAE,MAAM;EAAmB;EAAQ;EAAM;CAAM;AACxD;;;;;;;;;;AAWA,SAAgB,8BACd,OACA,MACsB;CAEtB,OAAO;EAAE,MAAM;EAAwB;EAAO;CAAK;AACrD;;;;;;;;;;AAWA,SAAgB,0CACd,SACiC;CAEjC,OAAO;EAAE,0BAA0B;EAAM;CAAQ;AACnD;;;;;;;;;;AAYA,SAAgB,sCACd,OAC0C;CAE1C,OACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,6BAA6B;AAEpE;;;;;;;;AASA,SAAgB,2BACd,OACgC;CAEhC,OACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,SAAS;AAEhD;;;;;;;;AASA,SAAgB,qBACd,OAC0B;CAE1B,OACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,SAAS;AAEhD;;;;;;;;AASA,SAAgB,0BACd,OAC+B;CAE/B,OACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,SAAS;AAEhD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as transform_markup_effect } from "../chunks/transform-
|
|
2
|
-
import { t as transform_script_effect } from "../chunks/preprocess-
|
|
1
|
+
import { t as transform_markup_effect } from "../chunks/transform-s9gKPYu5.js";
|
|
2
|
+
import { t as transform_script_effect } from "../chunks/preprocess-Cn4JH9OO.js";
|
|
3
3
|
//#region src/runtime/preprocess.ts
|
|
4
4
|
/**
|
|
5
5
|
* Svelte preprocessor that lowers `yield*` in script and markup blocks.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preprocess.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/runtime/preprocess.ts"],"sourcesContent":["import { transform_markup_effect } from \"$/markup/transform.ts\";\nimport { transform_script_effect } from \"$/preprocess.ts\";\n\n/**\n * Result returned by the Svelte markup preprocessor hook.\n *\n * @since 2.0.0\n */\ninterface MarkupResult {\n code: string;\n}\n\n/**\n * Minimal Svelte preprocessor group shape used by the runtime.\n *\n * @since 2.0.0\n */\ninterface PreprocessGroup {\n name: string;\n markup(options: { content: string; filename?: string }): MarkupResult;\n}\n\n/**\n * Svelte preprocessor that lowers `yield*` in script and markup blocks.\n *\n * @example\n * ```js\n * import { preprocess } from \"svelte-effect-runtime\";\n *\n * export default {\n * preprocess: [preprocess()],\n * };\n * ```\n *\n * @since 2.0.0\n * @returns A Svelte preprocessor group with a `markup` hook.\n */\nexport function preprocess(): PreprocessGroup {\n return {\n name: \"svelte-effect-runtime\",\n\n markup({ content, filename }: { content: string; filename?: string }) {\n const resolved_filename = filename ?? \"unknown.svelte\";\n const script = find_script(content);\n\n let combined = content;\n\n if (script?.has_effect) {\n const result = transform_script_effect(script.text, resolved_filename);\n\n combined = content.slice(0, script.effect_attr_start) +\n content.slice(script.effect_attr_end, script.open_end) +\n result.code +\n content.slice(script.close_start);\n }\n\n const result = transform_markup_effect(combined, resolved_filename);\n\n return { code: result.code };\n },\n };\n}\n\nfunction find_script(content: string):\n | {\n text: string;\n open_end: number;\n close_start: number;\n has_effect: boolean;\n effect_attr_start: number;\n effect_attr_end: number;\n }\n | undefined {\n const pattern = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script\\s*>/gi;\n\n for (const match of content.matchAll(pattern)) {\n if (match.index === undefined || /\\bmodule\\b/.test(match[1] ?? \"\")) {\n continue;\n }\n\n const attrs = match[1] ?? \"\";\n const effect_match = /\\s+effect(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s>]+))?/\n .exec(attrs);\n const open_end = match.index + match[0].indexOf(\">\") + 1;\n const attr_start = effect_match?.index ?? attrs.length;\n const attr_end = attr_start + (effect_match?.[0].length ?? 0);\n\n return {\n text: match[2],\n open_end,\n close_start: match.index + match[0].lastIndexOf(\"<\"),\n has_effect: effect_match !== null,\n effect_attr_start: match.index + \"<script\".length + attr_start,\n effect_attr_end: match.index + \"<script\".length + attr_end,\n };\n }\n\n return undefined;\n}\n\nexport {\n type BlockRef,\n type ScriptTransformResult,\n transform_script_effect,\n} from \"$/preprocess.ts\";\n\nexport {\n type MarkupTransformResult,\n transform_markup_effect,\n} from \"$/markup/transform.ts\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAqCA,SAAgB,aAA8B;
|
|
1
|
+
{"version":3,"file":"preprocess.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/runtime/preprocess.ts"],"sourcesContent":["import { transform_markup_effect } from \"$/markup/transform.ts\";\nimport { transform_script_effect } from \"$/preprocess.ts\";\n\n/**\n * Result returned by the Svelte markup preprocessor hook.\n *\n * @since 2.0.0\n */\ninterface MarkupResult {\n code: string;\n}\n\n/**\n * Minimal Svelte preprocessor group shape used by the runtime.\n *\n * @since 2.0.0\n */\ninterface PreprocessGroup {\n name: string;\n markup(options: { content: string; filename?: string }): MarkupResult;\n}\n\n/**\n * Svelte preprocessor that lowers `yield*` in script and markup blocks.\n *\n * @example\n * ```js\n * import { preprocess } from \"svelte-effect-runtime\";\n *\n * export default {\n * preprocess: [preprocess()],\n * };\n * ```\n *\n * @since 2.0.0\n * @returns A Svelte preprocessor group with a `markup` hook.\n */\nexport function preprocess(): PreprocessGroup {\n return {\n name: \"svelte-effect-runtime\",\n\n markup({ content, filename }: { content: string; filename?: string }) {\n const resolved_filename = filename ?? \"unknown.svelte\";\n const script = find_script(content);\n\n let combined = content;\n\n if (script?.has_effect) {\n const result = transform_script_effect(script.text, resolved_filename);\n\n combined = content.slice(0, script.effect_attr_start) +\n content.slice(script.effect_attr_end, script.open_end) +\n result.code +\n content.slice(script.close_start);\n }\n\n const result = transform_markup_effect(combined, resolved_filename);\n\n return { code: result.code };\n },\n };\n}\n\nfunction find_script(content: string):\n | {\n text: string;\n open_end: number;\n close_start: number;\n has_effect: boolean;\n effect_attr_start: number;\n effect_attr_end: number;\n }\n | undefined {\n const pattern = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script\\s*>/gi;\n\n for (const match of content.matchAll(pattern)) {\n if (match.index === undefined || /\\bmodule\\b/.test(match[1] ?? \"\")) {\n continue;\n }\n\n const attrs = match[1] ?? \"\";\n const effect_match = /\\s+effect(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s>]+))?/\n .exec(attrs);\n const open_end = match.index + match[0].indexOf(\">\") + 1;\n const attr_start = effect_match?.index ?? attrs.length;\n const attr_end = attr_start + (effect_match?.[0].length ?? 0);\n\n return {\n text: match[2],\n open_end,\n close_start: match.index + match[0].lastIndexOf(\"<\"),\n has_effect: effect_match !== null,\n effect_attr_start: match.index + \"<script\".length + attr_start,\n effect_attr_end: match.index + \"<script\".length + attr_end,\n };\n }\n\n return undefined;\n}\n\nexport {\n type BlockRef,\n type ScriptTransformResult,\n transform_script_effect,\n} from \"$/preprocess.ts\";\n\nexport {\n type MarkupTransformResult,\n transform_markup_effect,\n} from \"$/markup/transform.ts\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAqCA,SAAgB,aAA8B;CAC5C,OAAO;EACL,MAAM;EAEN,OAAO,EAAE,SAAS,YAAoD;GACpE,MAAM,oBAAoB,YAAY;GACtC,MAAM,SAAS,YAAY,OAAO;GAElC,IAAI,WAAW;GAEf,IAAI,QAAQ,YAAY;IACtB,MAAM,SAAS,wBAAwB,OAAO,MAAM,iBAAiB;IAErE,WAAW,QAAQ,MAAM,GAAG,OAAO,iBAAiB,IAClD,QAAQ,MAAM,OAAO,iBAAiB,OAAO,QAAQ,IACrD,OAAO,OACP,QAAQ,MAAM,OAAO,WAAW;GACpC;GAIA,OAAO,EAAE,MAFM,wBAAwB,UAAU,iBAE7B,EAAE,KAAK;EAC7B;CACF;AACF;AAEA,SAAS,YAAY,SASP;CAGZ,KAAK,MAAM,SAAS,QAAQ,SAAS,4CAAO,GAAG;EAC7C,IAAI,MAAM,UAAU,KAAA,KAAa,aAAa,KAAK,MAAM,MAAM,EAAE,GAC/D;EAGF,MAAM,QAAQ,MAAM,MAAM;EAC1B,MAAM,eAAe,mDAClB,KAAK,KAAK;EACb,MAAM,WAAW,MAAM,QAAQ,MAAM,GAAG,QAAQ,GAAG,IAAI;EACvD,MAAM,aAAa,cAAc,SAAS,MAAM;EAChD,MAAM,WAAW,cAAc,eAAe,GAAG,UAAU;EAE3D,OAAO;GACL,MAAM,MAAM;GACZ;GACA,aAAa,MAAM,QAAQ,MAAM,GAAG,YAAY,GAAG;GACnD,YAAY,iBAAiB;GAC7B,mBAAmB,MAAM,QAAQ,IAAmB;GACpD,iBAAiB,MAAM,QAAQ,IAAmB;EACpD;CACF;AAGF"}
|
|
@@ -2,7 +2,16 @@ import { prerender as native_prerender } from "$app/server";
|
|
|
2
2
|
import type { RemoteFormInput } from "@sveltejs/kit";
|
|
3
3
|
import { type Schema } from "effect";
|
|
4
4
|
import type { EffectLike, EffectRemoteBatchHandler, EffectRemoteCommand, EffectRemoteForm, EffectRemoteLiveQueryFunction, EffectRemoteLiveSource, EffectRemoteQueryFunction, PrerenderOptions, RemoteFormHandler, RemoteHandler, SchemaInput } from "./types.js";
|
|
5
|
-
type FormSchemaEncodedInput<S> = S extends Schema.Top ? S["Encoded"]
|
|
5
|
+
type FormSchemaEncodedInput<S> = S extends Schema.Top ? FormRemoteInput<S["Encoded"]> : never;
|
|
6
|
+
type FormRemoteInput<Input> = NormalizeFormEncoded<Input> extends RemoteFormInput ? NormalizeFormEncoded<Input> : never;
|
|
7
|
+
type FormScalar = string | number | boolean | File;
|
|
8
|
+
type NormalizeFormEncoded<Value> = Value extends FormScalar ? Value : Value extends ReadonlyArray<infer Item> ? Array<NormalizeFormEncoded<Item>> : Value extends object ? NormalizeFormObject<Value> : Value;
|
|
9
|
+
type NormalizeFormObject<Value> = {
|
|
10
|
+
readonly [Key in keyof Value]: Key extends OptionalFormKeys<Value> ? NormalizeFormEncoded<Exclude<Value[Key], undefined>> : NormalizeFormEncoded<Value[Key]>;
|
|
11
|
+
};
|
|
12
|
+
type OptionalFormKeys<Value> = {
|
|
13
|
+
[Key in keyof Value]-?: Record<PropertyKey, never> extends Pick<Value, Key> ? Key : never;
|
|
14
|
+
}[keyof Value];
|
|
6
15
|
type RemoteLiveHandler<Input = unknown, A = unknown> = EffectLike<EffectRemoteLiveSource<A>> | EffectRemoteLiveSource<A> | ((input: Input) => EffectLike<EffectRemoteLiveSource<A>> | EffectRemoteLiveSource<A>);
|
|
7
16
|
interface QueryFactory {
|
|
8
17
|
<A>(validate_or_handler: EffectLike<A> | RemoteHandler<void, A>): EffectRemoteQueryFunction<void, A>;
|
package/.dist/server/types.d.ts
CHANGED
|
@@ -278,5 +278,14 @@ export type EffectRemoteCommand<Input, A> = EffectRemoteFunction<Input, A> & {
|
|
|
278
278
|
* @template A - Successful value produced by the form handler.
|
|
279
279
|
*/
|
|
280
280
|
export type EffectRemoteForm<Input extends RemoteFormInput | void, A> = ClientEffectRemoteForm<Input, A>;
|
|
281
|
-
type FormSchemaEncodedInput<S> = S extends Schema.Top ? S["Encoded"]
|
|
281
|
+
type FormSchemaEncodedInput<S> = S extends Schema.Top ? FormRemoteInput<S["Encoded"]> : never;
|
|
282
|
+
type FormRemoteInput<Input> = NormalizeFormEncoded<Input> extends RemoteFormInput ? NormalizeFormEncoded<Input> : never;
|
|
283
|
+
type FormScalar = string | number | boolean | File;
|
|
284
|
+
type NormalizeFormEncoded<Value> = Value extends FormScalar ? Value : Value extends ReadonlyArray<infer Item> ? Array<NormalizeFormEncoded<Item>> : Value extends object ? NormalizeFormObject<Value> : Value;
|
|
285
|
+
type NormalizeFormObject<Value> = {
|
|
286
|
+
readonly [Key in keyof Value]: Key extends OptionalFormKeys<Value> ? NormalizeFormEncoded<Exclude<Value[Key], undefined>> : NormalizeFormEncoded<Value[Key]>;
|
|
287
|
+
};
|
|
288
|
+
type OptionalFormKeys<Value> = {
|
|
289
|
+
[Key in keyof Value]-?: Record<PropertyKey, never> extends Pick<Value, Key> ? Key : never;
|
|
290
|
+
}[keyof Value];
|
|
282
291
|
export {};
|
package/.dist/server.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { create_form_error } from "./remote/shared.js";
|
|
2
|
-
import { t as copy_property_descriptors } from "./chunks/descriptors-
|
|
2
|
+
import { t as copy_property_descriptors } from "./chunks/descriptors-OS4VfJuW.js";
|
|
3
3
|
import { normalize_remote_helper_error, run_remote_effect } from "./remote/server.js";
|
|
4
4
|
import { Context, Effect, Layer, ManagedRuntime, Schema, Stream } from "effect";
|
|
5
5
|
import { command, form, getRequestEvent, prerender, query } from "$app/server";
|
package/.dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","names":["get_native_request_event","get_native_request_event","native_query","native_command","native_form","native_prerender","Error"],"sources":["../../modules/svelte-effect-runtime/src/server/schema.ts","../../modules/svelte-effect-runtime/src/server/runtime.ts","../../modules/svelte-effect-runtime/src/server/effects.ts","../../modules/svelte-effect-runtime/src/server/invalid.ts","../../modules/svelte-effect-runtime/src/server/wrappers.ts","../../modules/svelte-effect-runtime/src/server/factories.ts","../../modules/svelte-effect-runtime/src/server/control-flow.ts"],"sourcesContent":["import { Schema } from \"effect\";\n\nimport type { RemoteHandler, StandardSchema } from \"./types.ts\";\n\n/**\n * Checks whether a value is the string sentinel for unchecked remotes.\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value is `\"unchecked\"`.\n */\nexport function is_unchecked(value: unknown): value is \"unchecked\" {\n return value === \"unchecked\";\n}\n\n/**\n * Checks whether a value is a remote handler function.\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value is callable as a handler.\n */\nexport function is_handler(value: unknown): value is RemoteHandler {\n return typeof value === \"function\";\n}\n\n/**\n * Checks whether a value implements the Standard Schema contract.\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value is a Standard Schema.\n */\nexport function is_standard_schema(value: unknown): value is StandardSchema {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"~standard\" in value\n );\n}\n\n/**\n * Checks whether a value looks like an Effect Schema.\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value should be converted to Standard Schema.\n */\nexport function is_effect_schema(\n value: unknown,\n): value is Schema.Schema<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"ast\" in value &&\n \"make\" in value\n );\n}\n\n/**\n * Converts Effect Schema inputs to Standard Schema for SvelteKit.\n *\n * @since 2.0.0\n * @param value - Schema or handler input.\n * @returns Original value or Standard Schema view of an Effect Schema.\n */\nexport function normalize_validator(value: unknown): unknown {\n if (is_standard_schema(value) || !is_effect_schema(value)) {\n return value;\n }\n\n return Schema.toStandardSchemaV1(value as never);\n}\n","import type { RequestEvent as SvelteKitRequestEvent } from \"@sveltejs/kit\";\nimport { Context, Layer, ManagedRuntime } from \"effect\";\n\n/**\n * Subset of SvelteKit's `RequestEvent` that remote handlers typically access.\n *\n * @since 2.0.0\n */\nexport interface RequestEvent extends\n Pick<\n SvelteKitRequestEvent,\n | \"cookies\"\n | \"getClientAddress\"\n | \"locals\"\n | \"params\"\n | \"platform\"\n | \"request\"\n | \"route\"\n | \"url\"\n > {}\n\n/**\n * SvelteKit's `RequestEvent` exposed as an Effect {@link Context.Tag}.\n *\n * @example\n * ```ts\n * const event = yield* RequestEvent;\n * ```\n *\n * @since 2.0.0\n */\nexport const RequestEvent: Context.Reference<RequestEvent> = Context\n .Reference<RequestEvent>(\"@ser/RequestEvent\", {\n defaultValue: () => {\n throw new Error(\n \"[REQUEST_EVENT_UNAVAILABLE]: RequestEvent is only available during a remote call\",\n );\n },\n });\n\n/**\n * Builder for the server-side Effect runtime.\n *\n * @example\n * ```ts\n * ServerRuntime.make(Db.Live);\n * ```\n *\n * @since 2.0.0\n */\nexport class ServerRuntime {\n /**\n * Build and cache the server-side `ManagedRuntime`.\n *\n * @since 2.0.0\n * @param layer - Optional Effect layer to provide to the runtime.\n * @returns The configured ManagedRuntime.\n */\n static make<R = never>(\n layer?: Layer.Layer<R>,\n ): ManagedRuntime.ManagedRuntime<R, never> {\n const runtime = ManagedRuntime.make(\n layer ?? (Layer.empty as unknown as Layer.Layer<R>),\n );\n\n current_server_runtime = runtime as ManagedRuntime.ManagedRuntime<\n unknown,\n never\n >;\n\n return runtime;\n }\n}\n\nlet current_server_runtime:\n | ManagedRuntime.ManagedRuntime<unknown, never>\n | undefined;\n\n/**\n * Returns the active server runtime, creating a default one if needed.\n *\n * @example\n * ```ts\n * const runtime = get_server_runtime_or_throw();\n * ```\n *\n * @since 2.0.0\n * @returns The current ManagedRuntime instance.\n */\nexport function get_server_runtime_or_throw(): ManagedRuntime.ManagedRuntime<\n unknown,\n never\n> {\n if (!current_server_runtime) {\n current_server_runtime = ManagedRuntime.make(\n Layer.empty,\n ) as ManagedRuntime.ManagedRuntime<unknown, never>;\n }\n\n return current_server_runtime;\n}\n","import { run_remote_effect } from \"$/remote/server.ts\";\nimport { error as svelte_error, invalid } from \"@sveltejs/kit\";\nimport { Effect, Stream } from \"effect\";\n\nimport { get_server_runtime_or_throw, RequestEvent } from \"./runtime.ts\";\nimport type { RequestEvent as RequestEventShape } from \"./runtime.ts\";\nimport type { EffectLike, EffectRemoteLiveSource } from \"./types.ts\";\n\ntype ResolvedLiveSource<A> =\n | AsyncIterable<A>\n | AsyncIterator<A>\n | Iterable<A>\n | Iterator<A>;\n\ntype LiveHandlerResult<A> =\n | EffectLike<EffectRemoteLiveSource<A>>\n | EffectRemoteLiveSource<A>;\n\n/**\n * Checks whether a value is an Effect generator return object.\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value should be wrapped with `Effect.gen`.\n */\nexport function is_generator_result<A>(\n value: unknown,\n): value is Effect.gen.Return<A, unknown, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { next?: unknown }).next === \"function\"\n );\n}\n\n/**\n * Normalizes an Effect-like handler return value into an Effect.\n *\n * @since 2.0.0\n * @param value - Effect or generator return value.\n * @returns Normalized Effect.\n */\nexport function to_effect<A>(\n value: EffectLike<A>,\n): Effect.Effect<A, unknown, unknown> {\n if (is_generator_result<A>(value)) {\n return Effect.gen(() => value);\n }\n\n return value;\n}\n\n/**\n * Checks whether a value is a live query source SvelteKit can consume.\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value is an Effect Stream or native iterable source.\n */\nexport function is_live_source<A>(\n value: unknown,\n): value is EffectRemoteLiveSource<A> {\n if (Stream.isStream(value)) {\n return true;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const source = value as {\n readonly next?: unknown;\n readonly [Symbol.asyncIterator]?: unknown;\n readonly [Symbol.iterator]?: unknown;\n };\n\n return (\n typeof source.next === \"function\" ||\n typeof source[Symbol.asyncIterator] === \"function\" ||\n typeof source[Symbol.iterator] === \"function\"\n );\n}\n\n/**\n * Runs and normalizes a live query handler result with request services\n * available to Effect Streams.\n *\n * @since 2.0.0\n * @param value - Live query source or Effect that resolves to one.\n * @param event - SvelteKit request event for this remote call.\n * @returns Promise resolving with a source SvelteKit can stream.\n */\nexport function run_live_handler_source<A>(\n value: LiveHandlerResult<A>,\n event: RequestEventShape,\n): Promise<ResolvedLiveSource<A>> {\n const runtime = get_server_runtime_or_throw();\n const effect = Effect.provideService(\n to_live_source_effect(value),\n RequestEvent,\n event,\n ) as Effect.Effect<ResolvedLiveSource<A>, unknown, unknown>;\n\n return run_remote_effect(\n effect,\n runtime,\n svelte_invalid,\n svelte_remote_error,\n );\n}\n\nfunction to_live_source_effect<A>(\n value: LiveHandlerResult<A>,\n): Effect.Effect<ResolvedLiveSource<A>, unknown, unknown> {\n if (Stream.isStream(value)) {\n return Stream.toAsyncIterableEffect(\n value as Stream.Stream<A, unknown, unknown>,\n ) as Effect.Effect<ResolvedLiveSource<A>, unknown, unknown>;\n }\n\n if (is_native_live_source<A>(value)) {\n return Effect.succeed(value);\n }\n\n if (!Effect.isEffect(value)) {\n return Effect.fail(\n new Error(\n \"[INVALID_LIVE_QUERY_SOURCE]: Query.live handler must return an Effect Stream, Iterable, or AsyncIterable\",\n ),\n );\n }\n\n return Effect.flatMap(\n value as Effect.Effect<EffectRemoteLiveSource<A>, unknown, unknown>,\n to_live_source_effect,\n );\n}\n\nfunction is_native_live_source<A>(\n value: unknown,\n): value is ResolvedLiveSource<A> {\n return is_live_source<A>(value) && !Stream.isStream(value);\n}\n\n/**\n * Runs a remote handler Effect with the current request event provided.\n *\n * @since 2.0.0\n * @param value - Handler return value.\n * @param event - SvelteKit request event for this remote call.\n * @returns Promise resolving with the handler output.\n */\nexport function run_handler_effect<A>(\n value: EffectLike<A>,\n event: RequestEventShape,\n): Promise<A> {\n const runtime = get_server_runtime_or_throw();\n const effect = Effect.provideService(\n to_effect(value),\n RequestEvent,\n event,\n ) as Effect.Effect<A, unknown, unknown>;\n\n return run_remote_effect(\n effect,\n runtime,\n svelte_invalid,\n svelte_remote_error,\n );\n}\n\nconst svelte_invalid = (_status: number, body: unknown): never => {\n const issues = typeof body === \"object\" && body !== null &&\n Array.isArray((body as { issues?: unknown }).issues)\n ? (body as { issues: unknown[] }).issues\n : [String(body)];\n\n invalid(...(issues as never[]));\n};\n\nconst svelte_remote_error = (status: number, body: unknown): never => {\n svelte_error(status as never, body as never);\n};\n","import { create_form_error } from \"$/remote/shared.ts\";\nimport { Effect } from \"effect\";\nimport type { FormIssue } from \"$/remote/shared.ts\";\n\nimport type { FormInvalid } from \"./types.ts\";\n\n/**\n * Creates a path-aware proxy for remote form validation failures.\n *\n * @since 2.0.0\n * @param path - Current nested form path.\n * @returns Callable invalid proxy for this path.\n */\nexport function make_invalid_proxy(\n path: readonly (string | number)[] = [],\n): FormInvalid {\n const invalid_at_path = (message: string) =>\n Effect.fail(\n create_form_error([{ message, path: [...path] } satisfies FormIssue]),\n );\n\n return new Proxy(invalid_at_path, {\n get(_target, property) {\n if (typeof property === \"symbol\") {\n return undefined;\n }\n\n return make_invalid_proxy([...path, property]);\n },\n }) as FormInvalid;\n}\n","import { getRequestEvent as get_native_request_event } from \"$app/server\";\nimport { normalize_remote_helper_error } from \"$/remote/server.ts\";\n\nimport { run_handler_effect, run_live_handler_source } from \"./effects.ts\";\nimport { make_invalid_proxy } from \"./invalid.ts\";\nimport { is_handler } from \"./schema.ts\";\nimport type { RequestEvent } from \"./runtime.ts\";\nimport type {\n EffectLike,\n EffectRemoteLiveSource,\n RemoteFormHandler,\n RemoteHandler,\n} from \"./types.ts\";\n\ntype RemoteLiveHandler<Input = unknown, A = unknown> =\n | EffectLike<EffectRemoteLiveSource<A>>\n | EffectRemoteLiveSource<A>\n | ((input: Input) =>\n | EffectLike<EffectRemoteLiveSource<A>>\n | EffectRemoteLiveSource<A>);\n\nlet running_remote_effect_handlers = 0;\n\n/**\n * Reports whether SER is currently executing user remote handler code.\n *\n * @example\n * ```ts\n * if (is_running_remote_effect_handler()) {\n * return query();\n * }\n * ```\n *\n * @since 2.0.0\n * @returns Whether a remote handler wrapper is currently active.\n * @internal\n */\nexport function is_running_remote_effect_handler(): boolean {\n return running_remote_effect_handlers > 0;\n}\n\n/**\n * Builds the wrapper passed to native query, command, and prerender helpers.\n *\n * @since 2.0.0\n * @param handler - Effect handler or already-built Effect-like value.\n * @param helper_name - Remote helper name for error normalization.\n * @returns Native SvelteKit handler wrapper.\n */\nexport function make_remote_wrapper(\n handler: RemoteHandler | EffectLike,\n helper_name: string,\n): (input: unknown) => Promise<unknown> {\n return async (input: unknown) => {\n let event: RequestEvent;\n\n try {\n event = get_native_request_event() as unknown as RequestEvent;\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, helper_name);\n }\n\n return await run_inside_remote_effect_handler(() => {\n try {\n const result = is_handler(handler) ? handler(input) : handler;\n\n return run_handler_effect(result, event);\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, helper_name);\n }\n });\n };\n}\n\n/**\n * Builds the wrapper passed to native live query helpers.\n *\n * @since 2.0.0\n * @param handler - Effect-aware live source handler.\n * @param helper_name - Remote helper name for error normalization.\n * @returns Native SvelteKit live query wrapper.\n */\nexport function make_remote_live_wrapper<Input, A>(\n handler: RemoteLiveHandler<Input, A>,\n helper_name: string,\n): (input: unknown) => Promise<unknown> {\n return async (input: unknown) => {\n let event: RequestEvent;\n\n try {\n event = get_native_request_event() as unknown as RequestEvent;\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, helper_name);\n }\n\n return await run_inside_remote_effect_handler(() => {\n try {\n const result = typeof handler === \"function\"\n ? handler(input as Input)\n : handler;\n\n return run_live_handler_source(result, event);\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, helper_name);\n }\n });\n };\n}\n\n/**\n * Builds the wrapper passed to native form helpers.\n *\n * @since 2.0.0\n * @param handler - Effect-aware form handler.\n * @param helper_name - Remote helper name for error normalization.\n * @returns Native SvelteKit form handler wrapper.\n */\nexport function make_remote_form_wrapper<Input, A>(\n handler: RemoteFormHandler<Input, A>,\n helper_name: string,\n): (data: unknown, issue: unknown) => Promise<unknown> {\n return async (data: unknown, issue: unknown) => {\n let event: RequestEvent;\n\n try {\n event = get_native_request_event() as unknown as RequestEvent;\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, helper_name);\n }\n\n return await run_inside_remote_effect_handler(() => {\n const invalid_proxy = make_invalid_proxy();\n\n try {\n const result = handler({\n data: data as Input,\n invalid: invalid_proxy,\n issue,\n });\n\n return run_handler_effect(result, event);\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, helper_name);\n }\n });\n };\n}\n\nasync function run_inside_remote_effect_handler<A>(\n run: () => Promise<A>,\n): Promise<A> {\n running_remote_effect_handlers += 1;\n\n try {\n return await run();\n } finally {\n running_remote_effect_handlers -= 1;\n }\n}\n","import {\n command as native_command,\n form as native_form,\n getRequestEvent as get_native_request_event,\n prerender as native_prerender,\n query as native_query,\n} from \"$app/server\";\nimport { copy_property_descriptors } from \"$/internal/descriptors.ts\";\nimport { normalize_remote_helper_error } from \"$/remote/server.ts\";\nimport type { RemoteFormInput } from \"@sveltejs/kit\";\nimport { Effect, type Schema } from \"effect\";\n\nimport { is_handler, is_unchecked, normalize_validator } from \"./schema.ts\";\nimport {\n is_running_remote_effect_handler,\n make_remote_form_wrapper,\n make_remote_live_wrapper,\n make_remote_wrapper,\n} from \"./wrappers.ts\";\nimport type {\n EffectLike,\n EffectRemoteBatchHandler,\n EffectRemoteCommand,\n EffectRemoteForm,\n EffectRemoteLiveQuery,\n EffectRemoteLiveQueryFunction,\n EffectRemoteLiveQueryResource,\n EffectRemoteLiveSource,\n EffectRemoteQuery,\n EffectRemoteQueryFunction,\n PrerenderOptions,\n RemoteFormHandler,\n RemoteHandler,\n SchemaInput,\n} from \"./types.ts\";\n\ntype FormSchemaEncodedInput<S> = S extends Schema.Top\n ? S[\"Encoded\"] extends RemoteFormInput ? S[\"Encoded\"]\n : never\n : never;\n\ntype NativeQueryLike<Input = unknown> = (input: Input) => unknown;\n\ntype EffectRemoteResource<Output> =\n | EffectRemoteLiveQueryResource<Output>\n | EffectRemoteQuery<Output>;\n\ntype RemoteLiveHandler<Input = unknown, A = unknown> =\n | EffectLike<EffectRemoteLiveSource<A>>\n | EffectRemoteLiveSource<A>\n | ((input: Input) =>\n | EffectLike<EffectRemoteLiveSource<A>>\n | EffectRemoteLiveSource<A>);\n\ninterface QueryFactory {\n <A>(\n validate_or_handler: EffectLike<A> | RemoteHandler<void, A>,\n ): EffectRemoteQueryFunction<void, A>;\n <Input, A>(\n validate_or_handler: \"unchecked\",\n maybe_handler: RemoteHandler<Input, A>,\n ): EffectRemoteQueryFunction<Input, A>;\n <S extends Schema.Schema<unknown>, A>(\n validate_or_handler: S,\n maybe_handler: RemoteHandler<SchemaInput<S>, A>,\n ): EffectRemoteQueryFunction<SchemaInput<S>, A>;\n\n readonly batch: typeof QueryBatch;\n readonly live: typeof QueryLive;\n}\n\nfunction to_effect_query<Input, Output>(\n native: NativeQueryLike<Input>,\n): EffectRemoteQueryFunction<Input, Output> {\n const wrapped = ((input: Input) => {\n if (is_current_remote_request()) {\n return (native as (input: Input) => unknown)(input);\n }\n\n const resource = (native as (input: Input) => unknown)(input);\n const effect = Effect.tryPromise({\n try: () => Promise.resolve(resource),\n catch: (error: unknown) => error,\n }) as unknown as EffectRemoteQuery<Output>;\n\n attach_query_resource_methods(resource, effect);\n\n return effect;\n }) as unknown as EffectRemoteQueryFunction<Input, Output>;\n\n copy_property_descriptors(native, wrapped);\n\n return wrapped;\n}\n\nfunction is_current_remote_request(): boolean {\n if (is_running_remote_effect_handler()) {\n return false;\n }\n\n try {\n const event = get_native_request_event() as { isRemoteRequest?: boolean };\n\n return event.isRemoteRequest === true;\n } catch {\n return false;\n }\n}\n\nfunction to_effect_live_query<Input, Output>(\n native: NativeQueryLike<Input>,\n): EffectRemoteLiveQueryFunction<Input, Output> {\n const wrapped = ((input: Input) =>\n Effect.try({\n try: () => {\n const resource = (native as (input: Input) => unknown)(input);\n\n return make_live_resource<Output>(resource);\n },\n catch: (error: unknown) => error,\n }) as unknown as EffectRemoteLiveQuery<\n Output\n >) as unknown as EffectRemoteLiveQueryFunction<\n Input,\n Output\n >;\n\n copy_property_descriptors(native, wrapped);\n\n return wrapped;\n}\n\ntype NativeRemoteResource<Output> = {\n readonly current?: Output;\n readonly error?: unknown;\n readonly loading?: boolean;\n readonly ready?: boolean;\n};\n\ntype NativeQueryResource<Output> = NativeRemoteResource<Output> & {\n readonly refresh?: () => Promise<void>;\n readonly set?: (value: Output) => void;\n readonly withOverride?: (update: (current: Output) => Output) => unknown;\n};\n\ntype NativeLiveQueryResource<Output> =\n & NativeRemoteResource<Output>\n & Partial<AsyncIterable<Output>>\n & {\n readonly connected?: boolean;\n readonly done?: boolean;\n readonly reconnect?: () => Promise<void>;\n };\n\nfunction is_query_resource<Output>(\n resource: unknown,\n): resource is NativeQueryResource<Output> {\n const resource_type = typeof resource;\n\n return (\n (resource_type === \"object\" && resource !== null) ||\n resource_type === \"function\"\n );\n}\n\nfunction is_live_resource<Output>(\n resource: unknown,\n): resource is NativeLiveQueryResource<Output> {\n const resource_type = typeof resource;\n\n return (\n (resource_type === \"object\" && resource !== null) ||\n resource_type === \"function\"\n );\n}\n\nfunction attach_remote_resource_getters<Output>(\n resource: unknown,\n effect: EffectRemoteResource<Output>,\n): void {\n const methods = is_query_resource<Output>(resource) ? resource : undefined;\n const keys = [\"current\", \"error\", \"loading\", \"ready\"] as const;\n\n if (!methods) {\n return;\n }\n\n for (const key of keys) {\n if (!(key in methods)) {\n continue;\n }\n\n Object.defineProperty(effect, key, {\n configurable: true,\n get: () => methods[key],\n });\n }\n}\n\nfunction attach_query_resource_methods<Output>(\n resource: unknown,\n effect: EffectRemoteQuery<Output>,\n): void {\n const methods = is_query_resource<Output>(resource) ? resource : undefined;\n const refresh = methods?.refresh;\n const set = methods?.set;\n const with_override = methods?.withOverride;\n\n attach_remote_resource_getters(resource, effect);\n\n if (!methods) {\n return;\n }\n\n if (typeof refresh === \"function\") {\n Object.defineProperty(effect, \"refresh\", {\n configurable: true,\n value: () =>\n Effect.tryPromise({\n try: () => Promise.resolve(refresh.call(resource)),\n catch: (error: unknown) => error,\n }),\n });\n }\n\n if (typeof set === \"function\") {\n Object.defineProperty(effect, \"set\", {\n configurable: true,\n value: (value: Output) => set.call(resource, value),\n });\n }\n\n if (typeof with_override === \"function\") {\n Object.defineProperty(effect, \"withOverride\", {\n configurable: true,\n value: (update: (current: Output) => Output) =>\n with_override.call(resource, update),\n });\n }\n}\n\nfunction attach_live_resource_methods<Output>(\n resource: unknown,\n effect: EffectRemoteLiveQueryResource<Output>,\n): void {\n const methods = is_live_resource<Output>(resource) ? resource : undefined;\n const reconnect = methods?.reconnect;\n const async_iterator = methods?.[Symbol.asyncIterator];\n const keys = [\n \"connected\",\n \"current\",\n \"done\",\n \"error\",\n \"loading\",\n \"ready\",\n ] as const;\n\n if (!methods) {\n return;\n }\n\n for (const key of keys) {\n if (!(key in methods)) {\n continue;\n }\n\n Object.defineProperty(effect, key, {\n configurable: true,\n get: () => methods[key],\n });\n }\n\n if (typeof reconnect === \"function\") {\n Object.defineProperty(effect, \"reconnect\", {\n configurable: true,\n value: () =>\n Effect.tryPromise({\n try: () => Promise.resolve(reconnect.call(resource)),\n catch: (error: unknown) => error,\n }),\n });\n }\n\n if (typeof async_iterator === \"function\") {\n Object.defineProperty(effect, Symbol.asyncIterator, {\n configurable: true,\n value: () => async_iterator.call(resource),\n });\n }\n}\n\nfunction make_live_resource<Output>(\n resource: unknown,\n): EffectRemoteLiveQueryResource<Output> {\n const live_resource = {} as EffectRemoteLiveQueryResource<Output>;\n\n attach_live_resource_methods(resource, live_resource);\n\n return live_resource;\n}\n\n/**\n * Factory for a read-only remote query function.\n *\n * @example\n * ```ts\n * export const getUser = Query(Schema.Struct({ id: Schema.String }), (input) =>\n * Effect.succeed(input.id)\n * );\n * ```\n *\n * @since 2.0.0\n * @param validate_or_handler - A schema, `\"unchecked\"`, or no-arg handler.\n * @param maybe_handler - Handler used when a validator is supplied.\n * @returns A SvelteKit query function.\n */\nfunction QueryRoot<A>(\n validate_or_handler: EffectLike<A> | RemoteHandler<void, A>,\n): EffectRemoteQueryFunction<void, A>;\nfunction QueryRoot<Input, A>(\n validate_or_handler: \"unchecked\",\n maybe_handler: RemoteHandler<Input, A>,\n): EffectRemoteQueryFunction<Input, A>;\nfunction QueryRoot<S extends Schema.Schema<unknown>, A>(\n validate_or_handler: S,\n maybe_handler: RemoteHandler<SchemaInput<S>, A>,\n): EffectRemoteQueryFunction<SchemaInput<S>, A>;\nfunction QueryRoot(\n validate_or_handler: unknown,\n maybe_handler?: RemoteHandler,\n): unknown {\n try {\n if (maybe_handler) {\n return to_effect_query(native_query(\n normalize_validator(validate_or_handler) as never,\n make_remote_wrapper(maybe_handler, \"Query\") as never,\n ) as ReturnType<typeof native_query>);\n }\n\n if (is_unchecked(validate_or_handler)) {\n throw new Error(\n \"[MISSING_REMOTE_HANDLER]: Query('unchecked', handler) requires a handler\",\n );\n }\n\n return to_effect_query(native_query(\n make_remote_wrapper(\n validate_or_handler as RemoteHandler,\n \"Query\",\n ) as never,\n ) as ReturnType<typeof native_query>);\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, \"Query\");\n }\n}\n\n/**\n * Factory for a batched read-only remote query function.\n *\n * @since 2.0.0\n * @param validate_or_handler - A schema or `\"unchecked\"` sentinel.\n * @param maybe_handler - Handler receiving validated inputs as one batch.\n * @returns A SvelteKit batch query function.\n */\nfunction QueryBatch<Input, A>(\n validate_or_handler: \"unchecked\",\n maybe_handler: EffectRemoteBatchHandler<Input, A>,\n): EffectRemoteQueryFunction<Input, A>;\nfunction QueryBatch<S extends Schema.Schema<unknown>, A>(\n validate_or_handler: S,\n maybe_handler: EffectRemoteBatchHandler<SchemaInput<S>, A>,\n): EffectRemoteQueryFunction<SchemaInput<S>, A>;\nfunction QueryBatch(\n validate_or_handler: unknown,\n maybe_handler?: EffectRemoteBatchHandler,\n): unknown {\n try {\n if (!maybe_handler) {\n throw new Error(\n \"[MISSING_REMOTE_HANDLER]: Query.batch requires a handler\",\n );\n }\n\n return to_effect_query(native_query.batch(\n normalize_validator(validate_or_handler) as never,\n make_remote_wrapper(\n maybe_handler as RemoteHandler,\n \"Query.batch\",\n ) as never,\n ) as NativeQueryLike);\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, \"Query.batch\");\n }\n}\n\n/**\n * Factory for a live remote query function.\n *\n * @since 2.0.0\n * @param validate_or_handler - A schema, `\"unchecked\"`, or no-arg live handler.\n * @param maybe_handler - Handler used when a validator is supplied.\n * @returns A SvelteKit live query function.\n */\nfunction QueryLive<A>(\n validate_or_handler: RemoteLiveHandler<void, A>,\n): EffectRemoteLiveQueryFunction<void, A>;\nfunction QueryLive<Input, A>(\n validate_or_handler: \"unchecked\",\n maybe_handler: RemoteLiveHandler<Input, A>,\n): EffectRemoteLiveQueryFunction<Input, A>;\nfunction QueryLive<S extends Schema.Schema<unknown>, A>(\n validate_or_handler: S,\n maybe_handler: RemoteLiveHandler<SchemaInput<S>, A>,\n): EffectRemoteLiveQueryFunction<SchemaInput<S>, A>;\nfunction QueryLive(\n validate_or_handler: unknown,\n maybe_handler?: RemoteLiveHandler,\n): unknown {\n try {\n if (maybe_handler) {\n return to_effect_live_query(native_query.live(\n normalize_validator(validate_or_handler) as never,\n make_remote_live_wrapper(\n maybe_handler,\n \"Query.live\",\n ) as never,\n ) as NativeQueryLike);\n }\n\n if (is_unchecked(validate_or_handler)) {\n throw new Error(\n \"[MISSING_REMOTE_HANDLER]: Query.live('unchecked', handler) requires a handler\",\n );\n }\n\n return to_effect_live_query(native_query.live(\n make_remote_live_wrapper(\n validate_or_handler as RemoteLiveHandler,\n \"Query.live\",\n ) as never,\n ) as NativeQueryLike);\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, \"Query.live\");\n }\n}\n\n/**\n * Factory for read-only remote query functions.\n *\n * @example\n * ```ts\n * export const getUser = Query(Schema.Struct({ id: Schema.String }), (input) =>\n * Effect.succeed(input.id)\n * );\n *\n * export const getUserBatch = Query.batch(Schema.String, (ids) =>\n * Effect.succeed((id) => ids.includes(id))\n * );\n * ```\n *\n * @since 2.0.0\n */\nexport const Query: QueryFactory = Object.assign(QueryRoot, {\n batch: QueryBatch,\n live: QueryLive,\n});\n\n/**\n * Factory for a write-oriented remote command function.\n *\n * @since 2.0.0\n * @param validate_or_handler - A schema, `\"unchecked\"`, or no-arg handler.\n * @param maybe_handler - Handler used when a validator is supplied.\n * @returns A SvelteKit command function.\n */\nexport function Command<A>(\n validate_or_handler: EffectLike<A> | RemoteHandler<void, A>,\n): EffectRemoteCommand<void, A>;\nexport function Command<Input, A>(\n validate_or_handler: \"unchecked\",\n maybe_handler: RemoteHandler<Input, A>,\n): EffectRemoteCommand<Input, A>;\nexport function Command<S extends Schema.Schema<unknown>, A>(\n validate_or_handler: S,\n maybe_handler: RemoteHandler<SchemaInput<S>, A>,\n): EffectRemoteCommand<SchemaInput<S>, A>;\nexport function Command(\n validate_or_handler: unknown,\n maybe_handler?: RemoteHandler,\n): unknown {\n try {\n if (maybe_handler) {\n return native_command(\n normalize_validator(validate_or_handler) as never,\n make_remote_wrapper(maybe_handler, \"Command\") as never,\n );\n }\n\n if (is_unchecked(validate_or_handler)) {\n throw new Error(\n \"[MISSING_REMOTE_HANDLER]: Command('unchecked', handler) requires a handler\",\n );\n }\n\n return native_command(\n make_remote_wrapper(\n validate_or_handler as RemoteHandler,\n \"Command\",\n ) as never,\n ) as ReturnType<typeof native_command>;\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, \"Command\");\n }\n}\n\n/**\n * Factory for a remote form handler.\n *\n * @example\n * ```ts\n * export const SignIn = Form(signInSchema, ({ data, invalid }) =>\n * Effect.gen(function* () {\n * if (!data.email.includes(\"@\")) {\n * return yield* invalid.email(\"Use an email address.\");\n * }\n *\n * return { email: data.email };\n * })\n * );\n * ```\n *\n * @since 2.0.0\n * @param validate_or_handler - A schema, `\"unchecked\"`, or no-arg handler.\n * @param maybe_handler - Handler used when a validator is supplied.\n * @returns A SvelteKit form function.\n */\nexport function Form<A>(\n validate_or_handler: EffectLike<A> | RemoteFormHandler<void, A>,\n): EffectRemoteForm<void, A>;\nexport function Form<Input extends RemoteFormInput, A>(\n validate_or_handler: \"unchecked\",\n maybe_handler: RemoteFormHandler<Input, A>,\n): EffectRemoteForm<Input, A>;\nexport function Form<S extends Schema.Top, A>(\n validate_or_handler: S,\n maybe_handler: RemoteFormHandler<SchemaInput<S>, A>,\n): EffectRemoteForm<FormSchemaEncodedInput<S>, A>;\nexport function Form(\n validate_or_handler: unknown,\n maybe_handler?: RemoteFormHandler<never, unknown>,\n): unknown {\n try {\n if (maybe_handler) {\n return native_form(\n normalize_validator(validate_or_handler) as never,\n make_remote_form_wrapper(maybe_handler, \"Form\") as never,\n );\n }\n\n if (is_unchecked(validate_or_handler)) {\n throw new Error(\n \"[MISSING_REMOTE_HANDLER]: Form('unchecked', handler) requires a handler\",\n );\n }\n\n const inputless_handler: RemoteFormHandler<void, unknown> = (\n { data, invalid, issue },\n ) => {\n if (is_handler(validate_or_handler)) {\n return validate_or_handler({ data, invalid, issue });\n }\n\n return validate_or_handler as EffectLike;\n };\n\n return native_form(\n make_remote_form_wrapper(inputless_handler, \"Form\") as never,\n ) as unknown as ReturnType<typeof native_form>;\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, \"Form\");\n }\n}\n\n/**\n * Factory for a prerenderable remote function.\n *\n * @since 2.0.0\n * @param validate_or_handler - A schema, `\"unchecked\"`, or no-arg handler.\n * @param maybe_handler_or_options - Handler or prerender options.\n * @param maybe_options - Prerender options used with a validator.\n * @returns A SvelteKit prerender function.\n */\nexport function Prerender(\n validate_or_handler: unknown,\n maybe_handler_or_options?: RemoteHandler | PrerenderOptions,\n maybe_options?: PrerenderOptions,\n): ReturnType<typeof native_prerender> {\n try {\n if (is_handler(maybe_handler_or_options)) {\n return native_prerender(\n normalize_validator(validate_or_handler) as never,\n make_remote_wrapper(maybe_handler_or_options, \"Prerender\") as never,\n maybe_options as never,\n );\n }\n\n if (is_unchecked(validate_or_handler)) {\n throw new Error(\n \"[MISSING_REMOTE_HANDLER]: Prerender('unchecked', handler) requires a handler\",\n );\n }\n\n return native_prerender(\n make_remote_wrapper(\n validate_or_handler as RemoteHandler,\n \"Prerender\",\n ) as never,\n maybe_handler_or_options as never,\n ) as ReturnType<typeof native_prerender>;\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, \"Prerender\");\n }\n}\n","import {\n error as svelte_error,\n redirect as svelte_redirect,\n} from \"@sveltejs/kit\";\nimport { Effect } from \"effect\";\n\nconst error_status_codes = {\n ProxyAuthenticationRequired: 407,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n NetworkAuthenticationRequired: 511,\n HttpVersionNotSupported: 505,\n UnprocessableContent: 422,\n UnprocessableEntity: 422,\n InternalServerError: 500,\n FailedDependency: 424,\n PreconditionRequired: 428,\n ServiceUnavailable: 503,\n MisdirectedRequest: 421,\n InsufficientStorage: 507,\n VariantAlsoNegotiates: 506,\n PreconditionFailed: 412,\n MethodNotAllowed: 405,\n GatewayTimeout: 504,\n PaymentRequired: 402,\n UpgradeRequired: 426,\n TooManyRequests: 429,\n LengthRequired: 411,\n NotAcceptable: 406,\n RequestTimeout: 408,\n ContentTooLarge: 413,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n BadRequest: 400,\n Unauthorized: 401,\n Forbidden: 403,\n NotFound: 404,\n Conflict: 409,\n Gone: 410,\n Locked: 423,\n TooEarly: 425,\n NotImplemented: 501,\n BadGateway: 502,\n LoopDetected: 508,\n NotExtended: 510,\n} as const;\n\nconst redirect_status_codes = {\n MovedPermanently: 301,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n MultipleChoices: 300,\n NotModified: 304,\n SwitchProxy: 306,\n SeeOther: 303,\n UseProxy: 305,\n Found: 302,\n} as const;\n\ntype SvelteErrorBody = Parameters<typeof svelte_error>[1];\n\n/**\n * Named HTTP status accepted by the {@link Error} helper.\n *\n * @example\n * ```ts\n * const status: ErrorStatusName = \"NotFound\";\n * ```\n *\n * @since 2.3.0\n */\nexport type ErrorStatusName = keyof typeof error_status_codes;\n\n/**\n * Numeric or named HTTP status accepted by the {@link Error} helper.\n *\n * @example\n * ```ts\n * const status: ErrorStatus = \"InternalServerError\";\n * ```\n *\n * @since 2.3.0\n */\nexport type ErrorStatus = ErrorStatusName | number;\n\n/**\n * Named HTTP status accepted by the {@link Redirect} helper.\n *\n * @example\n * ```ts\n * const status: RedirectStatusName = \"TemporaryRedirect\";\n * ```\n *\n * @since 2.3.0\n */\nexport type RedirectStatusName = keyof typeof redirect_status_codes;\n\n/**\n * Numeric or named HTTP status accepted by the {@link Redirect} helper.\n *\n * @example\n * ```ts\n * const status: RedirectStatus = \"SeeOther\";\n * ```\n *\n * @since 2.3.0\n */\nexport type RedirectStatus = RedirectStatusName | number;\n\n/**\n * Callable shape for the exported {@link Error} helper.\n *\n * @example\n * ```ts\n * const fail_not_found: ErrorEffectFactory = Error;\n * ```\n *\n * @since 2.3.0\n */\nexport interface ErrorEffectFactory {\n /**\n * Creates an Effect that throws SvelteKit's HTTP error control-flow value.\n *\n * @example\n * ```ts\n * return yield* Error(\"NotFound\", \"Post not found\");\n * ```\n *\n * @since 2.3.0\n * @param status - Numeric HTTP status or PascalCase status name to pass to\n * SvelteKit's `error` helper.\n * @param body - Optional SvelteKit error body or message forwarded unchanged\n * to SvelteKit.\n * @returns An Effect that never succeeds because SvelteKit takes over request\n * control flow.\n */\n (\n status: ErrorStatus,\n body?: SvelteErrorBody,\n ): Effect.Effect<never, never, never>;\n}\n\n/**\n * Callable shape for the exported {@link Redirect} helper.\n *\n * @example\n * ```ts\n * const redirect_after_save: RedirectEffectFactory = Redirect;\n * ```\n *\n * @since 2.3.0\n */\nexport interface RedirectEffectFactory {\n /**\n * Creates an Effect that throws SvelteKit's redirect control-flow value.\n *\n * @example\n * ```ts\n * return yield* Redirect(\"SeeOther\", \"/posts\");\n * ```\n *\n * @since 2.3.0\n * @param status - Numeric redirect status or PascalCase status name to pass\n * to SvelteKit's `redirect` helper.\n * @param location - Target URL forwarded unchanged to SvelteKit.\n * @returns An Effect that never succeeds because SvelteKit takes over request\n * control flow.\n */\n (\n status: RedirectStatus,\n location: string | URL,\n ): Effect.Effect<never, never, never>;\n}\n\n/**\n * Creates an Effect that raises SvelteKit's HTTP error control flow.\n *\n * @example\n * ```ts\n * return yield* Error(\"NotFound\", \"Post not found\");\n * ```\n *\n * @since 2.3.0\n * @param status - Numeric HTTP status or PascalCase status name to pass to\n * SvelteKit's `error` helper.\n * @param body - Optional SvelteKit error body or message forwarded unchanged\n * to SvelteKit.\n * @returns An Effect that never succeeds because SvelteKit takes over request\n * control flow.\n */\nexport const Error: ErrorEffectFactory = (status, body) => {\n const resolved_status = resolve_error_status(status);\n\n return Effect.sync(() => {\n svelte_error(resolved_status, body);\n });\n};\n\n/**\n * Creates an Effect that raises SvelteKit's redirect control flow.\n *\n * @example\n * ```ts\n * return yield* Redirect(\"SeeOther\", \"/posts\");\n * ```\n *\n * @since 2.3.0\n * @param status - Numeric redirect status or PascalCase status name to pass to\n * SvelteKit's `redirect` helper.\n * @param location - Target URL forwarded unchanged to SvelteKit.\n * @returns An Effect that never succeeds because SvelteKit takes over request\n * control flow.\n */\nexport const Redirect: RedirectEffectFactory = (status, location) => {\n const resolved_status = resolve_redirect_status(status);\n\n return Effect.sync(() => {\n svelte_redirect(resolved_status, location);\n });\n};\n\nfunction resolve_error_status(status: ErrorStatus): number {\n if (typeof status === \"number\") {\n return status;\n }\n\n return error_status_codes[status];\n}\n\nfunction resolve_redirect_status(status: RedirectStatus): number {\n if (typeof status === \"number\") {\n return status;\n }\n\n return redirect_status_codes[status];\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","names":["get_native_request_event","get_native_request_event","native_query","native_command","native_form","native_prerender","Error"],"sources":["../../modules/svelte-effect-runtime/src/server/schema.ts","../../modules/svelte-effect-runtime/src/server/runtime.ts","../../modules/svelte-effect-runtime/src/server/effects.ts","../../modules/svelte-effect-runtime/src/server/invalid.ts","../../modules/svelte-effect-runtime/src/server/wrappers.ts","../../modules/svelte-effect-runtime/src/server/factories.ts","../../modules/svelte-effect-runtime/src/server/control-flow.ts"],"sourcesContent":["import { Schema } from \"effect\";\n\nimport type { RemoteHandler, StandardSchema } from \"./types.ts\";\n\n/**\n * Checks whether a value is the string sentinel for unchecked remotes.\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value is `\"unchecked\"`.\n */\nexport function is_unchecked(value: unknown): value is \"unchecked\" {\n return value === \"unchecked\";\n}\n\n/**\n * Checks whether a value is a remote handler function.\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value is callable as a handler.\n */\nexport function is_handler(value: unknown): value is RemoteHandler {\n return typeof value === \"function\";\n}\n\n/**\n * Checks whether a value implements the Standard Schema contract.\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value is a Standard Schema.\n */\nexport function is_standard_schema(value: unknown): value is StandardSchema {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"~standard\" in value\n );\n}\n\n/**\n * Checks whether a value looks like an Effect Schema.\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value should be converted to Standard Schema.\n */\nexport function is_effect_schema(\n value: unknown,\n): value is Schema.Schema<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"ast\" in value &&\n \"make\" in value\n );\n}\n\n/**\n * Converts Effect Schema inputs to Standard Schema for SvelteKit.\n *\n * @since 2.0.0\n * @param value - Schema or handler input.\n * @returns Original value or Standard Schema view of an Effect Schema.\n */\nexport function normalize_validator(value: unknown): unknown {\n if (is_standard_schema(value) || !is_effect_schema(value)) {\n return value;\n }\n\n return Schema.toStandardSchemaV1(value as never);\n}\n","import type { RequestEvent as SvelteKitRequestEvent } from \"@sveltejs/kit\";\nimport { Context, Layer, ManagedRuntime } from \"effect\";\n\n/**\n * Subset of SvelteKit's `RequestEvent` that remote handlers typically access.\n *\n * @since 2.0.0\n */\nexport interface RequestEvent extends\n Pick<\n SvelteKitRequestEvent,\n | \"cookies\"\n | \"getClientAddress\"\n | \"locals\"\n | \"params\"\n | \"platform\"\n | \"request\"\n | \"route\"\n | \"url\"\n > {}\n\n/**\n * SvelteKit's `RequestEvent` exposed as an Effect {@link Context.Tag}.\n *\n * @example\n * ```ts\n * const event = yield* RequestEvent;\n * ```\n *\n * @since 2.0.0\n */\nexport const RequestEvent: Context.Reference<RequestEvent> = Context\n .Reference<RequestEvent>(\"@ser/RequestEvent\", {\n defaultValue: () => {\n throw new Error(\n \"[REQUEST_EVENT_UNAVAILABLE]: RequestEvent is only available during a remote call\",\n );\n },\n });\n\n/**\n * Builder for the server-side Effect runtime.\n *\n * @example\n * ```ts\n * ServerRuntime.make(Db.Live);\n * ```\n *\n * @since 2.0.0\n */\nexport class ServerRuntime {\n /**\n * Build and cache the server-side `ManagedRuntime`.\n *\n * @since 2.0.0\n * @param layer - Optional Effect layer to provide to the runtime.\n * @returns The configured ManagedRuntime.\n */\n static make<R = never>(\n layer?: Layer.Layer<R>,\n ): ManagedRuntime.ManagedRuntime<R, never> {\n const runtime = ManagedRuntime.make(\n layer ?? (Layer.empty as unknown as Layer.Layer<R>),\n );\n\n current_server_runtime = runtime as ManagedRuntime.ManagedRuntime<\n unknown,\n never\n >;\n\n return runtime;\n }\n}\n\nlet current_server_runtime:\n | ManagedRuntime.ManagedRuntime<unknown, never>\n | undefined;\n\n/**\n * Returns the active server runtime, creating a default one if needed.\n *\n * @example\n * ```ts\n * const runtime = get_server_runtime_or_throw();\n * ```\n *\n * @since 2.0.0\n * @returns The current ManagedRuntime instance.\n */\nexport function get_server_runtime_or_throw(): ManagedRuntime.ManagedRuntime<\n unknown,\n never\n> {\n if (!current_server_runtime) {\n current_server_runtime = ManagedRuntime.make(\n Layer.empty,\n ) as ManagedRuntime.ManagedRuntime<unknown, never>;\n }\n\n return current_server_runtime;\n}\n","import { run_remote_effect } from \"$/remote/server.ts\";\nimport { error as svelte_error, invalid } from \"@sveltejs/kit\";\nimport { Effect, Stream } from \"effect\";\n\nimport { get_server_runtime_or_throw, RequestEvent } from \"./runtime.ts\";\nimport type { RequestEvent as RequestEventShape } from \"./runtime.ts\";\nimport type { EffectLike, EffectRemoteLiveSource } from \"./types.ts\";\n\ntype ResolvedLiveSource<A> =\n | AsyncIterable<A>\n | AsyncIterator<A>\n | Iterable<A>\n | Iterator<A>;\n\ntype LiveHandlerResult<A> =\n | EffectLike<EffectRemoteLiveSource<A>>\n | EffectRemoteLiveSource<A>;\n\n/**\n * Checks whether a value is an Effect generator return object.\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value should be wrapped with `Effect.gen`.\n */\nexport function is_generator_result<A>(\n value: unknown,\n): value is Effect.gen.Return<A, unknown, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { next?: unknown }).next === \"function\"\n );\n}\n\n/**\n * Normalizes an Effect-like handler return value into an Effect.\n *\n * @since 2.0.0\n * @param value - Effect or generator return value.\n * @returns Normalized Effect.\n */\nexport function to_effect<A>(\n value: EffectLike<A>,\n): Effect.Effect<A, unknown, unknown> {\n if (is_generator_result<A>(value)) {\n return Effect.gen(() => value);\n }\n\n return value;\n}\n\n/**\n * Checks whether a value is a live query source SvelteKit can consume.\n *\n * @since 2.0.0\n * @param value - Value to inspect.\n * @returns Whether the value is an Effect Stream or native iterable source.\n */\nexport function is_live_source<A>(\n value: unknown,\n): value is EffectRemoteLiveSource<A> {\n if (Stream.isStream(value)) {\n return true;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const source = value as {\n readonly next?: unknown;\n readonly [Symbol.asyncIterator]?: unknown;\n readonly [Symbol.iterator]?: unknown;\n };\n\n return (\n typeof source.next === \"function\" ||\n typeof source[Symbol.asyncIterator] === \"function\" ||\n typeof source[Symbol.iterator] === \"function\"\n );\n}\n\n/**\n * Runs and normalizes a live query handler result with request services\n * available to Effect Streams.\n *\n * @since 2.0.0\n * @param value - Live query source or Effect that resolves to one.\n * @param event - SvelteKit request event for this remote call.\n * @returns Promise resolving with a source SvelteKit can stream.\n */\nexport function run_live_handler_source<A>(\n value: LiveHandlerResult<A>,\n event: RequestEventShape,\n): Promise<ResolvedLiveSource<A>> {\n const runtime = get_server_runtime_or_throw();\n const effect = Effect.provideService(\n to_live_source_effect(value),\n RequestEvent,\n event,\n ) as Effect.Effect<ResolvedLiveSource<A>, unknown, unknown>;\n\n return run_remote_effect(\n effect,\n runtime,\n svelte_invalid,\n svelte_remote_error,\n );\n}\n\nfunction to_live_source_effect<A>(\n value: LiveHandlerResult<A>,\n): Effect.Effect<ResolvedLiveSource<A>, unknown, unknown> {\n if (Stream.isStream(value)) {\n return Stream.toAsyncIterableEffect(\n value as Stream.Stream<A, unknown, unknown>,\n ) as Effect.Effect<ResolvedLiveSource<A>, unknown, unknown>;\n }\n\n if (is_native_live_source<A>(value)) {\n return Effect.succeed(value);\n }\n\n if (!Effect.isEffect(value)) {\n return Effect.fail(\n new Error(\n \"[INVALID_LIVE_QUERY_SOURCE]: Query.live handler must return an Effect Stream, Iterable, or AsyncIterable\",\n ),\n );\n }\n\n return Effect.flatMap(\n value as Effect.Effect<EffectRemoteLiveSource<A>, unknown, unknown>,\n to_live_source_effect,\n );\n}\n\nfunction is_native_live_source<A>(\n value: unknown,\n): value is ResolvedLiveSource<A> {\n return is_live_source<A>(value) && !Stream.isStream(value);\n}\n\n/**\n * Runs a remote handler Effect with the current request event provided.\n *\n * @since 2.0.0\n * @param value - Handler return value.\n * @param event - SvelteKit request event for this remote call.\n * @returns Promise resolving with the handler output.\n */\nexport function run_handler_effect<A>(\n value: EffectLike<A>,\n event: RequestEventShape,\n): Promise<A> {\n const runtime = get_server_runtime_or_throw();\n const effect = Effect.provideService(\n to_effect(value),\n RequestEvent,\n event,\n ) as Effect.Effect<A, unknown, unknown>;\n\n return run_remote_effect(\n effect,\n runtime,\n svelte_invalid,\n svelte_remote_error,\n );\n}\n\nconst svelte_invalid = (_status: number, body: unknown): never => {\n const issues = typeof body === \"object\" && body !== null &&\n Array.isArray((body as { issues?: unknown }).issues)\n ? (body as { issues: unknown[] }).issues\n : [String(body)];\n\n invalid(...(issues as never[]));\n};\n\nconst svelte_remote_error = (status: number, body: unknown): never => {\n svelte_error(status as never, body as never);\n};\n","import { create_form_error } from \"$/remote/shared.ts\";\nimport { Effect } from \"effect\";\nimport type { FormIssue } from \"$/remote/shared.ts\";\n\nimport type { FormInvalid } from \"./types.ts\";\n\n/**\n * Creates a path-aware proxy for remote form validation failures.\n *\n * @since 2.0.0\n * @param path - Current nested form path.\n * @returns Callable invalid proxy for this path.\n */\nexport function make_invalid_proxy(\n path: readonly (string | number)[] = [],\n): FormInvalid {\n const invalid_at_path = (message: string) =>\n Effect.fail(\n create_form_error([{ message, path: [...path] } satisfies FormIssue]),\n );\n\n return new Proxy(invalid_at_path, {\n get(_target, property) {\n if (typeof property === \"symbol\") {\n return undefined;\n }\n\n return make_invalid_proxy([...path, property]);\n },\n }) as FormInvalid;\n}\n","import { getRequestEvent as get_native_request_event } from \"$app/server\";\nimport { normalize_remote_helper_error } from \"$/remote/server.ts\";\n\nimport { run_handler_effect, run_live_handler_source } from \"./effects.ts\";\nimport { make_invalid_proxy } from \"./invalid.ts\";\nimport { is_handler } from \"./schema.ts\";\nimport type { RequestEvent } from \"./runtime.ts\";\nimport type {\n EffectLike,\n EffectRemoteLiveSource,\n RemoteFormHandler,\n RemoteHandler,\n} from \"./types.ts\";\n\ntype RemoteLiveHandler<Input = unknown, A = unknown> =\n | EffectLike<EffectRemoteLiveSource<A>>\n | EffectRemoteLiveSource<A>\n | ((input: Input) =>\n | EffectLike<EffectRemoteLiveSource<A>>\n | EffectRemoteLiveSource<A>);\n\nlet running_remote_effect_handlers = 0;\n\n/**\n * Reports whether SER is currently executing user remote handler code.\n *\n * @example\n * ```ts\n * if (is_running_remote_effect_handler()) {\n * return query();\n * }\n * ```\n *\n * @since 2.0.0\n * @returns Whether a remote handler wrapper is currently active.\n * @internal\n */\nexport function is_running_remote_effect_handler(): boolean {\n return running_remote_effect_handlers > 0;\n}\n\n/**\n * Builds the wrapper passed to native query, command, and prerender helpers.\n *\n * @since 2.0.0\n * @param handler - Effect handler or already-built Effect-like value.\n * @param helper_name - Remote helper name for error normalization.\n * @returns Native SvelteKit handler wrapper.\n */\nexport function make_remote_wrapper(\n handler: RemoteHandler | EffectLike,\n helper_name: string,\n): (input: unknown) => Promise<unknown> {\n return async (input: unknown) => {\n let event: RequestEvent;\n\n try {\n event = get_native_request_event() as unknown as RequestEvent;\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, helper_name);\n }\n\n return await run_inside_remote_effect_handler(() => {\n try {\n const result = is_handler(handler) ? handler(input) : handler;\n\n return run_handler_effect(result, event);\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, helper_name);\n }\n });\n };\n}\n\n/**\n * Builds the wrapper passed to native live query helpers.\n *\n * @since 2.0.0\n * @param handler - Effect-aware live source handler.\n * @param helper_name - Remote helper name for error normalization.\n * @returns Native SvelteKit live query wrapper.\n */\nexport function make_remote_live_wrapper<Input, A>(\n handler: RemoteLiveHandler<Input, A>,\n helper_name: string,\n): (input: unknown) => Promise<unknown> {\n return async (input: unknown) => {\n let event: RequestEvent;\n\n try {\n event = get_native_request_event() as unknown as RequestEvent;\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, helper_name);\n }\n\n return await run_inside_remote_effect_handler(() => {\n try {\n const result = typeof handler === \"function\"\n ? handler(input as Input)\n : handler;\n\n return run_live_handler_source(result, event);\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, helper_name);\n }\n });\n };\n}\n\n/**\n * Builds the wrapper passed to native form helpers.\n *\n * @since 2.0.0\n * @param handler - Effect-aware form handler.\n * @param helper_name - Remote helper name for error normalization.\n * @returns Native SvelteKit form handler wrapper.\n */\nexport function make_remote_form_wrapper<Input, A>(\n handler: RemoteFormHandler<Input, A>,\n helper_name: string,\n): (data: unknown, issue: unknown) => Promise<unknown> {\n return async (data: unknown, issue: unknown) => {\n let event: RequestEvent;\n\n try {\n event = get_native_request_event() as unknown as RequestEvent;\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, helper_name);\n }\n\n return await run_inside_remote_effect_handler(() => {\n const invalid_proxy = make_invalid_proxy();\n\n try {\n const result = handler({\n data: data as Input,\n invalid: invalid_proxy,\n issue,\n });\n\n return run_handler_effect(result, event);\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, helper_name);\n }\n });\n };\n}\n\nasync function run_inside_remote_effect_handler<A>(\n run: () => Promise<A>,\n): Promise<A> {\n running_remote_effect_handlers += 1;\n\n try {\n return await run();\n } finally {\n running_remote_effect_handlers -= 1;\n }\n}\n","import {\n command as native_command,\n form as native_form,\n getRequestEvent as get_native_request_event,\n prerender as native_prerender,\n query as native_query,\n} from \"$app/server\";\nimport { copy_property_descriptors } from \"$/internal/descriptors.ts\";\nimport { normalize_remote_helper_error } from \"$/remote/server.ts\";\nimport type { RemoteFormInput } from \"@sveltejs/kit\";\nimport { Effect, type Schema } from \"effect\";\n\nimport { is_handler, is_unchecked, normalize_validator } from \"./schema.ts\";\nimport {\n is_running_remote_effect_handler,\n make_remote_form_wrapper,\n make_remote_live_wrapper,\n make_remote_wrapper,\n} from \"./wrappers.ts\";\nimport type {\n EffectLike,\n EffectRemoteBatchHandler,\n EffectRemoteCommand,\n EffectRemoteForm,\n EffectRemoteLiveQuery,\n EffectRemoteLiveQueryFunction,\n EffectRemoteLiveQueryResource,\n EffectRemoteLiveSource,\n EffectRemoteQuery,\n EffectRemoteQueryFunction,\n PrerenderOptions,\n RemoteFormHandler,\n RemoteHandler,\n SchemaInput,\n} from \"./types.ts\";\n\ntype FormSchemaEncodedInput<S> = S extends Schema.Top\n ? FormRemoteInput<S[\"Encoded\"]>\n : never;\n\ntype FormRemoteInput<Input> = NormalizeFormEncoded<Input> extends\n RemoteFormInput ? NormalizeFormEncoded<Input>\n : never;\n\ntype FormScalar = string | number | boolean | File;\n\ntype NormalizeFormEncoded<Value> = Value extends FormScalar ? Value\n : Value extends ReadonlyArray<infer Item> ? Array<NormalizeFormEncoded<Item>>\n : Value extends object ? NormalizeFormObject<Value>\n : Value;\n\ntype NormalizeFormObject<Value> = {\n readonly [Key in keyof Value]: Key extends OptionalFormKeys<Value>\n ? NormalizeFormEncoded<Exclude<Value[Key], undefined>>\n : NormalizeFormEncoded<Value[Key]>;\n};\n\ntype OptionalFormKeys<Value> = {\n [Key in keyof Value]-?: Record<PropertyKey, never> extends Pick<Value, Key>\n ? Key\n : never;\n}[keyof Value];\n\ntype NativeQueryLike<Input = unknown> = (input: Input) => unknown;\n\ntype EffectRemoteResource<Output> =\n | EffectRemoteLiveQueryResource<Output>\n | EffectRemoteQuery<Output>;\n\ntype RemoteLiveHandler<Input = unknown, A = unknown> =\n | EffectLike<EffectRemoteLiveSource<A>>\n | EffectRemoteLiveSource<A>\n | ((input: Input) =>\n | EffectLike<EffectRemoteLiveSource<A>>\n | EffectRemoteLiveSource<A>);\n\ninterface QueryFactory {\n <A>(\n validate_or_handler: EffectLike<A> | RemoteHandler<void, A>,\n ): EffectRemoteQueryFunction<void, A>;\n <Input, A>(\n validate_or_handler: \"unchecked\",\n maybe_handler: RemoteHandler<Input, A>,\n ): EffectRemoteQueryFunction<Input, A>;\n <S extends Schema.Schema<unknown>, A>(\n validate_or_handler: S,\n maybe_handler: RemoteHandler<SchemaInput<S>, A>,\n ): EffectRemoteQueryFunction<SchemaInput<S>, A>;\n\n readonly batch: typeof QueryBatch;\n readonly live: typeof QueryLive;\n}\n\nfunction to_effect_query<Input, Output>(\n native: NativeQueryLike<Input>,\n): EffectRemoteQueryFunction<Input, Output> {\n const wrapped = ((input: Input) => {\n if (is_current_remote_request()) {\n return (native as (input: Input) => unknown)(input);\n }\n\n const resource = (native as (input: Input) => unknown)(input);\n const effect = Effect.tryPromise({\n try: () => Promise.resolve(resource),\n catch: (error: unknown) => error,\n }) as unknown as EffectRemoteQuery<Output>;\n\n attach_query_resource_methods(resource, effect);\n\n return effect;\n }) as unknown as EffectRemoteQueryFunction<Input, Output>;\n\n copy_property_descriptors(native, wrapped);\n\n return wrapped;\n}\n\nfunction is_current_remote_request(): boolean {\n if (is_running_remote_effect_handler()) {\n return false;\n }\n\n try {\n const event = get_native_request_event() as { isRemoteRequest?: boolean };\n\n return event.isRemoteRequest === true;\n } catch {\n return false;\n }\n}\n\nfunction to_effect_live_query<Input, Output>(\n native: NativeQueryLike<Input>,\n): EffectRemoteLiveQueryFunction<Input, Output> {\n const wrapped = ((input: Input) =>\n Effect.try({\n try: () => {\n const resource = (native as (input: Input) => unknown)(input);\n\n return make_live_resource<Output>(resource);\n },\n catch: (error: unknown) => error,\n }) as unknown as EffectRemoteLiveQuery<\n Output\n >) as unknown as EffectRemoteLiveQueryFunction<\n Input,\n Output\n >;\n\n copy_property_descriptors(native, wrapped);\n\n return wrapped;\n}\n\ntype NativeRemoteResource<Output> = {\n readonly current?: Output;\n readonly error?: unknown;\n readonly loading?: boolean;\n readonly ready?: boolean;\n};\n\ntype NativeQueryResource<Output> = NativeRemoteResource<Output> & {\n readonly refresh?: () => Promise<void>;\n readonly set?: (value: Output) => void;\n readonly withOverride?: (update: (current: Output) => Output) => unknown;\n};\n\ntype NativeLiveQueryResource<Output> =\n & NativeRemoteResource<Output>\n & Partial<AsyncIterable<Output>>\n & {\n readonly connected?: boolean;\n readonly done?: boolean;\n readonly reconnect?: () => Promise<void>;\n };\n\nfunction is_query_resource<Output>(\n resource: unknown,\n): resource is NativeQueryResource<Output> {\n const resource_type = typeof resource;\n\n return (\n (resource_type === \"object\" && resource !== null) ||\n resource_type === \"function\"\n );\n}\n\nfunction is_live_resource<Output>(\n resource: unknown,\n): resource is NativeLiveQueryResource<Output> {\n const resource_type = typeof resource;\n\n return (\n (resource_type === \"object\" && resource !== null) ||\n resource_type === \"function\"\n );\n}\n\nfunction attach_remote_resource_getters<Output>(\n resource: unknown,\n effect: EffectRemoteResource<Output>,\n): void {\n const methods = is_query_resource<Output>(resource) ? resource : undefined;\n const keys = [\"current\", \"error\", \"loading\", \"ready\"] as const;\n\n if (!methods) {\n return;\n }\n\n for (const key of keys) {\n if (!(key in methods)) {\n continue;\n }\n\n Object.defineProperty(effect, key, {\n configurable: true,\n get: () => methods[key],\n });\n }\n}\n\nfunction attach_query_resource_methods<Output>(\n resource: unknown,\n effect: EffectRemoteQuery<Output>,\n): void {\n const methods = is_query_resource<Output>(resource) ? resource : undefined;\n const refresh = methods?.refresh;\n const set = methods?.set;\n const with_override = methods?.withOverride;\n\n attach_remote_resource_getters(resource, effect);\n\n if (!methods) {\n return;\n }\n\n if (typeof refresh === \"function\") {\n Object.defineProperty(effect, \"refresh\", {\n configurable: true,\n value: () =>\n Effect.tryPromise({\n try: () => Promise.resolve(refresh.call(resource)),\n catch: (error: unknown) => error,\n }),\n });\n }\n\n if (typeof set === \"function\") {\n Object.defineProperty(effect, \"set\", {\n configurable: true,\n value: (value: Output) => set.call(resource, value),\n });\n }\n\n if (typeof with_override === \"function\") {\n Object.defineProperty(effect, \"withOverride\", {\n configurable: true,\n value: (update: (current: Output) => Output) =>\n with_override.call(resource, update),\n });\n }\n}\n\nfunction attach_live_resource_methods<Output>(\n resource: unknown,\n effect: EffectRemoteLiveQueryResource<Output>,\n): void {\n const methods = is_live_resource<Output>(resource) ? resource : undefined;\n const reconnect = methods?.reconnect;\n const async_iterator = methods?.[Symbol.asyncIterator];\n const keys = [\n \"connected\",\n \"current\",\n \"done\",\n \"error\",\n \"loading\",\n \"ready\",\n ] as const;\n\n if (!methods) {\n return;\n }\n\n for (const key of keys) {\n if (!(key in methods)) {\n continue;\n }\n\n Object.defineProperty(effect, key, {\n configurable: true,\n get: () => methods[key],\n });\n }\n\n if (typeof reconnect === \"function\") {\n Object.defineProperty(effect, \"reconnect\", {\n configurable: true,\n value: () =>\n Effect.tryPromise({\n try: () => Promise.resolve(reconnect.call(resource)),\n catch: (error: unknown) => error,\n }),\n });\n }\n\n if (typeof async_iterator === \"function\") {\n Object.defineProperty(effect, Symbol.asyncIterator, {\n configurable: true,\n value: () => async_iterator.call(resource),\n });\n }\n}\n\nfunction make_live_resource<Output>(\n resource: unknown,\n): EffectRemoteLiveQueryResource<Output> {\n const live_resource = {} as EffectRemoteLiveQueryResource<Output>;\n\n attach_live_resource_methods(resource, live_resource);\n\n return live_resource;\n}\n\n/**\n * Factory for a read-only remote query function.\n *\n * @example\n * ```ts\n * export const getUser = Query(Schema.Struct({ id: Schema.String }), (input) =>\n * Effect.succeed(input.id)\n * );\n * ```\n *\n * @since 2.0.0\n * @param validate_or_handler - A schema, `\"unchecked\"`, or no-arg handler.\n * @param maybe_handler - Handler used when a validator is supplied.\n * @returns A SvelteKit query function.\n */\nfunction QueryRoot<A>(\n validate_or_handler: EffectLike<A> | RemoteHandler<void, A>,\n): EffectRemoteQueryFunction<void, A>;\nfunction QueryRoot<Input, A>(\n validate_or_handler: \"unchecked\",\n maybe_handler: RemoteHandler<Input, A>,\n): EffectRemoteQueryFunction<Input, A>;\nfunction QueryRoot<S extends Schema.Schema<unknown>, A>(\n validate_or_handler: S,\n maybe_handler: RemoteHandler<SchemaInput<S>, A>,\n): EffectRemoteQueryFunction<SchemaInput<S>, A>;\nfunction QueryRoot(\n validate_or_handler: unknown,\n maybe_handler?: RemoteHandler,\n): unknown {\n try {\n if (maybe_handler) {\n return to_effect_query(native_query(\n normalize_validator(validate_or_handler) as never,\n make_remote_wrapper(maybe_handler, \"Query\") as never,\n ) as ReturnType<typeof native_query>);\n }\n\n if (is_unchecked(validate_or_handler)) {\n throw new Error(\n \"[MISSING_REMOTE_HANDLER]: Query('unchecked', handler) requires a handler\",\n );\n }\n\n return to_effect_query(native_query(\n make_remote_wrapper(\n validate_or_handler as RemoteHandler,\n \"Query\",\n ) as never,\n ) as ReturnType<typeof native_query>);\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, \"Query\");\n }\n}\n\n/**\n * Factory for a batched read-only remote query function.\n *\n * @since 2.0.0\n * @param validate_or_handler - A schema or `\"unchecked\"` sentinel.\n * @param maybe_handler - Handler receiving validated inputs as one batch.\n * @returns A SvelteKit batch query function.\n */\nfunction QueryBatch<Input, A>(\n validate_or_handler: \"unchecked\",\n maybe_handler: EffectRemoteBatchHandler<Input, A>,\n): EffectRemoteQueryFunction<Input, A>;\nfunction QueryBatch<S extends Schema.Schema<unknown>, A>(\n validate_or_handler: S,\n maybe_handler: EffectRemoteBatchHandler<SchemaInput<S>, A>,\n): EffectRemoteQueryFunction<SchemaInput<S>, A>;\nfunction QueryBatch(\n validate_or_handler: unknown,\n maybe_handler?: EffectRemoteBatchHandler,\n): unknown {\n try {\n if (!maybe_handler) {\n throw new Error(\n \"[MISSING_REMOTE_HANDLER]: Query.batch requires a handler\",\n );\n }\n\n return to_effect_query(native_query.batch(\n normalize_validator(validate_or_handler) as never,\n make_remote_wrapper(\n maybe_handler as RemoteHandler,\n \"Query.batch\",\n ) as never,\n ) as NativeQueryLike);\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, \"Query.batch\");\n }\n}\n\n/**\n * Factory for a live remote query function.\n *\n * @since 2.0.0\n * @param validate_or_handler - A schema, `\"unchecked\"`, or no-arg live handler.\n * @param maybe_handler - Handler used when a validator is supplied.\n * @returns A SvelteKit live query function.\n */\nfunction QueryLive<A>(\n validate_or_handler: RemoteLiveHandler<void, A>,\n): EffectRemoteLiveQueryFunction<void, A>;\nfunction QueryLive<Input, A>(\n validate_or_handler: \"unchecked\",\n maybe_handler: RemoteLiveHandler<Input, A>,\n): EffectRemoteLiveQueryFunction<Input, A>;\nfunction QueryLive<S extends Schema.Schema<unknown>, A>(\n validate_or_handler: S,\n maybe_handler: RemoteLiveHandler<SchemaInput<S>, A>,\n): EffectRemoteLiveQueryFunction<SchemaInput<S>, A>;\nfunction QueryLive(\n validate_or_handler: unknown,\n maybe_handler?: RemoteLiveHandler,\n): unknown {\n try {\n if (maybe_handler) {\n return to_effect_live_query(native_query.live(\n normalize_validator(validate_or_handler) as never,\n make_remote_live_wrapper(\n maybe_handler,\n \"Query.live\",\n ) as never,\n ) as NativeQueryLike);\n }\n\n if (is_unchecked(validate_or_handler)) {\n throw new Error(\n \"[MISSING_REMOTE_HANDLER]: Query.live('unchecked', handler) requires a handler\",\n );\n }\n\n return to_effect_live_query(native_query.live(\n make_remote_live_wrapper(\n validate_or_handler as RemoteLiveHandler,\n \"Query.live\",\n ) as never,\n ) as NativeQueryLike);\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, \"Query.live\");\n }\n}\n\n/**\n * Factory for read-only remote query functions.\n *\n * @example\n * ```ts\n * export const getUser = Query(Schema.Struct({ id: Schema.String }), (input) =>\n * Effect.succeed(input.id)\n * );\n *\n * export const getUserBatch = Query.batch(Schema.String, (ids) =>\n * Effect.succeed((id) => ids.includes(id))\n * );\n * ```\n *\n * @since 2.0.0\n */\nexport const Query: QueryFactory = Object.assign(QueryRoot, {\n batch: QueryBatch,\n live: QueryLive,\n});\n\n/**\n * Factory for a write-oriented remote command function.\n *\n * @since 2.0.0\n * @param validate_or_handler - A schema, `\"unchecked\"`, or no-arg handler.\n * @param maybe_handler - Handler used when a validator is supplied.\n * @returns A SvelteKit command function.\n */\nexport function Command<A>(\n validate_or_handler: EffectLike<A> | RemoteHandler<void, A>,\n): EffectRemoteCommand<void, A>;\nexport function Command<Input, A>(\n validate_or_handler: \"unchecked\",\n maybe_handler: RemoteHandler<Input, A>,\n): EffectRemoteCommand<Input, A>;\nexport function Command<S extends Schema.Schema<unknown>, A>(\n validate_or_handler: S,\n maybe_handler: RemoteHandler<SchemaInput<S>, A>,\n): EffectRemoteCommand<SchemaInput<S>, A>;\nexport function Command(\n validate_or_handler: unknown,\n maybe_handler?: RemoteHandler,\n): unknown {\n try {\n if (maybe_handler) {\n return native_command(\n normalize_validator(validate_or_handler) as never,\n make_remote_wrapper(maybe_handler, \"Command\") as never,\n );\n }\n\n if (is_unchecked(validate_or_handler)) {\n throw new Error(\n \"[MISSING_REMOTE_HANDLER]: Command('unchecked', handler) requires a handler\",\n );\n }\n\n return native_command(\n make_remote_wrapper(\n validate_or_handler as RemoteHandler,\n \"Command\",\n ) as never,\n ) as ReturnType<typeof native_command>;\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, \"Command\");\n }\n}\n\n/**\n * Factory for a remote form handler.\n *\n * @example\n * ```ts\n * export const SignIn = Form(signInSchema, ({ data, invalid }) =>\n * Effect.gen(function* () {\n * if (!data.email.includes(\"@\")) {\n * return yield* invalid.email(\"Use an email address.\");\n * }\n *\n * return { email: data.email };\n * })\n * );\n * ```\n *\n * @since 2.0.0\n * @param validate_or_handler - A schema, `\"unchecked\"`, or no-arg handler.\n * @param maybe_handler - Handler used when a validator is supplied.\n * @returns A SvelteKit form function.\n */\nexport function Form<A>(\n validate_or_handler: EffectLike<A> | RemoteFormHandler<void, A>,\n): EffectRemoteForm<void, A>;\nexport function Form<Input extends RemoteFormInput, A>(\n validate_or_handler: \"unchecked\",\n maybe_handler: RemoteFormHandler<Input, A>,\n): EffectRemoteForm<Input, A>;\nexport function Form<S extends Schema.Top, A>(\n validate_or_handler: S,\n maybe_handler: RemoteFormHandler<SchemaInput<S>, A>,\n): EffectRemoteForm<FormSchemaEncodedInput<S>, A>;\nexport function Form(\n validate_or_handler: unknown,\n maybe_handler?: RemoteFormHandler<never, unknown>,\n): unknown {\n try {\n if (maybe_handler) {\n return native_form(\n normalize_validator(validate_or_handler) as never,\n make_remote_form_wrapper(maybe_handler, \"Form\") as never,\n );\n }\n\n if (is_unchecked(validate_or_handler)) {\n throw new Error(\n \"[MISSING_REMOTE_HANDLER]: Form('unchecked', handler) requires a handler\",\n );\n }\n\n const inputless_handler: RemoteFormHandler<void, unknown> = (\n { data, invalid, issue },\n ) => {\n if (is_handler(validate_or_handler)) {\n return validate_or_handler({ data, invalid, issue });\n }\n\n return validate_or_handler as EffectLike;\n };\n\n return native_form(\n make_remote_form_wrapper(inputless_handler, \"Form\") as never,\n ) as unknown as ReturnType<typeof native_form>;\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, \"Form\");\n }\n}\n\n/**\n * Factory for a prerenderable remote function.\n *\n * @since 2.0.0\n * @param validate_or_handler - A schema, `\"unchecked\"`, or no-arg handler.\n * @param maybe_handler_or_options - Handler or prerender options.\n * @param maybe_options - Prerender options used with a validator.\n * @returns A SvelteKit prerender function.\n */\nexport function Prerender(\n validate_or_handler: unknown,\n maybe_handler_or_options?: RemoteHandler | PrerenderOptions,\n maybe_options?: PrerenderOptions,\n): ReturnType<typeof native_prerender> {\n try {\n if (is_handler(maybe_handler_or_options)) {\n return native_prerender(\n normalize_validator(validate_or_handler) as never,\n make_remote_wrapper(maybe_handler_or_options, \"Prerender\") as never,\n maybe_options as never,\n );\n }\n\n if (is_unchecked(validate_or_handler)) {\n throw new Error(\n \"[MISSING_REMOTE_HANDLER]: Prerender('unchecked', handler) requires a handler\",\n );\n }\n\n return native_prerender(\n make_remote_wrapper(\n validate_or_handler as RemoteHandler,\n \"Prerender\",\n ) as never,\n maybe_handler_or_options as never,\n ) as ReturnType<typeof native_prerender>;\n } catch (error: unknown) {\n throw normalize_remote_helper_error(error, \"Prerender\");\n }\n}\n","import {\n error as svelte_error,\n redirect as svelte_redirect,\n} from \"@sveltejs/kit\";\nimport { Effect } from \"effect\";\n\nconst error_status_codes = {\n ProxyAuthenticationRequired: 407,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n NetworkAuthenticationRequired: 511,\n HttpVersionNotSupported: 505,\n UnprocessableContent: 422,\n UnprocessableEntity: 422,\n InternalServerError: 500,\n FailedDependency: 424,\n PreconditionRequired: 428,\n ServiceUnavailable: 503,\n MisdirectedRequest: 421,\n InsufficientStorage: 507,\n VariantAlsoNegotiates: 506,\n PreconditionFailed: 412,\n MethodNotAllowed: 405,\n GatewayTimeout: 504,\n PaymentRequired: 402,\n UpgradeRequired: 426,\n TooManyRequests: 429,\n LengthRequired: 411,\n NotAcceptable: 406,\n RequestTimeout: 408,\n ContentTooLarge: 413,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n BadRequest: 400,\n Unauthorized: 401,\n Forbidden: 403,\n NotFound: 404,\n Conflict: 409,\n Gone: 410,\n Locked: 423,\n TooEarly: 425,\n NotImplemented: 501,\n BadGateway: 502,\n LoopDetected: 508,\n NotExtended: 510,\n} as const;\n\nconst redirect_status_codes = {\n MovedPermanently: 301,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n MultipleChoices: 300,\n NotModified: 304,\n SwitchProxy: 306,\n SeeOther: 303,\n UseProxy: 305,\n Found: 302,\n} as const;\n\ntype SvelteErrorBody = Parameters<typeof svelte_error>[1];\n\n/**\n * Named HTTP status accepted by the {@link Error} helper.\n *\n * @example\n * ```ts\n * const status: ErrorStatusName = \"NotFound\";\n * ```\n *\n * @since 2.3.0\n */\nexport type ErrorStatusName = keyof typeof error_status_codes;\n\n/**\n * Numeric or named HTTP status accepted by the {@link Error} helper.\n *\n * @example\n * ```ts\n * const status: ErrorStatus = \"InternalServerError\";\n * ```\n *\n * @since 2.3.0\n */\nexport type ErrorStatus = ErrorStatusName | number;\n\n/**\n * Named HTTP status accepted by the {@link Redirect} helper.\n *\n * @example\n * ```ts\n * const status: RedirectStatusName = \"TemporaryRedirect\";\n * ```\n *\n * @since 2.3.0\n */\nexport type RedirectStatusName = keyof typeof redirect_status_codes;\n\n/**\n * Numeric or named HTTP status accepted by the {@link Redirect} helper.\n *\n * @example\n * ```ts\n * const status: RedirectStatus = \"SeeOther\";\n * ```\n *\n * @since 2.3.0\n */\nexport type RedirectStatus = RedirectStatusName | number;\n\n/**\n * Callable shape for the exported {@link Error} helper.\n *\n * @example\n * ```ts\n * const fail_not_found: ErrorEffectFactory = Error;\n * ```\n *\n * @since 2.3.0\n */\nexport interface ErrorEffectFactory {\n /**\n * Creates an Effect that throws SvelteKit's HTTP error control-flow value.\n *\n * @example\n * ```ts\n * return yield* Error(\"NotFound\", \"Post not found\");\n * ```\n *\n * @since 2.3.0\n * @param status - Numeric HTTP status or PascalCase status name to pass to\n * SvelteKit's `error` helper.\n * @param body - Optional SvelteKit error body or message forwarded unchanged\n * to SvelteKit.\n * @returns An Effect that never succeeds because SvelteKit takes over request\n * control flow.\n */\n (\n status: ErrorStatus,\n body?: SvelteErrorBody,\n ): Effect.Effect<never, never, never>;\n}\n\n/**\n * Callable shape for the exported {@link Redirect} helper.\n *\n * @example\n * ```ts\n * const redirect_after_save: RedirectEffectFactory = Redirect;\n * ```\n *\n * @since 2.3.0\n */\nexport interface RedirectEffectFactory {\n /**\n * Creates an Effect that throws SvelteKit's redirect control-flow value.\n *\n * @example\n * ```ts\n * return yield* Redirect(\"SeeOther\", \"/posts\");\n * ```\n *\n * @since 2.3.0\n * @param status - Numeric redirect status or PascalCase status name to pass\n * to SvelteKit's `redirect` helper.\n * @param location - Target URL forwarded unchanged to SvelteKit.\n * @returns An Effect that never succeeds because SvelteKit takes over request\n * control flow.\n */\n (\n status: RedirectStatus,\n location: string | URL,\n ): Effect.Effect<never, never, never>;\n}\n\n/**\n * Creates an Effect that raises SvelteKit's HTTP error control flow.\n *\n * @example\n * ```ts\n * return yield* Error(\"NotFound\", \"Post not found\");\n * ```\n *\n * @since 2.3.0\n * @param status - Numeric HTTP status or PascalCase status name to pass to\n * SvelteKit's `error` helper.\n * @param body - Optional SvelteKit error body or message forwarded unchanged\n * to SvelteKit.\n * @returns An Effect that never succeeds because SvelteKit takes over request\n * control flow.\n */\nexport const Error: ErrorEffectFactory = (status, body) => {\n const resolved_status = resolve_error_status(status);\n\n return Effect.sync(() => {\n svelte_error(resolved_status, body);\n });\n};\n\n/**\n * Creates an Effect that raises SvelteKit's redirect control flow.\n *\n * @example\n * ```ts\n * return yield* Redirect(\"SeeOther\", \"/posts\");\n * ```\n *\n * @since 2.3.0\n * @param status - Numeric redirect status or PascalCase status name to pass to\n * SvelteKit's `redirect` helper.\n * @param location - Target URL forwarded unchanged to SvelteKit.\n * @returns An Effect that never succeeds because SvelteKit takes over request\n * control flow.\n */\nexport const Redirect: RedirectEffectFactory = (status, location) => {\n const resolved_status = resolve_redirect_status(status);\n\n return Effect.sync(() => {\n svelte_redirect(resolved_status, location);\n });\n};\n\nfunction resolve_error_status(status: ErrorStatus): number {\n if (typeof status === \"number\") {\n return status;\n }\n\n return error_status_codes[status];\n}\n\nfunction resolve_redirect_status(status: RedirectStatus): number {\n if (typeof status === \"number\") {\n return status;\n }\n\n return redirect_status_codes[status];\n}\n"],"mappings":"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"}
|
package/.dist/vite.js
CHANGED
|
@@ -96,7 +96,7 @@ function rewrite_remote_client_exports(code, options) {
|
|
|
96
96
|
});
|
|
97
97
|
if (!replaced_any) return code;
|
|
98
98
|
const imports = [`import { app_dir, base } from "$app/paths/internal/client";`, `import { create_remote_query_adapter, create_remote_live_query_adapter, create_remote_command_adapter, create_remote_form_adapter } from "svelte-effect-runtime/internal/remote-client";`].join("\n");
|
|
99
|
-
const helpers = [`const
|
|
99
|
+
const helpers = [`const __SER___remote_base = \`\${base}/\${app_dir}/remote\`;`, `function __SER___decode_payload(value) { return value; }`].join("\n");
|
|
100
100
|
const debug_line = options?.debug ? `console.log("[ser] remote client wrappers loaded");` : "";
|
|
101
101
|
const injected = [
|
|
102
102
|
import_match[0],
|
|
@@ -108,10 +108,10 @@ function rewrite_remote_client_exports(code, options) {
|
|
|
108
108
|
}
|
|
109
109
|
function make_remote_export(name, type, id_literal, namespace) {
|
|
110
110
|
const native_call = `${namespace}.${type}(${id_literal})`;
|
|
111
|
-
if (type === "command") return `export const ${name} = create_remote_command_adapter(${native_call},
|
|
112
|
-
if (type === "form") return `export const ${name} = create_remote_form_adapter(${native_call},
|
|
113
|
-
if (type === "query_live") return `export const ${name} = create_remote_live_query_adapter(${native_call},
|
|
114
|
-
return `export const ${name} = create_remote_query_adapter(${native_call},
|
|
111
|
+
if (type === "command") return `export const ${name} = create_remote_command_adapter(${native_call}, __SER___decode_payload);`;
|
|
112
|
+
if (type === "form") return `export const ${name} = create_remote_form_adapter(${native_call}, __SER___decode_payload, __SER___remote_base);`;
|
|
113
|
+
if (type === "query_live") return `export const ${name} = create_remote_live_query_adapter(${native_call}, __SER___decode_payload);`;
|
|
114
|
+
return `export const ${name} = create_remote_query_adapter(${native_call}, __SER___decode_payload);`;
|
|
115
115
|
}
|
|
116
116
|
//#endregion
|
|
117
117
|
export { effect, rewrite_remote_client_exports };
|
package/.dist/vite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.js","names":[],"sources":["../../modules/svelte-effect-runtime/src/vite.ts"],"sourcesContent":["import type { Plugin } from \"vite\";\n\n/**\n * Options for the {@link effect} Vite plugin.\n *\n * @since 2.0.0\n */\nexport interface EffectOptions {\n /** Whether to emit debug logging in the generated remote client module. */\n debug?: boolean;\n}\n\n/**\n * Vite plugin for SvelteKit. The pre plugin rewrites server-side imports\n * to the server entrypoint; the post plugin wraps SvelteKit's generated\n * client remote exports in Effect-returning adapters.\n *\n * @example\n * ```ts\n * import { effect } from \"svelte-effect-runtime\";\n * import { sveltekit } from \"@sveltejs/kit/vite\";\n *\n * export default defineConfig({ plugins: [effect(), sveltekit()] });\n * ```\n *\n * @since 2.0.0\n * @param options - Optional configuration.\n * @returns Vite plugins that integrate the runtime with SvelteKit.\n */\nexport function effect(options?: EffectOptions): Plugin[] {\n return [\n make_server_rewrite_plugin(),\n make_remote_client_wrapper_plugin(options),\n ];\n}\n\nfunction make_server_rewrite_plugin(): Plugin {\n return {\n name: \"svelte-effect-runtime:server-imports\",\n enforce: \"pre\",\n\n config() {\n return { optimizeDeps: { exclude: [\"svelte-effect-runtime\"] } };\n },\n\n transform(code: string, id: string) {\n if (!is_server_runtime_module(id)) {\n return undefined;\n }\n\n const rewritten = code\n .replace(\n /from\\s+[\"']svelte-effect-runtime[\"']/g,\n `from \"svelte-effect-runtime/server\"`,\n )\n .replace(\n /from\\s+[\"']svelte-effect-runtime\\/internal\\/generators[\"']/g,\n `from \"svelte-effect-runtime/server\"`,\n );\n\n if (rewritten === code) {\n return undefined;\n }\n\n return { code: rewritten, map: null };\n },\n };\n}\n\nfunction make_remote_client_wrapper_plugin(options?: EffectOptions): Plugin {\n return {\n name: \"svelte-effect-runtime:remote-client\",\n enforce: \"post\",\n\n config() {\n return { ssr: { noExternal: [\"svelte-effect-runtime\"] } };\n },\n\n configResolved(config) {\n const no_external = config.ssr.noExternal;\n const runtime_package = \"svelte-effect-runtime\";\n\n if (no_external === true) {\n return;\n }\n\n if (Array.isArray(no_external)) {\n const has_runtime_package = no_external.some(\n (entry) => entry === runtime_package,\n );\n\n if (!has_runtime_package) {\n no_external.push(runtime_package);\n }\n\n return;\n }\n\n config.ssr.noExternal = [\n no_external,\n runtime_package,\n ].filter((value): value is string | RegExp => value !== undefined);\n },\n\n transform(code: string, id: string) {\n if (!is_remote_module(id) || !code.includes(\"__sveltekit/remote\")) {\n return undefined;\n }\n\n const rewritten = rewrite_remote_client_exports(code, options);\n\n if (rewritten === code) {\n return undefined;\n }\n\n return { code: rewritten, map: null };\n },\n };\n}\n\nfunction is_server_runtime_module(id: string): boolean {\n return (\n id.endsWith(\".server.ts\") ||\n id.endsWith(\".remote.ts\") ||\n id.includes(\"hooks.server.\")\n );\n}\n\nfunction is_remote_module(id: string): boolean {\n return /\\.(remote|remote\\.[cm]?)\\.[jt]s(?:\\?.*)?$/.test(id) ||\n id.includes(\".remote.\");\n}\n\n/**\n * Rewrites SvelteKit's generated client remote module from:\n *\n * `export const get_post = __remote.query(\"hash/get_post\")`\n *\n * into an Effect-aware wrapper around the same native function.\n *\n * @since 2.0.0\n * @param code - The generated client remote module code.\n * @param options - Optional plugin options.\n * @returns The rewritten module code.\n * @internal\n */\nexport function rewrite_remote_client_exports(\n code: string,\n options?: EffectOptions,\n): string {\n const import_match = code.match(\n /import\\s+\\*\\s+as\\s+([A-Za-z_$][\\w$]*)\\s+from\\s+[\"']__sveltekit\\/remote[\"'];?/,\n );\n\n if (!import_match) {\n return code;\n }\n\n const namespace = import_match[1];\n const export_pattern = new RegExp(\n `export\\\\s+const\\\\s+([A-Za-z_$][\\\\w$]*)\\\\s*=\\\\s*${namespace}\\\\.(query_batch|query_live|query|command|form|prerender)\\\\(([\"'][^\"']+[\"'])\\\\);?`,\n \"g\",\n );\n\n let replaced_any = false;\n const body = code.replace(\n export_pattern,\n (_match, name, type, id_literal) => {\n replaced_any = true;\n\n return make_remote_export(name, type, id_literal, namespace);\n },\n );\n\n if (!replaced_any) {\n return code;\n }\n\n const imports = [\n `import { app_dir, base } from \"$app/paths/internal/client\";`,\n `import { create_remote_query_adapter, create_remote_live_query_adapter, create_remote_command_adapter, create_remote_form_adapter } from \"svelte-effect-runtime/internal/remote-client\";`,\n ].join(\"\\n\");\n\n const helpers = [\n `const
|
|
1
|
+
{"version":3,"file":"vite.js","names":[],"sources":["../../modules/svelte-effect-runtime/src/vite.ts"],"sourcesContent":["import type { Plugin } from \"vite\";\n\n/**\n * Options for the {@link effect} Vite plugin.\n *\n * @since 2.0.0\n */\nexport interface EffectOptions {\n /** Whether to emit debug logging in the generated remote client module. */\n debug?: boolean;\n}\n\n/**\n * Vite plugin for SvelteKit. The pre plugin rewrites server-side imports\n * to the server entrypoint; the post plugin wraps SvelteKit's generated\n * client remote exports in Effect-returning adapters.\n *\n * @example\n * ```ts\n * import { effect } from \"svelte-effect-runtime\";\n * import { sveltekit } from \"@sveltejs/kit/vite\";\n *\n * export default defineConfig({ plugins: [effect(), sveltekit()] });\n * ```\n *\n * @since 2.0.0\n * @param options - Optional configuration.\n * @returns Vite plugins that integrate the runtime with SvelteKit.\n */\nexport function effect(options?: EffectOptions): Plugin[] {\n return [\n make_server_rewrite_plugin(),\n make_remote_client_wrapper_plugin(options),\n ];\n}\n\nfunction make_server_rewrite_plugin(): Plugin {\n return {\n name: \"svelte-effect-runtime:server-imports\",\n enforce: \"pre\",\n\n config() {\n return { optimizeDeps: { exclude: [\"svelte-effect-runtime\"] } };\n },\n\n transform(code: string, id: string) {\n if (!is_server_runtime_module(id)) {\n return undefined;\n }\n\n const rewritten = code\n .replace(\n /from\\s+[\"']svelte-effect-runtime[\"']/g,\n `from \"svelte-effect-runtime/server\"`,\n )\n .replace(\n /from\\s+[\"']svelte-effect-runtime\\/internal\\/generators[\"']/g,\n `from \"svelte-effect-runtime/server\"`,\n );\n\n if (rewritten === code) {\n return undefined;\n }\n\n return { code: rewritten, map: null };\n },\n };\n}\n\nfunction make_remote_client_wrapper_plugin(options?: EffectOptions): Plugin {\n return {\n name: \"svelte-effect-runtime:remote-client\",\n enforce: \"post\",\n\n config() {\n return { ssr: { noExternal: [\"svelte-effect-runtime\"] } };\n },\n\n configResolved(config) {\n const no_external = config.ssr.noExternal;\n const runtime_package = \"svelte-effect-runtime\";\n\n if (no_external === true) {\n return;\n }\n\n if (Array.isArray(no_external)) {\n const has_runtime_package = no_external.some(\n (entry) => entry === runtime_package,\n );\n\n if (!has_runtime_package) {\n no_external.push(runtime_package);\n }\n\n return;\n }\n\n config.ssr.noExternal = [\n no_external,\n runtime_package,\n ].filter((value): value is string | RegExp => value !== undefined);\n },\n\n transform(code: string, id: string) {\n if (!is_remote_module(id) || !code.includes(\"__sveltekit/remote\")) {\n return undefined;\n }\n\n const rewritten = rewrite_remote_client_exports(code, options);\n\n if (rewritten === code) {\n return undefined;\n }\n\n return { code: rewritten, map: null };\n },\n };\n}\n\nfunction is_server_runtime_module(id: string): boolean {\n return (\n id.endsWith(\".server.ts\") ||\n id.endsWith(\".remote.ts\") ||\n id.includes(\"hooks.server.\")\n );\n}\n\nfunction is_remote_module(id: string): boolean {\n return /\\.(remote|remote\\.[cm]?)\\.[jt]s(?:\\?.*)?$/.test(id) ||\n id.includes(\".remote.\");\n}\n\n/**\n * Rewrites SvelteKit's generated client remote module from:\n *\n * `export const get_post = __remote.query(\"hash/get_post\")`\n *\n * into an Effect-aware wrapper around the same native function.\n *\n * @since 2.0.0\n * @param code - The generated client remote module code.\n * @param options - Optional plugin options.\n * @returns The rewritten module code.\n * @internal\n */\nexport function rewrite_remote_client_exports(\n code: string,\n options?: EffectOptions,\n): string {\n const import_match = code.match(\n /import\\s+\\*\\s+as\\s+([A-Za-z_$][\\w$]*)\\s+from\\s+[\"']__sveltekit\\/remote[\"'];?/,\n );\n\n if (!import_match) {\n return code;\n }\n\n const namespace = import_match[1];\n const export_pattern = new RegExp(\n `export\\\\s+const\\\\s+([A-Za-z_$][\\\\w$]*)\\\\s*=\\\\s*${namespace}\\\\.(query_batch|query_live|query|command|form|prerender)\\\\(([\"'][^\"']+[\"'])\\\\);?`,\n \"g\",\n );\n\n let replaced_any = false;\n const body = code.replace(\n export_pattern,\n (_match, name, type, id_literal) => {\n replaced_any = true;\n\n return make_remote_export(name, type, id_literal, namespace);\n },\n );\n\n if (!replaced_any) {\n return code;\n }\n\n const imports = [\n `import { app_dir, base } from \"$app/paths/internal/client\";`,\n `import { create_remote_query_adapter, create_remote_live_query_adapter, create_remote_command_adapter, create_remote_form_adapter } from \"svelte-effect-runtime/internal/remote-client\";`,\n ].join(\"\\n\");\n\n const helpers = [\n `const __SER___remote_base = \\`\\${base}/\\${app_dir}/remote\\`;`,\n `function __SER___decode_payload(value) { return value; }`,\n ].join(\"\\n\");\n\n const debug_line = options?.debug\n ? `console.log(\"[ser] remote client wrappers loaded\");`\n : \"\";\n\n const injected = [\n import_match[0],\n imports,\n helpers,\n debug_line,\n ].filter(Boolean).join(\"\\n\");\n\n return body.replace(import_match[0], injected);\n}\n\nfunction make_remote_export(\n name: string,\n type: string,\n id_literal: string,\n namespace: string,\n): string {\n const native_call = `${namespace}.${type}(${id_literal})`;\n\n if (type === \"command\") {\n return `export const ${name} = create_remote_command_adapter(${native_call}, __SER___decode_payload);`;\n }\n\n if (type === \"form\") {\n return `export const ${name} = create_remote_form_adapter(${native_call}, __SER___decode_payload, __SER___remote_base);`;\n }\n\n if (type === \"query_live\") {\n return `export const ${name} = create_remote_live_query_adapter(${native_call}, __SER___decode_payload);`;\n }\n\n return `export const ${name} = create_remote_query_adapter(${native_call}, __SER___decode_payload);`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AA6BA,SAAgB,OAAO,SAAmC;CACxD,OAAO,CACL,2BAA2B,GAC3B,kCAAkC,OAAO,CAC3C;AACF;AAEA,SAAS,6BAAqC;CAC5C,OAAO;EACL,MAAM;EACN,SAAS;EAET,SAAS;GACP,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,uBAAuB,EAAE,EAAE;EAChE;EAEA,UAAU,MAAc,IAAY;GAClC,IAAI,CAAC,yBAAyB,EAAE,GAC9B;GAGF,MAAM,YAAY,KACf,QACC,yCACA,qCACF,EACC,QACC,+DACA,qCACF;GAEF,IAAI,cAAc,MAChB;GAGF,OAAO;IAAE,MAAM;IAAW,KAAK;GAAK;EACtC;CACF;AACF;AAEA,SAAS,kCAAkC,SAAiC;CAC1E,OAAO;EACL,MAAM;EACN,SAAS;EAET,SAAS;GACP,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,uBAAuB,EAAE,EAAE;EAC1D;EAEA,eAAe,QAAQ;GACrB,MAAM,cAAc,OAAO,IAAI;GAC/B,MAAM,kBAAkB;GAExB,IAAI,gBAAgB,MAClB;GAGF,IAAI,MAAM,QAAQ,WAAW,GAAG;IAK9B,IAAI,CAJwB,YAAY,MACrC,UAAU,UAAU,eAGA,GACrB,YAAY,KAAK,eAAe;IAGlC;GACF;GAEA,OAAO,IAAI,aAAa,CACtB,aACA,eACF,EAAE,QAAQ,UAAoC,UAAU,KAAA,CAAS;EACnE;EAEA,UAAU,MAAc,IAAY;GAClC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,KAAK,SAAS,oBAAoB,GAC9D;GAGF,MAAM,YAAY,8BAA8B,MAAM,OAAO;GAE7D,IAAI,cAAc,MAChB;GAGF,OAAO;IAAE,MAAM;IAAW,KAAK;GAAK;EACtC;CACF;AACF;AAEA,SAAS,yBAAyB,IAAqB;CACrD,OACE,GAAG,SAAS,YAAY,KACxB,GAAG,SAAS,YAAY,KACxB,GAAG,SAAS,eAAe;AAE/B;AAEA,SAAS,iBAAiB,IAAqB;CAC7C,OAAO,4CAA4C,KAAK,EAAE,KACxD,GAAG,SAAS,UAAU;AAC1B;;;;;;;;;;;;;;AAeA,SAAgB,8BACd,MACA,SACQ;CACR,MAAM,eAAe,KAAK,MACxB,8EACF;CAEA,IAAI,CAAC,cACH,OAAO;CAGT,MAAM,YAAY,aAAa;CAC/B,MAAM,iBAAiB,IAAI,OACzB,kDAAkD,UAAU,mFAC5D,GACF;CAEA,IAAI,eAAe;CACnB,MAAM,OAAO,KAAK,QAChB,iBACC,QAAQ,MAAM,MAAM,eAAe;EAClC,eAAe;EAEf,OAAO,mBAAmB,MAAM,MAAM,YAAY,SAAS;CAC7D,CACF;CAEA,IAAI,CAAC,cACH,OAAO;CAGT,MAAM,UAAU,CACd,+DACA,0LACF,EAAE,KAAK,IAAI;CAEX,MAAM,UAAU,CACd,gEACA,0DACF,EAAE,KAAK,IAAI;CAEX,MAAM,aAAa,SAAS,QACxB,wDACA;CAEJ,MAAM,WAAW;EACf,aAAa;EACb;EACA;EACA;CACF,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;CAE3B,OAAO,KAAK,QAAQ,aAAa,IAAI,QAAQ;AAC/C;AAEA,SAAS,mBACP,MACA,MACA,YACA,WACQ;CACR,MAAM,cAAc,GAAG,UAAU,GAAG,KAAK,GAAG,WAAW;CAEvD,IAAI,SAAS,WACX,OAAO,gBAAgB,KAAK,mCAAmC,YAAY;CAG7E,IAAI,SAAS,QACX,OAAO,gBAAgB,KAAK,gCAAgC,YAAY;CAG1E,IAAI,SAAS,cACX,OAAO,gBAAgB,KAAK,sCAAsC,YAAY;CAGhF,OAAO,gBAAgB,KAAK,iCAAiC,YAAY;AAC3E"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svelte-effect-runtime",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "Core module that houses the Vite plugin to enable effectful execution.",
|
|
5
5
|
"license": "BSD-3-Clause",
|
|
6
6
|
"type": "module",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": "^22.12.0 || >=24.0.0"
|
|
9
|
+
},
|
|
7
10
|
"repository": {
|
|
8
11
|
"type": "git",
|
|
9
12
|
"url": "https://github.com/usebarekey/svelte-effect-runtime.git"
|
|
@@ -52,7 +55,7 @@
|
|
|
52
55
|
"test": "deno task test"
|
|
53
56
|
},
|
|
54
57
|
"peerDependencies": {
|
|
55
|
-
"@sveltejs/kit": "^2.0.0",
|
|
58
|
+
"@sveltejs/kit": "^2.0.0 || ^3.0.0-next.0",
|
|
56
59
|
"@sveltejs/vite-plugin-svelte": "^6.0.0 || ^7.0.0",
|
|
57
60
|
"effect": "^4.0.0-beta",
|
|
58
61
|
"svelte": "^5.0.0",
|
|
@@ -61,7 +64,7 @@
|
|
|
61
64
|
"dependencies": {
|
|
62
65
|
"devalue": "^5.5.0",
|
|
63
66
|
"magic-string": "^0.30.21",
|
|
64
|
-
"typescript": "^
|
|
67
|
+
"typescript": "^6.0.0"
|
|
65
68
|
},
|
|
66
69
|
"devDependencies": {
|
|
67
70
|
"@types/node": "^24.6.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preprocess-33aQ41uE.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/preprocess/imports.ts","../../../modules/svelte-effect-runtime/src/preprocess/source.ts","../../../modules/svelte-effect-runtime/src/preprocess/runtime-block.ts","../../../modules/svelte-effect-runtime/src/preprocess/runes.ts","../../../modules/svelte-effect-runtime/src/preprocess/lower.ts","../../../modules/svelte-effect-runtime/src/preprocess/index.ts"],"sourcesContent":["import ts from \"typescript\";\n\n/**\n * Builds the import statements injected by the script preprocessor.\n *\n * @since 2.0.0\n * @param has_effect_import - Whether the user already imports `Effect`.\n * @param has_dispatcher_import - Whether the user already imports\n * `get_dispatcher`.\n * @returns Newline-separated import statements to inject.\n */\nexport function make_imports(\n has_effect_import: boolean,\n has_dispatcher_import: boolean,\n): string {\n return [\n !has_effect_import && `import { Effect } from \"effect\";`,\n !has_dispatcher_import &&\n `import { get_dispatcher } from \"svelte-effect-runtime/internal/generators\";`,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\n/**\n * Checks whether a source file imports a local binding from a module.\n *\n * @since 2.0.0\n * @param source_file - Parsed TypeScript source file to inspect.\n * @param module_name - Module specifier to match.\n * @param local_name - Local binding name to look for.\n * @returns Whether that binding is already locally available.\n */\nexport function has_local_import_binding(\n source_file: ts.SourceFile,\n module_name: string,\n local_name: string,\n): boolean {\n return source_file.statements.some((stmt) => {\n if (\n !ts.isImportDeclaration(stmt) ||\n !ts.isStringLiteral(stmt.moduleSpecifier) ||\n stmt.moduleSpecifier.text !== module_name\n ) {\n return false;\n }\n\n const clause = stmt.importClause;\n\n if (!clause) {\n return false;\n }\n\n if (clause.name?.text === local_name) {\n return true;\n }\n\n const named_bindings = clause.namedBindings;\n\n if (!named_bindings) {\n return false;\n }\n\n if (ts.isNamespaceImport(named_bindings)) {\n return named_bindings.name.text === local_name;\n }\n\n return named_bindings.elements.some(\n (element) => element.name.text === local_name,\n );\n });\n}\n","import type MagicString from \"magic-string\";\nimport type ts from \"typescript\";\n\n/**\n * Creates a source map from transformed script back to the original block.\n *\n * @since 2.0.0\n * @param magic - MagicString instance holding the transformed source.\n * @param filename - Source filename used for the source map entry.\n * @returns A plain source map object.\n */\nexport function create_source_map(\n magic: MagicString,\n filename: string,\n): Record<string, unknown> {\n const map = magic.generateMap({\n hires: true,\n includeContent: true,\n source: filename,\n });\n\n return map as unknown as Record<string, unknown>;\n}\n\n/**\n * Slices a substring matching a node's full source range.\n *\n * @since 2.0.0\n * @param content - Original source text.\n * @param node - AST node whose full range should be extracted.\n * @returns Source text including leading trivia.\n */\nexport function slice(content: string, node: ts.Node): string {\n return content.slice(node.getFullStart(), node.end);\n}\n\n/**\n * Slices a substring matching a node's source range without leading trivia.\n *\n * @since 2.0.0\n * @param content - Original source text.\n * @param node - AST node whose non-trivia range should be extracted.\n * @returns Source text excluding leading trivia.\n */\nexport function slice_start(content: string, node: ts.Node): string {\n return content.slice(node.getStart(), node.end);\n}\n","import type { EffectBlock } from \"./types.ts\";\n\n/**\n * Builds the runtime blocks appended to lowered script effect code.\n *\n * @since 2.0.0\n * @param blocks - Effect bodies and dependency reads to emit.\n * @returns Full `$effect` blocks that fork generated `Effect.gen` programs.\n */\nexport function make_runtime_block(blocks: EffectBlock[]): string {\n const merged_block = merge_effect_blocks(blocks);\n const dep_reads = merged_block.deps.length === 0\n ? []\n : [` void [${merged_block.deps.join(\", \")}];`];\n\n const body = merged_block.statements\n .map((statement) => ` ${statement}`)\n .join(\"\\n\");\n\n return [\n \"\",\n \"$effect(() => {\",\n ...dep_reads,\n \" const __SER__dispatcher = get_dispatcher();\",\n \" const __SER__program = Effect.gen(function* () {\",\n body,\n \" });\",\n \" const __SER__cancel = __SER__dispatcher.fork(__SER__program);\",\n \" import.meta.hot?.dispose(__SER__cancel);\",\n \" return __SER__cancel;\",\n \"});\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction merge_effect_blocks(blocks: EffectBlock[]): EffectBlock {\n const statements = blocks.flatMap((block) => block.statements);\n const deps = blocks.flatMap((block) => block.deps);\n\n return {\n statements,\n deps: [...new Set(deps)],\n };\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport { AsyncEffectInSyncRuneError } from \"$/error.ts\";\nimport { slice } from \"./source.ts\";\n\nimport ts from \"typescript\";\n\nconst ASYNC_EXPRESSION_RUNES = new Set([\n \"$derived\",\n \"$inspect\",\n \"$state\",\n \"$state.raw\",\n]);\n\nconst CALLBACK_RUNES = new Set([\n \"$derived.by\",\n \"$effect\",\n \"$effect.pre\",\n \"$effect.root\",\n]);\n\n/**\n * Validates that `yield*` only appears in rune positions the script-effect\n * transform can lower without changing the rune's normal Svelte contract.\n *\n * @since 2.0.0\n * @param node - AST node to scan.\n * @param content - Original script source used for diagnostics.\n * @param filename - Source filename used for diagnostics.\n * @returns Nothing.\n */\nexport function validate_rune_yield_usage(\n node: ts.Node,\n content: string,\n filename: string,\n): void {\n visit_rune_yield_usage(node, content, filename);\n}\n\n/**\n * Identifies `$state(...)` and `$state.raw(...)` initializer calls.\n *\n * @since 2.0.0\n * @param expr - Expression to classify.\n * @param content - Original script source used to preserve argument text.\n * @returns State rune details when the expression is a state initializer.\n */\nexport function get_state_rune_initializer(\n expr: ts.Expression,\n content: string,\n): { rune_name: \"$state\" | \"$state.raw\"; value_text: string } | undefined {\n if (!ts.isCallExpression(expr)) {\n return undefined;\n }\n\n const rune_name = get_rune_name(expr.expression);\n\n if (rune_name !== \"$state\" && rune_name !== \"$state.raw\") {\n return undefined;\n }\n\n const first_arg = expr.arguments[0];\n\n if (!first_arg) {\n return undefined;\n }\n\n return {\n rune_name,\n value_text: slice(content, first_arg).trim(),\n };\n}\n\nfunction visit_rune_yield_usage(\n node: ts.Node,\n content: string,\n filename: string,\n): void {\n if (ts.isCallExpression(node)) {\n validate_call_expression(node, content, filename);\n }\n\n node.forEachChild((child) => {\n visit_rune_yield_usage(child, content, filename);\n });\n}\n\nfunction validate_call_expression(\n call: ts.CallExpression,\n content: string,\n filename: string,\n): void {\n const rune_name = get_rune_name(call.expression);\n\n if (!rune_name) {\n return;\n }\n\n if (\n !ASYNC_EXPRESSION_RUNES.has(rune_name) &&\n contains_top_level_yield_star(call)\n ) {\n throw new AsyncEffectInSyncRuneError(\n rune_name,\n slice(content, call),\n filename,\n );\n }\n\n if (!CALLBACK_RUNES.has(rune_name)) {\n return;\n }\n\n const callback = call.arguments[0];\n\n if (!callback || !callback_has_top_level_yield_star(callback)) {\n return;\n }\n\n throw new AsyncEffectInSyncRuneError(\n rune_name,\n slice(content, call),\n filename,\n );\n}\n\nfunction callback_has_top_level_yield_star(node: ts.Expression): boolean {\n if (\n (ts.isArrowFunction(node) ||\n ts.isFunctionExpression(node)) &&\n node.body !== undefined\n ) {\n return contains_top_level_yield_star(node.body);\n }\n\n return contains_top_level_yield_star(node);\n}\n\nfunction get_rune_name(expr: ts.Expression): string | undefined {\n if (ts.isIdentifier(expr) && is_rune_root(expr.text)) {\n return expr.text;\n }\n\n if (!ts.isPropertyAccessExpression(expr)) {\n return undefined;\n }\n\n const root_name = get_rune_name(expr.expression);\n\n if (!root_name) {\n return undefined;\n }\n\n return `${root_name}.${expr.name.text}`;\n}\n\nfunction is_rune_root(name: string): boolean {\n return (\n name === \"$bindable\" ||\n name === \"$derived\" ||\n name === \"$effect\" ||\n name === \"$host\" ||\n name === \"$inspect\" ||\n name === \"$props\" ||\n name === \"$state\"\n );\n}\n","import { collect_free_identifiers } from \"$/markup/transform/expressions.ts\";\nimport { contains_top_level_yield_star } from \"$/detect.ts\";\nimport {\n collect_yield_star_nodes,\n extract_binding_names,\n find_yield_star_node,\n is_yield_star_expression,\n} from \"./ast.ts\";\nimport { get_state_rune_initializer } from \"./runes.ts\";\nimport { slice, slice_start } from \"./source.ts\";\nimport type {\n EffectBlock,\n LoweredExpression,\n LoweredStatement,\n ScriptLoweringContext,\n TempBinding,\n} from \"./types.ts\";\n\nimport ts from \"typescript\";\n\n/**\n * Delegates a statement to the correct lowerer based on syntax kind.\n *\n * @since 2.0.0\n * @param stmt - Statement to lower.\n * @param content - Original source text.\n * @param context - Lowering services for this transform pass.\n * @returns Lowered statement descriptor.\n */\nexport function lower_statement(\n stmt: ts.Statement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n if (ts.isExpressionStatement(stmt)) {\n return lower_expression_statement(stmt, content, context);\n }\n\n if (ts.isVariableStatement(stmt)) {\n return lower_variable_statement(stmt, content, context);\n }\n\n const text = slice(content, stmt);\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [make_effect_block([text], collect_deps(text))],\n range: { start: stmt.getFullStart(), end: stmt.end },\n };\n}\n\nfunction lower_variable_statement(\n stmt: ts.VariableStatement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n const temps: TempBinding[] = [];\n const rewritten_decls: string[] = [];\n const statements: string[] = [];\n const deps: string[] = [];\n\n const decl_list = stmt.declarationList;\n const kind = (decl_list.flags & ts.NodeFlags.Let) !== 0 ? \"let\" : \"const\";\n let has_bare_yield = false;\n\n for (const decl of decl_list.declarations) {\n if (!decl.initializer || !contains_top_level_yield_star(decl.initializer)) {\n rewritten_decls.push(slice(content, decl).trim());\n continue;\n }\n\n const binding_text = slice(content, decl.name).trim();\n\n if (ts.isIdentifier(decl.name)) {\n const original_name = binding_text;\n\n if (is_yield_star_expression(decl.initializer)) {\n const temp_name = context.next_temp_name(original_name);\n\n temps.push({ name: temp_name });\n has_bare_yield = true;\n rewritten_decls.push(`${original_name} = $derived(${temp_name})`);\n\n const yield_text = extract_yield_star_full_text(\n decl.initializer,\n content,\n );\n\n statements.push(`${temp_name} = ${yield_text};`);\n deps.push(...collect_deps(yield_text));\n } else {\n const state_rune = get_state_rune_initializer(\n decl.initializer,\n content,\n );\n\n if (state_rune) {\n has_bare_yield = true;\n rewritten_decls.push(\n `${original_name} = ${state_rune.rune_name}(undefined)`,\n );\n statements.push(`${original_name} = ${state_rune.value_text};`);\n deps.push(...collect_deps(state_rune.value_text));\n continue;\n }\n\n const lowered = lower_expression_yields(\n decl.initializer,\n content,\n original_name,\n context,\n );\n\n temps.push(...lowered.temps);\n for (const block of lowered.effect_blocks) {\n statements.push(...block.statements);\n deps.push(...block.deps);\n }\n\n const rewritten_expr = rewrite_state_rune_as_derived(\n lowered.rewritten_expr,\n );\n\n rewritten_decls.push(`${original_name} = ${rewritten_expr}`);\n }\n } else {\n has_bare_yield = true;\n\n const temp_name = context.next_temp_name(\"destructure\");\n const names = extract_binding_names(decl.name);\n\n temps.push({ name: temp_name });\n temps.push(...names.map((name) => ({ name })));\n\n const yield_text = extract_yield_star_full_text(\n decl.initializer,\n content,\n );\n\n statements.push(`${temp_name} = ${yield_text};`);\n statements.push(`(${binding_text} = ${temp_name});`);\n deps.push(...collect_deps(yield_text));\n }\n }\n\n const rewritten_text = rewritten_decls.length === 0\n ? \"\"\n : `${has_bare_yield ? \"let\" : kind} ${rewritten_decls.join(\", \")};`;\n\n return {\n temps,\n rewritten_text,\n effect_blocks: statements.length === 0\n ? []\n : [make_effect_block(statements, deps)],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n}\n\nfunction lower_expression_statement(\n stmt: ts.ExpressionStatement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n const expr = stmt.expression;\n\n if (!contains_top_level_yield_star(expr)) {\n return {\n temps: [],\n rewritten_text: slice(content, stmt).trim(),\n effect_blocks: [],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n if (is_yield_star_expression(expr)) {\n const text = slice(content, expr).trim();\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [make_effect_block([text + \";\"], collect_deps(text))],\n range: { start: stmt.getFullStart(), end: stmt.end },\n };\n }\n\n if (\n ts.isBinaryExpression(expr) &&\n expr.operatorToken.kind === ts.SyntaxKind.EqualsToken\n ) {\n const target = slice(content, expr.left).trim();\n const yield_text = extract_yield_star_full_text(expr, content);\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [\n make_effect_block(\n [`${target} = ${yield_text};`],\n collect_deps(yield_text),\n ),\n ],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n const lowered = lower_expression_yields(\n expr,\n content,\n \"call\",\n context,\n );\n\n return {\n temps: lowered.temps,\n rewritten_text: lowered.rewritten_expr + \";\",\n effect_blocks: lowered.effect_blocks,\n range: { start: stmt.getStart(), end: stmt.end },\n };\n}\n\nfunction lower_expression_yields(\n expr: ts.Expression,\n content: string,\n hint: string,\n context: ScriptLoweringContext,\n): LoweredExpression {\n const replacements: Array<{\n start: number;\n end: number;\n text: string;\n }> = [];\n\n const temps: TempBinding[] = [];\n const statements: string[] = [];\n const deps: string[] = [];\n\n collect_yield_star_nodes(expr, (node) => {\n const temp_name = context.next_temp_name(hint);\n const yield_text = slice_start(content, node).trim();\n\n temps.push({ name: temp_name });\n statements.push(`${temp_name} = ${yield_text};`);\n deps.push(...collect_deps(yield_text));\n replacements.push({\n start: node.getStart(),\n end: node.end,\n text: temp_name,\n });\n });\n\n if (replacements.length === 0) {\n return {\n temps,\n rewritten_expr: slice(content, expr).trim(),\n effect_blocks: [],\n };\n }\n\n replacements.sort((a, b) => b.start - a.start);\n\n let text = slice(content, expr);\n\n const offset_in_expr = expr.getFullStart();\n\n for (const replacement of replacements) {\n text = text.slice(0, replacement.start - offset_in_expr) +\n replacement.text +\n text.slice(replacement.end - offset_in_expr);\n }\n\n return {\n temps,\n rewritten_expr: text.trim(),\n effect_blocks: [make_effect_block(statements, deps)],\n };\n}\n\nfunction rewrite_state_rune_as_derived(expression: string): string {\n const state_call = expression.match(/^\\$state(?:\\.raw)?\\(([\\s\\S]*)\\)$/);\n\n if (!state_call) {\n return expression;\n }\n\n return `$derived(${state_call[1]})`;\n}\n\nfunction extract_yield_star_full_text(\n expr: ts.Expression,\n content: string,\n): string {\n let found: string | undefined;\n\n find_yield_star_node(expr, (node) => {\n found = slice_start(content, node).trim();\n });\n\n return found ?? \"undefined\";\n}\n\nfunction make_effect_block(\n statements: string[],\n deps: string[],\n): EffectBlock {\n return {\n statements,\n deps: [...new Set(deps)],\n };\n}\n\nfunction collect_deps(expr_text: string): string[] {\n return collect_free_identifiers(expr_text).filter(\n (identifier) => !identifier.startsWith(\"__SER__\"),\n );\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport { has_local_import_binding, make_imports } from \"./imports.ts\";\nimport { create_source_map, slice } from \"./source.ts\";\nimport { AwaitInEffectWorkError } from \"$/error.ts\";\nimport { make_runtime_block } from \"./runtime-block.ts\";\nimport { contains_top_level_await } from \"./ast.ts\";\nimport { lower_statement } from \"./lower.ts\";\nimport { validate_rune_yield_usage } from \"./runes.ts\";\nimport type { BlockRef, EffectBlock, ScriptTransformResult } from \"./types.ts\";\n\nimport MagicString from \"magic-string\";\nimport ts from \"typescript\";\n\nexport type { BlockRef, ScriptTransformResult } from \"./types.ts\";\n\n/**\n * Transforms a `<script effect>` body by extracting top-level `yield*`\n * expressions into `$state` temp bindings and wrapping the lowered\n * assignments in a dependency-tracked `$effect` block.\n *\n * @example\n * ```ts\n * const result = transform_script_effect(\n * `let user = $state(yield* getUser(id));`,\n * \"App.svelte\",\n * );\n * ```\n *\n * @since 2.0.0\n * @param content - The raw `<script effect>` body content.\n * @param filename - The source filename, used in error messages.\n * @returns The transformed code and any block references.\n */\nexport function transform_script_effect(\n content: string,\n filename: string,\n): ScriptTransformResult {\n let temp_counter = 0;\n\n const source_file = ts.createSourceFile(\n filename,\n content,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n const magic = new MagicString(content);\n const effect_blocks: EffectBlock[] = [];\n const block_refs: BlockRef[] = [];\n\n let has_effect = false;\n\n const context = {\n next_temp_name(hint?: string) {\n const suffix = temp_counter === 0 ? \"\" : `_${temp_counter}`;\n const name = hint ? `__SER__${hint}${suffix}` : `__SER__${temp_counter}`;\n\n temp_counter += 1;\n\n return name;\n },\n };\n\n /** Phase 1: detect imports already provided by the user. */\n const has_effect_import = has_local_import_binding(\n source_file,\n \"effect\",\n \"Effect\",\n );\n\n const has_dispatcher_import = has_local_import_binding(\n source_file,\n \"svelte-effect-runtime/internal/generators\",\n \"get_dispatcher\",\n );\n\n /** Phase 2: lower every top-level statement that contains `yield*`. */\n for (const stmt of source_file.statements) {\n validate_rune_yield_usage(stmt, content, filename);\n\n const has_top_level_yield_star = contains_top_level_yield_star(stmt);\n\n if (!has_top_level_yield_star) {\n continue;\n }\n\n if (contains_top_level_await(stmt)) {\n const text = slice(content, stmt);\n throw new AwaitInEffectWorkError(filename, text);\n }\n\n has_effect = true;\n const lowered = lower_statement(stmt, content, context);\n\n magic.overwrite(\n lowered.range.start,\n lowered.range.end,\n lowered.rewritten_text,\n );\n\n if (lowered.temps.length > 0) {\n const prefix = lowered.temps\n .map((temp) => `let ${temp.name} = $state(undefined);`)\n .join(\"\\n\");\n\n magic.appendLeft(lowered.range.start, prefix + \"\\n\");\n }\n\n effect_blocks.push(...lowered.effect_blocks);\n }\n\n if (!has_effect) {\n block_refs.push({ id: filename, kind: \"script\" });\n\n return { code: content, blocks: block_refs };\n }\n\n /** Phase 3: inject runtime imports after the last user import. */\n const imports = make_imports(\n has_effect_import,\n has_dispatcher_import,\n );\n\n const last_import = [...source_file.statements]\n .reverse()\n .find(ts.isImportDeclaration);\n\n if (last_import) {\n magic.appendRight(last_import.end, \"\\n\" + imports);\n } else {\n magic.prepend(imports + \"\\n\");\n }\n\n /** Phase 4: append the runtime program and lifecycle wiring. */\n const runtime_block = make_runtime_block(effect_blocks);\n magic.append(\"\\n\" + runtime_block);\n\n block_refs.push({ id: filename, kind: \"script\" });\n\n return {\n code: magic.toString(),\n blocks: block_refs,\n map: create_source_map(magic, filename),\n };\n}\n"],"mappings":"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"}
|