58 lines
1.5 KiB
Plaintext
58 lines
1.5 KiB
Plaintext
|
import { createAPIContext } from "../endpoint/index.js";
|
||
|
import { sequence } from "./sequence.js";
|
||
|
function defineMiddleware(fn) {
|
||
|
return fn;
|
||
|
}
|
||
|
function createContext({ request, params, userDefinedLocales = [] }) {
|
||
|
return createAPIContext({
|
||
|
request,
|
||
|
params: params ?? {},
|
||
|
props: {},
|
||
|
site: void 0,
|
||
|
locales: userDefinedLocales,
|
||
|
defaultLocale: void 0,
|
||
|
routingStrategy: void 0
|
||
|
});
|
||
|
}
|
||
|
function isLocalsSerializable(value) {
|
||
|
let type = typeof value;
|
||
|
let plainObject = true;
|
||
|
if (type === "object" && isPlainObject(value)) {
|
||
|
for (const [, nestedValue] of Object.entries(value)) {
|
||
|
if (!isLocalsSerializable(nestedValue)) {
|
||
|
plainObject = false;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
plainObject = false;
|
||
|
}
|
||
|
let result = value === null || type === "string" || type === "number" || type === "boolean" || Array.isArray(value) || plainObject;
|
||
|
return result;
|
||
|
}
|
||
|
function isPlainObject(value) {
|
||
|
if (typeof value !== "object" || value === null)
|
||
|
return false;
|
||
|
let proto = Object.getPrototypeOf(value);
|
||
|
if (proto === null)
|
||
|
return true;
|
||
|
let baseProto = proto;
|
||
|
while (Object.getPrototypeOf(baseProto) !== null) {
|
||
|
baseProto = Object.getPrototypeOf(baseProto);
|
||
|
}
|
||
|
return proto === baseProto;
|
||
|
}
|
||
|
function trySerializeLocals(value) {
|
||
|
if (isLocalsSerializable(value)) {
|
||
|
return JSON.stringify(value);
|
||
|
} else {
|
||
|
throw new Error("The passed value can't be serialized.");
|
||
|
}
|
||
|
}
|
||
|
export {
|
||
|
createContext,
|
||
|
defineMiddleware,
|
||
|
sequence,
|
||
|
trySerializeLocals
|
||
|
};
|