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 };