svelte-effect-runtime 3.4.11 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dist/chunks/client-BrZka6DW.js +530 -0
- package/.dist/chunks/client-BrZka6DW.js.map +1 -0
- package/.dist/chunks/compiler-COVzgLYo.js +412 -0
- package/.dist/chunks/compiler-COVzgLYo.js.map +1 -0
- package/.dist/chunks/descriptors-B4otDlm1.js +216 -0
- package/.dist/chunks/descriptors-B4otDlm1.js.map +1 -0
- package/.dist/chunks/diagnostics-BDrky-Di.js +359 -0
- package/.dist/chunks/diagnostics-BDrky-Di.js.map +1 -0
- package/.dist/chunks/dispatcher-BA0PLQhA.js +16 -0
- package/.dist/chunks/dispatcher-BA0PLQhA.js.map +1 -0
- package/.dist/chunks/{dispatcher-pHH4JcFR.js → dispatcher-_x0MQZBS.js} +84 -258
- package/.dist/chunks/dispatcher-_x0MQZBS.js.map +1 -0
- package/.dist/chunks/{errors-Dcf0MVbq.js → errors-CLsbGjIa.js} +57 -106
- package/.dist/chunks/errors-CLsbGjIa.js.map +1 -0
- package/.dist/chunks/live-BundLSoY.js +146 -0
- package/.dist/chunks/live-BundLSoY.js.map +1 -0
- package/.dist/chunks/live-CHK0RrZu.js +10 -0
- package/.dist/chunks/live-CHK0RrZu.js.map +1 -0
- package/.dist/chunks/{remote-client-Bj1pZXgq.js → remote-client-mkQAfP1G.js} +30 -24
- package/.dist/chunks/remote-client-mkQAfP1G.js.map +1 -0
- package/.dist/chunks/{runtime-ekkMQ-wL.js → runtime-HDTlEnzp.js} +3 -27
- package/.dist/chunks/runtime-HDTlEnzp.js.map +1 -0
- package/.dist/chunks/server-BNrA1I-u.js +144 -0
- package/.dist/chunks/server-BNrA1I-u.js.map +1 -0
- package/.dist/chunks/source-scan-9pZxnfct.js +1059 -0
- package/.dist/chunks/source-scan-9pZxnfct.js.map +1 -0
- package/.dist/chunks/{transform-CtQDGS9c.js → transform-BXyYUAez.js} +308 -484
- package/.dist/chunks/transform-BXyYUAez.js.map +1 -0
- package/.dist/compiler/markup-identifiers.d.ts +2 -0
- package/.dist/compiler/remote-client.d.ts +6 -0
- package/.dist/compiler/source-scan.d.ts +101 -0
- package/.dist/compiler/sveltekit-remote-bridge.d.ts +3 -0
- package/.dist/{vite.d.ts → compiler.d.ts} +7 -1
- package/.dist/{vite.js → compiler.js} +1 -1
- package/.dist/detect.d.ts +0 -31
- package/.dist/detect.js +0 -39
- package/.dist/detect.js.map +1 -1
- package/.dist/diagnostics.d.ts +0 -16
- package/.dist/dispatcher/deps.d.ts +3 -14
- package/.dist/dispatcher/fibers.d.ts +5 -46
- package/.dist/dispatcher/index.d.ts +1 -143
- package/.dist/dispatcher/types.d.ts +0 -151
- package/.dist/dispatcher.js +1 -1
- package/.dist/errors.d.ts +44 -86
- package/.dist/generated/dispatcher.d.ts +0 -50
- package/.dist/generators.d.ts +3 -12
- package/.dist/internal/descriptors.d.ts +0 -16
- package/.dist/internal/generators.js +25 -3
- package/.dist/internal/generators.js.map +1 -0
- package/.dist/internal/live.d.ts +9 -0
- package/.dist/internal/remote-client.js +2 -2
- package/.dist/internal/remote-server.js +2 -2
- package/.dist/internal/schema.d.ts +13 -0
- package/.dist/live.d.ts +106 -0
- package/.dist/markup/event-attributes.d.ts +5 -28
- package/.dist/markup/promise.d.ts +1 -23
- package/.dist/markup/promise.js +2 -18
- package/.dist/markup/promise.js.map +1 -1
- package/.dist/markup/run.d.ts +1 -10
- package/.dist/markup/run.js +2 -11
- package/.dist/markup/run.js.map +1 -1
- package/.dist/markup/transform/apply.d.ts +4 -4
- package/.dist/markup/transform/classify.d.ts +2 -11
- package/.dist/markup/transform/constants.d.ts +2 -1
- package/.dist/markup/transform/effect-bindings.d.ts +2 -26
- package/.dist/markup/transform/effect-callbacks.d.ts +0 -20
- package/.dist/markup/transform/emit.d.ts +2 -11
- package/.dist/markup/transform/expressions.d.ts +0 -35
- package/.dist/markup/transform/scan.d.ts +3 -22
- package/.dist/markup/transform/types.d.ts +2 -129
- package/.dist/markup/transform.js +1 -1
- package/.dist/markup/value.d.ts +1 -18
- package/.dist/markup/value.js +2 -19
- package/.dist/markup/value.js.map +1 -1
- package/.dist/mod.d.ts +6 -8
- package/.dist/mod.js +5 -4
- package/.dist/mod.js.map +1 -1
- package/.dist/remote/cause-codec.d.ts +19 -0
- package/.dist/remote/client/command.d.ts +3 -17
- package/.dist/remote/client/form-data.d.ts +0 -7
- package/.dist/remote/client/form-enhance.d.ts +0 -7
- package/.dist/remote/client/form-transport.d.ts +15 -18
- package/.dist/remote/client/form.d.ts +9 -20
- package/.dist/remote/client/index.d.ts +2 -1
- package/.dist/remote/client/prerender.d.ts +6 -0
- package/.dist/remote/client/query-result.d.ts +2 -14
- package/.dist/remote/client/query.d.ts +9 -59
- package/.dist/remote/client/responses.d.ts +3 -27
- package/.dist/remote/client/types.d.ts +26 -101
- package/.dist/remote/client/utils.d.ts +0 -8
- package/.dist/remote/client.d.ts +2 -2
- package/.dist/remote/client.js +2 -2
- package/.dist/remote/effect.d.ts +6 -0
- package/.dist/remote/failures.d.ts +4 -0
- package/.dist/remote/query-update.d.ts +2 -0
- package/.dist/remote/resource.d.ts +25 -0
- package/.dist/remote/server.d.ts +5 -60
- package/.dist/remote/server.js +2 -179
- package/.dist/remote/shared.d.ts +6 -145
- package/.dist/remote/shared.js +6 -127
- package/.dist/remote/shared.js.map +1 -1
- package/.dist/runtime/transform.js +83 -87
- package/.dist/runtime/transform.js.map +1 -1
- package/.dist/script-transform/ast.d.ts +0 -46
- package/.dist/script-transform/imports.d.ts +2 -38
- package/.dist/script-transform/lower.d.ts +0 -9
- package/.dist/script-transform/runes.d.ts +0 -10
- package/.dist/script-transform/runtime-block.d.ts +0 -17
- package/.dist/script-transform/source.d.ts +0 -24
- package/.dist/script-transform/types.d.ts +9 -126
- package/.dist/server/effects.d.ts +8 -57
- package/.dist/server/factories.d.ts +7 -7
- package/.dist/server/handler.d.ts +37 -0
- package/.dist/server/index.d.ts +4 -1
- package/.dist/server/invalid.d.ts +0 -7
- package/.dist/server/live-snapshot.d.ts +5 -0
- package/.dist/server/remote-handler-context.d.ts +5 -0
- package/.dist/server/runtime.d.ts +6 -24
- package/.dist/server/schema.d.ts +2 -40
- package/.dist/server/transport.d.ts +2 -0
- package/.dist/server/types.d.ts +88 -71
- package/.dist/server/wrappers.d.ts +4 -41
- package/.dist/server.d.ts +2 -2
- package/.dist/server.js +255 -279
- package/.dist/server.js.map +1 -1
- package/.dist/yieldable.d.ts +7 -0
- package/README.md +1 -1
- package/package.json +5 -5
- package/.dist/chunks/client-CsVu54pU.js +0 -627
- package/.dist/chunks/client-CsVu54pU.js.map +0 -1
- package/.dist/chunks/descriptors-cOe9uRJz.js +0 -36
- package/.dist/chunks/descriptors-cOe9uRJz.js.map +0 -1
- package/.dist/chunks/dispatcher-LtvFKYUp.js +0 -47
- package/.dist/chunks/dispatcher-LtvFKYUp.js.map +0 -1
- package/.dist/chunks/dispatcher-pHH4JcFR.js.map +0 -1
- package/.dist/chunks/errors-Dcf0MVbq.js.map +0 -1
- package/.dist/chunks/event-attributes-gHzP2ycp.js +0 -39
- package/.dist/chunks/event-attributes-gHzP2ycp.js.map +0 -1
- package/.dist/chunks/remote-client-Bj1pZXgq.js.map +0 -1
- package/.dist/chunks/runtime-ekkMQ-wL.js.map +0 -1
- package/.dist/chunks/transform-CtQDGS9c.js.map +0 -1
- package/.dist/chunks/vite-WGlbSnso.js +0 -486
- package/.dist/chunks/vite-WGlbSnso.js.map +0 -1
- package/.dist/remote/client/effect.d.ts +0 -29
- package/.dist/remote/client/failures.d.ts +0 -42
- package/.dist/remote/server.js.map +0 -1
- package/.dist/vite/remote-client.d.ts +0 -24
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
2
|
import MagicString from "magic-string";
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/compiler/remote-client.ts
|
|
4
4
|
const remote_client_export_types = /* @__PURE__ */ new Set([
|
|
5
5
|
"query_batch",
|
|
6
6
|
"query_live",
|
|
@@ -9,25 +9,7 @@ const remote_client_export_types = /* @__PURE__ */ new Set([
|
|
|
9
9
|
"form",
|
|
10
10
|
"prerender"
|
|
11
11
|
]);
|
|
12
|
-
/**
|
|
13
|
-
* Rewrites SvelteKit's generated client remote module into Effect-aware
|
|
14
|
-
* wrappers while preserving the native remote factory calls.
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```ts
|
|
18
|
-
* const rewritten = rewrite_remote_client_exports(
|
|
19
|
-
* `export const get_post = __remote.query("hash/get_post")`,
|
|
20
|
-
* );
|
|
21
|
-
* ```
|
|
22
|
-
*
|
|
23
|
-
* @since 2.0.0
|
|
24
|
-
* @param code - Generated SvelteKit remote client module source to inspect and
|
|
25
|
-
* rewrite.
|
|
26
|
-
* @param options - Optional rewrite options forwarded from the SER Vite plugin.
|
|
27
|
-
* @returns The rewritten module source, or the original source when no remote
|
|
28
|
-
* exports are found.
|
|
29
|
-
* @internal
|
|
30
|
-
*/
|
|
12
|
+
/** Rewrites SvelteKit's generated remote client exports to SER adapters. */
|
|
31
13
|
function rewrite_remote_client_exports(code, options) {
|
|
32
14
|
const source_file = ts.createSourceFile("sveltekit-remote-client.ts", code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
33
15
|
const namespace_import = find_remote_namespace_import(source_file);
|
|
@@ -35,9 +17,31 @@ function rewrite_remote_client_exports(code, options) {
|
|
|
35
17
|
const remote_exports = collect_remote_client_exports(source_file, code, namespace_import.name);
|
|
36
18
|
if (remote_exports.length === 0) return code;
|
|
37
19
|
const magic = new MagicString(code);
|
|
20
|
+
const has_remote_form = remote_exports.some((remote_export) => remote_export.type === "form");
|
|
38
21
|
const injected = [
|
|
39
|
-
[
|
|
40
|
-
|
|
22
|
+
[
|
|
23
|
+
`import { create_remote_query_adapter, create_remote_live_query_adapter, create_remote_prerender_adapter, create_remote_command_adapter, create_remote_form_adapter } from "svelte-effect-runtime/internal/remote-client";`,
|
|
24
|
+
has_remote_form && `import { goto as __SER___goto, invalidateAll as __SER___invalidate_all } from "$app/navigation";`,
|
|
25
|
+
`import { app_dir, base } from "$app/paths/internal/client";`
|
|
26
|
+
].filter(Boolean).join("\n"),
|
|
27
|
+
[
|
|
28
|
+
`const __SER___remote_base = \`\${base}/\${app_dir}/remote\`;`,
|
|
29
|
+
`function __SER___decode_payload(value) { return value; }`,
|
|
30
|
+
has_remote_form && [
|
|
31
|
+
`function __SER___navigate_remote_form(location, invalidate_all) {`,
|
|
32
|
+
`\tconst target = new URL(location, globalThis.location.href);`,
|
|
33
|
+
``,
|
|
34
|
+
`\tif (target.origin !== globalThis.location.origin) {`,
|
|
35
|
+
`\t\tglobalThis.location.assign(target.href);`,
|
|
36
|
+
``,
|
|
37
|
+
`\t\treturn Promise.resolve();`,
|
|
38
|
+
`\t}`,
|
|
39
|
+
``,
|
|
40
|
+
`\treturn __SER___goto(target, { invalidateAll: invalidate_all });`,
|
|
41
|
+
`}`
|
|
42
|
+
].join("\n"),
|
|
43
|
+
has_remote_form && `const __SER___remote_form_transport = { binary_form_content_type: ${namespace_import.name}.__SER___binary_form_content_type, navigate: __SER___navigate_remote_form, refresh: __SER___invalidate_all, remote_request: ${namespace_import.name}.__SER___remote_request, serialize_binary_form: ${namespace_import.name}.__SER___serialize_binary_form };`
|
|
44
|
+
].filter(Boolean).join("\n"),
|
|
41
45
|
options?.debug ? `console.log("[ser] remote client wrappers loaded");` : ""
|
|
42
46
|
].filter(Boolean).join("\n");
|
|
43
47
|
magic.appendRight(namespace_import.statement.end, `\n${injected}`);
|
|
@@ -46,8 +50,10 @@ function rewrite_remote_client_exports(code, options) {
|
|
|
46
50
|
}
|
|
47
51
|
function make_remote_export(name, remote_type, native_call) {
|
|
48
52
|
if (remote_type === "command") return `export const ${name} = create_remote_command_adapter(${native_call}, __SER___decode_payload);`;
|
|
49
|
-
if (remote_type === "form") return `export const ${name} = create_remote_form_adapter(${native_call}, __SER___decode_payload, __SER___remote_base);`;
|
|
53
|
+
if (remote_type === "form") return `export const ${name} = create_remote_form_adapter(${native_call}, __SER___decode_payload, __SER___remote_base, __SER___remote_form_transport);`;
|
|
50
54
|
if (remote_type === "query_live") return `export const ${name} = create_remote_live_query_adapter(${native_call}, __SER___decode_payload);`;
|
|
55
|
+
if (remote_type === "prerender") return `export const ${name} = create_remote_prerender_adapter(${native_call}, __SER___decode_payload);`;
|
|
56
|
+
if (remote_type === "query_batch") return `export const ${name} = create_remote_query_adapter(${native_call}, __SER___decode_payload, "", "batch");`;
|
|
51
57
|
return `export const ${name} = create_remote_query_adapter(${native_call}, __SER___decode_payload);`;
|
|
52
58
|
}
|
|
53
59
|
function find_remote_namespace_import(source_file) {
|
|
@@ -105,4 +111,4 @@ function is_const_declaration_list(declaration_list) {
|
|
|
105
111
|
//#endregion
|
|
106
112
|
export { rewrite_remote_client_exports };
|
|
107
113
|
|
|
108
|
-
//# sourceMappingURL=remote-client-
|
|
114
|
+
//# sourceMappingURL=remote-client-mkQAfP1G.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-client-mkQAfP1G.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/compiler/remote-client.ts"],"sourcesContent":["import type {\n\tExpression,\n\tImportDeclaration,\n\tSourceFile,\n\tStatement,\n\tVariableStatement,\n} from \"typescript\";\n\nimport MagicString from \"magic-string\";\nimport ts from \"typescript\";\n\ninterface RemoteClientRewriteOptions {\n\tdebug?: boolean;\n}\n\ntype RemoteClientExportType =\n\t| \"query_batch\"\n\t| \"query_live\"\n\t| \"query\"\n\t| \"command\"\n\t| \"form\"\n\t| \"prerender\";\n\ninterface RemoteNamespaceImport {\n\tname: string;\n\tstatement: ImportDeclaration;\n}\n\ninterface RemoteClientExport {\n\tname: string;\n\ttype: RemoteClientExportType;\n\tstatement: VariableStatement;\n\tnative_call: string;\n}\n\nconst remote_client_export_types = new Set<RemoteClientExportType>([\n\t\"query_batch\",\n\t\"query_live\",\n\t\"query\",\n\t\"command\",\n\t\"form\",\n\t\"prerender\",\n]);\n\n/** Rewrites SvelteKit's generated remote client exports to SER adapters. */\nexport function rewrite_remote_client_exports(\n\tcode: string,\n\toptions?: RemoteClientRewriteOptions,\n): string {\n\tconst source_file = ts.createSourceFile(\n\t\t\"sveltekit-remote-client.ts\",\n\t\tcode,\n\t\tts.ScriptTarget.Latest,\n\t\ttrue,\n\t\tts.ScriptKind.TS,\n\t);\n\tconst namespace_import = find_remote_namespace_import(source_file);\n\n\tif (!namespace_import) {\n\t\treturn code;\n\t}\n\n\tconst remote_exports = collect_remote_client_exports(source_file, code, namespace_import.name);\n\n\tif (remote_exports.length === 0) {\n\t\treturn code;\n\t}\n\n\tconst magic = new MagicString(code);\n\tconst has_remote_form = remote_exports.some((remote_export) => remote_export.type === \"form\");\n\tconst imports = [\n\t\t`import { create_remote_query_adapter, create_remote_live_query_adapter, create_remote_prerender_adapter, create_remote_command_adapter, create_remote_form_adapter } from \"svelte-effect-runtime/internal/remote-client\";`,\n\t\thas_remote_form &&\n\t\t\t`import { goto as __SER___goto, invalidateAll as __SER___invalidate_all } from \"$app/navigation\";`,\n\t\t`import { app_dir, base } from \"$app/paths/internal/client\";`,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\");\n\n\tconst helpers = [\n\t\t`const __SER___remote_base = \\`\\${base}/\\${app_dir}/remote\\`;`,\n\t\t`function __SER___decode_payload(value) { return value; }`,\n\t\thas_remote_form &&\n\t\t\t[\n\t\t\t\t`function __SER___navigate_remote_form(location, invalidate_all) {`,\n\t\t\t\t`\\tconst target = new URL(location, globalThis.location.href);`,\n\t\t\t\t``,\n\t\t\t\t`\\tif (target.origin !== globalThis.location.origin) {`,\n\t\t\t\t`\\t\\tglobalThis.location.assign(target.href);`,\n\t\t\t\t``,\n\t\t\t\t`\\t\\treturn Promise.resolve();`,\n\t\t\t\t`\\t}`,\n\t\t\t\t``,\n\t\t\t\t`\\treturn __SER___goto(target, { invalidateAll: invalidate_all });`,\n\t\t\t\t`}`,\n\t\t\t].join(\"\\n\"),\n\t\thas_remote_form &&\n\t\t\t`const __SER___remote_form_transport = { binary_form_content_type: ${namespace_import.name}.__SER___binary_form_content_type, navigate: __SER___navigate_remote_form, refresh: __SER___invalidate_all, remote_request: ${namespace_import.name}.__SER___remote_request, serialize_binary_form: ${namespace_import.name}.__SER___serialize_binary_form };`,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\");\n\tconst debug_line = options?.debug ? `console.log(\"[ser] remote client wrappers loaded\");` : \"\";\n\tconst injected = [imports, helpers, debug_line].filter(Boolean).join(\"\\n\");\n\n\tmagic.appendRight(namespace_import.statement.end, `\\n${injected}`);\n\n\tfor (const remote_export of remote_exports) {\n\t\tmagic.overwrite(\n\t\t\tremote_export.statement.getStart(source_file),\n\t\t\tremote_export.statement.end,\n\t\t\tmake_remote_export(remote_export.name, remote_export.type, remote_export.native_call),\n\t\t);\n\t}\n\n\treturn magic.toString();\n}\n\nfunction make_remote_export(\n\tname: string,\n\tremote_type: RemoteClientExportType,\n\tnative_call: string,\n): string {\n\tif (remote_type === \"command\") {\n\t\treturn `export const ${name} = create_remote_command_adapter(${native_call}, __SER___decode_payload);`;\n\t}\n\n\tif (remote_type === \"form\") {\n\t\treturn `export const ${name} = create_remote_form_adapter(${native_call}, __SER___decode_payload, __SER___remote_base, __SER___remote_form_transport);`;\n\t}\n\n\tif (remote_type === \"query_live\") {\n\t\treturn `export const ${name} = create_remote_live_query_adapter(${native_call}, __SER___decode_payload);`;\n\t}\n\n\tif (remote_type === \"prerender\") {\n\t\treturn `export const ${name} = create_remote_prerender_adapter(${native_call}, __SER___decode_payload);`;\n\t}\n\n\tif (remote_type === \"query_batch\") {\n\t\treturn `export const ${name} = create_remote_query_adapter(${native_call}, __SER___decode_payload, \"\", \"batch\");`;\n\t}\n\n\treturn `export const ${name} = create_remote_query_adapter(${native_call}, __SER___decode_payload);`;\n}\n\nfunction find_remote_namespace_import(source_file: SourceFile): RemoteNamespaceImport | undefined {\n\tfor (const statement of source_file.statements) {\n\t\tif (!ts.isImportDeclaration(statement)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst namespace_import = get_remote_namespace_import(statement);\n\n\t\tif (namespace_import) {\n\t\t\treturn namespace_import;\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nfunction get_remote_namespace_import(\n\tstatement: ImportDeclaration,\n): RemoteNamespaceImport | undefined {\n\tif (\n\t\t!ts.isStringLiteral(statement.moduleSpecifier) ||\n\t\tstatement.moduleSpecifier.text !== \"__sveltekit/remote\"\n\t) {\n\t\treturn undefined;\n\t}\n\n\tconst import_clause = statement.importClause;\n\tconst bindings = import_clause?.namedBindings;\n\n\tif (import_clause?.isTypeOnly || !bindings || !ts.isNamespaceImport(bindings)) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tname: bindings.name.text,\n\t\tstatement,\n\t};\n}\n\nfunction collect_remote_client_exports(\n\tsource_file: SourceFile,\n\tcode: string,\n\tnamespace: string,\n): RemoteClientExport[] {\n\treturn source_file.statements.flatMap((statement) =>\n\t\tcollect_remote_client_export(source_file, code, namespace, statement),\n\t);\n}\n\nfunction collect_remote_client_export(\n\tsource_file: SourceFile,\n\tcode: string,\n\tnamespace: string,\n\tstatement: Statement,\n): RemoteClientExport[] {\n\tif (\n\t\t!ts.isVariableStatement(statement) ||\n\t\t!is_export_statement(statement) ||\n\t\t!is_const_declaration_list(statement.declarationList) ||\n\t\tstatement.declarationList.declarations.length !== 1\n\t) {\n\t\treturn [];\n\t}\n\n\tconst declaration = statement.declarationList.declarations[0];\n\tconst initializer = declaration.initializer;\n\n\tif (!ts.isIdentifier(declaration.name) || !initializer) {\n\t\treturn [];\n\t}\n\n\tconst remote_type = get_remote_client_export_type(initializer, namespace);\n\n\tif (!remote_type) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\t{\n\t\t\tname: declaration.name.text,\n\t\t\ttype: remote_type,\n\t\t\tstatement,\n\t\t\tnative_call: code.slice(initializer.getStart(source_file), initializer.end),\n\t\t},\n\t];\n}\n\nfunction get_remote_client_export_type(\n\tinitializer: Expression,\n\tnamespace: string,\n): RemoteClientExportType | undefined {\n\tif (!ts.isCallExpression(initializer)) {\n\t\treturn undefined;\n\t}\n\n\tconst expression = initializer.expression;\n\n\tif (!ts.isPropertyAccessExpression(expression)) {\n\t\treturn undefined;\n\t}\n\n\tif (!ts.isIdentifier(expression.expression) || expression.expression.text !== namespace) {\n\t\treturn undefined;\n\t}\n\n\tconst remote_type = expression.name.text;\n\n\tif (!is_remote_client_export_type(remote_type)) {\n\t\treturn undefined;\n\t}\n\n\treturn remote_type;\n}\n\nfunction is_remote_client_export_type(value: string): value is RemoteClientExportType {\n\treturn remote_client_export_types.has(value as RemoteClientExportType);\n}\n\nfunction is_export_statement(statement: Statement): boolean {\n\tconst modifiers = ts.canHaveModifiers(statement) ? ts.getModifiers(statement) : undefined;\n\n\treturn modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword) ?? false;\n}\n\nfunction is_const_declaration_list(declaration_list: ts.VariableDeclarationList): boolean {\n\treturn (ts.getCombinedNodeFlags(declaration_list) & ts.NodeFlags.Const) !== 0;\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as Dispatcher } from "./dispatcher-
|
|
1
|
+
import { b as RuntimeAlreadyInitializedError, y as RequestEventUnavailableError } from "./errors-CLsbGjIa.js";
|
|
2
|
+
import { t as Dispatcher } from "./dispatcher-_x0MQZBS.js";
|
|
3
3
|
import { Context, Layer, ManagedRuntime } from "effect";
|
|
4
4
|
//#region src/server/runtime.ts
|
|
5
5
|
/**
|
|
@@ -64,18 +64,6 @@ function get_server_runtime_or_throw() {
|
|
|
64
64
|
if (!current_server_runtime) current_server_runtime = ManagedRuntime.make(Layer.empty);
|
|
65
65
|
return current_server_runtime;
|
|
66
66
|
}
|
|
67
|
-
/**
|
|
68
|
-
* Returns a dispatcher backed by the active server runtime.
|
|
69
|
-
*
|
|
70
|
-
* @example
|
|
71
|
-
* ```ts
|
|
72
|
-
* const dispatcher = get_server_dispatcher();
|
|
73
|
-
* ```
|
|
74
|
-
*
|
|
75
|
-
* @since 3.0.1
|
|
76
|
-
* @returns The cached server dispatcher, creating one from the current server
|
|
77
|
-
* runtime when needed.
|
|
78
|
-
*/
|
|
79
67
|
function get_server_dispatcher() {
|
|
80
68
|
current_server_dispatcher ??= new Dispatcher(get_server_runtime_or_throw());
|
|
81
69
|
return current_server_dispatcher;
|
|
@@ -84,18 +72,6 @@ function is_vite_dev_ssr() {
|
|
|
84
72
|
const env = import.meta.env;
|
|
85
73
|
return env?.DEV === true && env?.SSR === true && env.MODE !== "test";
|
|
86
74
|
}
|
|
87
|
-
/**
|
|
88
|
-
* Resets the internal server runtime singleton used by source-level tests.
|
|
89
|
-
*
|
|
90
|
-
* @example
|
|
91
|
-
* ```ts
|
|
92
|
-
* reset_server_runtime();
|
|
93
|
-
* ```
|
|
94
|
-
*
|
|
95
|
-
* @since 3.4.0
|
|
96
|
-
* @returns Nothing.
|
|
97
|
-
* @internal
|
|
98
|
-
*/
|
|
99
75
|
function reset_server_runtime() {
|
|
100
76
|
const dispatcher = current_server_dispatcher;
|
|
101
77
|
const runtime = current_server_runtime;
|
|
@@ -114,4 +90,4 @@ function reset_server_runtime() {
|
|
|
114
90
|
//#endregion
|
|
115
91
|
export { get_server_runtime_or_throw as i, ServerRuntime as n, get_server_dispatcher as r, RequestEvent as t };
|
|
116
92
|
|
|
117
|
-
//# sourceMappingURL=runtime-
|
|
93
|
+
//# sourceMappingURL=runtime-HDTlEnzp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-HDTlEnzp.js","names":["InternalDispatcher"],"sources":["../../../modules/svelte-effect-runtime/src/server/runtime.ts"],"sourcesContent":["import { RequestEventUnavailableError, RuntimeAlreadyInitializedError } from \"$/errors.ts\";\nimport type { ManagedRuntime as ManagedRuntimeType } from \"effect/ManagedRuntime\";\nimport type { RequestEvent as SvelteKitRequestEvent } from \"@sveltejs/kit\";\nimport { Dispatcher as InternalDispatcher } from \"$/dispatcher.ts\";\nimport { Context, Layer, ManagedRuntime } from \"effect\";\n\ntype ViteImportMeta = ImportMeta & {\n\treadonly env?: {\n\t\treadonly DEV?: boolean;\n\t\treadonly MODE?: string;\n\t\treadonly SSR?: boolean;\n\t};\n};\n\n/**\n * Subset of SvelteKit's `RequestEvent` that remote handlers typically access.\n *\n * @example\n * ```ts\n * const event: RequestEvent = yield* RequestEvent;\n * console.log(event.url.pathname);\n * ```\n *\n * @since 2.0.0\n */\nexport interface RequestEvent extends Pick<\n\tSvelteKitRequestEvent,\n\t\"cookies\" | \"getClientAddress\" | \"locals\" | \"params\" | \"platform\" | \"request\" | \"route\" | \"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.Reference<RequestEvent>(\n\t\"@ser/RequestEvent\",\n\t{\n\t\tdefaultValue: () => {\n\t\t\tthrow new RequestEventUnavailableError();\n\t\t},\n\t},\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\t/**\n\t * Build and cache the server-side `ManagedRuntime`.\n\t *\n\t * @since 2.0.0\n\t * @param layer - Optional Effect layer to provide to the runtime.\n\t * @returns The configured ManagedRuntime.\n\t */\n\tstatic make<R = never>(layer?: Layer.Layer<R>): ManagedRuntime.ManagedRuntime<R, never> {\n\t\tconst should_replace_dev_runtime =\n\t\t\tcurrent_server_runtime !== undefined && is_vite_dev_ssr();\n\n\t\t/**\n\t\t * Keep duplicate production initialization loud while allowing SvelteKit's\n\t\t * dev server to re-run hooks.server.ts after an HMR invalidation.\n\t\t */\n\t\tif (current_server_runtime && !should_replace_dev_runtime) {\n\t\t\tthrow new RuntimeAlreadyInitializedError(\"ServerRuntime\");\n\t\t}\n\n\t\tif (should_replace_dev_runtime) {\n\t\t\treset_server_runtime();\n\t\t}\n\n\t\tconst runtime = ManagedRuntime.make(layer ?? (Layer.empty as unknown as Layer.Layer<R>));\n\n\t\tcurrent_server_runtime = runtime as ManagedRuntime.ManagedRuntime<unknown, never>;\n\t\tcurrent_server_dispatcher = new InternalDispatcher(\n\t\t\truntime as unknown as ManagedRuntimeType<unknown, unknown>,\n\t\t);\n\n\t\treturn runtime;\n\t}\n}\n\nlet current_server_runtime: ManagedRuntime.ManagedRuntime<unknown, never> | undefined;\nlet current_server_dispatcher: InternalDispatcher | 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<unknown, never> {\n\tif (!current_server_runtime) {\n\t\tcurrent_server_runtime = ManagedRuntime.make(Layer.empty) as ManagedRuntime.ManagedRuntime<\n\t\t\tunknown,\n\t\t\tnever\n\t\t>;\n\t}\n\n\treturn current_server_runtime;\n}\n\nexport function get_server_dispatcher(): InternalDispatcher {\n\tcurrent_server_dispatcher ??= new InternalDispatcher(\n\t\tget_server_runtime_or_throw() as unknown as ManagedRuntimeType<unknown, unknown>,\n\t);\n\n\treturn current_server_dispatcher;\n}\n\nfunction is_vite_dev_ssr(): boolean {\n\tconst env = (import.meta as ViteImportMeta).env;\n\n\treturn env?.DEV === true && env?.SSR === true && env.MODE !== \"test\";\n}\n\nexport function reset_server_runtime(): void {\n\tconst dispatcher = current_server_dispatcher;\n\tconst runtime = current_server_runtime;\n\n\tcurrent_server_dispatcher = undefined;\n\tcurrent_server_runtime = undefined;\n\n\tif (dispatcher) {\n\t\tdispatcher.dispose();\n\n\t\treturn;\n\t}\n\n\tvoid runtime?.dispose().catch((error: unknown) => {\n\t\tqueueMicrotask(() => {\n\t\t\tthrow error;\n\t\t});\n\t});\n}\n"],"mappings":";;;;;;;;;;;;;;AAwCA,MAAa,eAAgD,QAAQ,UACpE,qBACA,EACC,oBAAoB;CACnB,MAAM,IAAI,6BAA6B;AACxC,EACD,CACD;;;;;;;;;;;AAYA,IAAa,gBAAb,MAA2B;;;;;;;;CAQ1B,OAAO,KAAgB,OAAiE;EACvF,MAAM,6BACL,2BAA2B,KAAA,KAAa,gBAAgB;;;;;EAMzD,IAAI,0BAA0B,CAAC,4BAC9B,MAAM,IAAI,+BAA+B,eAAe;EAGzD,IAAI,4BACH,qBAAqB;EAGtB,MAAM,UAAU,eAAe,KAAK,SAAU,MAAM,KAAmC;EAEvF,yBAAyB;EACzB,4BAA4B,IAAIA,WAC/B,OACD;EAEA,OAAO;CACR;AACD;AAEA,IAAI;AACJ,IAAI;;;;;;;;;;;;AAaJ,SAAgB,8BAA6E;CAC5F,IAAI,CAAC,wBACJ,yBAAyB,eAAe,KAAK,MAAM,KAAK;CAMzD,OAAO;AACR;AAEA,SAAgB,wBAA4C;CAC3D,8BAA8B,IAAIA,WACjC,4BAA4B,CAC7B;CAEA,OAAO;AACR;AAEA,SAAS,kBAA2B;CACnC,MAAM,MAAO,OAAO,KAAwB;CAE5C,OAAO,KAAK,QAAQ,QAAQ,KAAK,QAAQ,QAAQ,IAAI,SAAS;AAC/D;AAEA,SAAgB,uBAA6B;CAC5C,MAAM,aAAa;CACnB,MAAM,UAAU;CAEhB,4BAA4B,KAAA;CAC5B,yBAAyB,KAAA;CAEzB,IAAI,YAAY;EACf,WAAW,QAAQ;EAEnB;CACD;CAEA,SAAc,QAAQ,CAAC,CAAC,OAAO,UAAmB;EACjD,qBAAqB;GACpB,MAAM;EACP,CAAC;CACF,CAAC;AACF"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { _ as RemoteHelperContextError, v as RemoteHelperError } from "./errors-CLsbGjIa.js";
|
|
2
|
+
import { create_serialized_remote_failure_envelope, is_form_error } from "../remote/shared.js";
|
|
3
|
+
import { Cause, Effect, Exit, Schema } from "effect";
|
|
4
|
+
import { isHttpError, isRedirect, isValidationError } from "@sveltejs/kit";
|
|
5
|
+
import { stringify } from "devalue";
|
|
6
|
+
//#region src/remote/cause-codec.ts
|
|
7
|
+
/** Preserves SvelteKit control flow before classifying transportable Effect failures. */
|
|
8
|
+
function classify_remote_cause(cause) {
|
|
9
|
+
const control_flow = find_sveltekit_control_flow(cause);
|
|
10
|
+
if (control_flow !== void 0) return {
|
|
11
|
+
_tag: "SvelteKitControlFlow",
|
|
12
|
+
value: control_flow
|
|
13
|
+
};
|
|
14
|
+
if (Cause.hasInterruptsOnly(cause)) return {
|
|
15
|
+
_tag: "InterruptOnly",
|
|
16
|
+
cause
|
|
17
|
+
};
|
|
18
|
+
const form_error_issues = find_form_error_issues(cause);
|
|
19
|
+
if (form_error_issues !== void 0) return {
|
|
20
|
+
_tag: "FormInvalid",
|
|
21
|
+
issues: form_error_issues
|
|
22
|
+
};
|
|
23
|
+
return {
|
|
24
|
+
_tag: "RemoteFailure",
|
|
25
|
+
encoded: encode_remote_failure(cause)
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Encodes a remote failure into the transport ABI shared with generated clients. */
|
|
29
|
+
function encode_remote_failure(cause) {
|
|
30
|
+
for (const reason of cause.reasons) {
|
|
31
|
+
if (!Cause.isFailReason(reason)) continue;
|
|
32
|
+
const encoded = stringify_failure(to_public_remote_failure(reason.error));
|
|
33
|
+
if (encoded !== void 0) return encoded;
|
|
34
|
+
}
|
|
35
|
+
return stringify_unknown_remote_failure();
|
|
36
|
+
}
|
|
37
|
+
function find_sveltekit_control_flow(cause) {
|
|
38
|
+
for (const reason of cause.reasons) {
|
|
39
|
+
if (!Cause.isDieReason(reason)) continue;
|
|
40
|
+
if (is_sveltekit_control_flow(reason.defect)) return reason.defect;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function find_form_error_issues(cause) {
|
|
44
|
+
for (const reason of cause.reasons) {
|
|
45
|
+
if (!Cause.isFailReason(reason)) continue;
|
|
46
|
+
const issues = get_form_error_issues(reason.error);
|
|
47
|
+
if (issues !== void 0) return issues;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function get_form_error_issues(value) {
|
|
51
|
+
if (is_form_error(value)) return value.issues;
|
|
52
|
+
return is_tagged_form_error(value) ? [] : void 0;
|
|
53
|
+
}
|
|
54
|
+
function is_sveltekit_control_flow(value) {
|
|
55
|
+
return isRedirect(value) || isHttpError(value) || isValidationError(value);
|
|
56
|
+
}
|
|
57
|
+
function stringify_failure(value) {
|
|
58
|
+
try {
|
|
59
|
+
return stringify(value);
|
|
60
|
+
} catch {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function to_public_remote_failure(value) {
|
|
65
|
+
if (!has_public_remote_failure_tag(value)) return create_unknown_remote_failure();
|
|
66
|
+
return to_serializable_public_failure(value) ?? create_unknown_remote_failure();
|
|
67
|
+
}
|
|
68
|
+
function to_serializable_public_failure(value, seen = /* @__PURE__ */ new WeakSet()) {
|
|
69
|
+
if (typeof value === "function" || typeof value === "symbol") return;
|
|
70
|
+
if (!is_object_like(value)) return value;
|
|
71
|
+
if (stringify_failure(value) !== void 0) return value;
|
|
72
|
+
if (is_internal_object(value)) return;
|
|
73
|
+
if (seen.has(value)) return;
|
|
74
|
+
seen.add(value);
|
|
75
|
+
const serializable = Array.isArray(value) ? value.map((item) => to_serializable_public_failure(item, seen)) : to_plain_record(value, seen);
|
|
76
|
+
seen.delete(value);
|
|
77
|
+
return serializable;
|
|
78
|
+
}
|
|
79
|
+
function to_plain_record(value, seen) {
|
|
80
|
+
const descriptors = Object.getOwnPropertyDescriptors(value);
|
|
81
|
+
const record = {};
|
|
82
|
+
for (const [key, descriptor] of Object.entries(descriptors)) {
|
|
83
|
+
if (key === "stack" || !("value" in descriptor)) continue;
|
|
84
|
+
record[key] = to_serializable_public_failure(descriptor.value, seen);
|
|
85
|
+
}
|
|
86
|
+
if (value instanceof Error && !("message" in record)) record.message = value.message;
|
|
87
|
+
return record;
|
|
88
|
+
}
|
|
89
|
+
function is_object_like(value) {
|
|
90
|
+
return typeof value === "object" && value !== null;
|
|
91
|
+
}
|
|
92
|
+
function has_public_remote_failure_tag(value) {
|
|
93
|
+
return is_object_like(value) && typeof value._tag === "string";
|
|
94
|
+
}
|
|
95
|
+
function is_internal_object(value) {
|
|
96
|
+
return !Array.isArray(value) && !is_plain_record(value) && !has_public_remote_failure_tag(value);
|
|
97
|
+
}
|
|
98
|
+
function is_plain_record(value) {
|
|
99
|
+
const prototype = Object.getPrototypeOf(value);
|
|
100
|
+
return prototype === Object.prototype || prototype === null;
|
|
101
|
+
}
|
|
102
|
+
function create_unknown_remote_failure() {
|
|
103
|
+
return { message: "[UNKNOWN_REMOTE_FAILURE]: Unknown error" };
|
|
104
|
+
}
|
|
105
|
+
function stringify_unknown_remote_failure() {
|
|
106
|
+
return stringify(create_unknown_remote_failure());
|
|
107
|
+
}
|
|
108
|
+
const is_tagged_form_error = Schema.is(Schema.Struct({ _tag: Schema.Literal("FormError") }));
|
|
109
|
+
//#endregion
|
|
110
|
+
//#region src/remote/server.ts
|
|
111
|
+
const request_event_context_error_start = "Can only read the current request event inside functions invoked during `handle`";
|
|
112
|
+
const request_store_context_error = "Could not get the request store.";
|
|
113
|
+
/** Maps a remote Effect exit into the control flow expected by SvelteKit. */
|
|
114
|
+
async function run_remote_effect(effect, runtime, invalid, error) {
|
|
115
|
+
const exit = await runtime.runPromise(Effect.exit(effect));
|
|
116
|
+
if (Exit.isSuccess(exit)) return exit.value;
|
|
117
|
+
throw_remote_cause(exit.cause, invalid, error);
|
|
118
|
+
}
|
|
119
|
+
/** Applies a classified remote Cause decision to SvelteKit's server helpers. */
|
|
120
|
+
function throw_remote_cause(cause, invalid, error) {
|
|
121
|
+
const resolution = classify_remote_cause(cause);
|
|
122
|
+
switch (resolution._tag) {
|
|
123
|
+
case "SvelteKitControlFlow": throw resolution.value;
|
|
124
|
+
case "InterruptOnly": throw Cause.squash(resolution.cause);
|
|
125
|
+
case "FormInvalid": invalid(...resolution.issues);
|
|
126
|
+
case "RemoteFailure": error(500, create_serialized_remote_failure_envelope(resolution.encoded));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function throw_form_error(issues, invalid) {
|
|
130
|
+
invalid(...issues);
|
|
131
|
+
}
|
|
132
|
+
/** Rebrands SvelteKit context failures with the remote helper that triggered them. */
|
|
133
|
+
function normalize_remote_helper_error(err, helper_name) {
|
|
134
|
+
if (is_sveltekit_remote_context_error(err)) return new RemoteHelperContextError(helper_name);
|
|
135
|
+
return err instanceof Error ? err : new RemoteHelperError(err);
|
|
136
|
+
}
|
|
137
|
+
function is_sveltekit_remote_context_error(err) {
|
|
138
|
+
if (!(err instanceof Error)) return false;
|
|
139
|
+
return err.message.startsWith(request_event_context_error_start) || err.message === request_store_context_error;
|
|
140
|
+
}
|
|
141
|
+
//#endregion
|
|
142
|
+
export { encode_remote_failure as a, throw_remote_cause as i, run_remote_effect as n, throw_form_error as r, normalize_remote_helper_error as t };
|
|
143
|
+
|
|
144
|
+
//# sourceMappingURL=server-BNrA1I-u.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-BNrA1I-u.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/remote/cause-codec.ts","../../../modules/svelte-effect-runtime/src/remote/server.ts"],"sourcesContent":["import { isHttpError, isRedirect, isValidationError } from \"@sveltejs/kit\";\nimport { is_form_error, type FormIssue } from \"$/remote/shared.ts\";\nimport { Cause, Schema } from \"effect\";\nimport { stringify } from \"devalue\";\n\nexport type RemoteCauseResolution =\n\t| {\n\t\t\treadonly _tag: \"SvelteKitControlFlow\";\n\t\t\treadonly value: unknown;\n\t }\n\t| {\n\t\t\treadonly _tag: \"InterruptOnly\";\n\t\t\treadonly cause: Cause.Cause<unknown>;\n\t }\n\t| {\n\t\t\treadonly _tag: \"FormInvalid\";\n\t\t\treadonly issues: readonly FormIssue[];\n\t }\n\t| {\n\t\t\treadonly _tag: \"RemoteFailure\";\n\t\t\treadonly encoded: string;\n\t };\n\n/** Preserves SvelteKit control flow before classifying transportable Effect failures. */\nexport function classify_remote_cause(cause: Cause.Cause<unknown>): RemoteCauseResolution {\n\tconst control_flow = find_sveltekit_control_flow(cause);\n\n\tif (control_flow !== undefined) {\n\t\treturn {\n\t\t\t_tag: \"SvelteKitControlFlow\",\n\t\t\tvalue: control_flow,\n\t\t};\n\t}\n\n\tif (Cause.hasInterruptsOnly(cause)) {\n\t\treturn {\n\t\t\t_tag: \"InterruptOnly\",\n\t\t\tcause,\n\t\t};\n\t}\n\n\tconst form_error_issues = find_form_error_issues(cause);\n\n\tif (form_error_issues !== undefined) {\n\t\treturn {\n\t\t\t_tag: \"FormInvalid\",\n\t\t\tissues: form_error_issues,\n\t\t};\n\t}\n\n\treturn {\n\t\t_tag: \"RemoteFailure\",\n\t\tencoded: encode_remote_failure(cause),\n\t};\n}\n\n/** Encodes a remote failure into the transport ABI shared with generated clients. */\nexport function encode_remote_failure(cause: Cause.Cause<unknown>): string {\n\tfor (const reason of cause.reasons) {\n\t\tif (!Cause.isFailReason(reason)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst failure = to_public_remote_failure(reason.error);\n\t\tconst encoded = stringify_failure(failure);\n\n\t\tif (encoded !== undefined) {\n\t\t\treturn encoded;\n\t\t}\n\t}\n\n\treturn stringify_unknown_remote_failure();\n}\n\nfunction find_sveltekit_control_flow(cause: Cause.Cause<unknown>): unknown | undefined {\n\tfor (const reason of cause.reasons) {\n\t\tif (!Cause.isDieReason(reason)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (is_sveltekit_control_flow(reason.defect)) {\n\t\t\treturn reason.defect;\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nfunction find_form_error_issues(cause: Cause.Cause<unknown>): readonly FormIssue[] | undefined {\n\tfor (const reason of cause.reasons) {\n\t\tif (!Cause.isFailReason(reason)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst issues = get_form_error_issues(reason.error);\n\n\t\tif (issues !== undefined) {\n\t\t\treturn issues;\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nfunction get_form_error_issues(value: unknown): readonly FormIssue[] | undefined {\n\tif (is_form_error(value)) {\n\t\treturn value.issues;\n\t}\n\n\treturn is_tagged_form_error(value) ? [] : undefined;\n}\n\nfunction is_sveltekit_control_flow(value: unknown): boolean {\n\treturn isRedirect(value) || isHttpError(value) || isValidationError(value);\n}\n\nfunction stringify_failure(value: unknown): string | undefined {\n\ttry {\n\t\treturn stringify(value);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction to_public_remote_failure(value: unknown): unknown {\n\tif (!has_public_remote_failure_tag(value)) {\n\t\treturn create_unknown_remote_failure();\n\t}\n\n\tconst serializable_failure = to_serializable_public_failure(value);\n\n\treturn serializable_failure ?? create_unknown_remote_failure();\n}\n\nfunction to_serializable_public_failure(value: unknown, seen = new WeakSet<object>()): unknown {\n\tif (typeof value === \"function\" || typeof value === \"symbol\") {\n\t\treturn undefined;\n\t}\n\n\tif (!is_object_like(value)) {\n\t\treturn value;\n\t}\n\n\tif (stringify_failure(value) !== undefined) {\n\t\treturn value;\n\t}\n\n\tif (is_internal_object(value)) {\n\t\treturn undefined;\n\t}\n\n\tif (seen.has(value)) {\n\t\treturn undefined;\n\t}\n\n\tseen.add(value);\n\n\tconst serializable = Array.isArray(value)\n\t\t? value.map((item) => to_serializable_public_failure(item, seen))\n\t\t: to_plain_record(value, seen);\n\n\tseen.delete(value);\n\n\treturn serializable;\n}\n\nfunction to_plain_record(value: object, seen: WeakSet<object>): Record<string, unknown> {\n\tconst descriptors = Object.getOwnPropertyDescriptors(value);\n\tconst record: Record<string, unknown> = {};\n\n\tfor (const [key, descriptor] of Object.entries(descriptors)) {\n\t\tif (key === \"stack\" || !(\"value\" in descriptor)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\trecord[key] = to_serializable_public_failure(descriptor.value, seen);\n\t}\n\n\tif (value instanceof Error && !(\"message\" in record)) {\n\t\trecord.message = value.message;\n\t}\n\n\treturn record;\n}\n\nfunction is_object_like(value: unknown): value is object {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction has_public_remote_failure_tag(value: unknown): boolean {\n\treturn is_object_like(value) && typeof (value as { _tag?: unknown })._tag === \"string\";\n}\n\nfunction is_internal_object(value: object): boolean {\n\treturn (\n\t\t!Array.isArray(value) && !is_plain_record(value) && !has_public_remote_failure_tag(value)\n\t);\n}\n\nfunction is_plain_record(value: object): boolean {\n\tconst prototype = Object.getPrototypeOf(value);\n\n\treturn prototype === Object.prototype || prototype === null;\n}\n\nfunction create_unknown_remote_failure(): { readonly message: string } {\n\treturn { message: \"[UNKNOWN_REMOTE_FAILURE]: Unknown error\" };\n}\n\nfunction stringify_unknown_remote_failure(): string {\n\treturn stringify(create_unknown_remote_failure());\n}\n\nconst is_tagged_form_error = Schema.is(\n\tSchema.Struct({\n\t\t_tag: Schema.Literal(\"FormError\"),\n\t}),\n);\n","import { create_serialized_remote_failure_envelope } from \"$/remote/shared.ts\";\nimport { RemoteHelperContextError, RemoteHelperError } from \"$/errors.ts\";\nimport { classify_remote_cause } from \"$/remote/cause-codec.ts\";\nimport type { FormIssue } from \"$/remote/shared.ts\";\nimport { Cause, Effect, Exit } from \"effect\";\n\ntype SvelteInvalid = (...issues: readonly (FormIssue | string)[]) => never;\n\ntype SvelteError = (status: number, body: unknown) => never;\n\nconst request_event_context_error_start =\n\t\"Can only read the current request event inside functions invoked during `handle`\";\n\nconst request_store_context_error = \"Could not get the request store.\";\n\nexport { encode_remote_failure } from \"$/remote/cause-codec.ts\";\n\n/** Maps a remote Effect exit into the control flow expected by SvelteKit. */\nexport async function run_remote_effect<A>(\n\teffect: Effect.Effect<A, unknown, unknown>,\n\truntime: {\n\t\trunPromise: (e: Effect.Effect<unknown, unknown, unknown>) => Promise<unknown>;\n\t},\n\tinvalid: SvelteInvalid,\n\terror: SvelteError,\n): Promise<A> {\n\tconst exit: Exit.Exit<A, unknown> = (await runtime.runPromise(\n\t\tEffect.exit(effect) as Effect.Effect<unknown, unknown, unknown>,\n\t)) as Exit.Exit<A, unknown>;\n\n\tif (Exit.isSuccess(exit)) {\n\t\treturn exit.value;\n\t}\n\n\tthrow_remote_cause(exit.cause, invalid, error);\n}\n\n/** Applies a classified remote Cause decision to SvelteKit's server helpers. */\nexport function throw_remote_cause(\n\tcause: Cause.Cause<unknown>,\n\tinvalid: SvelteInvalid,\n\terror: SvelteError,\n): never {\n\tconst resolution = classify_remote_cause(cause);\n\n\tswitch (resolution._tag) {\n\t\tcase \"SvelteKitControlFlow\": {\n\t\t\tthrow resolution.value;\n\t\t}\n\t\tcase \"InterruptOnly\": {\n\t\t\tthrow Cause.squash(resolution.cause);\n\t\t}\n\t\tcase \"FormInvalid\": {\n\t\t\tinvalid(...resolution.issues);\n\t\t}\n\t\tcase \"RemoteFailure\": {\n\t\t\tconst envelope = create_serialized_remote_failure_envelope(resolution.encoded);\n\n\t\t\terror(500, envelope);\n\t\t}\n\t}\n}\n\nexport function throw_form_error(issues: readonly FormIssue[], invalid: SvelteInvalid): never {\n\tinvalid(...issues);\n}\n\n/** Rebrands SvelteKit context failures with the remote helper that triggered them. */\nexport function normalize_remote_helper_error(err: unknown, helper_name: string): Error {\n\tif (is_sveltekit_remote_context_error(err)) {\n\t\treturn new RemoteHelperContextError(helper_name);\n\t}\n\n\treturn err instanceof Error ? err : new RemoteHelperError(err);\n}\n\nfunction is_sveltekit_remote_context_error(err: unknown): err is Error {\n\tif (!(err instanceof Error)) {\n\t\treturn false;\n\t}\n\n\treturn (\n\t\terr.message.startsWith(request_event_context_error_start) ||\n\t\terr.message === request_store_context_error\n\t);\n}\n"],"mappings":"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"}
|