UNPKG

3.24 kBJavaScriptView Raw
1'use strict';
2
3var map = require('./common/map.js');
4var _null = require('./common/null.js');
5var seq = require('./common/seq.js');
6var string = require('./common/string.js');
7var bool = require('./core/bool.js');
8var float = require('./core/float.js');
9var int = require('./core/int.js');
10var schema = require('./core/schema.js');
11var schema$1 = require('./json/schema.js');
12var binary = require('./yaml-1.1/binary.js');
13var merge = require('./yaml-1.1/merge.js');
14var omap = require('./yaml-1.1/omap.js');
15var pairs = require('./yaml-1.1/pairs.js');
16var schema$2 = require('./yaml-1.1/schema.js');
17var set = require('./yaml-1.1/set.js');
18var timestamp = require('./yaml-1.1/timestamp.js');
19
20const schemas = new Map([
21 ['core', schema.schema],
22 ['failsafe', [map.map, seq.seq, string.string]],
23 ['json', schema$1.schema],
24 ['yaml11', schema$2.schema],
25 ['yaml-1.1', schema$2.schema]
26]);
27const tagsByName = {
28 binary: binary.binary,
29 bool: bool.boolTag,
30 float: float.float,
31 floatExp: float.floatExp,
32 floatNaN: float.floatNaN,
33 floatTime: timestamp.floatTime,
34 int: int.int,
35 intHex: int.intHex,
36 intOct: int.intOct,
37 intTime: timestamp.intTime,
38 map: map.map,
39 merge: merge.merge,
40 null: _null.nullTag,
41 omap: omap.omap,
42 pairs: pairs.pairs,
43 seq: seq.seq,
44 set: set.set,
45 timestamp: timestamp.timestamp
46};
47const coreKnownTags = {
48 'tag:yaml.org,2002:binary': binary.binary,
49 'tag:yaml.org,2002:merge': merge.merge,
50 'tag:yaml.org,2002:omap': omap.omap,
51 'tag:yaml.org,2002:pairs': pairs.pairs,
52 'tag:yaml.org,2002:set': set.set,
53 'tag:yaml.org,2002:timestamp': timestamp.timestamp
54};
55function getTags(customTags, schemaName, addMergeTag) {
56 const schemaTags = schemas.get(schemaName);
57 if (schemaTags && !customTags) {
58 return addMergeTag && !schemaTags.includes(merge.merge)
59 ? schemaTags.concat(merge.merge)
60 : schemaTags.slice();
61 }
62 let tags = schemaTags;
63 if (!tags) {
64 if (Array.isArray(customTags))
65 tags = [];
66 else {
67 const keys = Array.from(schemas.keys())
68 .filter(key => key !== 'yaml11')
69 .map(key => JSON.stringify(key))
70 .join(', ');
71 throw new Error(`Unknown schema "${schemaName}"; use one of ${keys} or define customTags array`);
72 }
73 }
74 if (Array.isArray(customTags)) {
75 for (const tag of customTags)
76 tags = tags.concat(tag);
77 }
78 else if (typeof customTags === 'function') {
79 tags = customTags(tags.slice());
80 }
81 if (addMergeTag)
82 tags = tags.concat(merge.merge);
83 return tags.reduce((tags, tag) => {
84 const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;
85 if (!tagObj) {
86 const tagName = JSON.stringify(tag);
87 const keys = Object.keys(tagsByName)
88 .map(key => JSON.stringify(key))
89 .join(', ');
90 throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);
91 }
92 if (!tags.includes(tagObj))
93 tags.push(tagObj);
94 return tags;
95 }, []);
96}
97
98exports.coreKnownTags = coreKnownTags;
99exports.getTags = getTags;