svelte-effect-runtime 4.0.0 → 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.
Files changed (146) hide show
  1. package/.dist/chunks/client-BrZka6DW.js +530 -0
  2. package/.dist/chunks/client-BrZka6DW.js.map +1 -0
  3. package/.dist/chunks/compiler-COVzgLYo.js +412 -0
  4. package/.dist/chunks/compiler-COVzgLYo.js.map +1 -0
  5. package/.dist/chunks/descriptors-B4otDlm1.js +216 -0
  6. package/.dist/chunks/descriptors-B4otDlm1.js.map +1 -0
  7. package/.dist/chunks/diagnostics-BDrky-Di.js +359 -0
  8. package/.dist/chunks/diagnostics-BDrky-Di.js.map +1 -0
  9. package/.dist/chunks/dispatcher-BA0PLQhA.js +16 -0
  10. package/.dist/chunks/dispatcher-BA0PLQhA.js.map +1 -0
  11. package/.dist/chunks/{dispatcher-DOx8iC6r.js → dispatcher-_x0MQZBS.js} +84 -258
  12. package/.dist/chunks/dispatcher-_x0MQZBS.js.map +1 -0
  13. package/.dist/chunks/{errors-IJjsUwrE.js → errors-CLsbGjIa.js} +39 -44
  14. package/.dist/chunks/errors-CLsbGjIa.js.map +1 -0
  15. package/.dist/chunks/live-BundLSoY.js +146 -0
  16. package/.dist/chunks/live-BundLSoY.js.map +1 -0
  17. package/.dist/chunks/live-CHK0RrZu.js +10 -0
  18. package/.dist/chunks/live-CHK0RrZu.js.map +1 -0
  19. package/.dist/chunks/{remote-client-CVI4t66c.js → remote-client-mkQAfP1G.js} +29 -23
  20. package/.dist/chunks/remote-client-mkQAfP1G.js.map +1 -0
  21. package/.dist/chunks/{runtime-GBQz32DZ.js → runtime-HDTlEnzp.js} +3 -27
  22. package/.dist/chunks/runtime-HDTlEnzp.js.map +1 -0
  23. package/.dist/chunks/{server-D1LcDnZE.js → server-BNrA1I-u.js} +15 -84
  24. package/.dist/chunks/server-BNrA1I-u.js.map +1 -0
  25. package/.dist/chunks/source-scan-9pZxnfct.js +1059 -0
  26. package/.dist/chunks/source-scan-9pZxnfct.js.map +1 -0
  27. package/.dist/chunks/{transform-jNUr65K9.js → transform-BXyYUAez.js} +184 -358
  28. package/.dist/chunks/transform-BXyYUAez.js.map +1 -0
  29. package/.dist/compiler/markup-identifiers.d.ts +2 -0
  30. package/.dist/compiler/remote-client.d.ts +1 -19
  31. package/.dist/compiler/source-scan.d.ts +11 -108
  32. package/.dist/compiler/sveltekit-remote-bridge.d.ts +3 -0
  33. package/.dist/compiler.d.ts +6 -0
  34. package/.dist/compiler.js +1 -1
  35. package/.dist/detect.d.ts +0 -31
  36. package/.dist/detect.js +0 -39
  37. package/.dist/detect.js.map +1 -1
  38. package/.dist/diagnostics.d.ts +0 -16
  39. package/.dist/dispatcher/deps.d.ts +3 -14
  40. package/.dist/dispatcher/fibers.d.ts +5 -46
  41. package/.dist/dispatcher/index.d.ts +1 -143
  42. package/.dist/dispatcher/types.d.ts +0 -151
  43. package/.dist/dispatcher.js +1 -1
  44. package/.dist/errors.d.ts +30 -42
  45. package/.dist/generated/dispatcher.d.ts +0 -50
  46. package/.dist/generators.d.ts +1 -12
  47. package/.dist/internal/descriptors.d.ts +0 -16
  48. package/.dist/internal/generators.js +13 -8
  49. package/.dist/internal/generators.js.map +1 -1
  50. package/.dist/internal/live.d.ts +9 -0
  51. package/.dist/internal/remote-client.js +2 -2
  52. package/.dist/internal/remote-server.js +2 -2
  53. package/.dist/internal/schema.d.ts +0 -54
  54. package/.dist/live.d.ts +9 -26
  55. package/.dist/markup/event-attributes.d.ts +0 -32
  56. package/.dist/markup/promise.d.ts +1 -23
  57. package/.dist/markup/promise.js +2 -18
  58. package/.dist/markup/promise.js.map +1 -1
  59. package/.dist/markup/run.d.ts +1 -10
  60. package/.dist/markup/run.js +2 -11
  61. package/.dist/markup/run.js.map +1 -1
  62. package/.dist/markup/transform/apply.d.ts +4 -4
  63. package/.dist/markup/transform/classify.d.ts +2 -11
  64. package/.dist/markup/transform/constants.d.ts +1 -1
  65. package/.dist/markup/transform/effect-bindings.d.ts +2 -26
  66. package/.dist/markup/transform/effect-callbacks.d.ts +0 -20
  67. package/.dist/markup/transform/emit.d.ts +2 -11
  68. package/.dist/markup/transform/expressions.d.ts +0 -35
  69. package/.dist/markup/transform/scan.d.ts +3 -22
  70. package/.dist/markup/transform/types.d.ts +1 -129
  71. package/.dist/markup/transform.js +1 -1
  72. package/.dist/markup/value.d.ts +1 -18
  73. package/.dist/markup/value.js +2 -19
  74. package/.dist/markup/value.js.map +1 -1
  75. package/.dist/mod.d.ts +3 -8
  76. package/.dist/mod.js +5 -5
  77. package/.dist/mod.js.map +1 -1
  78. package/.dist/remote/cause-codec.d.ts +3 -37
  79. package/.dist/remote/client/command.d.ts +3 -17
  80. package/.dist/remote/client/form-data.d.ts +0 -7
  81. package/.dist/remote/client/form-enhance.d.ts +0 -7
  82. package/.dist/remote/client/form-transport.d.ts +14 -20
  83. package/.dist/remote/client/form.d.ts +4 -24
  84. package/.dist/remote/client/index.d.ts +2 -1
  85. package/.dist/remote/client/prerender.d.ts +6 -0
  86. package/.dist/remote/client/query-result.d.ts +2 -14
  87. package/.dist/remote/client/query.d.ts +8 -48
  88. package/.dist/remote/client/responses.d.ts +3 -27
  89. package/.dist/remote/client/types.d.ts +16 -110
  90. package/.dist/remote/client/utils.d.ts +0 -8
  91. package/.dist/remote/client.d.ts +2 -2
  92. package/.dist/remote/client.js +2 -2
  93. package/.dist/remote/effect.d.ts +6 -0
  94. package/.dist/remote/failures.d.ts +4 -0
  95. package/.dist/remote/query-update.d.ts +2 -0
  96. package/.dist/remote/resource.d.ts +25 -0
  97. package/.dist/remote/server.d.ts +5 -50
  98. package/.dist/remote/server.js +2 -2
  99. package/.dist/remote/shared.d.ts +6 -145
  100. package/.dist/remote/shared.js +6 -127
  101. package/.dist/remote/shared.js.map +1 -1
  102. package/.dist/runtime/transform.js +5 -22
  103. package/.dist/runtime/transform.js.map +1 -1
  104. package/.dist/script-transform/ast.d.ts +0 -46
  105. package/.dist/script-transform/imports.d.ts +0 -38
  106. package/.dist/script-transform/lower.d.ts +0 -9
  107. package/.dist/script-transform/runes.d.ts +0 -10
  108. package/.dist/script-transform/runtime-block.d.ts +0 -17
  109. package/.dist/script-transform/source.d.ts +0 -24
  110. package/.dist/script-transform/types.d.ts +1 -126
  111. package/.dist/server/effects.d.ts +4 -53
  112. package/.dist/server/factories.d.ts +7 -7
  113. package/.dist/server/index.d.ts +1 -1
  114. package/.dist/server/invalid.d.ts +0 -7
  115. package/.dist/server/live-snapshot.d.ts +5 -0
  116. package/.dist/server/remote-handler-context.d.ts +5 -0
  117. package/.dist/server/runtime.d.ts +6 -24
  118. package/.dist/server/schema.d.ts +0 -14
  119. package/.dist/server/transport.d.ts +2 -0
  120. package/.dist/server/types.d.ts +49 -26
  121. package/.dist/server/wrappers.d.ts +3 -40
  122. package/.dist/server.d.ts +1 -1
  123. package/.dist/server.js +200 -215
  124. package/.dist/server.js.map +1 -1
  125. package/.dist/yieldable.d.ts +1 -35
  126. package/package.json +2 -2
  127. package/.dist/chunks/client-DcZUV4rR.js +0 -653
  128. package/.dist/chunks/client-DcZUV4rR.js.map +0 -1
  129. package/.dist/chunks/compiler-BBPNyXmQ.js +0 -460
  130. package/.dist/chunks/compiler-BBPNyXmQ.js.map +0 -1
  131. package/.dist/chunks/dispatcher-DOx8iC6r.js.map +0 -1
  132. package/.dist/chunks/dispatcher-H-Ia0Os4.js +0 -47
  133. package/.dist/chunks/dispatcher-H-Ia0Os4.js.map +0 -1
  134. package/.dist/chunks/errors-IJjsUwrE.js.map +0 -1
  135. package/.dist/chunks/live-BXAKre_4.js +0 -104
  136. package/.dist/chunks/live-BXAKre_4.js.map +0 -1
  137. package/.dist/chunks/remote-client-CVI4t66c.js.map +0 -1
  138. package/.dist/chunks/runtime-GBQz32DZ.js.map +0 -1
  139. package/.dist/chunks/schema-D9pct6Y5.js +0 -89
  140. package/.dist/chunks/schema-D9pct6Y5.js.map +0 -1
  141. package/.dist/chunks/server-D1LcDnZE.js.map +0 -1
  142. package/.dist/chunks/source-scan-C4PsggID.js +0 -341
  143. package/.dist/chunks/source-scan-C4PsggID.js.map +0 -1
  144. package/.dist/chunks/transform-jNUr65K9.js.map +0 -1
  145. package/.dist/remote/client/effect.d.ts +0 -29
  146. package/.dist/remote/client/failures.d.ts +0 -42
