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.
Files changed (163) hide show
  1. package/README.md +4 -4
  2. package/browser/dist/PlainValue-ff5147c6.js +1277 -0
  3. package/browser/dist/Schema-2bf2c74e.js +679 -0
  4. package/browser/dist/index.js +923 -38
  5. package/browser/dist/legacy-exports.js +3 -0
  6. package/browser/dist/parse-cst.js +1904 -0
  7. package/browser/dist/resolveSeq-04825f30.js +2373 -0
  8. package/browser/dist/types.js +4 -0
  9. package/browser/dist/util.js +2 -0
  10. package/browser/dist/warnings-0e4b70d3.js +499 -0
  11. package/browser/index.js +1 -1
  12. package/browser/map.js +2 -2
  13. package/browser/pair.js +2 -2
  14. package/browser/parse-cst.js +1 -1
  15. package/browser/scalar.js +2 -2
  16. package/browser/schema.js +8 -6
  17. package/browser/seq.js +2 -2
  18. package/browser/types/binary.js +3 -2
  19. package/browser/types/omap.js +3 -2
  20. package/browser/types/pairs.js +3 -2
  21. package/browser/types/set.js +3 -2
  22. package/browser/types/timestamp.js +6 -6
  23. package/browser/types.js +1 -11
  24. package/browser/util.js +1 -15
  25. package/dist/Document-2cf6b08c.js +757 -0
  26. package/dist/PlainValue-ec8e588e.js +876 -0
  27. package/dist/Schema-42e9705c.js +522 -0
  28. package/dist/index.js +21 -43
  29. package/dist/legacy-exports.js +16 -0
  30. package/dist/parse-cst.js +1747 -0
  31. package/dist/resolveSeq-4a68b39b.js +2115 -0
  32. package/dist/test-events.js +11 -14
  33. package/dist/types.js +23 -0
  34. package/dist/util.js +19 -0
  35. package/dist/warnings-39684f17.js +416 -0
  36. package/index.d.ts +372 -0
  37. package/index.js +1 -1
  38. package/map.js +2 -2
  39. package/package.json +32 -45
  40. package/pair.js +2 -2
  41. package/parse-cst.d.ts +187 -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 +407 -0
  52. package/types.js +16 -10
  53. package/types.mjs +15 -18
  54. package/util.d.ts +86 -0
  55. package/util.js +14 -13
  56. package/util.mjs +13 -19
  57. package/browser/dist/Anchors.js +0 -133
  58. package/browser/dist/Document.js +0 -819
  59. package/browser/dist/addComment.js +0 -8
  60. package/browser/dist/constants.js +0 -26
  61. package/browser/dist/cst/Alias.js +0 -42
  62. package/browser/dist/cst/BlankLine.js +0 -56
  63. package/browser/dist/cst/BlockValue.js +0 -247
  64. package/browser/dist/cst/Collection.js +0 -274
  65. package/browser/dist/cst/CollectionItem.js +0 -136
  66. package/browser/dist/cst/Comment.js +0 -40
  67. package/browser/dist/cst/Directive.js +0 -72
  68. package/browser/dist/cst/Document.js +0 -282
  69. package/browser/dist/cst/FlowCollection.js +0 -216
  70. package/browser/dist/cst/Node.js +0 -388
  71. package/browser/dist/cst/ParseContext.js +0 -248
  72. package/browser/dist/cst/PlainValue.js +0 -166
  73. package/browser/dist/cst/QuoteDouble.js +0 -241
  74. package/browser/dist/cst/QuoteSingle.js +0 -116
  75. package/browser/dist/cst/Range.js +0 -67
  76. package/browser/dist/cst/parse.js +0 -48
  77. package/browser/dist/cst/source-utils.js +0 -168
  78. package/browser/dist/errors.js +0 -112
  79. package/browser/dist/foldFlowLines.js +0 -138
  80. package/browser/dist/listTagNames.js +0 -28
  81. package/browser/dist/schema/Alias.js +0 -139
  82. package/browser/dist/schema/Collection.js +0 -267
  83. package/browser/dist/schema/Map.js +0 -178
  84. package/browser/dist/schema/Merge.js +0 -127
  85. package/browser/dist/schema/Node.js +0 -7
  86. package/browser/dist/schema/Pair.js +0 -171
  87. package/browser/dist/schema/Scalar.js +0 -38
  88. package/browser/dist/schema/Seq.js +0 -114
  89. package/browser/dist/schema/index.js +0 -382
  90. package/browser/dist/schema/parseMap.js +0 -312
  91. package/browser/dist/schema/parseSeq.js +0 -168
  92. package/browser/dist/schema/parseUtils.js +0 -110
  93. package/browser/dist/stringify.js +0 -331
  94. package/browser/dist/tags/core.js +0 -126
  95. package/browser/dist/tags/failsafe/index.js +0 -4
  96. package/browser/dist/tags/failsafe/map.js +0 -56
  97. package/browser/dist/tags/failsafe/seq.js +0 -43
  98. package/browser/dist/tags/failsafe/string.js +0 -28
  99. package/browser/dist/tags/index.js +0 -36
  100. package/browser/dist/tags/json.js +0 -76
  101. package/browser/dist/tags/options.js +0 -23
  102. package/browser/dist/tags/yaml-1.1/binary.js +0 -87
  103. package/browser/dist/tags/yaml-1.1/index.js +0 -157
  104. package/browser/dist/tags/yaml-1.1/omap.js +0 -142
  105. package/browser/dist/tags/yaml-1.1/pairs.js +0 -81
  106. package/browser/dist/tags/yaml-1.1/set.js +0 -114
  107. package/browser/dist/tags/yaml-1.1/timestamp.js +0 -97
  108. package/browser/dist/test-events.js +0 -163
  109. package/browser/dist/toJSON.js +0 -20
  110. package/browser/dist/warnings.js +0 -28
  111. package/dist/Anchors.js +0 -125
  112. package/dist/Document.js +0 -710
  113. package/dist/addComment.js +0 -17
  114. package/dist/constants.js +0 -34
  115. package/dist/cst/Alias.js +0 -38
  116. package/dist/cst/BlankLine.js +0 -56
  117. package/dist/cst/BlockValue.js +0 -248
  118. package/dist/cst/Collection.js +0 -271
  119. package/dist/cst/CollectionItem.js +0 -140
  120. package/dist/cst/Comment.js +0 -38
  121. package/dist/cst/Directive.js +0 -64
  122. package/dist/cst/Document.js +0 -281
  123. package/dist/cst/FlowCollection.js +0 -218
  124. package/dist/cst/Node.js +0 -365
  125. package/dist/cst/ParseContext.js +0 -258
  126. package/dist/cst/PlainValue.js +0 -161
  127. package/dist/cst/QuoteDouble.js +0 -237
  128. package/dist/cst/QuoteSingle.js +0 -113
  129. package/dist/cst/Range.js +0 -63
  130. package/dist/cst/parse.js +0 -55
  131. package/dist/cst/source-utils.js +0 -178
  132. package/dist/errors.js +0 -102
  133. package/dist/foldFlowLines.js +0 -146
  134. package/dist/listTagNames.js +0 -38
  135. package/dist/schema/Alias.js +0 -110
  136. package/dist/schema/Collection.js +0 -188
  137. package/dist/schema/Map.js +0 -103
  138. package/dist/schema/Merge.js +0 -80
  139. package/dist/schema/Node.js +0 -10
  140. package/dist/schema/Pair.js +0 -161
  141. package/dist/schema/Scalar.js +0 -31
  142. package/dist/schema/Seq.js +0 -78
  143. package/dist/schema/index.js +0 -315
  144. package/dist/schema/parseMap.js +0 -343
  145. package/dist/schema/parseSeq.js +0 -180
  146. package/dist/schema/parseUtils.js +0 -104
  147. package/dist/stringify.js +0 -358
  148. package/dist/tags/core.js +0 -114
  149. package/dist/tags/failsafe/index.js +0 -17
  150. package/dist/tags/failsafe/map.js +0 -37
  151. package/dist/tags/failsafe/seq.js +0 -34
  152. package/dist/tags/failsafe/string.js +0 -40
  153. package/dist/tags/index.js +0 -62
  154. package/dist/tags/json.js +0 -60
  155. package/dist/tags/options.js +0 -35
  156. package/dist/tags/yaml-1.1/binary.js +0 -97
  157. package/dist/tags/yaml-1.1/index.js +0 -131
  158. package/dist/tags/yaml-1.1/omap.js +0 -105
  159. package/dist/tags/yaml-1.1/pairs.js +0 -80
  160. package/dist/tags/yaml-1.1/set.js +0 -91
  161. package/dist/tags/yaml-1.1/timestamp.js +0 -93
  162. package/dist/toJSON.js +0 -23
  163. package/dist/warnings.js +0 -39
