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.
		
		
		
		
		
			
		
			
				
					
					
						
							36 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
	
	
							36 lines
						
					
					
						
							1.1 KiB
						
					
					
				import { createNode } from '../doc/createNode.js'; | 
						|
import { stringifyPair } from '../stringify/stringifyPair.js'; | 
						|
import { addPairToJSMap } from './addPairToJSMap.js'; | 
						|
import { NODE_TYPE, PAIR, isNode } from './Node.js'; | 
						|
 | 
						|
function createPair(key, value, ctx) { | 
						|
    const k = createNode(key, undefined, ctx); | 
						|
    const v = createNode(value, undefined, ctx); | 
						|
    return new Pair(k, v); | 
						|
} | 
						|
class Pair { | 
						|
    constructor(key, value = null) { | 
						|
        Object.defineProperty(this, NODE_TYPE, { value: PAIR }); | 
						|
        this.key = key; | 
						|
        this.value = value; | 
						|
    } | 
						|
    clone(schema) { | 
						|
        let { key, value } = this; | 
						|
        if (isNode(key)) | 
						|
            key = key.clone(schema); | 
						|
        if (isNode(value)) | 
						|
            value = value.clone(schema); | 
						|
        return new Pair(key, value); | 
						|
    } | 
						|
    toJSON(_, ctx) { | 
						|
        const pair = ctx?.mapAsMap ? new Map() : {}; | 
						|
        return addPairToJSMap(ctx, pair, this); | 
						|
    } | 
						|
    toString(ctx, onComment, onChompKeep) { | 
						|
        return ctx?.doc | 
						|
            ? stringifyPair(this, ctx, onComment, onChompKeep) | 
						|
            : JSON.stringify(this); | 
						|
    } | 
						|
} | 
						|
 | 
						|
export { Pair, createPair };
 | 
						|
 |