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,315 +0,0 @@
1
- import { Alias } from '../ast/Alias.js';
2
- import { MERGE_KEY, Merge } from '../ast/Merge.js';
3
- import { Pair } from '../ast/Pair.js';
4
- import { YAMLMap } from '../ast/YAMLMap.js';
5
- import { Type, Char } from '../constants.js';
6
- import { PlainValue } from '../cst/PlainValue.js';
7
- import { YAMLSemanticError, YAMLSyntaxError } from '../errors.js';
8
- import { resolveComments, getLongKeyError, checkFlowCommentSpace, checkFlowCollectionEnd } from './collection-utils.js';
9
- import { resolveNode } from './resolveNode.js';
10
-
11
- function resolveMap(doc, cst) {
12
- const {
13
- comments,
14
- items
15
- } = cst.type === Type.FLOW_MAP ? resolveFlowMapItems(doc, cst) : resolveBlockMapItems(doc, cst);
16
- const map = new YAMLMap(doc.schema);
17
- map.items = items;
18
- resolveComments(map, comments);
19
-
20
- for (let i = 0; i < items.length; ++i) {
21
- const {
22
- key: iKey
23
- } = items[i];
24
-
25
- if (doc.schema.merge && iKey && iKey.value === MERGE_KEY) {
26
- items[i] = new Merge(items[i]);
27
- const sources = items[i].value.items;
28
- let error = null;
29
- sources.some(node => {
30
- if (node instanceof Alias) {
31
- // During parsing, alias sources are CST nodes; to account for
32
- // circular references their resolved values can't be used here.
33
- const {
34
- type
35
- } = node.source;
36
- if (type === Type.MAP || type === Type.FLOW_MAP) return false;
37
- return error = 'Merge nodes aliases can only point to maps';
38
- }
39
-
40
- return error = 'Merge nodes can only have Alias nodes as values';
41
- });
42
- if (error) doc.errors.push(new YAMLSemanticError(cst, error));
43
- } else {
44
- for (let j = i + 1; j < items.length; ++j) {
45
- const {
46
- key: jKey
47
- } = items[j];
48
-
49
- if (iKey === jKey || iKey && jKey && Object.prototype.hasOwnProperty.call(iKey, 'value') && iKey.value === jKey.value) {
50
- const msg = "Map keys must be unique; \"".concat(iKey, "\" is repeated");
51
- doc.errors.push(new YAMLSemanticError(cst, msg));
52
- break;
53
- }
54
- }
55
- }
56
- }
57
-
58
- cst.resolved = map;
59
- return map;
60
- }
61
-
62
- const valueHasPairComment = ({
63
- context: {
64
- lineStart,
65
- node,
66
- src
67
- },
68
- props
69
- }) => {
70
- if (props.length === 0) return false;
71
- const {
72
- start
73
- } = props[0];
74
- if (node && start > node.valueRange.start) return false;
75
- if (src[start] !== Char.COMMENT) return false;
76
-
77
- for (let i = lineStart; i < start; ++i) if (src[i] === '\n') return false;
78
-
79
- return true;
80
- };
81
-
82
- function resolvePairComment(item, pair) {
83
- if (!valueHasPairComment(item)) return;
84
- const comment = item.getPropValue(0, Char.COMMENT, true);
85
- let found = false;
86
- const cb = pair.value.commentBefore;
87
-
88
- if (cb && cb.startsWith(comment)) {
89
- pair.value.commentBefore = cb.substr(comment.length + 1);
90
- found = true;
91
- } else {
92
- const cc = pair.value.comment;
93
-
94
- if (!item.node && cc && cc.startsWith(comment)) {
95
- pair.value.comment = cc.substr(comment.length + 1);
96
- found = true;
97
- }
98
- }
99
-
100
- if (found) pair.comment = comment;
101
- }
102
-
103
- function resolveBlockMapItems(doc, cst) {
104
- const comments = [];
105
- const items = [];
106
- let key = undefined;
107
- let keyStart = null;
108
-
109
- for (let i = 0; i < cst.items.length; ++i) {
110
- const item = cst.items[i];
111
-
112
- switch (item.type) {
113
- case Type.BLANK_LINE:
114
- comments.push({
115
- afterKey: !!key,
116
- before: items.length
117
- });
118
- break;
119
-
120
- case Type.COMMENT:
121
- comments.push({
122
- afterKey: !!key,
123
- before: items.length,
124
- comment: item.comment
125
- });
126
- break;
127
-
128
- case Type.MAP_KEY:
129
- if (key !== undefined) items.push(new Pair(key));
130
- if (item.error) doc.errors.push(item.error);
131
- key = resolveNode(doc, item.node);
132
- keyStart = null;
133
- break;
134
-
135
- case Type.MAP_VALUE:
136
- {
137
- if (key === undefined) key = null;
138
- if (item.error) doc.errors.push(item.error);
139
-
140
- if (!item.context.atLineStart && item.node && item.node.type === Type.MAP && !item.node.context.atLineStart) {
141
- const msg = 'Nested mappings are not allowed in compact mappings';
142
- doc.errors.push(new YAMLSemanticError(item.node, msg));
143
- }
144
-
145
- let valueNode = item.node;
146
-
147
- if (!valueNode && item.props.length > 0) {
148
- // Comments on an empty mapping value need to be preserved, so we
149
- // need to construct a minimal empty node here to use instead of the
150
- // missing `item.node`. -- eemeli/yaml#19
151
- valueNode = new PlainValue(Type.PLAIN, []);
152
- valueNode.context = {
153
- parent: item,
154
- src: item.context.src
155
- };
156
- const pos = item.range.start + 1;
157
- valueNode.range = {
158
- start: pos,
159
- end: pos
160
- };
161
- valueNode.valueRange = {
162
- start: pos,
163
- end: pos
164
- };
165
-
166
- if (typeof item.range.origStart === 'number') {
167
- const origPos = item.range.origStart + 1;
168
- valueNode.range.origStart = valueNode.range.origEnd = origPos;
169
- valueNode.valueRange.origStart = valueNode.valueRange.origEnd = origPos;
170
- }
171
- }
172
-
173
- const pair = new Pair(key, resolveNode(doc, valueNode));
174
- resolvePairComment(item, pair);
175
- items.push(pair);
176
-
177
- if (key && typeof keyStart === 'number') {
178
- if (item.range.start > keyStart + 1024) doc.errors.push(getLongKeyError(cst, key));
179
- }
180
-
181
- key = undefined;
182
- keyStart = null;
183
- }
184
- break;
185
-
186
- default:
187
- if (key !== undefined) items.push(new Pair(key));
188
- key = resolveNode(doc, item);
189
- keyStart = item.range.start;
190
- if (item.error) doc.errors.push(item.error);
191
-
192
- next: for (let j = i + 1;; ++j) {
193
- const nextItem = cst.items[j];
194
-
195
- switch (nextItem && nextItem.type) {
196
- case Type.BLANK_LINE:
197
- case Type.COMMENT:
198
- continue next;
199
-
200
- case Type.MAP_VALUE:
201
- break next;
202
-
203
- default:
204
- {
205
- const msg = 'Implicit map keys need to be followed by map values';
206
- doc.errors.push(new YAMLSemanticError(item, msg));
207
- break next;
208
- }
209
- }
210
- }
211
-
212
- if (item.valueRangeContainsNewline) {
213
- const msg = 'Implicit map keys need to be on a single line';
214
- doc.errors.push(new YAMLSemanticError(item, msg));
215
- }
216
-
217
- }
218
- }
219
-
220
- if (key !== undefined) items.push(new Pair(key));
221
- return {
222
- comments,
223
- items
224
- };
225
- }
226
-
227
- function resolveFlowMapItems(doc, cst) {
228
- const comments = [];
229
- const items = [];
230
- let key = undefined;
231
- let explicitKey = false;
232
- let next = '{';
233
-
234
- for (let i = 0; i < cst.items.length; ++i) {
235
- const item = cst.items[i];
236
-
237
- if (typeof item.char === 'string') {
238
- const {
239
- char,
240
- offset
241
- } = item;
242
-
243
- if (char === '?' && key === undefined && !explicitKey) {
244
- explicitKey = true;
245
- next = ':';
246
- continue;
247
- }
248
-
249
- if (char === ':') {
250
- if (key === undefined) key = null;
251
-
252
- if (next === ':') {
253
- next = ',';
254
- continue;
255
- }
256
- } else {
257
- if (explicitKey) {
258
- if (key === undefined && char !== ',') key = null;
259
- explicitKey = false;
260
- }
261
-
262
- if (key !== undefined) {
263
- items.push(new Pair(key));
264
- key = undefined;
265
-
266
- if (char === ',') {
267
- next = ':';
268
- continue;
269
- }
270
- }
271
- }
272
-
273
- if (char === '}') {
274
- if (i === cst.items.length - 1) continue;
275
- } else if (char === next) {
276
- next = ':';
277
- continue;
278
- }
279
-
280
- const msg = "Flow map contains an unexpected ".concat(char);
281
- const err = new YAMLSyntaxError(cst, msg);
282
- err.offset = offset;
283
- doc.errors.push(err);
284
- } else if (item.type === Type.BLANK_LINE) {
285
- comments.push({
286
- afterKey: !!key,
287
- before: items.length
288
- });
289
- } else if (item.type === Type.COMMENT) {
290
- checkFlowCommentSpace(doc.errors, item);
291
- comments.push({
292
- afterKey: !!key,
293
- before: items.length,
294
- comment: item.comment
295
- });
296
- } else if (key === undefined) {
297
- if (next === ',') doc.errors.push(new YAMLSemanticError(item, 'Separator , missing in flow map'));
298
- key = resolveNode(doc, item);
299
- } else {
300
- if (next !== ',') doc.errors.push(new YAMLSemanticError(item, 'Indicator : missing in flow map entry'));
301
- items.push(new Pair(key, resolveNode(doc, item)));
302
- key = undefined;
303
- explicitKey = false;
304
- }
305
- }
306
-
307
- checkFlowCollectionEnd(doc.errors, cst);
308
- if (key !== undefined) items.push(new Pair(key));
309
- return {
310
- comments,
311
- items
312
- };
313
- }
314
-
315
- export { resolveMap };
@@ -1,173 +0,0 @@
1
- import { Alias } from '../ast/Alias.js';
2
- import { Type, Char } from '../constants.js';
3
- import { YAMLSemanticError, YAMLReferenceError, YAMLSyntaxError } from '../errors.js';
4
- import { resolveScalar } from './resolveScalar.js';
5
- import { resolveTagName } from './resolveTagName.js';
6
- import { resolveTag } from './resolveTag.js';
7
-
8
- const isCollectionItem = node => {
9
- if (!node) return false;
10
- const {
11
- type
12
- } = node;
13
- return type === Type.MAP_KEY || type === Type.MAP_VALUE || type === Type.SEQ_ITEM;
14
- };
15
-
16
- function resolveNodeProps(errors, node) {
17
- const comments = {
18
- before: [],
19
- after: []
20
- };
21
- let hasAnchor = false;
22
- let hasTag = false;
23
- const props = isCollectionItem(node.context.parent) ? node.context.parent.props.concat(node.props) : node.props;
24
-
25
- for (const {
26
- start,
27
- end
28
- } of props) {
29
- switch (node.context.src[start]) {
30
- case Char.COMMENT:
31
- {
32
- if (!node.commentHasRequiredWhitespace(start)) {
33
- const msg = 'Comments must be separated from other tokens by white space characters';
34
- errors.push(new YAMLSemanticError(node, msg));
35
- }
36
-
37
- const {
38
- header,
39
- valueRange
40
- } = node;
41
- const cc = valueRange && (start > valueRange.start || header && start > header.start) ? comments.after : comments.before;
42
- cc.push(node.context.src.slice(start + 1, end));
43
- break;
44
- }
45
- // Actual anchor & tag resolution is handled by schema, here we just complain
46
-
47
- case Char.ANCHOR:
48
- if (hasAnchor) {
49
- const msg = 'A node can have at most one anchor';
50
- errors.push(new YAMLSemanticError(node, msg));
51
- }
52
-
53
- hasAnchor = true;
54
- break;
55
-
56
- case Char.TAG:
57
- if (hasTag) {
58
- const msg = 'A node can have at most one tag';
59
- errors.push(new YAMLSemanticError(node, msg));
60
- }
61
-
62
- hasTag = true;
63
- break;
64
- }
65
- }
66
-
67
- return {
68
- comments,
69
- hasAnchor,
70
- hasTag
71
- };
72
- }
73
-
74
- function resolveNodeValue(doc, node) {
75
- const {
76
- anchors,
77
- errors,
78
- schema
79
- } = doc;
80
-
81
- if (node.type === Type.ALIAS) {
82
- const name = node.rawValue;
83
- const src = anchors.getNode(name);
84
-
85
- if (!src) {
86
- const msg = "Aliased anchor not found: ".concat(name);
87
- errors.push(new YAMLReferenceError(node, msg));
88
- return null;
89
- } // Lazy resolution for circular references
90
-
91
-
92
- const res = new Alias(src);
93
-
94
- anchors._cstAliases.push(res);
95
-
96
- return res;
97
- }
98
-
99
- const tagName = resolveTagName(doc, node);
100
- if (tagName) return resolveTag(doc, node, tagName);
101
-
102
- if (node.type !== Type.PLAIN) {
103
- const msg = "Failed to resolve ".concat(node.type, " node here");
104
- errors.push(new YAMLSyntaxError(node, msg));
105
- return null;
106
- }
107
-
108
- try {
109
- let str = node.strValue || '';
110
-
111
- if (typeof str !== 'string') {
112
- str.errors.forEach(error => doc.errors.push(error));
113
- str = str.str;
114
- }
115
-
116
- return resolveScalar(str, schema.tags);
117
- } catch (error) {
118
- if (!error.source) error.source = node;
119
- errors.push(error);
120
- return null;
121
- }
122
- } // sets node.resolved on success
123
-
124
-
125
- function resolveNode(doc, node) {
126
- if (!node) return null;
127
- if (node.error) doc.errors.push(node.error);
128
- const {
129
- comments,
130
- hasAnchor,
131
- hasTag
132
- } = resolveNodeProps(doc.errors, node);
133
-
134
- if (hasAnchor) {
135
- const {
136
- anchors
137
- } = doc;
138
- const name = node.anchor;
139
- const prev = anchors.getNode(name); // At this point, aliases for any preceding node with the same anchor
140
- // name have already been resolved, so it may safely be renamed.
141
-
142
- if (prev) anchors.map[anchors.newName(name)] = prev; // During parsing, we need to store the CST node in anchors.map as
143
- // anchors need to be available during resolution to allow for
144
- // circular references.
145
-
146
- anchors.map[name] = node;
147
- }
148
-
149
- if (node.type === Type.ALIAS && (hasAnchor || hasTag)) {
150
- const msg = 'An alias node must not specify any properties';
151
- doc.errors.push(new YAMLSemanticError(node, msg));
152
- }
153
-
154
- const res = resolveNodeValue(doc, node);
155
-
156
- if (res) {
157
- res.range = [node.range.start, node.range.end];
158
- if (doc.options.keepCstNodes) res.cstNode = node;
159
- if (doc.options.keepNodeTypes) res.type = node.type;
160
- const cb = comments.before.join('\n');
161
-
162
- if (cb) {
163
- res.commentBefore = res.commentBefore ? "".concat(res.commentBefore, "\n").concat(cb) : cb;
164
- }
165
-
166
- const ca = comments.after.join('\n');
167
- if (ca) res.comment = res.comment ? "".concat(res.comment, "\n").concat(ca) : ca;
168
- }
169
-
170
- return node.resolved = res;
171
- }
172
-
173
- export { resolveNode };
@@ -1,20 +0,0 @@
1
- import { Scalar } from '../ast/Scalar.js';
2
-
3
- function resolveScalar(str, tags) {
4
- for (const {
5
- format,
6
- test,
7
- resolve
8
- } of tags) {
9
- if (test && test.test(str)) {
10
- let res = resolve(str);
11
- if (!(res instanceof Scalar)) res = new Scalar(res);
12
- if (format) res.format = format;
13
- return res;
14
- }
15
- }
16
-
17
- return new Scalar(str); // fallback to string
18
- }
19
-
20
- export { resolveScalar };
@@ -1,170 +0,0 @@
1
- import { Pair } from '../ast/Pair.js';
2
- import { YAMLSeq } from '../ast/YAMLSeq.js';
3
- import { Type } from '../constants.js';
4
- import { YAMLSyntaxError, YAMLSemanticError } from '../errors.js';
5
- import { resolveComments, getLongKeyError, checkFlowCommentSpace, checkFlowCollectionEnd } from './collection-utils.js';
6
- import { resolveNode } from './resolveNode.js';
7
-
8
- function resolveSeq(doc, cst) {
9
- const {
10
- comments,
11
- items
12
- } = cst.type === Type.FLOW_SEQ ? resolveFlowSeqItems(doc, cst) : resolveBlockSeqItems(doc, cst);
13
- const seq = new YAMLSeq(doc.schema);
14
- seq.items = items;
15
- resolveComments(seq, comments);
16
- cst.resolved = seq;
17
- return seq;
18
- }
19
-
20
- function resolveBlockSeqItems(doc, cst) {
21
- const comments = [];
22
- const items = [];
23
-
24
- for (let i = 0; i < cst.items.length; ++i) {
25
- const item = cst.items[i];
26
-
27
- switch (item.type) {
28
- case Type.BLANK_LINE:
29
- comments.push({
30
- before: items.length
31
- });
32
- break;
33
-
34
- case Type.COMMENT:
35
- comments.push({
36
- comment: item.comment,
37
- before: items.length
38
- });
39
- break;
40
-
41
- case Type.SEQ_ITEM:
42
- if (item.error) doc.errors.push(item.error);
43
- items.push(resolveNode(doc, item.node));
44
-
45
- if (item.hasProps) {
46
- const msg = 'Sequence items cannot have tags or anchors before the - indicator';
47
- doc.errors.push(new YAMLSemanticError(item, msg));
48
- }
49
-
50
- break;
51
-
52
- default:
53
- if (item.error) doc.errors.push(item.error);
54
- doc.errors.push(new YAMLSyntaxError(item, "Unexpected ".concat(item.type, " node in sequence")));
55
- }
56
- }
57
-
58
- return {
59
- comments,
60
- items
61
- };
62
- }
63
-
64
- function resolveFlowSeqItems(doc, cst) {
65
- const comments = [];
66
- const items = [];
67
- let explicitKey = false;
68
- let key = undefined;
69
- let keyStart = null;
70
- let next = '[';
71
- let prevItem = null;
72
-
73
- for (let i = 0; i < cst.items.length; ++i) {
74
- const item = cst.items[i];
75
-
76
- if (typeof item.char === 'string') {
77
- const {
78
- char,
79
- offset
80
- } = item;
81
-
82
- if (char !== ':' && (explicitKey || key !== undefined)) {
83
- if (explicitKey && key === undefined) key = next ? items.pop() : null;
84
- items.push(new Pair(key));
85
- explicitKey = false;
86
- key = undefined;
87
- keyStart = null;
88
- }
89
-
90
- if (char === next) {
91
- next = null;
92
- } else if (!next && char === '?') {
93
- explicitKey = true;
94
- } else if (next !== '[' && char === ':' && key === undefined) {
95
- if (next === ',') {
96
- key = items.pop();
97
-
98
- if (key instanceof Pair) {
99
- const msg = 'Chaining flow sequence pairs is invalid';
100
- const err = new YAMLSemanticError(cst, msg);
101
- err.offset = offset;
102
- doc.errors.push(err);
103
- }
104
-
105
- if (!explicitKey && typeof keyStart === 'number') {
106
- const keyEnd = item.range ? item.range.start : item.offset;
107
- if (keyEnd > keyStart + 1024) doc.errors.push(getLongKeyError(cst, key));
108
- const {
109
- src
110
- } = prevItem.context;
111
-
112
- for (let i = keyStart; i < keyEnd; ++i) if (src[i] === '\n') {
113
- const msg = 'Implicit keys of flow sequence pairs need to be on a single line';
114
- doc.errors.push(new YAMLSemanticError(prevItem, msg));
115
- break;
116
- }
117
- }
118
- } else {
119
- key = null;
120
- }
121
-
122
- keyStart = null;
123
- explicitKey = false;
124
- next = null;
125
- } else if (next === '[' || char !== ']' || i < cst.items.length - 1) {
126
- const msg = "Flow sequence contains an unexpected ".concat(char);
127
- const err = new YAMLSyntaxError(cst, msg);
128
- err.offset = offset;
129
- doc.errors.push(err);
130
- }
131
- } else if (item.type === Type.BLANK_LINE) {
132
- comments.push({
133
- before: items.length
134
- });
135
- } else if (item.type === Type.COMMENT) {
136
- checkFlowCommentSpace(doc.errors, item);
137
- comments.push({
138
- comment: item.comment,
139
- before: items.length
140
- });
141
- } else {
142
- if (next) {
143
- const msg = "Expected a ".concat(next, " in flow sequence");
144
- doc.errors.push(new YAMLSemanticError(item, msg));
145
- }
146
-
147
- const value = resolveNode(doc, item);
148
-
149
- if (key === undefined) {
150
- items.push(value);
151
- prevItem = item;
152
- } else {
153
- items.push(new Pair(key, value));
154
- key = undefined;
155
- }
156
-
157
- keyStart = item.range.start;
158
- next = ',';
159
- }
160
- }
161
-
162
- checkFlowCollectionEnd(doc.errors, cst);
163
- if (key !== undefined) items.push(new Pair(key));
164
- return {
165
- comments,
166
- items
167
- };
168
- }
169
-
170
- export { resolveSeq };