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,19 +1,19 @@
1
- "use strict";
1
+ 'use strict';
2
2
 
3
- exports.testEvents = testEvents;
4
-
5
- var _parse = require("./cst/parse");
6
-
7
- var _Document = require("./Document");
3
+ var parseCst = require('./parse-cst.js');
4
+ var Document = require('./Document-9b4560a1.js');
5
+ require('./PlainValue-ec8e588e.js');
6
+ require('./resolveSeq-d03cb037.js');
7
+ require('./Schema-88e323a7.js');
8
+ require('./warnings-1000a372.js');
8
9
 
9
- // test harness for yaml-test-suite event tests
10
10
  function testEvents(src, options) {
11
11
  const opt = Object.assign({
12
12
  keepCstNodes: true,
13
13
  keepNodeTypes: true,
14
14
  version: '1.2'
15
15
  }, options);
16
- const docs = (0, _parse.parse)(src).map(cstDoc => new _Document.Document(opt).parse(cstDoc));
16
+ const docs = parseCst.parse(src).map(cstDoc => new Document.Document(opt).parse(cstDoc));
17
17
  const errDoc = docs.find(doc => doc.errors.length > 0);
18
18
  const error = errDoc ? errDoc.errors[0].message : null;
19
19
  const events = ['+STR'];
@@ -157,4 +157,6 @@ function addEvents(events, doc, e, node) {
157
157
  const value = node.cstNode.strValue.replace(/\\/g, '\\\\').replace(/\0/g, '\\0').replace(/\x07/g, '\\a').replace(/\x08/g, '\\b').replace(/\t/g, '\\t').replace(/\n/g, '\\n').replace(/\v/g, '\\v').replace(/\f/g, '\\f').replace(/\r/g, '\\r').replace(/\x1b/g, '\\e');
158
158
  events.push(`=VAL${props} ${scalar}${value}`);
159
159
  }
160
- }
160
+ }
161
+
162
+ exports.testEvents = testEvents;
package/dist/types.js ADDED
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var resolveSeq = require('./resolveSeq-d03cb037.js');
4
+ var Schema = require('./Schema-88e323a7.js');
5
+ require('./PlainValue-ec8e588e.js');
6
+ require('./warnings-1000a372.js');
7
+
8
+
9
+
10
+ exports.Alias = resolveSeq.Alias;
11
+ exports.Collection = resolveSeq.Collection;
12
+ exports.Merge = resolveSeq.Merge;
13
+ exports.Node = resolveSeq.Node;
14
+ exports.Pair = resolveSeq.Pair;
15
+ exports.Scalar = resolveSeq.Scalar;
16
+ exports.YAMLMap = resolveSeq.YAMLMap;
17
+ exports.YAMLSeq = resolveSeq.YAMLSeq;
18
+ exports.binaryOptions = resolveSeq.binaryOptions;
19
+ exports.boolOptions = resolveSeq.boolOptions;
20
+ exports.intOptions = resolveSeq.intOptions;
21
+ exports.nullOptions = resolveSeq.nullOptions;
22
+ exports.strOptions = resolveSeq.strOptions;
23
+ exports.Schema = Schema.Schema;
package/dist/util.js ADDED
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ var resolveSeq = require('./resolveSeq-d03cb037.js');
4
+ var PlainValue = require('./PlainValue-ec8e588e.js');
5
+
6
+
7
+
8
+ exports.findPair = resolveSeq.findPair;
9
+ exports.parseMap = resolveSeq.resolveMap;
10
+ exports.parseSeq = resolveSeq.resolveSeq;
11
+ exports.stringifyNumber = resolveSeq.stringifyNumber;
12
+ exports.stringifyString = resolveSeq.stringifyString;
13
+ exports.toJSON = resolveSeq.toJSON;
14
+ exports.Type = PlainValue.Type;
15
+ exports.YAMLError = PlainValue.YAMLError;
16
+ exports.YAMLReferenceError = PlainValue.YAMLReferenceError;
17
+ exports.YAMLSemanticError = PlainValue.YAMLSemanticError;
18
+ exports.YAMLSyntaxError = PlainValue.YAMLSyntaxError;
19
+ exports.YAMLWarning = PlainValue.YAMLWarning;
@@ -0,0 +1,416 @@
1
+ 'use strict';
2
+
3
+ var PlainValue = require('./PlainValue-ec8e588e.js');
4
+ var resolveSeq = require('./resolveSeq-d03cb037.js');
5
+
6
+ /* global atob, btoa, Buffer */
7
+ const binary = {
8
+ identify: value => value instanceof Uint8Array,
9
+ // Buffer inherits from Uint8Array
10
+ default: false,
11
+ tag: 'tag:yaml.org,2002:binary',
12
+
13
+ /**
14
+ * Returns a Buffer in node and an Uint8Array in browsers
15
+ *
16
+ * To use the resulting buffer as an image, you'll want to do something like:
17
+ *
18
+ * const blob = new Blob([buffer], { type: 'image/jpeg' })
19
+ * document.querySelector('#photo').src = URL.createObjectURL(blob)
20
+ */
21
+ resolve: (doc, node) => {
22
+ const src = resolveSeq.resolveString(doc, node);
23
+
24
+ if (typeof Buffer === 'function') {
25
+ return Buffer.from(src, 'base64');
26
+ } else if (typeof atob === 'function') {
27
+ // On IE 11, atob() can't handle newlines
28
+ const str = atob(src.replace(/[\n\r]/g, ''));
29
+ const buffer = new Uint8Array(str.length);
30
+
31
+ for (let i = 0; i < str.length; ++i) buffer[i] = str.charCodeAt(i);
32
+
33
+ return buffer;
34
+ } else {
35
+ const msg = 'This environment does not support reading binary tags; either Buffer or atob is required';
36
+ doc.errors.push(new PlainValue.YAMLReferenceError(node, msg));
37
+ return null;
38
+ }
39
+ },
40
+ options: resolveSeq.binaryOptions,
41
+ stringify: ({
42
+ comment,
43
+ type,
44
+ value
45
+ }, ctx, onComment, onChompKeep) => {
46
+ let src;
47
+
48
+ if (typeof Buffer === 'function') {
49
+ src = value instanceof Buffer ? value.toString('base64') : Buffer.from(value.buffer).toString('base64');
50
+ } else if (typeof btoa === 'function') {
51
+ let s = '';
52
+
53
+ for (let i = 0; i < value.length; ++i) s += String.fromCharCode(value[i]);
54
+
55
+ src = btoa(s);
56
+ } else {
57
+ throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');
58
+ }
59
+
60
+ if (!type) type = resolveSeq.binaryOptions.defaultType;
61
+
62
+ if (type === PlainValue.Type.QUOTE_DOUBLE) {
63
+ value = src;
64
+ } else {
65
+ const {
66
+ lineWidth
67
+ } = resolveSeq.binaryOptions;
68
+ const n = Math.ceil(src.length / lineWidth);
69
+ const lines = new Array(n);
70
+
71
+ for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {
72
+ lines[i] = src.substr(o, lineWidth);
73
+ }
74
+
75
+ value = lines.join(type === PlainValue.Type.BLOCK_LITERAL ? '\n' : ' ');
76
+ }
77
+
78
+ return resolveSeq.stringifyString({
79
+ comment,
80
+ type,
81
+ value
82
+ }, ctx, onComment, onChompKeep);
83
+ }
84
+ };
85
+
86
+ function parsePairs(doc, cst) {
87
+ const seq = resolveSeq.resolveSeq(doc, cst);
88
+
89
+ for (let i = 0; i < seq.items.length; ++i) {
90
+ let item = seq.items[i];
91
+ if (item instanceof resolveSeq.Pair) continue;else if (item instanceof resolveSeq.YAMLMap) {
92
+ if (item.items.length > 1) {
93
+ const msg = 'Each pair must have its own sequence indicator';
94
+ throw new PlainValue.YAMLSemanticError(cst, msg);
95
+ }
96
+
97
+ const pair = item.items[0] || new resolveSeq.Pair();
98
+ if (item.commentBefore) pair.commentBefore = pair.commentBefore ? `${item.commentBefore}\n${pair.commentBefore}` : item.commentBefore;
99
+ if (item.comment) pair.comment = pair.comment ? `${item.comment}\n${pair.comment}` : item.comment;
100
+ item = pair;
101
+ }
102
+ seq.items[i] = item instanceof resolveSeq.Pair ? item : new resolveSeq.Pair(item);
103
+ }
104
+
105
+ return seq;
106
+ }
107
+ function createPairs(schema, iterable, ctx) {
108
+ const pairs = new resolveSeq.YAMLSeq(schema);
109
+ pairs.tag = 'tag:yaml.org,2002:pairs';
110
+
111
+ for (const it of iterable) {
112
+ let key, value;
113
+
114
+ if (Array.isArray(it)) {
115
+ if (it.length === 2) {
116
+ key = it[0];
117
+ value = it[1];
118
+ } else throw new TypeError(`Expected [key, value] tuple: ${it}`);
119
+ } else if (it && it instanceof Object) {
120
+ const keys = Object.keys(it);
121
+
122
+ if (keys.length === 1) {
123
+ key = keys[0];
124
+ value = it[key];
125
+ } else throw new TypeError(`Expected { key: value } tuple: ${it}`);
126
+ } else {
127
+ key = it;
128
+ }
129
+
130
+ const pair = schema.createPair(key, value, ctx);
131
+ pairs.items.push(pair);
132
+ }
133
+
134
+ return pairs;
135
+ }
136
+ const pairs = {
137
+ default: false,
138
+ tag: 'tag:yaml.org,2002:pairs',
139
+ resolve: parsePairs,
140
+ createNode: createPairs
141
+ };
142
+
143
+ class YAMLOMap extends resolveSeq.YAMLSeq {
144
+ constructor() {
145
+ super();
146
+
147
+ PlainValue._defineProperty(this, "add", resolveSeq.YAMLMap.prototype.add.bind(this));
148
+
149
+ PlainValue._defineProperty(this, "delete", resolveSeq.YAMLMap.prototype.delete.bind(this));
150
+
151
+ PlainValue._defineProperty(this, "get", resolveSeq.YAMLMap.prototype.get.bind(this));
152
+
153
+ PlainValue._defineProperty(this, "has", resolveSeq.YAMLMap.prototype.has.bind(this));
154
+
155
+ PlainValue._defineProperty(this, "set", resolveSeq.YAMLMap.prototype.set.bind(this));
156
+
157
+ this.tag = YAMLOMap.tag;
158
+ }
159
+
160
+ toJSON(_, ctx) {
161
+ const map = new Map();
162
+ if (ctx && ctx.onCreate) ctx.onCreate(map);
163
+
164
+ for (const pair of this.items) {
165
+ let key, value;
166
+
167
+ if (pair instanceof resolveSeq.Pair) {
168
+ key = resolveSeq.toJSON(pair.key, '', ctx);
169
+ value = resolveSeq.toJSON(pair.value, key, ctx);
170
+ } else {
171
+ key = resolveSeq.toJSON(pair, '', ctx);
172
+ }
173
+
174
+ if (map.has(key)) throw new Error('Ordered maps must not include duplicate keys');
175
+ map.set(key, value);
176
+ }
177
+
178
+ return map;
179
+ }
180
+
181
+ }
182
+
183
+ PlainValue._defineProperty(YAMLOMap, "tag", 'tag:yaml.org,2002:omap');
184
+
185
+ function parseOMap(doc, cst) {
186
+ const pairs = parsePairs(doc, cst);
187
+ const seenKeys = [];
188
+
189
+ for (const {
190
+ key
191
+ } of pairs.items) {
192
+ if (key instanceof resolveSeq.Scalar) {
193
+ if (seenKeys.includes(key.value)) {
194
+ const msg = 'Ordered maps must not include duplicate keys';
195
+ throw new PlainValue.YAMLSemanticError(cst, msg);
196
+ } else {
197
+ seenKeys.push(key.value);
198
+ }
199
+ }
200
+ }
201
+
202
+ return Object.assign(new YAMLOMap(), pairs);
203
+ }
204
+
205
+ function createOMap(schema, iterable, ctx) {
206
+ const pairs = createPairs(schema, iterable, ctx);
207
+ const omap = new YAMLOMap();
208
+ omap.items = pairs.items;
209
+ return omap;
210
+ }
211
+
212
+ const omap = {
213
+ identify: value => value instanceof Map,
214
+ nodeClass: YAMLOMap,
215
+ default: false,
216
+ tag: 'tag:yaml.org,2002:omap',
217
+ resolve: parseOMap,
218
+ createNode: createOMap
219
+ };
220
+
221
+ class YAMLSet extends resolveSeq.YAMLMap {
222
+ constructor() {
223
+ super();
224
+ this.tag = YAMLSet.tag;
225
+ }
226
+
227
+ add(key) {
228
+ const pair = key instanceof resolveSeq.Pair ? key : new resolveSeq.Pair(key);
229
+ const prev = resolveSeq.findPair(this.items, pair.key);
230
+ if (!prev) this.items.push(pair);
231
+ }
232
+
233
+ get(key, keepPair) {
234
+ const pair = resolveSeq.findPair(this.items, key);
235
+ return !keepPair && pair instanceof resolveSeq.Pair ? pair.key instanceof resolveSeq.Scalar ? pair.key.value : pair.key : pair;
236
+ }
237
+
238
+ set(key, value) {
239
+ if (typeof value !== 'boolean') throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);
240
+ const prev = resolveSeq.findPair(this.items, key);
241
+
242
+ if (prev && !value) {
243
+ this.items.splice(this.items.indexOf(prev), 1);
244
+ } else if (!prev && value) {
245
+ this.items.push(new resolveSeq.Pair(key));
246
+ }
247
+ }
248
+
249
+ toJSON(_, ctx) {
250
+ return super.toJSON(_, ctx, Set);
251
+ }
252
+
253
+ toString(ctx, onComment, onChompKeep) {
254
+ if (!ctx) return JSON.stringify(this);
255
+ if (this.hasAllNullValues()) return super.toString(ctx, onComment, onChompKeep);else throw new Error('Set items must all have null values');
256
+ }
257
+
258
+ }
259
+
260
+ PlainValue._defineProperty(YAMLSet, "tag", 'tag:yaml.org,2002:set');
261
+
262
+ function parseSet(doc, cst) {
263
+ const map = resolveSeq.resolveMap(doc, cst);
264
+ if (!map.hasAllNullValues()) throw new PlainValue.YAMLSemanticError(cst, 'Set items must all have null values');
265
+ return Object.assign(new YAMLSet(), map);
266
+ }
267
+
268
+ function createSet(schema, iterable, ctx) {
269
+ const set = new YAMLSet();
270
+
271
+ for (const value of iterable) set.items.push(schema.createPair(value, null, ctx));
272
+
273
+ return set;
274
+ }
275
+
276
+ const set = {
277
+ identify: value => value instanceof Set,
278
+ nodeClass: YAMLSet,
279
+ default: false,
280
+ tag: 'tag:yaml.org,2002:set',
281
+ resolve: parseSet,
282
+ createNode: createSet
283
+ };
284
+
285
+ const parseSexagesimal = (sign, parts) => {
286
+ const n = parts.split(':').reduce((n, p) => n * 60 + Number(p), 0);
287
+ return sign === '-' ? -n : n;
288
+ }; // hhhh:mm:ss.sss
289
+
290
+
291
+ const stringifySexagesimal = ({
292
+ value
293
+ }) => {
294
+ if (isNaN(value) || !isFinite(value)) return resolveSeq.stringifyNumber(value);
295
+ let sign = '';
296
+
297
+ if (value < 0) {
298
+ sign = '-';
299
+ value = Math.abs(value);
300
+ }
301
+
302
+ const parts = [value % 60]; // seconds, including ms
303
+
304
+ if (value < 60) {
305
+ parts.unshift(0); // at least one : is required
306
+ } else {
307
+ value = Math.round((value - parts[0]) / 60);
308
+ parts.unshift(value % 60); // minutes
309
+
310
+ if (value >= 60) {
311
+ value = Math.round((value - parts[0]) / 60);
312
+ parts.unshift(value); // hours
313
+ }
314
+ }
315
+
316
+ return sign + parts.map(n => n < 10 ? '0' + String(n) : String(n)).join(':').replace(/000000\d*$/, '') // % 60 may introduce error
317
+ ;
318
+ };
319
+
320
+ const intTime = {
321
+ identify: value => typeof value === 'number',
322
+ default: true,
323
+ tag: 'tag:yaml.org,2002:int',
324
+ format: 'TIME',
325
+ test: /^([-+]?)([0-9][0-9_]*(?::[0-5]?[0-9])+)$/,
326
+ resolve: (str, sign, parts) => parseSexagesimal(sign, parts.replace(/_/g, '')),
327
+ stringify: stringifySexagesimal
328
+ };
329
+ const floatTime = {
330
+ identify: value => typeof value === 'number',
331
+ default: true,
332
+ tag: 'tag:yaml.org,2002:float',
333
+ format: 'TIME',
334
+ test: /^([-+]?)([0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*)$/,
335
+ resolve: (str, sign, parts) => parseSexagesimal(sign, parts.replace(/_/g, '')),
336
+ stringify: stringifySexagesimal
337
+ };
338
+ const timestamp = {
339
+ identify: value => value instanceof Date,
340
+ default: true,
341
+ tag: 'tag:yaml.org,2002:timestamp',
342
+ // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part
343
+ // may be omitted altogether, resulting in a date format. In such a case, the time part is
344
+ // assumed to be 00:00:00Z (start of day, UTC).
345
+ test: RegExp('^(?:' + '([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd
346
+ '(?:(?:t|T|[ \\t]+)' + // t | T | whitespace
347
+ '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?
348
+ '(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30
349
+ ')?' + ')$'),
350
+ resolve: (str, year, month, day, hour, minute, second, millisec, tz) => {
351
+ if (millisec) millisec = (millisec + '00').substr(1, 3);
352
+ let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec || 0);
353
+
354
+ if (tz && tz !== 'Z') {
355
+ let d = parseSexagesimal(tz[0], tz.slice(1));
356
+ if (Math.abs(d) < 30) d *= 60;
357
+ date -= 60000 * d;
358
+ }
359
+
360
+ return new Date(date);
361
+ },
362
+ stringify: ({
363
+ value
364
+ }) => value.toISOString().replace(/((T00:00)?:00)?\.000Z$/, '')
365
+ };
366
+
367
+ /* global console, process, YAML_SILENCE_DEPRECATION_WARNINGS, YAML_SILENCE_WARNINGS */
368
+ function shouldWarn(deprecation) {
369
+ const env = typeof process !== 'undefined' && process.env || {};
370
+
371
+ if (deprecation) {
372
+ if (typeof YAML_SILENCE_DEPRECATION_WARNINGS !== 'undefined') return !YAML_SILENCE_DEPRECATION_WARNINGS;
373
+ return !env.YAML_SILENCE_DEPRECATION_WARNINGS;
374
+ }
375
+
376
+ if (typeof YAML_SILENCE_WARNINGS !== 'undefined') return !YAML_SILENCE_WARNINGS;
377
+ return !env.YAML_SILENCE_WARNINGS;
378
+ }
379
+
380
+ function warn(warning, type) {
381
+ if (shouldWarn(false)) {
382
+ const emit = typeof process !== 'undefined' && process.emitWarning; // This will throw in Jest if `warning` is an Error instance due to
383
+ // https://github.com/facebook/jest/issues/2549
384
+
385
+ if (emit) emit(warning, type);else {
386
+ // eslint-disable-next-line no-console
387
+ console.warn(type ? `${type}: ${warning}` : warning);
388
+ }
389
+ }
390
+ }
391
+ function warnFileDeprecation(filename) {
392
+ if (shouldWarn(true)) {
393
+ const path = filename.replace(/.*yaml[/\\]/i, '').replace(/\.js$/, '').replace(/\\/g, '/');
394
+ warn(`The endpoint 'yaml/${path}' will be removed in a future release.`, 'DeprecationWarning');
395
+ }
396
+ }
397
+ const warned = {};
398
+ function warnOptionDeprecation(name, alternative) {
399
+ if (!warned[name] && shouldWarn(true)) {
400
+ warned[name] = true;
401
+ let msg = `The option '${name}' will be removed in a future release`;
402
+ msg += alternative ? `, use '${alternative}' instead.` : '.';
403
+ warn(msg, 'DeprecationWarning');
404
+ }
405
+ }
406
+
407
+ exports.binary = binary;
408
+ exports.floatTime = floatTime;
409
+ exports.intTime = intTime;
410
+ exports.omap = omap;
411
+ exports.pairs = pairs;
412
+ exports.set = set;
413
+ exports.timestamp = timestamp;
414
+ exports.warn = warn;
415
+ exports.warnFileDeprecation = warnFileDeprecation;
416
+ exports.warnOptionDeprecation = warnOptionDeprecation;
package/index.d.ts CHANGED
@@ -1,5 +1,15 @@
1
1
  import { CST } from './parse-cst'
