You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.2 KiB
39 lines
1.2 KiB
'use strict'; |
|
|
|
var createNode = require('../doc/createNode.js'); |
|
var stringifyPair = require('../stringify/stringifyPair.js'); |
|
var addPairToJSMap = require('./addPairToJSMap.js'); |
|
var Node = require('./Node.js'); |
|
|
|
function createPair(key, value, ctx) { |
|
const k = createNode.createNode(key, undefined, ctx); |
|
const v = createNode.createNode(value, undefined, ctx); |
|
return new Pair(k, v); |
|
} |
|
class Pair { |
|
constructor(key, value = null) { |
|
Object.defineProperty(this, Node.NODE_TYPE, { value: Node.PAIR }); |
|
this.key = key; |
|
this.value = value; |
|
} |
|
clone(schema) { |
|
let { key, value } = this; |
|
if (Node.isNode(key)) |
|
key = key.clone(schema); |
|
if (Node.isNode(value)) |
|
value = value.clone(schema); |
|
return new Pair(key, value); |
|
} |
|
toJSON(_, ctx) { |
|
const pair = ctx?.mapAsMap ? new Map() : {}; |
|
return addPairToJSMap.addPairToJSMap(ctx, pair, this); |
|
} |
|
toString(ctx, onComment, onChompKeep) { |
|
return ctx?.doc |
|
? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep) |
|
: JSON.stringify(this); |
|
} |
|
} |
|
|
|
exports.Pair = Pair; |
|
exports.createPair = createPair;
|
|
|