UNPKG

@tanstack/solid-start

Version:

Modern and scalable routing for Solid applications

65 lines (64 loc) 2.23 kB
//#region src/solid-rpc-payload.ts var START_PAYLOAD_DATA_ARG = 1; function encodeSolidStartPayload(args) { if (args.length !== 1 || !isObject(args[0])) return args; const payload = args[0]; const data = payload.data; const solidPayload = stripUndefined({ method: payload.method, headers: normalizeHeaders(payload.headers), context: stripUndefined(payload.context) }); if (isFormDataLike(data)) return [solidPayload, normalizeFormData(data)]; return [stripUndefined({ ...solidPayload, data })]; } function decodeSolidStartPayload(args) { const payload = args[0]; if (args.length > START_PAYLOAD_DATA_ARG && isObject(payload) && isFormDataLike(args[START_PAYLOAD_DATA_ARG])) return { ...payload, data: normalizeFormData(args[START_PAYLOAD_DATA_ARG]) }; if (args.length === 1 && isFormDataLike(payload)) return { data: normalizeFormData(payload), method: "POST" }; return payload; } function normalizeHeaders(headers) { if (!headers) return; const normalized = {}; new Headers(headers).forEach((value, key) => { normalized[key] = value; }); return normalized; } function isFormDataLike(value) { return typeof FormData !== "undefined" && isObject(value) && typeof value.append === "function" && typeof value.entries === "function" && typeof value.get === "function"; } function normalizeFormData(value) { if (value instanceof FormData) return value; const normalized = new FormData(); for (const [name, entry] of value.entries()) normalized.append(name, entry); return normalized; } function stripUndefined(value) { if (Array.isArray(value)) return value.map((item) => stripUndefined(item)); if (!isPlainObject(value)) return value; const stripped = {}; for (const [key, nestedValue] of Object.entries(value)) if (nestedValue !== void 0) stripped[key] = stripUndefined(nestedValue); return stripped; } function isObject(value) { return !!value && typeof value === "object"; } function isPlainObject(value) { if (!isObject(value)) return false; const prototype = Object.getPrototypeOf(value); return prototype === Object.prototype || prototype === null; } //#endregion export { decodeSolidStartPayload, encodeSolidStartPayload }; //# sourceMappingURL=solid-rpc-payload.js.map