yaml 2.0.0-4 → 2.0.0-8
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 +27 -17
- package/browser/dist/compose/compose-scalar.js +21 -23
- package/browser/dist/compose/composer.js +108 -78
- package/browser/dist/compose/resolve-block-map.js +41 -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 +7 -8
- package/browser/dist/compose/resolve-flow-collection.js +158 -199
- package/browser/dist/compose/resolve-flow-scalar.js +62 -26
- package/browser/dist/compose/resolve-props.js +72 -37
- package/browser/dist/compose/util-contains-newline.js +15 -12
- package/browser/dist/compose/util-map-includes.js +17 -0
- package/browser/dist/doc/Document.js +74 -99
- package/browser/dist/doc/anchors.js +72 -0
- package/browser/dist/doc/createNode.js +35 -19
- package/browser/dist/doc/directives.js +5 -0
- 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 +23 -92
- package/browser/dist/nodes/Node.js +9 -1
- package/browser/dist/nodes/Pair.js +16 -231
- 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 +1 -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 +149 -125
- package/browser/dist/parse/parser.js +272 -196
- package/browser/dist/public-api.js +11 -14
- package/browser/dist/schema/Schema.js +28 -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/stringify.js +8 -6
- package/browser/dist/stringify/stringifyCollection.js +122 -0
- package/browser/dist/stringify/stringifyComment.js +14 -0
- package/browser/dist/stringify/stringifyDocument.js +64 -0
- package/browser/dist/stringify/stringifyPair.js +111 -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 +27 -17
- package/dist/compose/compose-scalar.d.ts +4 -3
- package/dist/compose/compose-scalar.js +20 -22
- package/dist/compose/composer.d.ts +28 -23
- package/dist/compose/composer.js +109 -79
- package/dist/compose/resolve-block-map.d.ts +5 -4
- package/dist/compose/resolve-block-map.js +41 -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 +7 -8
- package/dist/compose/resolve-flow-collection.d.ts +4 -5
- package/dist/compose/resolve-flow-collection.js +157 -198
- package/dist/compose/resolve-flow-scalar.d.ts +5 -3
- package/dist/compose/resolve-flow-scalar.js +62 -26
- package/dist/compose/resolve-props.d.ts +16 -10
- package/dist/compose/resolve-props.js +72 -37
- 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/compose/util-map-includes.d.ts +4 -0
- package/dist/compose/util-map-includes.js +19 -0
- package/dist/doc/Document.d.ts +35 -15
- package/dist/doc/Document.js +72 -97
- package/dist/doc/anchors.d.ts +24 -0
- package/dist/doc/anchors.js +77 -0
- package/dist/doc/createNode.d.ts +10 -11
- package/dist/doc/createNode.js +34 -18
- package/dist/doc/directives.d.ts +1 -0
- package/dist/doc/directives.js +5 -0
- 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 +9 -17
- package/dist/nodes/Collection.js +22 -91
- package/dist/nodes/Node.d.ts +10 -4
- package/dist/nodes/Node.js +9 -0
- package/dist/nodes/Pair.d.ts +10 -13
- package/dist/nodes/Pair.js +15 -230
- 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 +41 -25
- package/dist/options.js +1 -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 +7 -14
- package/dist/parse/lexer.js +150 -126
- package/dist/parse/parser.d.ts +31 -24
- package/dist/parse/parser.js +274 -198
- package/dist/public-api.d.ts +7 -7
- package/dist/public-api.js +11 -14
- package/dist/{doc → schema}/Schema.d.ts +6 -3
- package/dist/schema/Schema.js +30 -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/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 +124 -0
- package/dist/stringify/stringifyComment.d.ts +2 -0
- package/dist/stringify/stringifyComment.js +17 -0
- package/dist/stringify/stringifyDocument.d.ts +3 -0
- package/dist/stringify/stringifyDocument.js +66 -0
- package/dist/stringify/stringifyPair.d.ts +3 -0
- package/dist/stringify/stringifyPair.js +113 -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 +9 -8
- 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/stringify/addComment.js +0 -17
- 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/stringify/addComment.d.ts +0 -2
- package/dist/stringify/addComment.js +0 -20
- 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,76 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var stringifyNumber = require('../../stringify/stringifyNumber.js');
|
|
4
|
+
|
|
5
|
+
const intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);
|
|
6
|
+
function intResolve(str, offset, radix, { intAsBigInt }) {
|
|
7
|
+
const sign = str[0];
|
|
8
|
+
if (sign === '-' || sign === '+')
|
|
9
|
+
offset += 1;
|
|
10
|
+
str = str.substring(offset).replace(/_/g, '');
|
|
11
|
+
if (intAsBigInt) {
|
|
12
|
+
switch (radix) {
|
|
13
|
+
case 2:
|
|
14
|
+
str = `0b${str}`;
|
|
15
|
+
break;
|
|
16
|
+
case 8:
|
|
17
|
+
str = `0o${str}`;
|
|
18
|
+
break;
|
|
19
|
+
case 16:
|
|
20
|
+
str = `0x${str}`;
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
const n = BigInt(str);
|
|
24
|
+
return sign === '-' ? BigInt(-1) * n : n;
|
|
25
|
+
}
|
|
26
|
+
const n = parseInt(str, radix);
|
|
27
|
+
return sign === '-' ? -1 * n : n;
|
|
28
|
+
}
|
|
29
|
+
function intStringify(node, radix, prefix) {
|
|
30
|
+
const { value } = node;
|
|
31
|
+
if (intIdentify(value)) {
|
|
32
|
+
const str = value.toString(radix);
|
|
33
|
+
return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;
|
|
34
|
+
}
|
|
35
|
+
return stringifyNumber.stringifyNumber(node);
|
|
36
|
+
}
|
|
37
|
+
const intBin = {
|
|
38
|
+
identify: intIdentify,
|
|
39
|
+
default: true,
|
|
40
|
+
tag: 'tag:yaml.org,2002:int',
|
|
41
|
+
format: 'BIN',
|
|
42
|
+
test: /^[-+]?0b[0-1_]+$/,
|
|
43
|
+
resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),
|
|
44
|
+
stringify: node => intStringify(node, 2, '0b')
|
|
45
|
+
};
|
|
46
|
+
const intOct = {
|
|
47
|
+
identify: intIdentify,
|
|
48
|
+
default: true,
|
|
49
|
+
tag: 'tag:yaml.org,2002:int',
|
|
50
|
+
format: 'OCT',
|
|
51
|
+
test: /^[-+]?0[0-7_]+$/,
|
|
52
|
+
resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),
|
|
53
|
+
stringify: node => intStringify(node, 8, '0')
|
|
54
|
+
};
|
|
55
|
+
const int = {
|
|
56
|
+
identify: intIdentify,
|
|
57
|
+
default: true,
|
|
58
|
+
tag: 'tag:yaml.org,2002:int',
|
|
59
|
+
test: /^[-+]?[0-9][0-9_]*$/,
|
|
60
|
+
resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),
|
|
61
|
+
stringify: stringifyNumber.stringifyNumber
|
|
62
|
+
};
|
|
63
|
+
const intHex = {
|
|
64
|
+
identify: intIdentify,
|
|
65
|
+
default: true,
|
|
66
|
+
tag: 'tag:yaml.org,2002:int',
|
|
67
|
+
format: 'HEX',
|
|
68
|
+
test: /^[-+]?0x[0-9a-fA-F_]+$/,
|
|
69
|
+
resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),
|
|
70
|
+
stringify: node => intStringify(node, 16, '0x')
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
exports.int = int;
|
|
74
|
+
exports.intBin = intBin;
|
|
75
|
+
exports.intHex = intHex;
|
|
76
|
+
exports.intOct = intOct;
|
|
File without changes
|
|
File without changes
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { CreateNodeContext } from '../../doc/createNode.js';
|
|
2
|
-
import
|
|
2
|
+
import { ParsedNode } from '../../nodes/Node.js';
|
|
3
3
|
import { Pair } from '../../nodes/Pair.js';
|
|
4
4
|
import { YAMLMap } from '../../nodes/YAMLMap.js';
|
|
5
5
|
import { YAMLSeq } from '../../nodes/YAMLSeq.js';
|
|
6
|
+
import type { Schema } from '../../schema/Schema.js';
|
|
6
7
|
import type { CollectionTag } from '../types.js';
|
|
7
|
-
export declare function resolvePairs(seq: YAMLSeq | YAMLMap, onError: (message: string) => void): YAMLSeq<Pair<
|
|
8
|
+
export declare function resolvePairs(seq: YAMLSeq.Parsed<ParsedNode | Pair<ParsedNode, ParsedNode | null>> | YAMLMap.Parsed, onError: (message: string) => void): YAMLSeq.Parsed<Pair<ParsedNode, ParsedNode | null>>;
|
|
8
9
|
export declare function createPairs(schema: Schema, iterable: unknown, ctx: CreateNodeContext): YAMLSeq<unknown>;
|
|
9
10
|
export declare const pairs: CollectionTag;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var Node = require('../../nodes/Node.js');
|
|
4
4
|
var Pair = require('../../nodes/Pair.js');
|
|
5
|
+
var Scalar = require('../../nodes/Scalar.js');
|
|
5
6
|
var YAMLSeq = require('../../nodes/YAMLSeq.js');
|
|
6
7
|
|
|
7
8
|
function resolvePairs(seq, onError) {
|
|
@@ -13,15 +14,17 @@ function resolvePairs(seq, onError) {
|
|
|
13
14
|
else if (Node.isMap(item)) {
|
|
14
15
|
if (item.items.length > 1)
|
|
15
16
|
onError('Each pair must have its own sequence indicator');
|
|
16
|
-
const pair = item.items[0] || new Pair.Pair(null);
|
|
17
|
+
const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));
|
|
17
18
|
if (item.commentBefore)
|
|
18
|
-
pair.commentBefore = pair.commentBefore
|
|
19
|
-
? `${item.commentBefore}\n${pair.commentBefore}`
|
|
19
|
+
pair.key.commentBefore = pair.key.commentBefore
|
|
20
|
+
? `${item.commentBefore}\n${pair.key.commentBefore}`
|
|
20
21
|
: item.commentBefore;
|
|
21
|
-
if (item.comment)
|
|
22
|
-
pair.
|
|
23
|
-
|
|
22
|
+
if (item.comment) {
|
|
23
|
+
const cn = pair.value || pair.key;
|
|
24
|
+
cn.comment = cn.comment
|
|
25
|
+
? `${item.comment}\n${cn.comment}`
|
|
24
26
|
: item.comment;
|
|
27
|
+
}
|
|
25
28
|
item = pair;
|
|
26
29
|
}
|
|
27
30
|
seq.items[i] = Node.isPair(item) ? item : new Pair.Pair(item);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const schema: (import("../types.js").ScalarTag | import("../types.js").CollectionTag)[];
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var map = require('../common/map.js');
|
|
4
|
+
var _null = require('../common/null.js');
|
|
5
|
+
var seq = require('../common/seq.js');
|
|
6
|
+
var string = require('../common/string.js');
|
|
7
|
+
var binary = require('./binary.js');
|
|
8
|
+
var bool = require('./bool.js');
|
|
9
|
+
var float = require('./float.js');
|
|
10
|
+
var int = require('./int.js');
|
|
11
|
+
var omap = require('./omap.js');
|
|
12
|
+
var pairs = require('./pairs.js');
|
|
13
|
+
var set = require('./set.js');
|
|
14
|
+
var timestamp = require('./timestamp.js');
|
|
15
|
+
|
|
16
|
+
const schema = [
|
|
17
|
+
map.map,
|
|
18
|
+
seq.seq,
|
|
19
|
+
string.string,
|
|
20
|
+
_null.nullTag,
|
|
21
|
+
bool.trueTag,
|
|
22
|
+
bool.falseTag,
|
|
23
|
+
int.intBin,
|
|
24
|
+
int.intOct,
|
|
25
|
+
int.int,
|
|
26
|
+
int.intHex,
|
|
27
|
+
float.floatNaN,
|
|
28
|
+
float.floatExp,
|
|
29
|
+
float.float,
|
|
30
|
+
binary.binary,
|
|
31
|
+
omap.omap,
|
|
32
|
+
pairs.pairs,
|
|
33
|
+
set.set,
|
|
34
|
+
timestamp.intTime,
|
|
35
|
+
timestamp.floatTime,
|
|
36
|
+
timestamp.timestamp
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
exports.schema = schema;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { Document } from '../doc/Document.js';
|
|
2
|
-
import { Node } from '../nodes/Node.js';
|
|
3
2
|
import type { ToStringOptions } from '../options.js';
|
|
4
3
|
export declare type StringifyContext = {
|
|
5
4
|
actualString?: boolean;
|
|
6
5
|
allNullValues?: boolean;
|
|
7
|
-
anchors:
|
|
6
|
+
anchors: Set<string>;
|
|
8
7
|
doc: Document;
|
|
9
8
|
forceBlockIndent?: boolean;
|
|
10
9
|
implicitKey?: boolean;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var anchors = require('../doc/anchors.js');
|
|
3
4
|
var Node = require('../nodes/Node.js');
|
|
4
5
|
var stringifyString = require('./stringifyString.js');
|
|
5
6
|
|
|
6
7
|
const createStringifyContext = (doc, options) => ({
|
|
7
|
-
anchors:
|
|
8
|
+
anchors: new Set(),
|
|
8
9
|
doc,
|
|
9
10
|
indent: '',
|
|
10
11
|
indentStep: typeof options.indent === 'number' ? ' '.repeat(options.indent) : ' ',
|
|
@@ -21,7 +22,8 @@ const createStringifyContext = (doc, options) => ({
|
|
|
21
22
|
nullStr: 'null',
|
|
22
23
|
simpleKeys: false,
|
|
23
24
|
singleQuote: false,
|
|
24
|
-
trueStr: 'true'
|
|
25
|
+
trueStr: 'true',
|
|
26
|
+
verifyAliasOrder: true
|
|
25
27
|
}, options)
|
|
26
28
|
});
|
|
27
29
|
function getTagObject(tags, item) {
|
|
@@ -50,11 +52,11 @@ function getTagObject(tags, item) {
|
|
|
50
52
|
return tagObj;
|
|
51
53
|
}
|
|
52
54
|
// needs to be called before value stringifier to allow for circular anchor refs
|
|
53
|
-
function stringifyProps(node, tagObj, { anchors, doc }) {
|
|
55
|
+
function stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {
|
|
54
56
|
const props = [];
|
|
55
|
-
const anchor =
|
|
56
|
-
if (anchor) {
|
|
57
|
-
anchors
|
|
57
|
+
const anchor = (Node.isScalar(node) || Node.isCollection(node)) && node.anchor;
|
|
58
|
+
if (anchor && anchors.anchorIsValid(anchor)) {
|
|
59
|
+
anchors$1.add(anchor);
|
|
58
60
|
props.push(`&${anchor}`);
|
|
59
61
|
}
|
|
60
62
|
if (node.tag) {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Collection } from '../nodes/Collection.js';
|
|
2
|
+
import { StringifyContext } from './stringify.js';
|
|
3
|
+
declare type StringifyNode = {
|
|
4
|
+
comment: boolean;
|
|
5
|
+
str: string;
|
|
6
|
+
};
|
|
7
|
+
interface StringifyCollectionOptions {
|
|
8
|
+
blockItem(node: StringifyNode): string;
|
|
9
|
+
flowChars: {
|
|
10
|
+
start: '{';
|
|
11
|
+
end: '}';
|
|
12
|
+
} | {
|
|
13
|
+
start: '[';
|
|
14
|
+
end: ']';
|
|
15
|
+
};
|
|
16
|
+
itemIndent: string;
|
|
17
|
+
onChompKeep?: () => void;
|
|
18
|
+
onComment?: () => void;
|
|
19
|
+
}
|
|
20
|
+
export declare function stringifyCollection({ comment, flow, items }: Readonly<Collection>, ctx: StringifyContext, { blockItem, flowChars, itemIndent, onChompKeep, onComment }: StringifyCollectionOptions): string;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var Collection = require('../nodes/Collection.js');
|
|
4
|
+
var Node = require('../nodes/Node.js');
|
|
5
|
+
var stringify = require('./stringify.js');
|
|
6
|
+
var stringifyComment = require('./stringifyComment.js');
|
|
7
|
+
|
|
8
|
+
function stringifyCollection({ comment, flow, items }, ctx, { blockItem, flowChars, itemIndent, onChompKeep, onComment }) {
|
|
9
|
+
const { indent, indentStep } = ctx;
|
|
10
|
+
const inFlow = flow || ctx.inFlow;
|
|
11
|
+
if (inFlow)
|
|
12
|
+
itemIndent += indentStep;
|
|
13
|
+
ctx = Object.assign({}, ctx, { indent: itemIndent, inFlow, type: null });
|
|
14
|
+
let singleLineOutput = true;
|
|
15
|
+
let chompKeep = false; // flag for the preceding node's status
|
|
16
|
+
const nodes = items.reduce((nodes, item, i) => {
|
|
17
|
+
let comment = null;
|
|
18
|
+
if (Node.isNode(item)) {
|
|
19
|
+
if (!chompKeep && item.spaceBefore)
|
|
20
|
+
nodes.push({ comment: true, str: '' });
|
|
21
|
+
let cb = item.commentBefore;
|
|
22
|
+
if (cb && chompKeep)
|
|
23
|
+
cb = cb.replace(/^\n+/, '');
|
|
24
|
+
if (cb) {
|
|
25
|
+
if (/^\n+$/.test(cb))
|
|
26
|
+
cb = cb.substring(1);
|
|
27
|
+
// This match will always succeed on a non-empty string
|
|
28
|
+
for (const line of cb.match(/^.*$/gm)) {
|
|
29
|
+
const str = line === ' ' ? '#' : line ? `#${line}` : '';
|
|
30
|
+
nodes.push({ comment: true, str });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (item.comment) {
|
|
34
|
+
comment = item.comment;
|
|
35
|
+
singleLineOutput = false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else if (Node.isPair(item)) {
|
|
39
|
+
const ik = Node.isNode(item.key) ? item.key : null;
|
|
40
|
+
if (ik) {
|
|
41
|
+
if (!chompKeep && ik.spaceBefore)
|
|
42
|
+
nodes.push({ comment: true, str: '' });
|
|
43
|
+
let cb = ik.commentBefore;
|
|
44
|
+
if (cb && chompKeep)
|
|
45
|
+
cb = cb.replace(/^\n+/, '');
|
|
46
|
+
if (cb) {
|
|
47
|
+
if (/^\n+$/.test(cb))
|
|
48
|
+
cb = cb.substring(1);
|
|
49
|
+
// This match will always succeed on a non-empty string
|
|
50
|
+
for (const line of cb.match(/^.*$/gm)) {
|
|
51
|
+
const str = line === ' ' ? '#' : line ? `#${line}` : '';
|
|
52
|
+
nodes.push({ comment: true, str });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (ik.comment)
|
|
56
|
+
singleLineOutput = false;
|
|
57
|
+
}
|
|
58
|
+
if (inFlow) {
|
|
59
|
+
const iv = Node.isNode(item.value) ? item.value : null;
|
|
60
|
+
if (iv) {
|
|
61
|
+
if (iv.comment)
|
|
62
|
+
comment = iv.comment;
|
|
63
|
+
if (iv.comment || iv.commentBefore)
|
|
64
|
+
singleLineOutput = false;
|
|
65
|
+
}
|
|
66
|
+
else if (item.value == null && ik && ik.comment) {
|
|
67
|
+
comment = ik.comment;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
chompKeep = false;
|
|
72
|
+
let str = stringify.stringify(item, ctx, () => (comment = null), () => (chompKeep = true));
|
|
73
|
+
if (inFlow && i < items.length - 1)
|
|
74
|
+
str += ',';
|
|
75
|
+
str = stringifyComment.addComment(str, itemIndent, comment);
|
|
76
|
+
if (chompKeep && (comment || inFlow))
|
|
77
|
+
chompKeep = false;
|
|
78
|
+
nodes.push({ comment: false, str });
|
|
79
|
+
return nodes;
|
|
80
|
+
}, []);
|
|
81
|
+
let str;
|
|
82
|
+
if (nodes.length === 0) {
|
|
83
|
+
str = flowChars.start + flowChars.end;
|
|
84
|
+
}
|
|
85
|
+
else if (inFlow) {
|
|
86
|
+
const { start, end } = flowChars;
|
|
87
|
+
const strings = nodes.map(n => n.str);
|
|
88
|
+
let singleLineLength = 2;
|
|
89
|
+
for (const node of nodes) {
|
|
90
|
+
if (node.comment || node.str.includes('\n')) {
|
|
91
|
+
singleLineOutput = false;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
singleLineLength += node.str.length + 2;
|
|
95
|
+
}
|
|
96
|
+
if (!singleLineOutput ||
|
|
97
|
+
singleLineLength > Collection.Collection.maxFlowStringSingleLineLength) {
|
|
98
|
+
str = start;
|
|
99
|
+
for (const s of strings) {
|
|
100
|
+
str += s ? `\n${indentStep}${indent}${s}` : '\n';
|
|
101
|
+
}
|
|
102
|
+
str += `\n${indent}${end}`;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
str = `${start} ${strings.join(' ')} ${end}`;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
const strings = nodes.map(blockItem);
|
|
110
|
+
str = strings.shift() || '';
|
|
111
|
+
for (const s of strings)
|
|
112
|
+
str += s ? `\n${indent}${s}` : '\n';
|
|
113
|
+
}
|
|
114
|
+
if (comment) {
|
|
115
|
+
str += '\n' + stringifyComment.stringifyComment(comment, indent);
|
|
116
|
+
if (onComment)
|
|
117
|
+
onComment();
|
|
118
|
+
}
|
|
119
|
+
else if (chompKeep && onChompKeep)
|
|
120
|
+
onChompKeep();
|
|
121
|
+
return str;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
exports.stringifyCollection = stringifyCollection;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const stringifyComment = (comment, indent) => /^\n+$/.test(comment)
|
|
4
|
+
? comment.substring(1)
|
|
5
|
+
: comment.replace(/^(?!$)(?: $)?/gm, `${indent}#`);
|
|
6
|
+
function addComment(str, indent, comment) {
|
|
7
|
+
return !comment
|
|
8
|
+
? str
|
|
9
|
+
: comment.includes('\n')
|
|
10
|
+
? `${str}\n` + stringifyComment(comment, indent)
|
|
11
|
+
: str.endsWith(' ')
|
|
12
|
+
? `${str}#${comment}`
|
|
13
|
+
: `${str} #${comment}`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
exports.addComment = addComment;
|
|
17
|
+
exports.stringifyComment = stringifyComment;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var Node = require('../nodes/Node.js');
|
|
4
|
+
var stringify = require('./stringify.js');
|
|
5
|
+
var stringifyComment = require('./stringifyComment.js');
|
|
6
|
+
|
|
7
|
+
function stringifyDocument(doc, options) {
|
|
8
|
+
const lines = [];
|
|
9
|
+
let hasDirectives = options.directives === true;
|
|
10
|
+
if (options.directives !== false) {
|
|
11
|
+
const dir = doc.directives.toString(doc);
|
|
12
|
+
if (dir) {
|
|
13
|
+
lines.push(dir);
|
|
14
|
+
hasDirectives = true;
|
|
15
|
+
}
|
|
16
|
+
else if (doc.directives.marker)
|
|
17
|
+
hasDirectives = true;
|
|
18
|
+
}
|
|
19
|
+
if (hasDirectives)
|
|
20
|
+
lines.push('---');
|
|
21
|
+
if (doc.commentBefore) {
|
|
22
|
+
if (lines.length !== 1)
|
|
23
|
+
lines.unshift('');
|
|
24
|
+
lines.unshift(stringifyComment.stringifyComment(doc.commentBefore, ''));
|
|
25
|
+
}
|
|
26
|
+
const ctx = stringify.createStringifyContext(doc, options);
|
|
27
|
+
let chompKeep = false;
|
|
28
|
+
let contentComment = null;
|
|
29
|
+
if (doc.contents) {
|
|
30
|
+
if (Node.isNode(doc.contents)) {
|
|
31
|
+
if (doc.contents.spaceBefore && hasDirectives)
|
|
32
|
+
lines.push('');
|
|
33
|
+
if (doc.contents.commentBefore)
|
|
34
|
+
lines.push(stringifyComment.stringifyComment(doc.contents.commentBefore, ''));
|
|
35
|
+
// top-level block scalars need to be indented if followed by a comment
|
|
36
|
+
ctx.forceBlockIndent = !!doc.comment;
|
|
37
|
+
contentComment = doc.contents.comment;
|
|
38
|
+
}
|
|
39
|
+
const onChompKeep = contentComment ? undefined : () => (chompKeep = true);
|
|
40
|
+
let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);
|
|
41
|
+
if (contentComment)
|
|
42
|
+
body = stringifyComment.addComment(body, '', contentComment);
|
|
43
|
+
if ((body[0] === '|' || body[0] === '>') &&
|
|
44
|
+
lines[lines.length - 1] === '---') {
|
|
45
|
+
// Top-level block scalars with a preceding doc marker ought to use the
|
|
46
|
+
// same line for their header.
|
|
47
|
+
lines[lines.length - 1] = `--- ${body}`;
|
|
48
|
+
}
|
|
49
|
+
else
|
|
50
|
+
lines.push(body);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
lines.push(stringify.stringify(doc.contents, ctx));
|
|
54
|
+
}
|
|
55
|
+
let dc = doc.comment;
|
|
56
|
+
if (dc && chompKeep)
|
|
57
|
+
dc = dc.replace(/^\n+/, '');
|
|
58
|
+
if (dc) {
|
|
59
|
+
if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')
|
|
60
|
+
lines.push('');
|
|
61
|
+
lines.push(stringifyComment.stringifyComment(dc, ''));
|
|
62
|
+
}
|
|
63
|
+
return lines.join('\n') + '\n';
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
exports.stringifyDocument = stringifyDocument;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var Node = require('../nodes/Node.js');
|
|
4
|
+
var Scalar = require('../nodes/Scalar.js');
|
|
5
|
+
var stringify = require('./stringify.js');
|
|
6
|
+
var stringifyComment = require('./stringifyComment.js');
|
|
7
|
+
|
|
8
|
+
function stringifyPair({ key, value }, ctx, onComment, onChompKeep) {
|
|
9
|
+
const { allNullValues, doc, indent, indentStep, options: { indentSeq, simpleKeys } } = ctx;
|
|
10
|
+
let keyComment = (Node.isNode(key) && key.comment) || null;
|
|
11
|
+
if (simpleKeys) {
|
|
12
|
+
if (keyComment) {
|
|
13
|
+
throw new Error('With simple keys, key nodes cannot have comments');
|
|
14
|
+
}
|
|
15
|
+
if (Node.isCollection(key)) {
|
|
16
|
+
const msg = 'With simple keys, collection cannot be used as a key value';
|
|
17
|
+
throw new Error(msg);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
let explicitKey = !simpleKeys &&
|
|
21
|
+
(!key ||
|
|
22
|
+
(keyComment && value == null && !ctx.inFlow) ||
|
|
23
|
+
Node.isCollection(key) ||
|
|
24
|
+
(Node.isScalar(key)
|
|
25
|
+
? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL
|
|
26
|
+
: typeof key === 'object'));
|
|
27
|
+
ctx = Object.assign({}, ctx, {
|
|
28
|
+
allNullValues: false,
|
|
29
|
+
implicitKey: !explicitKey && (simpleKeys || !allNullValues),
|
|
30
|
+
indent: indent + indentStep
|
|
31
|
+
});
|
|
32
|
+
let keyCommentDone = false;
|
|
33
|
+
let chompKeep = false;
|
|
34
|
+
let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));
|
|
35
|
+
if (!explicitKey && !ctx.inFlow && str.length > 1024) {
|
|
36
|
+
if (simpleKeys)
|
|
37
|
+
throw new Error('With simple keys, single line scalar must not span more than 1024 characters');
|
|
38
|
+
explicitKey = true;
|
|
39
|
+
}
|
|
40
|
+
if (ctx.inFlow) {
|
|
41
|
+
if (allNullValues || value == null) {
|
|
42
|
+
if (keyCommentDone && onComment)
|
|
43
|
+
onComment();
|
|
44
|
+
return explicitKey ? `? ${str}` : str;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {
|
|
48
|
+
if (keyCommentDone)
|
|
49
|
+
keyComment = null;
|
|
50
|
+
if (chompKeep && !keyComment && onChompKeep)
|
|
51
|
+
onChompKeep();
|
|
52
|
+
return stringifyComment.addComment(`? ${str}`, ctx.indent, keyComment);
|
|
53
|
+
}
|
|
54
|
+
if (keyCommentDone)
|
|
55
|
+
keyComment = null;
|
|
56
|
+
str = explicitKey
|
|
57
|
+
? `? ${stringifyComment.addComment(str, ctx.indent, keyComment)}\n${indent}:`
|
|
58
|
+
: stringifyComment.addComment(`${str}:`, ctx.indent, keyComment);
|
|
59
|
+
let vcb = '';
|
|
60
|
+
let valueComment = null;
|
|
61
|
+
if (Node.isNode(value)) {
|
|
62
|
+
if (value.spaceBefore)
|
|
63
|
+
vcb = '\n';
|
|
64
|
+
if (value.commentBefore)
|
|
65
|
+
vcb += `\n${stringifyComment.stringifyComment(value.commentBefore, ctx.indent)}`;
|
|
66
|
+
valueComment = value.comment;
|
|
67
|
+
}
|
|
68
|
+
else if (value && typeof value === 'object') {
|
|
69
|
+
value = doc.createNode(value);
|
|
70
|
+
}
|
|
71
|
+
ctx.implicitKey = false;
|
|
72
|
+
if (!explicitKey && !keyComment && Node.isScalar(value))
|
|
73
|
+
ctx.indentAtStart = str.length + 1;
|
|
74
|
+
chompKeep = false;
|
|
75
|
+
if (!indentSeq &&
|
|
76
|
+
indentStep.length >= 2 &&
|
|
77
|
+
!ctx.inFlow &&
|
|
78
|
+
!explicitKey &&
|
|
79
|
+
Node.isSeq(value) &&
|
|
80
|
+
!value.flow &&
|
|
81
|
+
!value.tag &&
|
|
82
|
+
!value.anchor) {
|
|
83
|
+
// If indentSeq === false, consider '- ' as part of indentation where possible
|
|
84
|
+
ctx.indent = ctx.indent.substr(2);
|
|
85
|
+
}
|
|
86
|
+
let valueCommentDone = false;
|
|
87
|
+
const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));
|
|
88
|
+
let ws = ' ';
|
|
89
|
+
if (vcb || keyComment) {
|
|
90
|
+
ws = `${vcb}\n${ctx.indent}`;
|
|
91
|
+
}
|
|
92
|
+
else if (!explicitKey && Node.isCollection(value)) {
|
|
93
|
+
const flow = valueStr[0] === '[' || valueStr[0] === '{';
|
|
94
|
+
if (!flow || valueStr.includes('\n'))
|
|
95
|
+
ws = `\n${ctx.indent}`;
|
|
96
|
+
}
|
|
97
|
+
else if (valueStr[0] === '\n')
|
|
98
|
+
ws = '';
|
|
99
|
+
if (ctx.inFlow) {
|
|
100
|
+
if (valueCommentDone && onComment)
|
|
101
|
+
onComment();
|
|
102
|
+
return str + ws + valueStr;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
if (valueCommentDone)
|
|
106
|
+
valueComment = null;
|
|
107
|
+
if (chompKeep && !valueComment && onChompKeep)
|
|
108
|
+
onChompKeep();
|
|
109
|
+
return stringifyComment.addComment(str + ws + valueStr, ctx.indent, valueComment);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
exports.stringifyPair = stringifyPair;
|