@highstate/designer 0.4.2 → 0.4.4

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.
Files changed (119) hide show
  1. package/.output/nitro.json +15 -0
  2. package/.output/public/_nuxt/B-YqONwZ.js +1 -0
  3. package/.output/public/_nuxt/COXQCz2I.js +1 -0
  4. package/.output/public/_nuxt/DNF_Kfc9.js +1 -0
  5. package/.output/public/_nuxt/DYyPqv2f.js +164 -0
  6. package/.output/public/_nuxt/builds/latest.json +1 -0
  7. package/.output/public/_nuxt/builds/meta/c81be379-d98f-426f-8eac-c45f3b97a743.json +1 -0
  8. package/.output/public/_nuxt/entry.BSAdMt6G.css +5 -0
  9. package/.output/public/_nuxt/error-404.BJkSn6RI.css +1 -0
  10. package/.output/public/_nuxt/error-500.TOCKLquH.css +1 -0
  11. package/.output/public/favicon.ico +0 -0
  12. package/.output/public/robots.txt +1 -0
  13. package/.output/server/index.mjs +12266 -0
  14. package/.output/server/index.mjs.map +1 -0
  15. package/.output/server/node_modules/@babel/parser/lib/index.js +14183 -0
  16. package/.output/server/node_modules/@babel/parser/package.json +50 -0
  17. package/.output/server/node_modules/@trpc/server/dist/http.mjs +7 -0
  18. package/.output/server/node_modules/@trpc/server/dist/index.mjs +11 -0
  19. package/.output/server/node_modules/@trpc/server/dist/observable/observable.mjs +175 -0
  20. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/createProxy.mjs +73 -0
  21. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/error/TRPCError.mjs +78 -0
  22. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/error/formatter.mjs +5 -0
  23. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/error/getErrorShape.mjs +29 -0
  24. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/http/contentType.mjs +224 -0
  25. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/http/contentTypeParsers.mjs +12 -0
  26. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/http/getHTTPStatusCode.mjs +76 -0
  27. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/http/isAbortError.mjs +7 -0
  28. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/http/parseConnectionParams.mjs +39 -0
  29. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/http/resolveResponse.mjs +569 -0
  30. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/initTRPC.mjs +80 -0
  31. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/middleware.mjs +90 -0
  32. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/parser.mjs +40 -0
  33. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/procedureBuilder.mjs +194 -0
  34. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/rootConfig.mjs +6 -0
  35. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/router.mjs +176 -0
  36. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/rpc/codes.mjs +54 -0
  37. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/jsonl.mjs +597 -0
  38. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/sse.mjs +359 -0
  39. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/tracked.mjs +25 -0
  40. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/utils/asyncIterable.mjs +167 -0
  41. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/utils/createDeferred.mjs +15 -0
  42. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/utils/disposable.mjs +41 -0
  43. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/utils/mergeAsyncIterables.mjs +239 -0
  44. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/utils/readableStreamFrom.mjs +23 -0
  45. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/utils/timerResource.mjs +23 -0
  46. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/utils/withPing.mjs +127 -0
  47. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/transformer.mjs +101 -0
  48. package/.output/server/node_modules/@trpc/server/dist/unstable-core-do-not-import/utils.mjs +83 -0
  49. package/.output/server/node_modules/@trpc/server/dist/vendor/unpromise/unpromise.mjs +289 -0
  50. package/.output/server/node_modules/@trpc/server/package.json +156 -0
  51. package/.output/server/node_modules/@unhead/dom/dist/index.mjs +197 -0
  52. package/.output/server/node_modules/@unhead/dom/package.json +40 -0
  53. package/.output/server/node_modules/@unhead/shared/dist/index.mjs +641 -0
  54. package/.output/server/node_modules/@unhead/shared/package.json +45 -0
  55. package/.output/server/node_modules/@unhead/ssr/dist/index.mjs +95 -0
  56. package/.output/server/node_modules/@unhead/ssr/package.json +40 -0
  57. package/.output/server/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js +6690 -0
  58. package/.output/server/node_modules/@vue/compiler-core/package.json +58 -0
  59. package/.output/server/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js +686 -0
  60. package/.output/server/node_modules/@vue/compiler-dom/package.json +57 -0
  61. package/.output/server/node_modules/@vue/compiler-ssr/dist/compiler-ssr.cjs.js +1404 -0
  62. package/.output/server/node_modules/@vue/compiler-ssr/package.json +34 -0
  63. package/.output/server/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js +1789 -0
  64. package/.output/server/node_modules/@vue/reactivity/package.json +55 -0
  65. package/.output/server/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js +6654 -0
  66. package/.output/server/node_modules/@vue/runtime-core/package.json +52 -0
  67. package/.output/server/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js +1669 -0
  68. package/.output/server/node_modules/@vue/runtime-dom/package.json +60 -0
  69. package/.output/server/node_modules/@vue/server-renderer/dist/server-renderer.cjs.prod.js +857 -0
  70. package/.output/server/node_modules/@vue/server-renderer/package.json +55 -0
  71. package/.output/server/node_modules/@vue/shared/dist/shared.cjs.prod.js +594 -0
  72. package/.output/server/node_modules/@vue/shared/package.json +47 -0
  73. package/.output/server/node_modules/devalue/index.js +3 -0
  74. package/.output/server/node_modules/devalue/package.json +34 -0
  75. package/.output/server/node_modules/devalue/src/base64.js +110 -0
  76. package/.output/server/node_modules/devalue/src/constants.js +6 -0
  77. package/.output/server/node_modules/devalue/src/parse.js +160 -0
  78. package/.output/server/node_modules/devalue/src/stringify.js +232 -0
  79. package/.output/server/node_modules/devalue/src/uneval.js +351 -0
  80. package/.output/server/node_modules/devalue/src/utils.js +113 -0
  81. package/.output/server/node_modules/entities/lib/decode.js +536 -0
  82. package/.output/server/node_modules/entities/lib/decode_codepoint.js +76 -0
  83. package/.output/server/node_modules/entities/lib/generated/decode-data-html.js +9 -0
  84. package/.output/server/node_modules/entities/lib/generated/decode-data-xml.js +9 -0
  85. package/.output/server/node_modules/entities/package.json +90 -0
  86. package/.output/server/node_modules/estree-walker/dist/umd/estree-walker.js +344 -0
  87. package/.output/server/node_modules/estree-walker/package.json +37 -0
  88. package/.output/server/node_modules/hookable/dist/index.mjs +290 -0
  89. package/.output/server/node_modules/hookable/package.json +49 -0
  90. package/.output/server/node_modules/packrup/dist/index.mjs +108 -0
  91. package/.output/server/node_modules/packrup/package.json +58 -0
  92. package/.output/server/node_modules/source-map-js/lib/array-set.js +121 -0
  93. package/.output/server/node_modules/source-map-js/lib/base64-vlq.js +140 -0
  94. package/.output/server/node_modules/source-map-js/lib/base64.js +67 -0
  95. package/.output/server/node_modules/source-map-js/lib/binary-search.js +111 -0
  96. package/.output/server/node_modules/source-map-js/lib/mapping-list.js +79 -0
  97. package/.output/server/node_modules/source-map-js/lib/quick-sort.js +132 -0
  98. package/.output/server/node_modules/source-map-js/lib/source-map-consumer.js +1188 -0
  99. package/.output/server/node_modules/source-map-js/lib/source-map-generator.js +444 -0
  100. package/.output/server/node_modules/source-map-js/lib/source-node.js +413 -0
  101. package/.output/server/node_modules/source-map-js/lib/util.js +594 -0
  102. package/.output/server/node_modules/source-map-js/package.json +71 -0
  103. package/.output/server/node_modules/source-map-js/source-map.js +8 -0
  104. package/.output/server/node_modules/ufo/dist/index.mjs +630 -0
  105. package/.output/server/node_modules/ufo/package.json +47 -0
  106. package/.output/server/node_modules/unhead/dist/index.mjs +748 -0
  107. package/.output/server/node_modules/unhead/package.json +46 -0
  108. package/.output/server/node_modules/vue/dist/vue.cjs.js +80 -0
  109. package/.output/server/node_modules/vue/dist/vue.cjs.prod.js +66 -0
  110. package/.output/server/node_modules/vue/index.js +7 -0
  111. package/.output/server/node_modules/vue/index.mjs +1 -0
  112. package/.output/server/node_modules/vue/package.json +112 -0
  113. package/.output/server/node_modules/vue/server-renderer/index.mjs +1 -0
  114. package/.output/server/node_modules/vue-bundle-renderer/dist/runtime.mjs +196 -0
  115. package/.output/server/node_modules/vue-bundle-renderer/package.json +50 -0
  116. package/.output/server/node_modules/zod/lib/index.mjs +4382 -0
  117. package/.output/server/node_modules/zod/package.json +122 -0
  118. package/.output/server/package.json +1 -0
  119. package/package.json +4 -4
