vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
63 lines (61 loc) • 9.8 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
function serializeRegExp(regex) {
return {
source: regex.source,
flags: regex.flags,
__isRegExp: true
};
}
const isSerializable = (x) => {
return typeof x === "number" || typeof x === "bigint" || typeof x === "boolean" || typeof x === "string" || x instanceof Buffer || Array.isArray(x) && (!x.length || x instanceof Uint8Array || x instanceof Uint16Array || x instanceof Uint32Array || x instanceof Int8Array || x instanceof Int16Array || x instanceof Int32Array);
};
function cleanObject(obj, knownNonSerializableFunctions = /* @__PURE__ */ new Set(), currentPath = "") {
if (typeof obj !== "object" || obj == null) return obj;
if (isSerializable(obj)) return obj;
if (obj instanceof RegExp) return serializeRegExp(obj);
if (Array.isArray(obj)) {
return obj.map(
(x, i) => cleanObject(x, knownNonSerializableFunctions, `${currentPath}[${i}]`)
).filter((x) => x !== void 0);
}
if (obj instanceof RegExp)
return serializeRegExp(obj);
const result = {};
for (const [key, value] of Object.entries(obj)) {
const fullPath = currentPath ? `${currentPath}.${key}` : key;
const normalizedPath = fullPath.replace(/\[\d+\]/g, "[]");
if (isSerializable(value)) {
result[key] = value;
continue;
}
if (typeof value === "function" || knownNonSerializableFunctions.has(normalizedPath) || knownNonSerializableFunctions.has(key)) {
continue;
}
if (typeof value === "object" && value !== null) {
const hasFunctions = Object.entries(value).some(([k, v]) => {
const nestedPath = `${normalizedPath}.${k}`;
return typeof v === "function" || knownNonSerializableFunctions.has(nestedPath);
});
if (hasFunctions) {
continue;
}
const cleaned = cleanObject(
value,
knownNonSerializableFunctions,
`${normalizedPath}.${key}`
);
if (cleaned !== void 0 && Object.keys(cleaned).length > 0) {
result[key] = cleaned;
}
} else {
result[key] = value;
}
}
return Object.keys(result).length > 0 ? result : {};
}
export { cleanObject };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW5PYmplY3QuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BsdWdpbi9oZWxwZXJzL2NsZWFuT2JqZWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VyaWFsaXphYmxlUmVjb3JkIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBzZXJpYWxpemUgUmVnRXhwIG9iamVjdHNcbmZ1bmN0aW9uIHNlcmlhbGl6ZVJlZ0V4cChyZWdleDogUmVnRXhwKToge1xuICBzb3VyY2U6IHN0cmluZztcbiAgZmxhZ3M6IHN0cmluZztcbiAgX19pc1JlZ0V4cDogYm9vbGVhbjtcbn0ge1xuICByZXR1cm4ge1xuICAgIHNvdXJjZTogcmVnZXguc291cmNlLFxuICAgIGZsYWdzOiByZWdleC5mbGFncyxcbiAgICBfX2lzUmVnRXhwOiB0cnVlLFxuICB9O1xufVxuXG5jb25zdCBpc1NlcmlhbGl6YWJsZSA9IChcbiAgeDogdW5rbm93blxuKTogeCBpc1xuICB8IG51bWJlclxuICB8IGJpZ2ludFxuICB8IGJvb2xlYW5cbiAgfCBzdHJpbmdcbiAgfCB1bmRlZmluZWRcbiAgfCBudWxsXG4gIHwgVWludDhBcnJheVxuICB8IFVpbnQxNkFycmF5XG4gIHwgVWludDMyQXJyYXlcbiAgfCBJbnQ4QXJyYXlcbiAgfCBJbnQxNkFycmF5XG4gIHwgSW50MzJBcnJheSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHggPT09IFwibnVtYmVyXCIgfHxcbiAgICB0eXBlb2YgeCA9PT0gXCJiaWdpbnRcIiB8fFxuICAgIHR5cGVvZiB4ID09PSBcImJvb2xlYW5cIiB8fFxuICAgIHR5cGVvZiB4ID09PSBcInN0cmluZ1wiIHx8XG4gICAgeCBpbnN0YW5jZW9mIEJ1ZmZlciB8fFxuICAgIChBcnJheS5pc0FycmF5KHgpICYmXG4gICAgICAoIXgubGVuZ3RoIHx8XG4gICAgICAgIHggaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8XG4gICAgICAgIHggaW5zdGFuY2VvZiBVaW50MTZBcnJheSB8fFxuICAgICAgICB4IGluc3RhbmNlb2YgVWludDMyQXJyYXkgfHxcbiAgICAgICAgeCBpbnN0YW5jZW9mIEludDhBcnJheSB8fFxuICAgICAgICB4IGluc3RhbmNlb2YgSW50MTZBcnJheSB8fFxuICAgICAgICB4IGluc3RhbmNlb2YgSW50MzJBcnJheSkpXG4gICk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5PYmplY3Q8VD4oXG4gIG9iajogVCxcbiAga25vd25Ob25TZXJpYWxpemFibGVGdW5jdGlvbnM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpLFxuICBjdXJyZW50UGF0aDogc3RyaW5nID0gXCJcIlxuKTogU2VyaWFsaXphYmxlUmVjb3JkICYgVCB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqIGFzIEV4dHJhY3Q8U2VyaWFsaXphYmxlUmVjb3JkLCBUPjtcbiAgaWYgKGlzU2VyaWFsaXphYmxlKG9iaikpIHJldHVybiBvYmogYXMgRXh0cmFjdDxTZXJpYWxpemFibGVSZWNvcmQsIFQ+O1xuICBpZihvYmogaW5zdGFuY2VvZiBSZWdFeHApIHJldHVybiBzZXJpYWxpemVSZWdFeHAob2JqKSBhcyB1bmtub3duIGFzIEV4dHJhY3Q8U2VyaWFsaXphYmxlUmVjb3JkLCBUPjtcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9ialxuICAgICAgLm1hcCgoeCwgaSkgPT5cbiAgICAgICAgY2xlYW5PYmplY3QoeCwga25vd25Ob25TZXJpYWxpemFibGVGdW5jdGlvbnMsIGAke2N1cnJlbnRQYXRofVske2l9XWApXG4gICAgICApXG4gICAgICAuZmlsdGVyKCh4KSA9PiB4ICE9PSB1bmRlZmluZWQpIGFzIEV4dHJhY3Q8U2VyaWFsaXphYmxlUmVjb3JkLCBUPjtcbiAgfVxuICBpZiAob2JqIGluc3RhbmNlb2YgUmVnRXhwKVxuICAgIHJldHVybiBzZXJpYWxpemVSZWdFeHAob2JqKSBhcyB1bmtub3duIGFzIEV4dHJhY3Q8U2VyaWFsaXphYmxlUmVjb3JkLCBUPjtcblxuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGN1cnJlbnRQYXRoID8gYCR7Y3VycmVudFBhdGh9LiR7a2V5fWAgOiBrZXk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBmdWxsUGF0aC5yZXBsYWNlKC9cXFtcXGQrXFxdL2csIFwiW11cIik7XG4gICAgLy8gU2tpcCBpZiBpdCdzIGEgZnVuY3Rpb24gb3Iga25vd24gbm9uLXNlcmlhbGl6YWJsZSBwcm9wZXJ0eVxuICAgIGlmKGlzU2VyaWFsaXphYmxlKHZhbHVlKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAga25vd25Ob25TZXJpYWxpemFibGVGdW5jdGlvbnMuaGFzKG5vcm1hbGl6ZWRQYXRoKSB8fFxuICAgICAga25vd25Ob25TZXJpYWxpemFibGVGdW5jdGlvbnMuaGFzKGtleSlcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBuZXN0ZWQgb2JqZWN0c1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBvYmplY3QgaGFzIGFueSBmdW5jdGlvbnNcbiAgICAgIGNvbnN0IGhhc0Z1bmN0aW9ucyA9IE9iamVjdC5lbnRyaWVzKHZhbHVlKS5zb21lKChbaywgdl0pID0+IHtcbiAgICAgICAgY29uc3QgbmVzdGVkUGF0aCA9IGAke25vcm1hbGl6ZWRQYXRofS4ke2t9YDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0eXBlb2YgdiA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAga25vd25Ob25TZXJpYWxpemFibGVGdW5jdGlvbnMuaGFzKG5lc3RlZFBhdGgpXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGhhc0Z1bmN0aW9ucykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2xlYW5lZCA9IGNsZWFuT2JqZWN0KFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAga25vd25Ob25TZXJpYWxpemFibGVGdW5jdGlvbnMsXG4gICAgICAgIGAke25vcm1hbGl6ZWRQYXRofS4ke2tleX1gXG4gICAgICApO1xuICAgICAgaWYgKGNsZWFuZWQgIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhjbGVhbmVkKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gY2xlYW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChPYmplY3Qua2V5cyhyZXN1bHQpLmxlbmd0aCA+IDAgPyByZXN1bHQgOiB7fSkgYXMgRXh0cmFjdDxcbiAgICBTZXJpYWxpemFibGVSZWNvcmQsXG4gICAgVFxuICA+O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0EsU0FBUyxnQkFBZ0IsS0FJdkIsRUFBQTtBQUNBLEVBQU8sT0FBQTtBQUFBLElBQ0wsUUFBUSxLQUFNLENBQUEsTUFBQTtBQUFBLElBQ2QsT0FBTyxLQUFNLENBQUEsS0FBQTtBQUFBLElBQ2IsVUFBWSxFQUFBO0FBQUEsR0FDZDtBQUNGO0FBRUEsTUFBTSxjQUFBLEdBQWlCLENBQ3JCLENBYWdCLEtBQUE7QUFDaEIsRUFBQSxPQUNFLE9BQU8sQ0FBQSxLQUFNLFFBQ2IsSUFBQSxPQUFPLENBQU0sS0FBQSxRQUFBLElBQ2IsT0FB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