import { get_request_store } from "@sveltejs/kit/internal/server"; import { c as create_validator, r as run_remote_function, g as get_cache, a as get_response, p as parse_remote_response } from "./chunks/query.js"; import { q } from "./chunks/query.js"; import { M as MUTATIVE_METHODS, u as create_field_proxy, v as normalize_issue, w as set_nested_value, x as flatten_issues, y as deep_set, z as stringify_remote_arg, k as stringify } from "./chunks/shared.js"; import { ValidationError } from "@sveltejs/kit/internal"; import { error, json } from "@sveltejs/kit"; import { D as DEV } from "./chunks/false.js"; import { b as base, c as app_dir } from "./chunks/server.js"; // @__NO_SIDE_EFFECTS__ function command(validate_or_fn, maybe_fn) { const fn = maybe_fn ?? validate_or_fn; const validate = create_validator(validate_or_fn, maybe_fn); const __ = { type: "command", id: "", name: "" }; const wrapper = (arg) => { const { event, state } = get_request_store(); if (!state.allows_commands) { const disallowed_method = !MUTATIVE_METHODS.includes(event.request.method); throw new Error( `Cannot call a command (\`${__.name}(${maybe_fn ? "..." : ""})\`) ${disallowed_method ? `from a ${event.request.method} handler or ` : ""}during server-side rendering` ); } state.refreshes ??= {}; const promise = Promise.resolve( run_remote_function(event, state, true, () => validate(arg), fn) ); promise.updates = () => { throw new Error(`Cannot call '${__.name}(...).updates(...)' on the server`); }; return ( /** @type {ReturnType>} */ promise ); }; Object.defineProperty(wrapper, "__", { value: __ }); Object.defineProperty(wrapper, "pending", { get: () => 0 }); return wrapper; } // @__NO_SIDE_EFFECTS__ function form(validate_or_fn, maybe_fn) { const fn = maybe_fn ?? validate_or_fn; const schema = !maybe_fn || validate_or_fn === "unchecked" ? null : ( /** @type {any} */ validate_or_fn ); function create_instance(key) { const instance = {}; instance.method = "POST"; Object.defineProperty(instance, "enhance", { value: () => { return { action: instance.action, method: instance.method }; } }); const __ = { type: "form", name: "", id: "", fn: async (data, meta, form_data) => { const output = {}; output.submission = true; const { event, state } = get_request_store(); const validated = await schema?.["~standard"].validate(data); if (meta.validate_only) { return validated?.issues?.map((issue) => normalize_issue(issue, true)) ?? []; } if (validated?.issues !== void 0) { handle_issues(output, validated.issues, form_data); } else { if (validated !== void 0) { data = validated.value; } state.refreshes ??= {}; const issue = create_issues(); try { output.result = await run_remote_function( event, state, true, () => data, (data2) => !maybe_fn ? fn() : fn(data2, issue) ); } catch (e) { if (e instanceof ValidationError) { handle_issues(output, e.issues, form_data); } else { throw e; } } } if (!event.isRemoteRequest) { get_cache(__, state)[""] ??= output; } return output; } }; Object.defineProperty(instance, "__", { value: __ }); Object.defineProperty(instance, "action", { get: () => `?/remote=${__.id}`, enumerable: true }); Object.defineProperty(instance, "fields", { get() { return create_field_proxy( {}, () => get_cache(__)?.[""]?.input ?? {}, (path, value) => { const cache = get_cache(__); const data = cache[""]; if (data?.submission) { return; } if (path.length === 0) { (cache[""] ??= {}).input = value; return; } const input = data?.input ?? {}; deep_set(input, path.map(String), value); (cache[""] ??= {}).input = input; }, () => flatten_issues(get_cache(__)?.[""]?.issues ?? []) ); } }); Object.defineProperty(instance, "result", { get() { try { return get_cache(__)?.[""]?.result; } catch { return void 0; } } }); Object.defineProperty(instance, "pending", { get: () => 0 }); Object.defineProperty(instance, "preflight", { // preflight is a noop on the server value: () => instance }); Object.defineProperty(instance, "validate", { value: () => { throw new Error("Cannot call validate() on the server"); } }); if (key == void 0) { Object.defineProperty(instance, "for", { /** @type {RemoteForm['for']} */ value: (key2) => { const { state } = get_request_store(); const cache_key = __.id + "|" + JSON.stringify(key2); let instance2 = (state.form_instances ??= /* @__PURE__ */ new Map()).get(cache_key); if (!instance2) { instance2 = create_instance(key2); instance2.__.id = `${__.id}/${encodeURIComponent(JSON.stringify(key2))}`; instance2.__.name = __.name; state.form_instances.set(cache_key, instance2); } return instance2; } }); } return instance; } return create_instance(); } function handle_issues(output, issues, form_data) { output.issues = issues.map((issue) => normalize_issue(issue, true)); if (form_data) { output.input = {}; for (let key of form_data.keys()) { if (/^[.\]]?_/.test(key)) continue; const is_array = key.endsWith("[]"); const values = form_data.getAll(key).filter((value) => typeof value === "string"); if (is_array) key = key.slice(0, -2); set_nested_value( /** @type {Record} */ output.input, key, is_array ? values : values[0] ); } } } function create_issues() { return ( /** @type {InvalidField} */ new Proxy( /** @param {string} message */ (message) => { if (typeof message !== "string") { throw new Error( "`invalid` should now be imported from `@sveltejs/kit` to throw validation issues. The second parameter provided to the form function (renamed to `issue`) is still used to construct issues, e.g. `invalid(issue.field('message'))`. For more info see https://github.com/sveltejs/kit/pulls/14768" ); } return create_issue(message); }, { get(target, prop) { if (typeof prop === "symbol") return ( /** @type {any} */ target[prop] ); return create_issue_proxy(prop, []); } } ) ); function create_issue(message, path = []) { return { message, path }; } function create_issue_proxy(key, path) { const new_path = [...path, key]; const issue_func = (message) => create_issue(message, new_path); return new Proxy(issue_func, { get(target, prop) { if (typeof prop === "symbol") return ( /** @type {any} */ target[prop] ); if (/^\d+$/.test(prop)) { return create_issue_proxy(parseInt(prop, 10), new_path); } return create_issue_proxy(prop, new_path); } }); } } // @__NO_SIDE_EFFECTS__ function prerender(validate_or_fn, fn_or_options, maybe_options) { const maybe_fn = typeof fn_or_options === "function" ? fn_or_options : void 0; const options = maybe_options ?? (maybe_fn ? void 0 : fn_or_options); const fn = maybe_fn ?? validate_or_fn; const validate = create_validator(validate_or_fn, maybe_fn); const __ = { type: "prerender", id: "", name: "", has_arg: !!maybe_fn, inputs: options?.inputs, dynamic: options?.dynamic }; const wrapper = (arg) => { const promise = (async () => { const { event, state } = get_request_store(); const payload = stringify_remote_arg(arg, state.transport); const id = __.id; const url = `${base}/${app_dir}/remote/${id}${payload ? `/${payload}` : ""}`; if (!state.prerendering && !DEV && !event.isRemoteRequest) { try { return await get_response(__, arg, state, async () => { const key = stringify_remote_arg(arg, state.transport); const cache = get_cache(__, state); const promise3 = cache[key] ??= fetch(new URL(url, event.url.origin).href).then( async (response) => { if (!response.ok) { throw new Error("Prerendered response not found"); } const prerendered = await response.json(); if (prerendered.type === "error") { error(prerendered.status, prerendered.error); } return prerendered.result; } ); return parse_remote_response(await promise3, state.transport); }); } catch { } } if (state.prerendering?.remote_responses.has(url)) { return ( /** @type {Promise} */ state.prerendering.remote_responses.get(url) ); } const promise2 = get_response( __, arg, state, () => run_remote_function(event, state, false, () => validate(arg), fn) ); if (state.prerendering) { state.prerendering.remote_responses.set(url, promise2); } const result = await promise2; if (state.prerendering) { const body = { type: "result", result: stringify(result, state.transport) }; state.prerendering.dependencies.set(url, { body: JSON.stringify(body), response: json(body) }); } return result; })(); promise.catch(() => { }); return ( /** @type {RemoteResource} */ promise ); }; Object.defineProperty(wrapper, "__", { value: __ }); return wrapper; } export { command, form, prerender, q as query };