@mirascript/mirascript 0.1.92 → 0.1.93

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 (142) hide show
  1. package/dist/chunk-7JTZW66P.js +1075 -0
  2. package/dist/chunk-7JTZW66P.js.map +6 -0
  3. package/dist/{chunk-Y7S6AHE7.js → chunk-F3FHURMG.js} +55 -939
  4. package/dist/chunk-F3FHURMG.js.map +6 -0
  5. package/dist/{chunk-HHKY7Y7L.js → chunk-GTNLLZL4.js} +4 -82
  6. package/dist/chunk-GTNLLZL4.js.map +6 -0
  7. package/dist/chunk-H2OHULLB.js +89 -0
  8. package/dist/chunk-H2OHULLB.js.map +6 -0
  9. package/dist/compiler/worker.js +2 -1
  10. package/dist/compiler/worker.js.map +1 -1
  11. package/dist/experimental-context.d.ts +93 -0
  12. package/dist/experimental-context.d.ts.map +1 -0
  13. package/dist/experimental-context.js +90 -0
  14. package/dist/experimental-context.js.map +6 -0
  15. package/dist/helpers/convert/string.d.ts +0 -2
  16. package/dist/helpers/convert/string.d.ts.map +1 -1
  17. package/dist/helpers/error.d.ts.map +1 -1
  18. package/dist/helpers/serialize/display.d.ts +29 -0
  19. package/dist/helpers/serialize/display.d.ts.map +1 -0
  20. package/dist/helpers/serialize/index.d.ts +5 -0
  21. package/dist/helpers/serialize/index.d.ts.map +1 -0
  22. package/dist/helpers/serialize/interface.d.ts +33 -0
  23. package/dist/helpers/serialize/interface.d.ts.map +1 -0
  24. package/dist/helpers/serialize/serialize.d.ts +39 -0
  25. package/dist/helpers/serialize/serialize.d.ts.map +1 -0
  26. package/dist/helpers/serialize/simple.d.ts +9 -0
  27. package/dist/helpers/serialize/simple.d.ts.map +1 -0
  28. package/dist/helpers/serialize/string.d.ts +6 -0
  29. package/dist/helpers/serialize/string.d.ts.map +1 -0
  30. package/dist/helpers/utils.d.ts +4 -0
  31. package/dist/helpers/utils.d.ts.map +1 -1
  32. package/dist/index.d.ts +1 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +12 -8
  35. package/dist/index.js.map +1 -1
  36. package/dist/subtle.d.ts +1 -1
  37. package/dist/subtle.d.ts.map +1 -1
  38. package/dist/subtle.js +9 -6
  39. package/dist/subtle.js.map +1 -1
  40. package/dist/vm/effects/run.d.ts +7 -0
  41. package/dist/vm/effects/run.d.ts.map +1 -0
  42. package/dist/vm/effects/state.d.ts +62 -0
  43. package/dist/vm/effects/state.d.ts.map +1 -0
  44. package/dist/vm/effects/wrap.d.ts +4 -0
  45. package/dist/vm/effects/wrap.d.ts.map +1 -0
  46. package/dist/vm/lib/global/bit.d.ts +7 -7
  47. package/dist/vm/lib/global/bit.d.ts.map +1 -1
  48. package/dist/vm/lib/global/debug.d.ts +1 -1
  49. package/dist/vm/lib/global/debug.d.ts.map +1 -1
  50. package/dist/vm/lib/global/json.d.ts +2 -2
  51. package/dist/vm/lib/global/json.d.ts.map +1 -1
  52. package/dist/vm/lib/global/math/index.d.ts +2 -2
  53. package/dist/vm/lib/global/math/index.d.ts.map +1 -1
  54. package/dist/vm/lib/global/math/tgamma.d.ts +2 -2
  55. package/dist/vm/lib/global/math/tgamma.d.ts.map +1 -1
  56. package/dist/vm/lib/global/sequence/all-any.d.ts +2 -2
  57. package/dist/vm/lib/global/sequence/all-any.d.ts.map +1 -1
  58. package/dist/vm/lib/global/sequence/entries.d.ts +3 -3
  59. package/dist/vm/lib/global/sequence/entries.d.ts.map +1 -1
  60. package/dist/vm/lib/global/sequence/find.d.ts +1 -1
  61. package/dist/vm/lib/global/sequence/flatten.d.ts +1 -1
  62. package/dist/vm/lib/global/sequence/flatten.d.ts.map +1 -1
  63. package/dist/vm/lib/global/sequence/fold.d.ts +1 -1
  64. package/dist/vm/lib/global/sequence/fold.d.ts.map +1 -1
  65. package/dist/vm/lib/global/sequence/group.d.ts +1 -1
  66. package/dist/vm/lib/global/sequence/group.d.ts.map +1 -1
  67. package/dist/vm/lib/global/sequence/len.d.ts +1 -1
  68. package/dist/vm/lib/global/sequence/len.d.ts.map +1 -1
  69. package/dist/vm/lib/global/sequence/map-filter.d.ts +3 -3
  70. package/dist/vm/lib/global/sequence/map-filter.d.ts.map +1 -1
  71. package/dist/vm/lib/global/sequence/new.d.ts +2 -2
  72. package/dist/vm/lib/global/sequence/new.d.ts.map +1 -1
  73. package/dist/vm/lib/global/sequence/repeat.d.ts +1 -1
  74. package/dist/vm/lib/global/sequence/repeat.d.ts.map +1 -1
  75. package/dist/vm/lib/global/sequence/reverse.d.ts +1 -1
  76. package/dist/vm/lib/global/sequence/reverse.d.ts.map +1 -1
  77. package/dist/vm/lib/global/sequence/sort.d.ts +2 -2
  78. package/dist/vm/lib/global/sequence/sort.d.ts.map +1 -1
  79. package/dist/vm/lib/global/sequence/unique.d.ts +2 -2
  80. package/dist/vm/lib/global/sequence/unique.d.ts.map +1 -1
  81. package/dist/vm/lib/global/sequence/with.d.ts +1 -1
  82. package/dist/vm/lib/global/sequence/with.d.ts.map +1 -1
  83. package/dist/vm/lib/global/sequence/zip.d.ts +1 -1
  84. package/dist/vm/lib/global/sequence/zip.d.ts.map +1 -1
  85. package/dist/vm/lib/global/string/case.d.ts +2 -2
  86. package/dist/vm/lib/global/string/case.d.ts.map +1 -1
  87. package/dist/vm/lib/global/string/index.d.ts +4 -4
  88. package/dist/vm/lib/global/string/index.d.ts.map +1 -1
  89. package/dist/vm/lib/global/string/search.d.ts +3 -3
  90. package/dist/vm/lib/global/string/search.d.ts.map +1 -1
  91. package/dist/vm/lib/global/string/trim.d.ts +3 -3
  92. package/dist/vm/lib/global/string/trim.d.ts.map +1 -1
  93. package/dist/vm/lib/global/time.d.ts +3 -3
  94. package/dist/vm/lib/global/time.d.ts.map +1 -1
  95. package/dist/vm/lib/global/to-primitive.d.ts +3 -3
  96. package/dist/vm/lib/global/to-primitive.d.ts.map +1 -1
  97. package/dist/vm/lib/mod/matrix/bin-ops.d.ts +6 -6
  98. package/dist/vm/lib/mod/matrix/bin-ops.d.ts.map +1 -1
  99. package/dist/vm/lib/mod/matrix/fill.d.ts +4 -4
  100. package/dist/vm/lib/mod/matrix/fill.d.ts.map +1 -1
  101. package/dist/vm/lib/mod/matrix/invert.d.ts +1 -1
  102. package/dist/vm/lib/mod/matrix/invert.d.ts.map +1 -1
  103. package/dist/vm/lib/mod/matrix/size.d.ts +1 -1
  104. package/dist/vm/lib/mod/matrix/size.d.ts.map +1 -1
  105. package/dist/vm/lib/mod/matrix/transpose.d.ts +1 -1
  106. package/dist/vm/lib/mod/matrix/transpose.d.ts.map +1 -1
  107. package/dist/vm/types/function.d.ts +4 -2
  108. package/dist/vm/types/function.d.ts.map +1 -1
  109. package/package.json +8 -4
  110. package/src/experimental-context.ts +121 -0
  111. package/src/helpers/convert/boolean.ts +1 -1
  112. package/src/helpers/convert/number.ts +1 -1
  113. package/src/helpers/convert/string.ts +6 -11
  114. package/src/helpers/error.ts +2 -0
  115. package/src/helpers/serialize/display.ts +60 -0
  116. package/src/helpers/serialize/index.ts +4 -0
  117. package/src/helpers/serialize/interface.ts +33 -0
  118. package/src/helpers/serialize/serialize.ts +200 -0
  119. package/src/helpers/serialize/simple.ts +25 -0
  120. package/src/helpers/serialize/string.ts +91 -0
  121. package/src/helpers/utils.ts +11 -2
  122. package/src/index.ts +1 -1
  123. package/src/subtle.ts +2 -2
  124. package/src/vm/effects/run.ts +80 -0
  125. package/src/vm/effects/state.ts +108 -0
  126. package/src/vm/effects/wrap.ts +71 -0
  127. package/src/vm/lib/global/debug.ts +6 -3
  128. package/src/vm/lib/global/math/index.ts +9 -5
  129. package/src/vm/lib/global/sequence/zip.ts +1 -1
  130. package/src/vm/lib/global/time.ts +5 -2
  131. package/src/vm/lib/helpers.ts +1 -1
  132. package/src/vm/operations/call.ts +1 -1
  133. package/src/vm/operations/compound.ts +1 -1
  134. package/src/vm/operations/iterable.ts +1 -1
  135. package/src/vm/operations/slice.ts +1 -1
  136. package/src/vm/operations/spread.ts +1 -1
  137. package/src/vm/types/function.ts +7 -5
  138. package/dist/chunk-HHKY7Y7L.js.map +0 -6
  139. package/dist/chunk-Y7S6AHE7.js.map +0 -6
  140. package/dist/helpers/serialize.d.ts +0 -63
  141. package/dist/helpers/serialize.d.ts.map +0 -1
  142. package/src/helpers/serialize.ts +0 -397
