yaml 2.0.0-3 → 2.0.0-7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +46 -26
  3. package/browser/dist/compose/compose-collection.js +59 -0
  4. package/browser/dist/compose/compose-doc.js +39 -0
  5. package/browser/dist/compose/compose-node.js +79 -0
  6. package/browser/dist/compose/compose-scalar.js +74 -0
  7. package/browser/dist/compose/composer.js +219 -0
  8. package/browser/dist/compose/resolve-block-map.js +93 -0
  9. package/browser/dist/compose/resolve-block-scalar.js +185 -0
  10. package/browser/dist/compose/resolve-block-seq.js +40 -0
  11. package/browser/dist/compose/resolve-end.js +37 -0
  12. package/browser/dist/compose/resolve-flow-collection.js +189 -0
  13. package/browser/dist/compose/resolve-flow-scalar.js +217 -0
  14. package/browser/dist/compose/resolve-props.js +126 -0
  15. package/browser/dist/compose/util-contains-newline.js +34 -0
  16. package/browser/dist/compose/util-empty-scalar-position.js +27 -0
  17. package/browser/dist/compose/util-map-includes.js +17 -0
  18. package/browser/dist/doc/Document.js +251 -348
  19. package/browser/dist/doc/anchors.js +72 -0
  20. package/browser/dist/doc/applyReviver.js +41 -28
  21. package/browser/dist/doc/createNode.js +75 -55
  22. package/browser/dist/doc/directives.js +161 -0
  23. package/browser/dist/errors.js +50 -72
  24. package/browser/dist/index.js +16 -72
  25. package/browser/dist/log.js +11 -7
  26. package/browser/dist/nodes/Alias.js +94 -0
  27. package/browser/dist/nodes/Collection.js +133 -0
  28. package/browser/dist/nodes/Node.js +41 -0
  29. package/browser/dist/nodes/Pair.js +28 -0
  30. package/browser/dist/nodes/Scalar.js +23 -0
  31. package/browser/dist/nodes/YAMLMap.js +116 -0
  32. package/browser/dist/nodes/YAMLSeq.js +105 -0
  33. package/browser/dist/nodes/addPairToJSMap.js +103 -0
  34. package/browser/dist/nodes/toJS.js +35 -0
  35. package/browser/dist/options.js +14 -95
  36. package/browser/dist/parse/cst-scalar.js +219 -0
  37. package/browser/dist/parse/cst-stringify.js +61 -0
  38. package/browser/dist/parse/cst-visit.js +97 -0
  39. package/browser/dist/parse/cst.js +98 -0
  40. package/browser/dist/parse/lexer.js +674 -0
  41. package/browser/dist/parse/line-counter.js +39 -0
  42. package/browser/dist/parse/parser.js +876 -0
  43. package/browser/dist/public-api.js +101 -0
  44. package/browser/dist/schema/Schema.js +23 -0
  45. package/browser/dist/schema/common/map.js +42 -0
  46. package/browser/dist/schema/common/null.js +13 -0
  47. package/browser/dist/schema/common/seq.js +33 -0
  48. package/browser/dist/schema/common/string.js +14 -0
  49. package/browser/dist/schema/core/bool.js +19 -0
  50. package/browser/dist/schema/core/float.js +40 -0
  51. package/browser/dist/schema/core/int.js +38 -0
  52. package/browser/dist/schema/core/schema.js +23 -0
  53. package/browser/dist/schema/json/schema.js +62 -0
  54. package/browser/dist/schema/tags.js +79 -0
  55. package/browser/dist/schema/yaml-1.1/binary.js +66 -0
  56. package/browser/dist/schema/yaml-1.1/bool.js +26 -0
  57. package/browser/dist/schema/yaml-1.1/float.js +43 -0
  58. package/browser/dist/schema/yaml-1.1/int.js +71 -0
  59. package/browser/dist/schema/yaml-1.1/omap.js +73 -0
  60. package/browser/dist/schema/yaml-1.1/pairs.js +77 -0
  61. package/browser/dist/schema/yaml-1.1/schema.js +37 -0
  62. package/browser/dist/schema/yaml-1.1/set.js +87 -0
  63. package/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  64. package/browser/dist/stringify/foldFlowLines.js +121 -139
  65. package/browser/dist/stringify/stringify.js +87 -72
  66. package/browser/dist/stringify/stringifyCollection.js +122 -0
  67. package/browser/dist/stringify/stringifyComment.js +14 -0
  68. package/browser/dist/stringify/stringifyDocument.js +64 -0
  69. package/browser/dist/stringify/stringifyNumber.js +20 -23
  70. package/browser/dist/stringify/stringifyPair.js +111 -0
  71. package/browser/dist/stringify/stringifyString.js +295 -322
  72. package/browser/dist/util.js +4 -4
  73. package/browser/dist/visit.js +134 -71
  74. package/browser/index.js +4 -1
  75. package/dist/compose/compose-collection.d.ts +5 -0
  76. package/dist/compose/compose-collection.js +61 -0
  77. package/dist/compose/compose-doc.d.ts +6 -0
  78. package/dist/compose/compose-doc.js +41 -0
  79. package/dist/compose/compose-node.d.ts +25 -0
  80. package/dist/compose/compose-node.js +82 -0
  81. package/dist/compose/compose-scalar.d.ts +5 -0
  82. package/dist/compose/compose-scalar.js +76 -0
  83. package/dist/compose/composer.d.ts +62 -0
  84. package/dist/compose/composer.js +223 -0
  85. package/dist/compose/resolve-block-map.d.ts +6 -0
  86. package/dist/compose/resolve-block-map.js +95 -0
  87. package/dist/compose/resolve-block-scalar.d.ts +10 -0
  88. package/dist/compose/resolve-block-scalar.js +187 -0
  89. package/dist/compose/resolve-block-seq.d.ts +5 -0
  90. package/dist/compose/resolve-block-seq.js +42 -0
  91. package/dist/compose/resolve-end.d.ts +6 -0
  92. package/dist/compose/resolve-end.js +39 -0
  93. package/dist/compose/resolve-flow-collection.d.ts +6 -0
  94. package/dist/compose/resolve-flow-collection.js +191 -0
  95. package/dist/compose/resolve-flow-scalar.d.ts +10 -0
  96. package/dist/compose/resolve-flow-scalar.js +219 -0
  97. package/dist/compose/resolve-props.d.ts +21 -0
  98. package/dist/compose/resolve-props.js +128 -0
  99. package/dist/compose/util-contains-newline.d.ts +2 -0
  100. package/dist/compose/util-contains-newline.js +36 -0
  101. package/dist/compose/util-empty-scalar-position.d.ts +2 -0
  102. package/dist/compose/util-empty-scalar-position.js +29 -0
  103. package/dist/compose/util-map-includes.d.ts +4 -0
  104. package/dist/compose/util-map-includes.js +19 -0
  105. package/dist/doc/Document.d.ts +130 -0
  106. package/dist/doc/Document.js +250 -347
  107. package/dist/doc/anchors.d.ts +24 -0
  108. package/dist/doc/anchors.js +77 -0
  109. package/dist/doc/applyReviver.d.ts +9 -0
  110. package/dist/doc/applyReviver.js +41 -28
  111. package/dist/doc/createNode.d.ts +16 -0
  112. package/dist/doc/createNode.js +75 -55
  113. package/dist/doc/directives.d.ts +46 -0
  114. package/dist/doc/directives.js +163 -0
  115. package/dist/errors.d.ts +21 -0
  116. package/dist/errors.js +51 -74
  117. package/dist/index.d.ts +19 -0
  118. package/dist/index.js +39 -70
  119. package/dist/log.d.ts +3 -0
  120. package/dist/log.js +11 -6
  121. package/dist/nodes/Alias.d.ts +24 -0
  122. package/dist/nodes/Alias.js +96 -0
  123. package/dist/nodes/Collection.d.ts +67 -0
  124. package/dist/nodes/Collection.js +137 -0
  125. package/dist/nodes/Node.d.ts +48 -0
  126. package/dist/nodes/Node.js +59 -0
  127. package/dist/nodes/Pair.d.ts +16 -0
  128. package/dist/nodes/Pair.js +31 -0
  129. package/dist/nodes/Scalar.d.ts +40 -0
  130. package/dist/nodes/Scalar.js +26 -0
  131. package/dist/nodes/YAMLMap.d.ts +39 -0
  132. package/dist/nodes/YAMLMap.js +119 -0
  133. package/dist/nodes/YAMLSeq.d.ts +53 -0
  134. package/dist/nodes/YAMLSeq.js +107 -0
  135. package/dist/nodes/addPairToJSMap.d.ts +3 -0
  136. package/dist/nodes/addPairToJSMap.js +105 -0
  137. package/dist/nodes/toJS.d.ts +30 -0
  138. package/dist/nodes/toJS.js +37 -0
  139. package/dist/options.d.ts +278 -0
  140. package/dist/options.js +13 -96
  141. package/dist/parse/cst-scalar.d.ts +58 -0
  142. package/dist/parse/cst-scalar.js +223 -0
  143. package/dist/parse/cst-stringify.d.ts +8 -0
  144. package/dist/parse/cst-stringify.js +63 -0
  145. package/dist/parse/cst-visit.d.ts +39 -0
  146. package/dist/parse/cst-visit.js +99 -0
  147. package/dist/parse/cst.d.ts +106 -0
  148. package/dist/parse/cst.js +112 -0
  149. package/dist/parse/lexer.d.ts +85 -0
  150. package/dist/parse/lexer.js +676 -0
  151. package/dist/parse/line-counter.d.ts +22 -0
  152. package/dist/parse/line-counter.js +41 -0
  153. package/dist/parse/parser.d.ts +84 -0
  154. package/dist/parse/parser.js +880 -0
  155. package/dist/public-api.d.ts +43 -0
  156. package/dist/public-api.js +106 -0
  157. package/dist/schema/Schema.d.ts +16 -0
  158. package/dist/schema/Schema.js +25 -0
  159. package/dist/schema/common/map.d.ts +2 -0
  160. package/dist/schema/common/map.js +44 -0
  161. package/dist/schema/common/null.d.ts +4 -0
  162. package/dist/schema/common/null.js +15 -0
  163. package/dist/schema/common/seq.d.ts +2 -0
  164. package/dist/schema/common/seq.js +35 -0
  165. package/dist/schema/common/string.d.ts +2 -0
  166. package/dist/schema/common/string.js +16 -0
  167. package/dist/schema/core/bool.d.ts +4 -0
  168. package/dist/schema/core/bool.js +21 -0
  169. package/dist/schema/core/float.d.ts +4 -0
  170. package/dist/schema/core/float.js +44 -0
  171. package/dist/schema/core/int.d.ts +4 -0
  172. package/dist/schema/core/int.js +42 -0
  173. package/dist/schema/core/schema.d.ts +1 -0
  174. package/dist/schema/core/schema.js +25 -0
  175. package/dist/schema/json/schema.d.ts +2 -0
  176. package/dist/schema/json/schema.js +64 -0
  177. package/dist/schema/tags.d.ts +41 -0
  178. package/dist/schema/tags.js +82 -0
  179. package/dist/schema/types.d.ts +82 -0
  180. package/dist/schema/yaml-1.1/binary.d.ts +2 -0
  181. package/dist/schema/yaml-1.1/binary.js +68 -0
  182. package/dist/schema/yaml-1.1/bool.d.ts +7 -0
  183. package/dist/schema/yaml-1.1/bool.js +29 -0
  184. package/dist/schema/yaml-1.1/float.d.ts +4 -0
  185. package/dist/schema/yaml-1.1/float.js +47 -0
  186. package/dist/schema/yaml-1.1/int.d.ts +5 -0
  187. package/dist/schema/yaml-1.1/int.js +76 -0
  188. package/dist/schema/yaml-1.1/omap.d.ts +21 -0
  189. package/dist/schema/yaml-1.1/omap.js +76 -0
  190. package/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  191. package/dist/schema/yaml-1.1/pairs.js +81 -0
  192. package/dist/schema/yaml-1.1/schema.d.ts +1 -0
  193. package/dist/schema/yaml-1.1/schema.js +39 -0
  194. package/dist/schema/yaml-1.1/set.d.ts +22 -0
  195. package/dist/schema/yaml-1.1/set.js +90 -0
  196. package/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  197. package/dist/schema/yaml-1.1/timestamp.js +105 -0
  198. package/dist/stringify/foldFlowLines.d.ts +34 -0
  199. package/dist/stringify/foldFlowLines.js +121 -139
  200. package/dist/stringify/stringify.d.ts +18 -0
  201. package/dist/stringify/stringify.js +87 -71
  202. package/dist/stringify/stringifyCollection.d.ts +21 -0
  203. package/dist/stringify/stringifyCollection.js +124 -0
  204. package/dist/stringify/stringifyComment.d.ts +2 -0
  205. package/dist/stringify/stringifyComment.js +17 -0
  206. package/dist/stringify/stringifyDocument.d.ts +3 -0
  207. package/dist/stringify/stringifyDocument.js +66 -0
  208. package/dist/stringify/stringifyNumber.d.ts +2 -0
  209. package/dist/stringify/stringifyNumber.js +20 -23
  210. package/dist/stringify/stringifyPair.d.ts +3 -0
  211. package/dist/stringify/stringifyPair.js +113 -0
  212. package/dist/stringify/stringifyString.d.ts +3 -0
  213. package/dist/stringify/stringifyString.js +295 -322
  214. package/dist/test-events.d.ts +4 -0
  215. package/dist/test-events.js +124 -148
  216. package/dist/util.d.ts +6 -0
  217. package/dist/util.js +9 -12
  218. package/dist/visit.d.ts +63 -0
  219. package/dist/visit.js +134 -71
  220. package/package.json +31 -39
  221. package/util.js +2 -14
  222. package/browser/dist/_virtual/_rollupPluginBabelHelpers.js +0 -16
  223. package/browser/dist/ast/Alias.js +0 -95
  224. package/browser/dist/ast/Collection.js +0 -192
  225. package/browser/dist/ast/Merge.js +0 -71
  226. package/browser/dist/ast/Node.js +0 -3
  227. package/browser/dist/ast/Pair.js +0 -200
  228. package/browser/dist/ast/Scalar.js +0 -21
  229. package/browser/dist/ast/YAMLMap.js +0 -91
  230. package/browser/dist/ast/YAMLSeq.js +0 -67
  231. package/browser/dist/ast/toJS.js +0 -29
  232. package/browser/dist/constants.js +0 -40
  233. package/browser/dist/cst/Alias.js +0 -26
  234. package/browser/dist/cst/BlankLine.js +0 -34
  235. package/browser/dist/cst/BlockValue.js +0 -240
  236. package/browser/dist/cst/Collection.js +0 -259
  237. package/browser/dist/cst/CollectionItem.js +0 -123
  238. package/browser/dist/cst/Comment.js +0 -27
  239. package/browser/dist/cst/Directive.js +0 -53
  240. package/browser/dist/cst/Document.js +0 -262
  241. package/browser/dist/cst/FlowCollection.js +0 -201
  242. package/browser/dist/cst/Node.js +0 -355
  243. package/browser/dist/cst/ParseContext.js +0 -234
  244. package/browser/dist/cst/PlainValue.js +0 -171
  245. package/browser/dist/cst/QuoteDouble.js +0 -224
  246. package/browser/dist/cst/QuoteSingle.js +0 -100
  247. package/browser/dist/cst/Range.js +0 -56
  248. package/browser/dist/cst/parse.js +0 -46
  249. package/browser/dist/cst/source-utils.js +0 -169
  250. package/browser/dist/doc/Anchors.js +0 -115
  251. package/browser/dist/doc/Schema.js +0 -34
  252. package/browser/dist/doc/getSchemaTags.js +0 -33
  253. package/browser/dist/doc/listTagNames.js +0 -27
  254. package/browser/dist/doc/parseContents.js +0 -60
  255. package/browser/dist/doc/parseDirectives.js +0 -107
  256. package/browser/dist/resolve/collection-utils.js +0 -86
  257. package/browser/dist/resolve/resolveMap.js +0 -315
  258. package/browser/dist/resolve/resolveNode.js +0 -173
  259. package/browser/dist/resolve/resolveScalar.js +0 -20
  260. package/browser/dist/resolve/resolveSeq.js +0 -170
  261. package/browser/dist/resolve/resolveTag.js +0 -107
  262. package/browser/dist/resolve/resolveTagName.js +0 -87
  263. package/browser/dist/stringify/addComment.js +0 -10
  264. package/browser/dist/stringify/stringifyTag.js +0 -28
  265. package/browser/dist/tags/core.js +0 -128
  266. package/browser/dist/tags/failsafe/index.js +0 -7
  267. package/browser/dist/tags/failsafe/map.js +0 -37
  268. package/browser/dist/tags/failsafe/seq.js +0 -34
  269. package/browser/dist/tags/failsafe/string.js +0 -20
  270. package/browser/dist/tags/index.js +0 -39
  271. package/browser/dist/tags/json.js +0 -62
  272. package/browser/dist/tags/options.js +0 -31
  273. package/browser/dist/tags/yaml-1.1/binary.js +0 -83
  274. package/browser/dist/tags/yaml-1.1/index.js +0 -174
  275. package/browser/dist/tags/yaml-1.1/omap.js +0 -86
  276. package/browser/dist/tags/yaml-1.1/pairs.js +0 -62
  277. package/browser/dist/tags/yaml-1.1/set.js +0 -78
  278. package/browser/dist/tags/yaml-1.1/timestamp.js +0 -101
  279. package/browser/dist/types.js +0 -10
  280. package/cst.d.ts +0 -185
  281. package/dist/_virtual/_rollupPluginBabelHelpers.js +0 -18
  282. package/dist/ast/Alias.js +0 -97
  283. package/dist/ast/Collection.js +0 -196
  284. package/dist/ast/Merge.js +0 -74
  285. package/dist/ast/Node.js +0 -5
  286. package/dist/ast/Pair.js +0 -203
  287. package/dist/ast/Scalar.js +0 -24
  288. package/dist/ast/YAMLMap.js +0 -94
  289. package/dist/ast/YAMLSeq.js +0 -69
  290. package/dist/ast/toJS.js +0 -31
  291. package/dist/constants.js +0 -46
  292. package/dist/cst/Alias.js +0 -28
  293. package/dist/cst/BlankLine.js +0 -36
  294. package/dist/cst/BlockValue.js +0 -243
  295. package/dist/cst/Collection.js +0 -262
  296. package/dist/cst/CollectionItem.js +0 -125
  297. package/dist/cst/Comment.js +0 -29
  298. package/dist/cst/Directive.js +0 -55
  299. package/dist/cst/Document.js +0 -264
  300. package/dist/cst/FlowCollection.js +0 -203
  301. package/dist/cst/Node.js +0 -357
  302. package/dist/cst/ParseContext.js +0 -236
  303. package/dist/cst/PlainValue.js +0 -173
  304. package/dist/cst/QuoteDouble.js +0 -226
  305. package/dist/cst/QuoteSingle.js +0 -102
  306. package/dist/cst/Range.js +0 -58
  307. package/dist/cst/parse.js +0 -48
  308. package/dist/cst/source-utils.js +0 -173
  309. package/dist/doc/Anchors.js +0 -117
  310. package/dist/doc/Schema.js +0 -36
  311. package/dist/doc/getSchemaTags.js +0 -35
  312. package/dist/doc/listTagNames.js +0 -29
  313. package/dist/doc/parseContents.js +0 -62
  314. package/dist/doc/parseDirectives.js +0 -109
  315. package/dist/resolve/collection-utils.js +0 -91
  316. package/dist/resolve/resolveMap.js +0 -317
  317. package/dist/resolve/resolveNode.js +0 -175
  318. package/dist/resolve/resolveScalar.js +0 -22
  319. package/dist/resolve/resolveSeq.js +0 -172
  320. package/dist/resolve/resolveTag.js +0 -109
  321. package/dist/resolve/resolveTagName.js +0 -89
  322. package/dist/stringify/addComment.js +0 -13
  323. package/dist/stringify/stringifyTag.js +0 -30
  324. package/dist/tags/core.js +0 -138
  325. package/dist/tags/failsafe/index.js +0 -9
  326. package/dist/tags/failsafe/map.js +0 -39
  327. package/dist/tags/failsafe/seq.js +0 -36
  328. package/dist/tags/failsafe/string.js +0 -22
  329. package/dist/tags/index.js +0 -42
  330. package/dist/tags/json.js +0 -64
  331. package/dist/tags/options.js +0 -37
  332. package/dist/tags/yaml-1.1/binary.js +0 -85
  333. package/dist/tags/yaml-1.1/index.js +0 -176
  334. package/dist/tags/yaml-1.1/omap.js +0 -89
  335. package/dist/tags/yaml-1.1/pairs.js +0 -66
  336. package/dist/tags/yaml-1.1/set.js +0 -81
  337. package/dist/tags/yaml-1.1/timestamp.js +0 -105
  338. package/dist/types.js +0 -29
  339. package/index.d.ts +0 -519
  340. package/index.js +0 -1
  341. package/types.d.ts +0 -379
  342. package/types.js +0 -17
  343. package/types.mjs +0 -17
  344. package/util.d.ts +0 -76
  345. package/util.mjs +0 -15
