yaml 1.3.0 → 1.5.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 +29 -23
- package/browser/dist/Anchors.js +12 -10
- package/browser/dist/Document.js +122 -60
- package/browser/dist/constants.js +34 -0
- package/browser/dist/cst/Alias.js +1 -3
- package/browser/dist/cst/BlankLine.js +5 -7
- package/browser/dist/cst/BlockValue.js +4 -4
- package/browser/dist/cst/Collection.js +8 -8
- package/browser/dist/cst/CollectionItem.js +6 -8
- package/browser/dist/cst/Comment.js +5 -7
- package/browser/dist/cst/Directive.js +5 -7
- package/browser/dist/cst/Document.js +8 -10
- package/browser/dist/cst/FlowCollection.js +5 -7
- package/browser/dist/cst/Node.js +12 -40
- package/browser/dist/cst/ParseContext.js +32 -34
- package/browser/dist/cst/PlainValue.js +1 -3
- package/browser/dist/cst/QuoteDouble.js +1 -3
- package/browser/dist/cst/QuoteSingle.js +1 -3
- package/browser/dist/cst/Range.js +1 -3
- package/browser/dist/cst/getLinePos.js +8 -13
- package/browser/dist/cst/parse.js +1 -4
- package/browser/dist/deprecation.js +34 -0
- package/browser/dist/errors.js +50 -59
- package/browser/dist/index.js +7 -4
- package/browser/dist/listTagNames.js +1 -3
- package/browser/dist/schema/Alias.js +90 -10
- package/browser/dist/schema/Collection.js +3 -3
- package/browser/dist/schema/Map.js +22 -105
- package/browser/dist/schema/Merge.js +74 -1
- package/browser/dist/schema/Node.js +1 -3
- package/browser/dist/schema/Pair.js +52 -26
- package/browser/dist/schema/Scalar.js +3 -5
- package/browser/dist/schema/Seq.js +30 -7
- package/browser/dist/schema/index.js +158 -82
- package/browser/dist/schema/parseMap.js +18 -21
- package/browser/dist/schema/parseSeq.js +9 -12
- package/browser/dist/{schema/_string.js → stringify.js} +65 -73
- package/browser/dist/tags/core.js +132 -0
- package/browser/dist/tags/failsafe/index.js +17 -0
- package/browser/dist/tags/failsafe/map.js +65 -0
- package/browser/dist/tags/failsafe/seq.js +54 -0
- package/browser/dist/tags/failsafe/string.js +40 -0
- package/browser/dist/tags/index.js +50 -0
- package/browser/dist/tags/json.js +103 -0
- package/browser/dist/tags/options.js +35 -0
- package/browser/dist/{schema/_binary.js → tags/yaml-1.1/binary.js} +20 -20
- package/browser/dist/tags/yaml-1.1/index.js +177 -0
- package/browser/dist/{schema/_omap.js → tags/yaml-1.1/omap.js} +25 -25
- package/browser/dist/{schema/_pairs.js → tags/yaml-1.1/pairs.js} +9 -13
- package/browser/dist/tags/yaml-1.1/set.js +140 -0
- package/browser/dist/{schema/_timestamp.js → tags/yaml-1.1/timestamp.js} +13 -10
- package/browser/dist/test-events.js +1 -4
- package/browser/dist/toJSON.js +20 -8
- package/browser/index.js +1 -0
- package/browser/map.js +2 -1
- package/browser/pair.js +2 -1
- package/browser/parse-cst.js +1 -1
- package/browser/scalar.js +2 -1
- package/browser/schema.js +7 -3
- package/browser/seq.js +2 -1
- package/browser/types/binary.js +7 -1
- package/browser/types/omap.js +2 -1
- package/browser/types/pairs.js +2 -1
- package/browser/types/set.js +2 -1
- package/browser/types/timestamp.js +10 -1
- package/browser/types.js +11 -0
- package/browser/util.js +15 -0
- package/dist/Anchors.js +9 -8
- package/dist/Document.js +55 -39
- package/dist/constants.js +34 -0
- package/dist/cst/Alias.js +1 -3
- package/dist/cst/BlankLine.js +5 -7
- package/dist/cst/BlockValue.js +4 -4
- package/dist/cst/Collection.js +8 -8
- package/dist/cst/CollectionItem.js +6 -8
- package/dist/cst/Comment.js +5 -7
- package/dist/cst/Directive.js +5 -7
- package/dist/cst/Document.js +8 -10
- package/dist/cst/FlowCollection.js +5 -7
- package/dist/cst/Node.js +12 -40
- package/dist/cst/ParseContext.js +32 -34
- package/dist/cst/PlainValue.js +1 -3
- package/dist/cst/QuoteDouble.js +1 -3
- package/dist/cst/QuoteSingle.js +1 -3
- package/dist/cst/Range.js +1 -3
- package/dist/cst/getLinePos.js +8 -12
- package/dist/cst/parse.js +1 -4
- package/dist/deprecation.js +34 -0
- package/dist/errors.js +29 -35
- package/dist/index.js +7 -4
- package/dist/listTagNames.js +1 -3
- package/dist/schema/Alias.js +67 -12
- package/dist/schema/Map.js +10 -74
- package/dist/schema/Merge.js +31 -0
- package/dist/schema/Node.js +1 -3
- package/dist/schema/Pair.js +46 -20
- package/dist/schema/Scalar.js +3 -5
- package/dist/schema/Seq.js +9 -5
- package/dist/schema/index.js +109 -74
- package/dist/schema/parseMap.js +18 -21
- package/dist/schema/parseSeq.js +9 -12
- package/dist/{schema/_string.js → stringify.js} +56 -65
- package/dist/tags/core.js +96 -0
- package/dist/tags/failsafe/index.js +17 -0
- package/dist/tags/failsafe/map.js +33 -0
- package/dist/tags/failsafe/seq.js +34 -0
- package/dist/tags/failsafe/string.js +40 -0
- package/dist/tags/index.js +50 -0
- package/dist/tags/json.js +67 -0
- package/dist/tags/options.js +35 -0
- package/dist/{schema/_binary.js → tags/yaml-1.1/binary.js} +18 -20
- package/dist/tags/yaml-1.1/index.js +131 -0
- package/dist/{schema/_omap.js → tags/yaml-1.1/omap.js} +16 -16
- package/dist/{schema/_pairs.js → tags/yaml-1.1/pairs.js} +9 -11
- package/dist/{schema/_set.js → tags/yaml-1.1/set.js} +12 -44
- package/dist/{schema/_timestamp.js → tags/yaml-1.1/timestamp.js} +7 -10
- package/dist/test-events.js +1 -4
- package/dist/toJSON.js +15 -5
- package/index.js +1 -0
- package/map.js +2 -1
- package/package.json +22 -17
- package/pair.js +2 -1
- package/parse-cst.js +1 -1
- package/scalar.js +2 -1
- package/schema.js +7 -3
- package/seq.js +2 -1
- package/types/binary.js +7 -1
- package/types/omap.js +2 -1
- package/types/pairs.js +2 -1
- package/types/set.js +2 -1
- package/types/timestamp.js +10 -1
- package/types.js +11 -0
- package/util.js +15 -0
- package/browser/dist/polyfill.js +0 -251
- package/browser/dist/schema/_set.js +0 -212
- package/browser/dist/schema/core.js +0 -98
- package/browser/dist/schema/failsafe.js +0 -125
- package/browser/dist/schema/json.js +0 -66
- package/browser/dist/schema/yaml-1.1.js +0 -140
- package/dist/linePos.js +0 -58
- package/dist/polyfill.js +0 -27
- package/dist/schema/core.js +0 -79
- package/dist/schema/failsafe.js +0 -74
- package/dist/schema/json.js +0 -56
- package/dist/schema/yaml-1.1.js +0 -115
package/dist/cst/PlainValue.js
CHANGED
package/dist/cst/QuoteDouble.js
CHANGED
package/dist/cst/QuoteSingle.js
CHANGED
package/dist/cst/Range.js
CHANGED
package/dist/cst/getLinePos.js
CHANGED
|
@@ -24,7 +24,7 @@ function findLineStarts(src) {
|
|
|
24
24
|
* the latter, starting indices for lines are cached in the document as
|
|
25
25
|
* `lineStarts: number[]`.
|
|
26
26
|
*
|
|
27
|
-
* Returns a
|
|
27
|
+
* Returns a one-indexed `{ line, col }` location if found, or
|
|
28
28
|
* `undefined` otherwise.
|
|
29
29
|
*
|
|
30
30
|
* @param {number} offset
|
|
@@ -55,29 +55,25 @@ function getLinePos(offset, cst) {
|
|
|
55
55
|
const start = lineStarts[i];
|
|
56
56
|
|
|
57
57
|
if (offset < start) {
|
|
58
|
-
const line = i - 1;
|
|
59
58
|
return {
|
|
60
|
-
line,
|
|
61
|
-
col: offset - lineStarts[
|
|
59
|
+
line: i,
|
|
60
|
+
col: offset - lineStarts[i - 1] + 1
|
|
62
61
|
};
|
|
63
62
|
}
|
|
64
63
|
|
|
65
64
|
if (offset === start) return {
|
|
66
|
-
line: i,
|
|
67
|
-
col:
|
|
65
|
+
line: i + 1,
|
|
66
|
+
col: 1
|
|
68
67
|
};
|
|
69
68
|
}
|
|
70
69
|
|
|
71
|
-
const line = lineStarts.length
|
|
70
|
+
const line = lineStarts.length;
|
|
72
71
|
return {
|
|
73
72
|
line,
|
|
74
|
-
col: offset - lineStarts[line]
|
|
73
|
+
col: offset - lineStarts[line - 1] + 1
|
|
75
74
|
};
|
|
76
75
|
}
|
|
77
76
|
}
|
|
78
77
|
|
|
79
78
|
return undefined;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
module.exports = exports.default;
|
|
83
|
-
module.exports.default = exports.default;
|
|
79
|
+
}
|
package/dist/cst/parse.js
CHANGED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.warnFileDeprecation = warnFileDeprecation;
|
|
7
|
+
exports.warnOptionDeprecation = warnOptionDeprecation;
|
|
8
|
+
|
|
9
|
+
/* global global, console */
|
|
10
|
+
function warn(msg) {
|
|
11
|
+
if (global && global.process && global.process.emitWarning) {
|
|
12
|
+
global.process.emitWarning(msg, 'DeprecationWarning');
|
|
13
|
+
} else {
|
|
14
|
+
// eslint-disable-next-line no-console
|
|
15
|
+
console.warn(`DeprecationWarning: ${msg}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function warnFileDeprecation(filename) {
|
|
20
|
+
if (global && global._YAML_SILENCE_DEPRECATION_WARNINGS) return;
|
|
21
|
+
const path = filename.replace(/.*yaml[/\\]/i, '').replace(/\.js$/, '').replace(/\\/g, '/');
|
|
22
|
+
warn(`The endpoint 'yaml/${path}' will be removed in a future release.`);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const warned = {};
|
|
26
|
+
|
|
27
|
+
function warnOptionDeprecation(name, alternative) {
|
|
28
|
+
if (global && global._YAML_SILENCE_DEPRECATION_WARNINGS) return;
|
|
29
|
+
if (warned[name]) return;
|
|
30
|
+
warned[name] = true;
|
|
31
|
+
let msg = `The option '${name}' will be removed in a future release`;
|
|
32
|
+
msg += alternative ? `, use '${alternative}' instead.` : '.';
|
|
33
|
+
warn(msg);
|
|
34
|
+
}
|
package/dist/errors.js
CHANGED
|
@@ -3,70 +3,64 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.YAMLWarning = exports.YAMLSyntaxError = exports.YAMLSemanticError = exports.YAMLReferenceError = void 0;
|
|
6
|
+
exports.YAMLWarning = exports.YAMLSyntaxError = exports.YAMLSemanticError = exports.YAMLReferenceError = exports.YAMLError = void 0;
|
|
7
7
|
|
|
8
8
|
var _Node = _interopRequireDefault(require("./cst/Node"));
|
|
9
9
|
|
|
10
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
11
|
|
|
12
|
-
class
|
|
13
|
-
constructor(source, message) {
|
|
14
|
-
if (!message || !(source instanceof _Node.default)) {
|
|
15
|
-
throw new Error('Invalid arguments for new YAMLReferenceError');
|
|
16
|
-
}
|
|
17
|
-
|
|
12
|
+
class YAMLError extends Error {
|
|
13
|
+
constructor(name, source, message) {
|
|
14
|
+
if (!message || !(source instanceof _Node.default)) throw new Error(`Invalid arguments for new ${name}`);
|
|
18
15
|
super();
|
|
19
|
-
this.name =
|
|
16
|
+
this.name = name;
|
|
20
17
|
this.message = message;
|
|
21
18
|
this.source = source;
|
|
22
19
|
}
|
|
23
20
|
|
|
21
|
+
makePretty() {
|
|
22
|
+
if (this.source) {
|
|
23
|
+
this.nodeType = this.source.type;
|
|
24
|
+
this.range = this.source.range;
|
|
25
|
+
this.linePos = this.source.rangeAsLinePos;
|
|
26
|
+
delete this.source;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
24
30
|
}
|
|
25
31
|
|
|
26
|
-
exports.
|
|
32
|
+
exports.YAMLError = YAMLError;
|
|
27
33
|
|
|
28
|
-
class
|
|
34
|
+
class YAMLReferenceError extends YAMLError {
|
|
29
35
|
constructor(source, message) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
36
|
+
super('YAMLReferenceError', source, message);
|
|
37
|
+
}
|
|
33
38
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
exports.YAMLReferenceError = YAMLReferenceError;
|
|
42
|
+
|
|
43
|
+
class YAMLSemanticError extends YAMLError {
|
|
44
|
+
constructor(source, message) {
|
|
45
|
+
super('YAMLSemanticError', source, message);
|
|
38
46
|
}
|
|
39
47
|
|
|
40
48
|
}
|
|
41
49
|
|
|
42
50
|
exports.YAMLSemanticError = YAMLSemanticError;
|
|
43
51
|
|
|
44
|
-
class YAMLSyntaxError extends
|
|
52
|
+
class YAMLSyntaxError extends YAMLError {
|
|
45
53
|
constructor(source, message) {
|
|
46
|
-
|
|
47
|
-
throw new Error('Invalid arguments for new YAMLSyntaxError');
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
super();
|
|
51
|
-
this.name = 'YAMLSyntaxError';
|
|
52
|
-
this.message = message;
|
|
53
|
-
this.source = source;
|
|
54
|
+
super('YAMLSyntaxError', source, message);
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
exports.YAMLSyntaxError = YAMLSyntaxError;
|
|
59
60
|
|
|
60
|
-
class YAMLWarning extends
|
|
61
|
+
class YAMLWarning extends YAMLError {
|
|
61
62
|
constructor(source, message) {
|
|
62
|
-
|
|
63
|
-
throw new Error('Invalid arguments for new YAMLWarning');
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
super();
|
|
67
|
-
this.name = 'YAMLWarning';
|
|
68
|
-
this.message = message;
|
|
69
|
-
this.source = source;
|
|
63
|
+
super('YAMLWarning', source, message);
|
|
70
64
|
}
|
|
71
65
|
|
|
72
66
|
}
|
package/dist/index.js
CHANGED
|
@@ -17,10 +17,15 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
17
17
|
|
|
18
18
|
/* global console */
|
|
19
19
|
const defaultOptions = {
|
|
20
|
+
anchorPrefix: 'a',
|
|
21
|
+
customTags: null,
|
|
22
|
+
keepCstNodes: false,
|
|
20
23
|
keepNodeTypes: true,
|
|
21
24
|
keepBlobsInJSON: true,
|
|
22
25
|
mapAsMap: false,
|
|
23
|
-
|
|
26
|
+
maxAliasCount: 100,
|
|
27
|
+
prettyErrors: false,
|
|
28
|
+
// TODO Set true in v2
|
|
24
29
|
version: '1.2'
|
|
25
30
|
};
|
|
26
31
|
|
|
@@ -82,6 +87,4 @@ var _default = {
|
|
|
82
87
|
parseDocument,
|
|
83
88
|
stringify
|
|
84
89
|
};
|
|
85
|
-
exports.default = _default;
|
|
86
|
-
module.exports = exports.default;
|
|
87
|
-
module.exports.default = exports.default;
|
|
90
|
+
exports.default = _default;
|
package/dist/listTagNames.js
CHANGED
package/dist/schema/Alias.js
CHANGED
|
@@ -5,26 +5,56 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _constants = require("../constants");
|
|
9
|
+
|
|
10
|
+
var _errors = require("../errors");
|
|
9
11
|
|
|
10
12
|
var _toJSON = _interopRequireDefault(require("../toJSON"));
|
|
11
13
|
|
|
12
|
-
var
|
|
14
|
+
var _Collection = _interopRequireDefault(require("./Collection"));
|
|
15
|
+
|
|
16
|
+
var _Node = _interopRequireDefault(require("./Node"));
|
|
17
|
+
|
|
18
|
+
var _Pair = _interopRequireDefault(require("./Pair"));
|
|
13
19
|
|
|
14
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
21
|
|
|
16
22
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
17
23
|
|
|
18
|
-
|
|
24
|
+
const getAliasCount = (node, anchors) => {
|
|
25
|
+
if (node instanceof Alias) {
|
|
26
|
+
const anchor = anchors.find(a => a.node === node.source);
|
|
27
|
+
return anchor.count * anchor.aliasCount;
|
|
28
|
+
} else if (node instanceof _Collection.default) {
|
|
29
|
+
let count = 0;
|
|
30
|
+
|
|
31
|
+
for (const item of node.items) {
|
|
32
|
+
const c = getAliasCount(item, anchors);
|
|
33
|
+
if (c > count) count = c;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return count;
|
|
37
|
+
} else if (node instanceof _Pair.default) {
|
|
38
|
+
const kc = getAliasCount(node.key, anchors);
|
|
39
|
+
const vc = getAliasCount(node.value, anchors);
|
|
40
|
+
return Math.max(kc, vc);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return 1;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
class Alias extends _Node.default {
|
|
19
47
|
static stringify({
|
|
20
48
|
range,
|
|
21
49
|
source
|
|
22
50
|
}, {
|
|
23
51
|
anchors,
|
|
24
52
|
doc,
|
|
25
|
-
implicitKey
|
|
53
|
+
implicitKey,
|
|
54
|
+
inStringifyKey
|
|
26
55
|
}) {
|
|
27
|
-
|
|
56
|
+
let anchor = Object.keys(anchors).find(a => anchors[a] === source);
|
|
57
|
+
if (!anchor && inStringifyKey) anchor = doc.anchors.getName(source) || doc.anchors.newName();
|
|
28
58
|
if (anchor) return `*${anchor}${implicitKey ? ' ' : ''}`;
|
|
29
59
|
const msg = doc.anchors.getName(source) ? 'Alias node must be after source node' : 'Source node not found for alias node';
|
|
30
60
|
throw new Error(`${msg} [${range}]`);
|
|
@@ -33,22 +63,47 @@ class Alias extends _Node2.default {
|
|
|
33
63
|
constructor(source) {
|
|
34
64
|
super();
|
|
35
65
|
this.source = source;
|
|
36
|
-
this.type =
|
|
66
|
+
this.type = _constants.Type.ALIAS;
|
|
37
67
|
}
|
|
38
68
|
|
|
39
69
|
set tag(t) {
|
|
40
70
|
throw new Error('Alias nodes cannot have tags');
|
|
41
71
|
}
|
|
42
72
|
|
|
43
|
-
toJSON(arg,
|
|
44
|
-
return (0, _toJSON.default)(this.source, arg,
|
|
73
|
+
toJSON(arg, ctx) {
|
|
74
|
+
if (!ctx) return (0, _toJSON.default)(this.source, arg, ctx);
|
|
75
|
+
const {
|
|
76
|
+
anchors,
|
|
77
|
+
maxAliasCount
|
|
78
|
+
} = ctx;
|
|
79
|
+
const anchor = anchors.find(a => a.node === this.source);
|
|
80
|
+
|
|
81
|
+
if (!anchor || !anchor.res) {
|
|
82
|
+
const msg = 'This should not happen: Alias anchor was not resolved?';
|
|
83
|
+
if (this.cstNode) throw new _errors.YAMLReferenceError(this.cstNode, msg);else throw new ReferenceError(msg);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (maxAliasCount >= 0) {
|
|
87
|
+
anchor.count += 1;
|
|
88
|
+
if (anchor.aliasCount === 0) anchor.aliasCount = getAliasCount(this.source, anchors);
|
|
89
|
+
|
|
90
|
+
if (anchor.count * anchor.aliasCount > maxAliasCount) {
|
|
91
|
+
const msg = 'Excessive alias count indicates a resource exhaustion attack';
|
|
92
|
+
if (this.cstNode) throw new _errors.YAMLReferenceError(this.cstNode, msg);else throw new ReferenceError(msg);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return anchor.res;
|
|
97
|
+
} // Only called when stringifying an alias mapping key while constructing
|
|
98
|
+
// Object output.
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
toString(ctx) {
|
|
102
|
+
return Alias.stringify(this, ctx);
|
|
45
103
|
}
|
|
46
104
|
|
|
47
105
|
}
|
|
48
106
|
|
|
49
107
|
exports.default = Alias;
|
|
50
108
|
|
|
51
|
-
_defineProperty(Alias, "default", true);
|
|
52
|
-
|
|
53
|
-
module.exports = exports.default;
|
|
54
|
-
module.exports.default = exports.default;
|
|
109
|
+
_defineProperty(Alias, "default", true);
|
package/dist/schema/Map.js
CHANGED
|
@@ -6,19 +6,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.findPair = findPair;
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
|
|
9
|
-
var _toJSON = _interopRequireDefault(require("../toJSON"));
|
|
10
|
-
|
|
11
9
|
var _Collection = _interopRequireDefault(require("./Collection"));
|
|
12
10
|
|
|
13
|
-
var _Merge = _interopRequireDefault(require("./Merge"));
|
|
14
|
-
|
|
15
11
|
var _Pair = _interopRequireDefault(require("./Pair"));
|
|
16
12
|
|
|
17
13
|
var _Scalar = _interopRequireDefault(require("./Scalar"));
|
|
18
14
|
|
|
19
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
20
16
|
|
|
21
|
-
// Published as 'yaml/map'
|
|
22
17
|
function findPair(items, key) {
|
|
23
18
|
const k = key instanceof _Scalar.default ? key.value : key;
|
|
24
19
|
|
|
@@ -61,78 +56,19 @@ class YAMLMap extends _Collection.default {
|
|
|
61
56
|
const prev = findPair(this.items, key);
|
|
62
57
|
if (prev) prev.value = value;else this.items.push(new _Pair.default(key, value));
|
|
63
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* @param {*} arg ignored
|
|
61
|
+
* @param {*} ctx Conversion context, originally set in Document#toJSON()
|
|
62
|
+
* @param {Class} Type If set, forces the returned collection type
|
|
63
|
+
* @returns {*} Instance of Type, Map, or Object
|
|
64
|
+
*/
|
|
64
65
|
|
|
65
|
-
toJSON(_, opt) {
|
|
66
|
-
if (opt && opt.mapAsMap) return this.toJSMap(opt);
|
|
67
|
-
return this.items.reduce((map, item) => {
|
|
68
|
-
if (item instanceof _Merge.default) {
|
|
69
|
-
// If the value associated with a merge key is a single mapping node,
|
|
70
|
-
// each of its key/value pairs is inserted into the current mapping,
|
|
71
|
-
// unless the key already exists in it. If the value associated with the
|
|
72
|
-
// merge key is a sequence, then this sequence is expected to contain
|
|
73
|
-
// mapping nodes and each of these nodes is merged in turn according to
|
|
74
|
-
// its order in the sequence. Keys in mapping nodes earlier in the
|
|
75
|
-
// sequence override keys specified in later mapping nodes.
|
|
76
|
-
// -- http://yaml.org/type/merge.html
|
|
77
|
-
const keys = Object.keys(map);
|
|
78
|
-
const {
|
|
79
|
-
items
|
|
80
|
-
} = item.value;
|
|
81
|
-
|
|
82
|
-
for (let i = items.length - 1; i >= 0; --i) {
|
|
83
|
-
const {
|
|
84
|
-
source
|
|
85
|
-
} = items[i];
|
|
86
|
-
|
|
87
|
-
if (source instanceof YAMLMap) {
|
|
88
|
-
const obj = source.toJSON('', opt);
|
|
89
|
-
Object.keys(obj).forEach(key => {
|
|
90
|
-
if (!keys.includes(key)) map[key] = obj[key];
|
|
91
|
-
});
|
|
92
|
-
} else {
|
|
93
|
-
throw new Error('Merge sources must be maps');
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
} else {
|
|
97
|
-
const {
|
|
98
|
-
stringKey,
|
|
99
|
-
value
|
|
100
|
-
} = item;
|
|
101
|
-
map[stringKey] = (0, _toJSON.default)(value, stringKey, opt);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return map;
|
|
105
|
-
}, {});
|
|
106
|
-
}
|
|
107
66
|
|
|
108
|
-
|
|
109
|
-
const map = new Map();
|
|
67
|
+
toJSON(_, ctx, Type) {
|
|
68
|
+
const map = Type ? new Type() : ctx && ctx.mapAsMap ? new Map() : {};
|
|
69
|
+
if (ctx && ctx.onCreate) ctx.onCreate(map);
|
|
110
70
|
|
|
111
|
-
for (const item of this.items)
|
|
112
|
-
if (item instanceof _Merge.default) {
|
|
113
|
-
const {
|
|
114
|
-
items
|
|
115
|
-
} = item.value;
|
|
116
|
-
|
|
117
|
-
for (let i = items.length - 1; i >= 0; --i) {
|
|
118
|
-
const {
|
|
119
|
-
source
|
|
120
|
-
} = items[i];
|
|
121
|
-
|
|
122
|
-
if (source instanceof YAMLMap) {
|
|
123
|
-
for (const [key, value] of source.toJSMap(opt)) {
|
|
124
|
-
if (!map.has(key)) map.set(key, value);
|
|
125
|
-
}
|
|
126
|
-
} else {
|
|
127
|
-
throw new Error('Merge sources must be maps');
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
} else {
|
|
131
|
-
const key = (0, _toJSON.default)(item.key, '', opt);
|
|
132
|
-
const value = (0, _toJSON.default)(item.value, key, opt);
|
|
133
|
-
map.set(key, value);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
71
|
+
for (const item of this.items) item.addToJSMap(ctx, map);
|
|
136
72
|
|
|
137
73
|
return map;
|
|
138
74
|
}
|
package/dist/schema/Merge.js
CHANGED
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.MERGE_KEY = void 0;
|
|
7
7
|
|
|
8
|
+
var _Map = _interopRequireDefault(require("./Map"));
|
|
9
|
+
|
|
8
10
|
var _Pair = _interopRequireDefault(require("./Pair"));
|
|
9
11
|
|
|
10
12
|
var _Scalar = _interopRequireDefault(require("./Scalar"));
|
|
@@ -34,6 +36,35 @@ class Merge extends _Pair.default {
|
|
|
34
36
|
}
|
|
35
37
|
|
|
36
38
|
this.type = 'MERGE_PAIR';
|
|
39
|
+
} // If the value associated with a merge key is a single mapping node, each of
|
|
40
|
+
// its key/value pairs is inserted into the current mapping, unless the key
|
|
41
|
+
// already exists in it. If the value associated with the merge key is a
|
|
42
|
+
// sequence, then this sequence is expected to contain mapping nodes and each
|
|
43
|
+
// of these nodes is merged in turn according to its order in the sequence.
|
|
44
|
+
// Keys in mapping nodes earlier in the sequence override keys specified in
|
|
45
|
+
// later mapping nodes. -- http://yaml.org/type/merge.html
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
addToJSMap(ctx, map) {
|
|
49
|
+
for (const _ref of this.value.items) {
|
|
50
|
+
const {
|
|
51
|
+
source
|
|
52
|
+
} = _ref;
|
|
53
|
+
if (!(source instanceof _Map.default)) throw new Error('Merge sources must be maps');
|
|
54
|
+
const srcMap = source.toJSON(null, ctx, Map);
|
|
55
|
+
|
|
56
|
+
for (const [key, value] of srcMap) {
|
|
57
|
+
if (map instanceof Map) {
|
|
58
|
+
if (!map.has(key)) map.set(key, value);
|
|
59
|
+
} else if (map instanceof Set) {
|
|
60
|
+
map.add(key);
|
|
61
|
+
} else {
|
|
62
|
+
if (!map.hasOwnProperty(key)) map[key] = value;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return map;
|
|
37
68
|
}
|
|
38
69
|
|
|
39
70
|
toString(ctx, onComment) {
|
package/dist/schema/Node.js
CHANGED
package/dist/schema/Pair.js
CHANGED
|
@@ -18,6 +18,19 @@ var _Scalar = _interopRequireDefault(require("./Scalar"));
|
|
|
18
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
19
|
|
|
20
20
|
// Published as 'yaml/pair'
|
|
21
|
+
const stringifyKey = (key, jsKey, ctx) => {
|
|
22
|
+
if (jsKey === null) return '';
|
|
23
|
+
if (typeof jsKey !== 'object') return String(jsKey);
|
|
24
|
+
if (key instanceof _Node.default && ctx && ctx.doc) return key.toString({
|
|
25
|
+
anchors: {},
|
|
26
|
+
doc: ctx.doc,
|
|
27
|
+
indent: '',
|
|
28
|
+
inFlow: true,
|
|
29
|
+
inStringifyKey: true
|
|
30
|
+
});
|
|
31
|
+
return JSON.stringify(jsKey);
|
|
32
|
+
};
|
|
33
|
+
|
|
21
34
|
class Pair extends _Node.default {
|
|
22
35
|
constructor(key, value = null) {
|
|
23
36
|
super();
|
|
@@ -35,27 +48,30 @@ class Pair extends _Node.default {
|
|
|
35
48
|
this.key.commentBefore = cb;
|
|
36
49
|
}
|
|
37
50
|
|
|
38
|
-
|
|
39
|
-
const key = (0, _toJSON.default)(this.key);
|
|
40
|
-
|
|
41
|
-
if (
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
51
|
+
addToJSMap(ctx, map) {
|
|
52
|
+
const key = (0, _toJSON.default)(this.key, '', ctx);
|
|
53
|
+
|
|
54
|
+
if (map instanceof Map) {
|
|
55
|
+
const value = (0, _toJSON.default)(this.value, key, ctx);
|
|
56
|
+
map.set(key, value);
|
|
57
|
+
} else if (map instanceof Set) {
|
|
58
|
+
map.add(key);
|
|
59
|
+
} else {
|
|
60
|
+
const stringKey = stringifyKey(this.key, key, ctx);
|
|
61
|
+
map[stringKey] = (0, _toJSON.default)(this.value, stringKey, ctx);
|
|
45
62
|
}
|
|
46
|
-
|
|
63
|
+
|
|
64
|
+
return map;
|
|
47
65
|
}
|
|
48
66
|
|
|
49
|
-
toJSON(_,
|
|
50
|
-
const pair = {};
|
|
51
|
-
|
|
52
|
-
pair[sk] = (0, _toJSON.default)(this.value, sk, opt);
|
|
53
|
-
return pair;
|
|
67
|
+
toJSON(_, ctx) {
|
|
68
|
+
const pair = ctx && ctx.mapAsMap ? new Map() : {};
|
|
69
|
+
return this.addToJSMap(ctx, pair);
|
|
54
70
|
}
|
|
55
71
|
|
|
56
72
|
toString(ctx, onComment, onChompKeep) {
|
|
57
73
|
if (!ctx || !ctx.doc) return JSON.stringify(this);
|
|
58
|
-
|
|
74
|
+
let {
|
|
59
75
|
key,
|
|
60
76
|
value
|
|
61
77
|
} = this;
|
|
@@ -91,27 +107,37 @@ class Pair extends _Node.default {
|
|
|
91
107
|
}
|
|
92
108
|
|
|
93
109
|
let vcb = '';
|
|
110
|
+
let valueComment = null;
|
|
94
111
|
|
|
95
|
-
if (value) {
|
|
112
|
+
if (value instanceof _Node.default) {
|
|
96
113
|
if (value.spaceBefore) vcb = '\n';
|
|
97
114
|
|
|
98
115
|
if (value.commentBefore) {
|
|
99
116
|
const cs = value.commentBefore.replace(/^/gm, `${ctx.indent}#`);
|
|
100
117
|
vcb += `\n${cs}`;
|
|
101
118
|
}
|
|
119
|
+
|
|
120
|
+
valueComment = value.comment;
|
|
121
|
+
} else if (value && typeof value === 'object') {
|
|
122
|
+
value = doc.schema.createNode(value, true);
|
|
102
123
|
}
|
|
103
124
|
|
|
104
125
|
ctx.implicitKey = false;
|
|
105
|
-
let valueComment = value instanceof _Node.default && value.comment;
|
|
106
126
|
chompKeep = false;
|
|
107
127
|
const valueStr = doc.schema.stringify(value, ctx, () => valueComment = null, () => chompKeep = true);
|
|
108
|
-
|
|
128
|
+
let ws = ' ';
|
|
129
|
+
|
|
130
|
+
if (vcb || this.comment) {
|
|
131
|
+
ws = `${vcb}\n${ctx.indent}`;
|
|
132
|
+
} else if (!explicitKey && value instanceof _Collection.default) {
|
|
133
|
+
const flow = valueStr[0] === '[' || valueStr[0] === '{';
|
|
134
|
+
if (!flow || valueStr.includes('\n')) ws = `\n${ctx.indent}`;
|
|
135
|
+
}
|
|
136
|
+
|
|
109
137
|
if (chompKeep && !valueComment && onChompKeep) onChompKeep();
|
|
110
138
|
return (0, _addComment.default)(str + ws + valueStr, ctx.indent, valueComment);
|
|
111
139
|
}
|
|
112
140
|
|
|
113
141
|
}
|
|
114
142
|
|
|
115
|
-
exports.default = Pair;
|
|
116
|
-
module.exports = exports.default;
|
|
117
|
-
module.exports.default = exports.default;
|
|
143
|
+
exports.default = Pair;
|
package/dist/schema/Scalar.js
CHANGED
|
@@ -18,8 +18,8 @@ class Scalar extends _Node.default {
|
|
|
18
18
|
this.value = value;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
toJSON(arg,
|
|
22
|
-
return
|
|
21
|
+
toJSON(arg, ctx) {
|
|
22
|
+
return ctx && ctx.keep ? this.value : (0, _toJSON.default)(this.value, arg, ctx);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
toString() {
|
|
@@ -28,6 +28,4 @@ class Scalar extends _Node.default {
|
|
|
28
28
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
exports.default = Scalar;
|
|
32
|
-
module.exports = exports.default;
|
|
33
|
-
module.exports.default = exports.default;
|
|
31
|
+
exports.default = Scalar;
|