UNPKG

yaml

Version:

JavaScript parser and stringifier for YAML

100 lines (96 loc) 3.24 kB
'use strict'; var map = require('./common/map.js'); var _null = require('./common/null.js'); var seq = require('./common/seq.js'); var string = require('./common/string.js'); var bool = require('./core/bool.js'); var float = require('./core/float.js'); var int = require('./core/int.js'); var schema = require('./core/schema.js'); var schema$1 = require('./json/schema.js'); var binary = require('./yaml-1.1/binary.js'); var merge = require('./yaml-1.1/merge.js'); var omap = require('./yaml-1.1/omap.js'); var pairs = require('./yaml-1.1/pairs.js'); var schema$2 = require('./yaml-1.1/schema.js'); var set = require('./yaml-1.1/set.js'); var timestamp = require('./yaml-1.1/timestamp.js'); const schemas = new Map([ ['core', schema.schema], ['failsafe', [map.map, seq.seq, string.string]], ['json', schema$1.schema], ['yaml11', schema$2.schema], ['yaml-1.1', schema$2.schema] ]); const tagsByName = { binary: binary.binary, bool: bool.boolTag, float: float.float, floatExp: float.floatExp, floatNaN: float.floatNaN, floatTime: timestamp.floatTime, int: int.int, intHex: int.intHex, intOct: int.intOct, intTime: timestamp.intTime, map: map.map, merge: merge.merge, null: _null.nullTag, omap: omap.omap, pairs: pairs.pairs, seq: seq.seq, set: set.set, timestamp: timestamp.timestamp }; const coreKnownTags = { 'tag:yaml.org,2002:binary': binary.binary, 'tag:yaml.org,2002:merge': merge.merge, 'tag:yaml.org,2002:omap': omap.omap, 'tag:yaml.org,2002:pairs': pairs.pairs, 'tag:yaml.org,2002:set': set.set, 'tag:yaml.org,2002:timestamp': timestamp.timestamp }; function getTags(customTags, schemaName, addMergeTag) { const schemaTags = schemas.get(schemaName); if (schemaTags && !customTags) { return addMergeTag && !schemaTags.includes(merge.merge) ? schemaTags.concat(merge.merge) : schemaTags.slice(); } let tags = schemaTags; if (!tags) { if (Array.isArray(customTags)) tags = []; else { const keys = Array.from(schemas.keys()) .filter(key => key !== 'yaml11') .map(key => JSON.stringify(key)) .join(', '); throw new Error(`Unknown schema "${schemaName}"; use one of ${keys} or define customTags array`); } } if (Array.isArray(customTags)) { for (const tag of customTags) tags = tags.concat(tag); } else if (typeof customTags === 'function') { tags = customTags(tags.slice()); } if (addMergeTag) tags = tags.concat(merge.merge); return tags.reduce((tags, tag) => { const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag; if (!tagObj) { const tagName = JSON.stringify(tag); const keys = Object.keys(tagsByName) .map(key => JSON.stringify(key)) .join(', '); throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`); } if (!tags.includes(tagObj)) tags.push(tagObj); return tags; }, []); } exports.coreKnownTags = coreKnownTags; exports.getTags = getTags;