seroval 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/index.ts", "../../../src/array.ts", "../../../src/get-identifier.ts", "../../../src/quote.ts"],
4
+ "sourcesContent": ["import { forEach, join } from './array';\nimport getIdentifier from './get-identifier';\nimport quote from './quote';\n\nconst EMPTY_SET = 'new Set';\nconst EMPTY_MAP = 'new Map';\nconst EMPTY_ARRAY = '[]';\n\n// Values that are non-recursive\nexport type PrimitiveValue =\n | boolean\n | string\n | number\n | undefined\n | null\n | bigint\n | Date\n | RegExp;\n\nexport type ServerValue =\n | PrimitiveValue\n | Array<ServerValue>\n | { [key: string | number]: ServerValue }\n | Set<ServerValue>\n | Map<ServerValue, ServerValue>;\n\n// Reference counter\nconst REF_COUNT = new Map<ServerValue, number>();\n\nconst STACK = new Set();\n\n// Value-to-ref map\nconst REFS = new Map<ServerValue, number>();\n\n// Set to check if ref id already has an assigned value\nconst ASSIGNED_REFS = new Set<number>();\n\n// Variables\nlet VARS: string[] = [];\n\n// Array of assignments to be done (used for recursion)\ntype Assignment = [source: string, value: string];\nlet ASSIGNMENTS: Assignment[] = [];\n\n// Array of Map.prototype.set calls\ntype MapSet = [source: string, key: string, value: string];\nlet MAP_SETS: MapSet[] = [];\n\n// Array of Set.prototype.add calls\ntype SetAdd = [source: string, value: string];\nlet SET_ADDS: SetAdd[] = [];\n\nfunction reset() {\n ASSIGNMENTS = [];\n MAP_SETS = [];\n SET_ADDS = [];\n VARS = [];\n REF_COUNT.clear();\n REFS.clear();\n ASSIGNED_REFS.clear();\n}\n\nfunction resolveAssignments() {\n if (ASSIGNMENTS.length) {\n const result: Record<string, string> = {};\n\n // Merge all assignments with similar source\n forEach(ASSIGNMENTS, ([source, value]) => {\n if (value in result) {\n result[value] = `${source}=${result[value]}`;\n } else {\n result[value] = `${source}=${value}`;\n }\n });\n\n return `${join(Object.values(result), ',')},`;\n }\n return '';\n}\n\nfunction resolveMapSets() {\n if (MAP_SETS.length) {\n const result: Record<string, string> = {};\n\n // Merge all assignments with similar source\n forEach(MAP_SETS, ([source, key, value]) => {\n if (source in result) {\n result[source] = `${result[source]}.set(${key},${value})`;\n } else {\n result[source] = `${source}.set(${key},${value})`;\n }\n });\n\n return `${join(Object.values(result), ',')},`;\n }\n return '';\n}\n\nfunction resolveSetAdds() {\n if (SET_ADDS.length) {\n const result: Record<string, string> = {};\n\n // Merge all assignments with similar source\n forEach(SET_ADDS, ([source, value]) => {\n if (source in result) {\n result[source] = `${result[source]}.add(${value})`;\n } else {\n result[source] = `${source}.add(${value})`;\n }\n });\n\n return `${join(Object.values(result), ',')},`;\n }\n return '';\n}\n\nfunction resolvePatches() {\n return `${resolveAssignments()}${resolveMapSets()}${resolveSetAdds()}`;\n}\n\nfunction insertRef(current: ServerValue) {\n const count = REF_COUNT.get(current) || 0;\n REF_COUNT.set(current, count + 1);\n return count === 0;\n}\n\nfunction constructorCheck<T extends NonNullable<ServerValue>>(\n value: NonNullable<ServerValue>,\n constructor: unknown,\n): value is T {\n return value.constructor === constructor;\n}\n\nfunction isPrimitive(current: ServerValue): current is PrimitiveValue {\n if (!current || current === true) {\n return true;\n }\n const type = typeof current;\n const classConst = current.constructor;\n return type === 'number'\n || type === 'string'\n || type === 'bigint'\n || classConst === Date\n || classConst === RegExp;\n}\n\nfunction lookupRefs(current: ServerValue) {\n if (isPrimitive(current)) {\n return;\n }\n if (Array.isArray(current)) {\n if (insertRef(current)) {\n forEach(current, lookupRefs);\n }\n } else if (constructorCheck<Set<ServerValue>>(current, Set)) {\n if (insertRef(current)) {\n for (const item of current.keys()) {\n lookupRefs(item);\n }\n }\n } else if (constructorCheck<Map<ServerValue, ServerValue>>(current, Map)) {\n if (insertRef(current)) {\n for (const [key, value] of current.entries()) {\n lookupRefs(key);\n lookupRefs(value);\n }\n }\n } else if (current.constructor === Object && insertRef(current)) {\n forEach(Object.values(current), lookupRefs);\n }\n}\n\nfunction createRef(value: ServerValue) {\n const current = REFS.get(value);\n if (current != null) {\n return current;\n }\n const id = REFS.size;\n REFS.set(value, id);\n return id;\n}\n\nfunction getRefParam(index: number) {\n if (VARS[index]) {\n return VARS[index];\n }\n const result = getIdentifier(index);\n VARS[index] = result;\n return result;\n}\n\nfunction assignRef(index: number, value: string) {\n return `${getRefParam(index)}=${value}`;\n}\n\nfunction createAssignment(source: string, value: string) {\n ASSIGNMENTS.push([source, value]);\n}\n\nfunction createSetAdd(ref: number, value: string) {\n SET_ADDS.push([getRefParam(ref), value]);\n}\n\nfunction createMapSet(ref: number, key: string, value: string) {\n MAP_SETS.push([getRefParam(ref), key, value]);\n}\n\nfunction createArrayAssign(ref: number, index: number, value: string) {\n createAssignment(`${getRefParam(ref)}[${index}]`, value);\n}\n\nfunction createObjectIdentifierAssign(ref: number, key: string, value: string) {\n createAssignment(`${getRefParam(ref)}.${key}`, value);\n}\n\nfunction createObjectStringAssign(ref: number, key: string, value: string) {\n createAssignment(`${getRefParam(ref)}[${quote(key)}]`, value);\n}\n\nfunction serializePrimitive(value: PrimitiveValue): string {\n // Shortened forms\n if (value === true) {\n return '!0';\n }\n if (value === false) {\n return '!1';\n }\n if (value === undefined) {\n return 'void 0';\n }\n if (value === null) {\n return 'null';\n }\n // negative 0 isn't the same as 0\n if (Object.is(value, -0)) {\n return '-0';\n }\n if (typeof value === 'bigint') {\n return `BigInt(\"${value}\")`;\n }\n if (typeof value === 'string') {\n return quote(value);\n }\n if (value.constructor === Date) {\n return `new Date(\"${value.toISOString()}\")`;\n }\n return String(value);\n}\n\nfunction traverse(current: ServerValue): string | { referred: string } {\n // Skip primitives\n if (isPrimitive(current)) {\n return serializePrimitive(current);\n }\n // Get reference of the current object\n let refResult = REFS.get(current);\n if (refResult != null) {\n // Return the reference if already assigned a value\n if (ASSIGNED_REFS.has(refResult)) {\n return { referred: getRefParam(refResult) };\n }\n // Early sign (to prevent recursion)\n ASSIGNED_REFS.add(refResult);\n }\n // Transform Set\n if (constructorCheck<Set<ServerValue>>(current, Set)) {\n if (current.size) {\n const values: string[] = [];\n\n STACK.add(current);\n for (const value of current.keys()) {\n if (STACK.has(value)) {\n // This object received a ref, we must generate a setter ref\n if (refResult == null) {\n refResult = createRef(current);\n }\n // Received a ref, this might be a recursive ref, defer an assignment\n createSetAdd(refResult, getRefParam(createRef(value)));\n } else {\n const result = traverse(value);\n if (typeof result === 'string') {\n values.push(result);\n } else {\n values.push(result.referred);\n }\n }\n }\n STACK.delete(current);\n\n const value = values.length ? `new Set([${join(values, ',')}])` : EMPTY_SET;\n if (refResult != null) {\n return assignRef(refResult, value);\n }\n return value;\n }\n return EMPTY_SET;\n }\n if (constructorCheck<Map<ServerValue, ServerValue>>(current, Map)) {\n if (current.size) {\n const values: string[] = [];\n\n STACK.add(current);\n for (const [key, value] of current.entries()) {\n if (STACK.has(key)) {\n if (refResult == null) {\n refResult = createRef(current);\n }\n const keyRef = getRefParam(createRef(key));\n if (STACK.has(value)) {\n createMapSet(refResult, keyRef, getRefParam(createRef(value)));\n } else {\n const valueResult = traverse(value);\n if (typeof valueResult === 'string') {\n createMapSet(refResult, keyRef, valueResult);\n } else {\n createMapSet(refResult, keyRef, valueResult.referred);\n }\n }\n } else if (STACK.has(value)) {\n if (refResult == null) {\n refResult = createRef(current);\n }\n const valueRef = getRefParam(createRef(value));\n const keyResult = traverse(key);\n if (typeof keyResult === 'string') {\n createMapSet(refResult, keyResult, valueRef);\n } else {\n createMapSet(refResult, keyResult.referred, valueRef);\n }\n } else {\n const keyResult = traverse(key);\n const valueResult = traverse(value);\n if (typeof keyResult === 'string') {\n if (typeof valueResult === 'string') {\n values.push(`[${keyResult},${valueResult}]`);\n } else {\n values.push(`[${keyResult},${valueResult.referred}]`);\n }\n } else {\n if (typeof valueResult === 'string') {\n values.push(`[${keyResult.referred},${valueResult}]`);\n } else {\n values.push(`[${keyResult.referred},${valueResult.referred}]`);\n }\n }\n }\n }\n STACK.delete(current);\n const value = values.length ? `new Map([${join(values, ',')}])` : EMPTY_MAP;\n if (refResult != null) {\n return assignRef(refResult, value);\n }\n return value;\n }\n return EMPTY_MAP;\n }\n if (Array.isArray(current)) {\n if (current.length) {\n let values = '';\n\n STACK.add(current);\n forEach(current, (item, i) => {\n if (i in current) {\n if (STACK.has(item)) {\n if (refResult == null) {\n refResult = createRef(current);\n }\n createArrayAssign(refResult, i, getRefParam(createRef(item)));\n values += ',';\n } else {\n const result = traverse(item);\n if (typeof result === 'string') {\n values += result;\n } else {\n values += result.referred;\n }\n if (i < current.length - 1) {\n values += ',';\n }\n }\n } else {\n values += ',';\n }\n });\n STACK.delete(current);\n\n const value = `[${values}]`;\n if (refResult != null) {\n return assignRef(refResult, value);\n }\n return value;\n }\n return EMPTY_ARRAY;\n }\n if (current.constructor === Object) {\n const values: string[] = [];\n\n STACK.add(current);\n forEach(Object.entries(current), ([key, value]) => {\n const check = Number(key);\n // Test if key is a valid number or JS identifier\n // so that we don't have to serialize the key and wrap with brackets\n if (Number.isNaN(check) || /^([$A-Z_][0-9A-Z_$]*)$/i.test(key)) {\n if (STACK.has(value)) {\n if (refResult == null) {\n refResult = createRef(current);\n }\n createObjectIdentifierAssign(refResult, key, getRefParam(createRef(value)));\n } else {\n const result = traverse(value);\n if (typeof result === 'string') {\n values.push(`${key}:${result}`);\n } else {\n values.push(`${key}:${result.referred}`);\n }\n }\n } else if (STACK.has(value)) {\n if (refResult == null) {\n refResult = createRef(current);\n }\n createObjectStringAssign(refResult, key, getRefParam(createRef(value)));\n } else {\n const result = traverse(value);\n if (typeof result === 'string') {\n values.push(`${quote(key)}:${result}`);\n } else {\n values.push(`${quote(key)}:${result.referred}`);\n }\n }\n });\n STACK.delete(current);\n\n const value = `{${join(values, ',')}}`;\n if (refResult != null) {\n return assignRef(refResult, value);\n }\n return value;\n }\n throw new Error('Unserializable value');\n}\n\nexport default function serialize(source: ServerValue) {\n if (isPrimitive(source)) {\n return serializePrimitive(source);\n }\n reset();\n // Lookup possible shared references\n lookupRefs(source);\n // Add shared references to refs\n for (const [key, value] of REF_COUNT.entries()) {\n if (value > 1) {\n createRef(key);\n }\n }\n // Get top-level serialization\n const result = traverse(source);\n if (typeof result !== 'string') {\n throw new Error('Unreachable error');\n }\n\n // Shared references detected\n if (VARS.length) {\n // Get (or create) a ref from the source\n const index = getRefParam(createRef(source));\n const patches = resolvePatches();\n const params = VARS.length > 1\n ? `(${join(VARS, ',')})`\n : VARS[0];\n // Source is probably already assigned\n if (result.startsWith(index)) {\n return `(${params}=>(${result},${patches}${index}))()`;\n }\n return `(${params}=>(${index}=${result},${patches}${index}))()`;\n }\n if (source.constructor === Object) {\n return `(${result})`;\n }\n return result;\n}\n", "export function forEach<T>(arr: T[], callback: (value: T, index: number) => (boolean | void)) {\n for (let i = 0, len = arr.length; i < len; i++) {\n if (callback(arr[i], i)) {\n break;\n }\n }\n}\n\nexport function join(arr: string[], joiner: string): string {\n let result = '';\n forEach(arr, (value, index) => {\n result += value;\n if (index < arr.length - 1) {\n result += joiner;\n }\n });\n return result;\n}\n", "const REF_START_CHARS = 'hjkmoquxzABCDEFGHIJKLNPQRTUVWXYZ$_'; // Avoids chars that could evaluate to a reserved word.\nconst REF_START_CHARS_LEN = REF_START_CHARS.length;\nconst REF_CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_';\nconst REF_CHARS_LEN = REF_CHARS.length;\n\nexport default function getIdentifier(index: number) {\n let mod = index % REF_START_CHARS_LEN;\n let ref = REF_START_CHARS[mod];\n index = (index - mod) / REF_START_CHARS_LEN;\n while (index > 0) {\n mod = index % REF_CHARS_LEN;\n ref += REF_CHARS[mod];\n index = (index - mod) / REF_CHARS_LEN;\n }\n return ref;\n}\n", "// Written by https://github.com/DylanPiercey and is distributed under the MIT license.\n// Creates a JavaScript double quoted string and escapes all characters\n// not listed as DoubleStringCharacters on\n// Also includes \"<\" to escape \"</script>\" and \"\\\" to avoid invalid escapes in the output.\n// http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4\nexport default function quote(str: string) {\n let result = '';\n let lastPos = 0;\n for (let i = 0, len = str.length; i < len; i++) {\n let replacement;\n switch (str[i]) {\n case '\"':\n replacement = '\\\\\"';\n break;\n case '\\\\':\n replacement = '\\\\\\\\';\n break;\n case '<':\n replacement = '\\\\x3C';\n break;\n case '\\n':\n replacement = '\\\\n';\n break;\n case '\\r':\n replacement = '\\\\r';\n break;\n case '\\u2028':\n replacement = '\\\\u2028';\n break;\n case '\\u2029':\n replacement = '\\\\u2029';\n break;\n default:\n continue;\n }\n result += str.slice(lastPos, i) + replacement;\n lastPos = i + 1;\n }\n if (lastPos === 0) {\n result = str;\n } else {\n result += str.slice(lastPos);\n }\n return `\"${result}\"`;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["value"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var M=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var H=Object.prototype.hasOwnProperty;var Y=(e,t)=>{for(var r in t)M(e,r,{get:t[r],enumerable:!0})},U=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of x(t))!H.call(e,n)&&n!==r&&M(e,n,{get:()=>t[n],enumerable:!(s=z(t,n))||s.enumerable});return e};var q=e=>U(M({},"__esModule",{value:!0}),e);var te={};Y(te,{default:()=>I});module.exports=q(te);function g(e,t){for(let r=0,s=e.length;r<s&&!t(e[r],r);r++);}function $(e,t){let r="";return g(e,(s,n)=>{r+=s,n<e.length-1&&(r+=t)}),r}var j="hjkmoquxzABCDEFGHIJKLNPQRTUVWXYZ$_",N=j.length,O="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_",P=O.length;function T(e){let t=e%N,r=j[t];for(e=(e-t)/N;e>0;)t=e%P,r+=O[t],e=(e-t)/P;return r}function p(e){let t="",r=0;for(let s=0,n=e.length;s<n;s++){let i;switch(e[s]){case'"':i='\\"';break;case"\\":i="\\\\";break;case"<":i="\\x3C";break;case`
2
+ `:i="\\n";break;case"\r":i="\\r";break;case"\u2028":i="\\u2028";break;case"\u2029":i="\\u2029";break;default:continue}t+=e.slice(r,s)+i,r=s+1}return r===0?t=e:t+=e.slice(r),`"${t}"`}var C="new Set",D="new Map",G="[]",A=new Map,o=new Set,b=new Map,_=new Set,S=[],R=[],V=[],y=[];function L(){R=[],V=[],y=[],S=[],A.clear(),b.clear(),_.clear()}function Z(){if(R.length){let e={};return g(R,([t,r])=>{r in e?e[r]=`${t}=${e[r]}`:e[r]=`${t}=${r}`}),`${$(Object.values(e),",")},`}return""}function B(){if(V.length){let e={};return g(V,([t,r,s])=>{t in e?e[t]=`${e[t]}.set(${r},${s})`:e[t]=`${t}.set(${r},${s})`}),`${$(Object.values(e),",")},`}return""}function K(){if(y.length){let e={};return g(y,([t,r])=>{t in e?e[t]=`${e[t]}.add(${r})`:e[t]=`${t}.add(${r})`}),`${$(Object.values(e),",")},`}return""}function W(){return`${Z()}${B()}${K()}`}function m(e){let t=A.get(e)||0;return A.set(e,t+1),t===0}function E(e,t){return e.constructor===t}function w(e){if(!e||e===!0)return!0;let t=typeof e,r=e.constructor;return t==="number"||t==="string"||t==="bigint"||r===Date||r===RegExp}function d(e){if(!w(e))if(Array.isArray(e))m(e)&&g(e,d);else if(E(e,Set)){if(m(e))for(let t of e.keys())d(t)}else if(E(e,Map)){if(m(e))for(let[t,r]of e.entries())d(t),d(r)}else e.constructor===Object&&m(e)&&g(Object.values(e),d)}function u(e){let t=b.get(e);if(t!=null)return t;let r=b.size;return b.set(e,r),r}function a(e){if(S[e])return S[e];let t=T(e);return S[e]=t,t}function v(e,t){return`${a(e)}=${t}`}function k(e,t){R.push([e,t])}function J(e,t){y.push([a(e),t])}function h(e,t,r){V.push([a(e),t,r])}function Q(e,t,r){k(`${a(e)}[${t}]`,r)}function X(e,t,r){k(`${a(e)}.${t}`,r)}function ee(e,t,r){k(`${a(e)}[${p(t)}]`,r)}function F(e){return e===!0?"!0":e===!1?"!1":e===void 0?"void 0":e===null?"null":Object.is(e,-0)?"-0":typeof e=="bigint"?`BigInt("${e}")`:typeof e=="string"?p(e):e.constructor===Date?`new Date("${e.toISOString()}")`:String(e)}function c(e){if(w(e))return F(e);let t=b.get(e);if(t!=null){if(_.has(t))return{referred:a(t)};_.add(t)}if(E(e,Set)){if(e.size){let r=[];o.add(e);for(let n of e.keys())if(o.has(n))t==null&&(t=u(e)),J(t,a(u(n)));else{let i=c(n);typeof i=="string"?r.push(i):r.push(i.referred)}o.delete(e);let s=r.length?`new Set([${$(r,",")}])`:C;return t!=null?v(t,s):s}return C}if(E(e,Map)){if(e.size){let r=[];o.add(e);for(let[n,i]of e.entries())if(o.has(n)){t==null&&(t=u(e));let f=a(u(n));if(o.has(i))h(t,f,a(u(i)));else{let l=c(i);typeof l=="string"?h(t,f,l):h(t,f,l.referred)}}else if(o.has(i)){t==null&&(t=u(e));let f=a(u(i)),l=c(n);typeof l=="string"?h(t,l,f):h(t,l.referred,f)}else{let f=c(n),l=c(i);typeof f=="string"?typeof l=="string"?r.push(`[${f},${l}]`):r.push(`[${f},${l.referred}]`):typeof l=="string"?r.push(`[${f.referred},${l}]`):r.push(`[${f.referred},${l.referred}]`)}o.delete(e);let s=r.length?`new Map([${$(r,",")}])`:D;return t!=null?v(t,s):s}return D}if(Array.isArray(e)){if(e.length){let r="";o.add(e),g(e,(n,i)=>{if(i in e)if(o.has(n))t==null&&(t=u(e)),Q(t,i,a(u(n))),r+=",";else{let f=c(n);typeof f=="string"?r+=f:r+=f.referred,i<e.length-1&&(r+=",")}else r+=","}),o.delete(e);let s=`[${r}]`;return t!=null?v(t,s):s}return G}if(e.constructor===Object){let r=[];o.add(e),g(Object.entries(e),([n,i])=>{let f=Number(n);if(Number.isNaN(f)||/^([$A-Z_][0-9A-Z_$]*)$/i.test(n))if(o.has(i))t==null&&(t=u(e)),X(t,n,a(u(i)));else{let l=c(i);typeof l=="string"?r.push(`${n}:${l}`):r.push(`${n}:${l.referred}`)}else if(o.has(i))t==null&&(t=u(e)),ee(t,n,a(u(i)));else{let l=c(i);typeof l=="string"?r.push(`${p(n)}:${l}`):r.push(`${p(n)}:${l.referred}`)}}),o.delete(e);let s=`{${$(r,",")}}`;return t!=null?v(t,s):s}throw new Error("Unserializable value")}function I(e){if(w(e))return F(e);L(),d(e);for(let[r,s]of A.entries())s>1&&u(r);let t=c(e);if(typeof t!="string")throw new Error("Unreachable error");if(S.length){let r=a(u(e)),s=W(),n=S.length>1?`(${$(S,",")})`:S[0];return t.startsWith(r)?`(${n}=>(${t},${s}${r}))()`:`(${n}=>(${r}=${t},${s}${r}))()`}return e.constructor===Object?`(${t})`:t}
@@ -0,0 +1,458 @@
1
+ // src/array.ts
2
+ function forEach(arr, callback) {
3
+ for (let i = 0, len = arr.length; i < len; i++) {
4
+ if (callback(arr[i], i)) {
5
+ break;
6
+ }
7
+ }
8
+ }
9
+ function join(arr, joiner) {
10
+ let result = "";
11
+ forEach(arr, (value, index) => {
12
+ result += value;
13
+ if (index < arr.length - 1) {
14
+ result += joiner;
15
+ }
16
+ });
17
+ return result;
18
+ }
19
+
20
+ // src/get-identifier.ts
21
+ var REF_START_CHARS = "hjkmoquxzABCDEFGHIJKLNPQRTUVWXYZ$_";
22
+ var REF_START_CHARS_LEN = REF_START_CHARS.length;
23
+ var REF_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_";
24
+ var REF_CHARS_LEN = REF_CHARS.length;
25
+ function getIdentifier(index) {
26
+ let mod = index % REF_START_CHARS_LEN;
27
+ let ref = REF_START_CHARS[mod];
28
+ index = (index - mod) / REF_START_CHARS_LEN;
29
+ while (index > 0) {
30
+ mod = index % REF_CHARS_LEN;
31
+ ref += REF_CHARS[mod];
32
+ index = (index - mod) / REF_CHARS_LEN;
33
+ }
34
+ return ref;
35
+ }
36
+
37
+ // src/quote.ts
38
+ function quote(str) {
39
+ let result = "";
40
+ let lastPos = 0;
41
+ for (let i = 0, len = str.length; i < len; i++) {
42
+ let replacement;
43
+ switch (str[i]) {
44
+ case '"':
45
+ replacement = '\\"';
46
+ break;
47
+ case "\\":
48
+ replacement = "\\\\";
49
+ break;
50
+ case "<":
51
+ replacement = "\\x3C";
52
+ break;
53
+ case "\n":
54
+ replacement = "\\n";
55
+ break;
56
+ case "\r":
57
+ replacement = "\\r";
58
+ break;
59
+ case "\u2028":
60
+ replacement = "\\u2028";
61
+ break;
62
+ case "\u2029":
63
+ replacement = "\\u2029";
64
+ break;
65
+ default:
66
+ continue;
67
+ }
68
+ result += str.slice(lastPos, i) + replacement;
69
+ lastPos = i + 1;
70
+ }
71
+ if (lastPos === 0) {
72
+ result = str;
73
+ } else {
74
+ result += str.slice(lastPos);
75
+ }
76
+ return `"${result}"`;
77
+ }
78
+
79
+ // src/index.ts
80
+ var EMPTY_SET = "new Set";
81
+ var EMPTY_MAP = "new Map";
82
+ var EMPTY_ARRAY = "[]";
83
+ var REF_COUNT = /* @__PURE__ */ new Map();
84
+ var STACK = /* @__PURE__ */ new Set();
85
+ var REFS = /* @__PURE__ */ new Map();
86
+ var ASSIGNED_REFS = /* @__PURE__ */ new Set();
87
+ var VARS = [];
88
+ var ASSIGNMENTS = [];
89
+ var MAP_SETS = [];
90
+ var SET_ADDS = [];
91
+ function reset() {
92
+ ASSIGNMENTS = [];
93
+ MAP_SETS = [];
94
+ SET_ADDS = [];
95
+ VARS = [];
96
+ REF_COUNT.clear();
97
+ REFS.clear();
98
+ ASSIGNED_REFS.clear();
99
+ }
100
+ function resolveAssignments() {
101
+ if (ASSIGNMENTS.length) {
102
+ const result = {};
103
+ forEach(ASSIGNMENTS, ([source, value]) => {
104
+ if (value in result) {
105
+ result[value] = `${source}=${result[value]}`;
106
+ } else {
107
+ result[value] = `${source}=${value}`;
108
+ }
109
+ });
110
+ return `${join(Object.values(result), ",")},`;
111
+ }
112
+ return "";
113
+ }
114
+ function resolveMapSets() {
115
+ if (MAP_SETS.length) {
116
+ const result = {};
117
+ forEach(MAP_SETS, ([source, key, value]) => {
118
+ if (source in result) {
119
+ result[source] = `${result[source]}.set(${key},${value})`;
120
+ } else {
121
+ result[source] = `${source}.set(${key},${value})`;
122
+ }
123
+ });
124
+ return `${join(Object.values(result), ",")},`;
125
+ }
126
+ return "";
127
+ }
128
+ function resolveSetAdds() {
129
+ if (SET_ADDS.length) {
130
+ const result = {};
131
+ forEach(SET_ADDS, ([source, value]) => {
132
+ if (source in result) {
133
+ result[source] = `${result[source]}.add(${value})`;
134
+ } else {
135
+ result[source] = `${source}.add(${value})`;
136
+ }
137
+ });
138
+ return `${join(Object.values(result), ",")},`;
139
+ }
140
+ return "";
141
+ }
142
+ function resolvePatches() {
143
+ return `${resolveAssignments()}${resolveMapSets()}${resolveSetAdds()}`;
144
+ }
145
+ function insertRef(current) {
146
+ const count = REF_COUNT.get(current) || 0;
147
+ REF_COUNT.set(current, count + 1);
148
+ return count === 0;
149
+ }
150
+ function constructorCheck(value, constructor) {
151
+ return value.constructor === constructor;
152
+ }
153
+ function isPrimitive(current) {
154
+ if (!current || current === true) {
155
+ return true;
156
+ }
157
+ const type = typeof current;
158
+ const classConst = current.constructor;
159
+ return type === "number" || type === "string" || type === "bigint" || classConst === Date || classConst === RegExp;
160
+ }
161
+ function lookupRefs(current) {
162
+ if (isPrimitive(current)) {
163
+ return;
164
+ }
165
+ if (Array.isArray(current)) {
166
+ if (insertRef(current)) {
167
+ forEach(current, lookupRefs);
168
+ }
169
+ } else if (constructorCheck(current, Set)) {
170
+ if (insertRef(current)) {
171
+ for (const item of current.keys()) {
172
+ lookupRefs(item);
173
+ }
174
+ }
175
+ } else if (constructorCheck(current, Map)) {
176
+ if (insertRef(current)) {
177
+ for (const [key, value] of current.entries()) {
178
+ lookupRefs(key);
179
+ lookupRefs(value);
180
+ }
181
+ }
182
+ } else if (current.constructor === Object && insertRef(current)) {
183
+ forEach(Object.values(current), lookupRefs);
184
+ }
185
+ }
186
+ function createRef(value) {
187
+ const current = REFS.get(value);
188
+ if (current != null) {
189
+ return current;
190
+ }
191
+ const id = REFS.size;
192
+ REFS.set(value, id);
193
+ return id;
194
+ }
195
+ function getRefParam(index) {
196
+ if (VARS[index]) {
197
+ return VARS[index];
198
+ }
199
+ const result = getIdentifier(index);
200
+ VARS[index] = result;
201
+ return result;
202
+ }
203
+ function assignRef(index, value) {
204
+ return `${getRefParam(index)}=${value}`;
205
+ }
206
+ function createAssignment(source, value) {
207
+ ASSIGNMENTS.push([source, value]);
208
+ }
209
+ function createSetAdd(ref, value) {
210
+ SET_ADDS.push([getRefParam(ref), value]);
211
+ }
212
+ function createMapSet(ref, key, value) {
213
+ MAP_SETS.push([getRefParam(ref), key, value]);
214
+ }
215
+ function createArrayAssign(ref, index, value) {
216
+ createAssignment(`${getRefParam(ref)}[${index}]`, value);
217
+ }
218
+ function createObjectIdentifierAssign(ref, key, value) {
219
+ createAssignment(`${getRefParam(ref)}.${key}`, value);
220
+ }
221
+ function createObjectStringAssign(ref, key, value) {
222
+ createAssignment(`${getRefParam(ref)}[${quote(key)}]`, value);
223
+ }
224
+ function serializePrimitive(value) {
225
+ if (value === true) {
226
+ return "!0";
227
+ }
228
+ if (value === false) {
229
+ return "!1";
230
+ }
231
+ if (value === void 0) {
232
+ return "void 0";
233
+ }
234
+ if (value === null) {
235
+ return "null";
236
+ }
237
+ if (Object.is(value, -0)) {
238
+ return "-0";
239
+ }
240
+ if (typeof value === "bigint") {
241
+ return `BigInt("${value}")`;
242
+ }
243
+ if (typeof value === "string") {
244
+ return quote(value);
245
+ }
246
+ if (value.constructor === Date) {
247
+ return `new Date("${value.toISOString()}")`;
248
+ }
249
+ return String(value);
250
+ }
251
+ function traverse(current) {
252
+ if (isPrimitive(current)) {
253
+ return serializePrimitive(current);
254
+ }
255
+ let refResult = REFS.get(current);
256
+ if (refResult != null) {
257
+ if (ASSIGNED_REFS.has(refResult)) {
258
+ return { referred: getRefParam(refResult) };
259
+ }
260
+ ASSIGNED_REFS.add(refResult);
261
+ }
262
+ if (constructorCheck(current, Set)) {
263
+ if (current.size) {
264
+ const values = [];
265
+ STACK.add(current);
266
+ for (const value2 of current.keys()) {
267
+ if (STACK.has(value2)) {
268
+ if (refResult == null) {
269
+ refResult = createRef(current);
270
+ }
271
+ createSetAdd(refResult, getRefParam(createRef(value2)));
272
+ } else {
273
+ const result = traverse(value2);
274
+ if (typeof result === "string") {
275
+ values.push(result);
276
+ } else {
277
+ values.push(result.referred);
278
+ }
279
+ }
280
+ }
281
+ STACK.delete(current);
282
+ const value = values.length ? `new Set([${join(values, ",")}])` : EMPTY_SET;
283
+ if (refResult != null) {
284
+ return assignRef(refResult, value);
285
+ }
286
+ return value;
287
+ }
288
+ return EMPTY_SET;
289
+ }
290
+ if (constructorCheck(current, Map)) {
291
+ if (current.size) {
292
+ const values = [];
293
+ STACK.add(current);
294
+ for (const [key, value2] of current.entries()) {
295
+ if (STACK.has(key)) {
296
+ if (refResult == null) {
297
+ refResult = createRef(current);
298
+ }
299
+ const keyRef = getRefParam(createRef(key));
300
+ if (STACK.has(value2)) {
301
+ createMapSet(refResult, keyRef, getRefParam(createRef(value2)));
302
+ } else {
303
+ const valueResult = traverse(value2);
304
+ if (typeof valueResult === "string") {
305
+ createMapSet(refResult, keyRef, valueResult);
306
+ } else {
307
+ createMapSet(refResult, keyRef, valueResult.referred);
308
+ }
309
+ }
310
+ } else if (STACK.has(value2)) {
311
+ if (refResult == null) {
312
+ refResult = createRef(current);
313
+ }
314
+ const valueRef = getRefParam(createRef(value2));
315
+ const keyResult = traverse(key);
316
+ if (typeof keyResult === "string") {
317
+ createMapSet(refResult, keyResult, valueRef);
318
+ } else {
319
+ createMapSet(refResult, keyResult.referred, valueRef);
320
+ }
321
+ } else {
322
+ const keyResult = traverse(key);
323
+ const valueResult = traverse(value2);
324
+ if (typeof keyResult === "string") {
325
+ if (typeof valueResult === "string") {
326
+ values.push(`[${keyResult},${valueResult}]`);
327
+ } else {
328
+ values.push(`[${keyResult},${valueResult.referred}]`);
329
+ }
330
+ } else {
331
+ if (typeof valueResult === "string") {
332
+ values.push(`[${keyResult.referred},${valueResult}]`);
333
+ } else {
334
+ values.push(`[${keyResult.referred},${valueResult.referred}]`);
335
+ }
336
+ }
337
+ }
338
+ }
339
+ STACK.delete(current);
340
+ const value = values.length ? `new Map([${join(values, ",")}])` : EMPTY_MAP;
341
+ if (refResult != null) {
342
+ return assignRef(refResult, value);
343
+ }
344
+ return value;
345
+ }
346
+ return EMPTY_MAP;
347
+ }
348
+ if (Array.isArray(current)) {
349
+ if (current.length) {
350
+ let values = "";
351
+ STACK.add(current);
352
+ forEach(current, (item, i) => {
353
+ if (i in current) {
354
+ if (STACK.has(item)) {
355
+ if (refResult == null) {
356
+ refResult = createRef(current);
357
+ }
358
+ createArrayAssign(refResult, i, getRefParam(createRef(item)));
359
+ values += ",";
360
+ } else {
361
+ const result = traverse(item);
362
+ if (typeof result === "string") {
363
+ values += result;
364
+ } else {
365
+ values += result.referred;
366
+ }
367
+ if (i < current.length - 1) {
368
+ values += ",";
369
+ }
370
+ }
371
+ } else {
372
+ values += ",";
373
+ }
374
+ });
375
+ STACK.delete(current);
376
+ const value = `[${values}]`;
377
+ if (refResult != null) {
378
+ return assignRef(refResult, value);
379
+ }
380
+ return value;
381
+ }
382
+ return EMPTY_ARRAY;
383
+ }
384
+ if (current.constructor === Object) {
385
+ const values = [];
386
+ STACK.add(current);
387
+ forEach(Object.entries(current), ([key, value2]) => {
388
+ const check = Number(key);
389
+ if (Number.isNaN(check) || /^([$A-Z_][0-9A-Z_$]*)$/i.test(key)) {
390
+ if (STACK.has(value2)) {
391
+ if (refResult == null) {
392
+ refResult = createRef(current);
393
+ }
394
+ createObjectIdentifierAssign(refResult, key, getRefParam(createRef(value2)));
395
+ } else {
396
+ const result = traverse(value2);
397
+ if (typeof result === "string") {
398
+ values.push(`${key}:${result}`);
399
+ } else {
400
+ values.push(`${key}:${result.referred}`);
401
+ }
402
+ }
403
+ } else if (STACK.has(value2)) {
404
+ if (refResult == null) {
405
+ refResult = createRef(current);
406
+ }
407
+ createObjectStringAssign(refResult, key, getRefParam(createRef(value2)));
408
+ } else {
409
+ const result = traverse(value2);
410
+ if (typeof result === "string") {
411
+ values.push(`${quote(key)}:${result}`);
412
+ } else {
413
+ values.push(`${quote(key)}:${result.referred}`);
414
+ }
415
+ }
416
+ });
417
+ STACK.delete(current);
418
+ const value = `{${join(values, ",")}}`;
419
+ if (refResult != null) {
420
+ return assignRef(refResult, value);
421
+ }
422
+ return value;
423
+ }
424
+ throw new Error("Unserializable value");
425
+ }
426
+ function serialize(source) {
427
+ if (isPrimitive(source)) {
428
+ return serializePrimitive(source);
429
+ }
430
+ reset();
431
+ lookupRefs(source);
432
+ for (const [key, value] of REF_COUNT.entries()) {
433
+ if (value > 1) {
434
+ createRef(key);
435
+ }
436
+ }
437
+ const result = traverse(source);
438
+ if (typeof result !== "string") {
439
+ throw new Error("Unreachable error");
440
+ }
441
+ if (VARS.length) {
442
+ const index = getRefParam(createRef(source));
443
+ const patches = resolvePatches();
444
+ const params = VARS.length > 1 ? `(${join(VARS, ",")})` : VARS[0];
445
+ if (result.startsWith(index)) {
446
+ return `(${params}=>(${result},${patches}${index}))()`;
447
+ }
448
+ return `(${params}=>(${index}=${result},${patches}${index}))()`;
449
+ }
450
+ if (source.constructor === Object) {
451
+ return `(${result})`;
452
+ }
453
+ return result;
454
+ }
455
+ export {
456
+ serialize as default
457
+ };
458
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/array.ts", "../../../src/get-identifier.ts", "../../../src/quote.ts", "../../../src/index.ts"],
4
+ "sourcesContent": ["export function forEach<T>(arr: T[], callback: (value: T, index: number) => (boolean | void)) {\n for (let i = 0, len = arr.length; i < len; i++) {\n if (callback(arr[i], i)) {\n break;\n }\n }\n}\n\nexport function join(arr: string[], joiner: string): string {\n let result = '';\n forEach(arr, (value, index) => {\n result += value;\n if (index < arr.length - 1) {\n result += joiner;\n }\n });\n return result;\n}\n", "const REF_START_CHARS = 'hjkmoquxzABCDEFGHIJKLNPQRTUVWXYZ$_'; // Avoids chars that could evaluate to a reserved word.\nconst REF_START_CHARS_LEN = REF_START_CHARS.length;\nconst REF_CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_';\nconst REF_CHARS_LEN = REF_CHARS.length;\n\nexport default function getIdentifier(index: number) {\n let mod = index % REF_START_CHARS_LEN;\n let ref = REF_START_CHARS[mod];\n index = (index - mod) / REF_START_CHARS_LEN;\n while (index > 0) {\n mod = index % REF_CHARS_LEN;\n ref += REF_CHARS[mod];\n index = (index - mod) / REF_CHARS_LEN;\n }\n return ref;\n}\n", "// Written by https://github.com/DylanPiercey and is distributed under the MIT license.\n// Creates a JavaScript double quoted string and escapes all characters\n// not listed as DoubleStringCharacters on\n// Also includes \"<\" to escape \"</script>\" and \"\\\" to avoid invalid escapes in the output.\n// http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4\nexport default function quote(str: string) {\n let result = '';\n let lastPos = 0;\n for (let i = 0, len = str.length; i < len; i++) {\n let replacement;\n switch (str[i]) {\n case '\"':\n replacement = '\\\\\"';\n break;\n case '\\\\':\n replacement = '\\\\\\\\';\n break;\n case '<':\n replacement = '\\\\x3C';\n break;\n case '\\n':\n replacement = '\\\\n';\n break;\n case '\\r':\n replacement = '\\\\r';\n break;\n case '\\u2028':\n replacement = '\\\\u2028';\n break;\n case '\\u2029':\n replacement = '\\\\u2029';\n break;\n default:\n continue;\n }\n result += str.slice(lastPos, i) + replacement;\n lastPos = i + 1;\n }\n if (lastPos === 0) {\n result = str;\n } else {\n result += str.slice(lastPos);\n }\n return `\"${result}\"`;\n}\n", "import { forEach, join } from './array';\nimport getIdentifier from './get-identifier';\nimport quote from './quote';\n\nconst EMPTY_SET = 'new Set';\nconst EMPTY_MAP = 'new Map';\nconst EMPTY_ARRAY = '[]';\n\n// Values that are non-recursive\nexport type PrimitiveValue =\n | boolean\n | string\n | number\n | undefined\n | null\n | bigint\n | Date\n | RegExp;\n\nexport type ServerValue =\n | PrimitiveValue\n | Array<ServerValue>\n | { [key: string | number]: ServerValue }\n | Set<ServerValue>\n | Map<ServerValue, ServerValue>;\n\n// Reference counter\nconst REF_COUNT = new Map<ServerValue, number>();\n\nconst STACK = new Set();\n\n// Value-to-ref map\nconst REFS = new Map<ServerValue, number>();\n\n// Set to check if ref id already has an assigned value\nconst ASSIGNED_REFS = new Set<number>();\n\n// Variables\nlet VARS: string[] = [];\n\n// Array of assignments to be done (used for recursion)\ntype Assignment = [source: string, value: string];\nlet ASSIGNMENTS: Assignment[] = [];\n\n// Array of Map.prototype.set calls\ntype MapSet = [source: string, key: string, value: string];\nlet MAP_SETS: MapSet[] = [];\n\n// Array of Set.prototype.add calls\ntype SetAdd = [source: string, value: string];\nlet SET_ADDS: SetAdd[] = [];\n\nfunction reset() {\n ASSIGNMENTS = [];\n MAP_SETS = [];\n SET_ADDS = [];\n VARS = [];\n REF_COUNT.clear();\n REFS.clear();\n ASSIGNED_REFS.clear();\n}\n\nfunction resolveAssignments() {\n if (ASSIGNMENTS.length) {\n const result: Record<string, string> = {};\n\n // Merge all assignments with similar source\n forEach(ASSIGNMENTS, ([source, value]) => {\n if (value in result) {\n result[value] = `${source}=${result[value]}`;\n } else {\n result[value] = `${source}=${value}`;\n }\n });\n\n return `${join(Object.values(result), ',')},`;\n }\n return '';\n}\n\nfunction resolveMapSets() {\n if (MAP_SETS.length) {\n const result: Record<string, string> = {};\n\n // Merge all assignments with similar source\n forEach(MAP_SETS, ([source, key, value]) => {\n if (source in result) {\n result[source] = `${result[source]}.set(${key},${value})`;\n } else {\n result[source] = `${source}.set(${key},${value})`;\n }\n });\n\n return `${join(Object.values(result), ',')},`;\n }\n return '';\n}\n\nfunction resolveSetAdds() {\n if (SET_ADDS.length) {\n const result: Record<string, string> = {};\n\n // Merge all assignments with similar source\n forEach(SET_ADDS, ([source, value]) => {\n if (source in result) {\n result[source] = `${result[source]}.add(${value})`;\n } else {\n result[source] = `${source}.add(${value})`;\n }\n });\n\n return `${join(Object.values(result), ',')},`;\n }\n return '';\n}\n\nfunction resolvePatches() {\n return `${resolveAssignments()}${resolveMapSets()}${resolveSetAdds()}`;\n}\n\nfunction insertRef(current: ServerValue) {\n const count = REF_COUNT.get(current) || 0;\n REF_COUNT.set(current, count + 1);\n return count === 0;\n}\n\nfunction constructorCheck<T extends NonNullable<ServerValue>>(\n value: NonNullable<ServerValue>,\n constructor: unknown,\n): value is T {\n return value.constructor === constructor;\n}\n\nfunction isPrimitive(current: ServerValue): current is PrimitiveValue {\n if (!current || current === true) {\n return true;\n }\n const type = typeof current;\n const classConst = current.constructor;\n return type === 'number'\n || type === 'string'\n || type === 'bigint'\n || classConst === Date\n || classConst === RegExp;\n}\n\nfunction lookupRefs(current: ServerValue) {\n if (isPrimitive(current)) {\n return;\n }\n if (Array.isArray(current)) {\n if (insertRef(current)) {\n forEach(current, lookupRefs);\n }\n } else if (constructorCheck<Set<ServerValue>>(current, Set)) {\n if (insertRef(current)) {\n for (const item of current.keys()) {\n lookupRefs(item);\n }\n }\n } else if (constructorCheck<Map<ServerValue, ServerValue>>(current, Map)) {\n if (insertRef(current)) {\n for (const [key, value] of current.entries()) {\n lookupRefs(key);\n lookupRefs(value);\n }\n }\n } else if (current.constructor === Object && insertRef(current)) {\n forEach(Object.values(current), lookupRefs);\n }\n}\n\nfunction createRef(value: ServerValue) {\n const current = REFS.get(value);\n if (current != null) {\n return current;\n }\n const id = REFS.size;\n REFS.set(value, id);\n return id;\n}\n\nfunction getRefParam(index: number) {\n if (VARS[index]) {\n return VARS[index];\n }\n const result = getIdentifier(index);\n VARS[index] = result;\n return result;\n}\n\nfunction assignRef(index: number, value: string) {\n return `${getRefParam(index)}=${value}`;\n}\n\nfunction createAssignment(source: string, value: string) {\n ASSIGNMENTS.push([source, value]);\n}\n\nfunction createSetAdd(ref: number, value: string) {\n SET_ADDS.push([getRefParam(ref), value]);\n}\n\nfunction createMapSet(ref: number, key: string, value: string) {\n MAP_SETS.push([getRefParam(ref), key, value]);\n}\n\nfunction createArrayAssign(ref: number, index: number, value: string) {\n createAssignment(`${getRefParam(ref)}[${index}]`, value);\n}\n\nfunction createObjectIdentifierAssign(ref: number, key: string, value: string) {\n createAssignment(`${getRefParam(ref)}.${key}`, value);\n}\n\nfunction createObjectStringAssign(ref: number, key: string, value: string) {\n createAssignment(`${getRefParam(ref)}[${quote(key)}]`, value);\n}\n\nfunction serializePrimitive(value: PrimitiveValue): string {\n // Shortened forms\n if (value === true) {\n return '!0';\n }\n if (value === false) {\n return '!1';\n }\n if (value === undefined) {\n return 'void 0';\n }\n if (value === null) {\n return 'null';\n }\n // negative 0 isn't the same as 0\n if (Object.is(value, -0)) {\n return '-0';\n }\n if (typeof value === 'bigint') {\n return `BigInt(\"${value}\")`;\n }\n if (typeof value === 'string') {\n return quote(value);\n }\n if (value.constructor === Date) {\n return `new Date(\"${value.toISOString()}\")`;\n }\n return String(value);\n}\n\nfunction traverse(current: ServerValue): string | { referred: string } {\n // Skip primitives\n if (isPrimitive(current)) {\n return serializePrimitive(current);\n }\n // Get reference of the current object\n let refResult = REFS.get(current);\n if (refResult != null) {\n // Return the reference if already assigned a value\n if (ASSIGNED_REFS.has(refResult)) {\n return { referred: getRefParam(refResult) };\n }\n // Early sign (to prevent recursion)\n ASSIGNED_REFS.add(refResult);\n }\n // Transform Set\n if (constructorCheck<Set<ServerValue>>(current, Set)) {\n if (current.size) {\n const values: string[] = [];\n\n STACK.add(current);\n for (const value of current.keys()) {\n if (STACK.has(value)) {\n // This object received a ref, we must generate a setter ref\n if (refResult == null) {\n refResult = createRef(current);\n }\n // Received a ref, this might be a recursive ref, defer an assignment\n createSetAdd(refResult, getRefParam(createRef(value)));\n } else {\n const result = traverse(value);\n if (typeof result === 'string') {\n values.push(result);\n } else {\n values.push(result.referred);\n }\n }\n }\n STACK.delete(current);\n\n const value = values.length ? `new Set([${join(values, ',')}])` : EMPTY_SET;\n if (refResult != null) {\n return assignRef(refResult, value);\n }\n return value;\n }\n return EMPTY_SET;\n }\n if (constructorCheck<Map<ServerValue, ServerValue>>(current, Map)) {\n if (current.size) {\n const values: string[] = [];\n\n STACK.add(current);\n for (const [key, value] of current.entries()) {\n if (STACK.has(key)) {\n if (refResult == null) {\n refResult = createRef(current);\n }\n const keyRef = getRefParam(createRef(key));\n if (STACK.has(value)) {\n createMapSet(refResult, keyRef, getRefParam(createRef(value)));\n } else {\n const valueResult = traverse(value);\n if (typeof valueResult === 'string') {\n createMapSet(refResult, keyRef, valueResult);\n } else {\n createMapSet(refResult, keyRef, valueResult.referred);\n }\n }\n } else if (STACK.has(value)) {\n if (refResult == null) {\n refResult = createRef(current);\n }\n const valueRef = getRefParam(createRef(value));\n const keyResult = traverse(key);\n if (typeof keyResult === 'string') {\n createMapSet(refResult, keyResult, valueRef);\n } else {\n createMapSet(refResult, keyResult.referred, valueRef);\n }\n } else {\n const keyResult = traverse(key);\n const valueResult = traverse(value);\n if (typeof keyResult === 'string') {\n if (typeof valueResult === 'string') {\n values.push(`[${keyResult},${valueResult}]`);\n } else {\n values.push(`[${keyResult},${valueResult.referred}]`);\n }\n } else {\n if (typeof valueResult === 'string') {\n values.push(`[${keyResult.referred},${valueResult}]`);\n } else {\n values.push(`[${keyResult.referred},${valueResult.referred}]`);\n }\n }\n }\n }\n STACK.delete(current);\n const value = values.length ? `new Map([${join(values, ',')}])` : EMPTY_MAP;\n if (refResult != null) {\n return assignRef(refResult, value);\n }\n return value;\n }\n return EMPTY_MAP;\n }\n if (Array.isArray(current)) {\n if (current.length) {\n let values = '';\n\n STACK.add(current);\n forEach(current, (item, i) => {\n if (i in current) {\n if (STACK.has(item)) {\n if (refResult == null) {\n refResult = createRef(current);\n }\n createArrayAssign(refResult, i, getRefParam(createRef(item)));\n values += ',';\n } else {\n const result = traverse(item);\n if (typeof result === 'string') {\n values += result;\n } else {\n values += result.referred;\n }\n if (i < current.length - 1) {\n values += ',';\n }\n }\n } else {\n values += ',';\n }\n });\n STACK.delete(current);\n\n const value = `[${values}]`;\n if (refResult != null) {\n return assignRef(refResult, value);\n }\n return value;\n }\n return EMPTY_ARRAY;\n }\n if (current.constructor === Object) {\n const values: string[] = [];\n\n STACK.add(current);\n forEach(Object.entries(current), ([key, value]) => {\n const check = Number(key);\n // Test if key is a valid number or JS identifier\n // so that we don't have to serialize the key and wrap with brackets\n if (Number.isNaN(check) || /^([$A-Z_][0-9A-Z_$]*)$/i.test(key)) {\n if (STACK.has(value)) {\n if (refResult == null) {\n refResult = createRef(current);\n }\n createObjectIdentifierAssign(refResult, key, getRefParam(createRef(value)));\n } else {\n const result = traverse(value);\n if (typeof result === 'string') {\n values.push(`${key}:${result}`);\n } else {\n values.push(`${key}:${result.referred}`);\n }\n }\n } else if (STACK.has(value)) {\n if (refResult == null) {\n refResult = createRef(current);\n }\n createObjectStringAssign(refResult, key, getRefParam(createRef(value)));\n } else {\n const result = traverse(value);\n if (typeof result === 'string') {\n values.push(`${quote(key)}:${result}`);\n } else {\n values.push(`${quote(key)}:${result.referred}`);\n }\n }\n });\n STACK.delete(current);\n\n const value = `{${join(values, ',')}}`;\n if (refResult != null) {\n return assignRef(refResult, value);\n }\n return value;\n }\n throw new Error('Unserializable value');\n}\n\nexport default function serialize(source: ServerValue) {\n if (isPrimitive(source)) {\n return serializePrimitive(source);\n }\n reset();\n // Lookup possible shared references\n lookupRefs(source);\n // Add shared references to refs\n for (const [key, value] of REF_COUNT.entries()) {\n if (value > 1) {\n createRef(key);\n }\n }\n // Get top-level serialization\n const result = traverse(source);\n if (typeof result !== 'string') {\n throw new Error('Unreachable error');\n }\n\n // Shared references detected\n if (VARS.length) {\n // Get (or create) a ref from the source\n const index = getRefParam(createRef(source));\n const patches = resolvePatches();\n const params = VARS.length > 1\n ? `(${join(VARS, ',')})`\n : VARS[0];\n // Source is probably already assigned\n if (result.startsWith(index)) {\n return `(${params}=>(${result},${patches}${index}))()`;\n }\n return `(${params}=>(${index}=${result},${patches}${index}))()`;\n }\n if (source.constructor === Object) {\n return `(${result})`;\n }\n return result;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["value"]
7
+ }
@@ -0,0 +1,2 @@
1
+ function g(e,t){for(let r=0,s=e.length;r<s&&!t(e[r],r);r++);}function $(e,t){let r="";return g(e,(s,i)=>{r+=s,i<e.length-1&&(r+=t)}),r}var P="hjkmoquxzABCDEFGHIJKLNPQRTUVWXYZ$_",k=P.length,j="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_",N=j.length;function M(e){let t=e%k,r=P[t];for(e=(e-t)/k;e>0;)t=e%N,r+=j[t],e=(e-t)/N;return r}function p(e){let t="",r=0;for(let s=0,i=e.length;s<i;s++){let n;switch(e[s]){case'"':n='\\"';break;case"\\":n="\\\\";break;case"<":n="\\x3C";break;case`
2
+ `:n="\\n";break;case"\r":n="\\r";break;case"\u2028":n="\\u2028";break;case"\u2029":n="\\u2029";break;default:continue}t+=e.slice(r,s)+n,r=s+1}return r===0?t=e:t+=e.slice(r),`"${t}"`}var O="new Set",C="new Map",F="[]",A=new Map,o=new Set,b=new Map,T=new Set,S=[],R=[],V=[],y=[];function I(){R=[],V=[],y=[],S=[],A.clear(),b.clear(),T.clear()}function z(){if(R.length){let e={};return g(R,([t,r])=>{r in e?e[r]=`${t}=${e[r]}`:e[r]=`${t}=${r}`}),`${$(Object.values(e),",")},`}return""}function x(){if(V.length){let e={};return g(V,([t,r,s])=>{t in e?e[t]=`${e[t]}.set(${r},${s})`:e[t]=`${t}.set(${r},${s})`}),`${$(Object.values(e),",")},`}return""}function H(){if(y.length){let e={};return g(y,([t,r])=>{t in e?e[t]=`${e[t]}.add(${r})`:e[t]=`${t}.add(${r})`}),`${$(Object.values(e),",")},`}return""}function Y(){return`${z()}${x()}${H()}`}function m(e){let t=A.get(e)||0;return A.set(e,t+1),t===0}function E(e,t){return e.constructor===t}function _(e){if(!e||e===!0)return!0;let t=typeof e,r=e.constructor;return t==="number"||t==="string"||t==="bigint"||r===Date||r===RegExp}function d(e){if(!_(e))if(Array.isArray(e))m(e)&&g(e,d);else if(E(e,Set)){if(m(e))for(let t of e.keys())d(t)}else if(E(e,Map)){if(m(e))for(let[t,r]of e.entries())d(t),d(r)}else e.constructor===Object&&m(e)&&g(Object.values(e),d)}function u(e){let t=b.get(e);if(t!=null)return t;let r=b.size;return b.set(e,r),r}function a(e){if(S[e])return S[e];let t=M(e);return S[e]=t,t}function v(e,t){return`${a(e)}=${t}`}function w(e,t){R.push([e,t])}function U(e,t){y.push([a(e),t])}function h(e,t,r){V.push([a(e),t,r])}function q(e,t,r){w(`${a(e)}[${t}]`,r)}function G(e,t,r){w(`${a(e)}.${t}`,r)}function L(e,t,r){w(`${a(e)}[${p(t)}]`,r)}function D(e){return e===!0?"!0":e===!1?"!1":e===void 0?"void 0":e===null?"null":Object.is(e,-0)?"-0":typeof e=="bigint"?`BigInt("${e}")`:typeof e=="string"?p(e):e.constructor===Date?`new Date("${e.toISOString()}")`:String(e)}function c(e){if(_(e))return D(e);let t=b.get(e);if(t!=null){if(T.has(t))return{referred:a(t)};T.add(t)}if(E(e,Set)){if(e.size){let r=[];o.add(e);for(let i of e.keys())if(o.has(i))t==null&&(t=u(e)),U(t,a(u(i)));else{let n=c(i);typeof n=="string"?r.push(n):r.push(n.referred)}o.delete(e);let s=r.length?`new Set([${$(r,",")}])`:O;return t!=null?v(t,s):s}return O}if(E(e,Map)){if(e.size){let r=[];o.add(e);for(let[i,n]of e.entries())if(o.has(i)){t==null&&(t=u(e));let f=a(u(i));if(o.has(n))h(t,f,a(u(n)));else{let l=c(n);typeof l=="string"?h(t,f,l):h(t,f,l.referred)}}else if(o.has(n)){t==null&&(t=u(e));let f=a(u(n)),l=c(i);typeof l=="string"?h(t,l,f):h(t,l.referred,f)}else{let f=c(i),l=c(n);typeof f=="string"?typeof l=="string"?r.push(`[${f},${l}]`):r.push(`[${f},${l.referred}]`):typeof l=="string"?r.push(`[${f.referred},${l}]`):r.push(`[${f.referred},${l.referred}]`)}o.delete(e);let s=r.length?`new Map([${$(r,",")}])`:C;return t!=null?v(t,s):s}return C}if(Array.isArray(e)){if(e.length){let r="";o.add(e),g(e,(i,n)=>{if(n in e)if(o.has(i))t==null&&(t=u(e)),q(t,n,a(u(i))),r+=",";else{let f=c(i);typeof f=="string"?r+=f:r+=f.referred,n<e.length-1&&(r+=",")}else r+=","}),o.delete(e);let s=`[${r}]`;return t!=null?v(t,s):s}return F}if(e.constructor===Object){let r=[];o.add(e),g(Object.entries(e),([i,n])=>{let f=Number(i);if(Number.isNaN(f)||/^([$A-Z_][0-9A-Z_$]*)$/i.test(i))if(o.has(n))t==null&&(t=u(e)),G(t,i,a(u(n)));else{let l=c(n);typeof l=="string"?r.push(`${i}:${l}`):r.push(`${i}:${l.referred}`)}else if(o.has(n))t==null&&(t=u(e)),L(t,i,a(u(n)));else{let l=c(n);typeof l=="string"?r.push(`${p(i)}:${l}`):r.push(`${p(i)}:${l.referred}`)}}),o.delete(e);let s=`{${$(r,",")}}`;return t!=null?v(t,s):s}throw new Error("Unserializable value")}function Z(e){if(_(e))return D(e);I(),d(e);for(let[r,s]of A.entries())s>1&&u(r);let t=c(e);if(typeof t!="string")throw new Error("Unreachable error");if(S.length){let r=a(u(e)),s=Y(),i=S.length>1?`(${$(S,",")})`:S[0];return t.startsWith(r)?`(${i}=>(${t},${s}${r}))()`:`(${i}=>(${r}=${t},${s}${r}))()`}return e.constructor===Object?`(${t})`:t}export{Z as default};
@@ -0,0 +1,2 @@
1
+ export declare function forEach<T>(arr: T[], callback: (value: T, index: number) => (boolean | void)): void;
2
+ export declare function join(arr: string[], joiner: string): string;
@@ -0,0 +1 @@
1
+ export default function getIdentifier(index: number): string;
@@ -0,0 +1,5 @@
1
+ export type PrimitiveValue = boolean | string | number | undefined | null | bigint | Date | RegExp;
2
+ export type ServerValue = PrimitiveValue | Array<ServerValue> | {
3
+ [key: string | number]: ServerValue;
4
+ } | Set<ServerValue> | Map<ServerValue, ServerValue>;
5
+ export default function serialize(source: ServerValue): string;
@@ -0,0 +1 @@
1
+ export default function quote(str: string): string;