yaml 1.8.3 → 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 +923 -38
- 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 -2
- package/browser/pair.js +2 -2
- package/browser/parse-cst.js +1 -1
- package/browser/scalar.js +2 -2
- package/browser/schema.js +8 -6
- package/browser/seq.js +2 -2
- package/browser/types/binary.js +3 -2
- package/browser/types/omap.js +3 -2
- package/browser/types/pairs.js +3 -2
- package/browser/types/set.js +3 -2
- package/browser/types/timestamp.js +6 -6
- package/browser/types.js +1 -11
- package/browser/util.js +1 -15
- 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 +21 -43
- 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 -14
- package/dist/types.js +23 -0
- package/dist/util.js +19 -0
- package/dist/warnings-39684f17.js +416 -0
- package/index.d.ts +372 -0
- package/index.js +1 -1
- package/map.js +2 -2
- package/package.json +32 -45
- package/pair.js +2 -2
- package/parse-cst.d.ts +187 -0
- 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 +407 -0
- package/types.js +16 -10
- package/types.mjs +15 -18
- package/util.d.ts +86 -0
- package/util.js +14 -13
- package/util.mjs +13 -19
- package/browser/dist/Anchors.js +0 -133
- package/browser/dist/Document.js +0 -819
- package/browser/dist/addComment.js +0 -8
- package/browser/dist/constants.js +0 -26
- package/browser/dist/cst/Alias.js +0 -42
- package/browser/dist/cst/BlankLine.js +0 -56
- package/browser/dist/cst/BlockValue.js +0 -247
- package/browser/dist/cst/Collection.js +0 -274
- package/browser/dist/cst/CollectionItem.js +0 -136
- package/browser/dist/cst/Comment.js +0 -40
- package/browser/dist/cst/Directive.js +0 -72
- package/browser/dist/cst/Document.js +0 -282
- package/browser/dist/cst/FlowCollection.js +0 -216
- package/browser/dist/cst/Node.js +0 -388
- package/browser/dist/cst/ParseContext.js +0 -248
- package/browser/dist/cst/PlainValue.js +0 -166
- package/browser/dist/cst/QuoteDouble.js +0 -241
- package/browser/dist/cst/QuoteSingle.js +0 -116
- package/browser/dist/cst/Range.js +0 -67
- package/browser/dist/cst/parse.js +0 -48
- package/browser/dist/cst/source-utils.js +0 -168
- package/browser/dist/errors.js +0 -112
- package/browser/dist/foldFlowLines.js +0 -138
- package/browser/dist/listTagNames.js +0 -28
- package/browser/dist/schema/Alias.js +0 -139
- package/browser/dist/schema/Collection.js +0 -267
- package/browser/dist/schema/Map.js +0 -178
- package/browser/dist/schema/Merge.js +0 -127
- package/browser/dist/schema/Node.js +0 -7
- package/browser/dist/schema/Pair.js +0 -171
- package/browser/dist/schema/Scalar.js +0 -38
- package/browser/dist/schema/Seq.js +0 -114
- package/browser/dist/schema/index.js +0 -382
- package/browser/dist/schema/parseMap.js +0 -312
- package/browser/dist/schema/parseSeq.js +0 -168
- package/browser/dist/schema/parseUtils.js +0 -110
- package/browser/dist/stringify.js +0 -331
- package/browser/dist/tags/core.js +0 -126
- package/browser/dist/tags/failsafe/index.js +0 -4
- package/browser/dist/tags/failsafe/map.js +0 -56
- package/browser/dist/tags/failsafe/seq.js +0 -43
- package/browser/dist/tags/failsafe/string.js +0 -28
- package/browser/dist/tags/index.js +0 -36
- package/browser/dist/tags/json.js +0 -76
- package/browser/dist/tags/options.js +0 -23
- package/browser/dist/tags/yaml-1.1/binary.js +0 -87
- package/browser/dist/tags/yaml-1.1/index.js +0 -157
- package/browser/dist/tags/yaml-1.1/omap.js +0 -142
- package/browser/dist/tags/yaml-1.1/pairs.js +0 -81
- package/browser/dist/tags/yaml-1.1/set.js +0 -114
- 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 -20
- package/browser/dist/warnings.js +0 -28
- package/dist/Anchors.js +0 -125
- package/dist/Document.js +0 -710
- package/dist/addComment.js +0 -17
- package/dist/constants.js +0 -34
- package/dist/cst/Alias.js +0 -38
- package/dist/cst/BlankLine.js +0 -56
- package/dist/cst/BlockValue.js +0 -248
- package/dist/cst/Collection.js +0 -271
- package/dist/cst/CollectionItem.js +0 -140
- package/dist/cst/Comment.js +0 -38
- package/dist/cst/Directive.js +0 -64
- package/dist/cst/Document.js +0 -281
- package/dist/cst/FlowCollection.js +0 -218
- package/dist/cst/Node.js +0 -365
- package/dist/cst/ParseContext.js +0 -258
- package/dist/cst/PlainValue.js +0 -161
- package/dist/cst/QuoteDouble.js +0 -237
- package/dist/cst/QuoteSingle.js +0 -113
- package/dist/cst/Range.js +0 -63
- package/dist/cst/parse.js +0 -55
- package/dist/cst/source-utils.js +0 -178
- package/dist/errors.js +0 -102
- package/dist/foldFlowLines.js +0 -146
- package/dist/listTagNames.js +0 -38
- package/dist/schema/Alias.js +0 -110
- package/dist/schema/Collection.js +0 -188
- package/dist/schema/Map.js +0 -103
- package/dist/schema/Merge.js +0 -80
- package/dist/schema/Node.js +0 -10
- package/dist/schema/Pair.js +0 -161
- package/dist/schema/Scalar.js +0 -31
- package/dist/schema/Seq.js +0 -78
- package/dist/schema/index.js +0 -315
- package/dist/schema/parseMap.js +0 -343
- package/dist/schema/parseSeq.js +0 -180
- package/dist/schema/parseUtils.js +0 -104
- package/dist/stringify.js +0 -358
- package/dist/tags/core.js +0 -114
- package/dist/tags/failsafe/index.js +0 -17
- package/dist/tags/failsafe/map.js +0 -37
- package/dist/tags/failsafe/seq.js +0 -34
- package/dist/tags/failsafe/string.js +0 -40
- package/dist/tags/index.js +0 -62
- package/dist/tags/json.js +0 -60
- package/dist/tags/options.js +0 -35
- package/dist/tags/yaml-1.1/binary.js +0 -97
- package/dist/tags/yaml-1.1/index.js +0 -131
- package/dist/tags/yaml-1.1/omap.js +0 -105
- package/dist/tags/yaml-1.1/pairs.js +0 -80
- package/dist/tags/yaml-1.1/set.js +0 -91
- package/dist/tags/yaml-1.1/timestamp.js +0 -93
- package/dist/toJSON.js +0 -23
- package/dist/warnings.js +0 -39
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _constants = require("../constants");
|
|
9
|
-
|
|
10
|
-
var _errors = require("../errors");
|
|
11
|
-
|
|
12
|
-
var _BlankLine = _interopRequireDefault(require("./BlankLine"));
|
|
13
|
-
|
|
14
|
-
var _Comment = _interopRequireDefault(require("./Comment"));
|
|
15
|
-
|
|
16
|
-
var _Node = _interopRequireDefault(require("./Node"));
|
|
17
|
-
|
|
18
|
-
var _Range = _interopRequireDefault(require("./Range"));
|
|
19
|
-
|
|
20
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
-
|
|
22
|
-
class FlowCollection extends _Node.default {
|
|
23
|
-
constructor(type, props) {
|
|
24
|
-
super(type, props);
|
|
25
|
-
this.items = null;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
prevNodeIsJsonLike(idx = this.items.length) {
|
|
29
|
-
const node = this.items[idx - 1];
|
|
30
|
-
return !!node && (node.jsonLike || node.type === _constants.Type.COMMENT && this.nodeIsJsonLike(idx - 1));
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* @param {ParseContext} context
|
|
34
|
-
* @param {number} start - Index of first character
|
|
35
|
-
* @returns {number} - Index of the character after this
|
|
36
|
-
*/
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
parse(context, start) {
|
|
40
|
-
this.context = context;
|
|
41
|
-
const {
|
|
42
|
-
parseNode,
|
|
43
|
-
src
|
|
44
|
-
} = context;
|
|
45
|
-
let {
|
|
46
|
-
indent,
|
|
47
|
-
lineStart
|
|
48
|
-
} = context;
|
|
49
|
-
let char = src[start]; // { or [
|
|
50
|
-
|
|
51
|
-
this.items = [{
|
|
52
|
-
char,
|
|
53
|
-
offset: start
|
|
54
|
-
}];
|
|
55
|
-
|
|
56
|
-
let offset = _Node.default.endOfWhiteSpace(src, start + 1);
|
|
57
|
-
|
|
58
|
-
char = src[offset];
|
|
59
|
-
|
|
60
|
-
while (char && char !== ']' && char !== '}') {
|
|
61
|
-
switch (char) {
|
|
62
|
-
case '\n':
|
|
63
|
-
{
|
|
64
|
-
lineStart = offset + 1;
|
|
65
|
-
|
|
66
|
-
const wsEnd = _Node.default.endOfWhiteSpace(src, lineStart);
|
|
67
|
-
|
|
68
|
-
if (src[wsEnd] === '\n') {
|
|
69
|
-
const blankLine = new _BlankLine.default();
|
|
70
|
-
lineStart = blankLine.parse({
|
|
71
|
-
src
|
|
72
|
-
}, lineStart);
|
|
73
|
-
this.items.push(blankLine);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
offset = _Node.default.endOfIndent(src, lineStart);
|
|
77
|
-
|
|
78
|
-
if (offset <= lineStart + indent) {
|
|
79
|
-
char = src[offset];
|
|
80
|
-
|
|
81
|
-
if (offset < lineStart + indent || char !== ']' && char !== '}') {
|
|
82
|
-
const msg = 'Insufficient indentation in flow collection';
|
|
83
|
-
this.error = new _errors.YAMLSemanticError(this, msg);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
break;
|
|
88
|
-
|
|
89
|
-
case ',':
|
|
90
|
-
{
|
|
91
|
-
this.items.push({
|
|
92
|
-
char,
|
|
93
|
-
offset
|
|
94
|
-
});
|
|
95
|
-
offset += 1;
|
|
96
|
-
}
|
|
97
|
-
break;
|
|
98
|
-
|
|
99
|
-
case '#':
|
|
100
|
-
{
|
|
101
|
-
const comment = new _Comment.default();
|
|
102
|
-
offset = comment.parse({
|
|
103
|
-
src
|
|
104
|
-
}, offset);
|
|
105
|
-
this.items.push(comment);
|
|
106
|
-
}
|
|
107
|
-
break;
|
|
108
|
-
|
|
109
|
-
case '?':
|
|
110
|
-
case ':':
|
|
111
|
-
{
|
|
112
|
-
const next = src[offset + 1];
|
|
113
|
-
|
|
114
|
-
if (next === '\n' || next === '\t' || next === ' ' || next === ',' || // in-flow : after JSON-like key does not need to be followed by whitespace
|
|
115
|
-
char === ':' && this.prevNodeIsJsonLike()) {
|
|
116
|
-
this.items.push({
|
|
117
|
-
char,
|
|
118
|
-
offset
|
|
119
|
-
});
|
|
120
|
-
offset += 1;
|
|
121
|
-
break;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
// fallthrough
|
|
125
|
-
|
|
126
|
-
default:
|
|
127
|
-
{
|
|
128
|
-
const node = parseNode({
|
|
129
|
-
atLineStart: false,
|
|
130
|
-
inCollection: false,
|
|
131
|
-
inFlow: true,
|
|
132
|
-
indent: -1,
|
|
133
|
-
lineStart,
|
|
134
|
-
parent: this
|
|
135
|
-
}, offset);
|
|
136
|
-
|
|
137
|
-
if (!node) {
|
|
138
|
-
// at next document start
|
|
139
|
-
this.valueRange = new _Range.default(start, offset);
|
|
140
|
-
return offset;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
this.items.push(node);
|
|
144
|
-
offset = _Node.default.normalizeOffset(src, node.range.end);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
offset = _Node.default.endOfWhiteSpace(src, offset);
|
|
149
|
-
char = src[offset];
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
this.valueRange = new _Range.default(start, offset + 1);
|
|
153
|
-
|
|
154
|
-
if (char) {
|
|
155
|
-
this.items.push({
|
|
156
|
-
char,
|
|
157
|
-
offset
|
|
158
|
-
});
|
|
159
|
-
offset = _Node.default.endOfWhiteSpace(src, offset + 1);
|
|
160
|
-
offset = this.parseComment(offset);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
return offset;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
setOrigRanges(cr, offset) {
|
|
167
|
-
offset = super.setOrigRanges(cr, offset);
|
|
168
|
-
this.items.forEach(node => {
|
|
169
|
-
if (node instanceof _Node.default) {
|
|
170
|
-
offset = node.setOrigRanges(cr, offset);
|
|
171
|
-
} else if (cr.length === 0) {
|
|
172
|
-
node.origOffset = node.offset;
|
|
173
|
-
} else {
|
|
174
|
-
let i = offset;
|
|
175
|
-
|
|
176
|
-
while (i < cr.length) {
|
|
177
|
-
if (cr[i] > node.offset) break;else ++i;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
node.origOffset = node.offset + i;
|
|
181
|
-
offset = i;
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
return offset;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
toString() {
|
|
188
|
-
const {
|
|
189
|
-
context: {
|
|
190
|
-
src
|
|
191
|
-
},
|
|
192
|
-
items,
|
|
193
|
-
range,
|
|
194
|
-
value
|
|
195
|
-
} = this;
|
|
196
|
-
if (value != null) return value;
|
|
197
|
-
const nodes = items.filter(item => item instanceof _Node.default);
|
|
198
|
-
let str = '';
|
|
199
|
-
let prevEnd = range.start;
|
|
200
|
-
nodes.forEach(node => {
|
|
201
|
-
const prefix = src.slice(prevEnd, node.range.start);
|
|
202
|
-
prevEnd = node.range.end;
|
|
203
|
-
str += prefix + String(node);
|
|
204
|
-
|
|
205
|
-
if (str[str.length - 1] === '\n' && src[prevEnd - 1] !== '\n' && src[prevEnd] === '\n') {
|
|
206
|
-
// Comment range does not include the terminal newline, but its
|
|
207
|
-
// stringified value does. Without this fix, newlines at comment ends
|
|
208
|
-
// get duplicated.
|
|
209
|
-
prevEnd += 1;
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
str += src.slice(prevEnd, range.end);
|
|
213
|
-
return _Node.default.addStringTerminator(src, range.end, str);
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
exports.default = FlowCollection;
|
package/dist/cst/Node.js
DELETED
|
@@ -1,365 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _constants = require("../constants");
|
|
9
|
-
|
|
10
|
-
var _sourceUtils = require("./source-utils");
|
|
11
|
-
|
|
12
|
-
var _Range = _interopRequireDefault(require("./Range"));
|
|
13
|
-
|
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
|
-
/** Root class of all nodes */
|
|
17
|
-
class Node {
|
|
18
|
-
static addStringTerminator(src, offset, str) {
|
|
19
|
-
if (str[str.length - 1] === '\n') return str;
|
|
20
|
-
const next = Node.endOfWhiteSpace(src, offset);
|
|
21
|
-
return next >= src.length || src[next] === '\n' ? str + '\n' : str;
|
|
22
|
-
} // ^(---|...)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
static atDocumentBoundary(src, offset, sep) {
|
|
26
|
-
const ch0 = src[offset];
|
|
27
|
-
if (!ch0) return true;
|
|
28
|
-
const prev = src[offset - 1];
|
|
29
|
-
if (prev && prev !== '\n') return false;
|
|
30
|
-
|
|
31
|
-
if (sep) {
|
|
32
|
-
if (ch0 !== sep) return false;
|
|
33
|
-
} else {
|
|
34
|
-
if (ch0 !== _constants.Char.DIRECTIVES_END && ch0 !== _constants.Char.DOCUMENT_END) return false;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const ch1 = src[offset + 1];
|
|
38
|
-
const ch2 = src[offset + 2];
|
|
39
|
-
if (ch1 !== ch0 || ch2 !== ch0) return false;
|
|
40
|
-
const ch3 = src[offset + 3];
|
|
41
|
-
return !ch3 || ch3 === '\n' || ch3 === '\t' || ch3 === ' ';
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
static endOfIdentifier(src, offset) {
|
|
45
|
-
let ch = src[offset];
|
|
46
|
-
const isVerbatim = ch === '<';
|
|
47
|
-
const notOk = isVerbatim ? ['\n', '\t', ' ', '>'] : ['\n', '\t', ' ', '[', ']', '{', '}', ','];
|
|
48
|
-
|
|
49
|
-
while (ch && notOk.indexOf(ch) === -1) ch = src[offset += 1];
|
|
50
|
-
|
|
51
|
-
if (isVerbatim && ch === '>') offset += 1;
|
|
52
|
-
return offset;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
static endOfIndent(src, offset) {
|
|
56
|
-
let ch = src[offset];
|
|
57
|
-
|
|
58
|
-
while (ch === ' ') ch = src[offset += 1];
|
|
59
|
-
|
|
60
|
-
return offset;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
static endOfLine(src, offset) {
|
|
64
|
-
let ch = src[offset];
|
|
65
|
-
|
|
66
|
-
while (ch && ch !== '\n') ch = src[offset += 1];
|
|
67
|
-
|
|
68
|
-
return offset;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
static endOfWhiteSpace(src, offset) {
|
|
72
|
-
let ch = src[offset];
|
|
73
|
-
|
|
74
|
-
while (ch === '\t' || ch === ' ') ch = src[offset += 1];
|
|
75
|
-
|
|
76
|
-
return offset;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
static startOfLine(src, offset) {
|
|
80
|
-
let ch = src[offset - 1];
|
|
81
|
-
if (ch === '\n') return offset;
|
|
82
|
-
|
|
83
|
-
while (ch && ch !== '\n') ch = src[offset -= 1];
|
|
84
|
-
|
|
85
|
-
return offset + 1;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* End of indentation, or null if the line's indent level is not more
|
|
89
|
-
* than `indent`
|
|
90
|
-
*
|
|
91
|
-
* @param {string} src
|
|
92
|
-
* @param {number} indent
|
|
93
|
-
* @param {number} lineStart
|
|
94
|
-
* @returns {?number}
|
|
95
|
-
*/
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
static endOfBlockIndent(src, indent, lineStart) {
|
|
99
|
-
const inEnd = Node.endOfIndent(src, lineStart);
|
|
100
|
-
|
|
101
|
-
if (inEnd > lineStart + indent) {
|
|
102
|
-
return inEnd;
|
|
103
|
-
} else {
|
|
104
|
-
const wsEnd = Node.endOfWhiteSpace(src, inEnd);
|
|
105
|
-
const ch = src[wsEnd];
|
|
106
|
-
if (!ch || ch === '\n') return wsEnd;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
static atBlank(src, offset, endAsBlank) {
|
|
113
|
-
const ch = src[offset];
|
|
114
|
-
return ch === '\n' || ch === '\t' || ch === ' ' || endAsBlank && !ch;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
static nextNodeIsIndented(ch, indentDiff, indicatorAsIndent) {
|
|
118
|
-
if (!ch || indentDiff < 0) return false;
|
|
119
|
-
if (indentDiff > 0) return true;
|
|
120
|
-
return indicatorAsIndent && ch === '-';
|
|
121
|
-
} // should be at line or string end, or at next non-whitespace char
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
static normalizeOffset(src, offset) {
|
|
125
|
-
const ch = src[offset];
|
|
126
|
-
return !ch ? offset : ch !== '\n' && src[offset - 1] === '\n' ? offset - 1 : Node.endOfWhiteSpace(src, offset);
|
|
127
|
-
} // fold single newline into space, multiple newlines to N - 1 newlines
|
|
128
|
-
// presumes src[offset] === '\n'
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
static foldNewline(src, offset, indent) {
|
|
132
|
-
let inCount = 0;
|
|
133
|
-
let error = false;
|
|
134
|
-
let fold = '';
|
|
135
|
-
let ch = src[offset + 1];
|
|
136
|
-
|
|
137
|
-
while (ch === ' ' || ch === '\t' || ch === '\n') {
|
|
138
|
-
switch (ch) {
|
|
139
|
-
case '\n':
|
|
140
|
-
inCount = 0;
|
|
141
|
-
offset += 1;
|
|
142
|
-
fold += '\n';
|
|
143
|
-
break;
|
|
144
|
-
|
|
145
|
-
case '\t':
|
|
146
|
-
if (inCount <= indent) error = true;
|
|
147
|
-
offset = Node.endOfWhiteSpace(src, offset + 2) - 1;
|
|
148
|
-
break;
|
|
149
|
-
|
|
150
|
-
case ' ':
|
|
151
|
-
inCount += 1;
|
|
152
|
-
offset += 1;
|
|
153
|
-
break;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
ch = src[offset + 1];
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
if (!fold) fold = ' ';
|
|
160
|
-
if (ch && inCount <= indent) error = true;
|
|
161
|
-
return {
|
|
162
|
-
fold,
|
|
163
|
-
offset,
|
|
164
|
-
error
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
constructor(type, props, context) {
|
|
169
|
-
Object.defineProperty(this, 'context', {
|
|
170
|
-
value: context || null,
|
|
171
|
-
writable: true
|
|
172
|
-
});
|
|
173
|
-
this.error = null;
|
|
174
|
-
this.range = null;
|
|
175
|
-
this.valueRange = null;
|
|
176
|
-
this.props = props || [];
|
|
177
|
-
this.type = type;
|
|
178
|
-
this.value = null;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
getPropValue(idx, key, skipKey) {
|
|
182
|
-
if (!this.context) return null;
|
|
183
|
-
const {
|
|
184
|
-
src
|
|
185
|
-
} = this.context;
|
|
186
|
-
const prop = this.props[idx];
|
|
187
|
-
return prop && src[prop.start] === key ? src.slice(prop.start + (skipKey ? 1 : 0), prop.end) : null;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
get anchor() {
|
|
191
|
-
for (let i = 0; i < this.props.length; ++i) {
|
|
192
|
-
const anchor = this.getPropValue(i, _constants.Char.ANCHOR, true);
|
|
193
|
-
if (anchor != null) return anchor;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
return null;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
get comment() {
|
|
200
|
-
const comments = [];
|
|
201
|
-
|
|
202
|
-
for (let i = 0; i < this.props.length; ++i) {
|
|
203
|
-
const comment = this.getPropValue(i, _constants.Char.COMMENT, true);
|
|
204
|
-
if (comment != null) comments.push(comment);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
return comments.length > 0 ? comments.join('\n') : null;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
commentHasRequiredWhitespace(start) {
|
|
211
|
-
const {
|
|
212
|
-
src
|
|
213
|
-
} = this.context;
|
|
214
|
-
if (this.header && start === this.header.end) return false;
|
|
215
|
-
if (!this.valueRange) return false;
|
|
216
|
-
const {
|
|
217
|
-
end
|
|
218
|
-
} = this.valueRange;
|
|
219
|
-
return start !== end || Node.atBlank(src, end - 1);
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
get hasComment() {
|
|
223
|
-
if (this.context) {
|
|
224
|
-
const {
|
|
225
|
-
src
|
|
226
|
-
} = this.context;
|
|
227
|
-
|
|
228
|
-
for (let i = 0; i < this.props.length; ++i) {
|
|
229
|
-
if (src[this.props[i].start] === _constants.Char.COMMENT) return true;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
return false;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
get hasProps() {
|
|
237
|
-
if (this.context) {
|
|
238
|
-
const {
|
|
239
|
-
src
|
|
240
|
-
} = this.context;
|
|
241
|
-
|
|
242
|
-
for (let i = 0; i < this.props.length; ++i) {
|
|
243
|
-
if (src[this.props[i].start] !== _constants.Char.COMMENT) return true;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
return false;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
get includesTrailingLines() {
|
|
251
|
-
return false;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
get jsonLike() {
|
|
255
|
-
const jsonLikeTypes = [_constants.Type.FLOW_MAP, _constants.Type.FLOW_SEQ, _constants.Type.QUOTE_DOUBLE, _constants.Type.QUOTE_SINGLE];
|
|
256
|
-
return jsonLikeTypes.indexOf(this.type) !== -1;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
get rangeAsLinePos() {
|
|
260
|
-
if (!this.range || !this.context) return undefined;
|
|
261
|
-
const start = (0, _sourceUtils.getLinePos)(this.range.start, this.context.root);
|
|
262
|
-
if (!start) return undefined;
|
|
263
|
-
const end = (0, _sourceUtils.getLinePos)(this.range.end, this.context.root);
|
|
264
|
-
return {
|
|
265
|
-
start,
|
|
266
|
-
end
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
get rawValue() {
|
|
271
|
-
if (!this.valueRange || !this.context) return null;
|
|
272
|
-
const {
|
|
273
|
-
start,
|
|
274
|
-
end
|
|
275
|
-
} = this.valueRange;
|
|
276
|
-
return this.context.src.slice(start, end);
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
get tag() {
|
|
280
|
-
for (let i = 0; i < this.props.length; ++i) {
|
|
281
|
-
const tag = this.getPropValue(i, _constants.Char.TAG, false);
|
|
282
|
-
|
|
283
|
-
if (tag != null) {
|
|
284
|
-
if (tag[1] === '<') {
|
|
285
|
-
return {
|
|
286
|
-
verbatim: tag.slice(2, -1)
|
|
287
|
-
};
|
|
288
|
-
} else {
|
|
289
|
-
// eslint-disable-next-line no-unused-vars
|
|
290
|
-
const [_, handle, suffix] = tag.match(/^(.*!)([^!]*)$/);
|
|
291
|
-
return {
|
|
292
|
-
handle,
|
|
293
|
-
suffix
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
return null;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
get valueRangeContainsNewline() {
|
|
303
|
-
if (!this.valueRange || !this.context) return false;
|
|
304
|
-
const {
|
|
305
|
-
start,
|
|
306
|
-
end
|
|
307
|
-
} = this.valueRange;
|
|
308
|
-
const {
|
|
309
|
-
src
|
|
310
|
-
} = this.context;
|
|
311
|
-
|
|
312
|
-
for (let i = start; i < end; ++i) {
|
|
313
|
-
if (src[i] === '\n') return true;
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
return false;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
parseComment(start) {
|
|
320
|
-
const {
|
|
321
|
-
src
|
|
322
|
-
} = this.context;
|
|
323
|
-
|
|
324
|
-
if (src[start] === _constants.Char.COMMENT) {
|
|
325
|
-
const end = Node.endOfLine(src, start + 1);
|
|
326
|
-
const commentRange = new _Range.default(start, end);
|
|
327
|
-
this.props.push(commentRange);
|
|
328
|
-
return end;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
return start;
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* Populates the `origStart` and `origEnd` values of all ranges for this
|
|
335
|
-
* node. Extended by child classes to handle descendant nodes.
|
|
336
|
-
*
|
|
337
|
-
* @param {number[]} cr - Positions of dropped CR characters
|
|
338
|
-
* @param {number} offset - Starting index of `cr` from the last call
|
|
339
|
-
* @returns {number} - The next offset, matching the one found for `origStart`
|
|
340
|
-
*/
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
setOrigRanges(cr, offset) {
|
|
344
|
-
if (this.range) offset = this.range.setOrigRange(cr, offset);
|
|
345
|
-
if (this.valueRange) this.valueRange.setOrigRange(cr, offset);
|
|
346
|
-
this.props.forEach(prop => prop.setOrigRange(cr, offset));
|
|
347
|
-
return offset;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
toString() {
|
|
351
|
-
const {
|
|
352
|
-
context: {
|
|
353
|
-
src
|
|
354
|
-
},
|
|
355
|
-
range,
|
|
356
|
-
value
|
|
357
|
-
} = this;
|
|
358
|
-
if (value != null) return value;
|
|
359
|
-
const str = src.slice(range.start, range.end);
|
|
360
|
-
return Node.addStringTerminator(src, range.end, str);
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
exports.default = Node;
|