yaml 2.0.0-2 → 2.0.0-6

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 (347) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +46 -26
  3. package/browser/dist/compose/compose-collection.js +59 -0
  4. package/browser/dist/compose/compose-doc.js +39 -0
  5. package/browser/dist/compose/compose-node.js +72 -0
  6. package/browser/dist/compose/compose-scalar.js +74 -0
  7. package/browser/dist/compose/composer.js +218 -0
  8. package/browser/dist/compose/resolve-block-map.js +93 -0
  9. package/browser/dist/compose/resolve-block-scalar.js +185 -0
  10. package/browser/dist/compose/resolve-block-seq.js +40 -0
  11. package/browser/dist/compose/resolve-end.js +37 -0
  12. package/browser/dist/compose/resolve-flow-collection.js +189 -0
  13. package/browser/dist/compose/resolve-flow-scalar.js +211 -0
  14. package/browser/dist/compose/resolve-props.js +126 -0
  15. package/browser/dist/compose/util-contains-newline.js +34 -0
  16. package/browser/dist/compose/util-empty-scalar-position.js +27 -0
  17. package/browser/dist/compose/util-map-includes.js +17 -0
  18. package/browser/dist/doc/Document.js +251 -348
  19. package/browser/dist/doc/anchors.js +72 -0
  20. package/browser/dist/doc/applyReviver.js +41 -28
  21. package/browser/dist/doc/createNode.js +71 -55
  22. package/browser/dist/doc/directives.js +161 -0
  23. package/browser/dist/errors.js +50 -72
  24. package/browser/dist/index.js +17 -73
  25. package/browser/dist/log.js +11 -7
  26. package/browser/dist/nodes/Alias.js +94 -0
  27. package/browser/dist/nodes/Collection.js +133 -0
  28. package/browser/dist/nodes/Node.js +41 -0
  29. package/browser/dist/nodes/Pair.js +28 -0
  30. package/browser/dist/nodes/Scalar.js +23 -0
  31. package/browser/dist/nodes/YAMLMap.js +116 -0
  32. package/browser/dist/nodes/YAMLSeq.js +105 -0
  33. package/browser/dist/nodes/addPairToJSMap.js +103 -0
  34. package/browser/dist/nodes/toJS.js +35 -0
  35. package/browser/dist/options.js +14 -95
  36. package/browser/dist/parse/cst-scalar.js +219 -0
  37. package/browser/dist/parse/cst-stringify.js +61 -0
  38. package/browser/dist/parse/cst-visit.js +97 -0
  39. package/browser/dist/parse/cst.js +98 -0
  40. package/browser/dist/parse/lexer.js +656 -0
  41. package/browser/dist/parse/line-counter.js +39 -0
  42. package/browser/dist/parse/parser.js +876 -0
  43. package/browser/dist/public-api.js +101 -0
  44. package/browser/dist/schema/Schema.js +23 -0
  45. package/browser/dist/schema/common/map.js +42 -0
  46. package/browser/dist/schema/common/null.js +13 -0
  47. package/browser/dist/schema/common/seq.js +33 -0
  48. package/browser/dist/schema/common/string.js +14 -0
  49. package/browser/dist/schema/core/bool.js +19 -0
  50. package/browser/dist/schema/core/float.js +40 -0
  51. package/browser/dist/schema/core/int.js +38 -0
  52. package/browser/dist/schema/core/schema.js +23 -0
  53. package/browser/dist/schema/json/schema.js +62 -0
  54. package/browser/dist/schema/tags.js +79 -0
  55. package/browser/dist/schema/yaml-1.1/binary.js +66 -0
  56. package/browser/dist/schema/yaml-1.1/bool.js +26 -0
  57. package/browser/dist/schema/yaml-1.1/float.js +43 -0
  58. package/browser/dist/schema/yaml-1.1/int.js +71 -0
  59. package/browser/dist/schema/yaml-1.1/omap.js +73 -0
  60. package/browser/dist/schema/yaml-1.1/pairs.js +77 -0
  61. package/browser/dist/schema/yaml-1.1/schema.js +37 -0
  62. package/browser/dist/schema/yaml-1.1/set.js +87 -0
  63. package/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  64. package/browser/dist/stringify/foldFlowLines.js +121 -139
  65. package/browser/dist/stringify/stringify.js +87 -72
  66. package/browser/dist/stringify/stringifyCollection.js +122 -0
  67. package/browser/dist/stringify/stringifyComment.js +14 -0
  68. package/browser/dist/stringify/stringifyDocument.js +64 -0
  69. package/browser/dist/stringify/stringifyNumber.js +20 -23
  70. package/browser/dist/stringify/stringifyPair.js +111 -0
  71. package/browser/dist/stringify/stringifyString.js +295 -322
  72. package/browser/dist/util.js +4 -4
  73. package/browser/dist/visit.js +146 -0
  74. package/browser/index.js +4 -1
  75. package/dist/compose/compose-collection.d.ts +5 -0
  76. package/dist/compose/compose-collection.js +61 -0
  77. package/dist/compose/compose-doc.d.ts +6 -0
  78. package/dist/compose/compose-doc.js +41 -0
  79. package/dist/compose/compose-node.d.ts +25 -0
  80. package/dist/compose/compose-node.js +75 -0
  81. package/dist/compose/compose-scalar.d.ts +5 -0
  82. package/dist/compose/compose-scalar.js +76 -0
  83. package/dist/compose/composer.d.ts +62 -0
  84. package/dist/compose/composer.js +222 -0
  85. package/dist/compose/resolve-block-map.d.ts +6 -0
  86. package/dist/compose/resolve-block-map.js +95 -0
  87. package/dist/compose/resolve-block-scalar.d.ts +10 -0
  88. package/dist/compose/resolve-block-scalar.js +187 -0
  89. package/dist/compose/resolve-block-seq.d.ts +5 -0
  90. package/dist/compose/resolve-block-seq.js +42 -0
  91. package/dist/compose/resolve-end.d.ts +6 -0
  92. package/dist/compose/resolve-end.js +39 -0
  93. package/dist/compose/resolve-flow-collection.d.ts +6 -0
  94. package/dist/compose/resolve-flow-collection.js +191 -0
  95. package/dist/compose/resolve-flow-scalar.d.ts +10 -0
  96. package/dist/compose/resolve-flow-scalar.js +213 -0
  97. package/dist/compose/resolve-props.d.ts +21 -0
  98. package/dist/compose/resolve-props.js +128 -0
  99. package/dist/compose/util-contains-newline.d.ts +2 -0
  100. package/dist/compose/util-contains-newline.js +36 -0
  101. package/dist/compose/util-empty-scalar-position.d.ts +2 -0
  102. package/dist/compose/util-empty-scalar-position.js +29 -0
  103. package/dist/compose/util-map-includes.d.ts +4 -0
  104. package/dist/compose/util-map-includes.js +19 -0
  105. package/dist/doc/Document.d.ts +130 -0
  106. package/dist/doc/Document.js +250 -347
  107. package/dist/doc/anchors.d.ts +24 -0
  108. package/dist/doc/anchors.js +77 -0
  109. package/dist/doc/applyReviver.d.ts +9 -0
  110. package/dist/doc/applyReviver.js +41 -28
  111. package/dist/doc/createNode.d.ts +16 -0
  112. package/dist/doc/createNode.js +71 -55
  113. package/dist/doc/directives.d.ts +46 -0
  114. package/dist/doc/directives.js +163 -0
  115. package/dist/errors.d.ts +21 -0
  116. package/dist/errors.js +51 -74
  117. package/dist/index.d.ts +19 -0
  118. package/dist/index.js +40 -71
  119. package/dist/log.d.ts +3 -0
  120. package/dist/log.js +11 -6
  121. package/dist/nodes/Alias.d.ts +24 -0
  122. package/dist/nodes/Alias.js +96 -0
  123. package/dist/nodes/Collection.d.ts +67 -0
  124. package/dist/nodes/Collection.js +137 -0
  125. package/dist/nodes/Node.d.ts +48 -0
  126. package/dist/nodes/Node.js +59 -0
  127. package/dist/nodes/Pair.d.ts +16 -0
  128. package/dist/nodes/Pair.js +31 -0
  129. package/dist/nodes/Scalar.d.ts +40 -0
  130. package/dist/nodes/Scalar.js +26 -0
  131. package/dist/nodes/YAMLMap.d.ts +39 -0
  132. package/dist/nodes/YAMLMap.js +119 -0
  133. package/dist/nodes/YAMLSeq.d.ts +53 -0
  134. package/dist/nodes/YAMLSeq.js +107 -0
  135. package/dist/nodes/addPairToJSMap.d.ts +3 -0
  136. package/dist/nodes/addPairToJSMap.js +105 -0
  137. package/dist/nodes/toJS.d.ts +30 -0
  138. package/dist/nodes/toJS.js +37 -0
  139. package/dist/options.d.ts +278 -0
  140. package/dist/options.js +13 -96
  141. package/dist/parse/cst-scalar.d.ts +58 -0
  142. package/dist/parse/cst-scalar.js +223 -0
  143. package/dist/parse/cst-stringify.d.ts +8 -0
  144. package/dist/parse/cst-stringify.js +63 -0
  145. package/dist/parse/cst-visit.d.ts +39 -0
  146. package/dist/parse/cst-visit.js +99 -0
  147. package/dist/parse/cst.d.ts +106 -0
  148. package/dist/parse/cst.js +112 -0
  149. package/dist/parse/lexer.d.ts +85 -0
  150. package/dist/parse/lexer.js +658 -0
  151. package/dist/parse/line-counter.d.ts +22 -0
  152. package/dist/parse/line-counter.js +41 -0
  153. package/dist/parse/parser.d.ts +84 -0
  154. package/dist/parse/parser.js +880 -0
  155. package/dist/public-api.d.ts +43 -0
  156. package/dist/public-api.js +106 -0
  157. package/dist/schema/Schema.d.ts +16 -0
  158. package/dist/schema/Schema.js +25 -0
  159. package/dist/schema/common/map.d.ts +2 -0
  160. package/dist/schema/common/map.js +44 -0
  161. package/dist/schema/common/null.d.ts +4 -0
  162. package/dist/schema/common/null.js +15 -0
  163. package/dist/schema/common/seq.d.ts +2 -0
  164. package/dist/schema/common/seq.js +35 -0
  165. package/dist/schema/common/string.d.ts +2 -0
  166. package/dist/schema/common/string.js +16 -0
  167. package/dist/schema/core/bool.d.ts +4 -0
  168. package/dist/schema/core/bool.js +21 -0
  169. package/dist/schema/core/float.d.ts +4 -0
  170. package/dist/schema/core/float.js +44 -0
  171. package/dist/schema/core/int.d.ts +4 -0
  172. package/dist/schema/core/int.js +42 -0
  173. package/dist/schema/core/schema.d.ts +1 -0
  174. package/dist/schema/core/schema.js +25 -0
  175. package/dist/schema/json/schema.d.ts +2 -0
  176. package/dist/schema/json/schema.js +64 -0
  177. package/dist/schema/tags.d.ts +41 -0
  178. package/dist/schema/tags.js +82 -0
  179. package/dist/schema/types.d.ts +82 -0
  180. package/dist/schema/yaml-1.1/binary.d.ts +2 -0
  181. package/dist/schema/yaml-1.1/binary.js +68 -0
  182. package/dist/schema/yaml-1.1/bool.d.ts +7 -0
  183. package/dist/schema/yaml-1.1/bool.js +29 -0
  184. package/dist/schema/yaml-1.1/float.d.ts +4 -0
  185. package/dist/schema/yaml-1.1/float.js +47 -0
  186. package/dist/schema/yaml-1.1/int.d.ts +5 -0
  187. package/dist/schema/yaml-1.1/int.js +76 -0
  188. package/dist/schema/yaml-1.1/omap.d.ts +21 -0
  189. package/dist/schema/yaml-1.1/omap.js +76 -0
  190. package/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  191. package/dist/schema/yaml-1.1/pairs.js +81 -0
  192. package/dist/schema/yaml-1.1/schema.d.ts +1 -0
  193. package/dist/schema/yaml-1.1/schema.js +39 -0
  194. package/dist/schema/yaml-1.1/set.d.ts +22 -0
  195. package/dist/schema/yaml-1.1/set.js +90 -0
  196. package/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  197. package/dist/schema/yaml-1.1/timestamp.js +105 -0
  198. package/dist/stringify/foldFlowLines.d.ts +34 -0
  199. package/dist/stringify/foldFlowLines.js +121 -139
  200. package/dist/stringify/stringify.d.ts +18 -0
  201. package/dist/stringify/stringify.js +87 -71
  202. package/dist/stringify/stringifyCollection.d.ts +21 -0
  203. package/dist/stringify/stringifyCollection.js +124 -0
  204. package/dist/stringify/stringifyComment.d.ts +2 -0
  205. package/dist/stringify/stringifyComment.js +17 -0
  206. package/dist/stringify/stringifyDocument.d.ts +3 -0
  207. package/dist/stringify/stringifyDocument.js +66 -0
  208. package/dist/stringify/stringifyNumber.d.ts +2 -0
  209. package/dist/stringify/stringifyNumber.js +20 -23
  210. package/dist/stringify/stringifyPair.d.ts +3 -0
  211. package/dist/stringify/stringifyPair.js +113 -0
  212. package/dist/stringify/stringifyString.d.ts +3 -0
  213. package/dist/stringify/stringifyString.js +295 -322
  214. package/dist/test-events.d.ts +4 -0
  215. package/dist/test-events.js +124 -148
  216. package/dist/util.d.ts +6 -0
  217. package/dist/util.js +9 -12
  218. package/dist/visit.d.ts +63 -0
  219. package/dist/visit.js +148 -0
  220. package/package.json +31 -39
  221. package/util.js +2 -14
  222. package/browser/dist/_virtual/_rollupPluginBabelHelpers.js +0 -16
  223. package/browser/dist/ast/Alias.js +0 -95
  224. package/browser/dist/ast/Collection.js +0 -192
  225. package/browser/dist/ast/Merge.js +0 -71
  226. package/browser/dist/ast/Node.js +0 -3
  227. package/browser/dist/ast/Pair.js +0 -200
  228. package/browser/dist/ast/Scalar.js +0 -21
  229. package/browser/dist/ast/YAMLMap.js +0 -91
  230. package/browser/dist/ast/YAMLSeq.js +0 -67
  231. package/browser/dist/ast/toJS.js +0 -29
  232. package/browser/dist/ast/visit.js +0 -83
  233. package/browser/dist/constants.js +0 -40
  234. package/browser/dist/cst/Alias.js +0 -26
  235. package/browser/dist/cst/BlankLine.js +0 -34
  236. package/browser/dist/cst/BlockValue.js +0 -240
  237. package/browser/dist/cst/Collection.js +0 -259
  238. package/browser/dist/cst/CollectionItem.js +0 -123
  239. package/browser/dist/cst/Comment.js +0 -27
  240. package/browser/dist/cst/Directive.js +0 -53
  241. package/browser/dist/cst/Document.js +0 -262
  242. package/browser/dist/cst/FlowCollection.js +0 -201
  243. package/browser/dist/cst/Node.js +0 -355
  244. package/browser/dist/cst/ParseContext.js +0 -234
  245. package/browser/dist/cst/PlainValue.js +0 -171
  246. package/browser/dist/cst/QuoteDouble.js +0 -224
  247. package/browser/dist/cst/QuoteSingle.js +0 -100
  248. package/browser/dist/cst/Range.js +0 -56
  249. package/browser/dist/cst/parse.js +0 -46
  250. package/browser/dist/cst/source-utils.js +0 -169
  251. package/browser/dist/doc/Anchors.js +0 -115
  252. package/browser/dist/doc/Schema.js +0 -34
  253. package/browser/dist/doc/getSchemaTags.js +0 -33
  254. package/browser/dist/doc/listTagNames.js +0 -27
  255. package/browser/dist/doc/parseContents.js +0 -60
  256. package/browser/dist/doc/parseDirectives.js +0 -107
  257. package/browser/dist/resolve/collection-utils.js +0 -86
  258. package/browser/dist/resolve/resolveMap.js +0 -315
  259. package/browser/dist/resolve/resolveNode.js +0 -173
  260. package/browser/dist/resolve/resolveScalar.js +0 -20
  261. package/browser/dist/resolve/resolveSeq.js +0 -170
  262. package/browser/dist/resolve/resolveTag.js +0 -107
  263. package/browser/dist/resolve/resolveTagName.js +0 -87
  264. package/browser/dist/stringify/addComment.js +0 -10
  265. package/browser/dist/stringify/stringifyTag.js +0 -28
  266. package/browser/dist/tags/core.js +0 -128
  267. package/browser/dist/tags/failsafe/index.js +0 -7
  268. package/browser/dist/tags/failsafe/map.js +0 -37
  269. package/browser/dist/tags/failsafe/seq.js +0 -34
  270. package/browser/dist/tags/failsafe/string.js +0 -20
  271. package/browser/dist/tags/index.js +0 -39
  272. package/browser/dist/tags/json.js +0 -62
  273. package/browser/dist/tags/options.js +0 -31
  274. package/browser/dist/tags/yaml-1.1/binary.js +0 -83
  275. package/browser/dist/tags/yaml-1.1/index.js +0 -174
  276. package/browser/dist/tags/yaml-1.1/omap.js +0 -86
  277. package/browser/dist/tags/yaml-1.1/pairs.js +0 -62
  278. package/browser/dist/tags/yaml-1.1/set.js +0 -78
  279. package/browser/dist/tags/yaml-1.1/timestamp.js +0 -101
  280. package/browser/dist/types.js +0 -10
  281. package/cst.d.ts +0 -185
  282. package/dist/_virtual/_rollupPluginBabelHelpers.js +0 -18
  283. package/dist/ast/Alias.js +0 -97
  284. package/dist/ast/Collection.js +0 -196
  285. package/dist/ast/Merge.js +0 -74
  286. package/dist/ast/Node.js +0 -5
  287. package/dist/ast/Pair.js +0 -203
  288. package/dist/ast/Scalar.js +0 -24
  289. package/dist/ast/YAMLMap.js +0 -94
  290. package/dist/ast/YAMLSeq.js +0 -69
  291. package/dist/ast/toJS.js +0 -31
  292. package/dist/ast/visit.js +0 -85
  293. package/dist/constants.js +0 -46
  294. package/dist/cst/Alias.js +0 -28
  295. package/dist/cst/BlankLine.js +0 -36
  296. package/dist/cst/BlockValue.js +0 -243
  297. package/dist/cst/Collection.js +0 -262
  298. package/dist/cst/CollectionItem.js +0 -125
  299. package/dist/cst/Comment.js +0 -29
  300. package/dist/cst/Directive.js +0 -55
  301. package/dist/cst/Document.js +0 -264
  302. package/dist/cst/FlowCollection.js +0 -203
  303. package/dist/cst/Node.js +0 -357
  304. package/dist/cst/ParseContext.js +0 -236
  305. package/dist/cst/PlainValue.js +0 -173
  306. package/dist/cst/QuoteDouble.js +0 -226
  307. package/dist/cst/QuoteSingle.js +0 -102
  308. package/dist/cst/Range.js +0 -58
  309. package/dist/cst/parse.js +0 -48
  310. package/dist/cst/source-utils.js +0 -173
  311. package/dist/doc/Anchors.js +0 -117
  312. package/dist/doc/Schema.js +0 -36
  313. package/dist/doc/getSchemaTags.js +0 -35
  314. package/dist/doc/listTagNames.js +0 -29
  315. package/dist/doc/parseContents.js +0 -62
  316. package/dist/doc/parseDirectives.js +0 -109
  317. package/dist/resolve/collection-utils.js +0 -91
  318. package/dist/resolve/resolveMap.js +0 -317
  319. package/dist/resolve/resolveNode.js +0 -175
  320. package/dist/resolve/resolveScalar.js +0 -22
  321. package/dist/resolve/resolveSeq.js +0 -172
  322. package/dist/resolve/resolveTag.js +0 -109
  323. package/dist/resolve/resolveTagName.js +0 -89
  324. package/dist/stringify/addComment.js +0 -13
  325. package/dist/stringify/stringifyTag.js +0 -30
  326. package/dist/tags/core.js +0 -138
  327. package/dist/tags/failsafe/index.js +0 -9
  328. package/dist/tags/failsafe/map.js +0 -39
  329. package/dist/tags/failsafe/seq.js +0 -36
  330. package/dist/tags/failsafe/string.js +0 -22
  331. package/dist/tags/index.js +0 -42
  332. package/dist/tags/json.js +0 -64
  333. package/dist/tags/options.js +0 -37
  334. package/dist/tags/yaml-1.1/binary.js +0 -85
  335. package/dist/tags/yaml-1.1/index.js +0 -176
  336. package/dist/tags/yaml-1.1/omap.js +0 -89
  337. package/dist/tags/yaml-1.1/pairs.js +0 -66
  338. package/dist/tags/yaml-1.1/set.js +0 -81
  339. package/dist/tags/yaml-1.1/timestamp.js +0 -105
  340. package/dist/types.js +0 -29
  341. package/index.d.ts +0 -519
  342. package/index.js +0 -1
  343. package/types.d.ts +0 -379
  344. package/types.js +0 -17
  345. package/types.mjs +0 -17
  346. package/util.d.ts +0 -76
  347. 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,6 @@
