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
@@ -1,374 +1,277 @@
1
1
  'use strict';
2
2
 
3
- var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.js');
4
- var Document$1 = require('../cst/Document.js');
5
- var constants = require('../constants.js');
6
- var errors = require('../errors.js');
3
+ var Alias = require('../nodes/Alias.js');
4
+ var Collection = require('../nodes/Collection.js');
5
+ var Node = require('../nodes/Node.js');
6
+ var Pair = require('../nodes/Pair.js');
7
+ var toJS = require('../nodes/toJS.js');
7
8
  var options = require('../options.js');
8
- var addComment = require('../stringify/addComment.js');
9
+ var Schema = require('../schema/Schema.js');
9
10
  var stringify = require('../stringify/stringify.js');
10
- var Anchors = require('./Anchors.js');
11
- var Schema = require('./Schema.js');
11
+ var stringifyDocument = require('../stringify/stringifyDocument.js');
12
+ var anchors = require('./anchors.js');
12
13
  var applyReviver = require('./applyReviver.js');
13
14
  var createNode = require('./createNode.js');
14
- var listTagNames = require('./listTagNames.js');
15
- var parseContents = require('./parseContents.js');
16
- var parseDirectives = require('./parseDirectives.js');
17
- var Pair = require('../ast/Pair.js');
18
- var Collection = require('../ast/Collection.js');
19
- var Scalar = require('../ast/Scalar.js');
20
- var toJS = require('../ast/toJS.js');
21
- var Node = require('../ast/Node.js');
22
- var Alias = require('../ast/Alias.js');
23
-
24
- function assertCollection(contents) {
25
- if (contents instanceof Collection.Collection) return true;
26
- throw new Error('Expected a YAML collection as document contents');
27
- }
15
+ var directives = require('./directives.js');
28
16
 
