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
@@ -0,0 +1,217 @@
1
+ import { Scalar } from '../nodes/Scalar.js';
2
+ import { resolveEnd } from './resolve-end.js';
3
+
4
+ function resolveFlowScalar(scalar, strict, onError) {
5
+ const { offset, type, source, end } = scalar;
6
+ let _type;
7
+ let value;
8
+ const _onError = (rel, code, msg) => onError(offset + rel, code, msg);
9
+ switch (type) {
10
+ case 'scalar':
11
+ _type = Scalar.PLAIN;
12
+ value = plainValue(source, _onError);
13
+ break;
14
+ case 'single-quoted-scalar':
15
+ _type = Scalar.QUOTE_SINGLE;
16
+ value = singleQuotedValue(source, _onError);
17
+ break;
18
+ case 'double-quoted-scalar':
19
+ _type = Scalar.QUOTE_DOUBLE;
20
+ value = doubleQuotedValue(source, _onError);
21
+ break;
22
+ /* istanbul ignore next should not happen */
23
+ default:
24
+ onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);
25
+ return {
26
+ value: '',
27
+ type: null,
28
+ comment: '',
29
+ range: [offset, offset + source.length, offset + source.length]
30
+ };
31
+ }
32
+ const valueEnd = offset + source.length;
33
+ const re = resolveEnd(end, valueEnd, strict, onError);
34
+ return {
35
+ value,
36
+ type: _type,
37
+ comment: re.comment,
38
+ range: [offset, valueEnd, re.offset]
39
+ };
40
+ }
41
+ function plainValue(source, onError) {
42
+ let badChar = '';
43
+ switch (source[0]) {
44
+ /* istanbul ignore next should not happen */
45
+ case '\t':
46
+ badChar = 'a tab character';
47
+ break;
48
+ case ',':
49
+ badChar = 'flow indicator character ,';
50
+ break;
51
+ case '%':
52
+ badChar = 'directive indicator character %';
53
+ break;
54
+ case '|':
55
+ case '>': {
56
+ badChar = `block scalar indicator ${source[0]}`;
57
+ break;
58
+ }
59
+ case '@':
60
+ case '`': {
61
+ badChar = `reserved character ${source[0]}`;
62
+ break;
63
+ }
64
+ }
65
+ if (badChar)
66
+ onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);
67
+ return foldLines(source);
68
+ }
69
+ function singleQuotedValue(source, onError) {
70
+ if (source[source.length - 1] !== "'" || source.length === 1)
71
+ onError(source.length, 'MISSING_CHAR', "Missing closing 'quote");
72
+ return foldLines(source.slice(1, -1)).replace(/''/g, "'");
73
+ }
74
+ function foldLines(source) {
75
+ /**
76
+ * The negative lookbehind here and in the `re` RegExp is to
77
+ * prevent causing a polynomial search time in certain cases.
78
+ *
79
+ * The try-catch is for Safari, which doesn't support this yet:
80
+ * https://caniuse.com/js-regexp-lookbehind
81
+ */
82
+ let first, line;
83
+ try {
84
+ first = new RegExp('(.*?)(?<![ \t])[ \t]*\r?\n', 'sy');
85
+ line = new RegExp('[ \t]*(.*?)(?:(?<![ \t])[ \t]*)?\r?\n', 'sy');
86
+ }
87
+ catch (_) {
88
+ first = /(.*?)[ \t]*\r?\n/sy;
89
+ line = /[ \t]*(.*?)[ \t]*\r?\n/sy;
90
+ }
91
+ let match = first.exec(source);
92
+ if (!match)
93
+ return source;
94
+ let res = match[1];
95
+ let sep = ' ';
96
+ let pos = first.lastIndex;
97
+ line.lastIndex = pos;
98
+ while ((match = line.exec(source))) {
99
+ if (match[1] === '') {
100
+ if (sep === '\n')
101
+ res += sep;
102
+ else
103
+ sep = '\n';
104
+ }
105
+ else {
106
+ res += sep + match[1];
107
+ sep = ' ';
108
+ }
109
+ pos = line.lastIndex;
110
+ }
111
+ const last = /[ \t]*(.*)/sy;
112
+ last.lastIndex = pos;
113
+ match = last.exec(source);
114
+ return res + sep + ((match && match[1]) || '');
115
+ }
116
+ function doubleQuotedValue(source, onError) {
117
+ let res = '';
118
+ for (let i = 1; i < source.length - 1; ++i) {
119
+ const ch = source[i];
120
+ if (ch === '\r' && source[i + 1] === '\n')
121
+ continue;
122
+ if (ch === '\n') {
123
+ const { fold, offset } = foldNewline(source, i);
124
+ res += fold;
125
+ i = offset;
126
+ }
127
+ else if (ch === '\\') {
128
+ let next = source[++i];
129
+ const cc = escapeCodes[next];
130
+ if (cc)
131
+ res += cc;
132
+ else if (next === '\n') {
133
+ // skip escaped newlines, but still trim the following line
134
+ next = source[i + 1];
135
+ while (next === ' ' || next === '\t')
136
+ next = source[++i + 1];
137
+ }
138
+ else if (next === 'x' || next === 'u' || next === 'U') {
139
+ const length = { x: 2, u: 4, U: 8 }[next];
140
+ res += parseCharCode(source, i + 1, length, onError);
141
+ i += length;
142
+ }
143
+ else {
144
+ const raw = source.substr(i - 1, 2);
145
+ onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);
146
+ res += raw;
147
+ }
148
+ }
149
+ else if (ch === ' ' || ch === '\t') {
150
+ // trim trailing whitespace
151
+ const wsStart = i;
152
+ let next = source[i + 1];
153
+ while (next === ' ' || next === '\t')
154
+ next = source[++i + 1];
155
+ if (next !== '\n')
156
+ res += i > wsStart ? source.slice(wsStart, i + 1) : ch;
157
+ }
158
+ else {
159
+ res += ch;
160
+ }
161
+ }
162
+ if (source[source.length - 1] !== '"' || source.length === 1)
163
+ onError(source.length, 'MISSING_CHAR', 'Missing closing "quote');
164
+ return res;
165
+ }
166
+ /**
167
+ * Fold a single newline into a space, multiple newlines to N - 1 newlines.
168
+ * Presumes `source[offset] === '\n'`
169
+ */
170
+ function foldNewline(source, offset) {
171
+ let fold = '';
172
+ let ch = source[offset + 1];
173
+ while (ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r') {
174
+ if (ch === '\r' && source[offset + 2] !== '\n')
175
+ break;
176
+ if (ch === '\n')
177
+ fold += '\n';
178
+ offset += 1;
179
+ ch = source[offset + 1];
180
+ }
181
+ if (!fold)
182
+ fold = ' ';
183
+ return { fold, offset };
184
+ }
185
+ const escapeCodes = {
186
+ '0': '\0',
187
+ a: '\x07',
188
+ b: '\b',
189
+ e: '\x1b',
190
+ f: '\f',
191
+ n: '\n',
192
+ r: '\r',
193
+ t: '\t',
194
+ v: '\v',
195
+ N: '\u0085',
196
+ _: '\u00a0',
197
+ L: '\u2028',
198
+ P: '\u2029',
199
+ ' ': ' ',
200
+ '"': '"',
201
+ '/': '/',
202
+ '\\': '\\',
203
+ '\t': '\t'
204
+ };
205
+ function parseCharCode(source, offset, length, onError) {
206
+ const cc = source.substr(offset, length);
207
+ const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);
208
+ const code = ok ? parseInt(cc, 16) : NaN;
209
+ if (isNaN(code)) {
210
+ const raw = source.substr(offset - 2, length + 2);
211
+ onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);
212
+ return raw;
213
+ }
214
+ return String.fromCodePoint(code);
215
+ }
216
+
217
+ export { resolveFlowScalar };
@@ -0,0 +1,126 @@
1
+ function resolveProps(tokens, { flow, indicator, next, offset, onError, startOnNewline }) {
2
+ let spaceBefore = false;
3
+ let atNewline = startOnNewline;
4
+ let hasSpace = startOnNewline;
5
+ let comment = '';
6
+ let commentSep = '';
7
+ let hasNewline = false;
8
+ let reqSpace = false;
9
+ let anchor = null;
10
+ let tag = null;
11
+ let comma = null;
12
+ let found = null;
13
+ let start = null;
14
+ for (const token of tokens) {
15
+ if (reqSpace) {
16
+ if (token.type !== 'space' &&
17
+ token.type !== 'newline' &&
18
+ token.type !== 'comma')
19
+ onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');
20
+ reqSpace = false;
21
+ }
22
+ switch (token.type) {
23
+ case 'space':
24
+ // At the doc level, tabs at line start may be parsed
25
+ // as leading white space rather than indentation.
26
+ // In a flow collection, only the parser handles indent.
27
+ if (!flow &&
28
+ atNewline &&
29
+ indicator !== 'doc-start' &&
30
+ token.source[0] === '\t')
31
+ onError(token, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');
32
+ hasSpace = true;
33
+ break;
34
+ case 'comment': {
35
+ if (!hasSpace)
36
+ onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');
37
+ const cb = token.source.substring(1) || ' ';
38
+ if (!comment)
39
+ comment = cb;
40
+ else
41
+ comment += commentSep + cb;
42
+ commentSep = '';
43
+ atNewline = false;
44
+ break;
45
+ }
46
+ case 'newline':
47
+ if (atNewline) {
48
+ if (comment)
49
+ comment += token.source;
50
+ else
51
+ spaceBefore = true;
52
+ }
53
+ else
54
+ commentSep += token.source;
55
+ atNewline = true;
56
+ hasNewline = true;
57
+ hasSpace = true;
58
+ break;
59
+ case 'anchor':
60
+ if (anchor)
61
+ onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');
62
+ anchor = token;
63
+ if (start === null)
64
+ start = token.offset;
65
+ atNewline = false;
66
+ hasSpace = false;
67
+ reqSpace = true;
68
+ break;
69
+ case 'tag': {
70
+ if (tag)
71
+ onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');
72
+ tag = token;
73
+ if (start === null)
74
+ start = token.offset;
75
+ atNewline = false;
76
+ hasSpace = false;
77
+ reqSpace = true;
78
+ break;
79
+ }
80
+ case indicator:
81
+ // Could here handle preceding comments differently
82
+ if (anchor || tag)
83
+ onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);
84
+ found = token;
85
+ atNewline = false;
86
+ hasSpace = false;
87
+ break;
88
+ case 'comma':
89
+ if (flow) {
90
+ if (comma)
91
+ onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);
92
+ comma = token;
93
+ atNewline = false;
94
+ hasSpace = false;
95
+ break;
96
+ }
97
+ // else fallthrough
98
+ default:
99
+ onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);
100
+ atNewline = false;
101
+ hasSpace = false;
102
+ }
103
+ }
104
+ const last = tokens[tokens.length - 1];
105
+ const end = last ? last.offset + last.source.length : offset;
106
+ if (reqSpace &&
107
+ next &&
108
+ next.type !== 'space' &&
109
+ next.type !== 'newline' &&
110
+ next.type !== 'comma' &&
111
+ (next.type !== 'scalar' || next.source !== ''))
112
+ onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');
113
+ return {
114
+ comma,
115
+ found,
116
+ spaceBefore,
117
+ comment,
118
+ hasNewline,
119
+ anchor,
120
+ tag,
121
+ end,
122
+ start: start !== null && start !== void 0 ? start : end
123
+ };
124
+ }
125
+
126
+ export { resolveProps };
@@ -0,0 +1,34 @@
1
+ function containsNewline(key) {
2
+ if (!key)
3
+ return null;
4
+ switch (key.type) {
5
+ case 'alias':
6
+ case 'scalar':
7
+ case 'double-quoted-scalar':
8
+ case 'single-quoted-scalar':
9
+ if (key.source.includes('\n'))
10
+ return true;
11
+ if (key.end)
12
+ for (const st of key.end)
13
+ if (st.type === 'newline')
14
+ return true;
15
+ return false;
16
+ case 'flow-collection':
17
+ for (const it of key.items) {
18
+ for (const st of it.start)
19
+ if (st.type === 'newline')
20
+ return true;
21
+ if (it.sep)
22
+ for (const st of it.sep)
23
+ if (st.type === 'newline')
24
+ return true;
25
+ if (containsNewline(it.key) || containsNewline(it.value))
26
+ return true;
27
+ }
28
+ return false;
29
+ default:
30
+ return true;
31
+ }
32
+ }
33
+
34
+ export { containsNewline };
@@ -0,0 +1,27 @@
1
+ function emptyScalarPosition(offset, before, pos) {
2
+ if (before) {
3
+ if (pos === null)
4
+ pos = before.length;
5
+ for (let i = pos - 1; i >= 0; --i) {
6
+ let st = before[i];
7
+ switch (st.type) {
8
+ case 'space':
9
+ case 'comment':
10
+ case 'newline':
11
+ offset -= st.source.length;
12
+ continue;
13
+ }
14
+ // Technically, an empty scalar is immediately after the last non-empty
15
+ // node, but it's more useful to place it after any whitespace.
16
+ st = before[++i];
17
+ while ((st === null || st === void 0 ? void 0 : st.type) === 'space') {
18
+ offset += st.source.length;
19
+ st = before[++i];
20
+ }
21
+ break;
22
+ }
23
+ }
24
+ return offset;
25
+ }
26
+
27
+ export { emptyScalarPosition };
@@ -0,0 +1,17 @@
1
+ import { isScalar } from '../nodes/Node.js';
2
+
3
+ function mapIncludes(ctx, items, search) {
4
+ const { uniqueKeys } = ctx.options;
5
+ if (uniqueKeys === false)
6
+ return false;
7
+ const isEqual = typeof uniqueKeys === 'function'
8
+ ? uniqueKeys
9
+ : (a, b) => a === b ||
10
+ (isScalar(a) &&
11
+ isScalar(b) &&
12
+ a.value === b.value &&
13
+ !(a.value === '<<' && ctx.schema.merge));
14
+ return items.some(pair => isEqual(pair.key, search));
15
+ }
16
+
17
+ export { mapIncludes };