astro-ghostcms/.pnpm-store/v3/files/b0/f0b59a79b7cf1bbf9fc12626e5d...

94 lines
2.8 KiB
Plaintext

const PROP_TYPE = {
Value: 0,
JSON: 1,
// Actually means Array
RegExp: 2,
Date: 3,
Map: 4,
Set: 5,
BigInt: 6,
URL: 7,
Uint8Array: 8,
Uint16Array: 9,
Uint32Array: 10
};
function serializeArray(value, metadata = {}, parents = /* @__PURE__ */ new WeakSet()) {
if (parents.has(value)) {
throw new Error(`Cyclic reference detected while serializing props for <${metadata.displayName} client:${metadata.hydrate}>!
Cyclic references cannot be safely serialized for client-side usage. Please remove the cyclic reference.`);
}
parents.add(value);
const serialized = value.map((v) => {
return convertToSerializedForm(v, metadata, parents);
});
parents.delete(value);
return serialized;
}
function serializeObject(value, metadata = {}, parents = /* @__PURE__ */ new WeakSet()) {
if (parents.has(value)) {
throw new Error(`Cyclic reference detected while serializing props for <${metadata.displayName} client:${metadata.hydrate}>!
Cyclic references cannot be safely serialized for client-side usage. Please remove the cyclic reference.`);
}
parents.add(value);
const serialized = Object.fromEntries(
Object.entries(value).map(([k, v]) => {
return [k, convertToSerializedForm(v, metadata, parents)];
})
);
parents.delete(value);
return serialized;
}
function convertToSerializedForm(value, metadata = {}, parents = /* @__PURE__ */ new WeakSet()) {
const tag = Object.prototype.toString.call(value);
switch (tag) {
case "[object Date]": {
return [PROP_TYPE.Date, value.toISOString()];
}
case "[object RegExp]": {
return [PROP_TYPE.RegExp, value.source];
}
case "[object Map]": {
return [PROP_TYPE.Map, serializeArray(Array.from(value), metadata, parents)];
}
case "[object Set]": {
return [PROP_TYPE.Set, serializeArray(Array.from(value), metadata, parents)];
}
case "[object BigInt]": {
return [PROP_TYPE.BigInt, value.toString()];
}
case "[object URL]": {
return [PROP_TYPE.URL, value.toString()];
}
case "[object Array]": {
return [PROP_TYPE.JSON, serializeArray(value, metadata, parents)];
}
case "[object Uint8Array]": {
return [PROP_TYPE.Uint8Array, Array.from(value)];
}
case "[object Uint16Array]": {
return [PROP_TYPE.Uint16Array, Array.from(value)];
}
case "[object Uint32Array]": {
return [PROP_TYPE.Uint32Array, Array.from(value)];
}
default: {
if (value !== null && typeof value === "object") {
return [PROP_TYPE.Value, serializeObject(value, metadata, parents)];
} else if (value === void 0) {
return [PROP_TYPE.Value];
} else {
return [PROP_TYPE.Value, value];
}
}
}
}
function serializeProps(props, metadata) {
const serialized = JSON.stringify(serializeObject(props, metadata));
return serialized;
}
export {
serializeProps
};