yaml 1.9.1 → 1.10.2

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.
Files changed (162) hide show
  1. package/README.md +25 -25
  2. package/browser/dist/PlainValue-b8036b75.js +1275 -0
  3. package/browser/dist/Schema-e94716c8.js +682 -0
  4. package/browser/dist/index.js +860 -27
  5. package/browser/dist/legacy-exports.js +3 -0
  6. package/browser/dist/package.json +1 -0
  7. package/browser/dist/parse-cst.js +1904 -0
  8. package/browser/dist/resolveSeq-492ab440.js +2419 -0
  9. package/browser/dist/types.js +4 -0
  10. package/browser/dist/util.js +2 -0
  11. package/browser/dist/warnings-df54cb69.js +499 -0
  12. package/browser/index.js +1 -1
  13. package/browser/map.js +2 -4
  14. package/browser/pair.js +2 -4
  15. package/browser/parse-cst.js +1 -1
  16. package/browser/scalar.js +2 -4
  17. package/browser/schema.js +7 -10
  18. package/browser/seq.js +2 -4
  19. package/browser/types/binary.js +7 -5
  20. package/browser/types/omap.js +3 -4
  21. package/browser/types/pairs.js +3 -4
  22. package/browser/types/set.js +3 -4
  23. package/browser/types/timestamp.js +9 -5
  24. package/browser/types.js +1 -13
  25. package/browser/util.js +1 -18
  26. package/dist/Document-9b4560a1.js +757 -0
  27. package/dist/PlainValue-ec8e588e.js +876 -0
  28. package/dist/Schema-88e323a7.js +525 -0
  29. package/dist/index.js +20 -84
  30. package/dist/legacy-exports.js +16 -0
  31. package/dist/parse-cst.js +1753 -0
  32. package/dist/resolveSeq-d03cb037.js +2161 -0
  33. package/dist/test-events.js +11 -9
  34. package/dist/types.js +23 -0
  35. package/dist/util.js +19 -0
  36. package/dist/warnings-1000a372.js +416 -0
  37. package/index.d.ts +23 -9
  38. package/map.js +2 -2
  39. package/package.json +27 -42
  40. package/pair.js +2 -2
  41. package/parse-cst.d.ts +4 -0
  42. package/parse-cst.js +1 -1
  43. package/scalar.js +2 -2
  44. package/schema.js +8 -6
  45. package/seq.js +2 -2
  46. package/types/binary.js +3 -2
  47. package/types/omap.js +3 -2
  48. package/types/pairs.js +3 -2
  49. package/types/set.js +3 -2
  50. package/types/timestamp.js +6 -6
  51. package/types.d.ts +113 -98
  52. package/types.js +16 -11
  53. package/types.mjs +15 -19
  54. package/util.js +14 -14
  55. package/util.mjs +13 -20
  56. package/browser/dist/Anchors.js +0 -130
  57. package/browser/dist/Document.js +0 -824
  58. package/browser/dist/addComment.js +0 -8
  59. package/browser/dist/constants.js +0 -26
  60. package/browser/dist/cst/Alias.js +0 -46
  61. package/browser/dist/cst/BlankLine.js +0 -52
  62. package/browser/dist/cst/BlockValue.js +0 -251
  63. package/browser/dist/cst/Collection.js +0 -278
  64. package/browser/dist/cst/CollectionItem.js +0 -140
  65. package/browser/dist/cst/Comment.js +0 -44
  66. package/browser/dist/cst/Directive.js +0 -76
  67. package/browser/dist/cst/Document.js +0 -286
  68. package/browser/dist/cst/FlowCollection.js +0 -220
  69. package/browser/dist/cst/Node.js +0 -386
  70. package/browser/dist/cst/ParseContext.js +0 -246
  71. package/browser/dist/cst/PlainValue.js +0 -170
  72. package/browser/dist/cst/QuoteDouble.js +0 -245
  73. package/browser/dist/cst/QuoteSingle.js +0 -120
  74. package/browser/dist/cst/Range.js +0 -64
  75. package/browser/dist/cst/parse.js +0 -48
  76. package/browser/dist/cst/source-utils.js +0 -168
  77. package/browser/dist/errors.js +0 -127
  78. package/browser/dist/foldFlowLines.js +0 -138
  79. package/browser/dist/listTagNames.js +0 -28
  80. package/browser/dist/schema/Alias.js +0 -135
  81. package/browser/dist/schema/Collection.js +0 -260
  82. package/browser/dist/schema/Map.js +0 -161
  83. package/browser/dist/schema/Merge.js +0 -118
  84. package/browser/dist/schema/Node.js +0 -4
  85. package/browser/dist/schema/Pair.js +0 -194
  86. package/browser/dist/schema/Scalar.js +0 -42
  87. package/browser/dist/schema/Seq.js +0 -116
  88. package/browser/dist/schema/index.js +0 -368
  89. package/browser/dist/schema/parseMap.js +0 -312
  90. package/browser/dist/schema/parseSeq.js +0 -168
  91. package/browser/dist/schema/parseUtils.js +0 -106
  92. package/browser/dist/stringify.js +0 -332
  93. package/browser/dist/tags/core.js +0 -141
  94. package/browser/dist/tags/failsafe/index.js +0 -4
  95. package/browser/dist/tags/failsafe/map.js +0 -53
  96. package/browser/dist/tags/failsafe/seq.js +0 -39
  97. package/browser/dist/tags/failsafe/string.js +0 -28
  98. package/browser/dist/tags/index.js +0 -36
  99. package/browser/dist/tags/json.js +0 -77
  100. package/browser/dist/tags/options.js +0 -26
  101. package/browser/dist/tags/yaml-1.1/binary.js +0 -87
  102. package/browser/dist/tags/yaml-1.1/index.js +0 -189
  103. package/browser/dist/tags/yaml-1.1/omap.js +0 -137
  104. package/browser/dist/tags/yaml-1.1/pairs.js +0 -78
  105. package/browser/dist/tags/yaml-1.1/set.js +0 -118
  106. package/browser/dist/tags/yaml-1.1/timestamp.js +0 -97
  107. package/browser/dist/test-events.js +0 -163
  108. package/browser/dist/toJSON.js +0 -19
  109. package/browser/dist/warnings.js +0 -39
  110. package/dist/Anchors.js +0 -120
  111. package/dist/Document.js +0 -714
  112. package/dist/addComment.js +0 -14
  113. package/dist/constants.js +0 -31
  114. package/dist/cst/Alias.js +0 -33
  115. package/dist/cst/BlankLine.js +0 -40
  116. package/dist/cst/BlockValue.js +0 -243
  117. package/dist/cst/Collection.js +0 -266
  118. package/dist/cst/CollectionItem.js +0 -135
  119. package/dist/cst/Comment.js +0 -33
  120. package/dist/cst/Directive.js +0 -59
  121. package/dist/cst/Document.js +0 -276
  122. package/dist/cst/FlowCollection.js +0 -213
  123. package/dist/cst/Node.js +0 -360
  124. package/dist/cst/ParseContext.js +0 -253
  125. package/dist/cst/PlainValue.js +0 -156
  126. package/dist/cst/QuoteDouble.js +0 -232
  127. package/dist/cst/QuoteSingle.js +0 -108
  128. package/dist/cst/Range.js +0 -60
  129. package/dist/cst/parse.js +0 -50
  130. package/dist/cst/source-utils.js +0 -175
  131. package/dist/errors.js +0 -97
  132. package/dist/foldFlowLines.js +0 -143
  133. package/dist/listTagNames.js +0 -33
  134. package/dist/schema/Alias.js +0 -105
  135. package/dist/schema/Collection.js +0 -184
  136. package/dist/schema/Map.js +0 -98
  137. package/dist/schema/Merge.js +0 -75
  138. package/dist/schema/Node.js +0 -7
  139. package/dist/schema/Pair.js +0 -174
  140. package/dist/schema/Scalar.js +0 -26
  141. package/dist/schema/Seq.js +0 -73
  142. package/dist/schema/index.js +0 -310
  143. package/dist/schema/parseMap.js +0 -334
  144. package/dist/schema/parseSeq.js +0 -175
  145. package/dist/schema/parseUtils.js +0 -101
  146. package/dist/stringify.js +0 -352
  147. package/dist/tags/core.js +0 -121
  148. package/dist/tags/failsafe/index.js +0 -12
  149. package/dist/tags/failsafe/map.js +0 -32
  150. package/dist/tags/failsafe/seq.js +0 -29
  151. package/dist/tags/failsafe/string.js +0 -37
  152. package/dist/tags/index.js +0 -53
  153. package/dist/tags/json.js +0 -64
  154. package/dist/tags/options.js +0 -36
  155. package/dist/tags/yaml-1.1/binary.js +0 -94
  156. package/dist/tags/yaml-1.1/index.js +0 -162
  157. package/dist/tags/yaml-1.1/omap.js +0 -100
  158. package/dist/tags/yaml-1.1/pairs.js +0 -75
  159. package/dist/tags/yaml-1.1/set.js +0 -82
  160. package/dist/tags/yaml-1.1/timestamp.js +0 -90
  161. package/dist/toJSON.js +0 -21
  162. 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
- }