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
|
@@ -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,11 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
function addCommentBefore(str, indent, comment) {
|
|
4
|
-
if (!comment)
|
|
5
|
-
return str;
|
|
6
|
-
const cc = comment.replace(/[\s\S]^/gm, `$&${indent}#`);
|
|
7
|
-
return `#${cc}\n${indent}${str}`;
|
|
8
|
-
}
|
|
9
3
|
function addComment(str, indent, comment) {
|
|
10
4
|
return !comment
|
|
11
5
|
? str
|
|
@@ -17,4 +11,3 @@ function addComment(str, indent, comment) {
|
|
|
17
11
|
}
|
|
18
12
|
|
|
19
13
|
exports.addComment = addComment;
|
|
20
|
-
exports.addCommentBefore = addCommentBefore;
|
|
@@ -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/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,110 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var Collection = require('../nodes/Collection.js');
|
|
4
|
+
var addComment = require('./addComment.js');
|
|
5
|
+
var stringify = require('./stringify.js');
|
|
6
|
+
var Node = require('../nodes/Node.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
|
+
if (item.commentBefore) {
|
|
22
|
+
// This match will always succeed on a non-empty string
|
|
23
|
+
for (const line of item.commentBefore.match(/^.*$/gm))
|
|
24
|
+
nodes.push({ comment: true, str: `#${line}` });
|
|
25
|
+
}
|
|
26
|
+
if (item.comment) {
|
|
27
|
+
comment = item.comment;
|
|
28
|
+
singleLineOutput = false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else if (Node.isPair(item)) {
|
|
32
|
+
const ik = Node.isNode(item.key) ? item.key : null;
|
|
33
|
+
if (ik) {
|
|
34
|
+
if (!chompKeep && ik.spaceBefore)
|
|
35
|
+
nodes.push({ comment: true, str: '' });
|
|
36
|
+
if (ik.commentBefore) {
|
|
37
|
+
// This match will always succeed on a non-empty string
|
|
38
|
+
for (const line of ik.commentBefore.match(/^.*$/gm))
|
|
39
|
+
nodes.push({ comment: true, str: `#${line}` });
|
|
40
|
+
}
|
|
41
|
+
if (ik.comment)
|
|
42
|
+
singleLineOutput = false;
|
|
43
|
+
}
|
|
44
|
+
if (inFlow) {
|
|
45
|
+
const iv = Node.isNode(item.value) ? item.value : null;
|
|
46
|
+
if (iv) {
|
|
47
|
+
if (iv.comment)
|
|
48
|
+
comment = iv.comment;
|
|
49
|
+
if (iv.comment || iv.commentBefore)
|
|
50
|
+
singleLineOutput = false;
|
|
51
|
+
}
|
|
52
|
+
else if (item.value == null && ik && ik.comment) {
|
|
53
|
+
comment = ik.comment;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
chompKeep = false;
|
|
58
|
+
let str = stringify.stringify(item, ctx, () => (comment = null), () => (chompKeep = true));
|
|
59
|
+
if (inFlow && i < items.length - 1)
|
|
60
|
+
str += ',';
|
|
61
|
+
str = addComment.addComment(str, itemIndent, comment);
|
|
62
|
+
if (chompKeep && (comment || inFlow))
|
|
63
|
+
chompKeep = false;
|
|
64
|
+
nodes.push({ comment: false, str });
|
|
65
|
+
return nodes;
|
|
66
|
+
}, []);
|
|
67
|
+
let str;
|
|
68
|
+
if (nodes.length === 0) {
|
|
69
|
+
str = flowChars.start + flowChars.end;
|
|
70
|
+
}
|
|
71
|
+
else if (inFlow) {
|
|
72
|
+
const { start, end } = flowChars;
|
|
73
|
+
const strings = nodes.map(n => n.str);
|
|
74
|
+
let singleLineLength = 2;
|
|
75
|
+
for (const node of nodes) {
|
|
76
|
+
if (node.comment || node.str.includes('\n')) {
|
|
77
|
+
singleLineOutput = false;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
singleLineLength += node.str.length + 2;
|
|
81
|
+
}
|
|
82
|
+
if (!singleLineOutput ||
|
|
83
|
+
singleLineLength > Collection.Collection.maxFlowStringSingleLineLength) {
|
|
84
|
+
str = start;
|
|
85
|
+
for (const s of strings) {
|
|
86
|
+
str += s ? `\n${indentStep}${indent}${s}` : '\n';
|
|
87
|
+
}
|
|
88
|
+
str += `\n${indent}${end}`;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
str = `${start} ${strings.join(' ')} ${end}`;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
const strings = nodes.map(blockItem);
|
|
96
|
+
str = strings.shift() || '';
|
|
97
|
+
for (const s of strings)
|
|
98
|
+
str += s ? `\n${indent}${s}` : '\n';
|
|
99
|
+
}
|
|
100
|
+
if (comment) {
|
|
101
|
+
str += '\n' + comment.replace(/^/gm, `${indent}#`);
|
|
102
|
+
if (onComment)
|
|
103
|
+
onComment();
|
|
104
|
+
}
|
|
105
|
+
else if (chompKeep && onChompKeep)
|
|
106
|
+
onChompKeep();
|
|
107
|
+
return str;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
exports.stringifyCollection = stringifyCollection;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var Node = require('../nodes/Node.js');
|
|
4
|
+
var addComment = require('./addComment.js');
|
|
5
|
+
var stringify = require('./stringify.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(doc.commentBefore.replace(/^/gm, '#'));
|
|
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(doc.contents.commentBefore.replace(/^/gm, '#'));
|
|
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 = addComment.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
|
+
if (doc.comment) {
|
|
56
|
+
if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')
|
|
57
|
+
lines.push('');
|
|
58
|
+
lines.push(doc.comment.replace(/^/gm, '#'));
|
|
59
|
+
}
|
|
60
|
+
return lines.join('\n') + '\n';
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
exports.stringifyDocument = stringifyDocument;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var Node = require('../nodes/Node.js');
|
|
4
|
+
var Scalar = require('../nodes/Scalar.js');
|
|
5
|
+
var addComment = require('./addComment.js');
|
|
6
|
+
var stringify = require('./stringify.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 addComment.addComment(`? ${str}`, ctx.indent, keyComment);
|
|
53
|
+
}
|
|
54
|
+
if (keyCommentDone)
|
|
55
|
+
keyComment = null;
|
|
56
|
+
str = explicitKey
|
|
57
|
+
? `? ${addComment.addComment(str, ctx.indent, keyComment)}\n${indent}:`
|
|
58
|
+
: addComment.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
|
+
const cs = value.commentBefore.replace(/^/gm, `${ctx.indent}#`);
|
|
66
|
+
vcb += `\n${cs}`;
|
|
67
|
+
}
|
|
68
|
+
valueComment = value.comment;
|
|
69
|
+
}
|
|
70
|
+
else if (value && typeof value === 'object') {
|
|
71
|
+
value = doc.createNode(value);
|
|
72
|
+
}
|
|
73
|
+
ctx.implicitKey = false;
|
|
74
|
+
if (!explicitKey && !keyComment && Node.isScalar(value))
|
|
75
|
+
ctx.indentAtStart = str.length + 1;
|
|
76
|
+
chompKeep = false;
|
|
77
|
+
if (!indentSeq &&
|
|
78
|
+
indentStep.length >= 2 &&
|
|
79
|
+
!ctx.inFlow &&
|
|
80
|
+
!explicitKey &&
|
|
81
|
+
Node.isSeq(value) &&
|
|
82
|
+
!value.flow &&
|
|
83
|
+
!value.tag &&
|
|
84
|
+
!value.anchor) {
|
|
85
|
+
// If indentSeq === false, consider '- ' as part of indentation where possible
|
|
86
|
+
ctx.indent = ctx.indent.substr(2);
|
|
87
|
+
}
|
|
88
|
+
let valueCommentDone = false;
|
|
89
|
+
const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));
|
|
90
|
+
let ws = ' ';
|
|
91
|
+
if (vcb || keyComment) {
|
|
92
|
+
ws = `${vcb}\n${ctx.indent}`;
|
|
93
|
+
}
|
|
94
|
+
else if (!explicitKey && Node.isCollection(value)) {
|
|
95
|
+
const flow = valueStr[0] === '[' || valueStr[0] === '{';
|
|
96
|
+
if (!flow || valueStr.includes('\n'))
|
|
97
|
+
ws = `\n${ctx.indent}`;
|
|
98
|
+
}
|
|
99
|
+
else if (valueStr[0] === '\n')
|
|
100
|
+
ws = '';
|
|
101
|
+
if (ctx.inFlow) {
|
|
102
|
+
if (valueCommentDone && onComment)
|
|
103
|
+
onComment();
|
|
104
|
+
return str + ws + valueStr;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
if (valueCommentDone)
|
|
108
|
+
valueComment = null;
|
|
109
|
+
if (chompKeep && !valueComment && onChompKeep)
|
|
110
|
+
onChompKeep();
|
|
111
|
+
return addComment.addComment(str + ws + valueStr, ctx.indent, valueComment);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
exports.stringifyPair = stringifyPair;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var Scalar = require('../nodes/Scalar.js');
|
|
4
|
-
var addComment = require('./addComment.js');
|
|
5
4
|
var foldFlowLines = require('./foldFlowLines.js');
|
|
6
5
|
|
|
7
6
|
const getFoldOptions = (ctx) => ({
|
|
@@ -144,70 +143,80 @@ function blockString({ comment, type, value }, ctx, onComment, onChompKeep) {
|
|
|
144
143
|
}
|
|
145
144
|
const indent = ctx.indent ||
|
|
146
145
|
(ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '');
|
|
147
|
-
const indentSize = indent ? '2' : '1'; // root is at -1
|
|
148
146
|
const literal = type === Scalar.Scalar.BLOCK_FOLDED
|
|
149
147
|
? false
|
|
150
148
|
: type === Scalar.Scalar.BLOCK_LITERAL
|
|
151
149
|
? true
|
|
152
150
|
: !lineLengthOverLimit(value, ctx.options.lineWidth, indent.length);
|
|
153
|
-
let header = literal ? '|' : '>';
|
|
154
151
|
if (!value)
|
|
155
|
-
return
|
|
156
|
-
|
|
157
|
-
let
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
const
|
|
161
|
-
if (n
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
152
|
+
return literal ? '|\n' : '>\n';
|
|
153
|
+
// determine chomping from whitespace at value end
|
|
154
|
+
let chomp;
|
|
155
|
+
let endStart;
|
|
156
|
+
for (endStart = value.length; endStart > 0; --endStart) {
|
|
157
|
+
const ch = value[endStart - 1];
|
|
158
|
+
if (ch !== '\n' && ch !== '\t' && ch !== ' ')
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
let end = value.substring(endStart);
|
|
162
|
+
const endNlPos = end.indexOf('\n');
|
|
163
|
+
if (endNlPos === -1) {
|
|
164
|
+
chomp = '-'; // strip
|
|
165
|
+
}
|
|
166
|
+
else if (value === end || endNlPos !== end.length - 1) {
|
|
167
|
+
chomp = '+'; // keep
|
|
168
|
+
if (onChompKeep)
|
|
169
|
+
onChompKeep();
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
chomp = ''; // clip
|
|
173
|
+
}
|
|
174
|
+
if (end) {
|
|
175
|
+
value = value.slice(0, -end.length);
|
|
176
|
+
if (end[end.length - 1] === '\n')
|
|
177
|
+
end = end.slice(0, -1);
|
|
178
|
+
end = end.replace(/\n+(?!\n|$)/g, `$&${indent}`);
|
|
179
|
+
}
|
|
180
|
+
// determine indent indicator from whitespace at value start
|
|
181
|
+
let startWithSpace = false;
|
|
182
|
+
let startEnd;
|
|
183
|
+
let startNlPos = -1;
|
|
184
|
+
for (startEnd = 0; startEnd < value.length; ++startEnd) {
|
|
185
|
+
const ch = value[startEnd];
|
|
186
|
+
if (ch === ' ')
|
|
187
|
+
startWithSpace = true;
|
|
188
|
+
else if (ch === '\n')
|
|
189
|
+
startNlPos = startEnd;
|
|
190
|
+
else
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);
|
|
194
|
+
if (start) {
|
|
195
|
+
value = value.substring(start.length);
|
|
196
|
+
start = start.replace(/\n+/g, `$&${indent}`);
|
|
197
|
+
}
|
|
198
|
+
const indentSize = indent ? '2' : '1'; // root is at -1
|
|
199
|
+
let header = (literal ? '|' : '>') + (startWithSpace ? indentSize : '') + chomp;
|
|
189
200
|
if (comment) {
|
|
190
201
|
header += ' #' + comment.replace(/ ?[\r\n]+/g, ' ');
|
|
191
202
|
if (onComment)
|
|
192
203
|
onComment();
|
|
193
204
|
}
|
|
194
|
-
if (!value)
|
|
195
|
-
return `${header}${indentSize}\n${indent}${wsEnd}`;
|
|
196
205
|
if (literal) {
|
|
197
206
|
value = value.replace(/\n+/g, `$&${indent}`);
|
|
198
|
-
return `${header}\n${indent}${
|
|
207
|
+
return `${header}\n${indent}${start}${value}${end}`;
|
|
199
208
|
}
|
|
200
209
|
value = value
|
|
201
210
|
.replace(/\n+/g, '\n$&')
|
|
202
211
|
.replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, '$1$2') // more-indented lines aren't folded
|
|
203
|
-
//
|
|
212
|
+
// ^ more-ind. ^ empty ^ capture next empty lines only at end of indent
|
|
204
213
|
.replace(/\n+/g, `$&${indent}`);
|
|
205
|
-
const body = foldFlowLines.foldFlowLines(`${
|
|
214
|
+
const body = foldFlowLines.foldFlowLines(`${start}${value}${end}`, indent, foldFlowLines.FOLD_BLOCK, getFoldOptions(ctx));
|
|
206
215
|
return `${header}\n${indent}${body}`;
|
|
207
216
|
}
|
|
208
217
|
function plainString(item, ctx, onComment, onChompKeep) {
|
|
209
218
|
var _a;
|
|
210
|
-
const {
|
|
219
|
+
const { type, value } = item;
|
|
211
220
|
const { actualString, implicitKey, indent, inFlow } = ctx;
|
|
212
221
|
if ((implicitKey && /[\n[\]{},]/.test(value)) ||
|
|
213
222
|
(inFlow && /[[\]{},]/.test(value))) {
|
|
@@ -263,17 +272,9 @@ function plainString(item, ctx, onComment, onChompKeep) {
|
|
|
263
272
|
return doubleQuotedString(value, ctx);
|
|
264
273
|
}
|
|
265
274
|
}
|
|
266
|
-
|
|
275
|
+
return implicitKey
|
|
267
276
|
? str
|
|
268
277
|
: foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx));
|
|
269
|
-
if (comment &&
|
|
270
|
-
!inFlow &&
|
|
271
|
-
(body.indexOf('\n') !== -1 || comment.indexOf('\n') !== -1)) {
|
|
272
|
-
if (onComment)
|
|
273
|
-
onComment();
|
|
274
|
-
return addComment.addCommentBefore(body, indent, comment);
|
|
275
|
-
}
|
|
276
|
-
return body;
|
|
277
278
|
}
|
|
278
279
|
function stringifyString(item, ctx, onComment, onChompKeep) {
|
|
279
280
|
const { implicitKey, inFlow } = ctx;
|
package/dist/test-events.d.ts
CHANGED