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.
48 lines
1.8 KiB
48 lines
1.8 KiB
const ALIAS = Symbol.for('yaml.alias'); |
|
const DOC = Symbol.for('yaml.document'); |
|
const MAP = Symbol.for('yaml.map'); |
|
const PAIR = Symbol.for('yaml.pair'); |
|
const SCALAR = Symbol.for('yaml.scalar'); |
|
const SEQ = Symbol.for('yaml.seq'); |
|
const NODE_TYPE = Symbol.for('yaml.node.type'); |
|
const isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS; |
|
const isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC; |
|
const isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP; |
|
const isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR; |
|
const isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR; |
|
const isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ; |
|
function isCollection(node) { |
|
if (node && typeof node === 'object') |
|
switch (node[NODE_TYPE]) { |
|
case MAP: |
|
case SEQ: |
|
return true; |
|
} |
|
return false; |
|
} |
|
function isNode(node) { |
|
if (node && typeof node === 'object') |
|
switch (node[NODE_TYPE]) { |
|
case ALIAS: |
|
case MAP: |
|
case SCALAR: |
|
case SEQ: |
|
return true; |
|
} |
|
return false; |
|
} |
|
const hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor; |
|
class NodeBase { |
|
constructor(type) { |
|
Object.defineProperty(this, NODE_TYPE, { value: type }); |
|
} |
|
/** Create a copy of this node. */ |
|
clone() { |
|
const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this)); |
|
if (this.range) |
|
copy.range = this.range.slice(); |
|
return copy; |
|
} |
|
} |
|
|
|
export { ALIAS, DOC, MAP, NODE_TYPE, NodeBase, PAIR, SCALAR, SEQ, hasAnchor, isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq };
|
|
|