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