@tanstack/solid-start
Version:
Modern and scalable routing for Solid applications
65 lines (64 loc) • 2.23 kB
JavaScript
//#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