29
17
  class Document {
30
- constructor(value, replacer, options$1) {
31
- if (options$1 === undefined && replacer && typeof replacer === 'object' && !Array.isArray(replacer)) {
32
- options$1 = replacer;
33
- replacer = undefined;
18
+ constructor(value, replacer, options$1) {
19
+ /** A comment before this Document */
20
+ this.commentBefore = null;
21
+ /** A comment immediately after this Document */
22
+ this.comment = null;
23
+ /** Errors encountered during parsing. */
24
+ this.errors = [];
25
+ /** Warnings encountered during parsing. */
26
+ this.warnings = [];
27
+ Object.defineProperty(this, Node.NODE_TYPE, { value: Node.DOC });
28
+ let _replacer = null;
29
+ if (typeof replacer === 'function' || Array.isArray(replacer)) {
30
+ _replacer = replacer;
31
+ }
32
+ else if (options$1 === undefined && replacer) {
33
+ options$1 = replacer;
34
+ replacer = undefined;
35
+ }
36
+ const opt = Object.assign({}, options.defaultOptions, options$1);
37
+ this.options = opt;
38
+ let { version } = opt;
39
+ if (options$1 === null || options$1 === void 0 ? void 0 : options$1.directives) {
40
+ this.directives = options$1.directives.atDocument();
41
+ if (this.directives.yaml.explicit)
42
+ version = this.directives.yaml.version;
43
+ }
44
+ else
45
+ this.directives = new directives.Directives({ version });
46
+ this.setSchema(version, options$1);
47
+ if (value === undefined)
48
+ this.contents = null;
49
+ else {
50
+ this.contents = this.createNode(value, _replacer, options$1);
51
+ }
34
52
  }
35
-
36
- this.options = Object.assign({}, options.defaultOptions, options$1);
37
- this.anchors = new Anchors.Anchors(this.options.anchorPrefix);
38
- this.commentBefore = null;
39
- this.comment = null;
40
- this.directivesEndMarker = null;
41
- this.errors = [];
42
- this.schema = null;
43
- this.tagPrefixes = [];
44
- this.version = null;
45
- this.warnings = [];
46
-
47
- if (value === undefined) {
48
- // note that this.schema is left as null here
49
- this.contents = null;
50
- } else if (value instanceof Document$1.Document) {
51
- this.parse(value);
52
- } else {
53
- this.contents = this.createNode(value, {
54
- replacer
55
- });
53
+ /** Adds a value to the document. */
54
+ add(value) {
55
+ if (assertCollection(this.contents))
56
+ this.contents.add(value);
56
57
  }
57
- }
58
-
59
- add(value) {
60
- assertCollection(this.contents);
61
- return this.contents.add(value);
62
- }
63
-
64
- addIn(path, value) {
65
- assertCollection(this.contents);
66
- this.contents.addIn(path, value);
67
- }
68
-
69
- createNode(value, {
70
- keepUndefined,
71
- onTagObj,
72
- replacer,
73
- tag,
74
- wrapScalars
75
- } = {}) {
76
- this.setSchema();
77
- if (typeof replacer === 'function') value = replacer.call({
78
- '': value
79
- }, '', value);else if (Array.isArray(replacer)) {
80
- const keyToStr = v => typeof v === 'number' || v instanceof String || v instanceof Number;
81
-
82
- const asStr = replacer.filter(keyToStr).map(String);
83
- if (asStr.length > 0) replacer = replacer.concat(asStr);
58
+ /** Adds a value to the document. */
59
+ addIn(path, value) {
60
+ if (assertCollection(this.contents))
61
+ this.contents.addIn(path, value);
84
62
  }
85
- if (typeof keepUndefined !== 'boolean') keepUndefined = !!this.options.keepUndefined;
86
- const aliasNodes = [];
87
- const ctx = {
88
- keepUndefined,
89
-
90
- onAlias(source) {
91
- const alias = new Alias.Alias(source);
92
- aliasNodes.push(alias);
93
- return alias;
94
- },
95
-
96
- onTagObj,
97
- prevObjects: new Map(),
98
- replacer,
99
- schema: this.schema,
100
- wrapScalars: wrapScalars !== false
101
- };
102
- const node = createNode.createNode(value, tag, ctx);
103
-
104
- for (const alias of aliasNodes) {
105
- // With circular references, the source node is only resolved after all of
106
- // its child nodes are. This is why anchors are set only after all of the
107
- // nodes have been created.
108
- alias.source = alias.source.node;
109
- let name = this.anchors.getName(alias.source);
110
-
111
- if (!name) {
112
- name = this.anchors.newName();
113
- this.anchors.map[name] = alias.source;
114
- }
63
+ /**
64
+ * Create a new `Alias` node, ensuring that the target `node` has the required anchor.
65
+ *
66
+ * If `node` already has an anchor, `name` is ignored.
67
+ * Otherwise, the `node.anchor` value will be set to `name`,
68
+ * or if an anchor with that name is already present in the document,
69
+ * `name` will be used as a prefix for a new unique anchor.
70
+ * If `name` is undefined, the generated anchor will use 'a' as a prefix.
71
+ */
72
+ createAlias(node, name) {
73
+ if (!node.anchor) {
74
+ const prev = anchors.anchorNames(this);
75
+ node.anchor =
76
+ !name || prev.has(name) ? anchors.findNewAnchor(name || 'a', prev) : name;
77
+ }
78
+ return new Alias.Alias(node.anchor);
115
79
  }
116
-
117
- return node;
118
- }
119
-
120
- createPair(key, value, options = {}) {
121
- const k = this.createNode(key, options);
122
- const v = this.createNode(value, options);
123
- return new Pair.Pair(k, v);
124
- }
125
-
126
- delete(key) {
127
- assertCollection(this.contents);
128
- return this.contents.delete(key);
129
- }
130
-
131
- deleteIn(path) {
132
- if (Collection.isEmptyPath(path)) {
133
- if (this.contents == null) return false;
134
- this.contents = null;
135
- return true;
80
+ createNode(value, replacer, options) {
81
+ let _replacer = undefined;
82
+ if (typeof replacer === 'function') {
83
+ value = replacer.call({ '': value }, '', value);
84
+ _replacer = replacer;
85
+ }
86
+ else if (Array.isArray(replacer)) {
87
+ const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;
88
+ const asStr = replacer.filter(keyToStr).map(String);
89
+ if (asStr.length > 0)
90
+ replacer = replacer.concat(asStr);
91
+ _replacer = replacer;
92
+ }
93
+ else if (options === undefined && replacer) {
94
+ options = replacer;
95
+ replacer = undefined;
96
+ }
97
+ const { anchorPrefix, flow, keepUndefined, onTagObj, tag } = options || {};
98
+ const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this, anchorPrefix || 'a');
99
+ const ctx = {
100
+ keepUndefined: keepUndefined !== null && keepUndefined !== void 0 ? keepUndefined : false,
101
+ onAnchor,
102
+ onTagObj,
103
+ replacer: _replacer,
104
+ schema: this.schema,
105
+ sourceObjects
106
+ };
107
+ const node = createNode.createNode(value, tag, ctx);
108
+ if (flow && Node.isCollection(node))
109
+ node.flow = true;
110
+ setAnchors();
111
+ return node;
136
112
  }
137
-
138
- assertCollection(this.contents);
139
- return this.contents.deleteIn(path);
140
- }
141
-
142
- getDefaults() {
143
- return Document.defaults[this.version] || Document.defaults[this.options.version] || {};
144
- }
145
-
146
- get(key, keepScalar) {
147
- return this.contents instanceof Collection.Collection ? this.contents.get(key, keepScalar) : undefined;
148
- }
149
-
150
- getIn(path, keepScalar) {
151
- if (Collection.isEmptyPath(path)) return !keepScalar && this.contents instanceof Scalar.Scalar ? this.contents.value : this.contents;
152
- return this.contents instanceof Collection.Collection ? this.contents.getIn(path, keepScalar) : undefined;
153
- }
154
-
155
- has(key) {
156
- return this.contents instanceof Collection.Collection ? this.contents.has(key) : false;
157
- }
158
-
159
- hasIn(path) {
160
- if (Collection.isEmptyPath(path)) return this.contents !== undefined;
161
- return this.contents instanceof Collection.Collection ? this.contents.hasIn(path) : false;
162
- }
163
-
164
- set(key, value) {
165
- if (this.contents == null) {
166
- this.setSchema();
167
- this.contents = Collection.collectionFromPath(this.schema, [key], value);
168
- } else {
169
- assertCollection(this.contents);
170
- this.contents.set(key, value);
113
+ /**
114
+ * Convert a key and a value into a `Pair` using the current schema,
115
+ * recursively wrapping all values as `Scalar` or `Collection` nodes.
116
+ */
117
+ createPair(key, value, options = {}) {
118
+ const k = this.createNode(key, null, options);
119
+ const v = this.createNode(value, null, options);
120
+ return new Pair.Pair(k, v);
171
121
  }
172
- }
173
-
174
- setIn(path, value) {
175
- if (Collection.isEmptyPath(path)) this.contents = value;else if (this.contents == null) {
176
- this.setSchema();
177
- this.contents = Collection.collectionFromPath(this.schema, path, value);
178
- } else {
179
- assertCollection(this.contents);
180
- this.contents.setIn(path, value);
122
+ /**
123
+ * Removes a value from the document.
124
+ * @returns `true` if the item was found and removed.
125
+ */
126
+ delete(key) {
127
+ return assertCollection(this.contents) ? this.contents.delete(key) : false;
181
128
  }
182
- }
183
-
184
- setSchema(id, customTags) {
185
- if (!id && !customTags && this.schema) return;
186
- if (typeof id === 'number') id = id.toFixed(1);
187
-
188
- if (id === '1.0' || id === '1.1' || id === '1.2') {
189
- if (this.version) this.version = id;else this.options.version = id;
190
- delete this.options.schema;
191
- } else if (id && typeof id === 'string') {
192
- this.options.schema = id;
129
+ /**
130
+ * Removes a value from the document.
131
+ * @returns `true` if the item was found and removed.
132
+ */
133
+ deleteIn(path) {
134
+ if (Collection.isEmptyPath(path)) {
135
+ if (this.contents == null)
136
+ return false;
137
+ this.contents = null;
138
+ return true;
139
+ }
140
+ return assertCollection(this.contents)
141
+ ? this.contents.deleteIn(path)
142
+ : false;
193
143
  }
194
-
195
- if (Array.isArray(customTags)) this.options.customTags = customTags;
196
- const opt = Object.assign({}, this.getDefaults(), this.options);
197
- this.schema = new Schema.Schema(opt);
198
- }
199
-
200
- parse(node, prevDoc) {
201
- if (this.options.keepCstNodes) this.cstNode = node;
202
- if (this.options.keepNodeTypes) this.type = 'DOCUMENT';
203
- const {
204
- directives = [],
205
- contents = [],
206
- directivesEndMarker,
207
- error,
208
- valueRange
209
- } = node;
210
-
211
- if (error) {
212
- if (!error.source) error.source = this;
213
- this.errors.push(error);
144
+ /**
145
+ * Returns item at `key`, or `undefined` if not found. By default unwraps
146
+ * scalar values from their surrounding node; to disable set `keepScalar` to
147
+ * `true` (collections are always returned intact).
148
+ */
149
+ get(key, keepScalar) {
150
+ return Node.isCollection(this.contents)
151
+ ? this.contents.get(key, keepScalar)
152
+ : undefined;
214
153
  }
215
-
216
- parseDirectives.parseDirectives(this, directives, prevDoc);
217
- if (directivesEndMarker) this.directivesEndMarker = true;
218
- this.range = valueRange ? [valueRange.start, valueRange.end] : null;
219
- this.setSchema();
220
- this.anchors._cstAliases = [];
221
- parseContents.parseContents(this, contents);
222
- this.anchors.resolveNodes();
223
-
224
- if (this.options.prettyErrors) {
225
- for (const error of this.errors) if (error instanceof errors.YAMLError) error.makePretty();
226
-
227
- for (const warn of this.warnings) if (warn instanceof errors.YAMLError) warn.makePretty();
154
+ /**
155
+ * Returns item at `path`, or `undefined` if not found. By default unwraps
156
+ * scalar values from their surrounding node; to disable set `keepScalar` to
157
+ * `true` (collections are always returned intact).
158
+ */
159
+ getIn(path, keepScalar) {
160
+ if (Collection.isEmptyPath(path))
161
+ return !keepScalar && Node.isScalar(this.contents)
162
+ ? this.contents.value
163
+ : this.contents;
164
+ return Node.isCollection(this.contents)
165
+ ? this.contents.getIn(path, keepScalar)
166
+ : undefined;
228
167
  }
229
-
230
- return this;
231
- }
232
-
233
- listNonDefaultTags() {
234
- return listTagNames.listTagNames(this.contents).filter(t => t.indexOf(constants.defaultTagPrefix) !== 0);
235
- }
236
-
237
- setTagPrefix(handle, prefix) {
238
- if (handle[0] !== '!' || handle[handle.length - 1] !== '!') throw new Error('Handle must start and end with !');
239
-
240
- if (prefix) {
241
- const prev = this.tagPrefixes.find(p => p.handle === handle);
242
- if (prev) prev.prefix = prefix;else this.tagPrefixes.push({
243
- handle,
244
- prefix
245
- });
246
- } else {
247
- this.tagPrefixes = this.tagPrefixes.filter(p => p.handle !== handle);
168
+ /**
169
+ * Checks if the document includes a value with the key `key`.
170
+ */
171
+ has(key) {
172
+ return Node.isCollection(this.contents) ? this.contents.has(key) : false;
248
173
  }
249
- }
250
-
251
- toJS({
252
- json,
253
- jsonArg,
254
- mapAsMap,
255
- onAnchor,
256
- reviver
257
- } = {}) {
258
- const anchorNodes = Object.values(this.anchors.map).map(node => [node, {
259
- alias: [],
260
- aliasCount: 0,
261
- count: 1
262
- }]);
263
- const anchors = anchorNodes.length > 0 ? new Map(anchorNodes) : null;
264
- const ctx = {
265
- anchors,
266
- doc: this,
267
- indentStep: ' ',
268
- keep: !json,
269
- mapAsMap: typeof mapAsMap === 'boolean' ? mapAsMap : !!this.options.mapAsMap,
270
- mapKeyWarned: false,
271
- maxAliasCount: this.options.maxAliasCount,
272
- stringify: stringify.stringify // Requiring directly in Pair would create circular dependencies
273
-
274
- };
275
- const res = toJS.toJS(this.contents, jsonArg || '', ctx);
276
- if (typeof onAnchor === 'function' && anchors) for (const {
277
- count,
278
- res
279
- } of anchors.values()) onAnchor(res, count);
280
- return typeof reviver === 'function' ? applyReviver.applyReviver(reviver, {
281
- '': res
282
- }, '', res) : res;
283
- }
284
-
285
- toJSON(jsonArg, onAnchor) {
286
- return this.toJS({
287
- json: true,
288
- jsonArg,
289
- mapAsMap: false,
290
- onAnchor
291
- });
292
- }
293
-
294
- toString() {
295
- if (this.errors.length > 0) throw new Error('Document with errors cannot be stringified');
296
- const indentSize = this.options.indent;
297
-
298
- if (!Number.isInteger(indentSize) || indentSize <= 0) {
299
- const s = JSON.stringify(indentSize);
300
- throw new Error(`"indent" option must be a positive integer, not ${s}`);
174
+ /**
175
+ * Checks if the document includes a value at `path`.
176
+ */
177
+ hasIn(path) {
178
+ if (Collection.isEmptyPath(path))
179
+ return this.contents !== undefined;
180
+ return Node.isCollection(this.contents) ? this.contents.hasIn(path) : false;
301
181
  }
302
-
303
- this.setSchema();
304
- const lines = [];
305
- let hasDirectives = false;
306
-
307
- if (this.version) {
308
- let vd = '%YAML 1.2';
309
-
310
- if (this.schema.name === 'yaml-1.1') {
311
- if (this.version === '1.0') vd = '%YAML:1.0';else if (this.version === '1.1') vd = '%YAML 1.1';
312
- }
313
-
314
- lines.push(vd);
315
- hasDirectives = true;
182
+ /**
183
+ * Sets a value in this document. For `!!set`, `value` needs to be a
184
+ * boolean to add/remove the item from the set.
185
+ */
186
+ set(key, value) {
187
+ if (this.contents == null) {
188
+ this.contents = Collection.collectionFromPath(this.schema, [key], value);
189
+ }
190
+ else if (assertCollection(this.contents)) {
191
+ this.contents.set(key, value);
192
+ }
316
193
  }
317
-
318
- const tagNames = this.listNonDefaultTags();
319
- this.tagPrefixes.forEach(({
320
- handle,
321
- prefix
322
- }) => {
323
- if (tagNames.some(t => t.indexOf(prefix) === 0)) {
324
- lines.push(`%TAG ${handle} ${prefix}`);
325
- hasDirectives = true;
326
- }
327
- });
328
- if (hasDirectives || this.directivesEndMarker) lines.push('---');
329
-
330
- if (this.commentBefore) {
331
- if (hasDirectives || !this.directivesEndMarker) lines.unshift('');
332
- lines.unshift(this.commentBefore.replace(/^/gm, '#'));
194
+ /**
195
+ * Sets a value in this document. For `!!set`, `value` needs to be a
196
+ * boolean to add/remove the item from the set.
197
+ */
198
+ setIn(path, value) {
199
+ if (Collection.isEmptyPath(path))
200
+ this.contents = value;
201
+ else if (this.contents == null) {
202
+ this.contents = Collection.collectionFromPath(this.schema, Array.from(path), value);
203
+ }
204
+ else if (assertCollection(this.contents)) {
205
+ this.contents.setIn(path, value);
206
+ }
333
207
  }
334
-
335
- const ctx = {
336
- anchors: Object.create(null),
337
- doc: this,
338
- indent: '',
339
- indentStep: ' '.repeat(indentSize),
340
- stringify: stringify.stringify // Requiring directly in nodes would create circular dependencies
341
-
342
- };
343
- let chompKeep = false;
344
- let contentComment = null;
345
-
346
- if (this.contents) {
347
- if (this.contents instanceof Node.Node) {
348
- if (this.contents.spaceBefore && (hasDirectives || this.directivesEndMarker)) lines.push('');
349
- if (this.contents.commentBefore) lines.push(this.contents.commentBefore.replace(/^/gm, '#')); // top-level block scalars need to be indented if followed by a comment
350
-
351
- ctx.forceBlockIndent = !!this.comment;
352
- contentComment = this.contents.comment;
353
- }
354
-
355
- const onChompKeep = contentComment ? null : () => chompKeep = true;
356
- const body = stringify.stringify(this.contents, ctx, () => contentComment = null, onChompKeep);
357
- lines.push(addComment.addComment(body, '', contentComment));
358
- } else {
359
- lines.push(stringify.stringify(this.contents, ctx));
208
+ /**
209
+ * Change the YAML version and schema used by the document.
210
+ *
211
+ * Overrides all previously set schema options
212
+ */
213
+ setSchema(version, options) {
214
+ let _options;
215
+ switch (String(version)) {
216
+ case '1.1':
217
+ this.directives.yaml.version = '1.1';
218
+ _options = Object.assign({ merge: true, resolveKnownTags: false, schema: 'yaml-1.1' }, options);
219
+ break;
220
+ case '1.2':
221
+ this.directives.yaml.version = '1.2';
222
+ _options = Object.assign({ merge: false, resolveKnownTags: true, schema: 'core' }, options);
223
+ break;
224
+ default: {
225
+ const sv = JSON.stringify(version);
226
+ throw new Error(`Expected '1.1' or '1.2' as version, but found: ${sv}`);
227
+ }
228
+ }
229
+ this.schema = new Schema.Schema(_options);
360
230
  }
361
-
362
- if (this.comment) {
363
- if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '') lines.push('');
364
- lines.push(this.comment.replace(/^/gm, '#'));
231
+ // json & jsonArg are only used from toJSON()
232
+ toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {
233
+ const ctx = {
234
+ anchors: new Map(),
235
+ doc: this,
236
+ keep: !json,
237
+ mapAsMap: mapAsMap === true,
238
+ mapKeyWarned: false,
239
+ maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100,
240
+ stringify: stringify.stringify
241
+ };
242
+ const res = toJS.toJS(this.contents, jsonArg || '', ctx);
243
+ if (typeof onAnchor === 'function')
244
+ for (const { count, res } of ctx.anchors.values())
245
+ onAnchor(res, count);
246
+ return typeof reviver === 'function'
247
+ ? applyReviver.applyReviver(reviver, { '': res }, '', res)
248
+ : res;
249
+ }
250
+ /**
251
+ * A JSON representation of the document `contents`.
252
+ *
253
+ * @param jsonArg Used by `JSON.stringify` to indicate the array index or
254
+ * property name.
255
+ */
256
+ toJSON(jsonArg, onAnchor) {
257
+ return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });
258
+ }
259
+ /** A YAML representation of the document. */
260
+ toString(options = {}) {
261
+ if (this.errors.length > 0)
262
+ throw new Error('Document with errors cannot be stringified');
263
+ if ('indent' in options &&
264
+ (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {
265
+ const s = JSON.stringify(options.indent);
266
+ throw new Error(`"indent" option must be a positive integer, not ${s}`);
267
+ }
268
+ return stringifyDocument.stringifyDocument(this, options);
365
269
  }
366
-
367
- return lines.join('\n') + '\n';
368
- }
369
-
370
270
  }
371
-
372
- _rollupPluginBabelHelpers.defineProperty(Document, "defaults", options.documentOptions);
271
+ function assertCollection(contents) {
272
+ if (Node.isCollection(contents))
273
+ return true;
274
+ throw new Error('Expected a YAML collection as document contents');
275
+ }
373
276
 
374
277
  exports.Document = Document;
@@ -0,0 +1,24 @@
1
+ import { Node } from '../nodes/Node.js';
2
+ import type { Document } from './Document.js';
3
+ /**
4
+ * Verify that the input string is a valid anchor.
5
+ *
6
+ * Will throw on errors.
7
+ */
8
+ export declare function anchorIsValid(anchor: string): true;
9
+ export declare function anchorNames(root: Document | Node): Set<string>;
10
+ /** Find a new anchor name with the given `prefix` and a one-indexed suffix. */
11
+ export declare function findNewAnchor(prefix: string, exclude: Set<string>): string;
12
+ export declare function createNodeAnchors(doc: Document, prefix: string): {
13
+ onAnchor(source: unknown): string;
14
+ /**
15
+ * With circular references, the source node is only resolved after all
16
+ * of its child nodes are. This is why anchors are set only after all of
17
+ * the nodes have been created.
18
+ */
19
+ setAnchors(): void;
20
+ sourceObjects: Map<unknown, {
21
+ anchor: string | null;
22
+ node: Node | null;
23
+ }>;
24
+ };