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.
Files changed (345) 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 +79 -0
  6. package/browser/dist/compose/compose-scalar.js +74 -0
  7. package/browser/dist/compose/composer.js +219 -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 +217 -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 +75 -55
  22. package/browser/dist/doc/directives.js +161 -0
  23. package/browser/dist/errors.js +50 -72
  24. package/browser/dist/index.js +16 -72
  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 +674 -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 +134 -71
  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 +82 -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 +223 -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 +219 -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 +75 -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 +39 -70
  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 +676 -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 +134 -71
  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/constants.js +0 -40
  233. package/browser/dist/cst/Alias.js +0 -26
  234. package/browser/dist/cst/BlankLine.js +0 -34
  235. package/browser/dist/cst/BlockValue.js +0 -240
  236. package/browser/dist/cst/Collection.js +0 -259
  237. package/browser/dist/cst/CollectionItem.js +0 -123
  238. package/browser/dist/cst/Comment.js +0 -27
  239. package/browser/dist/cst/Directive.js +0 -53
  240. package/browser/dist/cst/Document.js +0 -262
  241. package/browser/dist/cst/FlowCollection.js +0 -201
  242. package/browser/dist/cst/Node.js +0 -355
  243. package/browser/dist/cst/ParseContext.js +0 -234
  244. package/browser/dist/cst/PlainValue.js +0 -171
  245. package/browser/dist/cst/QuoteDouble.js +0 -224
  246. package/browser/dist/cst/QuoteSingle.js +0 -100
  247. package/browser/dist/cst/Range.js +0 -56
  248. package/browser/dist/cst/parse.js +0 -46
  249. package/browser/dist/cst/source-utils.js +0 -169
  250. package/browser/dist/doc/Anchors.js +0 -115
  251. package/browser/dist/doc/Schema.js +0 -34
  252. package/browser/dist/doc/getSchemaTags.js +0 -33
  253. package/browser/dist/doc/listTagNames.js +0 -27
  254. package/browser/dist/doc/parseContents.js +0 -60
  255. package/browser/dist/doc/parseDirectives.js +0 -107
  256. package/browser/dist/resolve/collection-utils.js +0 -86
  257. package/browser/dist/resolve/resolveMap.js +0 -315
  258. package/browser/dist/resolve/resolveNode.js +0 -173
  259. package/browser/dist/resolve/resolveScalar.js +0 -20
  260. package/browser/dist/resolve/resolveSeq.js +0 -170
  261. package/browser/dist/resolve/resolveTag.js +0 -107
  262. package/browser/dist/resolve/resolveTagName.js +0 -87
  263. package/browser/dist/stringify/addComment.js +0 -10
  264. package/browser/dist/stringify/stringifyTag.js +0 -28
  265. package/browser/dist/tags/core.js +0 -128
  266. package/browser/dist/tags/failsafe/index.js +0 -7
  267. package/browser/dist/tags/failsafe/map.js +0 -37
  268. package/browser/dist/tags/failsafe/seq.js +0 -34
  269. package/browser/dist/tags/failsafe/string.js +0 -20
  270. package/browser/dist/tags/index.js +0 -39
  271. package/browser/dist/tags/json.js +0 -62
  272. package/browser/dist/tags/options.js +0 -31
  273. package/browser/dist/tags/yaml-1.1/binary.js +0 -83
  274. package/browser/dist/tags/yaml-1.1/index.js +0 -174
  275. package/browser/dist/tags/yaml-1.1/omap.js +0 -86
  276. package/browser/dist/tags/yaml-1.1/pairs.js +0 -62
  277. package/browser/dist/tags/yaml-1.1/set.js +0 -78
  278. package/browser/dist/tags/yaml-1.1/timestamp.js +0 -101
  279. package/browser/dist/types.js +0 -10
  280. package/cst.d.ts +0 -185
  281. package/dist/_virtual/_rollupPluginBabelHelpers.js +0 -18
  282. package/dist/ast/Alias.js +0 -97
  283. package/dist/ast/Collection.js +0 -196
  284. package/dist/ast/Merge.js +0 -74
  285. package/dist/ast/Node.js +0 -5
  286. package/dist/ast/Pair.js +0 -203
  287. package/dist/ast/Scalar.js +0 -24
  288. package/dist/ast/YAMLMap.js +0 -94
  289. package/dist/ast/YAMLSeq.js +0 -69
  290. package/dist/ast/toJS.js +0 -31
  291. package/dist/constants.js +0 -46
  292. package/dist/cst/Alias.js +0 -28
  293. package/dist/cst/BlankLine.js +0 -36
  294. package/dist/cst/BlockValue.js +0 -243
  295. package/dist/cst/Collection.js +0 -262
  296. package/dist/cst/CollectionItem.js +0 -125
  297. package/dist/cst/Comment.js +0 -29
  298. package/dist/cst/Directive.js +0 -55
  299. package/dist/cst/Document.js +0 -264
  300. package/dist/cst/FlowCollection.js +0 -203
  301. package/dist/cst/Node.js +0 -357
  302. package/dist/cst/ParseContext.js +0 -236
  303. package/dist/cst/PlainValue.js +0 -173
  304. package/dist/cst/QuoteDouble.js +0 -226
  305. package/dist/cst/QuoteSingle.js +0 -102
  306. package/dist/cst/Range.js +0 -58
  307. package/dist/cst/parse.js +0 -48
  308. package/dist/cst/source-utils.js +0 -173
  309. package/dist/doc/Anchors.js +0 -117
  310. package/dist/doc/Schema.js +0 -36
  311. package/dist/doc/getSchemaTags.js +0 -35
  312. package/dist/doc/listTagNames.js +0 -29
  313. package/dist/doc/parseContents.js +0 -62
  314. package/dist/doc/parseDirectives.js +0 -109
  315. package/dist/resolve/collection-utils.js +0 -91
  316. package/dist/resolve/resolveMap.js +0 -317
  317. package/dist/resolve/resolveNode.js +0 -175
  318. package/dist/resolve/resolveScalar.js +0 -22
  319. package/dist/resolve/resolveSeq.js +0 -172
  320. package/dist/resolve/resolveTag.js +0 -109
  321. package/dist/resolve/resolveTagName.js +0 -89
  322. package/dist/stringify/addComment.js +0 -13
  323. package/dist/stringify/stringifyTag.js +0 -30
  324. package/dist/tags/core.js +0 -138
  325. package/dist/tags/failsafe/index.js +0 -9
  326. package/dist/tags/failsafe/map.js +0 -39
  327. package/dist/tags/failsafe/seq.js +0 -36
  328. package/dist/tags/failsafe/string.js +0 -22
  329. package/dist/tags/index.js +0 -42
  330. package/dist/tags/json.js +0 -64
  331. package/dist/tags/options.js +0 -37
  332. package/dist/tags/yaml-1.1/binary.js +0 -85
  333. package/dist/tags/yaml-1.1/index.js +0 -176
  334. package/dist/tags/yaml-1.1/omap.js +0 -89
  335. package/dist/tags/yaml-1.1/pairs.js +0 -66
  336. package/dist/tags/yaml-1.1/set.js +0 -81
  337. package/dist/tags/yaml-1.1/timestamp.js +0 -105
  338. package/dist/types.js +0 -29
  339. package/index.d.ts +0 -519
  340. package/index.js +0 -1
  341. package/types.d.ts +0 -379
  342. package/types.js +0 -17
  343. package/types.mjs +0 -17
  344. package/util.d.ts +0 -76
  345. package/util.mjs +0 -15
