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