| ; | |
| var identity = require('./identity.js'); | |
| /** | |
| * Recursively convert any node or its contents to native JavaScript | |
| * | |
| * @param value - The input value | |
| * @param arg - If `value` defines a `toJSON()` method, use this | |
| * as its first argument | |
| * @param ctx - Conversion context, originally set in Document#toJS(). If | |
| * `{ keep: true }` is not set, output should be suitable for JSON | |
| * stringification. | |
| */ | |
| function toJS(value, arg, ctx) { | |
| // eslint-disable-next-line @typescript-eslint/no-unsafe-return | |
| if (Array.isArray(value)) | |
| return value.map((v, i) => toJS(v, String(i), ctx)); | |
| if (value && typeof value.toJSON === 'function') { | |
| // eslint-disable-next-line @typescript-eslint/no-unsafe-call | |
| if (!ctx || !identity.hasAnchor(value)) | |
| return value.toJSON(arg, ctx); | |
| const data = { aliasCount: 0, count: 1, res: undefined }; | |
| ctx.anchors.set(value, data); | |
| ctx.onCreate = res => { | |
| data.res = res; | |
| delete ctx.onCreate; | |
| }; | |
| const res = value.toJSON(arg, ctx); | |
| if (ctx.onCreate) | |
| ctx.onCreate(res); | |
| return res; | |
| } | |
| if (typeof value === 'bigint' && !ctx?.keep) | |
| return Number(value); | |
| return value; | |
| } | |
| exports.toJS = toJS; | |
Xet Storage Details
- Size:
- 1.29 kB
- Xet hash:
- 79177a75bc1631dbeafd3396a332bcdd06484a166a1c97ecad5bb75007d627c6
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.