yaml 2.0.0-3 → 2.0.0-7
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/LICENSE +1 -1
- package/README.md +46 -26
- package/browser/dist/compose/compose-collection.js +59 -0
- package/browser/dist/compose/compose-doc.js +39 -0
- package/browser/dist/compose/compose-node.js +79 -0
- package/browser/dist/compose/compose-scalar.js +74 -0
- package/browser/dist/compose/composer.js +219 -0
- package/browser/dist/compose/resolve-block-map.js +93 -0
- package/browser/dist/compose/resolve-block-scalar.js +185 -0
- package/browser/dist/compose/resolve-block-seq.js +40 -0
- package/browser/dist/compose/resolve-end.js +37 -0
- package/browser/dist/compose/resolve-flow-collection.js +189 -0
- package/browser/dist/compose/resolve-flow-scalar.js +217 -0
- package/browser/dist/compose/resolve-props.js +126 -0
- package/browser/dist/compose/util-contains-newline.js +34 -0
- package/browser/dist/compose/util-empty-scalar-position.js +27 -0
- package/browser/dist/compose/util-map-includes.js +17 -0
- package/browser/dist/doc/Document.js +251 -348
- package/browser/dist/doc/anchors.js +72 -0
- package/browser/dist/doc/applyReviver.js +41 -28
- package/browser/dist/doc/createNode.js +75 -55
- package/browser/dist/doc/directives.js +161 -0
- package/browser/dist/errors.js +50 -72
- package/browser/dist/index.js +16 -72
- package/browser/dist/log.js +11 -7
- package/browser/dist/nodes/Alias.js +94 -0
- package/browser/dist/nodes/Collection.js +133 -0
- package/browser/dist/nodes/Node.js +41 -0
- package/browser/dist/nodes/Pair.js +28 -0
- package/browser/dist/nodes/Scalar.js +23 -0
- package/browser/dist/nodes/YAMLMap.js +116 -0
- package/browser/dist/nodes/YAMLSeq.js +105 -0
- package/browser/dist/nodes/addPairToJSMap.js +103 -0
- package/browser/dist/nodes/toJS.js +35 -0
- package/browser/dist/options.js +14 -95
- 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/browser/dist/parse/cst.js +98 -0
- package/browser/dist/parse/lexer.js +674 -0
- package/browser/dist/parse/line-counter.js +39 -0
- package/browser/dist/parse/parser.js +876 -0
- package/browser/dist/public-api.js +101 -0
- package/browser/dist/schema/Schema.js +23 -0
- package/browser/dist/schema/common/map.js +42 -0
- package/browser/dist/schema/common/null.js +13 -0
- package/browser/dist/schema/common/seq.js +33 -0
- package/browser/dist/schema/common/string.js +14 -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/schema/json/schema.js +62 -0
- package/browser/dist/schema/tags.js +79 -0
- package/browser/dist/schema/yaml-1.1/binary.js +66 -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/schema/yaml-1.1/omap.js +73 -0
- package/browser/dist/schema/yaml-1.1/pairs.js +77 -0
- package/browser/dist/schema/yaml-1.1/schema.js +37 -0
- package/browser/dist/schema/yaml-1.1/set.js +87 -0
- package/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
- package/browser/dist/stringify/foldFlowLines.js +121 -139
- package/browser/dist/stringify/stringify.js +87 -72
- 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/stringifyNumber.js +20 -23
- package/browser/dist/stringify/stringifyPair.js +111 -0
- package/browser/dist/stringify/stringifyString.js +295 -322
- package/browser/dist/util.js +4 -4
- package/browser/dist/visit.js +134 -71
- package/browser/index.js +4 -1
- package/dist/compose/compose-collection.d.ts +5 -0
- package/dist/compose/compose-collection.js +61 -0
- package/dist/compose/compose-doc.d.ts +6 -0
- package/dist/compose/compose-doc.js +41 -0
- package/dist/compose/compose-node.d.ts +25 -0
- package/dist/compose/compose-node.js +82 -0
- package/dist/compose/compose-scalar.d.ts +5 -0
- package/dist/compose/compose-scalar.js +76 -0
- package/dist/compose/composer.d.ts +62 -0
- package/dist/compose/composer.js +223 -0
- package/dist/compose/resolve-block-map.d.ts +6 -0
- package/dist/compose/resolve-block-map.js +95 -0
- package/dist/compose/resolve-block-scalar.d.ts +10 -0
- package/dist/compose/resolve-block-scalar.js +187 -0
- package/dist/compose/resolve-block-seq.d.ts +5 -0
- package/dist/compose/resolve-block-seq.js +42 -0
- package/dist/compose/resolve-end.d.ts +6 -0
- package/dist/compose/resolve-end.js +39 -0
- package/dist/compose/resolve-flow-collection.d.ts +6 -0
- package/dist/compose/resolve-flow-collection.js +191 -0
- package/dist/compose/resolve-flow-scalar.d.ts +10 -0
- package/dist/compose/resolve-flow-scalar.js +219 -0
- package/dist/compose/resolve-props.d.ts +21 -0
- package/dist/compose/resolve-props.js +128 -0
- package/dist/compose/util-contains-newline.d.ts +2 -0
- package/dist/compose/util-contains-newline.js +36 -0
- package/dist/compose/util-empty-scalar-position.d.ts +2 -0
- package/dist/compose/util-empty-scalar-position.js +29 -0
- 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 +130 -0
- package/dist/doc/Document.js +250 -347
- package/dist/doc/anchors.d.ts +24 -0
- package/dist/doc/anchors.js +77 -0
- package/dist/doc/applyReviver.d.ts +9 -0
- package/dist/doc/applyReviver.js +41 -28
- package/dist/doc/createNode.d.ts +16 -0
- package/dist/doc/createNode.js +75 -55
- package/dist/doc/directives.d.ts +46 -0
- package/dist/doc/directives.js +163 -0
- package/dist/errors.d.ts +21 -0
- package/dist/errors.js +51 -74
- package/dist/index.d.ts +19 -0
- package/dist/index.js +39 -70
- package/dist/log.d.ts +3 -0
- package/dist/log.js +11 -6
- package/dist/nodes/Alias.d.ts +24 -0
- package/dist/nodes/Alias.js +96 -0
- package/dist/nodes/Collection.d.ts +67 -0
- package/dist/nodes/Collection.js +137 -0
- package/dist/nodes/Node.d.ts +48 -0
- package/dist/nodes/Node.js +59 -0
- package/dist/nodes/Pair.d.ts +16 -0
- package/dist/nodes/Pair.js +31 -0
- package/dist/nodes/Scalar.d.ts +40 -0
- package/dist/nodes/Scalar.js +26 -0
- package/dist/nodes/YAMLMap.d.ts +39 -0
- package/dist/nodes/YAMLMap.js +119 -0
- package/dist/nodes/YAMLSeq.d.ts +53 -0
- package/dist/nodes/YAMLSeq.js +107 -0
- package/dist/nodes/addPairToJSMap.d.ts +3 -0
- package/dist/nodes/addPairToJSMap.js +105 -0
- package/dist/nodes/toJS.d.ts +30 -0
- package/dist/nodes/toJS.js +37 -0
- package/dist/options.d.ts +278 -0
- package/dist/options.js +13 -96
- 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/cst.d.ts +106 -0
- package/dist/parse/cst.js +112 -0
- package/dist/parse/lexer.d.ts +85 -0
- package/dist/parse/lexer.js +676 -0
- package/dist/parse/line-counter.d.ts +22 -0
- package/dist/parse/line-counter.js +41 -0
- package/dist/parse/parser.d.ts +84 -0
- package/dist/parse/parser.js +880 -0
- package/dist/public-api.d.ts +43 -0
- package/dist/public-api.js +106 -0
- package/dist/schema/Schema.d.ts +16 -0
- package/dist/schema/Schema.js +25 -0
- package/dist/schema/common/map.d.ts +2 -0
- package/dist/schema/common/map.js +44 -0
- package/dist/schema/common/null.d.ts +4 -0
- package/dist/schema/common/null.js +15 -0
- package/dist/schema/common/seq.d.ts +2 -0
- package/dist/schema/common/seq.js +35 -0
- package/dist/schema/common/string.d.ts +2 -0
- package/dist/schema/common/string.js +16 -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/schema/json/schema.js +64 -0
- package/dist/schema/tags.d.ts +41 -0
- package/dist/schema/tags.js +82 -0
- package/dist/schema/types.d.ts +82 -0
- package/dist/schema/yaml-1.1/binary.d.ts +2 -0
- package/dist/schema/yaml-1.1/binary.js +68 -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/schema/yaml-1.1/omap.d.ts +21 -0
- package/dist/schema/yaml-1.1/omap.js +76 -0
- package/dist/schema/yaml-1.1/pairs.d.ts +10 -0
- package/dist/schema/yaml-1.1/pairs.js +81 -0
- package/dist/schema/yaml-1.1/schema.d.ts +1 -0
- package/dist/schema/yaml-1.1/schema.js +39 -0
- package/dist/schema/yaml-1.1/set.d.ts +22 -0
- package/dist/schema/yaml-1.1/set.js +90 -0
- package/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
- package/dist/schema/yaml-1.1/timestamp.js +105 -0
- package/dist/stringify/foldFlowLines.d.ts +34 -0
- package/dist/stringify/foldFlowLines.js +121 -139
- package/dist/stringify/stringify.d.ts +18 -0
- package/dist/stringify/stringify.js +87 -71
- 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/stringifyNumber.d.ts +2 -0
- package/dist/stringify/stringifyNumber.js +20 -23
- package/dist/stringify/stringifyPair.d.ts +3 -0
- package/dist/stringify/stringifyPair.js +113 -0
- package/dist/stringify/stringifyString.d.ts +3 -0
- package/dist/stringify/stringifyString.js +295 -322
- package/dist/test-events.d.ts +4 -0
- package/dist/test-events.js +124 -148
- package/dist/util.d.ts +6 -0
- package/dist/util.js +9 -12
- package/dist/visit.d.ts +63 -0
- package/dist/visit.js +134 -71
- package/package.json +31 -39
- package/util.js +2 -14
- package/browser/dist/_virtual/_rollupPluginBabelHelpers.js +0 -16
- package/browser/dist/ast/Alias.js +0 -95
- package/browser/dist/ast/Collection.js +0 -192
- package/browser/dist/ast/Merge.js +0 -71
- package/browser/dist/ast/Node.js +0 -3
- package/browser/dist/ast/Pair.js +0 -200
- package/browser/dist/ast/Scalar.js +0 -21
- package/browser/dist/ast/YAMLMap.js +0 -91
- package/browser/dist/ast/YAMLSeq.js +0 -67
- package/browser/dist/ast/toJS.js +0 -29
- package/browser/dist/constants.js +0 -40
- package/browser/dist/cst/Alias.js +0 -26
- package/browser/dist/cst/BlankLine.js +0 -34
- package/browser/dist/cst/BlockValue.js +0 -240
- package/browser/dist/cst/Collection.js +0 -259
- package/browser/dist/cst/CollectionItem.js +0 -123
- package/browser/dist/cst/Comment.js +0 -27
- package/browser/dist/cst/Directive.js +0 -53
- package/browser/dist/cst/Document.js +0 -262
- package/browser/dist/cst/FlowCollection.js +0 -201
- package/browser/dist/cst/Node.js +0 -355
- package/browser/dist/cst/ParseContext.js +0 -234
- package/browser/dist/cst/PlainValue.js +0 -171
- package/browser/dist/cst/QuoteDouble.js +0 -224
- package/browser/dist/cst/QuoteSingle.js +0 -100
- package/browser/dist/cst/Range.js +0 -56
- package/browser/dist/cst/parse.js +0 -46
- package/browser/dist/cst/source-utils.js +0 -169
- package/browser/dist/doc/Anchors.js +0 -115
- package/browser/dist/doc/Schema.js +0 -34
- package/browser/dist/doc/getSchemaTags.js +0 -33
- package/browser/dist/doc/listTagNames.js +0 -27
- package/browser/dist/doc/parseContents.js +0 -60
- package/browser/dist/doc/parseDirectives.js +0 -107
- package/browser/dist/resolve/collection-utils.js +0 -86
- package/browser/dist/resolve/resolveMap.js +0 -315
- package/browser/dist/resolve/resolveNode.js +0 -173
- package/browser/dist/resolve/resolveScalar.js +0 -20
- package/browser/dist/resolve/resolveSeq.js +0 -170
- package/browser/dist/resolve/resolveTag.js +0 -107
- package/browser/dist/resolve/resolveTagName.js +0 -87
- package/browser/dist/stringify/addComment.js +0 -10
- package/browser/dist/stringify/stringifyTag.js +0 -28
- package/browser/dist/tags/core.js +0 -128
- package/browser/dist/tags/failsafe/index.js +0 -7
- package/browser/dist/tags/failsafe/map.js +0 -37
- package/browser/dist/tags/failsafe/seq.js +0 -34
- package/browser/dist/tags/failsafe/string.js +0 -20
- package/browser/dist/tags/index.js +0 -39
- package/browser/dist/tags/json.js +0 -62
- package/browser/dist/tags/options.js +0 -31
- package/browser/dist/tags/yaml-1.1/binary.js +0 -83
- package/browser/dist/tags/yaml-1.1/index.js +0 -174
- package/browser/dist/tags/yaml-1.1/omap.js +0 -86
- package/browser/dist/tags/yaml-1.1/pairs.js +0 -62
- package/browser/dist/tags/yaml-1.1/set.js +0 -78
- package/browser/dist/tags/yaml-1.1/timestamp.js +0 -101
- package/browser/dist/types.js +0 -10
- package/cst.d.ts +0 -185
- package/dist/_virtual/_rollupPluginBabelHelpers.js +0 -18
- package/dist/ast/Alias.js +0 -97
- package/dist/ast/Collection.js +0 -196
- package/dist/ast/Merge.js +0 -74
- package/dist/ast/Node.js +0 -5
- package/dist/ast/Pair.js +0 -203
- package/dist/ast/Scalar.js +0 -24
- package/dist/ast/YAMLMap.js +0 -94
- package/dist/ast/YAMLSeq.js +0 -69
- package/dist/ast/toJS.js +0 -31
- package/dist/constants.js +0 -46
- package/dist/cst/Alias.js +0 -28
- package/dist/cst/BlankLine.js +0 -36
- package/dist/cst/BlockValue.js +0 -243
- package/dist/cst/Collection.js +0 -262
- package/dist/cst/CollectionItem.js +0 -125
- package/dist/cst/Comment.js +0 -29
- package/dist/cst/Directive.js +0 -55
- package/dist/cst/Document.js +0 -264
- package/dist/cst/FlowCollection.js +0 -203
- package/dist/cst/Node.js +0 -357
- package/dist/cst/ParseContext.js +0 -236
- package/dist/cst/PlainValue.js +0 -173
- package/dist/cst/QuoteDouble.js +0 -226
- package/dist/cst/QuoteSingle.js +0 -102
- package/dist/cst/Range.js +0 -58
- package/dist/cst/parse.js +0 -48
- package/dist/cst/source-utils.js +0 -173
- package/dist/doc/Anchors.js +0 -117
- package/dist/doc/Schema.js +0 -36
- package/dist/doc/getSchemaTags.js +0 -35
- package/dist/doc/listTagNames.js +0 -29
- package/dist/doc/parseContents.js +0 -62
- package/dist/doc/parseDirectives.js +0 -109
- package/dist/resolve/collection-utils.js +0 -91
- package/dist/resolve/resolveMap.js +0 -317
- package/dist/resolve/resolveNode.js +0 -175
- package/dist/resolve/resolveScalar.js +0 -22
- package/dist/resolve/resolveSeq.js +0 -172
- package/dist/resolve/resolveTag.js +0 -109
- package/dist/resolve/resolveTagName.js +0 -89
- package/dist/stringify/addComment.js +0 -13
- package/dist/stringify/stringifyTag.js +0 -30
- package/dist/tags/core.js +0 -138
- package/dist/tags/failsafe/index.js +0 -9
- package/dist/tags/failsafe/map.js +0 -39
- package/dist/tags/failsafe/seq.js +0 -36
- package/dist/tags/failsafe/string.js +0 -22
- package/dist/tags/index.js +0 -42
- package/dist/tags/json.js +0 -64
- package/dist/tags/options.js +0 -37
- package/dist/tags/yaml-1.1/binary.js +0 -85
- package/dist/tags/yaml-1.1/index.js +0 -176
- package/dist/tags/yaml-1.1/omap.js +0 -89
- package/dist/tags/yaml-1.1/pairs.js +0 -66
- package/dist/tags/yaml-1.1/set.js +0 -81
- package/dist/tags/yaml-1.1/timestamp.js +0 -105
- package/dist/types.js +0 -29
- package/index.d.ts +0 -519
- package/index.js +0 -1
- package/types.d.ts +0 -379
- package/types.js +0 -17
- package/types.mjs +0 -17
- package/util.d.ts +0 -76
- package/util.mjs +0 -15
|
@@ -1,317 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var Alias = require('../ast/Alias.js');
|
|
4
|
-
var Merge = require('../ast/Merge.js');
|
|
5
|
-
var Pair = require('../ast/Pair.js');
|
|
6
|
-
var YAMLMap = require('../ast/YAMLMap.js');
|
|
7
|
-
var constants = require('../constants.js');
|
|
8
|
-
var PlainValue = require('../cst/PlainValue.js');
|
|
9
|
-
var errors = require('../errors.js');
|
|
10
|
-
var collectionUtils = require('./collection-utils.js');
|
|
11
|
-
var resolveNode = require('./resolveNode.js');
|
|
12
|
-
|
|
13
|
-
function resolveMap(doc, cst) {
|
|
14
|
-
const {
|
|
15
|
-
comments,
|
|
16
|
-
items
|
|
17
|
-
} = cst.type === constants.Type.FLOW_MAP ? resolveFlowMapItems(doc, cst) : resolveBlockMapItems(doc, cst);
|
|
18
|
-
const map = new YAMLMap.YAMLMap(doc.schema);
|
|
19
|
-
map.items = items;
|
|
20
|
-
collectionUtils.resolveComments(map, comments);
|
|
21
|
-
|
|
22
|
-
for (let i = 0; i < items.length; ++i) {
|
|
23
|
-
const {
|
|
24
|
-
key: iKey
|
|
25
|
-
} = items[i];
|
|
26
|
-
|
|
27
|
-
if (doc.schema.merge && iKey && iKey.value === Merge.MERGE_KEY) {
|
|
28
|
-
items[i] = new Merge.Merge(items[i]);
|
|
29
|
-
const sources = items[i].value.items;
|
|
30
|
-
let error = null;
|
|
31
|
-
sources.some(node => {
|
|
32
|
-
if (node instanceof Alias.Alias) {
|
|
33
|
-
// During parsing, alias sources are CST nodes; to account for
|
|
34
|
-
// circular references their resolved values can't be used here.
|
|
35
|
-
const {
|
|
36
|
-
type
|
|
37
|
-
} = node.source;
|
|
38
|
-
if (type === constants.Type.MAP || type === constants.Type.FLOW_MAP) return false;
|
|
39
|
-
return error = 'Merge nodes aliases can only point to maps';
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return error = 'Merge nodes can only have Alias nodes as values';
|
|
43
|
-
});
|
|
44
|
-
if (error) doc.errors.push(new errors.YAMLSemanticError(cst, error));
|
|
45
|
-
} else {
|
|
46
|
-
for (let j = i + 1; j < items.length; ++j) {
|
|
47
|
-
const {
|
|
48
|
-
key: jKey
|
|
49
|
-
} = items[j];
|
|
50
|
-
|
|
51
|
-
if (iKey === jKey || iKey && jKey && Object.prototype.hasOwnProperty.call(iKey, 'value') && iKey.value === jKey.value) {
|
|
52
|
-
const msg = `Map keys must be unique; "${iKey}" is repeated`;
|
|
53
|
-
doc.errors.push(new errors.YAMLSemanticError(cst, msg));
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
cst.resolved = map;
|
|
61
|
-
return map;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const valueHasPairComment = ({
|
|
65
|
-
context: {
|
|
66
|
-
lineStart,
|
|
67
|
-
node,
|
|
68
|
-
src
|
|
69
|
-
},
|
|
70
|
-
props
|
|
71
|
-
}) => {
|
|
72
|
-
if (props.length === 0) return false;
|
|
73
|
-
const {
|
|
74
|
-
start
|
|
75
|
-
} = props[0];
|
|
76
|
-
if (node && start > node.valueRange.start) return false;
|
|
77
|
-
if (src[start] !== constants.Char.COMMENT) return false;
|
|
78
|
-
|
|
79
|
-
for (let i = lineStart; i < start; ++i) if (src[i] === '\n') return false;
|
|
80
|
-
|
|
81
|
-
return true;
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
function resolvePairComment(item, pair) {
|
|
85
|
-
if (!valueHasPairComment(item)) return;
|
|
86
|
-
const comment = item.getPropValue(0, constants.Char.COMMENT, true);
|
|
87
|
-
let found = false;
|
|
88
|
-
const cb = pair.value.commentBefore;
|
|
89
|
-
|
|
90
|
-
if (cb && cb.startsWith(comment)) {
|
|
91
|
-
pair.value.commentBefore = cb.substr(comment.length + 1);
|
|
92
|
-
found = true;
|
|
93
|
-
} else {
|
|
94
|
-
const cc = pair.value.comment;
|
|
95
|
-
|
|
96
|
-
if (!item.node && cc && cc.startsWith(comment)) {
|
|
97
|
-
pair.value.comment = cc.substr(comment.length + 1);
|
|
98
|
-
found = true;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
if (found) pair.comment = comment;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
function resolveBlockMapItems(doc, cst) {
|
|
106
|
-
const comments = [];
|
|
107
|
-
const items = [];
|
|
108
|
-
let key = undefined;
|
|
109
|
-
let keyStart = null;
|
|
110
|
-
|
|
111
|
-
for (let i = 0; i < cst.items.length; ++i) {
|
|
112
|
-
const item = cst.items[i];
|
|
113
|
-
|
|
114
|
-
switch (item.type) {
|
|
115
|
-
case constants.Type.BLANK_LINE:
|
|
116
|
-
comments.push({
|
|
117
|
-
afterKey: !!key,
|
|
118
|
-
before: items.length
|
|
119
|
-
});
|
|
120
|
-
break;
|
|
121
|
-
|
|
122
|
-
case constants.Type.COMMENT:
|
|
123
|
-
comments.push({
|
|
124
|
-
afterKey: !!key,
|
|
125
|
-
before: items.length,
|
|
126
|
-
comment: item.comment
|
|
127
|
-
});
|
|
128
|
-
break;
|
|
129
|
-
|
|
130
|
-
case constants.Type.MAP_KEY:
|
|
131
|
-
if (key !== undefined) items.push(new Pair.Pair(key));
|
|
132
|
-
if (item.error) doc.errors.push(item.error);
|
|
133
|
-
key = resolveNode.resolveNode(doc, item.node);
|
|
134
|
-
keyStart = null;
|
|
135
|
-
break;
|
|
136
|
-
|
|
137
|
-
case constants.Type.MAP_VALUE:
|
|
138
|
-
{
|
|
139
|
-
if (key === undefined) key = null;
|
|
140
|
-
if (item.error) doc.errors.push(item.error);
|
|
141
|
-
|
|
142
|
-
if (!item.context.atLineStart && item.node && item.node.type === constants.Type.MAP && !item.node.context.atLineStart) {
|
|
143
|
-
const msg = 'Nested mappings are not allowed in compact mappings';
|
|
144
|
-
doc.errors.push(new errors.YAMLSemanticError(item.node, msg));
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
let valueNode = item.node;
|
|
148
|
-
|
|
149
|
-
if (!valueNode && item.props.length > 0) {
|
|
150
|
-
// Comments on an empty mapping value need to be preserved, so we
|
|
151
|
-
// need to construct a minimal empty node here to use instead of the
|
|
152
|
-
// missing `item.node`. -- eemeli/yaml#19
|
|
153
|
-
valueNode = new PlainValue.PlainValue(constants.Type.PLAIN, []);
|
|
154
|
-
valueNode.context = {
|
|
155
|
-
parent: item,
|
|
156
|
-
src: item.context.src
|
|
157
|
-
};
|
|
158
|
-
const pos = item.range.start + 1;
|
|
159
|
-
valueNode.range = {
|
|
160
|
-
start: pos,
|
|
161
|
-
end: pos
|
|
162
|
-
};
|
|
163
|
-
valueNode.valueRange = {
|
|
164
|
-
start: pos,
|
|
165
|
-
end: pos
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
if (typeof item.range.origStart === 'number') {
|
|
169
|
-
const origPos = item.range.origStart + 1;
|
|
170
|
-
valueNode.range.origStart = valueNode.range.origEnd = origPos;
|
|
171
|
-
valueNode.valueRange.origStart = valueNode.valueRange.origEnd = origPos;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
const pair = new Pair.Pair(key, resolveNode.resolveNode(doc, valueNode));
|
|
176
|
-
resolvePairComment(item, pair);
|
|
177
|
-
items.push(pair);
|
|
178
|
-
|
|
179
|
-
if (key && typeof keyStart === 'number') {
|
|
180
|
-
if (item.range.start > keyStart + 1024) doc.errors.push(collectionUtils.getLongKeyError(cst, key));
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
key = undefined;
|
|
184
|
-
keyStart = null;
|
|
185
|
-
}
|
|
186
|
-
break;
|
|
187
|
-
|
|
188
|
-
default:
|
|
189
|
-
if (key !== undefined) items.push(new Pair.Pair(key));
|
|
190
|
-
key = resolveNode.resolveNode(doc, item);
|
|
191
|
-
keyStart = item.range.start;
|
|
192
|
-
if (item.error) doc.errors.push(item.error);
|
|
193
|
-
|
|
194
|
-
next: for (let j = i + 1;; ++j) {
|
|
195
|
-
const nextItem = cst.items[j];
|
|
196
|
-
|
|
197
|
-
switch (nextItem && nextItem.type) {
|
|
198
|
-
case constants.Type.BLANK_LINE:
|
|
199
|
-
case constants.Type.COMMENT:
|
|
200
|
-
continue next;
|
|
201
|
-
|
|
202
|
-
case constants.Type.MAP_VALUE:
|
|
203
|
-
break next;
|
|
204
|
-
|
|
205
|
-
default:
|
|
206
|
-
{
|
|
207
|
-
const msg = 'Implicit map keys need to be followed by map values';
|
|
208
|
-
doc.errors.push(new errors.YAMLSemanticError(item, msg));
|
|
209
|
-
break next;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
if (item.valueRangeContainsNewline) {
|
|
215
|
-
const msg = 'Implicit map keys need to be on a single line';
|
|
216
|
-
doc.errors.push(new errors.YAMLSemanticError(item, msg));
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
if (key !== undefined) items.push(new Pair.Pair(key));
|
|
223
|
-
return {
|
|
224
|
-
comments,
|
|
225
|
-
items
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
function resolveFlowMapItems(doc, cst) {
|
|
230
|
-
const comments = [];
|
|
231
|
-
const items = [];
|
|
232
|
-
let key = undefined;
|
|
233
|
-
let explicitKey = false;
|
|
234
|
-
let next = '{';
|
|
235
|
-
|
|
236
|
-
for (let i = 0; i < cst.items.length; ++i) {
|
|
237
|
-
const item = cst.items[i];
|
|
238
|
-
|
|
239
|
-
if (typeof item.char === 'string') {
|
|
240
|
-
const {
|
|
241
|
-
char,
|
|
242
|
-
offset
|
|
243
|
-
} = item;
|
|
244
|
-
|
|
245
|
-
if (char === '?' && key === undefined && !explicitKey) {
|
|
246
|
-
explicitKey = true;
|
|
247
|
-
next = ':';
|
|
248
|
-
continue;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
if (char === ':') {
|
|
252
|
-
if (key === undefined) key = null;
|
|
253
|
-
|
|
254
|
-
if (next === ':') {
|
|
255
|
-
next = ',';
|
|
256
|
-
continue;
|
|
257
|
-
}
|
|
258
|
-
} else {
|
|
259
|
-
if (explicitKey) {
|
|
260
|
-
if (key === undefined && char !== ',') key = null;
|
|
261
|
-
explicitKey = false;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
if (key !== undefined) {
|
|
265
|
-
items.push(new Pair.Pair(key));
|
|
266
|
-
key = undefined;
|
|
267
|
-
|
|
268
|
-
if (char === ',') {
|
|
269
|
-
next = ':';
|
|
270
|
-
continue;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
if (char === '}') {
|
|
276
|
-
if (i === cst.items.length - 1) continue;
|
|
277
|
-
} else if (char === next) {
|
|
278
|
-
next = ':';
|
|
279
|
-
continue;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
const msg = `Flow map contains an unexpected ${char}`;
|
|
283
|
-
const err = new errors.YAMLSyntaxError(cst, msg);
|
|
284
|
-
err.offset = offset;
|
|
285
|
-
doc.errors.push(err);
|
|
286
|
-
} else if (item.type === constants.Type.BLANK_LINE) {
|
|
287
|
-
comments.push({
|
|
288
|
-
afterKey: !!key,
|
|
289
|
-
before: items.length
|
|
290
|
-
});
|
|
291
|
-
} else if (item.type === constants.Type.COMMENT) {
|
|
292
|
-
collectionUtils.checkFlowCommentSpace(doc.errors, item);
|
|
293
|
-
comments.push({
|
|
294
|
-
afterKey: !!key,
|
|
295
|
-
before: items.length,
|
|
296
|
-
comment: item.comment
|
|
297
|
-
});
|
|
298
|
-
} else if (key === undefined) {
|
|
299
|
-
if (next === ',') doc.errors.push(new errors.YAMLSemanticError(item, 'Separator , missing in flow map'));
|
|
300
|
-
key = resolveNode.resolveNode(doc, item);
|
|
301
|
-
} else {
|
|
302
|
-
if (next !== ',') doc.errors.push(new errors.YAMLSemanticError(item, 'Indicator : missing in flow map entry'));
|
|
303
|
-
items.push(new Pair.Pair(key, resolveNode.resolveNode(doc, item)));
|
|
304
|
-
key = undefined;
|
|
305
|
-
explicitKey = false;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
collectionUtils.checkFlowCollectionEnd(doc.errors, cst);
|
|
310
|
-
if (key !== undefined) items.push(new Pair.Pair(key));
|
|
311
|
-
return {
|
|
312
|
-
comments,
|
|
313
|
-
items
|
|
314
|
-
};
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
exports.resolveMap = resolveMap;
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var Alias = require('../ast/Alias.js');
|
|
4
|
-
var constants = require('../constants.js');
|
|
5
|
-
var errors = require('../errors.js');
|
|
6
|
-
var resolveScalar = require('./resolveScalar.js');
|
|
7
|
-
var resolveTagName = require('./resolveTagName.js');
|
|
8
|
-
var resolveTag = require('./resolveTag.js');
|
|
9
|
-
|
|
10
|
-
const isCollectionItem = node => {
|
|
11
|
-
if (!node) return false;
|
|
12
|
-
const {
|
|
13
|
-
type
|
|
14
|
-
} = node;
|
|
15
|
-
return type === constants.Type.MAP_KEY || type === constants.Type.MAP_VALUE || type === constants.Type.SEQ_ITEM;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
function resolveNodeProps(errors$1, node) {
|
|
19
|
-
const comments = {
|
|
20
|
-
before: [],
|
|
21
|
-
after: []
|
|
22
|
-
};
|
|
23
|
-
let hasAnchor = false;
|
|
24
|
-
let hasTag = false;
|
|
25
|
-
const props = isCollectionItem(node.context.parent) ? node.context.parent.props.concat(node.props) : node.props;
|
|
26
|
-
|
|
27
|
-
for (const {
|
|
28
|
-
start,
|
|
29
|
-
end
|
|
30
|
-
} of props) {
|
|
31
|
-
switch (node.context.src[start]) {
|
|
32
|
-
case constants.Char.COMMENT:
|
|
33
|
-
{
|
|
34
|
-
if (!node.commentHasRequiredWhitespace(start)) {
|
|
35
|
-
const msg = 'Comments must be separated from other tokens by white space characters';
|
|
36
|
-
errors$1.push(new errors.YAMLSemanticError(node, msg));
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const {
|
|
40
|
-
header,
|
|
41
|
-
valueRange
|
|
42
|
-
} = node;
|
|
43
|
-
const cc = valueRange && (start > valueRange.start || header && start > header.start) ? comments.after : comments.before;
|
|
44
|
-
cc.push(node.context.src.slice(start + 1, end));
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
// Actual anchor & tag resolution is handled by schema, here we just complain
|
|
48
|
-
|
|
49
|
-
case constants.Char.ANCHOR:
|
|
50
|
-
if (hasAnchor) {
|
|
51
|
-
const msg = 'A node can have at most one anchor';
|
|
52
|
-
errors$1.push(new errors.YAMLSemanticError(node, msg));
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
hasAnchor = true;
|
|
56
|
-
break;
|
|
57
|
-
|
|
58
|
-
case constants.Char.TAG:
|
|
59
|
-
if (hasTag) {
|
|
60
|
-
const msg = 'A node can have at most one tag';
|
|
61
|
-
errors$1.push(new errors.YAMLSemanticError(node, msg));
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
hasTag = true;
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return {
|
|
70
|
-
comments,
|
|
71
|
-
hasAnchor,
|
|
72
|
-
hasTag
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function resolveNodeValue(doc, node) {
|
|
77
|
-
const {
|
|
78
|
-
anchors,
|
|
79
|
-
errors: errors$1,
|
|
80
|
-
schema
|
|
81
|
-
} = doc;
|
|
82
|
-
|
|
83
|
-
if (node.type === constants.Type.ALIAS) {
|
|
84
|
-
const name = node.rawValue;
|
|
85
|
-
const src = anchors.getNode(name);
|
|
86
|
-
|
|
87
|
-
if (!src) {
|
|
88
|
-
const msg = `Aliased anchor not found: ${name}`;
|
|
89
|
-
errors$1.push(new errors.YAMLReferenceError(node, msg));
|
|
90
|
-
return null;
|
|
91
|
-
} // Lazy resolution for circular references
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
const res = new Alias.Alias(src);
|
|
95
|
-
|
|
96
|
-
anchors._cstAliases.push(res);
|
|
97
|
-
|
|
98
|
-
return res;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const tagName = resolveTagName.resolveTagName(doc, node);
|
|
102
|
-
if (tagName) return resolveTag.resolveTag(doc, node, tagName);
|
|
103
|
-
|
|
104
|
-
if (node.type !== constants.Type.PLAIN) {
|
|
105
|
-
const msg = `Failed to resolve ${node.type} node here`;
|
|
106
|
-
errors$1.push(new errors.YAMLSyntaxError(node, msg));
|
|
107
|
-
return null;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
try {
|
|
111
|
-
let str = node.strValue || '';
|
|
112
|
-
|
|
113
|
-
if (typeof str !== 'string') {
|
|
114
|
-
str.errors.forEach(error => doc.errors.push(error));
|
|
115
|
-
str = str.str;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
return resolveScalar.resolveScalar(str, schema.tags);
|
|
119
|
-
} catch (error) {
|
|
120
|
-
if (!error.source) error.source = node;
|
|
121
|
-
errors$1.push(error);
|
|
122
|
-
return null;
|
|
123
|
-
}
|
|
124
|
-
} // sets node.resolved on success
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
function resolveNode(doc, node) {
|
|
128
|
-
if (!node) return null;
|
|
129
|
-
if (node.error) doc.errors.push(node.error);
|
|
130
|
-
const {
|
|
131
|
-
comments,
|
|
132
|
-
hasAnchor,
|
|
133
|
-
hasTag
|
|
134
|
-
} = resolveNodeProps(doc.errors, node);
|
|
135
|
-
|
|
136
|
-
if (hasAnchor) {
|
|
137
|
-
const {
|
|
138
|
-
anchors
|
|
139
|
-
} = doc;
|
|
140
|
-
const name = node.anchor;
|
|
141
|
-
const prev = anchors.getNode(name); // At this point, aliases for any preceding node with the same anchor
|
|
142
|
-
// name have already been resolved, so it may safely be renamed.
|
|
143
|
-
|
|
144
|
-
if (prev) anchors.map[anchors.newName(name)] = prev; // During parsing, we need to store the CST node in anchors.map as
|
|
145
|
-
// anchors need to be available during resolution to allow for
|
|
146
|
-
// circular references.
|
|
147
|
-
|
|
148
|
-
anchors.map[name] = node;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
if (node.type === constants.Type.ALIAS && (hasAnchor || hasTag)) {
|
|
152
|
-
const msg = 'An alias node must not specify any properties';
|
|
153
|
-
doc.errors.push(new errors.YAMLSemanticError(node, msg));
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const res = resolveNodeValue(doc, node);
|
|
157
|
-
|
|
158
|
-
if (res) {
|
|
159
|
-
res.range = [node.range.start, node.range.end];
|
|
160
|
-
if (doc.options.keepCstNodes) res.cstNode = node;
|
|
161
|
-
if (doc.options.keepNodeTypes) res.type = node.type;
|
|
162
|
-
const cb = comments.before.join('\n');
|
|
163
|
-
|
|
164
|
-
if (cb) {
|
|
165
|
-
res.commentBefore = res.commentBefore ? `${res.commentBefore}\n${cb}` : cb;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
const ca = comments.after.join('\n');
|
|
169
|
-
if (ca) res.comment = res.comment ? `${res.comment}\n${ca}` : ca;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
return node.resolved = res;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
exports.resolveNode = resolveNode;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var Scalar = require('../ast/Scalar.js');
|
|
4
|
-
|
|
5
|
-
function resolveScalar(str, tags) {
|
|
6
|
-
for (const {
|
|
7
|
-
format,
|
|
8
|
-
test,
|
|
9
|
-
resolve
|
|
10
|
-
} of tags) {
|
|
11
|
-
if (test && test.test(str)) {
|
|
12
|
-
let res = resolve(str);
|
|
13
|
-
if (!(res instanceof Scalar.Scalar)) res = new Scalar.Scalar(res);
|
|
14
|
-
if (format) res.format = format;
|
|
15
|
-
return res;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
return new Scalar.Scalar(str); // fallback to string
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
exports.resolveScalar = resolveScalar;
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var Pair = require('../ast/Pair.js');
|
|
4
|
-
var YAMLSeq = require('../ast/YAMLSeq.js');
|
|
5
|
-
var constants = require('../constants.js');
|
|
6
|
-
var errors = require('../errors.js');
|
|
7
|
-
var collectionUtils = require('./collection-utils.js');
|
|
8
|
-
var resolveNode = require('./resolveNode.js');
|
|
9
|
-
|
|
10
|
-
function resolveSeq(doc, cst) {
|
|
11
|
-
const {
|
|
12
|
-
comments,
|
|
13
|
-
items
|
|
14
|
-
} = cst.type === constants.Type.FLOW_SEQ ? resolveFlowSeqItems(doc, cst) : resolveBlockSeqItems(doc, cst);
|
|
15
|
-
const seq = new YAMLSeq.YAMLSeq(doc.schema);
|
|
16
|
-
seq.items = items;
|
|
17
|
-
collectionUtils.resolveComments(seq, comments);
|
|
18
|
-
cst.resolved = seq;
|
|
19
|
-
return seq;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function resolveBlockSeqItems(doc, cst) {
|
|
23
|
-
const comments = [];
|
|
24
|
-
const items = [];
|
|
25
|
-
|
|
26
|
-
for (let i = 0; i < cst.items.length; ++i) {
|
|
27
|
-
const item = cst.items[i];
|
|
28
|
-
|
|
29
|
-
switch (item.type) {
|
|
30
|
-
case constants.Type.BLANK_LINE:
|
|
31
|
-
comments.push({
|
|
32
|
-
before: items.length
|
|
33
|
-
});
|
|
34
|
-
break;
|
|
35
|
-
|
|
36
|
-
case constants.Type.COMMENT:
|
|
37
|
-
comments.push({
|
|
38
|
-
comment: item.comment,
|
|
39
|
-
before: items.length
|
|
40
|
-
});
|
|
41
|
-
break;
|
|
42
|
-
|
|
43
|
-
case constants.Type.SEQ_ITEM:
|
|
44
|
-
if (item.error) doc.errors.push(item.error);
|
|
45
|
-
items.push(resolveNode.resolveNode(doc, item.node));
|
|
46
|
-
|
|
47
|
-
if (item.hasProps) {
|
|
48
|
-
const msg = 'Sequence items cannot have tags or anchors before the - indicator';
|
|
49
|
-
doc.errors.push(new errors.YAMLSemanticError(item, msg));
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
break;
|
|
53
|
-
|
|
54
|
-
default:
|
|
55
|
-
if (item.error) doc.errors.push(item.error);
|
|
56
|
-
doc.errors.push(new errors.YAMLSyntaxError(item, `Unexpected ${item.type} node in sequence`));
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return {
|
|
61
|
-
comments,
|
|
62
|
-
items
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function resolveFlowSeqItems(doc, cst) {
|
|
67
|
-
const comments = [];
|
|
68
|
-
const items = [];
|
|
69
|
-
let explicitKey = false;
|
|
70
|
-
let key = undefined;
|
|
71
|
-
let keyStart = null;
|
|
72
|
-
let next = '[';
|
|
73
|
-
let prevItem = null;
|
|
74
|
-
|
|
75
|
-
for (let i = 0; i < cst.items.length; ++i) {
|
|
76
|
-
const item = cst.items[i];
|
|
77
|
-
|
|
78
|
-
if (typeof item.char === 'string') {
|
|
79
|
-
const {
|
|
80
|
-
char,
|
|
81
|
-
offset
|
|
82
|
-
} = item;
|
|
83
|
-
|
|
84
|
-
if (char !== ':' && (explicitKey || key !== undefined)) {
|
|
85
|
-
if (explicitKey && key === undefined) key = next ? items.pop() : null;
|
|
86
|
-
items.push(new Pair.Pair(key));
|
|
87
|
-
explicitKey = false;
|
|
88
|
-
key = undefined;
|
|
89
|
-
keyStart = null;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
if (char === next) {
|
|
93
|
-
next = null;
|
|
94
|
-
} else if (!next && char === '?') {
|
|
95
|
-
explicitKey = true;
|
|
96
|
-
} else if (next !== '[' && char === ':' && key === undefined) {
|
|
97
|
-
if (next === ',') {
|
|
98
|
-
key = items.pop();
|
|
99
|
-
|
|
100
|
-
if (key instanceof Pair.Pair) {
|
|
101
|
-
const msg = 'Chaining flow sequence pairs is invalid';
|
|
102
|
-
const err = new errors.YAMLSemanticError(cst, msg);
|
|
103
|
-
err.offset = offset;
|
|
104
|
-
doc.errors.push(err);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
if (!explicitKey && typeof keyStart === 'number') {
|
|
108
|
-
const keyEnd = item.range ? item.range.start : item.offset;
|
|
109
|
-
if (keyEnd > keyStart + 1024) doc.errors.push(collectionUtils.getLongKeyError(cst, key));
|
|
110
|
-
const {
|
|
111
|
-
src
|
|
112
|
-
} = prevItem.context;
|
|
113
|
-
|
|
114
|
-
for (let i = keyStart; i < keyEnd; ++i) if (src[i] === '\n') {
|
|
115
|
-
const msg = 'Implicit keys of flow sequence pairs need to be on a single line';
|
|
116
|
-
doc.errors.push(new errors.YAMLSemanticError(prevItem, msg));
|
|
117
|
-
break;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
} else {
|
|
121
|
-
key = null;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
keyStart = null;
|
|
125
|
-
explicitKey = false;
|
|
126
|
-
next = null;
|
|
127
|
-
} else if (next === '[' || char !== ']' || i < cst.items.length - 1) {
|
|
128
|
-
const msg = `Flow sequence contains an unexpected ${char}`;
|
|
129
|
-
const err = new errors.YAMLSyntaxError(cst, msg);
|
|
130
|
-
err.offset = offset;
|
|
131
|
-
doc.errors.push(err);
|
|
132
|
-
}
|
|
133
|
-
} else if (item.type === constants.Type.BLANK_LINE) {
|
|
134
|
-
comments.push({
|
|
135
|
-
before: items.length
|
|
136
|
-
});
|
|
137
|
-
} else if (item.type === constants.Type.COMMENT) {
|
|
138
|
-
collectionUtils.checkFlowCommentSpace(doc.errors, item);
|
|
139
|
-
comments.push({
|
|
140
|
-
comment: item.comment,
|
|
141
|
-
before: items.length
|
|
142
|
-
});
|
|
143
|
-
} else {
|
|
144
|
-
if (next) {
|
|
145
|
-
const msg = `Expected a ${next} in flow sequence`;
|
|
146
|
-
doc.errors.push(new errors.YAMLSemanticError(item, msg));
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
const value = resolveNode.resolveNode(doc, item);
|
|
150
|
-
|
|
151
|
-
if (key === undefined) {
|
|
152
|
-
items.push(value);
|
|
153
|
-
prevItem = item;
|
|
154
|
-
} else {
|
|
155
|
-
items.push(new Pair.Pair(key, value));
|
|
156
|
-
key = undefined;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
keyStart = item.range.start;
|
|
160
|
-
next = ',';
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
collectionUtils.checkFlowCollectionEnd(doc.errors, cst);
|
|
165
|
-
if (key !== undefined) items.push(new Pair.Pair(key));
|
|
166
|
-
return {
|
|
167
|
-
comments,
|
|
168
|
-
items
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
exports.resolveSeq = resolveSeq;
|