@@ -1,397 +0,0 @@
1
- import { REG_IDENTIFIER_FULL, REG_ORDINAL_FULL } from '@mirascript/constants';
2
- import type { VmArray, VmExtern, VmFunction, VmModule, VmAny, VmRecord } from '../vm/index.js';
3
- import { entries, hasOwn } from '../helpers/utils.js';
4
- import {
5
- getVmFunctionInfo,
6
- isVmArray,
7
- isVmArrayLikeRecordByEntries,
8
- isVmExtern,
9
- isVmFunction,
10
- isVmModule,
11
- isVmRecord,
12
- } from './types/index.js';
13
- import { numberToString } from './convert/string.js';
14
-
15
- /** 序列化 nil 值 */
16
- export function serializeNil(): string {
17
- return 'nil';
18
- }
19
-
20
- /** 序列化布尔值 */
21
- export function serializeBoolean(value: boolean): string {
22
- return value ? 'true' : 'false';
23
- }
24
-
25
- /** 序列化数字 */
26
- export function serializeNumber(value: number): string {
27
- return numberToString(value, true);
28
- }
29
-
30
- /**
31
- * 将 MiraScript 转义字符串序列化为 MiraScript 字面量。
32
- */
33
- function serializeStringEscaped(escaped: string, options: Readonly<SerializeOptions>): string {
34
- return options.serializeStringEscape('\\' + escaped, options);
35
- }
36
-
37
- /**
38
- * 将 MiraScript 普通字符串序列化为 MiraScript 字面量。
39
- */
40
- function serializeStringContent(value: string, options: Readonly<SerializeOptions>): string {
41
- return options.serializeStringContent(value, options);
42
- }
43
-
44
- const STRING_QUOTE = `'`;
45
- const STRING_REG = new RegExp(String.raw`[${STRING_QUOTE}\\\$\p{C}\u2028\u2029]`, 'gu');
46
- const STRING_MARK = /^[\p{M}]$/u;
47
-
48
- /**
49
- * 序列化为特殊字符
50
- */
51
- function serializeSpecialChar(char: string, options: Readonly<SerializeOptions>): string {
52
- if (char === STRING_QUOTE) {
53
- return serializeStringEscaped(STRING_QUOTE, options);
54
- } else if (char === '\0') {
55
- return serializeStringEscaped(`0`, options);
56
- } else if (char === '\n') {
57
- return serializeStringEscaped(`n`, options);
58
- } else if (char === '\r') {
59
- return serializeStringEscaped(`r`, options);
60
- } else if (char === '\t') {
61
- return serializeStringEscaped(`t`, options);
62
- } else if (char === '\b') {
63
- return serializeStringEscaped(`b`, options);
64
- } else if (char === '\f') {
65
- return serializeStringEscaped(`f`, options);
66
- } else if (char === '\v') {
67
- return serializeStringEscaped(`v`, options);
68
- } else if (char === '\\') {
69
- return serializeStringEscaped(`\\`, options);
70
- } else if (char === '$') {
71
- return serializeStringEscaped(`$`, options);
72
- } else {
73
- const code = char.codePointAt(0)!;
74
- if (code <= 0x7f) {
75
- return serializeStringEscaped(`x${code.toString(16).padStart(2, '0')}`, options);
76
- } else if (code >= 0xd800 && code <= 0xdfff) {
77
- // 无效的代理对
78
- return serializeStringContent('�', options);
79
- } else {
80
- return serializeStringEscaped(`u{${code.toString(16)}}`, options);
81
- }
82
- }
83
- }
84
-
85
- /**
86
- * 将 MiraScript 字符串序列化为 MiraScript 字面量。
87
- */
88
- function serializeStringImpl(value: string, options: Readonly<SerializeOptions>): string {
89
- const oq = options.serializeStringQuote(STRING_QUOTE, true, options);
90
- const cq = options.serializeStringQuote(STRING_QUOTE, false, options);
91
- if (value.length === 0) {
92
- return oq + cq;
93
- }
94
-
95
- let ret = oq;
96
- let lastIndex = 0;
97
-
98
- // 当开头字符是 \p{M} 时,使用转义序列化
99
- while (value.length > lastIndex) {
100
- const cp = value.codePointAt(lastIndex)!;
101
- const ch = String.fromCodePoint(cp);
102
- if (!STRING_MARK.test(ch)) break;
103
- ret += serializeStringEscaped(`u{${cp.toString(16)}}`, options);
104
- lastIndex += ch.length;
105
- }
106
-
107
- // 序列化字符串内容,遇到特殊字符时使用转义序列化
108
- STRING_REG.lastIndex = lastIndex;
109
- let match: RegExpExecArray | null;
110
- while ((match = STRING_REG.exec(value)) !== null) {
111
- ret += serializeStringContent(value.slice(lastIndex, match.index), options);
112
- lastIndex = STRING_REG.lastIndex;
113
- ret += serializeSpecialChar(match[0], options);
114
- }
115
- ret += serializeStringContent(value.slice(lastIndex), options);
116
- ret += cq;
117
- return ret;
118
- }
119
-
120
- /**
121
- * 将 MiraScript 字符串序列化为 MiraScript 字面量。
122
- */
123
- export function serializeString(value: string, options?: Partial<SerializeOptions>): string {
124
- return serializeStringImpl(value, getSerializeOptions(options));
125
- }
126
-
127
- /** 使用默认选项序列化属性名 */
128
- function serializeRecordKeyDefault(key: string): string {
129
- if (REG_ORDINAL_FULL.test(key) || REG_IDENTIFIER_FULL.test(key)) {
130
- return key;
131
- }
132
- return serializeStringImpl(key, DEFAULT_OPTIONS);
133
- }
134
-
135
- /** 序列化属性名 */
136
- function serializeRecordKeyOpt(value: string, options: Readonly<SerializeOptions>): string {
137
- if (isDefaultOptions(options)) {
138
- return serializeRecordKeyDefault(value);
139
- }
140
- if (REG_ORDINAL_FULL.test(value)) {
141
- // 合法的数字属性名
142
- return options.serializePropName(Number(value), options);
143
- }
144
- if (REG_IDENTIFIER_FULL.test(value)) {
145
- // 合法的标识符
146
- return options.serializePropName(value, options);
147
- }
148
- // 否则,序列化为字符串
149
- return options.serializeString(value, options);
150
- }
151
-
152
- /** 序列化属性名 */
153
- export function serializeRecordKey(key: string, options?: Partial<SerializeOptions>): string {
154
- if (isDefaultOptions(options)) {
155
- return serializeRecordKeyDefault(key);
156
- }
157
- return serializeRecordKeyOpt(key, getSerializeOptions(options));
158
- }
159
-
160
- /** 序列化数组 */
161
- export function serializeArray(value: VmArray, depth: number, options: Readonly<SerializeOptions>): string {
162
- if (depth > options.maxDepth) return `[]`;
163
- if (value.length === 0) return '[]';
164
- let result = '[';
165
- for (let i = 0; i < value.length; i++) {
166
- if (i > 0) result += ', ';
167
- result += serializeImpl(value[i], depth, options);
168
- }
169
- result += ']';
170
- return result;
171
- }
172
-
173
- // eslint-disable-next-line @typescript-eslint/unbound-method
174
- const { valueOf } = Object.prototype;
175
- /**
176
- * 如果值有自定义的 valueOf 方法,调用它并返回结果,否则返回 undefined。
177
- */
178
- function customValueOf(value: VmRecord): VmAny | undefined {
179
- // eslint-disable-next-line @typescript-eslint/unbound-method
180
- const thisValueOf = value.valueOf;
181
- if (typeof thisValueOf !== 'function' || thisValueOf === valueOf) {
182
- return undefined;
183
- }
184
- const customValue = thisValueOf.call(value) as VmAny | undefined;
185
- if (customValue === value) return undefined;
186
- return customValue;
187
- }
188
-
189
- /** 序列化记录 */
190
- export function serializeRecord(value: VmRecord, depth: number, options: Readonly<SerializeOptions>): string {
191
- const customValue = customValueOf(value);
192
- if (customValue !== undefined) {
193
- return serializeImpl(customValue, depth - 1, options);
194
- }
195
- if (depth > options.maxDepth) return `()`;
196
- const e = entries(value);
197
- if (e.length === 0) return '()';
198
- if (e.length === 1) {
199
- const [k, v] = e[0]!;
200
- if (k === '0') {
201
- return `(${serializeImpl(v, depth, options)},)`; // 单个元素数组
202
- }
203
- return `(${serializeRecordKeyOpt(k, options)}: ${serializeImpl(v, depth, options)})`;
204
- }
205
-
206
- const omitKey = isVmArrayLikeRecordByEntries(e);
207
- let result = '(';
208
- for (const [key, val] of e) {
209
- if (result.length > 1) result += ', ';
210
- if (omitKey) {
211
- result += serializeImpl(val, depth, options);
212
- } else {
213
- result += `${serializeRecordKeyOpt(key, options)}: ${serializeImpl(val, depth, options)}`;
214
- }
215
- }
216
- result += ')';
217
- return result;
218
- }
219
-
220
- /** 序列化 */
221
- function serializeImpl(value: VmAny | undefined, depth: number, options: Readonly<SerializeOptions>): string {
222
- if (value == null) {
223
- return options.serializeNil(options);
224
- }
225
- if (typeof value == 'boolean') {
226
- return options.serializeBoolean(value, options);
227
- }
228
- if (typeof value == 'number') {
229
- return options.serializeNumber(value, options);
230
- }
231
- if (typeof value == 'string') {
232
- return options.serializeString(value, options);
233
- }
234
- if (isVmFunction(value)) {
235
- return options.serializeFunction(value, options);
236
- }
237
- if (isVmModule(value)) {
238
- return options.serializeModule(value, depth + 1, options);
239
- }
240
- if (isVmExtern(value)) {
241
- return options.serializeExtern(value, depth + 1, options);
242
- }
243
- if (isVmArray(value)) {
244
- return options.serializeArray(value, depth + 1, options);
245
- }
246
- if (isVmRecord(value)) {
247
- return options.serializeRecord(value, depth + 1, options);
248
- }
249
- // 不支持序列化的值
250
- value satisfies never;
251
- return options.serializeNil(options);
252
- }
253
-
254
- /**
255
- * 将 MiraScript 值序列化为 MiraScript 字面量字符串,非常量值默认转换为 `nil`。
256
- */
257
- export function serialize(value: VmAny, options?: Partial<SerializeOptions>): string {
258
- return serializeImpl(value, 0, getSerializeOptions(options));
259
- }
260
-
261
- /** 将 MiraScript 函数转化为 MiraScript 字符串 */
262
- export function displayFunction(value: VmFunction): string {
263
- try {
264
- const name = getVmFunctionInfo(value)?.fullName;
265
- return name ? `<function ${name}>` : `<function>`;
266
- /* c8 ignore next 3 */
267
- } catch {
268
- return `<function>`;
269
- }
270
- }
271
-
272
- /** 将 MiraScript 模块转化为 MiraScript 字符串 */
273
- export function displayModule(value: VmModule): string {
274
- try {
275
- return value.toString(true);
276
- /* c8 ignore next 3 */
277
- } catch {
278
- return `<module>`;
279
- }
280
- }
281
-
282
- /** 将 MiraScript 外部值转化为 MiraScript 字符串 */
283
- export function displayExtern(value: VmExtern): string {
284
- try {
285
- const tag = `<extern ${value.tag}>`;
286
- const rep = value.toString(true);
287
- if (rep === tag || rep.length > 50) {
288
- return tag;
289
- }
290
- return `${tag} ${rep}`;
291
- /* c8 ignore next 3 */
292
- } catch {
293
- return `<extern>`;
294
- }
295
- }
296
-
297
- /**
298
- * 将 MiraScript 值转化为 MiraScript 字符串。
299
- */
300
- export function display(value: VmAny, options?: Partial<SerializeOptions>): string {
301
- const opt = mergeOptions(DISPLAY_OPTIONS, options);
302
- return serializeImpl(value, 0, opt);
303
- }
304
-
305
- /** 序列化设置 */
306
- export interface SerializeOptions {
307
- /** 最大递归深度,超过该深度的值将被序列化为 `nil`,默认值为 128 */
308
- maxDepth: number;
309
- /** 序列化 nil 值 */
310
- serializeNil: (options: SerializeOptions) => string;
311
- /** 序列化布尔值 */
312
- serializeBoolean: (value: boolean, options: SerializeOptions) => string;
313
- /** 序列化数字 */
314
- serializeNumber: (value: number, options: SerializeOptions) => string;
315
- /** 序列化字符串 */
316
- serializeString: (value: string, options: SerializeOptions) => string;
317
- /** 序列化字符串引号 */
318
- serializeStringQuote: (value: string, open: boolean, options: SerializeOptions) => string;
319
- /** 序列化字符串转义序列 */
320
- serializeStringEscape: (value: string, options: SerializeOptions) => string;
321
- /** 序列化字符串常规内容 */
322
- serializeStringContent: (value: string, options: SerializeOptions) => string;
323
- /** 序列化数组 */
324
- serializeArray: (value: VmArray, depth: number, options: SerializeOptions) => string;
325
- /** 序列化记录 */
326
- serializeRecord: (value: VmRecord, depth: number, options: SerializeOptions) => string;
327
- /** 序列化属性名 */
328
- serializePropName: (value: number | string, options: SerializeOptions) => string;
329
- /** 序列化函数 */
330
- serializeFunction: (value: VmFunction, options: SerializeOptions) => string;
331
- /** 序列化模块 */
332
- serializeModule: (value: VmModule, depth: number, options: SerializeOptions) => string;
333
- /** 序列化外部值 */
334
- serializeExtern: (value: VmExtern, depth: number, options: SerializeOptions) => string;
335
- }
336
-
337
- /** 是否为默认选项 */
338
- function isDefaultOptions(options: Partial<SerializeOptions> | undefined): boolean {
339
- return options == null || options === DEFAULT_OPTIONS;
340
- }
341
-
342
- /** 合并选项 */
343
- function mergeOptions(
344
- base: Readonly<SerializeOptions>,
345
- options: Partial<SerializeOptions> | null | undefined,
346
- ): Readonly<SerializeOptions> {
347
- if (options == null) return base;
348
- let opt: SerializeOptions | null = null;
349
- for (const key in options) {
350
- if (!hasOwn(options, key) || !hasOwn(base, key)) continue;
351
- const el = options[key as keyof SerializeOptions];
352
- if (el == null) continue;
353
- opt ??= { ...base };
354
- opt[key as keyof SerializeOptions] = el as never;
355
- }
356
- return opt ? Object.freeze(opt) : base;
357
- }
358
-
359
- /** 获取选项 */
360
- function getSerializeOptions(options: Partial<SerializeOptions> | undefined): Readonly<SerializeOptions> {
361
- if (isDefaultOptions(options)) return DEFAULT_OPTIONS;
362
- return mergeOptions(DEFAULT_OPTIONS, options);
363
- }
364
-
365
- const DEFAULT_OPTIONS = Object.freeze({
366
- maxDepth: 128,
367
- serializeNil,
368
- serializeBoolean,
369
- serializeNumber,
370
- serializeString: serializeStringImpl,
371
- serializeStringQuote: (value) => value,
372
- serializeStringEscape: (value) => value,
373
- serializeStringContent: (value) => value,
374
- serializeArray,
375
- serializeRecord,
376
- serializePropName: String,
377
- serializeFunction: serializeNil,
378
- serializeModule: serializeNil,
379
- serializeExtern: serializeNil,
380
- } satisfies SerializeOptions);
381
-
382
- const DISPLAY_OPTIONS = Object.freeze({
383
- maxDepth: 3,
384
- serializeNil,
385
- serializeBoolean,
386
- serializeNumber,
387
- serializeString: serializeStringImpl,
388
- serializeStringQuote: (value) => value,
389
- serializeStringEscape: (value) => value,
390
- serializeStringContent: (value) => value,
391
- serializeArray,
392
- serializeRecord,
393
- serializePropName: String,
394
- serializeFunction: displayFunction,
395
- serializeModule: displayModule,
396
- serializeExtern: displayExtern,
397
- } satisfies SerializeOptions);