@@ -1,24 +1,19 @@
1
- "use strict";
1
+ 'use strict';
2
2
 
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = testEvents;
3
+ require('./PlainValue-ec8e588e.js');
4
+ var parseCst = require('./parse-cst.js');
5
+ require('./resolveSeq-4a68b39b.js');
6
+ var Document$1 = require('./Document-2cf6b08c.js');
7
+ require('./Schema-42e9705c.js');
8
+ require('./warnings-39684f17.js');
7
9
 
8
- var _parse = _interopRequireDefault(require("./cst/parse"));
9
-
10
- var _Document = _interopRequireDefault(require("./Document"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- // test harness for yaml-test-suite event tests
15
10
  function testEvents(src, options) {
16
11
  const opt = Object.assign({
17
12
  keepCstNodes: true,
18
13
  keepNodeTypes: true,
19
14
  version: '1.2'
20
15
  }, options);
21
- const docs = (0, _parse.default)(src).map(cstDoc => new _Document.default(opt).parse(cstDoc));
16
+ const docs = parseCst.parse(src).map(cstDoc => new Document$1.Document(opt).parse(cstDoc));
22
17
  const errDoc = docs.find(doc => doc.errors.length > 0);
23
18
  const error = errDoc ? errDoc.errors[0].message : null;
24
19
  const events = ['+STR'];
@@ -162,4 +157,6 @@ function addEvents(events, doc, e, node) {
162
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');
163
158
  events.push(`=VAL${props} ${scalar}${value}`);
164
159
  }
165
- }
160
+ }
161
+
162
+ exports.testEvents = testEvents;
package/dist/types.js ADDED
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ require('./PlainValue-ec8e588e.js');
4
+ var resolveSeq = require('./resolveSeq-4a68b39b.js');
5
+ var Schema = require('./Schema-42e9705c.js');
6
+ require('./warnings-39684f17.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 PlainValue = require('./PlainValue-ec8e588e.js');
4
+ var resolveSeq = require('./resolveSeq-4a68b39b.js');
5
+
6
+
7
+
8
+ exports.Type = PlainValue.Type;
9
+ exports.YAMLError = PlainValue.YAMLError;
10
+ exports.YAMLReferenceError = PlainValue.YAMLReferenceError;
11
+ exports.YAMLSemanticError = PlainValue.YAMLSemanticError;
12
+ exports.YAMLSyntaxError = PlainValue.YAMLSyntaxError;
13
+ exports.YAMLWarning = PlainValue.YAMLWarning;
14
+ exports.findPair = resolveSeq.findPair;
15
+ exports.parseMap = resolveSeq.resolveMap;
16
+ exports.parseSeq = resolveSeq.resolveSeq;
17
+ exports.stringifyNumber = resolveSeq.stringifyNumber;
18
+ exports.stringifyString = resolveSeq.stringifyString;
19
+ exports.toJSON = resolveSeq.toJSON;
@@ -0,0 +1,416 @@
1
+ 'use strict';
2
+
3
+ var PlainValue = require('./PlainValue-ec8e588e.js');
4
+ var resolveSeq = require('./resolveSeq-4a68b39b.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;