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,259 +0,0 @@
1
- import { Type } from '../constants.js';
2
- import { YAMLSyntaxError } from '../errors.js';
3
- import { BlankLine } from './BlankLine.js';
4
- import { CollectionItem } from './CollectionItem.js';
5
- import { Comment } from './Comment.js';
6
- import { Node } from './Node.js';
7
- import { Range } from './Range.js';
8
-
9
- function grabCollectionEndComments(node) {
10
- let cnode = node;
11
-
12
- while (cnode instanceof CollectionItem) cnode = cnode.node;
13
-
14
- if (!(cnode instanceof Collection)) return null;
15
- const len = cnode.items.length;
16
- let ci = -1;
17
-
18
- for (let i = len - 1; i >= 0; --i) {
19
- const n = cnode.items[i];
20
-
21
- if (n.type === Type.COMMENT) {
22
- // Keep sufficiently indented comments with preceding node
23
- const {
24
- indent,
25
- lineStart
26
- } = n.context;
27
- if (indent > 0 && n.range.start >= lineStart + indent) break;
28
- ci = i;
29
- } else if (n.type === Type.BLANK_LINE) ci = i;else break;
30
- }
31
-
32
- if (ci === -1) return null;
33
- const ca = cnode.items.splice(ci, len - ci);
34
- const prevEnd = ca[0].range.start;
35
-
36
- while (true) {
37
- cnode.range.end = prevEnd;
38
- if (cnode.valueRange && cnode.valueRange.end > prevEnd) cnode.valueRange.end = prevEnd;
39
- if (cnode === node) break;
40
- cnode = cnode.context.parent;
41
- }
42
-
43
- return ca;
44
- }
45
- class Collection extends Node {
46
- static nextContentHasIndent(src, offset, indent) {
47
- const lineStart = Node.endOfLine(src, offset) + 1;
48
- offset = Node.endOfWhiteSpace(src, lineStart);
49
- const ch = src[offset];
50
- if (!ch) return false;
51
- if (offset >= lineStart + indent) return true;
52
- if (ch !== '#' && ch !== '\n') return false;
53
- return Collection.nextContentHasIndent(src, offset, indent);
54
- }
55
-
56
- constructor(firstItem) {
57
- super(firstItem.type === Type.SEQ_ITEM ? Type.SEQ : Type.MAP);
58
-
59
- for (let i = firstItem.props.length - 1; i >= 0; --i) {
60
- if (firstItem.props[i].start < firstItem.context.lineStart) {
61
- // props on previous line are assumed by the collection
62
- this.props = firstItem.props.slice(0, i + 1);
63
- firstItem.props = firstItem.props.slice(i + 1);
64
- const itemRange = firstItem.props[0] || firstItem.valueRange;
65
- firstItem.range.start = itemRange.start;
66
- break;
67
- }
68
- }
69
-
70
- this.items = [firstItem];
71
- const ec = grabCollectionEndComments(firstItem);
72
- if (ec) Array.prototype.push.apply(this.items, ec);
73
- }
74
-
75
- get includesTrailingLines() {
76
- return this.items.length > 0;
77
- }
78
- /**
79
- * @param {ParseContext} context
80
- * @param {number} start - Index of first character
81
- * @returns {number} - Index of the character after this
82
- */
83
-
84
-
85
- parse(context, start) {
86
- this.context = context;
87
- const {
88
- parseNode,
89
- src
90
- } = context; // It's easier to recalculate lineStart here rather than tracking down the
91
- // last context from which to read it -- eemeli/yaml#2
92
-
93
- let lineStart = Node.startOfLine(src, start);
94
- const firstItem = this.items[0]; // First-item context needs to be correct for later comment handling
95
- // -- eemeli/yaml#17
96
-
97
- firstItem.context.parent = this;
98
- this.valueRange = Range.copy(firstItem.valueRange);
99
- const indent = firstItem.range.start - firstItem.context.lineStart;
100
- let offset = start;
101
- offset = Node.normalizeOffset(src, offset);
102
- let ch = src[offset];
103
- let atLineStart = Node.endOfWhiteSpace(src, lineStart) === offset;
104
- let prevIncludesTrailingLines = false;
105
-
106
- while (ch) {
107
- while (ch === '\n' || ch === '#') {
108
- if (atLineStart && ch === '\n' && !prevIncludesTrailingLines) {
109
- const blankLine = new BlankLine();
110
- offset = blankLine.parse({
111
- src
112
- }, offset);
113
- this.valueRange.end = offset;
114
-
115
- if (offset >= src.length) {
116
- ch = null;
117
- break;
118
- }
119
-
120
- this.items.push(blankLine);
121
- offset -= 1; // blankLine.parse() consumes terminal newline
122
- } else if (ch === '#') {
123
- if (offset < lineStart + indent && !Collection.nextContentHasIndent(src, offset, indent)) {
124
- return offset;
125
- }
126
-
127
- const comment = new Comment();
128
- offset = comment.parse({
129
- indent,
130
- lineStart,
131
- src
132
- }, offset);
133
- this.items.push(comment);
134
- this.valueRange.end = offset;
135
-
136
- if (offset >= src.length) {
137
- ch = null;
138
- break;
139
- }
140
- }
141
-
142
- lineStart = offset + 1;
143
- offset = Node.endOfIndent(src, lineStart);
144
-
145
- if (Node.atBlank(src, offset)) {
146
- const wsEnd = Node.endOfWhiteSpace(src, offset);
147
- const next = src[wsEnd];
148
-
149
- if (!next || next === '\n' || next === '#') {
150
- offset = wsEnd;
151
- }
152
- }
153
-
154
- ch = src[offset];
155
- atLineStart = true;
156
- }
157
-
158
- if (!ch) {
159
- break;
160
- }
161
-
162
- if (offset !== lineStart + indent && (atLineStart || ch !== ':')) {
163
- if (offset < lineStart + indent) {
164
- if (lineStart > start) offset = lineStart;
165
- break;
166
- } else if (!this.error) {
167
- const msg = 'All collection items must start at the same column';
168
- this.error = new YAMLSyntaxError(this, msg);
169
- }
170
- }
171
-
172
- if (firstItem.type === Type.SEQ_ITEM) {
173
- if (ch !== '-') {
174
- if (lineStart > start) offset = lineStart;
175
- break;
176
- }
177
- } else if (ch === '-' && !this.error) {
178
- // map key may start with -, as long as it's followed by a non-whitespace char
179
- const next = src[offset + 1];
180
-
181
- if (!next || next === '\n' || next === '\t' || next === ' ') {
182
- const msg = 'A collection cannot be both a mapping and a sequence';
183
- this.error = new YAMLSyntaxError(this, msg);
184
- }
185
- }
186
-
187
- const node = parseNode({
188
- atLineStart,
189
- inCollection: true,
190
- indent,
191
- lineStart,
192
- parent: this
193
- }, offset);
194
- if (!node) return offset; // at next document start
195
-
196
- this.items.push(node);
197
- this.valueRange.end = node.valueRange.end;
198
- offset = Node.normalizeOffset(src, node.range.end);
199
- ch = src[offset];
200
- atLineStart = false;
201
- prevIncludesTrailingLines = node.includesTrailingLines; // Need to reset lineStart and atLineStart here if preceding node's range
202
- // has advanced to check the current line's indentation level
203
- // -- eemeli/yaml#10 & eemeli/yaml#38
204
-
205
- if (ch) {
206
- let ls = offset - 1;
207
- let prev = src[ls];
208
-
209
- while (prev === ' ' || prev === '\t') prev = src[--ls];
210
-
211
- if (prev === '\n') {
212
- lineStart = ls + 1;
213
- atLineStart = true;
214
- }
215
- }
216
-
217
- const ec = grabCollectionEndComments(node);
218
- if (ec) Array.prototype.push.apply(this.items, ec);
219
- }
220
-
221
- return offset;
222
- }
223
-
224
- setOrigRanges(cr, offset) {
225
- offset = super.setOrigRanges(cr, offset);
226
- this.items.forEach(node => {
227
- offset = node.setOrigRanges(cr, offset);
228
- });
229
- return offset;
230
- }
231
-
232
- toString() {
233
- const {
234
- context: {
235
- src
236
- },
237
- items,
238
- range,
239
- value
240
- } = this;
241
- if (value != null) return value;
242
- let str = src.slice(range.start, items[0].range.start) + String(items[0]);
243
-
244
- for (let i = 1; i < items.length; ++i) {
245
- const item = items[i];
246
- const {
247
- atLineStart,
248
- indent
249
- } = item.context;
250
- if (atLineStart) for (let i = 0; i < indent; ++i) str += ' ';
251
- str += String(item);
252
- }
253
-
254
- return Node.addStringTerminator(src, range.end, str);
255
- }
256
-
257
- }
258
-
259
- export { Collection, grabCollectionEndComments };
@@ -1,123 +0,0 @@
1
- import { Type } from '../constants.js';
2
- import { YAMLSemanticError } from '../errors.js';
3
- import { BlankLine } from './BlankLine.js';
4
- import { Node } from './Node.js';
5
- import { Range } from './Range.js';
6
-
7
- class CollectionItem extends Node {
8
- constructor(type, props) {
9
- super(type, props);
10
- this.node = null;
11
- }
12
-
13
- get includesTrailingLines() {
14
- return !!this.node && this.node.includesTrailingLines;
15
- }
16
- /**
17
- * @param {ParseContext} context
18
- * @param {number} start - Index of first character
19
- * @returns {number} - Index of the character after this
20
- */
21
-
22
-
23
- parse(context, start) {
24
- this.context = context;
25
- const {
26
- parseNode,
27
- src
28
- } = context;
29
- let {
30
- atLineStart,
31
- lineStart
32
- } = context;
33
- if (!atLineStart && this.type === Type.SEQ_ITEM) this.error = new YAMLSemanticError(this, 'Sequence items must not have preceding content on the same line');
34
- const indent = atLineStart ? start - lineStart : context.indent;
35
- let offset = Node.endOfWhiteSpace(src, start + 1);
36
- let ch = src[offset];
37
- const inlineComment = ch === '#';
38
- const comments = [];
39
- let blankLine = null;
40
-
41
- while (ch === '\n' || ch === '#') {
42
- if (ch === '#') {
43
- const end = Node.endOfLine(src, offset + 1);
44
- comments.push(new Range(offset, end));
45
- offset = end;
46
- } else {
47
- atLineStart = true;
48
- lineStart = offset + 1;
49
- const wsEnd = Node.endOfWhiteSpace(src, lineStart);
50
-
51
- if (src[wsEnd] === '\n' && comments.length === 0) {
52
- blankLine = new BlankLine();
53
- lineStart = blankLine.parse({
54
- src
55
- }, lineStart);
56
- }
57
-
58
- offset = Node.endOfIndent(src, lineStart);
59
- }
60
-
61
- ch = src[offset];
62
- }
63
-
64
- if (Node.nextNodeIsIndented(ch, offset - (lineStart + indent), this.type !== Type.SEQ_ITEM)) {
65
- this.node = parseNode({
66
- atLineStart,
67
- inCollection: false,
68
- indent,
69
- lineStart,
70
- parent: this
71
- }, offset);
72
- } else if (ch && lineStart > start + 1) {
73
- offset = lineStart - 1;
74
- }
75
-
76
- if (this.node) {
77
- if (blankLine) {
78
- // Only blank lines preceding non-empty nodes are captured. Note that
79
- // this means that collection item range start indices do not always
80
- // increase monotonically. -- eemeli/yaml#126
81
- const items = context.parent.items || context.parent.contents;
82
- if (items) items.push(blankLine);
83
- }
84
-
85
- if (comments.length) Array.prototype.push.apply(this.props, comments);
86
- offset = this.node.range.end;
87
- } else {
88
- if (inlineComment) {
89
- const c = comments[0];
90
- this.props.push(c);
91
- offset = c.end;
92
- } else {
93
- offset = Node.endOfLine(src, start + 1);
94
- }
95
- }
96
-
97
- const end = this.node ? this.node.valueRange.end : offset;
98
- this.valueRange = new Range(start, end);
99
- return offset;
100
- }
101
-
102
- setOrigRanges(cr, offset) {
103
- offset = super.setOrigRanges(cr, offset);
104
- return this.node ? this.node.setOrigRanges(cr, offset) : offset;
105
- }
106
-
107
- toString() {
108
- const {
109
- context: {
110
- src
111
- },
112
- node,
113
- range,
114
- value
115
- } = this;
116
- if (value != null) return value;
117
- const str = node ? src.slice(range.start, node.range.start) + String(node) : src.slice(range.start, range.end);
118
- return Node.addStringTerminator(src, range.end, str);
119
- }
120
-
121
- }
122
-
123
- export { CollectionItem };
@@ -1,27 +0,0 @@
1
- import { Type } from '../constants.js';
2
- import { Node } from './Node.js';
3
- import { Range } from './Range.js';
4
-
5
- class Comment extends Node {
6
- constructor() {
7
- super(Type.COMMENT);
8
- }
9
- /**
10
- * Parses a comment line from the source
11
- *
12
- * @param {ParseContext} context
13
- * @param {number} start - Index of first character
14
- * @returns {number} - Index of the character after this scalar
15
- */
16
-
17
-
18
- parse(context, start) {
19
- this.context = context;
20
- const offset = this.parseComment(start);
21
- this.range = new Range(start, offset);
22
- return offset;
23
- }
24
-
25
- }
26
-
27
- export { Comment };
@@ -1,53 +0,0 @@
1
- import { Type } from '../constants.js';
2
- import { Node } from './Node.js';
3
- import { Range } from './Range.js';
4
-
5
- class Directive extends Node {
6
- constructor() {
7
- super(Type.DIRECTIVE);
8
- this.name = null;
9
- }
10
-
11
- get parameters() {
12
- const raw = this.rawValue;
13
- return raw ? raw.trim().split(/[ \t]+/) : [];
14
- }
15
-
16
- parseName(start) {
17
- const {
18
- src
19
- } = this.context;
20
- let offset = start;
21
- let ch = src[offset];
22
-
23
- while (ch && ch !== '\n' && ch !== '\t' && ch !== ' ') ch = src[offset += 1];
24
-
25
- this.name = src.slice(start, offset);
26
- return offset;
27
- }
28
-
29
- parseParameters(start) {
30
- const {
31
- src
32
- } = this.context;
33
- let offset = start;
34
- let ch = src[offset];
35
-
36
- while (ch && ch !== '\n' && ch !== '#') ch = src[offset += 1];
37
-
38
- this.valueRange = new Range(start, offset);
39
- return offset;
40
- }
41
-
42
- parse(context, start) {
43
- this.context = context;
44
- let offset = this.parseName(start + 1);
45
- offset = this.parseParameters(offset);
46
- offset = this.parseComment(offset);
47
- this.range = new Range(start, offset);
48
- return offset;
49
- }
50
-
51
- }
52
-
53
- export { Directive };