yaml 2.0.0-4 → 2.0.0-5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/browser/dist/compose/compose-collection.js +12 -9
- package/browser/dist/compose/compose-doc.js +23 -6
- package/browser/dist/compose/compose-node.js +20 -17
- package/browser/dist/compose/compose-scalar.js +20 -23
- package/browser/dist/compose/composer.js +105 -76
- package/browser/dist/compose/resolve-block-map.js +38 -29
- package/browser/dist/compose/resolve-block-scalar.js +14 -17
- package/browser/dist/compose/resolve-block-seq.js +21 -17
- package/browser/dist/compose/resolve-end.js +6 -7
- package/browser/dist/compose/resolve-flow-collection.js +153 -199
- package/browser/dist/compose/resolve-flow-scalar.js +49 -25
- package/browser/dist/compose/resolve-props.js +47 -35
- package/browser/dist/compose/util-contains-newline.js +15 -12
- package/browser/dist/doc/Document.js +50 -99
- package/browser/dist/doc/anchors.js +72 -0
- package/browser/dist/doc/createNode.js +27 -17
- package/browser/dist/errors.js +16 -12
- package/browser/dist/index.js +3 -3
- package/browser/dist/nodes/Alias.js +51 -28
- package/browser/dist/nodes/Collection.js +5 -83
- package/browser/dist/nodes/Node.js +2 -1
- package/browser/dist/nodes/Pair.js +9 -232
- package/browser/dist/nodes/YAMLMap.js +8 -4
- package/browser/dist/nodes/YAMLSeq.js +7 -4
- package/browser/dist/nodes/addPairToJSMap.js +103 -0
- package/browser/dist/nodes/toJS.js +12 -10
- package/browser/dist/options.js +0 -2
- package/browser/dist/parse/cst-scalar.js +219 -0
- package/browser/dist/parse/cst-stringify.js +61 -0
- package/browser/dist/parse/cst-visit.js +97 -0
- package/{dist/parse/tokens.js → browser/dist/parse/cst.js} +12 -7
- package/browser/dist/parse/lexer.js +99 -105
- package/browser/dist/parse/parser.js +219 -144
- package/browser/dist/public-api.js +11 -14
- package/browser/dist/schema/Schema.js +23 -0
- package/browser/dist/{tags/failsafe → schema/common}/map.js +0 -0
- package/browser/dist/schema/common/null.js +13 -0
- package/browser/dist/{tags/failsafe → schema/common}/seq.js +1 -1
- package/browser/dist/{tags/failsafe → schema/common}/string.js +0 -0
- package/browser/dist/schema/core/bool.js +19 -0
- package/browser/dist/schema/core/float.js +40 -0
- package/browser/dist/schema/core/int.js +38 -0
- package/browser/dist/schema/core/schema.js +23 -0
- package/browser/dist/{tags/json.js → schema/json/schema.js} +5 -6
- package/browser/dist/schema/tags.js +79 -0
- package/browser/dist/{tags → schema}/yaml-1.1/binary.js +0 -0
- package/browser/dist/schema/yaml-1.1/bool.js +26 -0
- package/browser/dist/schema/yaml-1.1/float.js +43 -0
- package/browser/dist/schema/yaml-1.1/int.js +71 -0
- package/browser/dist/{tags → schema}/yaml-1.1/omap.js +0 -0
- package/browser/dist/{tags → schema}/yaml-1.1/pairs.js +9 -6
- package/browser/dist/schema/yaml-1.1/schema.js +37 -0
- package/browser/dist/{tags → schema}/yaml-1.1/set.js +0 -0
- package/browser/dist/{tags → schema}/yaml-1.1/timestamp.js +0 -0
- package/browser/dist/stringify/addComment.js +1 -7
- package/browser/dist/stringify/stringify.js +8 -6
- package/browser/dist/stringify/stringifyCollection.js +108 -0
- package/browser/dist/stringify/stringifyDocument.js +61 -0
- package/browser/dist/stringify/stringifyPair.js +113 -0
- package/browser/dist/stringify/stringifyString.js +53 -52
- package/browser/dist/visit.js +20 -1
- package/dist/compose/compose-collection.d.ts +4 -4
- package/dist/compose/compose-collection.js +12 -9
- package/dist/compose/compose-doc.d.ts +4 -3
- package/dist/compose/compose-doc.js +23 -6
- package/dist/compose/compose-node.d.ts +15 -7
- package/dist/compose/compose-node.js +20 -17
- package/dist/compose/compose-scalar.d.ts +4 -3
- package/dist/compose/compose-scalar.js +19 -22
- package/dist/compose/composer.d.ts +28 -23
- package/dist/compose/composer.js +106 -77
- package/dist/compose/resolve-block-map.d.ts +4 -4
- package/dist/compose/resolve-block-map.js +38 -29
- package/dist/compose/resolve-block-scalar.d.ts +5 -3
- package/dist/compose/resolve-block-scalar.js +14 -17
- package/dist/compose/resolve-block-seq.d.ts +4 -4
- package/dist/compose/resolve-block-seq.js +21 -17
- package/dist/compose/resolve-end.d.ts +3 -2
- package/dist/compose/resolve-end.js +6 -7
- package/dist/compose/resolve-flow-collection.d.ts +4 -5
- package/dist/compose/resolve-flow-collection.js +152 -198
- package/dist/compose/resolve-flow-scalar.d.ts +5 -3
- package/dist/compose/resolve-flow-scalar.js +49 -25
- package/dist/compose/resolve-props.d.ts +17 -10
- package/dist/compose/resolve-props.js +47 -35
- package/dist/compose/util-contains-newline.d.ts +1 -1
- package/dist/compose/util-contains-newline.js +15 -12
- package/dist/compose/util-empty-scalar-position.d.ts +1 -1
- package/dist/doc/Document.d.ts +27 -15
- package/dist/doc/Document.js +48 -97
- package/dist/doc/anchors.d.ts +24 -0
- package/dist/doc/anchors.js +77 -0
- package/dist/doc/createNode.d.ts +8 -10
- package/dist/doc/createNode.js +26 -16
- package/dist/errors.d.ts +11 -8
- package/dist/errors.js +16 -12
- package/dist/index.d.ts +5 -3
- package/dist/index.js +3 -3
- package/dist/nodes/Alias.d.ts +19 -9
- package/dist/nodes/Alias.js +51 -28
- package/dist/nodes/Collection.d.ts +3 -17
- package/dist/nodes/Collection.js +4 -82
- package/dist/nodes/Node.d.ts +6 -4
- package/dist/nodes/Node.js +2 -0
- package/dist/nodes/Pair.d.ts +6 -11
- package/dist/nodes/Pair.js +8 -231
- package/dist/nodes/Scalar.d.ts +6 -3
- package/dist/nodes/YAMLMap.d.ts +3 -3
- package/dist/nodes/YAMLMap.js +8 -4
- package/dist/nodes/YAMLSeq.d.ts +3 -3
- package/dist/nodes/YAMLSeq.js +7 -4
- package/dist/nodes/addPairToJSMap.d.ts +3 -0
- package/dist/nodes/addPairToJSMap.js +105 -0
- package/dist/nodes/toJS.d.ts +4 -5
- package/dist/nodes/toJS.js +12 -10
- package/dist/options.d.ts +20 -26
- package/dist/options.js +0 -2
- package/dist/parse/cst-scalar.d.ts +58 -0
- package/dist/parse/cst-scalar.js +223 -0
- package/dist/parse/cst-stringify.d.ts +8 -0
- package/dist/parse/cst-stringify.js +63 -0
- package/dist/parse/cst-visit.d.ts +39 -0
- package/dist/parse/cst-visit.js +99 -0
- package/dist/parse/{tokens.d.ts → cst.d.ts} +23 -7
- package/{browser/dist/parse/tokens.js → dist/parse/cst.js} +27 -1
- package/dist/parse/lexer.d.ts +4 -13
- package/dist/parse/lexer.js +100 -106
- package/dist/parse/parser.d.ts +30 -24
- package/dist/parse/parser.js +221 -146
- package/dist/public-api.d.ts +7 -7
- package/dist/public-api.js +11 -14
- package/dist/{doc → schema}/Schema.d.ts +5 -3
- package/dist/schema/Schema.js +25 -0
- package/dist/{tags/failsafe → schema/common}/map.d.ts +0 -0
- package/dist/{tags/failsafe → schema/common}/map.js +0 -0
- package/dist/schema/common/null.d.ts +4 -0
- package/dist/schema/common/null.js +15 -0
- package/dist/{tags/failsafe → schema/common}/seq.d.ts +0 -0
- package/dist/{tags/failsafe → schema/common}/seq.js +1 -1
- package/dist/{tags/failsafe → schema/common}/string.d.ts +0 -0
- package/dist/{tags/failsafe → schema/common}/string.js +0 -0
- package/dist/schema/core/bool.d.ts +4 -0
- package/dist/schema/core/bool.js +21 -0
- package/dist/schema/core/float.d.ts +4 -0
- package/dist/schema/core/float.js +44 -0
- package/dist/schema/core/int.d.ts +4 -0
- package/dist/schema/core/int.js +42 -0
- package/dist/schema/core/schema.d.ts +1 -0
- package/dist/schema/core/schema.js +25 -0
- package/dist/schema/json/schema.d.ts +2 -0
- package/dist/{tags/json.js → schema/json/schema.js} +5 -6
- package/dist/schema/tags.d.ts +41 -0
- package/dist/schema/tags.js +82 -0
- package/dist/{tags → schema}/types.d.ts +3 -7
- package/dist/{tags → schema}/yaml-1.1/binary.d.ts +0 -0
- package/dist/{tags → schema}/yaml-1.1/binary.js +0 -0
- package/dist/schema/yaml-1.1/bool.d.ts +7 -0
- package/dist/schema/yaml-1.1/bool.js +29 -0
- package/dist/schema/yaml-1.1/float.d.ts +4 -0
- package/dist/schema/yaml-1.1/float.js +47 -0
- package/dist/schema/yaml-1.1/int.d.ts +5 -0
- package/dist/schema/yaml-1.1/int.js +76 -0
- package/dist/{tags → schema}/yaml-1.1/omap.d.ts +0 -0
- package/dist/{tags → schema}/yaml-1.1/omap.js +0 -0
- package/dist/{tags → schema}/yaml-1.1/pairs.d.ts +3 -2
- package/dist/{tags → schema}/yaml-1.1/pairs.js +9 -6
- package/dist/schema/yaml-1.1/schema.d.ts +1 -0
- package/dist/schema/yaml-1.1/schema.js +39 -0
- package/dist/{tags → schema}/yaml-1.1/set.d.ts +1 -1
- package/dist/{tags → schema}/yaml-1.1/set.js +0 -0
- package/dist/{tags → schema}/yaml-1.1/timestamp.d.ts +0 -0
- package/dist/{tags → schema}/yaml-1.1/timestamp.js +0 -0
- package/dist/stringify/addComment.js +0 -7
- package/dist/stringify/stringify.d.ts +1 -2
- package/dist/stringify/stringify.js +8 -6
- package/dist/stringify/stringifyCollection.d.ts +21 -0
- package/dist/stringify/stringifyCollection.js +110 -0
- package/dist/stringify/stringifyDocument.d.ts +3 -0
- package/dist/stringify/stringifyDocument.js +63 -0
- package/dist/stringify/stringifyPair.d.ts +3 -0
- package/dist/stringify/stringifyPair.js +115 -0
- package/dist/stringify/stringifyString.js +53 -52
- package/dist/test-events.d.ts +1 -2
- package/dist/test-events.js +25 -12
- package/dist/util.d.ts +1 -1
- package/dist/visit.d.ts +10 -1
- package/dist/visit.js +20 -1
- package/package.json +4 -3
- package/browser/dist/doc/Anchors.js +0 -102
- package/browser/dist/doc/Schema.js +0 -27
- package/browser/dist/doc/getSchemaTags.js +0 -30
- package/browser/dist/tags/core.js +0 -109
- package/browser/dist/tags/failsafe/index.js +0 -7
- package/browser/dist/tags/index.js +0 -34
- package/browser/dist/tags/yaml-1.1/index.js +0 -152
- package/dist/doc/Anchors.d.ts +0 -36
- package/dist/doc/Anchors.js +0 -104
- package/dist/doc/Schema.js +0 -29
- package/dist/doc/getSchemaTags.d.ts +0 -3
- package/dist/doc/getSchemaTags.js +0 -32
- package/dist/tags/core.d.ts +0 -14
- package/dist/tags/core.js +0 -119
- package/dist/tags/failsafe/index.d.ts +0 -1
- package/dist/tags/failsafe/index.js +0 -9
- package/dist/tags/index.d.ts +0 -31
- package/dist/tags/index.js +0 -37
- package/dist/tags/json.d.ts +0 -2
- package/dist/tags/yaml-1.1/index.d.ts +0 -2
- package/dist/tags/yaml-1.1/index.js +0 -154
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { MAP, SCALAR, SEQ } from '../nodes/Node.js';
|
|
2
|
+
import { map } from './common/map.js';
|
|
3
|
+
import { seq } from './common/seq.js';
|
|
4
|
+
import { string } from './common/string.js';
|
|
5
|
+
import { coreKnownTags, getTags } from './tags.js';
|
|
6
|
+
|
|
7
|
+
const sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;
|
|
8
|
+
class Schema {
|
|
9
|
+
constructor({ customTags, merge, resolveKnownTags, schema, sortMapEntries }) {
|
|
10
|
+
this.merge = !!merge;
|
|
11
|
+
this.name = schema || 'core';
|
|
12
|
+
this.knownTags = resolveKnownTags ? coreKnownTags : {};
|
|
13
|
+
this.tags = getTags(customTags, this.name);
|
|
14
|
+
Object.defineProperty(this, MAP, { value: map });
|
|
15
|
+
Object.defineProperty(this, SCALAR, { value: string });
|
|
16
|
+
Object.defineProperty(this, SEQ, { value: seq });
|
|
17
|
+
// Used by createMap()
|
|
18
|
+
this.sortMapEntries =
|
|
19
|
+
sortMapEntries === true ? sortMapEntriesByKey : sortMapEntries || null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { Schema };
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Scalar } from '../../nodes/Scalar.js';
|
|
2
|
+
|
|
3
|
+
const nullTag = {
|
|
4
|
+
identify: value => value == null,
|
|
5
|
+
createNode: () => new Scalar(null),
|
|
6
|
+
default: true,
|
|
7
|
+
tag: 'tag:yaml.org,2002:null',
|
|
8
|
+
test: /^(?:~|[Nn]ull|NULL)?$/,
|
|
9
|
+
resolve: () => new Scalar(null),
|
|
10
|
+
stringify: ({ source }, ctx) => source && nullTag.test.test(source) ? source : ctx.options.nullStr
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export { nullTag };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { createNode } from '../../doc/createNode.js';
|
|
1
2
|
import { isSeq } from '../../nodes/Node.js';
|
|
2
3
|
import { YAMLSeq } from '../../nodes/YAMLSeq.js';
|
|
3
|
-
import { createNode } from '../../doc/createNode.js';
|
|
4
4
|
|
|
5
5
|
function createSeq(schema, obj, ctx) {
|
|
6
6
|
const { replacer } = ctx;
|
|
File without changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Scalar } from '../../nodes/Scalar.js';
|
|
2
|
+
|
|
3
|
+
const boolTag = {
|
|
4
|
+
identify: value => typeof value === 'boolean',
|
|
5
|
+
default: true,
|
|
6
|
+
tag: 'tag:yaml.org,2002:bool',
|
|
7
|
+
test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,
|
|
8
|
+
resolve: str => new Scalar(str[0] === 't' || str[0] === 'T'),
|
|
9
|
+
stringify({ source, value }, ctx) {
|
|
10
|
+
if (source && boolTag.test.test(source)) {
|
|
11
|
+
const sv = source[0] === 't' || source[0] === 'T';
|
|
12
|
+
if (value === sv)
|
|
13
|
+
return source;
|
|
14
|
+
}
|
|
15
|
+
return value ? ctx.options.trueStr : ctx.options.falseStr;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export { boolTag };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Scalar } from '../../nodes/Scalar.js';
|
|
2
|
+
import { stringifyNumber } from '../../stringify/stringifyNumber.js';
|
|
3
|
+
|
|
4
|
+
const floatNaN = {
|
|
5
|
+
identify: value => typeof value === 'number',
|
|
6
|
+
default: true,
|
|
7
|
+
tag: 'tag:yaml.org,2002:float',
|
|
8
|
+
test: /^(?:[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN))$/,
|
|
9
|
+
resolve: str => str.slice(-3).toLowerCase() === 'nan'
|
|
10
|
+
? NaN
|
|
11
|
+
: str[0] === '-'
|
|
12
|
+
? Number.NEGATIVE_INFINITY
|
|
13
|
+
: Number.POSITIVE_INFINITY,
|
|
14
|
+
stringify: stringifyNumber
|
|
15
|
+
};
|
|
16
|
+
const floatExp = {
|
|
17
|
+
identify: value => typeof value === 'number',
|
|
18
|
+
default: true,
|
|
19
|
+
tag: 'tag:yaml.org,2002:float',
|
|
20
|
+
format: 'EXP',
|
|
21
|
+
test: /^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,
|
|
22
|
+
resolve: str => parseFloat(str),
|
|
23
|
+
stringify: ({ value }) => Number(value).toExponential()
|
|
24
|
+
};
|
|
25
|
+
const float = {
|
|
26
|
+
identify: value => typeof value === 'number',
|
|
27
|
+
default: true,
|
|
28
|
+
tag: 'tag:yaml.org,2002:float',
|
|
29
|
+
test: /^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,
|
|
30
|
+
resolve(str) {
|
|
31
|
+
const node = new Scalar(parseFloat(str));
|
|
32
|
+
const dot = str.indexOf('.');
|
|
33
|
+
if (dot !== -1 && str[str.length - 1] === '0')
|
|
34
|
+
node.minFractionDigits = str.length - dot - 1;
|
|
35
|
+
return node;
|
|
36
|
+
},
|
|
37
|
+
stringify: stringifyNumber
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export { float, floatExp, floatNaN };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { stringifyNumber } from '../../stringify/stringifyNumber.js';
|
|
2
|
+
|
|
3
|
+
const intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);
|
|
4
|
+
const intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));
|
|
5
|
+
function intStringify(node, radix, prefix) {
|
|
6
|
+
const { value } = node;
|
|
7
|
+
if (intIdentify(value) && value >= 0)
|
|
8
|
+
return prefix + value.toString(radix);
|
|
9
|
+
return stringifyNumber(node);
|
|
10
|
+
}
|
|
11
|
+
const intOct = {
|
|
12
|
+
identify: value => intIdentify(value) && value >= 0,
|
|
13
|
+
default: true,
|
|
14
|
+
tag: 'tag:yaml.org,2002:int',
|
|
15
|
+
format: 'OCT',
|
|
16
|
+
test: /^0o[0-7]+$/,
|
|
17
|
+
resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),
|
|
18
|
+
stringify: node => intStringify(node, 8, '0o')
|
|
19
|
+
};
|
|
20
|
+
const int = {
|
|
21
|
+
identify: intIdentify,
|
|
22
|
+
default: true,
|
|
23
|
+
tag: 'tag:yaml.org,2002:int',
|
|
24
|
+
test: /^[-+]?[0-9]+$/,
|
|
25
|
+
resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),
|
|
26
|
+
stringify: stringifyNumber
|
|
27
|
+
};
|
|
28
|
+
const intHex = {
|
|
29
|
+
identify: value => intIdentify(value) && value >= 0,
|
|
30
|
+
default: true,
|
|
31
|
+
tag: 'tag:yaml.org,2002:int',
|
|
32
|
+
format: 'HEX',
|
|
33
|
+
test: /^0x[0-9a-fA-F]+$/,
|
|
34
|
+
resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),
|
|
35
|
+
stringify: node => intStringify(node, 16, '0x')
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export { int, intHex, intOct };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { map } from '../common/map.js';
|
|
2
|
+
import { nullTag } from '../common/null.js';
|
|
3
|
+
import { seq } from '../common/seq.js';
|
|
4
|
+
import { string } from '../common/string.js';
|
|
5
|
+
import { boolTag } from './bool.js';
|
|
6
|
+
import { floatNaN, floatExp, float } from './float.js';
|
|
7
|
+
import { intOct, int, intHex } from './int.js';
|
|
8
|
+
|
|
9
|
+
const schema = [
|
|
10
|
+
map,
|
|
11
|
+
seq,
|
|
12
|
+
string,
|
|
13
|
+
nullTag,
|
|
14
|
+
boolTag,
|
|
15
|
+
intOct,
|
|
16
|
+
int,
|
|
17
|
+
intHex,
|
|
18
|
+
floatNaN,
|
|
19
|
+
floatExp,
|
|
20
|
+
float
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
export { schema };
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { Scalar } from '
|
|
2
|
-
import { map } from '
|
|
3
|
-
import { seq } from '
|
|
1
|
+
import { Scalar } from '../../nodes/Scalar.js';
|
|
2
|
+
import { map } from '../common/map.js';
|
|
3
|
+
import { seq } from '../common/seq.js';
|
|
4
4
|
|
|
5
|
-
/* global BigInt */
|
|
6
5
|
function intIdentify(value) {
|
|
7
6
|
return typeof value === 'bigint' || Number.isInteger(value);
|
|
8
7
|
}
|
|
@@ -58,6 +57,6 @@ const jsonError = {
|
|
|
58
57
|
return str;
|
|
59
58
|
}
|
|
60
59
|
};
|
|
61
|
-
const
|
|
60
|
+
const schema = [map, seq].concat(jsonScalars, jsonError);
|
|
62
61
|
|
|
63
|
-
export {
|
|
62
|
+
export { schema };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { map } from './common/map.js';
|
|
2
|
+
import { nullTag } from './common/null.js';
|
|
3
|
+
import { seq } from './common/seq.js';
|
|
4
|
+
import { string } from './common/string.js';
|
|
5
|
+
import { boolTag } from './core/bool.js';
|
|
6
|
+
import { float, floatExp, floatNaN } from './core/float.js';
|
|
7
|
+
import { int, intHex, intOct } from './core/int.js';
|
|
8
|
+
import { schema } from './core/schema.js';
|
|
9
|
+
import { schema as schema$1 } from './json/schema.js';
|
|
10
|
+
import { binary } from './yaml-1.1/binary.js';
|
|
11
|
+
import { omap } from './yaml-1.1/omap.js';
|
|
12
|
+
import { pairs } from './yaml-1.1/pairs.js';
|
|
13
|
+
import { schema as schema$2 } from './yaml-1.1/schema.js';
|
|
14
|
+
import { set } from './yaml-1.1/set.js';
|
|
15
|
+
import { floatTime, intTime, timestamp } from './yaml-1.1/timestamp.js';
|
|
16
|
+
|
|
17
|
+
const schemas = {
|
|
18
|
+
core: schema,
|
|
19
|
+
failsafe: [map, seq, string],
|
|
20
|
+
json: schema$1,
|
|
21
|
+
yaml11: schema$2,
|
|
22
|
+
'yaml-1.1': schema$2
|
|
23
|
+
};
|
|
24
|
+
const tagsByName = {
|
|
25
|
+
binary,
|
|
26
|
+
bool: boolTag,
|
|
27
|
+
float,
|
|
28
|
+
floatExp,
|
|
29
|
+
floatNaN,
|
|
30
|
+
floatTime,
|
|
31
|
+
int,
|
|
32
|
+
intHex,
|
|
33
|
+
intOct,
|
|
34
|
+
intTime,
|
|
35
|
+
map,
|
|
36
|
+
null: nullTag,
|
|
37
|
+
omap,
|
|
38
|
+
pairs,
|
|
39
|
+
seq,
|
|
40
|
+
set,
|
|
41
|
+
timestamp
|
|
42
|
+
};
|
|
43
|
+
const coreKnownTags = {
|
|
44
|
+
'tag:yaml.org,2002:binary': binary,
|
|
45
|
+
'tag:yaml.org,2002:omap': omap,
|
|
46
|
+
'tag:yaml.org,2002:pairs': pairs,
|
|
47
|
+
'tag:yaml.org,2002:set': set,
|
|
48
|
+
'tag:yaml.org,2002:timestamp': timestamp
|
|
49
|
+
};
|
|
50
|
+
function getTags(customTags, schemaName) {
|
|
51
|
+
let tags = schemas[schemaName];
|
|
52
|
+
if (!tags) {
|
|
53
|
+
const keys = Object.keys(schemas)
|
|
54
|
+
.filter(key => key !== 'yaml11')
|
|
55
|
+
.map(key => JSON.stringify(key))
|
|
56
|
+
.join(', ');
|
|
57
|
+
throw new Error(`Unknown schema "${schemaName}"; use one of ${keys}`);
|
|
58
|
+
}
|
|
59
|
+
if (Array.isArray(customTags)) {
|
|
60
|
+
for (const tag of customTags)
|
|
61
|
+
tags = tags.concat(tag);
|
|
62
|
+
}
|
|
63
|
+
else if (typeof customTags === 'function') {
|
|
64
|
+
tags = customTags(tags.slice());
|
|
65
|
+
}
|
|
66
|
+
return tags.map(tag => {
|
|
67
|
+
if (typeof tag !== 'string')
|
|
68
|
+
return tag;
|
|
69
|
+
const tagObj = tagsByName[tag];
|
|
70
|
+
if (tagObj)
|
|
71
|
+
return tagObj;
|
|
72
|
+
const keys = Object.keys(tagsByName)
|
|
73
|
+
.map(key => JSON.stringify(key))
|
|
74
|
+
.join(', ');
|
|
75
|
+
throw new Error(`Unknown custom tag "${tag}"; use one of ${keys}`);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export { coreKnownTags, getTags };
|
|
File without changes
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Scalar } from '../../nodes/Scalar.js';
|
|
2
|
+
|
|
3
|
+
function boolStringify({ value, source }, ctx) {
|
|
4
|
+
const boolObj = value ? trueTag : falseTag;
|
|
5
|
+
if (source && boolObj.test.test(source))
|
|
6
|
+
return source;
|
|
7
|
+
return value ? ctx.options.trueStr : ctx.options.falseStr;
|
|
8
|
+
}
|
|
9
|
+
const trueTag = {
|
|
10
|
+
identify: value => value === true,
|
|
11
|
+
default: true,
|
|
12
|
+
tag: 'tag:yaml.org,2002:bool',
|
|
13
|
+
test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,
|
|
14
|
+
resolve: () => new Scalar(true),
|
|
15
|
+
stringify: boolStringify
|
|
16
|
+
};
|
|
17
|
+
const falseTag = {
|
|
18
|
+
identify: value => value === false,
|
|
19
|
+
default: true,
|
|
20
|
+
tag: 'tag:yaml.org,2002:bool',
|
|
21
|
+
test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/i,
|
|
22
|
+
resolve: () => new Scalar(false),
|
|
23
|
+
stringify: boolStringify
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { falseTag, trueTag };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Scalar } from '../../nodes/Scalar.js';
|
|
2
|
+
import { stringifyNumber } from '../../stringify/stringifyNumber.js';
|
|
3
|
+
|
|
4
|
+
const floatNaN = {
|
|
5
|
+
identify: value => typeof value === 'number',
|
|
6
|
+
default: true,
|
|
7
|
+
tag: 'tag:yaml.org,2002:float',
|
|
8
|
+
test: /^[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN)$/,
|
|
9
|
+
resolve: (str) => str.slice(-3).toLowerCase() === 'nan'
|
|
10
|
+
? NaN
|
|
11
|
+
: str[0] === '-'
|
|
12
|
+
? Number.NEGATIVE_INFINITY
|
|
13
|
+
: Number.POSITIVE_INFINITY,
|
|
14
|
+
stringify: stringifyNumber
|
|
15
|
+
};
|
|
16
|
+
const floatExp = {
|
|
17
|
+
identify: value => typeof value === 'number',
|
|
18
|
+
default: true,
|
|
19
|
+
tag: 'tag:yaml.org,2002:float',
|
|
20
|
+
format: 'EXP',
|
|
21
|
+
test: /^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,
|
|
22
|
+
resolve: (str) => parseFloat(str.replace(/_/g, '')),
|
|
23
|
+
stringify: ({ value }) => Number(value).toExponential()
|
|
24
|
+
};
|
|
25
|
+
const float = {
|
|
26
|
+
identify: value => typeof value === 'number',
|
|
27
|
+
default: true,
|
|
28
|
+
tag: 'tag:yaml.org,2002:float',
|
|
29
|
+
test: /^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,
|
|
30
|
+
resolve(str) {
|
|
31
|
+
const node = new Scalar(parseFloat(str.replace(/_/g, '')));
|
|
32
|
+
const dot = str.indexOf('.');
|
|
33
|
+
if (dot !== -1) {
|
|
34
|
+
const f = str.substring(dot + 1).replace(/_/g, '');
|
|
35
|
+
if (f[f.length - 1] === '0')
|
|
36
|
+
node.minFractionDigits = f.length;
|
|
37
|
+
}
|
|
38
|
+
return node;
|
|
39
|
+
},
|
|
40
|
+
stringify: stringifyNumber
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export { float, floatExp, floatNaN };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { stringifyNumber } from '../../stringify/stringifyNumber.js';
|
|
2
|
+
|
|
3
|
+
const intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);
|
|
4
|
+
function intResolve(str, offset, radix, { intAsBigInt }) {
|
|
5
|
+
const sign = str[0];
|
|
6
|
+
if (sign === '-' || sign === '+')
|
|
7
|
+
offset += 1;
|
|
8
|
+
str = str.substring(offset).replace(/_/g, '');
|
|
9
|
+
if (intAsBigInt) {
|
|
10
|
+
switch (radix) {
|
|
11
|
+
case 2:
|
|
12
|
+
str = `0b${str}`;
|
|
13
|
+
break;
|
|
14
|
+
case 8:
|
|
15
|
+
str = `0o${str}`;
|
|
16
|
+
break;
|
|
17
|
+
case 16:
|
|
18
|
+
str = `0x${str}`;
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
const n = BigInt(str);
|
|
22
|
+
return sign === '-' ? BigInt(-1) * n : n;
|
|
23
|
+
}
|
|
24
|
+
const n = parseInt(str, radix);
|
|
25
|
+
return sign === '-' ? -1 * n : n;
|
|
26
|
+
}
|
|
27
|
+
function intStringify(node, radix, prefix) {
|
|
28
|
+
const { value } = node;
|
|
29
|
+
if (intIdentify(value)) {
|
|
30
|
+
const str = value.toString(radix);
|
|
31
|
+
return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;
|
|
32
|
+
}
|
|
33
|
+
return stringifyNumber(node);
|
|
34
|
+
}
|
|
35
|
+
const intBin = {
|
|
36
|
+
identify: intIdentify,
|
|
37
|
+
default: true,
|
|
38
|
+
tag: 'tag:yaml.org,2002:int',
|
|
39
|
+
format: 'BIN',
|
|
40
|
+
test: /^[-+]?0b[0-1_]+$/,
|
|
41
|
+
resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),
|
|
42
|
+
stringify: node => intStringify(node, 2, '0b')
|
|
43
|
+
};
|
|
44
|
+
const intOct = {
|
|
45
|
+
identify: intIdentify,
|
|
46
|
+
default: true,
|
|
47
|
+
tag: 'tag:yaml.org,2002:int',
|
|
48
|
+
format: 'OCT',
|
|
49
|
+
test: /^[-+]?0[0-7_]+$/,
|
|
50
|
+
resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),
|
|
51
|
+
stringify: node => intStringify(node, 8, '0')
|
|
52
|
+
};
|
|
53
|
+
const int = {
|
|
54
|
+
identify: intIdentify,
|
|
55
|
+
default: true,
|
|
56
|
+
tag: 'tag:yaml.org,2002:int',
|
|
57
|
+
test: /^[-+]?[0-9][0-9_]*$/,
|
|
58
|
+
resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),
|
|
59
|
+
stringify: stringifyNumber
|
|
60
|
+
};
|
|
61
|
+
const intHex = {
|
|
62
|
+
identify: intIdentify,
|
|
63
|
+
default: true,
|
|
64
|
+
tag: 'tag:yaml.org,2002:int',
|
|
65
|
+
format: 'HEX',
|
|
66
|
+
test: /^[-+]?0x[0-9a-fA-F_]+$/,
|
|
67
|
+
resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),
|
|
68
|
+
stringify: node => intStringify(node, 16, '0x')
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export { int, intBin, intHex, intOct };
|
|
File without changes
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { isSeq, isPair, isMap } from '../../nodes/Node.js';
|
|
2
2
|
import { Pair, createPair } from '../../nodes/Pair.js';
|
|
3
|
+
import { Scalar } from '../../nodes/Scalar.js';
|
|
3
4
|
import { YAMLSeq } from '../../nodes/YAMLSeq.js';
|
|
4
5
|
|
|
5
6
|
function resolvePairs(seq, onError) {
|
|
@@ -11,15 +12,17 @@ function resolvePairs(seq, onError) {
|
|
|
11
12
|
else if (isMap(item)) {
|
|
12
13
|
if (item.items.length > 1)
|
|
13
14
|
onError('Each pair must have its own sequence indicator');
|
|
14
|
-
const pair = item.items[0] || new Pair(null);
|
|
15
|
+
const pair = item.items[0] || new Pair(new Scalar(null));
|
|
15
16
|
if (item.commentBefore)
|
|
16
|
-
pair.commentBefore = pair.commentBefore
|
|
17
|
-
? `${item.commentBefore}\n${pair.commentBefore}`
|
|
17
|
+
pair.key.commentBefore = pair.key.commentBefore
|
|
18
|
+
? `${item.commentBefore}\n${pair.key.commentBefore}`
|
|
18
19
|
: item.commentBefore;
|
|
19
|
-
if (item.comment)
|
|
20
|
-
pair.
|
|
21
|
-
|
|
20
|
+
if (item.comment) {
|
|
21
|
+
const cn = pair.value || pair.key;
|
|
22
|
+
cn.comment = cn.comment
|
|
23
|
+
? `${item.comment}\n${cn.comment}`
|
|
22
24
|
: item.comment;
|
|
25
|
+
}
|
|
23
26
|
item = pair;
|
|
24
27
|
}
|
|
25
28
|
seq.items[i] = isPair(item) ? item : new Pair(item);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { map } from '../common/map.js';
|
|
2
|
+
import { nullTag } from '../common/null.js';
|
|
3
|
+
import { seq } from '../common/seq.js';
|
|
4
|
+
import { string } from '../common/string.js';
|
|
5
|
+
import { binary } from './binary.js';
|
|
6
|
+
import { trueTag, falseTag } from './bool.js';
|
|
7
|
+
import { floatNaN, floatExp, float } from './float.js';
|
|
8
|
+
import { intBin, intOct, int, intHex } from './int.js';
|
|
9
|
+
import { omap } from './omap.js';
|
|
10
|
+
import { pairs } from './pairs.js';
|
|
11
|
+
import { set } from './set.js';
|
|
12
|
+
import { intTime, floatTime, timestamp } from './timestamp.js';
|
|
13
|
+
|
|
14
|
+
const schema = [
|
|
15
|
+
map,
|
|
16
|
+
seq,
|
|
17
|
+
string,
|
|
18
|
+
nullTag,
|
|
19
|
+
trueTag,
|
|
20
|
+
falseTag,
|
|
21
|
+
intBin,
|
|
22
|
+
intOct,
|
|
23
|
+
int,
|
|
24
|
+
intHex,
|
|
25
|
+
floatNaN,
|
|
26
|
+
floatExp,
|
|
27
|
+
float,
|
|
28
|
+
binary,
|
|
29
|
+
omap,
|
|
30
|
+
pairs,
|
|
31
|
+
set,
|
|
32
|
+
intTime,
|
|
33
|
+
floatTime,
|
|
34
|
+
timestamp
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
export { schema };
|
|
File without changes
|
|
File without changes
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
function addCommentBefore(str, indent, comment) {
|
|
2
|
-
if (!comment)
|
|
3
|
-
return str;
|
|
4
|
-
const cc = comment.replace(/[\s\S]^/gm, `$&${indent}#`);
|
|
5
|
-
return `#${cc}\n${indent}${str}`;
|
|
6
|
-
}
|
|
7
1
|
function addComment(str, indent, comment) {
|
|
8
2
|
return !comment
|
|
9
3
|
? str
|
|
@@ -14,4 +8,4 @@ function addComment(str, indent, comment) {
|
|
|
14
8
|
: `${str} #${comment}`;
|
|
15
9
|
}
|
|
16
10
|
|
|
17
|
-
export { addComment
|
|
11
|
+
export { addComment };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { anchorIsValid } from '../doc/anchors.js';
|
|
2
|
+
import { isPair, isAlias, isNode, isScalar, isCollection } from '../nodes/Node.js';
|
|
2
3
|
import { stringifyString } from './stringifyString.js';
|
|
3
4
|
|
|
4
5
|
const createStringifyContext = (doc, options) => ({
|
|
5
|
-
anchors:
|
|
6
|
+
anchors: new Set(),
|
|
6
7
|
doc,
|
|
7
8
|
indent: '',
|
|
8
9
|
indentStep: typeof options.indent === 'number' ? ' '.repeat(options.indent) : ' ',
|
|
@@ -19,7 +20,8 @@ const createStringifyContext = (doc, options) => ({
|
|
|
19
20
|
nullStr: 'null',
|
|
20
21
|
simpleKeys: false,
|
|
21
22
|
singleQuote: false,
|
|
22
|
-
trueStr: 'true'
|
|
23
|
+
trueStr: 'true',
|
|
24
|
+
verifyAliasOrder: true
|
|
23
25
|
}, options)
|
|
24
26
|
});
|
|
25
27
|
function getTagObject(tags, item) {
|
|
@@ -50,9 +52,9 @@ function getTagObject(tags, item) {
|
|
|
50
52
|
// needs to be called before value stringifier to allow for circular anchor refs
|
|
51
53
|
function stringifyProps(node, tagObj, { anchors, doc }) {
|
|
52
54
|
const props = [];
|
|
53
|
-
const anchor =
|
|
54
|
-
if (anchor) {
|
|
55
|
-
anchors
|
|
55
|
+
const anchor = (isScalar(node) || isCollection(node)) && node.anchor;
|
|
56
|
+
if (anchor && anchorIsValid(anchor)) {
|
|
57
|
+
anchors.add(anchor);
|
|
56
58
|
props.push(`&${anchor}`);
|
|
57
59
|
}
|
|
58
60
|
if (node.tag) {
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Collection } from '../nodes/Collection.js';
|
|
2
|
+
import { addComment } from './addComment.js';
|
|
3
|
+
import { stringify } from './stringify.js';
|
|
4
|
+
import { isNode, isPair } from '../nodes/Node.js';
|
|
5
|
+
|
|
6
|
+
function stringifyCollection({ comment, flow, items }, ctx, { blockItem, flowChars, itemIndent, onChompKeep, onComment }) {
|
|
7
|
+
const { indent, indentStep } = ctx;
|
|
8
|
+
const inFlow = flow || ctx.inFlow;
|
|
9
|
+
if (inFlow)
|
|
10
|
+
itemIndent += indentStep;
|
|
11
|
+
ctx = Object.assign({}, ctx, { indent: itemIndent, inFlow, type: null });
|
|
12
|
+
let singleLineOutput = true;
|
|
13
|
+
let chompKeep = false; // flag for the preceding node's status
|
|
14
|
+
const nodes = items.reduce((nodes, item, i) => {
|
|
15
|
+
let comment = null;
|
|
16
|
+
if (isNode(item)) {
|
|
17
|
+
if (!chompKeep && item.spaceBefore)
|
|
18
|
+
nodes.push({ comment: true, str: '' });
|
|
19
|
+
if (item.commentBefore) {
|
|
20
|
+
// This match will always succeed on a non-empty string
|
|
21
|
+
for (const line of item.commentBefore.match(/^.*$/gm))
|
|
22
|
+
nodes.push({ comment: true, str: `#${line}` });
|
|
23
|
+
}
|
|
24
|
+
if (item.comment) {
|
|
25
|
+
comment = item.comment;
|
|
26
|
+
singleLineOutput = false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else if (isPair(item)) {
|
|
30
|
+
const ik = isNode(item.key) ? item.key : null;
|
|
31
|
+
if (ik) {
|
|
32
|
+
if (!chompKeep && ik.spaceBefore)
|
|
33
|
+
nodes.push({ comment: true, str: '' });
|
|
34
|
+
if (ik.commentBefore) {
|
|
35
|
+
// This match will always succeed on a non-empty string
|
|
36
|
+
for (const line of ik.commentBefore.match(/^.*$/gm))
|
|
37
|
+
nodes.push({ comment: true, str: `#${line}` });
|
|
38
|
+
}
|
|
39
|
+
if (ik.comment)
|
|
40
|
+
singleLineOutput = false;
|
|
41
|
+
}
|
|
42
|
+
if (inFlow) {
|
|
43
|
+
const iv = isNode(item.value) ? item.value : null;
|
|
44
|
+
if (iv) {
|
|
45
|
+
if (iv.comment)
|
|
46
|
+
comment = iv.comment;
|
|
47
|
+
if (iv.comment || iv.commentBefore)
|
|
48
|
+
singleLineOutput = false;
|
|
49
|
+
}
|
|
50
|
+
else if (item.value == null && ik && ik.comment) {
|
|
51
|
+
comment = ik.comment;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
chompKeep = false;
|
|
56
|
+
let str = stringify(item, ctx, () => (comment = null), () => (chompKeep = true));
|
|
57
|
+
if (inFlow && i < items.length - 1)
|
|
58
|
+
str += ',';
|
|
59
|
+
str = addComment(str, itemIndent, comment);
|
|
60
|
+
if (chompKeep && (comment || inFlow))
|
|
61
|
+
chompKeep = false;
|
|
62
|
+
nodes.push({ comment: false, str });
|
|
63
|
+
return nodes;
|
|
64
|
+
}, []);
|
|
65
|
+
let str;
|
|
66
|
+
if (nodes.length === 0) {
|
|
67
|
+
str = flowChars.start + flowChars.end;
|
|
68
|
+
}
|
|
69
|
+
else if (inFlow) {
|
|
70
|
+
const { start, end } = flowChars;
|
|
71
|
+
const strings = nodes.map(n => n.str);
|
|
72
|
+
let singleLineLength = 2;
|
|
73
|
+
for (const node of nodes) {
|
|
74
|
+
if (node.comment || node.str.includes('\n')) {
|
|
75
|
+
singleLineOutput = false;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
singleLineLength += node.str.length + 2;
|
|
79
|
+
}
|
|
80
|
+
if (!singleLineOutput ||
|
|
81
|
+
singleLineLength > Collection.maxFlowStringSingleLineLength) {
|
|
82
|
+
str = start;
|
|
83
|
+
for (const s of strings) {
|
|
84
|
+
str += s ? `\n${indentStep}${indent}${s}` : '\n';
|
|
85
|
+
}
|
|
86
|
+
str += `\n${indent}${end}`;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
str = `${start} ${strings.join(' ')} ${end}`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const strings = nodes.map(blockItem);
|
|
94
|
+
str = strings.shift() || '';
|
|
95
|
+
for (const s of strings)
|
|
96
|
+
str += s ? `\n${indent}${s}` : '\n';
|
|
97
|
+
}
|
|
98
|
+
if (comment) {
|
|
99
|
+
str += '\n' + comment.replace(/^/gm, `${indent}#`);
|
|
100
|
+
if (onComment)
|
|
101
|
+
onComment();
|
|
102
|
+
}
|
|
103
|
+
else if (chompKeep && onChompKeep)
|
|
104
|
+
onChompKeep();
|
|
105
|
+
return str;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export { stringifyCollection };
|