@@ -0,0 +1,3 @@
1
+ export { uneval } from './src/uneval.js';
2
+ export { parse, unflatten } from './src/parse.js';
3
+ export { stringify } from './src/stringify.js';
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "devalue",
3
+ "description": "Gets the job done when JSON.stringify can't",
4
+ "version": "5.1.1",
5
+ "repository": "Rich-Harris/devalue",
6
+ "sideEffects": false,
7
+ "exports": {
8
+ ".": {
9
+ "types": "./types/index.d.ts",
10
+ "import": "./index.js",
11
+ "default": "./index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "index.js",
16
+ "src",
17
+ "types"
18
+ ],
19
+ "types": "./types/index.d.ts",
20
+ "devDependencies": {
21
+ "dts-buddy": "^0.0.4",
22
+ "publint": "^0.1.7",
23
+ "typescript": "^3.1.3",
24
+ "uvu": "^0.5.6"
25
+ },
26
+ "scripts": {
27
+ "build": "dts-buddy",
28
+ "test": "uvu test",
29
+ "prepublishOnly": "npm test && npm run build && publint"
30
+ },
31
+ "license": "MIT",
32
+ "type": "module",
33
+ "packageManager": "pnpm@8.5.1"
34
+ }
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Base64 Encodes an arraybuffer
3
+ * @param {ArrayBuffer} arraybuffer
4
+ * @returns {string}
5
+ */
6
+ export function encode64(arraybuffer) {
7
+ const dv = new DataView(arraybuffer);
8
+ let binaryString = "";
9
+
10
+ for (let i = 0; i < arraybuffer.byteLength; i++) {
11
+ binaryString += String.fromCharCode(dv.getUint8(i));
12
+ }
13
+
14
+ return binaryToAscii(binaryString);
15
+ }
16
+
17
+ /**
18
+ * Decodes a base64 string into an arraybuffer
19
+ * @param {string} string
20
+ * @returns {ArrayBuffer}
21
+ */
22
+ export function decode64(string) {
23
+ const binaryString = asciiToBinary(string);
24
+ const arraybuffer = new ArrayBuffer(binaryString.length);
25
+ const dv = new DataView(arraybuffer);
26
+
27
+ for (let i = 0; i < arraybuffer.byteLength; i++) {
28
+ dv.setUint8(i, binaryString.charCodeAt(i));
29
+ }
30
+
31
+ return arraybuffer;
32
+ }
33
+
34
+ const KEY_STRING =
35
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
36
+
37
+ /**
38
+ * Substitute for atob since it's deprecated in node.
39
+ * Does not do any input validation.
40
+ *
41
+ * @see https://github.com/jsdom/abab/blob/master/lib/atob.js
42
+ *
43
+ * @param {string} data
44
+ * @returns {string}
45
+ */
46
+ function asciiToBinary(data) {
47
+ if (data.length % 4 === 0) {
48
+ data = data.replace(/==?$/, "");
49
+ }
50
+
51
+ let output = "";
52
+ let buffer = 0;
53
+ let accumulatedBits = 0;
54
+
55
+ for (let i = 0; i < data.length; i++) {
56
+ buffer <<= 6;
57
+ buffer |= KEY_STRING.indexOf(data[i]);
58
+ accumulatedBits += 6;
59
+ if (accumulatedBits === 24) {
60
+ output += String.fromCharCode((buffer & 0xff0000) >> 16);
61
+ output += String.fromCharCode((buffer & 0xff00) >> 8);
62
+ output += String.fromCharCode(buffer & 0xff);
63
+ buffer = accumulatedBits = 0;
64
+ }
65
+ }
66
+ if (accumulatedBits === 12) {
67
+ buffer >>= 4;
68
+ output += String.fromCharCode(buffer);
69
+ } else if (accumulatedBits === 18) {
70
+ buffer >>= 2;
71
+ output += String.fromCharCode((buffer & 0xff00) >> 8);
72
+ output += String.fromCharCode(buffer & 0xff);
73
+ }
74
+ return output;
75
+ }
76
+
77
+ /**
78
+ * Substitute for btoa since it's deprecated in node.
79
+ * Does not do any input validation.
80
+ *
81
+ * @see https://github.com/jsdom/abab/blob/master/lib/btoa.js
82
+ *
83
+ * @param {string} str
84
+ * @returns {string}
85
+ */
86
+ function binaryToAscii(str) {
87
+ let out = "";
88
+ for (let i = 0; i < str.length; i += 3) {
89
+ /** @type {[number, number, number, number]} */
90
+ const groupsOfSix = [undefined, undefined, undefined, undefined];
91
+ groupsOfSix[0] = str.charCodeAt(i) >> 2;
92
+ groupsOfSix[1] = (str.charCodeAt(i) & 0x03) << 4;
93
+ if (str.length > i + 1) {
94
+ groupsOfSix[1] |= str.charCodeAt(i + 1) >> 4;
95
+ groupsOfSix[2] = (str.charCodeAt(i + 1) & 0x0f) << 2;
96
+ }
97
+ if (str.length > i + 2) {
98
+ groupsOfSix[2] |= str.charCodeAt(i + 2) >> 6;
99
+ groupsOfSix[3] = str.charCodeAt(i + 2) & 0x3f;
100
+ }
101
+ for (let j = 0; j < groupsOfSix.length; j++) {
102
+ if (typeof groupsOfSix[j] === "undefined") {
103
+ out += "=";
104
+ } else {
105
+ out += KEY_STRING[groupsOfSix[j]];
106
+ }
107
+ }
108
+ }
109
+ return out;
110
+ }
@@ -0,0 +1,6 @@
1
+ export const UNDEFINED = -1;
2
+ export const HOLE = -2;
3
+ export const NAN = -3;
4
+ export const POSITIVE_INFINITY = -4;
5
+ export const NEGATIVE_INFINITY = -5;
6
+ export const NEGATIVE_ZERO = -6;
@@ -0,0 +1,160 @@
1
+ import { decode64 } from './base64.js';
2
+ import {
3
+ HOLE,
4
+ NAN,
5
+ NEGATIVE_INFINITY,
6
+ NEGATIVE_ZERO,
7
+ POSITIVE_INFINITY,
8
+ UNDEFINED
9
+ } from './constants.js';
10
+
11
+ /**
12
+ * Revive a value serialized with `devalue.stringify`
13
+ * @param {string} serialized
14
+ * @param {Record<string, (value: any) => any>} [revivers]
15
+ */
16
+ export function parse(serialized, revivers) {
17
+ return unflatten(JSON.parse(serialized), revivers);
18
+ }
19
+
20
+ /**
21
+ * Revive a value flattened with `devalue.stringify`
22
+ * @param {number | any[]} parsed
23
+ * @param {Record<string, (value: any) => any>} [revivers]
24
+ */
25
+ export function unflatten(parsed, revivers) {
26
+ if (typeof parsed === 'number') return hydrate(parsed, true);
27
+
28
+ if (!Array.isArray(parsed) || parsed.length === 0) {
29
+ throw new Error('Invalid input');
30
+ }
31
+
32
+ const values = /** @type {any[]} */ (parsed);
33
+
34
+ const hydrated = Array(values.length);
35
+
36
+ /**
37
+ * @param {number} index
38
+ * @returns {any}
39
+ */
40
+ function hydrate(index, standalone = false) {
41
+ if (index === UNDEFINED) return undefined;
42
+ if (index === NAN) return NaN;
43
+ if (index === POSITIVE_INFINITY) return Infinity;
44
+ if (index === NEGATIVE_INFINITY) return -Infinity;
45
+ if (index === NEGATIVE_ZERO) return -0;
46
+
47
+ if (standalone) throw new Error(`Invalid input`);
48
+
49
+ if (index in hydrated) return hydrated[index];
50
+
51
+ const value = values[index];
52
+
53
+ if (!value || typeof value !== 'object') {
54
+ hydrated[index] = value;
55
+ } else if (Array.isArray(value)) {
56
+ if (typeof value[0] === 'string') {
57
+ const type = value[0];
58
+
59
+ const reviver = revivers?.[type];
60
+ if (reviver) {
61
+ return (hydrated[index] = reviver(hydrate(value[1])));
62
+ }
63
+
64
+ switch (type) {
65
+ case 'Date':
66
+ hydrated[index] = new Date(value[1]);
67
+ break;
68
+
69
+ case 'Set':
70
+ const set = new Set();
71
+ hydrated[index] = set;
72
+ for (let i = 1; i < value.length; i += 1) {
73
+ set.add(hydrate(value[i]));
74
+ }
75
+ break;
76
+
77
+ case 'Map':
78
+ const map = new Map();
79
+ hydrated[index] = map;
80
+ for (let i = 1; i < value.length; i += 2) {
81
+ map.set(hydrate(value[i]), hydrate(value[i + 1]));
82
+ }
83
+ break;
84
+
85
+ case 'RegExp':
86
+ hydrated[index] = new RegExp(value[1], value[2]);
87
+ break;
88
+
89
+ case 'Object':
90
+ hydrated[index] = Object(value[1]);
91
+ break;
92
+
93
+ case 'BigInt':
94
+ hydrated[index] = BigInt(value[1]);
95
+ break;
96
+
97
+ case 'null':
98
+ const obj = Object.create(null);
99
+ hydrated[index] = obj;
100
+ for (let i = 1; i < value.length; i += 2) {
101
+ obj[value[i]] = hydrate(value[i + 1]);
102
+ }
103
+ break;
104
+
105
+ case "Int8Array":
106
+ case "Uint8Array":
107
+ case "Uint8ClampedArray":
108
+ case "Int16Array":
109
+ case "Uint16Array":
110
+ case "Int32Array":
111
+ case "Uint32Array":
112
+ case "Float32Array":
113
+ case "Float64Array":
114
+ case "BigInt64Array":
115
+ case "BigUint64Array": {
116
+ const TypedArrayConstructor = globalThis[type];
117
+ const base64 = value[1];
118
+ const arraybuffer = decode64(base64);
119
+ const typedArray = new TypedArrayConstructor(arraybuffer);
120
+ hydrated[index] = typedArray;
121
+ break;
122
+ }
123
+
124
+ case "ArrayBuffer": {
125
+ const base64 = value[1];
126
+ const arraybuffer = decode64(base64);
127
+ hydrated[index] = arraybuffer;
128
+ break;
129
+ }
130
+
131
+ default:
132
+ throw new Error(`Unknown type ${type}`);
133
+ }
134
+ } else {
135
+ const array = new Array(value.length);
136
+ hydrated[index] = array;
137
+
138
+ for (let i = 0; i < value.length; i += 1) {
139
+ const n = value[i];
140
+ if (n === HOLE) continue;
141
+
142
+ array[i] = hydrate(n);
143
+ }
144
+ }
145
+ } else {
146
+ /** @type {Record<string, any>} */
147
+ const object = {};
148
+ hydrated[index] = object;
149
+
150
+ for (const key in value) {
151
+ const n = value[key];
152
+ object[key] = hydrate(n);
153
+ }
154
+ }
155
+
156
+ return hydrated[index];
157
+ }
158
+
159
+ return hydrate(0);
160
+ }
@@ -0,0 +1,232 @@
1
+ import {
2
+ DevalueError,
3
+ enumerable_symbols,
4
+ get_type,
5
+ is_plain_object,
6
+ is_primitive,
7
+ stringify_key,
8
+ stringify_string
9
+ } from './utils.js';
10
+ import {
11
+ HOLE,
12
+ NAN,
13
+ NEGATIVE_INFINITY,
14
+ NEGATIVE_ZERO,
15
+ POSITIVE_INFINITY,
16
+ UNDEFINED
17
+ } from './constants.js';
18
+ import { encode64 } from './base64.js';
19
+
20
+ /**
21
+ * Turn a value into a JSON string that can be parsed with `devalue.parse`
22
+ * @param {any} value
23
+ * @param {Record<string, (value: any) => any>} [reducers]
24
+ */
25
+ export function stringify(value, reducers) {
26
+ /** @type {any[]} */
27
+ const stringified = [];
28
+
29
+ /** @type {Map<any, number>} */
30
+ const indexes = new Map();
31
+
32
+ /** @type {Array<{ key: string, fn: (value: any) => any }>} */
33
+ const custom = [];
34
+ if (reducers) {
35
+ for (const key of Object.getOwnPropertyNames(reducers)) {
36
+ custom.push({ key, fn: reducers[key] });
37
+ }
38
+ }
39
+
40
+ /** @type {string[]} */
41
+ const keys = [];
42
+
43
+ let p = 0;
44
+
45
+ /** @param {any} thing */
46
+ function flatten(thing) {
47
+ if (typeof thing === 'function') {
48
+ throw new DevalueError(`Cannot stringify a function`, keys);
49
+ }
50
+
51
+ if (indexes.has(thing)) return indexes.get(thing);
52
+
53
+ if (thing === undefined) return UNDEFINED;
54
+ if (Number.isNaN(thing)) return NAN;
55
+ if (thing === Infinity) return POSITIVE_INFINITY;
56
+ if (thing === -Infinity) return NEGATIVE_INFINITY;
57
+ if (thing === 0 && 1 / thing < 0) return NEGATIVE_ZERO;
58
+
59
+ const index = p++;
60
+ indexes.set(thing, index);
61
+
62
+ for (const { key, fn } of custom) {
63
+ const value = fn(thing);
64
+ if (value) {
65
+ stringified[index] = `["${key}",${flatten(value)}]`;
66
+ return index;
67
+ }
68
+ }
69
+
70
+ let str = '';
71
+
72
+ if (is_primitive(thing)) {
73
+ str = stringify_primitive(thing);
74
+ } else {
75
+ const type = get_type(thing);
76
+
77
+ switch (type) {
78
+ case 'Number':
79
+ case 'String':
80
+ case 'Boolean':
81
+ str = `["Object",${stringify_primitive(thing)}]`;
82
+ break;
83
+
84
+ case 'BigInt':
85
+ str = `["BigInt",${thing}]`;
86
+ break;
87
+
88
+ case 'Date':
89
+ const valid = !isNaN(thing.getDate());
90
+ str = `["Date","${valid ? thing.toISOString() : ''}"]`;
91
+ break;
92
+
93
+ case 'RegExp':
94
+ const { source, flags } = thing;
95
+ str = flags
96
+ ? `["RegExp",${stringify_string(source)},"${flags}"]`
97
+ : `["RegExp",${stringify_string(source)}]`;
98
+ break;
99
+
100
+ case 'Array':
101
+ str = '[';
102
+
103
+ for (let i = 0; i < thing.length; i += 1) {
104
+ if (i > 0) str += ',';
105
+
106
+ if (i in thing) {
107
+ keys.push(`[${i}]`);
108
+ str += flatten(thing[i]);
109
+ keys.pop();
110
+ } else {
111
+ str += HOLE;
112
+ }
113
+ }
114
+
115
+ str += ']';
116
+
117
+ break;
118
+
119
+ case 'Set':
120
+ str = '["Set"';
121
+
122
+ for (const value of thing) {
123
+ str += `,${flatten(value)}`;
124
+ }
125
+
126
+ str += ']';
127
+ break;
128
+
129
+ case 'Map':
130
+ str = '["Map"';
131
+
132
+ for (const [key, value] of thing) {
133
+ keys.push(
134
+ `.get(${is_primitive(key) ? stringify_primitive(key) : '...'})`
135
+ );
136
+ str += `,${flatten(key)},${flatten(value)}`;
137
+ keys.pop();
138
+ }
139
+
140
+ str += ']';
141
+ break;
142
+
143
+ case "Int8Array":
144
+ case "Uint8Array":
145
+ case "Uint8ClampedArray":
146
+ case "Int16Array":
147
+ case "Uint16Array":
148
+ case "Int32Array":
149
+ case "Uint32Array":
150
+ case "Float32Array":
151
+ case "Float64Array":
152
+ case "BigInt64Array":
153
+ case "BigUint64Array": {
154
+ /** @type {import("./types.js").TypedArray} */
155
+ const typedArray = thing;
156
+ const base64 = encode64(typedArray.buffer);
157
+ str = '["' + type + '","' + base64 + '"]';
158
+ break;
159
+ }
160
+
161
+ case "ArrayBuffer": {
162
+ /** @type {ArrayBuffer} */
163
+ const arraybuffer = thing;
164
+ const base64 = encode64(arraybuffer);
165
+
166
+ str = `["ArrayBuffer","${base64}"]`;
167
+ break;
168
+ }
169
+
170
+ default:
171
+ if (!is_plain_object(thing)) {
172
+ throw new DevalueError(
173
+ `Cannot stringify arbitrary non-POJOs`,
174
+ keys
175
+ );
176
+ }
177
+
178
+ if (enumerable_symbols(thing).length > 0) {
179
+ throw new DevalueError(
180
+ `Cannot stringify POJOs with symbolic keys`,
181
+ keys
182
+ );
183
+ }
184
+
185
+ if (Object.getPrototypeOf(thing) === null) {
186
+ str = '["null"';
187
+ for (const key in thing) {
188
+ keys.push(stringify_key(key));
189
+ str += `,${stringify_string(key)},${flatten(thing[key])}`;
190
+ keys.pop();
191
+ }
192
+ str += ']';
193
+ } else {
194
+ str = '{';
195
+ let started = false;
196
+ for (const key in thing) {
197
+ if (started) str += ',';
198
+ started = true;
199
+ keys.push(stringify_key(key));
200
+ str += `${stringify_string(key)}:${flatten(thing[key])}`;
201
+ keys.pop();
202
+ }
203
+ str += '}';
204
+ }
205
+ }
206
+ }
207
+
208
+ stringified[index] = str;
209
+ return index;
210
+ }
211
+
212
+ const index = flatten(value);
213
+
214
+ // special case — value is represented as a negative index
215
+ if (index < 0) return `${index}`;
216
+
217
+ return `[${stringified.join(',')}]`;
218
+ }
219
+
220
+ /**
221
+ * @param {any} thing
222
+ * @returns {string}
223
+ */
224
+ function stringify_primitive(thing) {
225
+ const type = typeof thing;
226
+ if (type === 'string') return stringify_string(thing);
227
+ if (thing instanceof String) return stringify_string(thing.toString());
228
+ if (thing === void 0) return UNDEFINED.toString();
229
+ if (thing === 0 && 1 / thing < 0) return NEGATIVE_ZERO.toString();
230
+ if (type === 'bigint') return `["BigInt","${thing}"]`;
231
+ return String(thing);
232
+ }