| ; | |
| var log = require('../log.js'); | |
| var merge = require('../schema/yaml-1.1/merge.js'); | |
| var stringify = require('../stringify/stringify.js'); | |
| var identity = require('./identity.js'); | |
| var toJS = require('./toJS.js'); | |
| function addPairToJSMap(ctx, map, { key, value }) { | |
| if (identity.isNode(key) && key.addToJSMap) | |
| key.addToJSMap(ctx, map, value); | |
| // TODO: Should drop this special case for bare << handling | |
| else if (merge.isMergeKey(ctx, key)) | |
| merge.addMergeToJSMap(ctx, map, value); | |
| else { | |
| const jsKey = toJS.toJS(key, '', ctx); | |
| if (map instanceof Map) { | |
| map.set(jsKey, toJS.toJS(value, jsKey, ctx)); | |
| } | |
| else if (map instanceof Set) { | |
| map.add(jsKey); | |
| } | |
| else { | |
| const stringKey = stringifyKey(key, jsKey, ctx); | |
| const jsValue = toJS.toJS(value, stringKey, ctx); | |
| if (stringKey in map) | |
| Object.defineProperty(map, stringKey, { | |
| value: jsValue, | |
| writable: true, | |
| enumerable: true, | |
| configurable: true | |
| }); | |
| else | |
| map[stringKey] = jsValue; | |
| } | |
| } | |
| return map; | |
| } | |
| function stringifyKey(key, jsKey, ctx) { | |
| if (jsKey === null) | |
| return ''; | |
| // eslint-disable-next-line @typescript-eslint/no-base-to-string | |
| if (typeof jsKey !== 'object') | |
| return String(jsKey); | |
| if (identity.isNode(key) && ctx?.doc) { | |
| const strCtx = stringify.createStringifyContext(ctx.doc, {}); | |
| strCtx.anchors = new Set(); | |
| for (const node of ctx.anchors.keys()) | |
| strCtx.anchors.add(node.anchor); | |
| strCtx.inFlow = true; | |
| strCtx.inStringifyKey = true; | |
| const strKey = key.toString(strCtx); | |
| if (!ctx.mapKeyWarned) { | |
| let jsonStr = JSON.stringify(strKey); | |
| if (jsonStr.length > 40) | |
| jsonStr = jsonStr.substring(0, 36) + '..."'; | |
| log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`); | |
| ctx.mapKeyWarned = true; | |
| } | |
| return strKey; | |
| } | |
| return JSON.stringify(jsKey); | |
| } | |
| exports.addPairToJSMap = addPairToJSMap; | |
Xet Storage Details
- Size:
- 2.34 kB
- Xet hash:
- a8e1ddcaa1d61c4fd345670f50cb49e18b7b579cd710d68d323a813bb5188e2a
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.