2
- import { AST, Scalar, Schema, YAMLMap, YAMLSeq } from './types'
2
+ import {
3
+ AST,
4
+ Alias,
5
+ Collection,
6
+ Merge,
7
+ Node,
8
+ Scalar,
9
+ Schema,
10
+ YAMLMap,
11
+ YAMLSeq
12
+ } from './types'
3
13
  import { Type, YAMLError, YAMLWarning } from './util'
4
14
 
5
15
  export { AST, CST }
@@ -133,7 +143,7 @@ export namespace scalarOptions {
133
143
  *
134
144
  * Default: `false`
135
145
  */
136
- asBigInt: false
146
+ asBigInt: boolean
137
147
  }
138
148
 
139
149
  interface Null {
@@ -183,10 +193,11 @@ export namespace scalarOptions {
183
193
  }
184
194
  }
185
195
 
186
- export class Document extends AST.Collection {
196
+ export class Document extends Collection {
187
197
  cstNode?: CST.Document
188
198
  constructor(options?: Options)
189
199
  tag: never
200
+ directivesEndMarker?: boolean
190
201
  type: Type.DOCUMENT
191
202
  /**
192
203
  * Anchors associated with the document's nodes;
@@ -194,7 +205,7 @@ export class Document extends AST.Collection {
194
205
  */
195
206
  anchors: Document.Anchors
196
207
  /** The document contents. */
197
- contents: AST.AstNode | null
208
+ contents: any
198
209
  /** Errors encountered during parsing. */
199
210
  errors: YAMLError[]
200
211
  /**
@@ -249,6 +260,7 @@ export class Document extends AST.Collection {
249
260
 
250
261
  export namespace Document {
251
262
  interface Parsed extends Document {
263
+ contents: Scalar | YAMLMap | YAMLSeq | null
252
264
  /** The schema used with the document. */
253
265
  schema: Schema
254
266
  }
@@ -258,16 +270,18 @@ export namespace Document {
258
270
  * Create a new `Alias` node, adding the required anchor for `node`.
259
271
  * If `name` is empty, a new anchor name will be generated.
260
272
  */
261
- createAlias(node: AST.Node, name?: string): AST.Alias
273
+ createAlias(node: Node, name?: string): Alias
262
274
  /**
263
275
  * Create a new `Merge` node with the given source nodes.
264
276
  * Non-`Alias` sources will be automatically wrapped.
265
277
  */
266
- createMergePair(...nodes: AST.Node[]): AST.Merge
278
+ createMergePair(...nodes: Node[]): Merge
267
279
  /** The anchor name associated with `node`, if set. */
268
- getName(node: AST.Node): undefined | string
280
+ getName(node: Node): undefined | string
281
+ /** List of all defined anchor names. */
282
+ getNames(): string[]
269
283
  /** The node associated with the anchor `name`, if set. */
270
- getNode(name: string): undefined | AST.Node
284
+ getNode(name: string): undefined | Node
271
285
  /**
272
286
  * Find an available anchor name with the given `prefix` and a
273
287
  * numerical suffix.
@@ -277,7 +291,7 @@ export namespace Document {
277
291
  * Associate an anchor with `node`. If `name` is empty, a new name will be generated.
278
292
  * To remove an anchor, use `setAnchor(null, name)`.
279
293
  */
280
- setAnchor(node: AST.Node | null, name?: string): void | string
294
+ setAnchor(node: Node | null, name?: string): void | string
281
295
  }
282
296
 
283
297
  interface TagPrefix {
package/map.js CHANGED
@@ -1,2 +1,2 @@
1
- module.exports = require('./dist/schema/Map').YAMLMap
2
- require('./dist/warnings').warnFileDeprecation(__filename)
1
+ module.exports = require('./dist/types').YAMLMap
2
+ require('./dist/legacy-exports').warnFileDeprecation(__filename)