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,14 +0,0 @@
1
- "use strict";
2
-
3
- exports.addCommentBefore = addCommentBefore;
4
- exports.addComment = addComment;
5
-
6
- function addCommentBefore(str, indent, comment) {
7
- if (!comment) return str;
8
- const cc = comment.replace(/[\s\S]^/gm, `$&${indent}#`);
9
- return `#${cc}\n${indent}${str}`;
10
- }
11
-
12
- function addComment(str, indent, comment) {
13
- return !comment ? str : comment.indexOf('\n') === -1 ? `${str} #${comment}` : `${str}\n` + comment.replace(/^/gm, `${indent || ''}#`);
14
- }
package/dist/constants.js DELETED
@@ -1,31 +0,0 @@
1
- "use strict";
2
-
3
- exports.Type = exports.Char = void 0;
4
- const Char = {
5
- ANCHOR: '&',
6
- COMMENT: '#',
7
- TAG: '!',
8
- DIRECTIVES_END: '-',
9
- DOCUMENT_END: '.'
10
- };
11
- exports.Char = Char;
12
- const Type = {
13
- ALIAS: 'ALIAS',
14
- BLANK_LINE: 'BLANK_LINE',
15
- BLOCK_FOLDED: 'BLOCK_FOLDED',
16
- BLOCK_LITERAL: 'BLOCK_LITERAL',
17
- COMMENT: 'COMMENT',
18
- DIRECTIVE: 'DIRECTIVE',
19
- DOCUMENT: 'DOCUMENT',
20
- FLOW_MAP: 'FLOW_MAP',
21
- FLOW_SEQ: 'FLOW_SEQ',
22
- MAP: 'MAP',
23
- MAP_KEY: 'MAP_KEY',
24
- MAP_VALUE: 'MAP_VALUE',
25
- PLAIN: 'PLAIN',
26
- QUOTE_DOUBLE: 'QUOTE_DOUBLE',
27
- QUOTE_SINGLE: 'QUOTE_SINGLE',
28
- SEQ: 'SEQ',
29
- SEQ_ITEM: 'SEQ_ITEM'
30
- };
31
- exports.Type = Type;
package/dist/cst/Alias.js DELETED
@@ -1,33 +0,0 @@
1
- "use strict";
2
-
3
- exports.Alias = void 0;
4
-
5
- var _Node = require("./Node");
6
-
7
- var _Range = require("./Range");
8
-
9
- class Alias extends _Node.Node {
10
- /**
11
- * Parses an *alias from the source
12
- *
13
- * @param {ParseContext} context
14
- * @param {number} start - Index of first character
15
- * @returns {number} - Index of the character after this scalar
16
- */
17
- parse(context, start) {
18
- this.context = context;
19
- const {
20
- src
21
- } = context;
22
-
23
- let offset = _Node.Node.endOfIdentifier(src, start + 1);
24
-
25
- this.valueRange = new _Range.Range(start + 1, offset);
26
- offset = _Node.Node.endOfWhiteSpace(src, offset);
27
- offset = this.parseComment(offset);
28
- return offset;
29
- }
30
-
31
- }
32
-
33
- exports.Alias = Alias;
@@ -1,40 +0,0 @@
1
- "use strict";
2
-
3
- exports.BlankLine = void 0;
4
-
5
- var _constants = require("../constants");
6
-
7
- var _Node = require("./Node");
8
-
9
- var _Range = require("./Range");
10
-
11
- class BlankLine extends _Node.Node {
12
- constructor() {
13
- super(_constants.Type.BLANK_LINE);
14
- }
15
- /* istanbul ignore next */
16
-
17
-
18
- get includesTrailingLines() {
19
- // This is never called from anywhere, but if it were,
20
- // this is the value it should return.
21
- return true;
22
- }
23
- /**
24
- * Parses a blank line from the source
25
- *
26
- * @param {ParseContext} context
27
- * @param {number} start - Index of first \n character
28
- * @returns {number} - Index of the character after this
29
- */
30
-
31
-
32
- parse(context, start) {
33
- this.context = context;
34
- this.range = new _Range.Range(start, start + 1);
35
- return start + 1;
36
- }
37
-
38
- }
39
-
40
- exports.BlankLine = BlankLine;
@@ -1,243 +0,0 @@
1
- "use strict";
2
-
3
- exports.BlockValue = exports.Chomp = void 0;
4
-
5
- var _constants = require("../constants");
6
-
7
- var _Node = require("./Node");
8
-
9
- var _Range = require("./Range");
10
-
11
- const Chomp = {
12
- CLIP: 'CLIP',
13
- KEEP: 'KEEP',
14
- STRIP: 'STRIP'
15
- };
16
- exports.Chomp = Chomp;
17
-
18
- class BlockValue extends _Node.Node {
19
- constructor(type, props) {
20
- super(type, props);
21
- this.blockIndent = null;
22
- this.chomping = Chomp.CLIP;
23
- this.header = null;
24
- }
25
-
26
- get includesTrailingLines() {
27
- return this.chomping === Chomp.KEEP;
28
- }
29
-
30
- get strValue() {
31
- if (!this.valueRange || !this.context) return null;
32
- let {
33
- start,
34
- end
35
- } = this.valueRange;
36
- const {
37
- indent,
38
- src
39
- } = this.context;
40
- if (this.valueRange.isEmpty()) return '';
41
- let lastNewLine = null;
42
- let ch = src[end - 1];
43
-
44
- while (ch === '\n' || ch === '\t' || ch === ' ') {
45
- end -= 1;
46
-
47
- if (end <= start) {
48
- if (this.chomping === Chomp.KEEP) break;else return ''; // probably never happens
49
- }
50
-
51
- if (ch === '\n') lastNewLine = end;
52
- ch = src[end - 1];
53
- }
54
-
55
- let keepStart = end + 1;
56
-
57
- if (lastNewLine) {
58
- if (this.chomping === Chomp.KEEP) {
59
- keepStart = lastNewLine;
60
- end = this.valueRange.end;
61
- } else {
62
- end = lastNewLine;
63
- }
64
- }
65
-
66
- const bi = indent + this.blockIndent;
67
- const folded = this.type === _constants.Type.BLOCK_FOLDED;
68
- let atStart = true;
69
- let str = '';
70
- let sep = '';
71
- let prevMoreIndented = false;
72
-
73
- for (let i = start; i < end; ++i) {
74
- for (let j = 0; j < bi; ++j) {
75
- if (src[i] !== ' ') break;
76
- i += 1;
77
- }
78
-
79
- const ch = src[i];
80
-
81
- if (ch === '\n') {
82
- if (sep === '\n') str += '\n';else sep = '\n';
83
- } else {
84
- const lineEnd = _Node.Node.endOfLine(src, i);
85
-
86
- const line = src.slice(i, lineEnd);
87
- i = lineEnd;
88
-
89
- if (folded && (ch === ' ' || ch === '\t') && i < keepStart) {
90
- if (sep === ' ') sep = '\n';else if (!prevMoreIndented && !atStart && sep === '\n') sep = '\n\n';
91
- str += sep + line; //+ ((lineEnd < end && src[lineEnd]) || '')
92
-
93
- sep = lineEnd < end && src[lineEnd] || '';
94
- prevMoreIndented = true;
95
- } else {
96
- str += sep + line;
97
- sep = folded && i < keepStart ? ' ' : '\n';
98
- prevMoreIndented = false;
99
- }
100
-
101
- if (atStart && line !== '') atStart = false;
102
- }
103
- }
104
-
105
- return this.chomping === Chomp.STRIP ? str : str + '\n';
106
- }
107
-
108
- parseBlockHeader(start) {
109
- const {
110
- src
111
- } = this.context;
112
- let offset = start + 1;
113
- let bi = '';
114
-
115
- while (true) {
116
- const ch = src[offset];
117
-
118
- switch (ch) {
119
- case '-':
120
- this.chomping = Chomp.STRIP;
121
- break;
122
-
123
- case '+':
124
- this.chomping = Chomp.KEEP;
125
- break;
126
-
127
- case '0':
128
- case '1':
129
- case '2':
130
- case '3':
131
- case '4':
132
- case '5':
133
- case '6':
134
- case '7':
135
- case '8':
136
- case '9':
137
- bi += ch;
138
- break;
139
-
140
- default:
141
- this.blockIndent = Number(bi) || null;
142
- this.header = new _Range.Range(start, offset);
143
- return offset;
144
- }
145
-
146
- offset += 1;
147
- }
148
- }
149
-
150
- parseBlockValue(start) {
151
- const {
152
- indent,
153
- src
154
- } = this.context;
155
- let offset = start;
156
- let valueEnd = start;
157
- let bi = this.blockIndent ? indent + this.blockIndent - 1 : indent;
158
- let minBlockIndent = 1;
159
-
160
- for (let ch = src[offset]; ch === '\n'; ch = src[offset]) {
161
- offset += 1;
162
- if (_Node.Node.atDocumentBoundary(src, offset)) break;
163
-
164
- const end = _Node.Node.endOfBlockIndent(src, bi, offset); // should not include tab?
165
-
166
-
167
- if (end === null) break;
168
-
169
- if (!this.blockIndent) {
170
- // no explicit block indent, none yet detected
171
- const lineIndent = end - (offset + indent);
172
-
173
- if (src[end] !== '\n') {
174
- // first line with non-whitespace content
175
- if (lineIndent < minBlockIndent) {
176
- offset -= 1;
177
- break;
178
- }
179
-
180
- this.blockIndent = lineIndent;
181
- bi = indent + this.blockIndent - 1;
182
- } else if (lineIndent > minBlockIndent) {
183
- // empty line with more whitespace
184
- minBlockIndent = lineIndent;
185
- }
186
- }
187
-
188
- if (src[end] === '\n') {
189
- offset = end;
190
- } else {
191
- offset = valueEnd = _Node.Node.endOfLine(src, end);
192
- }
193
- }
194
-
195
- if (this.chomping !== Chomp.KEEP) {
196
- offset = src[valueEnd] ? valueEnd + 1 : valueEnd;
197
- }
198
-
199
- this.valueRange = new _Range.Range(start + 1, offset);
200
- return offset;
201
- }
202
- /**
203
- * Parses a block value from the source
204
- *
205
- * Accepted forms are:
206
- * ```
207
- * BS
208
- * block
209
- * lines
210
- *
211
- * BS #comment
212
- * block
213
- * lines
214
- * ```
215
- * where the block style BS matches the regexp `[|>][-+1-9]*` and block lines
216
- * are empty or have an indent level greater than `indent`.
217
- *
218
- * @param {ParseContext} context
219
- * @param {number} start - Index of first character
220
- * @returns {number} - Index of the character after this block
221
- */
222
-
223
-
224
- parse(context, start) {
225
- this.context = context;
226
- const {
227
- src
228
- } = context;
229
- let offset = this.parseBlockHeader(start);
230
- offset = _Node.Node.endOfWhiteSpace(src, offset);
231
- offset = this.parseComment(offset);
232
- offset = this.parseBlockValue(offset);
233
- return offset;
234
- }
235
-
236
- setOrigRanges(cr, offset) {
237
- offset = super.setOrigRanges(cr, offset);
238
- return this.header ? this.header.setOrigRange(cr, offset) : offset;
239
- }
240
-
241
- }
242
-
243
- exports.BlockValue = BlockValue;
@@ -1,266 +0,0 @@
1
- "use strict";
2
-
3
- exports.grabCollectionEndComments = grabCollectionEndComments;
4
- exports.Collection = void 0;
5
-
6
- var _constants = require("../constants");
7
-
8
- var _BlankLine = require("./BlankLine");
9
-
10
- var _CollectionItem = require("./CollectionItem");
11
-
12
- var _Comment = require("./Comment");
13
-
14
- var _Node = require("./Node");
15
-
16
- var _Range = require("./Range");
17
-
18
- function grabCollectionEndComments(node) {
19
- let cnode = node;
20
-
21
- while (cnode instanceof _CollectionItem.CollectionItem) cnode = cnode.node;
22
-
23
- if (!(cnode instanceof Collection)) return null;
24
- const len = cnode.items.length;
25
- let ci = -1;
26
-
27
- for (let i = len - 1; i >= 0; --i) {
28
- const n = cnode.items[i];
29
-
30
- if (n.type === _constants.Type.COMMENT) {
31
- // Keep sufficiently indented comments with preceding node
32
- const {
33
- indent,
34
- lineStart
35
- } = n.context;
36
- if (indent > 0 && n.range.start >= lineStart + indent) break;
37
- ci = i;
38
- } else if (n.type === _constants.Type.BLANK_LINE) ci = i;else break;
39
- }
40
-
41
- if (ci === -1) return null;
42
- const ca = cnode.items.splice(ci, len - ci);
43
- const prevEnd = ca[0].range.start;
44
-
45
- while (true) {
46
- cnode.range.end = prevEnd;
47
- if (cnode.valueRange && cnode.valueRange.end > prevEnd) cnode.valueRange.end = prevEnd;
48
- if (cnode === node) break;
49
- cnode = cnode.context.parent;
50
- }
51
-
52
- return ca;
53
- }
54
-
55
- class Collection extends _Node.Node {
56
- static nextContentHasIndent(src, offset, indent) {
57
- const lineStart = _Node.Node.endOfLine(src, offset) + 1;
58
- offset = _Node.Node.endOfWhiteSpace(src, lineStart);
59
- const ch = src[offset];
60
- if (!ch) return false;
61
- if (offset >= lineStart + indent) return true;
62
- if (ch !== '#' && ch !== '\n') return false;
63
- return Collection.nextContentHasIndent(src, offset, indent);
64
- }
65
-
66
- constructor(firstItem) {
67
- super(firstItem.type === _constants.Type.SEQ_ITEM ? _constants.Type.SEQ : _constants.Type.MAP);
68
-
69
- for (let i = firstItem.props.length - 1; i >= 0; --i) {
70
- if (firstItem.props[i].start < firstItem.context.lineStart) {
71
- // props on previous line are assumed by the collection
72
- this.props = firstItem.props.slice(0, i + 1);
73
- firstItem.props = firstItem.props.slice(i + 1);
74
- const itemRange = firstItem.props[0] || firstItem.valueRange;
75
- firstItem.range.start = itemRange.start;
76
- break;
77
- }
78
- }
79
-
80
- this.items = [firstItem];
81
- const ec = grabCollectionEndComments(firstItem);
82
- if (ec) Array.prototype.push.apply(this.items, ec);
83
- }
84
-
85
- get includesTrailingLines() {
86
- return this.items.length > 0;
87
- }
88
- /**
89
- * @param {ParseContext} context
90
- * @param {number} start - Index of first character
91
- * @returns {number} - Index of the character after this
92
- */
93
-
94
-
95
- parse(context, start) {
96
- this.context = context;
97
- const {
98
- parseNode,
99
- src
100
- } = context; // It's easier to recalculate lineStart here rather than tracking down the
101
- // last context from which to read it -- eemeli/yaml#2
102
-
103
- let lineStart = _Node.Node.startOfLine(src, start);
104
-
105
- const firstItem = this.items[0]; // First-item context needs to be correct for later comment handling
106
- // -- eemeli/yaml#17
107
-
108
- firstItem.context.parent = this;
109
- this.valueRange = _Range.Range.copy(firstItem.valueRange);
110
- const indent = firstItem.range.start - firstItem.context.lineStart;
111
- let offset = start;
112
- offset = _Node.Node.normalizeOffset(src, offset);
113
- let ch = src[offset];
114
- let atLineStart = _Node.Node.endOfWhiteSpace(src, lineStart) === offset;
115
- let prevIncludesTrailingLines = false;
116
-
117
- while (ch) {
118
- while (ch === '\n' || ch === '#') {
119
- if (atLineStart && ch === '\n' && !prevIncludesTrailingLines) {
120
- const blankLine = new _BlankLine.BlankLine();
121
- offset = blankLine.parse({
122
- src
123
- }, offset);
124
- this.valueRange.end = offset;
125
-
126
- if (offset >= src.length) {
127
- ch = null;
128
- break;
129
- }
130
-
131
- this.items.push(blankLine);
132
- offset -= 1; // blankLine.parse() consumes terminal newline
133
- } else if (ch === '#') {
134
- if (offset < lineStart + indent && !Collection.nextContentHasIndent(src, offset, indent)) {
135
- return offset;
136
- }
137
-
138
- const comment = new _Comment.Comment();
139
- offset = comment.parse({
140
- indent,
141
- lineStart,
142
- src
143
- }, offset);
144
- this.items.push(comment);
145
- this.valueRange.end = offset;
146
-
147
- if (offset >= src.length) {
148
- ch = null;
149
- break;
150
- }
151
- }
152
-
153
- lineStart = offset + 1;
154
- offset = _Node.Node.endOfIndent(src, lineStart);
155
-
156
- if (_Node.Node.atBlank(src, offset)) {
157
- const wsEnd = _Node.Node.endOfWhiteSpace(src, offset);
158
-
159
- const next = src[wsEnd];
160
-
161
- if (!next || next === '\n' || next === '#') {
162
- offset = wsEnd;
163
- }
164
- }
165
-
166
- ch = src[offset];
167
- atLineStart = true;
168
- }
169
-
170
- if (!ch) {
171
- break;
172
- }
173
-
174
- if (offset !== lineStart + indent && (atLineStart || ch !== ':')) {
175
- if (lineStart > start) offset = lineStart;
176
- break;
177
- }
178
-
179
- if (firstItem.type === _constants.Type.SEQ_ITEM !== (ch === '-')) {
180
- let typeswitch = true;
181
-
182
- if (ch === '-') {
183
- // map key may start with -, as long as it's followed by a non-whitespace char
184
- const next = src[offset + 1];
185
- typeswitch = !next || next === '\n' || next === '\t' || next === ' ';
186
- }
187
-
188
- if (typeswitch) {
189
- if (lineStart > start) offset = lineStart;
190
- break;
191
- }
192
- }
193
-
194
- const node = parseNode({
195
- atLineStart,
196
- inCollection: true,
197
- indent,
198
- lineStart,
199
- parent: this
200
- }, offset);
201
- if (!node) return offset; // at next document start
202
-
203
- this.items.push(node);
204
- this.valueRange.end = node.valueRange.end;
205
- offset = _Node.Node.normalizeOffset(src, node.range.end);
206
- ch = src[offset];
207
- atLineStart = false;
208
- prevIncludesTrailingLines = node.includesTrailingLines; // Need to reset lineStart and atLineStart here if preceding node's range
209
- // has advanced to check the current line's indentation level
210
- // -- eemeli/yaml#10 & eemeli/yaml#38
211
-
212
- if (ch) {
213
- let ls = offset - 1;
214
- let prev = src[ls];
215
-
216
- while (prev === ' ' || prev === '\t') prev = src[--ls];
217
-
218
- if (prev === '\n') {
219
- lineStart = ls + 1;
220
- atLineStart = true;
221
- }
222
- }
223
-
224
- const ec = grabCollectionEndComments(node);
225
- if (ec) Array.prototype.push.apply(this.items, ec);
226
- }
227
-
228
- return offset;
229
- }
230
-
231
- setOrigRanges(cr, offset) {
232
- offset = super.setOrigRanges(cr, offset);
233
- this.items.forEach(node => {
234
- offset = node.setOrigRanges(cr, offset);
235
- });
236
- return offset;
237
- }
238
-
239
- toString() {
240
- const {
241
- context: {
242
- src
243
- },
244
- items,
245
- range,
246
- value
247
- } = this;
248
- if (value != null) return value;
249
- let str = src.slice(range.start, items[0].range.start) + String(items[0]);
250
-
251
- for (let i = 1; i < items.length; ++i) {
252
- const item = items[i];
253
- const {
254
- atLineStart,
255
- indent
256
- } = item.context;
257
- if (atLineStart) for (let i = 0; i < indent; ++i) str += ' ';
258
- str += String(item);
259
- }
260
-
261
- return _Node.Node.addStringTerminator(src, range.end, str);
262
- }
263
-
264
- }
265
-
266
- exports.Collection = Collection;