yaml 2.0.0-3 → 2.0.0-7
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/LICENSE +1 -1
- package/README.md +46 -26
- package/browser/dist/compose/compose-collection.js +59 -0
- package/browser/dist/compose/compose-doc.js +39 -0
- package/browser/dist/compose/compose-node.js +79 -0
- package/browser/dist/compose/compose-scalar.js +74 -0
- package/browser/dist/compose/composer.js +219 -0
- package/browser/dist/compose/resolve-block-map.js +93 -0
- package/browser/dist/compose/resolve-block-scalar.js +185 -0
- package/browser/dist/compose/resolve-block-seq.js +40 -0
- package/browser/dist/compose/resolve-end.js +37 -0
- package/browser/dist/compose/resolve-flow-collection.js +189 -0
- package/browser/dist/compose/resolve-flow-scalar.js +217 -0
- package/browser/dist/compose/resolve-props.js +126 -0
- package/browser/dist/compose/util-contains-newline.js +34 -0
- package/browser/dist/compose/util-empty-scalar-position.js +27 -0
- package/browser/dist/compose/util-map-includes.js +17 -0
- package/browser/dist/doc/Document.js +251 -348
- package/browser/dist/doc/anchors.js +72 -0
- package/browser/dist/doc/applyReviver.js +41 -28
- package/browser/dist/doc/createNode.js +75 -55
- package/browser/dist/doc/directives.js +161 -0
- package/browser/dist/errors.js +50 -72
- package/browser/dist/index.js +16 -72
- package/browser/dist/log.js +11 -7
- package/browser/dist/nodes/Alias.js +94 -0
- package/browser/dist/nodes/Collection.js +133 -0
- package/browser/dist/nodes/Node.js +41 -0
- package/browser/dist/nodes/Pair.js +28 -0
- package/browser/dist/nodes/Scalar.js +23 -0
- package/browser/dist/nodes/YAMLMap.js +116 -0
- package/browser/dist/nodes/YAMLSeq.js +105 -0
- package/browser/dist/nodes/addPairToJSMap.js +103 -0
- package/browser/dist/nodes/toJS.js +35 -0
- package/browser/dist/options.js +14 -95
- package/browser/dist/parse/cst-scalar.js +219 -0
- package/browser/dist/parse/cst-stringify.js +61 -0
- package/browser/dist/parse/cst-visit.js +97 -0
- package/browser/dist/parse/cst.js +98 -0
- package/browser/dist/parse/lexer.js +674 -0
- package/browser/dist/parse/line-counter.js +39 -0
- package/browser/dist/parse/parser.js +876 -0
- package/browser/dist/public-api.js +101 -0
- package/browser/dist/schema/Schema.js +23 -0
- package/browser/dist/schema/common/map.js +42 -0
- package/browser/dist/schema/common/null.js +13 -0
- package/browser/dist/schema/common/seq.js +33 -0
- package/browser/dist/schema/common/string.js +14 -0
- package/browser/dist/schema/core/bool.js +19 -0
- package/browser/dist/schema/core/float.js +40 -0
- package/browser/dist/schema/core/int.js +38 -0
- package/browser/dist/schema/core/schema.js +23 -0
- package/browser/dist/schema/json/schema.js +62 -0
- package/browser/dist/schema/tags.js +79 -0
- package/browser/dist/schema/yaml-1.1/binary.js +66 -0
- package/browser/dist/schema/yaml-1.1/bool.js +26 -0
- package/browser/dist/schema/yaml-1.1/float.js +43 -0
- package/browser/dist/schema/yaml-1.1/int.js +71 -0
- package/browser/dist/schema/yaml-1.1/omap.js +73 -0
- package/browser/dist/schema/yaml-1.1/pairs.js +77 -0
- package/browser/dist/schema/yaml-1.1/schema.js +37 -0
- package/browser/dist/schema/yaml-1.1/set.js +87 -0
- package/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
- package/browser/dist/stringify/foldFlowLines.js +121 -139
- package/browser/dist/stringify/stringify.js +87 -72
- package/browser/dist/stringify/stringifyCollection.js +122 -0
- package/browser/dist/stringify/stringifyComment.js +14 -0
- package/browser/dist/stringify/stringifyDocument.js +64 -0
- package/browser/dist/stringify/stringifyNumber.js +20 -23
- package/browser/dist/stringify/stringifyPair.js +111 -0
- package/browser/dist/stringify/stringifyString.js +295 -322
- package/browser/dist/util.js +4 -4
- package/browser/dist/visit.js +134 -71
- package/browser/index.js +4 -1
- package/dist/compose/compose-collection.d.ts +5 -0
- package/dist/compose/compose-collection.js +61 -0
- package/dist/compose/compose-doc.d.ts +6 -0
- package/dist/compose/compose-doc.js +41 -0
- package/dist/compose/compose-node.d.ts +25 -0
- package/dist/compose/compose-node.js +82 -0
- package/dist/compose/compose-scalar.d.ts +5 -0
- package/dist/compose/compose-scalar.js +76 -0
- package/dist/compose/composer.d.ts +62 -0
- package/dist/compose/composer.js +223 -0
- package/dist/compose/resolve-block-map.d.ts +6 -0
- package/dist/compose/resolve-block-map.js +95 -0
- package/dist/compose/resolve-block-scalar.d.ts +10 -0
- package/dist/compose/resolve-block-scalar.js +187 -0
- package/dist/compose/resolve-block-seq.d.ts +5 -0
- package/dist/compose/resolve-block-seq.js +42 -0
- package/dist/compose/resolve-end.d.ts +6 -0
- package/dist/compose/resolve-end.js +39 -0
- package/dist/compose/resolve-flow-collection.d.ts +6 -0
- package/dist/compose/resolve-flow-collection.js +191 -0
- package/dist/compose/resolve-flow-scalar.d.ts +10 -0
- package/dist/compose/resolve-flow-scalar.js +219 -0
- package/dist/compose/resolve-props.d.ts +21 -0
- package/dist/compose/resolve-props.js +128 -0
- package/dist/compose/util-contains-newline.d.ts +2 -0
- package/dist/compose/util-contains-newline.js +36 -0
- package/dist/compose/util-empty-scalar-position.d.ts +2 -0
- package/dist/compose/util-empty-scalar-position.js +29 -0
- package/dist/compose/util-map-includes.d.ts +4 -0
- package/dist/compose/util-map-includes.js +19 -0
- package/dist/doc/Document.d.ts +130 -0
- package/dist/doc/Document.js +250 -347
- package/dist/doc/anchors.d.ts +24 -0
- package/dist/doc/anchors.js +77 -0
- package/dist/doc/applyReviver.d.ts +9 -0
- package/dist/doc/applyReviver.js +41 -28
- package/dist/doc/createNode.d.ts +16 -0
- package/dist/doc/createNode.js +75 -55
- package/dist/doc/directives.d.ts +46 -0
- package/dist/doc/directives.js +163 -0
- package/dist/errors.d.ts +21 -0
- package/dist/errors.js +51 -74
- package/dist/index.d.ts +19 -0
- package/dist/index.js +39 -70
- package/dist/log.d.ts +3 -0
- package/dist/log.js +11 -6
- package/dist/nodes/Alias.d.ts +24 -0
- package/dist/nodes/Alias.js +96 -0
- package/dist/nodes/Collection.d.ts +67 -0
- package/dist/nodes/Collection.js +137 -0
- package/dist/nodes/Node.d.ts +48 -0
- package/dist/nodes/Node.js +59 -0
- package/dist/nodes/Pair.d.ts +16 -0
- package/dist/nodes/Pair.js +31 -0
- package/dist/nodes/Scalar.d.ts +40 -0
- package/dist/nodes/Scalar.js +26 -0
- package/dist/nodes/YAMLMap.d.ts +39 -0
- package/dist/nodes/YAMLMap.js +119 -0
- package/dist/nodes/YAMLSeq.d.ts +53 -0
- package/dist/nodes/YAMLSeq.js +107 -0
- package/dist/nodes/addPairToJSMap.d.ts +3 -0
- package/dist/nodes/addPairToJSMap.js +105 -0
- package/dist/nodes/toJS.d.ts +30 -0
- package/dist/nodes/toJS.js +37 -0
- package/dist/options.d.ts +278 -0
- package/dist/options.js +13 -96
- package/dist/parse/cst-scalar.d.ts +58 -0
- package/dist/parse/cst-scalar.js +223 -0
- package/dist/parse/cst-stringify.d.ts +8 -0
- package/dist/parse/cst-stringify.js +63 -0
- package/dist/parse/cst-visit.d.ts +39 -0
- package/dist/parse/cst-visit.js +99 -0
- package/dist/parse/cst.d.ts +106 -0
- package/dist/parse/cst.js +112 -0
- package/dist/parse/lexer.d.ts +85 -0
- package/dist/parse/lexer.js +676 -0
- package/dist/parse/line-counter.d.ts +22 -0
- package/dist/parse/line-counter.js +41 -0
- package/dist/parse/parser.d.ts +84 -0
- package/dist/parse/parser.js +880 -0
- package/dist/public-api.d.ts +43 -0
- package/dist/public-api.js +106 -0
- package/dist/schema/Schema.d.ts +16 -0
- package/dist/schema/Schema.js +25 -0
- package/dist/schema/common/map.d.ts +2 -0
- package/dist/schema/common/map.js +44 -0
- package/dist/schema/common/null.d.ts +4 -0
- package/dist/schema/common/null.js +15 -0
- package/dist/schema/common/seq.d.ts +2 -0
- package/dist/schema/common/seq.js +35 -0
- package/dist/schema/common/string.d.ts +2 -0
- package/dist/schema/common/string.js +16 -0
- package/dist/schema/core/bool.d.ts +4 -0
- package/dist/schema/core/bool.js +21 -0
- package/dist/schema/core/float.d.ts +4 -0
- package/dist/schema/core/float.js +44 -0
- package/dist/schema/core/int.d.ts +4 -0
- package/dist/schema/core/int.js +42 -0
- package/dist/schema/core/schema.d.ts +1 -0
- package/dist/schema/core/schema.js +25 -0
- package/dist/schema/json/schema.d.ts +2 -0
- package/dist/schema/json/schema.js +64 -0
- package/dist/schema/tags.d.ts +41 -0
- package/dist/schema/tags.js +82 -0
- package/dist/schema/types.d.ts +82 -0
- package/dist/schema/yaml-1.1/binary.d.ts +2 -0
- package/dist/schema/yaml-1.1/binary.js +68 -0
- package/dist/schema/yaml-1.1/bool.d.ts +7 -0
- package/dist/schema/yaml-1.1/bool.js +29 -0
- package/dist/schema/yaml-1.1/float.d.ts +4 -0
- package/dist/schema/yaml-1.1/float.js +47 -0
- package/dist/schema/yaml-1.1/int.d.ts +5 -0
- package/dist/schema/yaml-1.1/int.js +76 -0
- package/dist/schema/yaml-1.1/omap.d.ts +21 -0
- package/dist/schema/yaml-1.1/omap.js +76 -0
- package/dist/schema/yaml-1.1/pairs.d.ts +10 -0
- package/dist/schema/yaml-1.1/pairs.js +81 -0
- package/dist/schema/yaml-1.1/schema.d.ts +1 -0
- package/dist/schema/yaml-1.1/schema.js +39 -0
- package/dist/schema/yaml-1.1/set.d.ts +22 -0
- package/dist/schema/yaml-1.1/set.js +90 -0
- package/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
- package/dist/schema/yaml-1.1/timestamp.js +105 -0
- package/dist/stringify/foldFlowLines.d.ts +34 -0
- package/dist/stringify/foldFlowLines.js +121 -139
- package/dist/stringify/stringify.d.ts +18 -0
- package/dist/stringify/stringify.js +87 -71
- package/dist/stringify/stringifyCollection.d.ts +21 -0
- package/dist/stringify/stringifyCollection.js +124 -0
- package/dist/stringify/stringifyComment.d.ts +2 -0
- package/dist/stringify/stringifyComment.js +17 -0
- package/dist/stringify/stringifyDocument.d.ts +3 -0
- package/dist/stringify/stringifyDocument.js +66 -0
- package/dist/stringify/stringifyNumber.d.ts +2 -0
- package/dist/stringify/stringifyNumber.js +20 -23
- package/dist/stringify/stringifyPair.d.ts +3 -0
- package/dist/stringify/stringifyPair.js +113 -0
- package/dist/stringify/stringifyString.d.ts +3 -0
- package/dist/stringify/stringifyString.js +295 -322
- package/dist/test-events.d.ts +4 -0
- package/dist/test-events.js +124 -148
- package/dist/util.d.ts +6 -0
- package/dist/util.js +9 -12
- package/dist/visit.d.ts +63 -0
- package/dist/visit.js +134 -71
- package/package.json +31 -39
- package/util.js +2 -14
- package/browser/dist/_virtual/_rollupPluginBabelHelpers.js +0 -16
- package/browser/dist/ast/Alias.js +0 -95
- package/browser/dist/ast/Collection.js +0 -192
- package/browser/dist/ast/Merge.js +0 -71
- package/browser/dist/ast/Node.js +0 -3
- package/browser/dist/ast/Pair.js +0 -200
- package/browser/dist/ast/Scalar.js +0 -21
- package/browser/dist/ast/YAMLMap.js +0 -91
- package/browser/dist/ast/YAMLSeq.js +0 -67
- package/browser/dist/ast/toJS.js +0 -29
- package/browser/dist/constants.js +0 -40
- package/browser/dist/cst/Alias.js +0 -26
- package/browser/dist/cst/BlankLine.js +0 -34
- package/browser/dist/cst/BlockValue.js +0 -240
- package/browser/dist/cst/Collection.js +0 -259
- package/browser/dist/cst/CollectionItem.js +0 -123
- package/browser/dist/cst/Comment.js +0 -27
- package/browser/dist/cst/Directive.js +0 -53
- package/browser/dist/cst/Document.js +0 -262
- package/browser/dist/cst/FlowCollection.js +0 -201
- package/browser/dist/cst/Node.js +0 -355
- package/browser/dist/cst/ParseContext.js +0 -234
- package/browser/dist/cst/PlainValue.js +0 -171
- package/browser/dist/cst/QuoteDouble.js +0 -224
- package/browser/dist/cst/QuoteSingle.js +0 -100
- package/browser/dist/cst/Range.js +0 -56
- package/browser/dist/cst/parse.js +0 -46
- package/browser/dist/cst/source-utils.js +0 -169
- package/browser/dist/doc/Anchors.js +0 -115
- package/browser/dist/doc/Schema.js +0 -34
- package/browser/dist/doc/getSchemaTags.js +0 -33
- package/browser/dist/doc/listTagNames.js +0 -27
- package/browser/dist/doc/parseContents.js +0 -60
- package/browser/dist/doc/parseDirectives.js +0 -107
- package/browser/dist/resolve/collection-utils.js +0 -86
- package/browser/dist/resolve/resolveMap.js +0 -315
- package/browser/dist/resolve/resolveNode.js +0 -173
- package/browser/dist/resolve/resolveScalar.js +0 -20
- package/browser/dist/resolve/resolveSeq.js +0 -170
- package/browser/dist/resolve/resolveTag.js +0 -107
- package/browser/dist/resolve/resolveTagName.js +0 -87
- package/browser/dist/stringify/addComment.js +0 -10
- package/browser/dist/stringify/stringifyTag.js +0 -28
- package/browser/dist/tags/core.js +0 -128
- package/browser/dist/tags/failsafe/index.js +0 -7
- package/browser/dist/tags/failsafe/map.js +0 -37
- package/browser/dist/tags/failsafe/seq.js +0 -34
- package/browser/dist/tags/failsafe/string.js +0 -20
- package/browser/dist/tags/index.js +0 -39
- package/browser/dist/tags/json.js +0 -62
- package/browser/dist/tags/options.js +0 -31
- package/browser/dist/tags/yaml-1.1/binary.js +0 -83
- package/browser/dist/tags/yaml-1.1/index.js +0 -174
- package/browser/dist/tags/yaml-1.1/omap.js +0 -86
- package/browser/dist/tags/yaml-1.1/pairs.js +0 -62
- package/browser/dist/tags/yaml-1.1/set.js +0 -78
- package/browser/dist/tags/yaml-1.1/timestamp.js +0 -101
- package/browser/dist/types.js +0 -10
- package/cst.d.ts +0 -185
- package/dist/_virtual/_rollupPluginBabelHelpers.js +0 -18
- package/dist/ast/Alias.js +0 -97
- package/dist/ast/Collection.js +0 -196
- package/dist/ast/Merge.js +0 -74
- package/dist/ast/Node.js +0 -5
- package/dist/ast/Pair.js +0 -203
- package/dist/ast/Scalar.js +0 -24
- package/dist/ast/YAMLMap.js +0 -94
- package/dist/ast/YAMLSeq.js +0 -69
- package/dist/ast/toJS.js +0 -31
- package/dist/constants.js +0 -46
- package/dist/cst/Alias.js +0 -28
- package/dist/cst/BlankLine.js +0 -36
- package/dist/cst/BlockValue.js +0 -243
- package/dist/cst/Collection.js +0 -262
- package/dist/cst/CollectionItem.js +0 -125
- package/dist/cst/Comment.js +0 -29
- package/dist/cst/Directive.js +0 -55
- package/dist/cst/Document.js +0 -264
- package/dist/cst/FlowCollection.js +0 -203
- package/dist/cst/Node.js +0 -357
- package/dist/cst/ParseContext.js +0 -236
- package/dist/cst/PlainValue.js +0 -173
- package/dist/cst/QuoteDouble.js +0 -226
- package/dist/cst/QuoteSingle.js +0 -102
- package/dist/cst/Range.js +0 -58
- package/dist/cst/parse.js +0 -48
- package/dist/cst/source-utils.js +0 -173
- package/dist/doc/Anchors.js +0 -117
- package/dist/doc/Schema.js +0 -36
- package/dist/doc/getSchemaTags.js +0 -35
- package/dist/doc/listTagNames.js +0 -29
- package/dist/doc/parseContents.js +0 -62
- package/dist/doc/parseDirectives.js +0 -109
- package/dist/resolve/collection-utils.js +0 -91
- package/dist/resolve/resolveMap.js +0 -317
- package/dist/resolve/resolveNode.js +0 -175
- package/dist/resolve/resolveScalar.js +0 -22
- package/dist/resolve/resolveSeq.js +0 -172
- package/dist/resolve/resolveTag.js +0 -109
- package/dist/resolve/resolveTagName.js +0 -89
- package/dist/stringify/addComment.js +0 -13
- package/dist/stringify/stringifyTag.js +0 -30
- package/dist/tags/core.js +0 -138
- package/dist/tags/failsafe/index.js +0 -9
- package/dist/tags/failsafe/map.js +0 -39
- package/dist/tags/failsafe/seq.js +0 -36
- package/dist/tags/failsafe/string.js +0 -22
- package/dist/tags/index.js +0 -42
- package/dist/tags/json.js +0 -64
- package/dist/tags/options.js +0 -37
- package/dist/tags/yaml-1.1/binary.js +0 -85
- package/dist/tags/yaml-1.1/index.js +0 -176
- package/dist/tags/yaml-1.1/omap.js +0 -89
- package/dist/tags/yaml-1.1/pairs.js +0 -66
- package/dist/tags/yaml-1.1/set.js +0 -81
- package/dist/tags/yaml-1.1/timestamp.js +0 -105
- package/dist/types.js +0 -29
- package/index.d.ts +0 -519
- package/index.js +0 -1
- package/types.d.ts +0 -379
- package/types.js +0 -17
- package/types.mjs +0 -17
- package/util.d.ts +0 -76
- package/util.mjs +0 -15
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var Node = require('../../nodes/Node.js');
|
|
4
|
+
var Pair = require('../../nodes/Pair.js');
|
|
5
|
+
var YAMLMap = require('../../nodes/YAMLMap.js');
|
|
6
|
+
|
|
7
|
+
class YAMLSet extends YAMLMap.YAMLMap {
|
|
8
|
+
constructor(schema) {
|
|
9
|
+
super(schema);
|
|
10
|
+
this.tag = YAMLSet.tag;
|
|
11
|
+
}
|
|
12
|
+
add(key) {
|
|
13
|
+
let pair;
|
|
14
|
+
if (Node.isPair(key))
|
|
15
|
+
pair = key;
|
|
16
|
+
else if (typeof key === 'object' &&
|
|
17
|
+
'key' in key &&
|
|
18
|
+
'value' in key &&
|
|
19
|
+
key.value === null)
|
|
20
|
+
pair = new Pair.Pair(key.key, null);
|
|
21
|
+
else
|
|
22
|
+
pair = new Pair.Pair(key, null);
|
|
23
|
+
const prev = YAMLMap.findPair(this.items, pair.key);
|
|
24
|
+
if (!prev)
|
|
25
|
+
this.items.push(pair);
|
|
26
|
+
}
|
|
27
|
+
get(key, keepPair) {
|
|
28
|
+
const pair = YAMLMap.findPair(this.items, key);
|
|
29
|
+
return !keepPair && Node.isPair(pair)
|
|
30
|
+
? Node.isScalar(pair.key)
|
|
31
|
+
? pair.key.value
|
|
32
|
+
: pair.key
|
|
33
|
+
: pair;
|
|
34
|
+
}
|
|
35
|
+
set(key, value) {
|
|
36
|
+
if (typeof value !== 'boolean')
|
|
37
|
+
throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);
|
|
38
|
+
const prev = YAMLMap.findPair(this.items, key);
|
|
39
|
+
if (prev && !value) {
|
|
40
|
+
this.items.splice(this.items.indexOf(prev), 1);
|
|
41
|
+
}
|
|
42
|
+
else if (!prev && value) {
|
|
43
|
+
this.items.push(new Pair.Pair(key));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
toJSON(_, ctx) {
|
|
47
|
+
return super.toJSON(_, ctx, Set);
|
|
48
|
+
}
|
|
49
|
+
toString(ctx, onComment, onChompKeep) {
|
|
50
|
+
if (!ctx)
|
|
51
|
+
return JSON.stringify(this);
|
|
52
|
+
if (this.hasAllNullValues(true))
|
|
53
|
+
return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);
|
|
54
|
+
else
|
|
55
|
+
throw new Error('Set items must all have null values');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
YAMLSet.tag = 'tag:yaml.org,2002:set';
|
|
59
|
+
const set = {
|
|
60
|
+
collection: 'map',
|
|
61
|
+
identify: value => value instanceof Set,
|
|
62
|
+
nodeClass: YAMLSet,
|
|
63
|
+
default: false,
|
|
64
|
+
tag: 'tag:yaml.org,2002:set',
|
|
65
|
+
resolve(map, onError) {
|
|
66
|
+
if (Node.isMap(map)) {
|
|
67
|
+
if (map.hasAllNullValues(true))
|
|
68
|
+
return Object.assign(new YAMLSet(), map);
|
|
69
|
+
else
|
|
70
|
+
onError('Set items must all have null values');
|
|
71
|
+
}
|
|
72
|
+
else
|
|
73
|
+
onError('Expected a mapping for this tag');
|
|
74
|
+
return map;
|
|
75
|
+
},
|
|
76
|
+
createNode(schema, iterable, ctx) {
|
|
77
|
+
const { replacer } = ctx;
|
|
78
|
+
const set = new YAMLSet(schema);
|
|
79
|
+
if (iterable && Symbol.iterator in Object(iterable))
|
|
80
|
+
for (let value of iterable) {
|
|
81
|
+
if (typeof replacer === 'function')
|
|
82
|
+
value = replacer.call(iterable, value, value);
|
|
83
|
+
set.items.push(Pair.createPair(value, null, ctx));
|
|
84
|
+
}
|
|
85
|
+
return set;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
exports.YAMLSet = YAMLSet;
|
|
90
|
+
exports.set = set;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var stringifyNumber = require('../../stringify/stringifyNumber.js');
|
|
4
|
+
|
|
5
|
+
/** Internal types handle bigint as number, because TS can't figure it out. */
|
|
6
|
+
function parseSexagesimal(str, asBigInt) {
|
|
7
|
+
const sign = str[0];
|
|
8
|
+
const parts = sign === '-' || sign === '+' ? str.substring(1) : str;
|
|
9
|
+
const num = (n) => asBigInt ? BigInt(n) : Number(n);
|
|
10
|
+
const res = parts
|
|
11
|
+
.replace(/_/g, '')
|
|
12
|
+
.split(':')
|
|
13
|
+
.reduce((res, p) => res * num(60) + num(p), num(0));
|
|
14
|
+
return (sign === '-' ? num(-1) * res : res);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* hhhh:mm:ss.sss
|
|
18
|
+
*
|
|
19
|
+
* Internal types handle bigint as number, because TS can't figure it out.
|
|
20
|
+
*/
|
|
21
|
+
function stringifySexagesimal(node) {
|
|
22
|
+
let { value } = node;
|
|
23
|
+
let num = (n) => n;
|
|
24
|
+
if (typeof value === 'bigint')
|
|
25
|
+
num = n => BigInt(n);
|
|
26
|
+
else if (isNaN(value) || !isFinite(value))
|
|
27
|
+
return stringifyNumber.stringifyNumber(node);
|
|
28
|
+
let sign = '';
|
|
29
|
+
if (value < 0) {
|
|
30
|
+
sign = '-';
|
|
31
|
+
value *= num(-1);
|
|
32
|
+
}
|
|
33
|
+
const _60 = num(60);
|
|
34
|
+
const parts = [value % _60]; // seconds, including ms
|
|
35
|
+
if (value < 60) {
|
|
36
|
+
parts.unshift(0); // at least one : is required
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
value = (value - parts[0]) / _60;
|
|
40
|
+
parts.unshift(value % _60); // minutes
|
|
41
|
+
if (value >= 60) {
|
|
42
|
+
value = (value - parts[0]) / _60;
|
|
43
|
+
parts.unshift(value); // hours
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return (sign +
|
|
47
|
+
parts
|
|
48
|
+
.map(n => (n < 10 ? '0' + String(n) : String(n)))
|
|
49
|
+
.join(':')
|
|
50
|
+
.replace(/000000\d*$/, '') // % 60 may introduce error
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
const intTime = {
|
|
54
|
+
identify: value => typeof value === 'bigint' || Number.isInteger(value),
|
|
55
|
+
default: true,
|
|
56
|
+
tag: 'tag:yaml.org,2002:int',
|
|
57
|
+
format: 'TIME',
|
|
58
|
+
test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,
|
|
59
|
+
resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),
|
|
60
|
+
stringify: stringifySexagesimal
|
|
61
|
+
};
|
|
62
|
+
const floatTime = {
|
|
63
|
+
identify: value => typeof value === 'number',
|
|
64
|
+
default: true,
|
|
65
|
+
tag: 'tag:yaml.org,2002:float',
|
|
66
|
+
format: 'TIME',
|
|
67
|
+
test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,
|
|
68
|
+
resolve: str => parseSexagesimal(str, false),
|
|
69
|
+
stringify: stringifySexagesimal
|
|
70
|
+
};
|
|
71
|
+
const timestamp = {
|
|
72
|
+
identify: value => value instanceof Date,
|
|
73
|
+
default: true,
|
|
74
|
+
tag: 'tag:yaml.org,2002:timestamp',
|
|
75
|
+
// If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part
|
|
76
|
+
// may be omitted altogether, resulting in a date format. In such a case, the time part is
|
|
77
|
+
// assumed to be 00:00:00Z (start of day, UTC).
|
|
78
|
+
test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd
|
|
79
|
+
'(?:' + // time is optional
|
|
80
|
+
'(?:t|T|[ \\t]+)' + // t | T | whitespace
|
|
81
|
+
'([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?
|
|
82
|
+
'(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30
|
|
83
|
+
')?$'),
|
|
84
|
+
resolve(str) {
|
|
85
|
+
const match = str.match(timestamp.test);
|
|
86
|
+
if (!match)
|
|
87
|
+
throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');
|
|
88
|
+
const [, year, month, day, hour, minute, second] = match.map(Number);
|
|
89
|
+
const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;
|
|
90
|
+
let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);
|
|
91
|
+
const tz = match[8];
|
|
92
|
+
if (tz && tz !== 'Z') {
|
|
93
|
+
let d = parseSexagesimal(tz, false);
|
|
94
|
+
if (Math.abs(d) < 30)
|
|
95
|
+
d *= 60;
|
|
96
|
+
date -= 60000 * d;
|
|
97
|
+
}
|
|
98
|
+
return new Date(date);
|
|
99
|
+
},
|
|
100
|
+
stringify: ({ value }) => value.toISOString().replace(/((T00:00)?:00)?\.000Z$/, '')
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
exports.floatTime = floatTime;
|
|
104
|
+
exports.intTime = intTime;
|
|
105
|
+
exports.timestamp = timestamp;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export declare const FOLD_FLOW = "flow";
|
|
2
|
+
export declare const FOLD_BLOCK = "block";
|
|
3
|
+
export declare const FOLD_QUOTED = "quoted";
|
|
4
|
+
/**
|
|
5
|
+
* `'block'` prevents more-indented lines from being folded;
|
|
6
|
+
* `'quoted'` allows for `\` escapes, including escaped newlines
|
|
7
|
+
*/
|
|
8
|
+
export declare type FoldMode = 'flow' | 'block' | 'quoted';
|
|
9
|
+
export interface FoldOptions {
|
|
10
|
+
/**
|
|
11
|
+
* Accounts for leading contents on the first line, defaulting to
|
|
12
|
+
* `indent.length`
|
|
13
|
+
*/
|
|
14
|
+
indentAtStart?: number;
|
|
15
|
+
/** Default: `80` */
|
|
16
|
+
lineWidth?: number;
|
|
17
|
+
/**
|
|
18
|
+
* Allow highly indented lines to stretch the line width or indent content
|
|
19
|
+
* from the start.
|
|
20
|
+
*
|
|
21
|
+
* Default: `20`
|
|
22
|
+
*/
|
|
23
|
+
minContentWidth?: number;
|
|
24
|
+
/** Called once if the text is folded */
|
|
25
|
+
onFold?: () => void;
|
|
26
|
+
/** Called once if any line of text exceeds lineWidth characters */
|
|
27
|
+
onOverflow?: () => void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Tries to keep input at up to `lineWidth` characters, splitting only on spaces
|
|
31
|
+
* not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are
|
|
32
|
+
* terminated with `\n` and started with `indent`.
|
|
33
|
+
*/
|
|
34
|
+
export declare function foldFlowLines(text: string, indent: string, mode?: FoldMode, { indentAtStart, lineWidth, minContentWidth, onFold, onOverflow }?: FoldOptions): string;
|
|
@@ -2,154 +2,136 @@
|
|
|
2
2
|
|
|
3
3
|
const FOLD_FLOW = 'flow';
|
|
4
4
|
const FOLD_BLOCK = 'block';
|
|
5
|
-
const FOLD_QUOTED = 'quoted';
|
|
6
|
-
// returns index of last newline in more-indented block
|
|
7
|
-
|
|
8
|
-
const consumeMoreIndentedLines = (text, i) => {
|
|
9
|
-
let ch = text[i + 1];
|
|
10
|
-
|
|
11
|
-
while (ch === ' ' || ch === '\t') {
|
|
12
|
-
do {
|
|
13
|
-
ch = text[i += 1];
|
|
14
|
-
} while (ch && ch !== '\n');
|
|
15
|
-
|
|
16
|
-
ch = text[i + 1];
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
return i;
|
|
20
|
-
};
|
|
5
|
+
const FOLD_QUOTED = 'quoted';
|
|
21
6
|
/**
|
|
22
7
|
* Tries to keep input at up to `lineWidth` characters, splitting only on spaces
|
|
23
8
|
* not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are
|
|
24
9
|
* terminated with `\n` and started with `indent`.
|
|
25
|
-
*
|
|
26
|
-
* @param {string} text
|
|
27
|
-
* @param {string} indent
|
|
28
|
-
* @param {string} [mode='flow'] `'block'` prevents more-indented lines
|
|
29
|
-
* from being folded; `'quoted'` allows for `\` escapes, including escaped
|
|
30
|
-
* newlines
|
|
31
|
-
* @param {Object} options
|
|
32
|
-
* @param {number} [options.indentAtStart] Accounts for leading contents on
|
|
33
|
-
* the first line, defaulting to `indent.length`
|
|
34
|
-
* @param {number} [options.lineWidth=80]
|
|
35
|
-
* @param {number} [options.minContentWidth=20] Allow highly indented lines to
|
|
36
|
-
* stretch the line width or indent content from the start
|
|
37
|
-
* @param {function} options.onFold Called once if the text is folded
|
|
38
|
-
* @param {function} options.onFold Called once if any line of text exceeds
|
|
39
|
-
* lineWidth characters
|
|
40
10
|
*/
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
let end = lineWidth - indent.length;
|
|
56
|
-
|
|
57
|
-
if (typeof indentAtStart === 'number') {
|
|
58
|
-
if (indentAtStart > lineWidth - Math.max(2, minContentWidth)) folds.push(0);else end = lineWidth - indentAtStart;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
let split = undefined;
|
|
62
|
-
let prev = undefined;
|
|
63
|
-
let overflow = false;
|
|
64
|
-
let i = -1;
|
|
65
|
-
let escStart = -1;
|
|
66
|
-
let escEnd = -1;
|
|
67
|
-
|
|
68
|
-
if (mode === FOLD_BLOCK) {
|
|
69
|
-
i = consumeMoreIndentedLines(text, i);
|
|
70
|
-
if (i !== -1) end = i + endStep;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
for (let ch; ch = text[i += 1];) {
|
|
74
|
-
if (mode === FOLD_QUOTED && ch === '\\') {
|
|
75
|
-
escStart = i;
|
|
76
|
-
|
|
77
|
-
switch (text[i + 1]) {
|
|
78
|
-
case 'x':
|
|
79
|
-
i += 3;
|
|
80
|
-
break;
|
|
81
|
-
|
|
82
|
-
case 'u':
|
|
83
|
-
i += 5;
|
|
84
|
-
break;
|
|
85
|
-
|
|
86
|
-
case 'U':
|
|
87
|
-
i += 9;
|
|
88
|
-
break;
|
|
89
|
-
|
|
90
|
-
default:
|
|
91
|
-
i += 1;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
escEnd = i;
|
|
11
|
+
function foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {
|
|
12
|
+
if (!lineWidth || lineWidth < 0)
|
|
13
|
+
return text;
|
|
14
|
+
const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);
|
|
15
|
+
if (text.length <= endStep)
|
|
16
|
+
return text;
|
|
17
|
+
const folds = [];
|
|
18
|
+
const escapedFolds = {};
|
|
19
|
+
let end = lineWidth - indent.length;
|
|
20
|
+
if (typeof indentAtStart === 'number') {
|
|
21
|
+
if (indentAtStart > lineWidth - Math.max(2, minContentWidth))
|
|
22
|
+
folds.push(0);
|
|
23
|
+
else
|
|
24
|
+
end = lineWidth - indentAtStart;
|
|
95
25
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
overflow = true;
|
|
26
|
+
let split = undefined;
|
|
27
|
+
let prev = undefined;
|
|
28
|
+
let overflow = false;
|
|
29
|
+
let i = -1;
|
|
30
|
+
let escStart = -1;
|
|
31
|
+
let escEnd = -1;
|
|
32
|
+
if (mode === FOLD_BLOCK) {
|
|
33
|
+
i = consumeMoreIndentedLines(text, i);
|
|
34
|
+
if (i !== -1)
|
|
35
|
+
end = i + endStep;
|
|
36
|
+
}
|
|
37
|
+
for (let ch; (ch = text[(i += 1)]);) {
|
|
38
|
+
if (mode === FOLD_QUOTED && ch === '\\') {
|
|
39
|
+
escStart = i;
|
|
40
|
+
switch (text[i + 1]) {
|
|
41
|
+
case 'x':
|
|
42
|
+
i += 3;
|
|
43
|
+
break;
|
|
44
|
+
case 'u':
|
|
45
|
+
i += 5;
|
|
46
|
+
break;
|
|
47
|
+
case 'U':
|
|
48
|
+
i += 9;
|
|
49
|
+
break;
|
|
50
|
+
default:
|
|
51
|
+
i += 1;
|
|
52
|
+
}
|
|
53
|
+
escEnd = i;
|
|
54
|
+
}
|
|
55
|
+
if (ch === '\n') {
|
|
56
|
+
if (mode === FOLD_BLOCK)
|
|
57
|
+
i = consumeMoreIndentedLines(text, i);
|
|
58
|
+
end = i + endStep;
|
|
59
|
+
split = undefined;
|
|
131
60
|
}
|
|
132
|
-
|
|
61
|
+
else {
|
|
62
|
+
if (ch === ' ' &&
|
|
63
|
+
prev &&
|
|
64
|
+
prev !== ' ' &&
|
|
65
|
+
prev !== '\n' &&
|
|
66
|
+
prev !== '\t') {
|
|
67
|
+
// space surrounded by non-space can be replaced with newline + indent
|
|
68
|
+
const next = text[i + 1];
|
|
69
|
+
if (next && next !== ' ' && next !== '\n' && next !== '\t')
|
|
70
|
+
split = i;
|
|
71
|
+
}
|
|
72
|
+
if (i >= end) {
|
|
73
|
+
if (split) {
|
|
74
|
+
folds.push(split);
|
|
75
|
+
end = split + endStep;
|
|
76
|
+
split = undefined;
|
|
77
|
+
}
|
|
78
|
+
else if (mode === FOLD_QUOTED) {
|
|
79
|
+
// white-space collected at end may stretch past lineWidth
|
|
80
|
+
while (prev === ' ' || prev === '\t') {
|
|
81
|
+
prev = ch;
|
|
82
|
+
ch = text[(i += 1)];
|
|
83
|
+
overflow = true;
|
|
84
|
+
}
|
|
85
|
+
// Account for newline escape, but don't break preceding escape
|
|
86
|
+
const j = i > escEnd + 1 ? i - 2 : escStart - 1;
|
|
87
|
+
// Bail out if lineWidth & minContentWidth are shorter than an escape string
|
|
88
|
+
if (escapedFolds[j])
|
|
89
|
+
return text;
|
|
90
|
+
folds.push(j);
|
|
91
|
+
escapedFolds[j] = true;
|
|
92
|
+
end = j + endStep;
|
|
93
|
+
split = undefined;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
overflow = true;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
prev = ch;
|
|
133
101
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
102
|
+
if (overflow && onOverflow)
|
|
103
|
+
onOverflow();
|
|
104
|
+
if (folds.length === 0)
|
|
105
|
+
return text;
|
|
106
|
+
if (onFold)
|
|
107
|
+
onFold();
|
|
108
|
+
let res = text.slice(0, folds[0]);
|
|
109
|
+
for (let i = 0; i < folds.length; ++i) {
|
|
110
|
+
const fold = folds[i];
|
|
111
|
+
const end = folds[i + 1] || text.length;
|
|
112
|
+
if (fold === 0)
|
|
113
|
+
res = `\n${indent}${text.slice(0, end)}`;
|
|
114
|
+
else {
|
|
115
|
+
if (mode === FOLD_QUOTED && escapedFolds[fold])
|
|
116
|
+
res += `${text[fold]}\\`;
|
|
117
|
+
res += `\n${indent}${text.slice(fold + 1, end)}`;
|
|
118
|
+
}
|
|
149
119
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
120
|
+
return res;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Presumes `i + 1` is at the start of a line
|
|
124
|
+
* @returns index of last newline in more-indented block
|
|
125
|
+
*/
|
|
126
|
+
function consumeMoreIndentedLines(text, i) {
|
|
127
|
+
let ch = text[i + 1];
|
|
128
|
+
while (ch === ' ' || ch === '\t') {
|
|
129
|
+
do {
|
|
130
|
+
ch = text[(i += 1)];
|
|
131
|
+
} while (ch && ch !== '\n');
|
|
132
|
+
ch = text[i + 1];
|
|
133
|
+
}
|
|
134
|
+
return i;
|
|
153
135
|
}
|
|
154
136
|
|
|
155
137
|
exports.FOLD_BLOCK = FOLD_BLOCK;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Document } from '../doc/Document.js';
|
|
2
|
+
import type { ToStringOptions } from '../options.js';
|
|
3
|
+
export declare type StringifyContext = {
|
|
4
|
+
actualString?: boolean;
|
|
5
|
+
allNullValues?: boolean;
|
|
6
|
+
anchors: Set<string>;
|
|
7
|
+
doc: Document;
|
|
8
|
+
forceBlockIndent?: boolean;
|
|
9
|
+
implicitKey?: boolean;
|
|
10
|
+
indent: string;
|
|
11
|
+
indentStep: string;
|
|
12
|
+
indentAtStart?: number;
|
|
13
|
+
inFlow?: boolean;
|
|
14
|
+
inStringifyKey?: boolean;
|
|
15
|
+
options: Readonly<Required<Omit<ToStringOptions, 'indent'>>>;
|
|
16
|
+
};
|
|
17
|
+
export declare const createStringifyContext: (doc: Document, options: ToStringOptions) => StringifyContext;
|
|
18
|
+
export declare function stringify(item: unknown, ctx: StringifyContext, onComment?: () => void, onChompKeep?: () => void): string;
|