yaml 1.9.2 → 1.10.0
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 +4 -4
- package/browser/dist/PlainValue-ff5147c6.js +1277 -0
- package/browser/dist/Schema-2bf2c74e.js +679 -0
- package/browser/dist/index.js +869 -34
- package/browser/dist/legacy-exports.js +3 -0
- package/browser/dist/parse-cst.js +1904 -0
- package/browser/dist/resolveSeq-04825f30.js +2373 -0
- package/browser/dist/types.js +4 -0
- package/browser/dist/util.js +2 -0
- package/browser/dist/warnings-0e4b70d3.js +499 -0
- package/browser/index.js +1 -1
- package/browser/map.js +2 -4
- package/browser/pair.js +2 -4
- package/browser/parse-cst.js +1 -1
- package/browser/scalar.js +2 -4
- package/browser/schema.js +7 -10
- package/browser/seq.js +2 -4
- package/browser/types/binary.js +7 -5
- package/browser/types/omap.js +3 -4
- package/browser/types/pairs.js +3 -4
- package/browser/types/set.js +3 -4
- package/browser/types/timestamp.js +9 -5
- package/browser/types.js +1 -13
- package/browser/util.js +1 -18
- package/dist/Document-2cf6b08c.js +757 -0
- package/dist/PlainValue-ec8e588e.js +876 -0
- package/dist/Schema-42e9705c.js +522 -0
- package/dist/index.js +20 -84
- package/dist/legacy-exports.js +16 -0
- package/dist/parse-cst.js +1747 -0
- package/dist/resolveSeq-4a68b39b.js +2115 -0
- package/dist/test-events.js +11 -9
- package/dist/types.js +23 -0
- package/dist/util.js +19 -0
- package/dist/warnings-39684f17.js +416 -0
- package/index.d.ts +22 -8
- package/map.js +2 -2
- package/package.json +22 -39
- package/pair.js +2 -2
- package/parse-cst.js +1 -1
- package/scalar.js +2 -2
- package/schema.js +8 -6
- package/seq.js +2 -2
- package/types/binary.js +3 -2
- package/types/omap.js +3 -2
- package/types/pairs.js +3 -2
- package/types/set.js +3 -2
- package/types/timestamp.js +6 -6
- package/types.d.ts +113 -99
- package/types.js +16 -11
- package/types.mjs +15 -19
- package/util.js +14 -14
- package/util.mjs +13 -20
- package/browser/dist/Anchors.js +0 -130
- package/browser/dist/Document.js +0 -824
- package/browser/dist/addComment.js +0 -8
- package/browser/dist/constants.js +0 -26
- package/browser/dist/cst/Alias.js +0 -46
- package/browser/dist/cst/BlankLine.js +0 -52
- package/browser/dist/cst/BlockValue.js +0 -251
- package/browser/dist/cst/Collection.js +0 -278
- package/browser/dist/cst/CollectionItem.js +0 -140
- package/browser/dist/cst/Comment.js +0 -44
- package/browser/dist/cst/Directive.js +0 -76
- package/browser/dist/cst/Document.js +0 -286
- package/browser/dist/cst/FlowCollection.js +0 -220
- package/browser/dist/cst/Node.js +0 -386
- package/browser/dist/cst/ParseContext.js +0 -246
- package/browser/dist/cst/PlainValue.js +0 -170
- package/browser/dist/cst/QuoteDouble.js +0 -245
- package/browser/dist/cst/QuoteSingle.js +0 -120
- package/browser/dist/cst/Range.js +0 -64
- package/browser/dist/cst/parse.js +0 -48
- package/browser/dist/cst/source-utils.js +0 -168
- package/browser/dist/errors.js +0 -127
- package/browser/dist/foldFlowLines.js +0 -138
- package/browser/dist/listTagNames.js +0 -28
- package/browser/dist/schema/Alias.js +0 -135
- package/browser/dist/schema/Collection.js +0 -260
- package/browser/dist/schema/Map.js +0 -161
- package/browser/dist/schema/Merge.js +0 -118
- package/browser/dist/schema/Node.js +0 -4
- package/browser/dist/schema/Pair.js +0 -194
- package/browser/dist/schema/Scalar.js +0 -42
- package/browser/dist/schema/Seq.js +0 -116
- package/browser/dist/schema/index.js +0 -368
- package/browser/dist/schema/parseMap.js +0 -312
- package/browser/dist/schema/parseSeq.js +0 -168
- package/browser/dist/schema/parseUtils.js +0 -106
- package/browser/dist/stringify.js +0 -332
- package/browser/dist/tags/core.js +0 -141
- package/browser/dist/tags/failsafe/index.js +0 -4
- package/browser/dist/tags/failsafe/map.js +0 -53
- package/browser/dist/tags/failsafe/seq.js +0 -39
- package/browser/dist/tags/failsafe/string.js +0 -28
- package/browser/dist/tags/index.js +0 -36
- package/browser/dist/tags/json.js +0 -77
- package/browser/dist/tags/options.js +0 -26
- package/browser/dist/tags/yaml-1.1/binary.js +0 -87
- package/browser/dist/tags/yaml-1.1/index.js +0 -189
- package/browser/dist/tags/yaml-1.1/omap.js +0 -137
- package/browser/dist/tags/yaml-1.1/pairs.js +0 -78
- package/browser/dist/tags/yaml-1.1/set.js +0 -118
- package/browser/dist/tags/yaml-1.1/timestamp.js +0 -97
- package/browser/dist/test-events.js +0 -163
- package/browser/dist/toJSON.js +0 -19
- package/browser/dist/warnings.js +0 -39
- package/dist/Anchors.js +0 -120
- package/dist/Document.js +0 -714
- package/dist/addComment.js +0 -14
- package/dist/constants.js +0 -31
- package/dist/cst/Alias.js +0 -33
- package/dist/cst/BlankLine.js +0 -40
- package/dist/cst/BlockValue.js +0 -243
- package/dist/cst/Collection.js +0 -266
- package/dist/cst/CollectionItem.js +0 -135
- package/dist/cst/Comment.js +0 -33
- package/dist/cst/Directive.js +0 -59
- package/dist/cst/Document.js +0 -276
- package/dist/cst/FlowCollection.js +0 -213
- package/dist/cst/Node.js +0 -360
- package/dist/cst/ParseContext.js +0 -253
- package/dist/cst/PlainValue.js +0 -156
- package/dist/cst/QuoteDouble.js +0 -232
- package/dist/cst/QuoteSingle.js +0 -108
- package/dist/cst/Range.js +0 -60
- package/dist/cst/parse.js +0 -50
- package/dist/cst/source-utils.js +0 -175
- package/dist/errors.js +0 -97
- package/dist/foldFlowLines.js +0 -143
- package/dist/listTagNames.js +0 -33
- package/dist/schema/Alias.js +0 -105
- package/dist/schema/Collection.js +0 -184
- package/dist/schema/Map.js +0 -98
- package/dist/schema/Merge.js +0 -75
- package/dist/schema/Node.js +0 -7
- package/dist/schema/Pair.js +0 -174
- package/dist/schema/Scalar.js +0 -26
- package/dist/schema/Seq.js +0 -73
- package/dist/schema/index.js +0 -310
- package/dist/schema/parseMap.js +0 -334
- package/dist/schema/parseSeq.js +0 -175
- package/dist/schema/parseUtils.js +0 -101
- package/dist/stringify.js +0 -352
- package/dist/tags/core.js +0 -121
- package/dist/tags/failsafe/index.js +0 -12
- package/dist/tags/failsafe/map.js +0 -32
- package/dist/tags/failsafe/seq.js +0 -29
- package/dist/tags/failsafe/string.js +0 -37
- package/dist/tags/index.js +0 -53
- package/dist/tags/json.js +0 -64
- package/dist/tags/options.js +0 -36
- package/dist/tags/yaml-1.1/binary.js +0 -94
- package/dist/tags/yaml-1.1/index.js +0 -162
- package/dist/tags/yaml-1.1/omap.js +0 -100
- package/dist/tags/yaml-1.1/pairs.js +0 -75
- package/dist/tags/yaml-1.1/set.js +0 -82
- package/dist/tags/yaml-1.1/timestamp.js +0 -90
- package/dist/toJSON.js +0 -21
- package/dist/warnings.js +0 -48
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
import { Type } from '../constants';
|
|
2
|
-
import { YAMLSemanticError, YAMLSyntaxError, YAMLWarning } from '../errors';
|
|
3
|
-
import { Pair } from './Pair';
|
|
4
|
-
import { checkFlowCollectionEnd, checkKeyLength, resolveComments } from './parseUtils';
|
|
5
|
-
import { YAMLSeq } from './Seq';
|
|
6
|
-
import { Collection } from './Collection';
|
|
7
|
-
export function parseSeq(doc, cst) {
|
|
8
|
-
if (cst.type !== Type.SEQ && cst.type !== Type.FLOW_SEQ) {
|
|
9
|
-
var msg = "A ".concat(cst.type, " node cannot be resolved as a sequence");
|
|
10
|
-
doc.errors.push(new YAMLSyntaxError(cst, msg));
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
var _ref = cst.type === Type.FLOW_SEQ ? resolveFlowSeqItems(doc, cst) : resolveBlockSeqItems(doc, cst),
|
|
15
|
-
comments = _ref.comments,
|
|
16
|
-
items = _ref.items;
|
|
17
|
-
|
|
18
|
-
var seq = new YAMLSeq();
|
|
19
|
-
seq.items = items;
|
|
20
|
-
resolveComments(seq, comments);
|
|
21
|
-
|
|
22
|
-
if (!doc.options.mapAsMap && items.some(function (it) {
|
|
23
|
-
return it instanceof Pair && it.key instanceof Collection;
|
|
24
|
-
})) {
|
|
25
|
-
var warn = 'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.';
|
|
26
|
-
doc.warnings.push(new YAMLWarning(cst, warn));
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
cst.resolved = seq;
|
|
30
|
-
return seq;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function resolveBlockSeqItems(doc, cst) {
|
|
34
|
-
var comments = [];
|
|
35
|
-
var items = [];
|
|
36
|
-
|
|
37
|
-
for (var i = 0; i < cst.items.length; ++i) {
|
|
38
|
-
var item = cst.items[i];
|
|
39
|
-
|
|
40
|
-
switch (item.type) {
|
|
41
|
-
case Type.BLANK_LINE:
|
|
42
|
-
comments.push({
|
|
43
|
-
before: items.length
|
|
44
|
-
});
|
|
45
|
-
break;
|
|
46
|
-
|
|
47
|
-
case Type.COMMENT:
|
|
48
|
-
comments.push({
|
|
49
|
-
comment: item.comment,
|
|
50
|
-
before: items.length
|
|
51
|
-
});
|
|
52
|
-
break;
|
|
53
|
-
|
|
54
|
-
case Type.SEQ_ITEM:
|
|
55
|
-
if (item.error) doc.errors.push(item.error);
|
|
56
|
-
items.push(doc.resolveNode(item.node));
|
|
57
|
-
|
|
58
|
-
if (item.hasProps) {
|
|
59
|
-
var msg = 'Sequence items cannot have tags or anchors before the - indicator';
|
|
60
|
-
doc.errors.push(new YAMLSemanticError(item, msg));
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
break;
|
|
64
|
-
|
|
65
|
-
default:
|
|
66
|
-
if (item.error) doc.errors.push(item.error);
|
|
67
|
-
doc.errors.push(new YAMLSyntaxError(item, "Unexpected ".concat(item.type, " node in sequence")));
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return {
|
|
72
|
-
comments: comments,
|
|
73
|
-
items: items
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function resolveFlowSeqItems(doc, cst) {
|
|
78
|
-
var comments = [];
|
|
79
|
-
var items = [];
|
|
80
|
-
var explicitKey = false;
|
|
81
|
-
var key = undefined;
|
|
82
|
-
var keyStart = null;
|
|
83
|
-
var next = '[';
|
|
84
|
-
|
|
85
|
-
for (var i = 0; i < cst.items.length; ++i) {
|
|
86
|
-
var item = cst.items[i];
|
|
87
|
-
|
|
88
|
-
if (typeof item.char === 'string') {
|
|
89
|
-
var char = item.char,
|
|
90
|
-
offset = item.offset;
|
|
91
|
-
|
|
92
|
-
if (char !== ':' && (explicitKey || key !== undefined)) {
|
|
93
|
-
if (explicitKey && key === undefined) key = next ? items.pop() : null;
|
|
94
|
-
items.push(new Pair(key));
|
|
95
|
-
explicitKey = false;
|
|
96
|
-
key = undefined;
|
|
97
|
-
keyStart = null;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
if (char === next) {
|
|
101
|
-
next = null;
|
|
102
|
-
} else if (!next && char === '?') {
|
|
103
|
-
explicitKey = true;
|
|
104
|
-
} else if (next !== '[' && char === ':' && key === undefined) {
|
|
105
|
-
if (next === ',') {
|
|
106
|
-
key = items.pop();
|
|
107
|
-
|
|
108
|
-
if (key instanceof Pair) {
|
|
109
|
-
var msg = 'Chaining flow sequence pairs is invalid';
|
|
110
|
-
var err = new YAMLSemanticError(cst, msg);
|
|
111
|
-
err.offset = offset;
|
|
112
|
-
doc.errors.push(err);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
if (!explicitKey) checkKeyLength(doc.errors, cst, i, key, keyStart);
|
|
116
|
-
} else {
|
|
117
|
-
key = null;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
keyStart = null;
|
|
121
|
-
explicitKey = false; // TODO: add error for non-explicit multiline plain key
|
|
122
|
-
|
|
123
|
-
next = null;
|
|
124
|
-
} else if (next === '[' || char !== ']' || i < cst.items.length - 1) {
|
|
125
|
-
var _msg = "Flow sequence contains an unexpected ".concat(char);
|
|
126
|
-
|
|
127
|
-
var _err = new YAMLSyntaxError(cst, _msg);
|
|
128
|
-
|
|
129
|
-
_err.offset = offset;
|
|
130
|
-
doc.errors.push(_err);
|
|
131
|
-
}
|
|
132
|
-
} else if (item.type === Type.BLANK_LINE) {
|
|
133
|
-
comments.push({
|
|
134
|
-
before: items.length
|
|
135
|
-
});
|
|
136
|
-
} else if (item.type === Type.COMMENT) {
|
|
137
|
-
comments.push({
|
|
138
|
-
comment: item.comment,
|
|
139
|
-
before: items.length
|
|
140
|
-
});
|
|
141
|
-
} else {
|
|
142
|
-
if (next) {
|
|
143
|
-
var _msg2 = "Expected a ".concat(next, " in flow sequence");
|
|
144
|
-
|
|
145
|
-
doc.errors.push(new YAMLSemanticError(item, _msg2));
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
var value = doc.resolveNode(item);
|
|
149
|
-
|
|
150
|
-
if (key === undefined) {
|
|
151
|
-
items.push(value);
|
|
152
|
-
} else {
|
|
153
|
-
items.push(new Pair(key, value));
|
|
154
|
-
key = undefined;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
keyStart = item.range.start;
|
|
158
|
-
next = ',';
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
checkFlowCollectionEnd(doc.errors, cst);
|
|
163
|
-
if (key !== undefined) items.push(new Pair(key));
|
|
164
|
-
return {
|
|
165
|
-
comments: comments,
|
|
166
|
-
items: items
|
|
167
|
-
};
|
|
168
|
-
}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
2
|
-
|
|
3
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
-
|
|
5
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
6
|
-
|
|
7
|
-
import { YAMLSemanticError } from '../errors';
|
|
8
|
-
import { Type } from '../constants';
|
|
9
|
-
export function checkFlowCollectionEnd(errors, cst) {
|
|
10
|
-
var char, name;
|
|
11
|
-
|
|
12
|
-
switch (cst.type) {
|
|
13
|
-
case Type.FLOW_MAP:
|
|
14
|
-
char = '}';
|
|
15
|
-
name = 'flow map';
|
|
16
|
-
break;
|
|
17
|
-
|
|
18
|
-
case Type.FLOW_SEQ:
|
|
19
|
-
char = ']';
|
|
20
|
-
name = 'flow sequence';
|
|
21
|
-
break;
|
|
22
|
-
|
|
23
|
-
default:
|
|
24
|
-
errors.push(new YAMLSemanticError(cst, 'Not a flow collection!?'));
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
var lastItem;
|
|
29
|
-
|
|
30
|
-
for (var i = cst.items.length - 1; i >= 0; --i) {
|
|
31
|
-
var item = cst.items[i];
|
|
32
|
-
|
|
33
|
-
if (!item || item.type !== Type.COMMENT) {
|
|
34
|
-
lastItem = item;
|
|
35
|
-
break;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (lastItem && lastItem.char !== char) {
|
|
40
|
-
var msg = "Expected ".concat(name, " to end with ").concat(char);
|
|
41
|
-
var err;
|
|
42
|
-
|
|
43
|
-
if (typeof lastItem.offset === 'number') {
|
|
44
|
-
err = new YAMLSemanticError(cst, msg);
|
|
45
|
-
err.offset = lastItem.offset + 1;
|
|
46
|
-
} else {
|
|
47
|
-
err = new YAMLSemanticError(lastItem, msg);
|
|
48
|
-
if (lastItem.range && lastItem.range.end) err.offset = lastItem.range.end - lastItem.range.start;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
errors.push(err);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
export function checkKeyLength(errors, node, itemIdx, key, keyStart) {
|
|
55
|
-
if (!key || typeof keyStart !== 'number') return;
|
|
56
|
-
var item = node.items[itemIdx];
|
|
57
|
-
var keyEnd = item && item.range && item.range.start;
|
|
58
|
-
|
|
59
|
-
if (!keyEnd) {
|
|
60
|
-
for (var i = itemIdx - 1; i >= 0; --i) {
|
|
61
|
-
var it = node.items[i];
|
|
62
|
-
|
|
63
|
-
if (it && it.range) {
|
|
64
|
-
keyEnd = it.range.end + 2 * (itemIdx - i);
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
if (keyEnd > keyStart + 1024) {
|
|
71
|
-
var k = String(key).substr(0, 8) + '...' + String(key).substr(-8);
|
|
72
|
-
errors.push(new YAMLSemanticError(node, "The \"".concat(k, "\" key is too long")));
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
export function resolveComments(collection, comments) {
|
|
76
|
-
var _iterator = _createForOfIteratorHelper(comments),
|
|
77
|
-
_step;
|
|
78
|
-
|
|
79
|
-
try {
|
|
80
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
81
|
-
var _step$value = _step.value,
|
|
82
|
-
afterKey = _step$value.afterKey,
|
|
83
|
-
before = _step$value.before,
|
|
84
|
-
comment = _step$value.comment;
|
|
85
|
-
var item = collection.items[before];
|
|
86
|
-
|
|
87
|
-
if (!item) {
|
|
88
|
-
if (comment !== undefined) {
|
|
89
|
-
if (collection.comment) collection.comment += '\n' + comment;else collection.comment = comment;
|
|
90
|
-
}
|
|
91
|
-
} else {
|
|
92
|
-
if (afterKey && item.value) item = item.value;
|
|
93
|
-
|
|
94
|
-
if (comment === undefined) {
|
|
95
|
-
if (afterKey || !item.commentBefore) item.spaceBefore = true;
|
|
96
|
-
} else {
|
|
97
|
-
if (item.commentBefore) item.commentBefore += '\n' + comment;else item.commentBefore = comment;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
} catch (err) {
|
|
102
|
-
_iterator.e(err);
|
|
103
|
-
} finally {
|
|
104
|
-
_iterator.f();
|
|
105
|
-
}
|
|
106
|
-
}
|
|
@@ -1,332 +0,0 @@
|
|
|
1
|
-
import { addCommentBefore } from './addComment';
|
|
2
|
-
import { Type } from './constants';
|
|
3
|
-
import { foldFlowLines, FOLD_BLOCK, FOLD_FLOW, FOLD_QUOTED } from './foldFlowLines';
|
|
4
|
-
import { strOptions } from './tags/options';
|
|
5
|
-
|
|
6
|
-
var getFoldOptions = function getFoldOptions(_ref) {
|
|
7
|
-
var indentAtStart = _ref.indentAtStart;
|
|
8
|
-
return indentAtStart ? Object.assign({
|
|
9
|
-
indentAtStart: indentAtStart
|
|
10
|
-
}, strOptions.fold) : strOptions.fold;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export function stringifyNumber(_ref2) {
|
|
14
|
-
var format = _ref2.format,
|
|
15
|
-
minFractionDigits = _ref2.minFractionDigits,
|
|
16
|
-
tag = _ref2.tag,
|
|
17
|
-
value = _ref2.value;
|
|
18
|
-
if (typeof value === 'bigint') return String(value);
|
|
19
|
-
if (!isFinite(value)) return isNaN(value) ? '.nan' : value < 0 ? '-.inf' : '.inf';
|
|
20
|
-
var n = JSON.stringify(value);
|
|
21
|
-
|
|
22
|
-
if (!format && minFractionDigits && (!tag || tag === 'tag:yaml.org,2002:float') && /^\d/.test(n)) {
|
|
23
|
-
var i = n.indexOf('.');
|
|
24
|
-
|
|
25
|
-
if (i < 0) {
|
|
26
|
-
i = n.length;
|
|
27
|
-
n += '.';
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
var d = minFractionDigits - (n.length - i - 1);
|
|
31
|
-
|
|
32
|
-
while (d-- > 0) {
|
|
33
|
-
n += '0';
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return n;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function lineLengthOverLimit(str, limit) {
|
|
41
|
-
var strLen = str.length;
|
|
42
|
-
if (strLen <= limit) return false;
|
|
43
|
-
|
|
44
|
-
for (var i = 0, start = 0; i < strLen; ++i) {
|
|
45
|
-
if (str[i] === '\n') {
|
|
46
|
-
if (i - start > limit) return true;
|
|
47
|
-
start = i + 1;
|
|
48
|
-
if (strLen - start <= limit) return false;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
function doubleQuotedString(value, ctx) {
|
|
56
|
-
var implicitKey = ctx.implicitKey,
|
|
57
|
-
indent = ctx.indent;
|
|
58
|
-
var _strOptions$doubleQuo = strOptions.doubleQuoted,
|
|
59
|
-
jsonEncoding = _strOptions$doubleQuo.jsonEncoding,
|
|
60
|
-
minMultiLineLength = _strOptions$doubleQuo.minMultiLineLength;
|
|
61
|
-
var json = JSON.stringify(value);
|
|
62
|
-
if (jsonEncoding) return json;
|
|
63
|
-
var str = '';
|
|
64
|
-
var start = 0;
|
|
65
|
-
|
|
66
|
-
for (var i = 0, ch = json[i]; ch; ch = json[++i]) {
|
|
67
|
-
if (ch === ' ' && json[i + 1] === '\\' && json[i + 2] === 'n') {
|
|
68
|
-
// space before newline needs to be escaped to not be folded
|
|
69
|
-
str += json.slice(start, i) + '\\ ';
|
|
70
|
-
i += 1;
|
|
71
|
-
start = i;
|
|
72
|
-
ch = '\\';
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (ch === '\\') switch (json[i + 1]) {
|
|
76
|
-
case 'u':
|
|
77
|
-
{
|
|
78
|
-
str += json.slice(start, i);
|
|
79
|
-
var code = json.substr(i + 2, 4);
|
|
80
|
-
|
|
81
|
-
switch (code) {
|
|
82
|
-
case '0000':
|
|
83
|
-
str += '\\0';
|
|
84
|
-
break;
|
|
85
|
-
|
|
86
|
-
case '0007':
|
|
87
|
-
str += '\\a';
|
|
88
|
-
break;
|
|
89
|
-
|
|
90
|
-
case '000b':
|
|
91
|
-
str += '\\v';
|
|
92
|
-
break;
|
|
93
|
-
|
|
94
|
-
case '001b':
|
|
95
|
-
str += '\\e';
|
|
96
|
-
break;
|
|
97
|
-
|
|
98
|
-
case '0085':
|
|
99
|
-
str += '\\N';
|
|
100
|
-
break;
|
|
101
|
-
|
|
102
|
-
case '00a0':
|
|
103
|
-
str += '\\_';
|
|
104
|
-
break;
|
|
105
|
-
|
|
106
|
-
case '2028':
|
|
107
|
-
str += '\\L';
|
|
108
|
-
break;
|
|
109
|
-
|
|
110
|
-
case '2029':
|
|
111
|
-
str += '\\P';
|
|
112
|
-
break;
|
|
113
|
-
|
|
114
|
-
default:
|
|
115
|
-
if (code.substr(0, 2) === '00') str += '\\x' + code.substr(2);else str += json.substr(i, 6);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
i += 5;
|
|
119
|
-
start = i + 1;
|
|
120
|
-
}
|
|
121
|
-
break;
|
|
122
|
-
|
|
123
|
-
case 'n':
|
|
124
|
-
if (implicitKey || json[i + 2] === '"' || json.length < minMultiLineLength) {
|
|
125
|
-
i += 1;
|
|
126
|
-
} else {
|
|
127
|
-
// folding will eat first newline
|
|
128
|
-
str += json.slice(start, i) + '\n\n';
|
|
129
|
-
|
|
130
|
-
while (json[i + 2] === '\\' && json[i + 3] === 'n' && json[i + 4] !== '"') {
|
|
131
|
-
str += '\n';
|
|
132
|
-
i += 2;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
str += indent; // space after newline needs to be escaped to not be folded
|
|
136
|
-
|
|
137
|
-
if (json[i + 2] === ' ') str += '\\';
|
|
138
|
-
i += 1;
|
|
139
|
-
start = i + 1;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
break;
|
|
143
|
-
|
|
144
|
-
default:
|
|
145
|
-
i += 1;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
str = start ? str + json.slice(start) : json;
|
|
150
|
-
return implicitKey ? str : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx));
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
function singleQuotedString(value, ctx) {
|
|
154
|
-
var indent = ctx.indent,
|
|
155
|
-
implicitKey = ctx.implicitKey;
|
|
156
|
-
|
|
157
|
-
if (implicitKey) {
|
|
158
|
-
if (/\n/.test(value)) return doubleQuotedString(value, ctx);
|
|
159
|
-
} else {
|
|
160
|
-
// single quoted string can't have leading or trailing whitespace around newline
|
|
161
|
-
if (/[ \t]\n|\n[ \t]/.test(value)) return doubleQuotedString(value, ctx);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
var res = "'" + value.replace(/'/g, "''").replace(/\n+/g, "$&\n".concat(indent)) + "'";
|
|
165
|
-
return implicitKey ? res : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx));
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
function blockString(_ref3, ctx, onComment, onChompKeep) {
|
|
169
|
-
var comment = _ref3.comment,
|
|
170
|
-
type = _ref3.type,
|
|
171
|
-
value = _ref3.value;
|
|
172
|
-
|
|
173
|
-
// 1. Block can't end in whitespace unless the last line is non-empty.
|
|
174
|
-
// 2. Strings consisting of only whitespace are best rendered explicitly.
|
|
175
|
-
if (/\n[\t ]+$/.test(value) || /^\s*$/.test(value)) {
|
|
176
|
-
return doubleQuotedString(value, ctx);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
var indent = ctx.indent || (ctx.forceBlockIndent ? ' ' : '');
|
|
180
|
-
var indentSize = indent ? '2' : '1'; // root is at -1
|
|
181
|
-
|
|
182
|
-
var literal = type === Type.BLOCK_FOLDED ? false : type === Type.BLOCK_LITERAL ? true : !lineLengthOverLimit(value, strOptions.fold.lineWidth - indent.length);
|
|
183
|
-
var header = literal ? '|' : '>';
|
|
184
|
-
if (!value) return header + '\n';
|
|
185
|
-
var wsStart = '';
|
|
186
|
-
var wsEnd = '';
|
|
187
|
-
value = value.replace(/[\n\t ]*$/, function (ws) {
|
|
188
|
-
var n = ws.indexOf('\n');
|
|
189
|
-
|
|
190
|
-
if (n === -1) {
|
|
191
|
-
header += '-'; // strip
|
|
192
|
-
} else if (value === ws || n !== ws.length - 1) {
|
|
193
|
-
header += '+'; // keep
|
|
194
|
-
|
|
195
|
-
if (onChompKeep) onChompKeep();
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
wsEnd = ws.replace(/\n$/, '');
|
|
199
|
-
return '';
|
|
200
|
-
}).replace(/^[\n ]*/, function (ws) {
|
|
201
|
-
if (ws.indexOf(' ') !== -1) header += indentSize;
|
|
202
|
-
var m = ws.match(/ +$/);
|
|
203
|
-
|
|
204
|
-
if (m) {
|
|
205
|
-
wsStart = ws.slice(0, -m[0].length);
|
|
206
|
-
return m[0];
|
|
207
|
-
} else {
|
|
208
|
-
wsStart = ws;
|
|
209
|
-
return '';
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
if (wsEnd) wsEnd = wsEnd.replace(/\n+(?!\n|$)/g, "$&".concat(indent));
|
|
213
|
-
if (wsStart) wsStart = wsStart.replace(/\n+/g, "$&".concat(indent));
|
|
214
|
-
|
|
215
|
-
if (comment) {
|
|
216
|
-
header += ' #' + comment.replace(/ ?[\r\n]+/g, ' ');
|
|
217
|
-
if (onComment) onComment();
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
if (!value) return "".concat(header).concat(indentSize, "\n").concat(indent).concat(wsEnd);
|
|
221
|
-
|
|
222
|
-
if (literal) {
|
|
223
|
-
value = value.replace(/\n+/g, "$&".concat(indent));
|
|
224
|
-
return "".concat(header, "\n").concat(indent).concat(wsStart).concat(value).concat(wsEnd);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
value = value.replace(/\n+/g, '\n$&').replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, '$1$2') // more-indented lines aren't folded
|
|
228
|
-
// ^ ind.line ^ empty ^ capture next empty lines only at end of indent
|
|
229
|
-
.replace(/\n+/g, "$&".concat(indent));
|
|
230
|
-
var body = foldFlowLines("".concat(wsStart).concat(value).concat(wsEnd), indent, FOLD_BLOCK, strOptions.fold);
|
|
231
|
-
return "".concat(header, "\n").concat(indent).concat(body);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
function plainString(item, ctx, onComment, onChompKeep) {
|
|
235
|
-
var comment = item.comment,
|
|
236
|
-
type = item.type,
|
|
237
|
-
value = item.value;
|
|
238
|
-
var actualString = ctx.actualString,
|
|
239
|
-
implicitKey = ctx.implicitKey,
|
|
240
|
-
indent = ctx.indent,
|
|
241
|
-
inFlow = ctx.inFlow,
|
|
242
|
-
tags = ctx.tags;
|
|
243
|
-
|
|
244
|
-
if (implicitKey && /[\n[\]{},]/.test(value) || inFlow && /[[\]{},]/.test(value)) {
|
|
245
|
-
return doubleQuotedString(value, ctx);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
if (!value || /^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(value)) {
|
|
249
|
-
// not allowed:
|
|
250
|
-
// - empty string, '-' or '?'
|
|
251
|
-
// - start with an indicator character (except [?:-]) or /[?-] /
|
|
252
|
-
// - '\n ', ': ' or ' \n' anywhere
|
|
253
|
-
// - '#' not preceded by a non-space char
|
|
254
|
-
// - end with ' ' or ':'
|
|
255
|
-
return implicitKey || inFlow || value.indexOf('\n') === -1 ? value.indexOf('"') !== -1 && value.indexOf("'") === -1 ? singleQuotedString(value, ctx) : doubleQuotedString(value, ctx) : blockString(item, ctx, onComment, onChompKeep);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
if (!implicitKey && !inFlow && type !== Type.PLAIN && value.indexOf('\n') !== -1) {
|
|
259
|
-
// Where allowed & type not set explicitly, prefer block style for multiline strings
|
|
260
|
-
return blockString(item, ctx, onComment, onChompKeep);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
var str = value.replace(/\n+/g, "$&\n".concat(indent)); // Verify that output will be parsed as a string, as e.g. plain numbers and
|
|
264
|
-
// booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),
|
|
265
|
-
// and others in v1.1.
|
|
266
|
-
|
|
267
|
-
if (actualString && typeof tags.resolveScalar(str).value !== 'string') {
|
|
268
|
-
return doubleQuotedString(value, ctx);
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
var body = implicitKey ? str : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx));
|
|
272
|
-
|
|
273
|
-
if (comment && !inFlow && (body.indexOf('\n') !== -1 || comment.indexOf('\n') !== -1)) {
|
|
274
|
-
if (onComment) onComment();
|
|
275
|
-
return addCommentBefore(body, indent, comment);
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
return body;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
export function stringifyString(item, ctx, onComment, onChompKeep) {
|
|
282
|
-
var defaultType = strOptions.defaultType;
|
|
283
|
-
var implicitKey = ctx.implicitKey,
|
|
284
|
-
inFlow = ctx.inFlow;
|
|
285
|
-
var _item = item,
|
|
286
|
-
type = _item.type,
|
|
287
|
-
value = _item.value;
|
|
288
|
-
|
|
289
|
-
if (typeof value !== 'string') {
|
|
290
|
-
value = String(value);
|
|
291
|
-
item = Object.assign({}, item, {
|
|
292
|
-
value: value
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
var _stringify = function _stringify(_type) {
|
|
297
|
-
switch (_type) {
|
|
298
|
-
case Type.BLOCK_FOLDED:
|
|
299
|
-
case Type.BLOCK_LITERAL:
|
|
300
|
-
return blockString(item, ctx, onComment, onChompKeep);
|
|
301
|
-
|
|
302
|
-
case Type.QUOTE_DOUBLE:
|
|
303
|
-
return doubleQuotedString(value, ctx);
|
|
304
|
-
|
|
305
|
-
case Type.QUOTE_SINGLE:
|
|
306
|
-
return singleQuotedString(value, ctx);
|
|
307
|
-
|
|
308
|
-
case Type.PLAIN:
|
|
309
|
-
return plainString(item, ctx, onComment, onChompKeep);
|
|
310
|
-
|
|
311
|
-
default:
|
|
312
|
-
return null;
|
|
313
|
-
}
|
|
314
|
-
};
|
|
315
|
-
|
|
316
|
-
if (type !== Type.QUOTE_DOUBLE && /[\x00-\x08\x0b-\x1f\x7f-\x9f]/.test(value)) {
|
|
317
|
-
// force double quotes on control characters
|
|
318
|
-
type = Type.QUOTE_DOUBLE;
|
|
319
|
-
} else if ((implicitKey || inFlow) && (type === Type.BLOCK_FOLDED || type === Type.BLOCK_LITERAL)) {
|
|
320
|
-
// should not happen; blocks are not valid inside flow containers
|
|
321
|
-
type = Type.QUOTE_DOUBLE;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
var res = _stringify(type);
|
|
325
|
-
|
|
326
|
-
if (res === null) {
|
|
327
|
-
res = _stringify(defaultType);
|
|
328
|
-
if (res === null) throw new Error("Unsupported default string type ".concat(defaultType));
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
return res;
|
|
332
|
-
}
|