@@ -0,0 +1,530 @@
1
+ import { A as UnsupportedRemoteFormResponseError, c as InvalidLiveQueryFactoryError, d as InvalidQueryFactoryError, f as InvalidRemoteFormResponseError, g as RemoteFormEndpointMissingError, s as InvalidCommandFactoryError, u as InvalidPrerenderFactoryError } from "./errors-CLsbGjIa.js";
2
+ import { n as get_dispatcher } from "./dispatcher-_x0MQZBS.js";
3
+ import { create_remote_http_error, create_remote_transport_error, create_remote_validation_error } from "../remote/shared.js";
4
+ import { i as make_remote_live_stream, r as make_failed_remote_live_stream } from "./live-BundLSoY.js";
5
+ import { a as normalize_validator, c as attach_remote_resource_getters, d as MakeEffectFromPromise, f as MakeEffectFromSync, h as normalize_native_error, i as is_standard_schema, l as is_remote_resource, m as is_decoded_remote_failure, n as attach_native_remote_query_update, o as attach_failed_remote_query_resource, p as decode_remote_error, r as resolve_native_remote_query_updates, s as attach_failed_remote_resource_getters, t as copy_property_descriptors, u as FailWithRemoteError } from "./descriptors-B4otDlm1.js";
6
+ import { Effect, Option, Result, Schema } from "effect";
7
+ import { parse } from "devalue";
8
+ //#region src/remote/client/utils.ts
9
+ function has_method(value, key) {
10
+ const value_type = typeof value;
11
+ return (value_type === "object" && value !== null || value_type === "function") && typeof value[key] === "function";
12
+ }
13
+ //#endregion
14
+ //#region src/remote/client/responses.ts
15
+ const DecodeResponseFailure = (response) => Effect.gen(function* () {
16
+ const body = yield* MakeEffectFromPromise(() => response.json()).pipe(Effect.orElseSucceed(() => void 0));
17
+ const decoded = decode_remote_error(body);
18
+ if (is_decoded_remote_failure(decoded)) return decoded;
19
+ return create_remote_http_error(response.status, body);
20
+ });
21
+ const DecodeResponseOrValue = (value, decode_payload) => Effect.gen(function* () {
22
+ if (value instanceof Response) {
23
+ if (!value.ok) {
24
+ const failure = yield* DecodeResponseFailure(value);
25
+ return yield* Effect.fail(failure);
26
+ }
27
+ const data = yield* DecodeSuccessResponseBody(value);
28
+ return yield* MakeEffectFromSync(() => decode_payload(data));
29
+ }
30
+ return yield* MakeEffectFromSync(() => decode_payload(value));
31
+ });
32
+ const DecodeSuccessResponseBody = (response) => Effect.gen(function* () {
33
+ if (response.status === 204 || response.status === 205) return;
34
+ const text = yield* MakeEffectFromPromise(() => response.text());
35
+ if (text.length === 0) return;
36
+ return yield* MakeEffectFromSync(() => JSON.parse(text));
37
+ });
38
+ //#endregion
39
+ //#region src/remote/client/command.ts
40
+ /** Adapts a generated SvelteKit command to SER's Effect-based client ABI. */
41
+ function create_remote_command_adapter(native_factory, decode_payload, _base = "", pending) {
42
+ const invoke = has_method(native_factory, "invoke") ? native_factory.invoke : void 0;
43
+ if (typeof native_factory !== "function" && !invoke) throw new InvalidCommandFactoryError();
44
+ const count = pending ?? { value: 0 };
45
+ const adapter = (input) => MakeCommandEffect(native_factory, invoke, input, decode_payload, count);
46
+ copy_property_descriptors(native_factory, adapter);
47
+ if (!Object.prototype.hasOwnProperty.call(adapter, "pending")) Object.defineProperty(adapter, "pending", { get: () => count.value });
48
+ return adapter;
49
+ }
50
+ const MakeCommandEffect = (native_factory, invoke, input, decode_payload, pending) => {
51
+ let updates_args;
52
+ const CommandEffect = Effect.acquireUseRelease(AcquirePending(pending), () => InvokeCommand(native_factory, invoke, input, decode_payload, () => updates_args), () => ReleasePending(pending));
53
+ Object.defineProperty(CommandEffect, "updates", {
54
+ configurable: true,
55
+ enumerable: false,
56
+ value: (...args) => {
57
+ updates_args ??= args;
58
+ return CommandEffect;
59
+ }
60
+ });
61
+ return CommandEffect;
62
+ };
63
+ const AcquirePending = (pending) => Effect.sync(() => {
64
+ pending.value += 1;
65
+ });
66
+ const ReleasePending = (pending) => Effect.sync(() => {
67
+ pending.value -= 1;
68
+ });
69
+ const InvokeCommand = (native_factory, invoke, input, decode_payload, read_updates_args) => Effect.gen(function* () {
70
+ const invocation = yield* MakeEffectFromSync(() => {
71
+ const result = invoke ? invoke.call(native_factory, input) : native_factory(input);
72
+ const updates_args = read_updates_args();
73
+ if (updates_args && has_method(result, "updates")) return result.updates(...resolve_native_remote_query_updates(updates_args));
74
+ return result;
75
+ });
76
+ return yield* DecodeResponseOrValue(yield* MakeEffectFromPromise(() => Promise.resolve(invocation)), decode_payload);
77
+ });
78
+ //#endregion
79
+ //#region src/remote/client/form-data.ts
80
+ function to_form_data(input) {
81
+ const form_data = new FormData();
82
+ append_form_value(form_data, "", input);
83
+ return form_data;
84
+ }
85
+ function append_form_value(form_data, path, value) {
86
+ if (value === void 0) return;
87
+ if (Array.isArray(value)) {
88
+ for (const [index, item] of value.entries()) append_form_value(form_data, `${path}[${index}]`, item);
89
+ return;
90
+ }
91
+ if (value instanceof Blob) {
92
+ form_data.append(path, value);
93
+ return;
94
+ }
95
+ if (typeof value === "object" && value !== null) {
96
+ for (const [key, child] of Object.entries(value)) append_form_value(form_data, path.length === 0 ? key : `${path}.${key}`, child);
97
+ return;
98
+ }
99
+ if (typeof value === "number") {
100
+ form_data.append(`n:${path}`, String(value));
101
+ return;
102
+ }
103
+ if (typeof value === "boolean") {
104
+ form_data.append(`b:${path}`, value ? "on" : "off");
105
+ return;
106
+ }
107
+ form_data.append(path, value === null ? "" : String(value));
108
+ }
109
+ //#endregion
110
+ //#region src/remote/client/form-transport.ts
111
+ const FormIssuePathSegmentSchema = Schema.Union([Schema.String, Schema.Number]);
112
+ const FormIssueSchema = Schema.Struct({
113
+ message: Schema.String,
114
+ path: Schema.Array(FormIssuePathSegmentSchema)
115
+ });
116
+ const RemoteFormErrorEnvelopeSchema = Schema.Struct({
117
+ type: Schema.Literal("error"),
118
+ error: Schema.optional(Schema.Unknown),
119
+ status: Schema.optional(Schema.Number)
120
+ });
121
+ const RemoteFormResultEnvelopeSchema = Schema.Struct({
122
+ type: Schema.Literal("result"),
123
+ data: Schema.String
124
+ });
125
+ const RemoteFormRedirectEnvelopeSchema = Schema.Struct({
126
+ type: Schema.Literal("redirect"),
127
+ location: Schema.String
128
+ });
129
+ const RemoteFormResponseEnvelopeSchema = Schema.Union([
130
+ RemoteFormErrorEnvelopeSchema,
131
+ RemoteFormResultEnvelopeSchema,
132
+ RemoteFormRedirectEnvelopeSchema
133
+ ]);
134
+ const RemoteFormDecodedPayloadSchema = Schema.Struct({
135
+ issues: Schema.optional(Schema.Array(FormIssueSchema)),
136
+ result: Schema.optional(Schema.Unknown)
137
+ });
138
+ const RemoteFormRedirectDataSchema = Schema.Struct({ redirect: Schema.String });
139
+ const RemoteFormResultDataSchema = Schema.Struct({ _: Schema.Unknown });
140
+ const KitRemoteFormDataSchema = Schema.Struct({
141
+ _: Schema.optional(Schema.Unknown),
142
+ redirect: Schema.optional(Schema.String),
143
+ r: Schema.optional(Schema.Literal(true))
144
+ });
145
+ const DecodeRemoteFormResponseEnvelope = Schema.decodeUnknownOption(RemoteFormResponseEnvelopeSchema);
146
+ const DecodeRemoteFormPayload = Schema.decodeUnknownOption(RemoteFormDecodedPayloadSchema);
147
+ const DecodeRemoteFormRedirectData = Schema.decodeUnknownOption(RemoteFormRedirectDataSchema);
148
+ const DecodeRemoteFormResultData = Schema.decodeUnknownOption(RemoteFormResultDataSchema);
149
+ const DecodeKitRemoteFormData = Schema.decodeUnknownOption(KitRemoteFormDataSchema);
150
+ const SubmitRemoteForm = (form_obj, input, decode_payload, remote_base, remote_transport, preflight_schema) => Effect.gen(function* () {
151
+ const action_id = yield* MakeEffectFromSync(() => get_remote_action_id(form_obj));
152
+ if (!action_id || remote_base.length === 0) return yield* Effect.fail(create_remote_transport_error(new RemoteFormEndpointMissingError()));
153
+ yield* ValidatePreflightInput(preflight_schema, input);
154
+ if (is_kit_remote_form_transport(remote_transport)) return yield* SubmitRemoteFormWithKit(action_id, input, decode_payload, remote_base, remote_transport);
155
+ const response = yield* MakeEffectFromPromise((signal) => fetch(to_remote_form_url(remote_base, action_id), {
156
+ method: "POST",
157
+ headers: get_remote_request_headers(),
158
+ body: to_form_data(to_remote_form_input(input, action_id)),
159
+ signal
160
+ }));
161
+ if (!response.ok) {
162
+ const failure = yield* DecodeResponseFailure(response);
163
+ return yield* Effect.fail(failure);
164
+ }
165
+ const envelope = yield* MakeEffectFromPromise(() => response.json());
166
+ return yield* DecodeFormResponse(envelope, decode_payload, remote_transport);
167
+ });
168
+ const SubmitRemoteFormWithKit = (action_id, input, decode_payload, remote_base, remote_transport) => Effect.gen(function* () {
169
+ const url = to_remote_form_url(remote_base, action_id);
170
+ const body = yield* MakeEffectFromSync(() => remote_transport.serialize_binary_form(to_remote_form_input(input, action_id), { remote_refreshes: [] }).blob);
171
+ const data = yield* MakeEffectFromPromise((signal) => remote_transport.remote_request(url, {
172
+ method: "POST",
173
+ headers: {
174
+ ...get_remote_request_headers(),
175
+ "Content-Type": remote_transport.binary_form_content_type
176
+ },
177
+ body,
178
+ signal
179
+ }));
180
+ return yield* DecodeKitFormData(data, decode_payload, remote_transport);
181
+ });
182
+ function get_remote_action_id(form_obj) {
183
+ const action = form_obj.action;
184
+ if (typeof action !== "string") return;
185
+ const href = typeof location === "undefined" ? "http://localhost/" : location.href;
186
+ const url = new URL(action, href);
187
+ return url.searchParams.get("/remote") ?? url.searchParams.get("remote") ?? void 0;
188
+ }
189
+ function to_remote_form_url(remote_base, action_id) {
190
+ const head = action_id.split("/").slice(0, 2).join("/");
191
+ return `${remote_base.replace(/\/$/, "")}/${head}`;
192
+ }
193
+ function to_remote_form_input(input, action_id) {
194
+ const data = is_record(input) ? input : {};
195
+ const serialized_key = action_id.split("/").slice(2).join("/");
196
+ const key = serialized_key.length === 0 ? void 0 : JSON.parse(serialized_key);
197
+ if (key === void 0 || data.id !== void 0) return data;
198
+ return {
199
+ ...data,
200
+ id: key
201
+ };
202
+ }
203
+ function get_remote_request_headers() {
204
+ if (typeof location === "undefined") return {};
205
+ return {
206
+ "x-sveltekit-pathname": location.pathname,
207
+ "x-sveltekit-search": location.search
208
+ };
209
+ }
210
+ const ValidatePreflightInput = (schema, input) => Effect.gen(function* () {
211
+ if (!schema) return;
212
+ const validated = yield* MakeEffectFromPromise(() => Promise.resolve(schema["~standard"].validate(input)));
213
+ if (!is_record(validated) || !Array.isArray(validated.issues)) return;
214
+ const issues = validated.issues.map(normalize_standard_issue);
215
+ return yield* Effect.fail(create_remote_validation_error(issues, { issues }, 400));
216
+ });
217
+ function normalize_standard_issue(issue) {
218
+ if (!is_record(issue)) return {
219
+ message: String(issue),
220
+ path: []
221
+ };
222
+ return {
223
+ message: typeof issue.message === "string" ? issue.message : "Invalid input",
224
+ path: Array.isArray(issue.path) ? issue.path.flatMap(normalize_path_segment) : []
225
+ };
226
+ }
227
+ function normalize_path_segment(segment) {
228
+ if (typeof segment === "string" || typeof segment === "number") return [segment];
229
+ if (!is_record(segment)) return [];
230
+ const key = segment.key;
231
+ if (typeof key === "string" || typeof key === "number") return [key];
232
+ return [];
233
+ }
234
+ function is_record(value) {
235
+ return typeof value === "object" && value !== null;
236
+ }
237
+ const DecodeFormResponse = (envelope, decode_payload, remote_transport) => Effect.gen(function* () {
238
+ const response = decode_remote_form_response_envelope(envelope);
239
+ if (!response) return yield* Effect.fail(create_remote_transport_error(new InvalidRemoteFormResponseError(envelope), envelope));
240
+ if (response._tag === "RemoteFormErrorEnvelope") {
241
+ const decoded = decode_remote_error(response.error);
242
+ if (is_decoded_remote_failure(decoded)) return yield* Effect.fail(decoded);
243
+ return yield* Effect.fail(create_remote_http_error(get_remote_form_error_status(response), response.error));
244
+ }
245
+ if (response._tag === "RemoteFormRedirectEnvelope") return yield* NavigateRemoteForm(response.location, true, remote_transport, envelope);
246
+ const parsed = yield* MakeEffectFromSync(() => parse(response.data, remote_transport.decoders));
247
+ const redirect_data = DecodeRemoteFormRedirectData(parsed);
248
+ if (Option.isSome(redirect_data)) return yield* NavigateRemoteForm(redirect_data.value.redirect, true, remote_transport, envelope);
249
+ const result_data = DecodeRemoteFormResultData(parsed);
250
+ if (!Option.isSome(result_data)) return yield* Effect.fail(create_remote_transport_error(new UnsupportedRemoteFormResponseError(envelope), envelope));
251
+ const decoded = decode_remote_form_payload(yield* MakeEffectFromSync(() => decode_payload(result_data.value._)));
252
+ if (!decoded) return yield* Effect.fail(create_remote_transport_error(new UnsupportedRemoteFormResponseError(envelope), envelope));
253
+ if (decoded.issues && decoded.issues.length > 0) return yield* Effect.fail(create_remote_validation_error(decoded.issues, decoded, 400));
254
+ yield* RefreshRemoteFormState(remote_transport);
255
+ return decoded.result;
256
+ });
257
+ const DecodeKitFormData = (data, decode_payload, remote_transport) => Effect.gen(function* () {
258
+ const decoded_data = DecodeKitRemoteFormData(data);
259
+ if (!Option.isSome(decoded_data)) return yield* Effect.fail(create_remote_transport_error(new UnsupportedRemoteFormResponseError(data), data));
260
+ const should_invalidate = decoded_data.value.r !== true;
261
+ if (decoded_data.value.redirect) return yield* NavigateRemoteForm(decoded_data.value.redirect, should_invalidate, remote_transport, data);
262
+ if (!("_" in decoded_data.value)) return yield* Effect.fail(create_remote_transport_error(new UnsupportedRemoteFormResponseError(data), data));
263
+ const decoded = decode_remote_form_payload(yield* MakeEffectFromSync(() => decode_payload(decoded_data.value._)));
264
+ if (!decoded) return yield* Effect.fail(create_remote_transport_error(new UnsupportedRemoteFormResponseError(data), data));
265
+ if (decoded.issues && decoded.issues.length > 0) return yield* Effect.fail(create_remote_validation_error(decoded.issues, decoded, 400));
266
+ if (should_invalidate) yield* RefreshRemoteFormState(remote_transport);
267
+ return decoded.result;
268
+ });
269
+ const NavigateRemoteForm = (location, invalidate_all, remote_transport, envelope) => Effect.gen(function* () {
270
+ const navigate = remote_transport.navigate;
271
+ if (!navigate) return yield* Effect.fail(create_remote_transport_error(new UnsupportedRemoteFormResponseError(envelope), envelope));
272
+ yield* MakeEffectFromPromise(() => Promise.resolve(navigate(location, invalidate_all)));
273
+ return yield* Effect.interrupt;
274
+ });
275
+ const RefreshRemoteFormState = (remote_transport) => Effect.gen(function* () {
276
+ const refresh = remote_transport.refresh;
277
+ if (!refresh) return;
278
+ yield* MakeEffectFromPromise(() => Promise.resolve(refresh()));
279
+ });
280
+ function decode_remote_form_response_envelope(envelope) {
281
+ const decoded = DecodeRemoteFormResponseEnvelope(envelope);
282
+ if (!Option.isSome(decoded)) return;
283
+ if (decoded.value.type === "error") return {
284
+ _tag: "RemoteFormErrorEnvelope",
285
+ error: decoded.value.error,
286
+ status: decoded.value.status
287
+ };
288
+ if (decoded.value.type === "redirect") return {
289
+ _tag: "RemoteFormRedirectEnvelope",
290
+ location: decoded.value.location
291
+ };
292
+ return {
293
+ _tag: "RemoteFormResultEnvelope",
294
+ data: decoded.value.data
295
+ };
296
+ }
297
+ function get_remote_form_error_status(response) {
298
+ const nested_status = is_record(response.error) ? response.error.status : void 0;
299
+ if (response.status !== void 0) return response.status;
300
+ return typeof nested_status === "number" ? nested_status : 500;
301
+ }
302
+ function is_kit_remote_form_transport(remote_transport) {
303
+ return typeof remote_transport.binary_form_content_type === "string" && typeof remote_transport.remote_request === "function" && typeof remote_transport.serialize_binary_form === "function";
304
+ }
305
+ function decode_remote_form_payload(payload) {
306
+ const decoded = DecodeRemoteFormPayload(payload);
307
+ if (!Option.isSome(decoded)) return;
308
+ return decoded.value;
309
+ }
310
+ //#endregion
311
+ //#region src/remote/client/form-enhance.ts
312
+ function wrap_enhance_callback(callback) {
313
+ if (!callback) return;
314
+ return (event) => {
315
+ const result = callback(wrap_submit_callback(event));
316
+ if (Effect.isEffect(result)) return get_dispatcher().run(result);
317
+ return result;
318
+ };
319
+ }
320
+ function wrap_submit_callback(event) {
321
+ if (typeof event !== "object" || event === null || !has_method(event, "submit")) return event;
322
+ const original_submit = event.submit;
323
+ const { submit: _submit, ...descriptors } = Object.getOwnPropertyDescriptors(event);
324
+ return Object.defineProperties({}, {
325
+ ...descriptors,
326
+ submit: {
327
+ configurable: true,
328
+ enumerable: false,
329
+ value: () => MakeSubmitEffect(original_submit, event)
330
+ }
331
+ });
332
+ }
333
+ function MakeSubmitEffect(original_submit, event) {
334
+ let updates_args;
335
+ const SubmitEffect = Effect.gen(function* () {
336
+ const result = yield* MakeEffectFromSync(() => original_submit.call(event));
337
+ const value = yield* ResolveSubmitResult(result, updates_args);
338
+ if (typeof value === "boolean") return read_submit_result(event);
339
+ return value;
340
+ });
341
+ Object.defineProperty(SubmitEffect, "updates", {
342
+ configurable: true,
343
+ enumerable: false,
344
+ value: (...args) => {
345
+ updates_args ??= args;
346
+ return SubmitEffect;
347
+ }
348
+ });
349
+ return SubmitEffect;
350
+ }
351
+ const ResolveSubmitResult = (result, updates_args) => Effect.gen(function* () {
352
+ if (updates_args && has_method(result, "updates")) return yield* MakeEffectFromPromise(() => Promise.resolve(result.updates(...resolve_native_remote_query_updates(updates_args))));
353
+ return yield* MakeEffectFromPromise(() => Promise.resolve(result));
354
+ });
355
+ function read_submit_result(event) {
356
+ if (typeof event !== "object" || event === null || !("result" in event)) return;
357
+ return Reflect.get(event, "result");
358
+ }
359
+ //#endregion
360
+ //#region src/remote/client/form.ts
361
+ /** Adapts a generated SvelteKit form to SER's Effect-based client ABI. */
362
+ function create_remote_form_adapter(native_factory, decode_payload, remote_base = "", remote_transport = {}, adapter_state = {}, keyed = false) {
363
+ const form_obj = native_factory;
364
+ let local_preflight_schema;
365
+ const SubmitForm = (input) => Effect.gen(function* () {
366
+ const action_id = yield* MakeEffectFromSync(() => get_remote_action_id(form_obj));
367
+ const can_use_remote_endpoint = remote_base.length > 0 && action_id !== void 0;
368
+ if (has_method(form_obj, "submit") && !can_use_remote_endpoint) return yield* DecodeResponseOrValue(yield* MakeEffectFromPromise(() => Promise.resolve(form_obj.submit(input))), decode_payload);
369
+ return yield* SubmitRemoteForm(form_obj, input, decode_payload, remote_base, remote_transport, local_preflight_schema ?? adapter_state.shared_preflight_schema);
370
+ });
371
+ const callable = ((input) => SubmitForm(input));
372
+ copy_property_descriptors(form_obj, callable, /* @__PURE__ */ new Set([
373
+ "submit",
374
+ "validate",
375
+ "enhance",
376
+ "for",
377
+ "preflight"
378
+ ]));
379
+ Object.defineProperty(callable, "submit", {
380
+ configurable: true,
381
+ enumerable: false,
382
+ value: SubmitForm
383
+ });
384
+ if (has_method(form_obj, "validate")) {
385
+ const validate = form_obj.validate;
386
+ Object.defineProperty(callable, "validate", {
387
+ configurable: true,
388
+ enumerable: false,
389
+ value: (options) => ValidateRemoteForm(form_obj, validate, options)
390
+ });
391
+ }
392
+ if (has_method(form_obj, "enhance")) Object.defineProperty(callable, "enhance", {
393
+ configurable: true,
394
+ enumerable: false,
395
+ value: (callback) => form_obj.enhance(wrap_enhance_callback(callback))
396
+ });
397
+ if (has_method(form_obj, "for")) Object.defineProperty(callable, "for", {
398
+ configurable: true,
399
+ enumerable: false,
400
+ value: (key) => create_remote_form_adapter(form_obj.for(key), decode_payload, remote_base, remote_transport, adapter_state, true)
401
+ });
402
+ if (has_method(form_obj, "preflight")) Object.defineProperty(callable, "preflight", {
403
+ configurable: true,
404
+ enumerable: false,
405
+ value: (schema) => {
406
+ const normalized_schema = normalize_validator(schema);
407
+ if (is_standard_schema(normalized_schema)) {
408
+ local_preflight_schema = normalized_schema;
409
+ if (!keyed) adapter_state.shared_preflight_schema = normalized_schema;
410
+ }
411
+ form_obj.preflight(normalized_schema);
412
+ return callable;
413
+ }
414
+ });
415
+ return callable;
416
+ }
417
+ const ValidateRemoteForm = (form_obj, validate, options) => Effect.gen(function* () {
418
+ yield* MakeEffectFromPromise(() => Promise.resolve(validate.call(form_obj, normalize_validate_options(validate, options))));
419
+ });
420
+ function normalize_validate_options(validate, options) {
421
+ if (!options || !("all" in options) || "includeUntouched" in options) return options;
422
+ const source = Function.prototype.toString.call(validate);
423
+ if (!(source.includes("includeUntouched") && !/\ball\s*=/.test(source))) return options;
424
+ return {
425
+ ...options,
426
+ includeUntouched: options.all
427
+ };
428
+ }
429
+ //#endregion
430
+ //#region src/remote/client/query-result.ts
431
+ const ResolveQueryResult = (value, decode_payload) => Effect.gen(function* () {
432
+ if (has_method(value, "then")) return yield* DecodeResponseOrValue(yield* MakeEffectFromPromise(() => Promise.resolve(value)), decode_payload);
433
+ if (has_method(value, "run")) return yield* DecodeResponseOrValue(yield* MakeEffectFromPromise(() => Promise.resolve(value.run())), decode_payload);
434
+ return yield* DecodeResponseOrValue(value, decode_payload);
435
+ });
436
+ //#endregion
437
+ //#region src/remote/client/prerender.ts
438
+ function create_remote_prerender_adapter(native_factory, decode_payload) {
439
+ if (typeof native_factory !== "function") throw new InvalidPrerenderFactoryError();
440
+ const prerender = native_factory;
441
+ const wrapped = ((input) => {
442
+ const resource_attempt = Result.try(() => prerender(input));
443
+ if (Result.isFailure(resource_attempt)) {
444
+ const PrerenderEffect = FailWithRemoteError(resource_attempt.failure);
445
+ attach_failed_remote_resource_getters(resource_attempt.failure, PrerenderEffect);
446
+ return PrerenderEffect;
447
+ }
448
+ const resource = resource_attempt.success;
449
+ const PrerenderEffect = ResolveQueryResult(resource, decode_payload);
450
+ attach_remote_resource_getters(resource, PrerenderEffect);
451
+ return PrerenderEffect;
452
+ });
453
+ copy_property_descriptors(native_factory, wrapped);
454
+ return wrapped;
455
+ }
456
+ //#endregion
457
+ //#region src/remote/client/query.ts
458
+ function create_remote_query_adapter(native_factory, decode_payload, _base = "", mode = "standard") {
459
+ const load = has_method(native_factory, "load") ? native_factory.load : void 0;
460
+ const query = typeof native_factory === "function" ? native_factory : void 0;
461
+ if (!query && !load) throw new InvalidQueryFactoryError();
462
+ const wrapped = ((input) => {
463
+ if (!query) return Effect.gen(function* () {
464
+ return yield* ResolveQueryResult(yield* MakeEffectFromPromise(() => Promise.resolve(load?.call(native_factory, input))), decode_payload);
465
+ });
466
+ const resource_attempt = Result.try(() => query(input));
467
+ if (Result.isFailure(resource_attempt)) {
468
+ const QueryEffect = FailWithRemoteError(resource_attempt.failure);
469
+ attach_failed_remote_query_resource(resource_attempt.failure, QueryEffect);
470
+ return QueryEffect;
471
+ }
472
+ const resource = resource_attempt.success;
473
+ const QueryEffect = ResolveQueryResult(mode === "batch" ? begin_batch_query_result(resource) : resource, decode_payload);
474
+ attach_native_remote_query_update(QueryEffect, resource);
475
+ attach_query_resource(resource, QueryEffect);
476
+ return QueryEffect;
477
+ });
478
+ copy_property_descriptors(native_factory, wrapped);
479
+ attach_native_remote_query_update(wrapped, native_factory);
480
+ return wrapped;
481
+ }
482
+ function begin_batch_query_result(resource) {
483
+ if (!has_method(resource, "then")) return resource;
484
+ const result = Promise.resolve(resource);
485
+ result.catch(() => {});
486
+ return result;
487
+ }
488
+ /** Adapts a generated SvelteKit live query to SER's Effect-based client ABI. */
489
+ function create_remote_live_query_adapter(native_factory, _decode_payload, _base = "") {
490
+ const query = typeof native_factory === "function" ? native_factory : void 0;
491
+ if (!query) throw new InvalidLiveQueryFactoryError();
492
+ const wrapped = ((input) => {
493
+ const resource_attempt = Result.try(() => query(input));
494
+ if (Result.isFailure(resource_attempt)) return make_failed_remote_live_stream(resource_attempt.failure, normalize_native_error);
495
+ const resource = resource_attempt.success;
496
+ const stream = make_remote_live_stream(resource, normalize_native_error);
497
+ attach_native_remote_query_update(stream, resource);
498
+ return stream;
499
+ });
500
+ copy_property_descriptors(native_factory, wrapped);
501
+ attach_native_remote_query_update(wrapped, native_factory);
502
+ return wrapped;
503
+ }
504
+ function attach_query_resource(resource, effect) {
505
+ const methods = is_remote_resource(resource) ? resource : void 0;
506
+ const refresh = methods?.refresh;
507
+ const set = methods?.set;
508
+ const with_override = methods?.withOverride;
509
+ attach_remote_resource_getters(resource, effect);
510
+ if (!methods) return;
511
+ if (typeof refresh === "function") Object.defineProperty(effect, "refresh", {
512
+ configurable: true,
513
+ value: () => RefreshRemoteResource(resource, refresh)
514
+ });
515
+ if (typeof set === "function") Object.defineProperty(effect, "set", {
516
+ configurable: true,
517
+ value: (value) => set.call(resource, value)
518
+ });
519
+ if (typeof with_override === "function") Object.defineProperty(effect, "withOverride", {
520
+ configurable: true,
521
+ value: (update) => with_override.call(resource, update)
522
+ });
523
+ }
524
+ const RefreshRemoteResource = (resource, refresh) => Effect.gen(function* () {
525
+ yield* MakeEffectFromPromise(() => Promise.resolve(refresh.call(resource)));
526
+ });
527
+ //#endregion
528
+ export { create_remote_command_adapter as a, create_remote_form_adapter as i, create_remote_query_adapter as n, create_remote_prerender_adapter as r, create_remote_live_query_adapter as t };
529
+
530
+ //# sourceMappingURL=client-BrZka6DW.js.map