@@ -1,240 +0,0 @@
1
- import { Type } from '../constants.js';
2
- import { YAMLSemanticError } from '../errors.js';
3
- import { Node } from './Node.js';
4
- import { Range } from './Range.js';
5
-
6
- const Chomp = {
7
- CLIP: 'CLIP',
8
- KEEP: 'KEEP',
9
- STRIP: 'STRIP'
10
- };
11
- class BlockValue extends Node {
12
- constructor(type, props) {
13
- super(type, props);
14
- this.blockIndent = null;
15
- this.chomping = Chomp.CLIP;
16
- this.header = null;
17
- }
18
-
19
- get includesTrailingLines() {
20
- return this.chomping === Chomp.KEEP;
21
- }
22
-
23
- get strValue() {
24
- if (!this.valueRange || !this.context) return null;
25
- let {
26
- start,
27
- end
28
- } = this.valueRange;
29
- const {
30
- indent,
31
- src
32
- } = this.context;
33
- if (this.valueRange.isEmpty()) return '';
34
- let lastNewLine = null;
35
- let ch = src[end - 1];
36
-
37
- while (ch === '\n' || ch === '\t' || ch === ' ') {
38
- end -= 1;
39
-
40
- if (end <= start) {
41
- if (this.chomping === Chomp.KEEP) break;else return ''; // probably never happens
42
- }
43
-
44
- if (ch === '\n') lastNewLine = end;
45
- ch = src[end - 1];
46
- }
47
-
48
- let keepStart = end + 1;
49
-
50
- if (lastNewLine) {
51
- if (this.chomping === Chomp.KEEP) {
52
- keepStart = lastNewLine;
53
- end = this.valueRange.end;
54
- } else {
55
- end = lastNewLine;
56
- }
57
- }
58
-
59
- const bi = indent + this.blockIndent;
60
- const folded = this.type === Type.BLOCK_FOLDED;
61
- let atStart = true;
62
- let str = '';
63
- let sep = '';
64
- let prevMoreIndented = false;
65
-
66
- for (let i = start; i < end; ++i) {
67
- for (let j = 0; j < bi; ++j) {
68
- if (src[i] !== ' ') break;
69
- i += 1;
70
- }
71
-
72
- const ch = src[i];
73
-
74
- if (ch === '\n') {
75
- if (sep === '\n') str += '\n';else sep = '\n';
76
- } else {
77
- const lineEnd = Node.endOfLine(src, i);
78
- const line = src.slice(i, lineEnd);
79
- i = lineEnd;
80
-
81
- if (folded && (ch === ' ' || ch === '\t') && i < keepStart) {
82
- if (sep === ' ') sep = '\n';else if (!prevMoreIndented && !atStart && sep === '\n') sep = '\n\n';
83
- str += sep + line; //+ ((lineEnd < end && src[lineEnd]) || '')
84
-
85
- sep = lineEnd < end && src[lineEnd] || '';
86
- prevMoreIndented = true;
87
- } else {
88
- str += sep + line;
89
- sep = folded && i < keepStart ? ' ' : '\n';
90
- prevMoreIndented = false;
91
- }
92
-
93
- if (atStart && line !== '') atStart = false;
94
- }
95
- }
96
-
97
- return this.chomping === Chomp.STRIP ? str : str + '\n';
98
- }
99
-
100
- parseBlockHeader(start) {
101
- const {
102
- src
103
- } = this.context;
104
- let offset = start + 1;
105
- let bi = '';
106
-
107
- while (true) {
108
- const ch = src[offset];
109
-
110
- switch (ch) {
111
- case '-':
112
- this.chomping = Chomp.STRIP;
113
- break;
114
-
115
- case '+':
116
- this.chomping = Chomp.KEEP;
117
- break;
118
-
119
- case '0':
120
- case '1':
121
- case '2':
122
- case '3':
123
- case '4':
124
- case '5':
125
- case '6':
126
- case '7':
127
- case '8':
128
- case '9':
129
- bi += ch;
130
- break;
131
-
132
- default:
133
- this.blockIndent = Number(bi) || null;
134
- this.header = new Range(start, offset);
135
- return offset;
136
- }
137
-
138
- offset += 1;
139
- }
140
- }
141
-
142
- parseBlockValue(start) {
143
- const {
144
- indent,
145
- src
146
- } = this.context;
147
- const explicit = !!this.blockIndent;
148
- let offset = start;
149
- let valueEnd = start;
150
- let minBlockIndent = 1;
151
-
152
- for (let ch = src[offset]; ch === '\n'; ch = src[offset]) {
153
- offset += 1;
154
- if (Node.atDocumentBoundary(src, offset)) break;
155
- const end = Node.endOfBlockIndent(src, indent, offset); // should not include tab?
156
-
157
- if (end === null) break;
158
- const ch = src[end];
159
- const lineIndent = end - (offset + indent);
160
-
161
- if (!this.blockIndent) {
162
- // no explicit block indent, none yet detected
163
- if (src[end] !== '\n') {
164
- // first line with non-whitespace content
165
- if (lineIndent < minBlockIndent) {
166
- const msg = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';
167
- this.error = new YAMLSemanticError(this, msg);
168
- }
169
-
170
- this.blockIndent = lineIndent;
171
- } else if (lineIndent > minBlockIndent) {
172
- // empty line with more whitespace
173
- minBlockIndent = lineIndent;
174
- }
175
- } else if (ch && ch !== '\n' && lineIndent < this.blockIndent) {
176
- if (src[end] === '#') break;
177
-
178
- if (!this.error) {
179
- const src = explicit ? 'explicit indentation indicator' : 'first line';
180
- const msg = "Block scalars must not be less indented than their ".concat(src);
181
- this.error = new YAMLSemanticError(this, msg);
182
- }
183
- }
184
-
185
- if (src[end] === '\n') {
186
- offset = end;
187
- } else {
188
- offset = valueEnd = Node.endOfLine(src, end);
189
- }
190
- }
191
-
192
- if (this.chomping !== Chomp.KEEP) {
193
- offset = src[valueEnd] ? valueEnd + 1 : valueEnd;
194
- }
195
-
196
- this.valueRange = new Range(start + 1, offset);
197
- return offset;
198
- }
199
- /**
200
- * Parses a block value from the source
201
- *
202
- * Accepted forms are:
203
- * ```
204
- * BS
205
- * block
206
- * lines
207
- *
208
- * BS #comment
209
- * block
210
- * lines
211
- * ```
212
- * where the block style BS matches the regexp `[|>][-+1-9]*` and block lines
213
- * are empty or have an indent level greater than `indent`.
214
- *
215
- * @param {ParseContext} context
216
- * @param {number} start - Index of first character
217
- * @returns {number} - Index of the character after this block
218
- */
219
-
220
-
221
- parse(context, start) {
222
- this.context = context;
223
- const {
224
- src
225
- } = context;
226
- let offset = this.parseBlockHeader(start);
227
- offset = Node.endOfWhiteSpace(src, offset);
228
- offset = this.parseComment(offset);
229
- offset = this.parseBlockValue(offset);
230
- return offset;
231
- }
232
-
233
- setOrigRanges(cr, offset) {
234
- offset = super.setOrigRanges(cr, offset);
235
- return this.header ? this.header.setOrigRange(cr, offset) : offset;
236
- }
237
-
238
- }
239
-
240
- export { BlockValue, Chomp };
@@ -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 };