1
+ import type { ScalarTag } from '../types.js';
2
+ export declare const intTime: ScalarTag;
3
+ export declare const floatTime: ScalarTag;
4
+ export declare const timestamp: ScalarTag & {
5
+ test: RegExp;
6
+ };
@@ -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'; // presumes i+1 is at the start of a line
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
- function foldFlowLines(text, indent, mode, {
44
- indentAtStart,
45
- lineWidth = 80,
46
- minContentWidth = 20,
47
- onFold,
48
- onOverflow
49
- }) {
50
- if (!lineWidth || lineWidth < 0) return text;
51
- const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);
52
- if (text.length <= endStep) return text;
53
- const folds = [];
54
- const escapedFolds = {};
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
- if (ch === '\n') {
98
- if (mode === FOLD_BLOCK) i = consumeMoreIndentedLines(text, i);
99
- end = i + endStep;
100
- split = undefined;
101
- } else {
102
- if (ch === ' ' && prev && prev !== ' ' && prev !== '\n' && prev !== '\t') {
103
- // space surrounded by non-space can be replaced with newline + indent
104
- const next = text[i + 1];
105
- if (next && next !== ' ' && next !== '\n' && next !== '\t') split = i;
106
- }
107
-
108
- if (i >= end) {
109
- if (split) {
110
- folds.push(split);
111
- end = split + endStep;
112
- split = undefined;
113
- } else if (mode === FOLD_QUOTED) {
114
- // white-space collected at end may stretch past lineWidth
115
- while (prev === ' ' || prev === '\t') {
116
- prev = ch;
117
- ch = text[i += 1];
118
- overflow = true;
119
- } // Account for newline escape, but don't break preceding escape
120
-
121
-
122
- const j = i > escEnd + 1 ? i - 2 : escStart - 1; // Bail out if lineWidth & minContentWidth are shorter than an escape string
123
-
124
- if (escapedFolds[j]) return text;
125
- folds.push(j);
126
- escapedFolds[j] = true;
127
- end = j + endStep;
128
- split = undefined;
129
- } else {
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
- prev = ch;
136
- }
137
-
138
- if (overflow && onOverflow) onOverflow();
139
- if (folds.length === 0) return text;
140
- if (onFold) onFold();
141
- let res = text.slice(0, folds[0]);
142
-
143
- for (let i = 0; i < folds.length; ++i) {
144
- const fold = folds[i];
145
- const end = folds[i + 1] || text.length;
146
- if (fold === 0) res = `\n${indent}${text.slice(0, end)}`;else {
147
- if (mode === FOLD_QUOTED && escapedFolds[fold]) res += `${text[fold]}\\`;
148
- res += `\n${indent}${text.slice(fold + 1, end)}`;
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
- return res;
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;