@@ -0,0 +1,71 @@
1
+ import { stringifyNumber } from '../../stringify/stringifyNumber.js';
2
+
3
+ const intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);
4
+ function intResolve(str, offset, radix, { intAsBigInt }) {
5
+ const sign = str[0];
6
+ if (sign === '-' || sign === '+')
7
+ offset += 1;
8
+ str = str.substring(offset).replace(/_/g, '');
9
+ if (intAsBigInt) {
10
+ switch (radix) {
11
+ case 2:
12
+ str = `0b${str}`;
13
+ break;
14
+ case 8:
15
+ str = `0o${str}`;
16
+ break;
17
+ case 16:
18
+ str = `0x${str}`;
19
+ break;
20
+ }
21
+ const n = BigInt(str);
22
+ return sign === '-' ? BigInt(-1) * n : n;
23
+ }
24
+ const n = parseInt(str, radix);
25
+ return sign === '-' ? -1 * n : n;
26
+ }
27
+ function intStringify(node, radix, prefix) {
28
+ const { value } = node;
29
+ if (intIdentify(value)) {
30
+ const str = value.toString(radix);
31
+ return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;
32
+ }
33
+ return stringifyNumber(node);
34
+ }
35
+ const intBin = {
36
+ identify: intIdentify,
37
+ default: true,
38
+ tag: 'tag:yaml.org,2002:int',
39
+ format: 'BIN',
40
+ test: /^[-+]?0b[0-1_]+$/,
41
+ resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),
42
+ stringify: node => intStringify(node, 2, '0b')
43
+ };
44
+ const intOct = {
45
+ identify: intIdentify,
46
+ default: true,
47
+ tag: 'tag:yaml.org,2002:int',
48
+ format: 'OCT',
49
+ test: /^[-+]?0[0-7_]+$/,
50
+ resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),
51
+ stringify: node => intStringify(node, 8, '0')
52
+ };
53
+ const int = {
54
+ identify: intIdentify,
55
+ default: true,
56
+ tag: 'tag:yaml.org,2002:int',
57
+ test: /^[-+]?[0-9][0-9_]*$/,
58
+ resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),
59
+ stringify: stringifyNumber
60
+ };
61
+ const intHex = {
62
+ identify: intIdentify,
63
+ default: true,
64
+ tag: 'tag:yaml.org,2002:int',
65
+ format: 'HEX',
66
+ test: /^[-+]?0x[0-9a-fA-F_]+$/,
67
+ resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),
68
+ stringify: node => intStringify(node, 16, '0x')
69
+ };
70
+
71
+ export { int, intBin, intHex, intOct };
@@ -0,0 +1,73 @@
1
+ import { YAMLSeq } from '../../nodes/YAMLSeq.js';
2
+ import { toJS } from '../../nodes/toJS.js';
3
+ import { isScalar, isPair } from '../../nodes/Node.js';
4
+ import { YAMLMap } from '../../nodes/YAMLMap.js';
5
+ import { resolvePairs, createPairs } from './pairs.js';
6
+
7
+ class YAMLOMap extends YAMLSeq {
8
+ constructor() {
9
+ super();
10
+ this.add = YAMLMap.prototype.add.bind(this);
11
+ this.delete = YAMLMap.prototype.delete.bind(this);
12
+ this.get = YAMLMap.prototype.get.bind(this);
13
+ this.has = YAMLMap.prototype.has.bind(this);
14
+ this.set = YAMLMap.prototype.set.bind(this);
15
+ this.tag = YAMLOMap.tag;
16
+ }
17
+ /**
18
+ * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,
19
+ * but TypeScript won't allow widening the signature of a child method.
20
+ */
21
+ toJSON(_, ctx) {
22
+ if (!ctx)
23
+ return super.toJSON(_);
24
+ const map = new Map();
25
+ if (ctx && ctx.onCreate)
26
+ ctx.onCreate(map);
27
+ for (const pair of this.items) {
28
+ let key, value;
29
+ if (isPair(pair)) {
30
+ key = toJS(pair.key, '', ctx);
31
+ value = toJS(pair.value, key, ctx);
32
+ }
33
+ else {
34
+ key = toJS(pair, '', ctx);
35
+ }
36
+ if (map.has(key))
37
+ throw new Error('Ordered maps must not include duplicate keys');
38
+ map.set(key, value);
39
+ }
40
+ return map;
41
+ }
42
+ }
43
+ YAMLOMap.tag = 'tag:yaml.org,2002:omap';
44
+ const omap = {
45
+ collection: 'seq',
46
+ identify: value => value instanceof Map,
47
+ nodeClass: YAMLOMap,
48
+ default: false,
49
+ tag: 'tag:yaml.org,2002:omap',
50
+ resolve(seq, onError) {
51
+ const pairs = resolvePairs(seq, onError);
52
+ const seenKeys = [];
53
+ for (const { key } of pairs.items) {
54
+ if (isScalar(key)) {
55
+ if (seenKeys.includes(key.value)) {
56
+ onError(`Ordered maps must not include duplicate keys: ${key.value}`);
57
+ }
58
+ else {
59
+ seenKeys.push(key.value);
60
+ }
61
+ }
62
+ }
63
+ return Object.assign(new YAMLOMap(), pairs);
64
+ },
65
+ createNode(schema, iterable, ctx) {
66
+ const pairs = createPairs(schema, iterable, ctx);
67
+ const omap = new YAMLOMap();
68
+ omap.items = pairs.items;
69
+ return omap;
70
+ }
71
+ };
72
+
73
+ export { YAMLOMap, omap };
@@ -0,0 +1,77 @@
1
+ import { isSeq, isPair, isMap } from '../../nodes/Node.js';
2
+ import { Pair, createPair } from '../../nodes/Pair.js';
3
+ import { Scalar } from '../../nodes/Scalar.js';
4
+ import { YAMLSeq } from '../../nodes/YAMLSeq.js';
5
+
6
+ function resolvePairs(seq, onError) {
7
+ if (isSeq(seq)) {
8
+ for (let i = 0; i < seq.items.length; ++i) {
9
+ let item = seq.items[i];
10
+ if (isPair(item))
11
+ continue;
12
+ else if (isMap(item)) {
13
+ if (item.items.length > 1)
14
+ onError('Each pair must have its own sequence indicator');
15
+ const pair = item.items[0] || new Pair(new Scalar(null));
16
+ if (item.commentBefore)
17
+ pair.key.commentBefore = pair.key.commentBefore
18
+ ? `${item.commentBefore}\n${pair.key.commentBefore}`
19
+ : item.commentBefore;
20
+ if (item.comment) {
21
+ const cn = pair.value || pair.key;
22
+ cn.comment = cn.comment
23
+ ? `${item.comment}\n${cn.comment}`
24
+ : item.comment;
25
+ }
26
+ item = pair;
27
+ }
28
+ seq.items[i] = isPair(item) ? item : new Pair(item);
29
+ }
30
+ }
31
+ else
32
+ onError('Expected a sequence for this tag');
33
+ return seq;
34
+ }
35
+ function createPairs(schema, iterable, ctx) {
36
+ const { replacer } = ctx;
37
+ const pairs = new YAMLSeq(schema);
38
+ pairs.tag = 'tag:yaml.org,2002:pairs';
39
+ let i = 0;
40
+ if (iterable && Symbol.iterator in Object(iterable))
41
+ for (let it of iterable) {
42
+ if (typeof replacer === 'function')
43
+ it = replacer.call(iterable, String(i++), it);
44
+ let key, value;
45
+ if (Array.isArray(it)) {
46
+ if (it.length === 2) {
47
+ key = it[0];
48
+ value = it[1];
49
+ }
50
+ else
51
+ throw new TypeError(`Expected [key, value] tuple: ${it}`);
52
+ }
53
+ else if (it && it instanceof Object) {
54
+ const keys = Object.keys(it);
55
+ if (keys.length === 1) {
56
+ key = keys[0];
57
+ value = it[key];
58
+ }
59
+ else
60
+ throw new TypeError(`Expected { key: value } tuple: ${it}`);
61
+ }
62
+ else {
63
+ key = it;
64
+ }
65
+ pairs.items.push(createPair(key, value, ctx));
66
+ }
67
+ return pairs;
68
+ }
69
+ const pairs = {
70
+ collection: 'seq',
71
+ default: false,
72
+ tag: 'tag:yaml.org,2002:pairs',
73
+ resolve: resolvePairs,
74
+ createNode: createPairs
75
+ };
76
+
77
+ export { createPairs, pairs, resolvePairs };
@@ -0,0 +1,37 @@
1
+ import { map } from '../common/map.js';
2
+ import { nullTag } from '../common/null.js';
3
+ import { seq } from '../common/seq.js';
4
+ import { string } from '../common/string.js';
5
+ import { binary } from './binary.js';
6
+ import { trueTag, falseTag } from './bool.js';
7
+ import { floatNaN, floatExp, float } from './float.js';
8
+ import { intBin, intOct, int, intHex } from './int.js';
9
+ import { omap } from './omap.js';
10
+ import { pairs } from './pairs.js';
11
+ import { set } from './set.js';
12
+ import { intTime, floatTime, timestamp } from './timestamp.js';
13
+
14
+ const schema = [
15
+ map,
16
+ seq,
17
+ string,
18
+ nullTag,
19
+ trueTag,
20
+ falseTag,
21
+ intBin,
22
+ intOct,
23
+ int,
24
+ intHex,
25
+ floatNaN,
26
+ floatExp,
27
+ float,
28
+ binary,
29
+ omap,
30
+ pairs,
31
+ set,
32
+ intTime,
33
+ floatTime,
34
+ timestamp
35
+ ];
36
+
37
+ export { schema };
@@ -0,0 +1,87 @@
1
+ import { isMap, isPair, isScalar } from '../../nodes/Node.js';
2
+ import { createPair, Pair } from '../../nodes/Pair.js';
3
+ import { YAMLMap, findPair } from '../../nodes/YAMLMap.js';
4
+
5
+ class YAMLSet extends YAMLMap {
6
+ constructor(schema) {
7
+ super(schema);
8
+ this.tag = YAMLSet.tag;
9
+ }
10
+ add(key) {
11
+ let pair;
12
+ if (isPair(key))
13
+ pair = key;
14
+ else if (typeof key === 'object' &&
15
+ 'key' in key &&
16
+ 'value' in key &&
17
+ key.value === null)
18
+ pair = new Pair(key.key, null);
19
+ else
20
+ pair = new Pair(key, null);
21
+ const prev = findPair(this.items, pair.key);
22
+ if (!prev)
23
+ this.items.push(pair);
24
+ }
25
+ get(key, keepPair) {
26
+ const pair = findPair(this.items, key);
27
+ return !keepPair && isPair(pair)
28
+ ? isScalar(pair.key)
29
+ ? pair.key.value
30
+ : pair.key
31
+ : pair;
32
+ }
33
+ set(key, value) {
34
+ if (typeof value !== 'boolean')
35
+ throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);
36
+ const prev = findPair(this.items, key);
37
+ if (prev && !value) {
38
+ this.items.splice(this.items.indexOf(prev), 1);
39
+ }
40
+ else if (!prev && value) {
41
+ this.items.push(new Pair(key));
42
+ }
43
+ }
44
+ toJSON(_, ctx) {
45
+ return super.toJSON(_, ctx, Set);
46
+ }
47
+ toString(ctx, onComment, onChompKeep) {
48
+ if (!ctx)
49
+ return JSON.stringify(this);
50
+ if (this.hasAllNullValues(true))
51
+ return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);
52
+ else
53
+ throw new Error('Set items must all have null values');
54
+ }
55
+ }
56
+ YAMLSet.tag = 'tag:yaml.org,2002:set';
57
+ const set = {
58
+ collection: 'map',
59
+ identify: value => value instanceof Set,
60
+ nodeClass: YAMLSet,
61
+ default: false,
62
+ tag: 'tag:yaml.org,2002:set',
63
+ resolve(map, onError) {
64
+ if (isMap(map)) {
65
+ if (map.hasAllNullValues(true))
66
+ return Object.assign(new YAMLSet(), map);
67
+ else
68
+ onError('Set items must all have null values');
69
+ }
70
+ else
71
+ onError('Expected a mapping for this tag');
72
+ return map;
73
+ },
74
+ createNode(schema, iterable, ctx) {
75
+ const { replacer } = ctx;
76
+ const set = new YAMLSet(schema);
77
+ if (iterable && Symbol.iterator in Object(iterable))
78
+ for (let value of iterable) {
79
+ if (typeof replacer === 'function')
80
+ value = replacer.call(iterable, value, value);
81
+ set.items.push(createPair(value, null, ctx));
82
+ }
83
+ return set;
84
+ }
85
+ };
86
+
87
+ export { YAMLSet, set };
@@ -0,0 +1,101 @@
1
+ import { stringifyNumber } from '../../stringify/stringifyNumber.js';
2
+
3
+ /** Internal types handle bigint as number, because TS can't figure it out. */
4
+ function parseSexagesimal(str, asBigInt) {
5
+ const sign = str[0];
6
+ const parts = sign === '-' || sign === '+' ? str.substring(1) : str;
7
+ const num = (n) => asBigInt ? BigInt(n) : Number(n);
8
+ const res = parts
9
+ .replace(/_/g, '')
10
+ .split(':')
11
+ .reduce((res, p) => res * num(60) + num(p), num(0));
12
+ return (sign === '-' ? num(-1) * res : res);
13
+ }
14
+ /**
15
+ * hhhh:mm:ss.sss
16
+ *
17
+ * Internal types handle bigint as number, because TS can't figure it out.
18
+ */
19
+ function stringifySexagesimal(node) {
20
+ let { value } = node;
21
+ let num = (n) => n;
22
+ if (typeof value === 'bigint')
23
+ num = n => BigInt(n);
24
+ else if (isNaN(value) || !isFinite(value))
25
+ return stringifyNumber(node);
26
+ let sign = '';
27
+ if (value < 0) {
28
+ sign = '-';
29
+ value *= num(-1);
30
+ }
31
+ const _60 = num(60);
32
+ const parts = [value % _60]; // seconds, including ms
33
+ if (value < 60) {
34
+ parts.unshift(0); // at least one : is required
35
+ }
36
+ else {
37
+ value = (value - parts[0]) / _60;
38
+ parts.unshift(value % _60); // minutes
39
+ if (value >= 60) {
40
+ value = (value - parts[0]) / _60;
41
+ parts.unshift(value); // hours
42
+ }
43
+ }
44
+ return (sign +
45
+ parts
46
+ .map(n => (n < 10 ? '0' + String(n) : String(n)))
47
+ .join(':')
48
+ .replace(/000000\d*$/, '') // % 60 may introduce error
49
+ );
50
+ }
51
+ const intTime = {
52
+ identify: value => typeof value === 'bigint' || Number.isInteger(value),
53
+ default: true,
54
+ tag: 'tag:yaml.org,2002:int',
55
+ format: 'TIME',
56
+ test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,
57
+ resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),
58
+ stringify: stringifySexagesimal
59
+ };
60
+ const floatTime = {
61
+ identify: value => typeof value === 'number',
62
+ default: true,
63
+ tag: 'tag:yaml.org,2002:float',
64
+ format: 'TIME',
65
+ test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,
66
+ resolve: str => parseSexagesimal(str, false),
67
+ stringify: stringifySexagesimal
68
+ };
69
+ const timestamp = {
70
+ identify: value => value instanceof Date,
71
+ default: true,
72
+ tag: 'tag:yaml.org,2002:timestamp',
73
+ // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part
74
+ // may be omitted altogether, resulting in a date format. In such a case, the time part is
75
+ // assumed to be 00:00:00Z (start of day, UTC).
76
+ test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd
77
+ '(?:' + // time is optional
78
+ '(?:t|T|[ \\t]+)' + // t | T | whitespace
79
+ '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?
80
+ '(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30
81
+ ')?$'),
82
+ resolve(str) {
83
+ const match = str.match(timestamp.test);
84
+ if (!match)
85
+ throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');
86
+ const [, year, month, day, hour, minute, second] = match.map(Number);
87
+ const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;
88
+ let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);
89
+ const tz = match[8];
90
+ if (tz && tz !== 'Z') {
91
+ let d = parseSexagesimal(tz, false);
92
+ if (Math.abs(d) < 30)
93
+ d *= 60;
94
+ date -= 60000 * d;
95
+ }
96
+ return new Date(date);
97
+ },
98
+ stringify: ({ value }) => value.toISOString().replace(/((T00:00)?:00)?\.000Z$/, '')
99
+ };
100
+
101
+ export { floatTime, intTime, timestamp };