dimcode-linux-arm64 0.0.77-beta.0 → 0.0.78-beta.0

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 (247) hide show
  1. package/bin/dimcode +0 -0
  2. package/bin/node_modules/skills/bin/cli.mjs +14 -0
  3. package/bin/node_modules/skills/dist/_chunks/libs/@clack/core.mjs +767 -0
  4. package/bin/node_modules/skills/dist/_chunks/libs/@clack/prompts.mjs +334 -0
  5. package/bin/node_modules/skills/dist/_chunks/libs/@kwsites/file-exists.mjs +562 -0
  6. package/bin/node_modules/skills/dist/_chunks/libs/@kwsites/promise-deferred.mjs +37 -0
  7. package/bin/node_modules/skills/dist/_chunks/libs/@vercel/detect-agent.mjs +138 -0
  8. package/bin/node_modules/skills/dist/_chunks/libs/simple-git.mjs +3584 -0
  9. package/bin/node_modules/skills/dist/_chunks/libs/xdg-basedir.mjs +14 -0
  10. package/bin/node_modules/skills/dist/_chunks/rolldown-runtime.mjs +24 -0
  11. package/bin/node_modules/skills/dist/cli.d.mts +1 -0
  12. package/bin/node_modules/skills/dist/cli.mjs +5484 -0
  13. package/bin/node_modules/skills/package.json +127 -0
  14. package/bin/node_modules/yaml/LICENSE +13 -0
  15. package/bin/node_modules/yaml/README.md +172 -0
  16. package/bin/node_modules/yaml/bin.mjs +11 -0
  17. package/bin/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
  18. package/bin/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
  19. package/bin/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
  20. package/bin/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
  21. package/bin/node_modules/yaml/browser/dist/compose/composer.js +219 -0
  22. package/bin/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
  23. package/bin/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
  24. package/bin/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
  25. package/bin/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
  26. package/bin/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
  27. package/bin/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
  28. package/bin/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
  29. package/bin/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
  30. package/bin/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
  31. package/bin/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
  32. package/bin/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
  33. package/bin/node_modules/yaml/browser/dist/doc/Document.js +335 -0
  34. package/bin/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
  35. package/bin/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
  36. package/bin/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
  37. package/bin/node_modules/yaml/browser/dist/doc/directives.js +176 -0
  38. package/bin/node_modules/yaml/browser/dist/errors.js +57 -0
  39. package/bin/node_modules/yaml/browser/dist/index.js +17 -0
  40. package/bin/node_modules/yaml/browser/dist/log.js +11 -0
  41. package/bin/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
  42. package/bin/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
  43. package/bin/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
  44. package/bin/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
  45. package/bin/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
  46. package/bin/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
  47. package/bin/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
  48. package/bin/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
  49. package/bin/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
  50. package/bin/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
  51. package/bin/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
  52. package/bin/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
  53. package/bin/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
  54. package/bin/node_modules/yaml/browser/dist/parse/cst.js +98 -0
  55. package/bin/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
  56. package/bin/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
  57. package/bin/node_modules/yaml/browser/dist/parse/parser.js +975 -0
  58. package/bin/node_modules/yaml/browser/dist/public-api.js +102 -0
  59. package/bin/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
  60. package/bin/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
  61. package/bin/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
  62. package/bin/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
  63. package/bin/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
  64. package/bin/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
  65. package/bin/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
  66. package/bin/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
  67. package/bin/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
  68. package/bin/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
  69. package/bin/node_modules/yaml/browser/dist/schema/tags.js +96 -0
  70. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
  71. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
  72. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
  73. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
  74. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
  75. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
  76. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
  77. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
  78. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
  79. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  80. package/bin/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
  81. package/bin/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
  82. package/bin/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
  83. package/bin/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
  84. package/bin/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
  85. package/bin/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
  86. package/bin/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
  87. package/bin/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
  88. package/bin/node_modules/yaml/browser/dist/util.js +11 -0
  89. package/bin/node_modules/yaml/browser/dist/visit.js +233 -0
  90. package/bin/node_modules/yaml/browser/index.js +5 -0
  91. package/bin/node_modules/yaml/browser/package.json +3 -0
  92. package/bin/node_modules/yaml/dist/cli.d.ts +8 -0
  93. package/bin/node_modules/yaml/dist/cli.mjs +201 -0
  94. package/bin/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
  95. package/bin/node_modules/yaml/dist/compose/compose-collection.js +90 -0
  96. package/bin/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
  97. package/bin/node_modules/yaml/dist/compose/compose-doc.js +45 -0
  98. package/bin/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
  99. package/bin/node_modules/yaml/dist/compose/compose-node.js +112 -0
  100. package/bin/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
  101. package/bin/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
  102. package/bin/node_modules/yaml/dist/compose/composer.d.ts +63 -0
  103. package/bin/node_modules/yaml/dist/compose/composer.js +224 -0
  104. package/bin/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
  105. package/bin/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
  106. package/bin/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
  107. package/bin/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
  108. package/bin/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
  109. package/bin/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
  110. package/bin/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
  111. package/bin/node_modules/yaml/dist/compose/resolve-end.js +39 -0
  112. package/bin/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
  113. package/bin/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
  114. package/bin/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
  115. package/bin/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
  116. package/bin/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
  117. package/bin/node_modules/yaml/dist/compose/resolve-props.js +148 -0
  118. package/bin/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
  119. package/bin/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
  120. package/bin/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
  121. package/bin/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
  122. package/bin/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
  123. package/bin/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
  124. package/bin/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
  125. package/bin/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
  126. package/bin/node_modules/yaml/dist/doc/Document.d.ts +141 -0
  127. package/bin/node_modules/yaml/dist/doc/Document.js +337 -0
  128. package/bin/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
  129. package/bin/node_modules/yaml/dist/doc/anchors.js +76 -0
  130. package/bin/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
  131. package/bin/node_modules/yaml/dist/doc/applyReviver.js +57 -0
  132. package/bin/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
  133. package/bin/node_modules/yaml/dist/doc/createNode.js +90 -0
  134. package/bin/node_modules/yaml/dist/doc/directives.d.ts +49 -0
  135. package/bin/node_modules/yaml/dist/doc/directives.js +178 -0
  136. package/bin/node_modules/yaml/dist/errors.d.ts +21 -0
  137. package/bin/node_modules/yaml/dist/errors.js +62 -0
  138. package/bin/node_modules/yaml/dist/index.d.ts +25 -0
  139. package/bin/node_modules/yaml/dist/index.js +50 -0
  140. package/bin/node_modules/yaml/dist/log.d.ts +3 -0
  141. package/bin/node_modules/yaml/dist/log.js +19 -0
  142. package/bin/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
  143. package/bin/node_modules/yaml/dist/nodes/Alias.js +118 -0
  144. package/bin/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
  145. package/bin/node_modules/yaml/dist/nodes/Collection.js +151 -0
  146. package/bin/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
  147. package/bin/node_modules/yaml/dist/nodes/Node.js +40 -0
  148. package/bin/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
  149. package/bin/node_modules/yaml/dist/nodes/Pair.js +39 -0
  150. package/bin/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
  151. package/bin/node_modules/yaml/dist/nodes/Scalar.js +27 -0
  152. package/bin/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
  153. package/bin/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
  154. package/bin/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
  155. package/bin/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
  156. package/bin/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
  157. package/bin/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
  158. package/bin/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
  159. package/bin/node_modules/yaml/dist/nodes/identity.js +53 -0
  160. package/bin/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
  161. package/bin/node_modules/yaml/dist/nodes/toJS.js +39 -0
  162. package/bin/node_modules/yaml/dist/options.d.ts +350 -0
  163. package/bin/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
  164. package/bin/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
  165. package/bin/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
  166. package/bin/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
  167. package/bin/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
  168. package/bin/node_modules/yaml/dist/parse/cst-visit.js +99 -0
  169. package/bin/node_modules/yaml/dist/parse/cst.d.ts +109 -0
  170. package/bin/node_modules/yaml/dist/parse/cst.js +112 -0
  171. package/bin/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
  172. package/bin/node_modules/yaml/dist/parse/lexer.js +723 -0
  173. package/bin/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
  174. package/bin/node_modules/yaml/dist/parse/line-counter.js +41 -0
  175. package/bin/node_modules/yaml/dist/parse/parser.d.ts +84 -0
  176. package/bin/node_modules/yaml/dist/parse/parser.js +980 -0
  177. package/bin/node_modules/yaml/dist/public-api.d.ts +44 -0
  178. package/bin/node_modules/yaml/dist/public-api.js +107 -0
  179. package/bin/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
  180. package/bin/node_modules/yaml/dist/schema/Schema.js +39 -0
  181. package/bin/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
  182. package/bin/node_modules/yaml/dist/schema/common/map.js +19 -0
  183. package/bin/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
  184. package/bin/node_modules/yaml/dist/schema/common/null.js +17 -0
  185. package/bin/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
  186. package/bin/node_modules/yaml/dist/schema/common/seq.js +19 -0
  187. package/bin/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
  188. package/bin/node_modules/yaml/dist/schema/common/string.js +16 -0
  189. package/bin/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
  190. package/bin/node_modules/yaml/dist/schema/core/bool.js +21 -0
  191. package/bin/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
  192. package/bin/node_modules/yaml/dist/schema/core/float.js +47 -0
  193. package/bin/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
  194. package/bin/node_modules/yaml/dist/schema/core/int.js +42 -0
  195. package/bin/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
  196. package/bin/node_modules/yaml/dist/schema/core/schema.js +25 -0
  197. package/bin/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
  198. package/bin/node_modules/yaml/dist/schema/json/schema.js +64 -0
  199. package/bin/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
  200. package/bin/node_modules/yaml/dist/schema/tags.d.ts +48 -0
  201. package/bin/node_modules/yaml/dist/schema/tags.js +99 -0
  202. package/bin/node_modules/yaml/dist/schema/types.d.ts +92 -0
  203. package/bin/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
  204. package/bin/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
  205. package/bin/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
  206. package/bin/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
  207. package/bin/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
  208. package/bin/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
  209. package/bin/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
  210. package/bin/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
  211. package/bin/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
  212. package/bin/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
  213. package/bin/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
  214. package/bin/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
  215. package/bin/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  216. package/bin/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
  217. package/bin/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
  218. package/bin/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
  219. package/bin/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
  220. package/bin/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
  221. package/bin/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  222. package/bin/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
  223. package/bin/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
  224. package/bin/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
  225. package/bin/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
  226. package/bin/node_modules/yaml/dist/stringify/stringify.js +132 -0
  227. package/bin/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
  228. package/bin/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
  229. package/bin/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
  230. package/bin/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
  231. package/bin/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
  232. package/bin/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
  233. package/bin/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
  234. package/bin/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
  235. package/bin/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
  236. package/bin/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
  237. package/bin/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
  238. package/bin/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
  239. package/bin/node_modules/yaml/dist/test-events.d.ts +4 -0
  240. package/bin/node_modules/yaml/dist/test-events.js +134 -0
  241. package/bin/node_modules/yaml/dist/util.d.ts +16 -0
  242. package/bin/node_modules/yaml/dist/util.js +28 -0
  243. package/bin/node_modules/yaml/dist/visit.d.ts +102 -0
  244. package/bin/node_modules/yaml/dist/visit.js +236 -0
  245. package/bin/node_modules/yaml/package.json +97 -0
  246. package/bin/node_modules/yaml/util.js +2 -0
  247. package/package.json +1 -1
@@ -0,0 +1,980 @@
1
+ 'use strict';
2
+
3
+ var node_process = require('process');
4
+ var cst = require('./cst.js');
5
+ var lexer = require('./lexer.js');
6
+
7
+ function includesToken(list, type) {
8
+ for (let i = 0; i < list.length; ++i)
9
+ if (list[i].type === type)
10
+ return true;
11
+ return false;
12
+ }
13
+ function findNonEmptyIndex(list) {
14
+ for (let i = 0; i < list.length; ++i) {
15
+ switch (list[i].type) {
16
+ case 'space':
17
+ case 'comment':
18
+ case 'newline':
19
+ break;
20
+ default:
21
+ return i;
22
+ }
23
+ }
24
+ return -1;
25
+ }
26
+ function isFlowToken(token) {
27
+ switch (token?.type) {
28
+ case 'alias':
29
+ case 'scalar':
30
+ case 'single-quoted-scalar':
31
+ case 'double-quoted-scalar':
32
+ case 'flow-collection':
33
+ return true;
34
+ default:
35
+ return false;
36
+ }
37
+ }
38
+ function getPrevProps(parent) {
39
+ switch (parent.type) {
40
+ case 'document':
41
+ return parent.start;
42
+ case 'block-map': {
43
+ const it = parent.items[parent.items.length - 1];
44
+ return it.sep ?? it.start;
45
+ }
46
+ case 'block-seq':
47
+ return parent.items[parent.items.length - 1].start;
48
+ /* istanbul ignore next should not happen */
49
+ default:
50
+ return [];
51
+ }
52
+ }
53
+ /** Note: May modify input array */
54
+ function getFirstKeyStartProps(prev) {
55
+ if (prev.length === 0)
56
+ return [];
57
+ let i = prev.length;
58
+ loop: while (--i >= 0) {
59
+ switch (prev[i].type) {
60
+ case 'doc-start':
61
+ case 'explicit-key-ind':
62
+ case 'map-value-ind':
63
+ case 'seq-item-ind':
64
+ case 'newline':
65
+ break loop;
66
+ }
67
+ }
68
+ while (prev[++i]?.type === 'space') {
69
+ /* loop */
70
+ }
71
+ return prev.splice(i, prev.length);
72
+ }
73
+ function arrayPushArray(target, source) {
74
+ // May exhaust call stack with large `source` array
75
+ if (source.length < 1e5)
76
+ Array.prototype.push.apply(target, source);
77
+ else
78
+ for (let i = 0; i < source.length; ++i)
79
+ target.push(source[i]);
80
+ }
81
+ function fixFlowSeqItems(fc) {
82
+ if (fc.start.type === 'flow-seq-start') {
83
+ for (const it of fc.items) {
84
+ if (it.sep &&
85
+ !it.value &&
86
+ !includesToken(it.start, 'explicit-key-ind') &&
87
+ !includesToken(it.sep, 'map-value-ind')) {
88
+ if (it.key)
89
+ it.value = it.key;
90
+ delete it.key;
91
+ if (isFlowToken(it.value)) {
92
+ if (it.value.end)
93
+ arrayPushArray(it.value.end, it.sep);
94
+ else
95
+ it.value.end = it.sep;
96
+ }
97
+ else
98
+ arrayPushArray(it.start, it.sep);
99
+ delete it.sep;
100
+ }
101
+ }
102
+ }
103
+ }
104
+ /**
105
+ * A YAML concrete syntax tree (CST) parser
106
+ *
107
+ * ```ts
108
+ * const src: string = ...
109
+ * for (const token of new Parser().parse(src)) {
110
+ * // token: Token
111
+ * }
112
+ * ```
113
+ *
114
+ * To use the parser with a user-provided lexer:
115
+ *
116
+ * ```ts
117
+ * function* parse(source: string, lexer: Lexer) {
118
+ * const parser = new Parser()
119
+ * for (const lexeme of lexer.lex(source))
120
+ * yield* parser.next(lexeme)
121
+ * yield* parser.end()
122
+ * }
123
+ *
124
+ * const src: string = ...
125
+ * const lexer = new Lexer()
126
+ * for (const token of parse(src, lexer)) {
127
+ * // token: Token
128
+ * }
129
+ * ```
130
+ */
131
+ class Parser {
132
+ /**
133
+ * @param onNewLine - If defined, called separately with the start position of
134
+ * each new line (in `parse()`, including the start of input).
135
+ */
136
+ constructor(onNewLine) {
137
+ /** If true, space and sequence indicators count as indentation */
138
+ this.atNewLine = true;
139
+ /** If true, next token is a scalar value */
140
+ this.atScalar = false;
141
+ /** Current indentation level */
142
+ this.indent = 0;
143
+ /** Current offset since the start of parsing */
144
+ this.offset = 0;
145
+ /** On the same line with a block map key */
146
+ this.onKeyLine = false;
147
+ /** Top indicates the node that's currently being built */
148
+ this.stack = [];
149
+ /** The source of the current token, set in parse() */
150
+ this.source = '';
151
+ /** The type of the current token, set in parse() */
152
+ this.type = '';
153
+ // Must be defined after `next()`
154
+ this.lexer = new lexer.Lexer();
155
+ this.onNewLine = onNewLine;
156
+ }
157
+ /**
158
+ * Parse `source` as a YAML stream.
159
+ * If `incomplete`, a part of the last line may be left as a buffer for the next call.
160
+ *
161
+ * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.
162
+ *
163
+ * @returns A generator of tokens representing each directive, document, and other structure.
164
+ */
165
+ *parse(source, incomplete = false) {
166
+ if (this.onNewLine && this.offset === 0)
167
+ this.onNewLine(0);
168
+ for (const lexeme of this.lexer.lex(source, incomplete))
169
+ yield* this.next(lexeme);
170
+ if (!incomplete)
171
+ yield* this.end();
172
+ }
173
+ /**
174
+ * Advance the parser by the `source` of one lexical token.
175
+ */
176
+ *next(source) {
177
+ this.source = source;
178
+ if (node_process.env.LOG_TOKENS)
179
+ console.log('|', cst.prettyToken(source));
180
+ if (this.atScalar) {
181
+ this.atScalar = false;
182
+ yield* this.step();
183
+ this.offset += source.length;
184
+ return;
185
+ }
186
+ const type = cst.tokenType(source);
187
+ if (!type) {
188
+ const message = `Not a YAML token: ${source}`;
189
+ yield* this.pop({ type: 'error', offset: this.offset, message, source });
190
+ this.offset += source.length;
191
+ }
192
+ else if (type === 'scalar') {
193
+ this.atNewLine = false;
194
+ this.atScalar = true;
195
+ this.type = 'scalar';
196
+ }
197
+ else {
198
+ this.type = type;
199
+ yield* this.step();
200
+ switch (type) {
201
+ case 'newline':
202
+ this.atNewLine = true;
203
+ this.indent = 0;
204
+ if (this.onNewLine)
205
+ this.onNewLine(this.offset + source.length);
206
+ break;
207
+ case 'space':
208
+ if (this.atNewLine && source[0] === ' ')
209
+ this.indent += source.length;
210
+ break;
211
+ case 'explicit-key-ind':
212
+ case 'map-value-ind':
213
+ case 'seq-item-ind':
214
+ if (this.atNewLine)
215
+ this.indent += source.length;
216
+ break;
217
+ case 'doc-mode':
218
+ case 'flow-error-end':
219
+ return;
220
+ default:
221
+ this.atNewLine = false;
222
+ }
223
+ this.offset += source.length;
224
+ }
225
+ }
226
+ /** Call at end of input to push out any remaining constructions */
227
+ *end() {
228
+ while (this.stack.length > 0)
229
+ yield* this.pop();
230
+ }
231
+ get sourceToken() {
232
+ const st = {
233
+ type: this.type,
234
+ offset: this.offset,
235
+ indent: this.indent,
236
+ source: this.source
237
+ };
238
+ return st;
239
+ }
240
+ *step() {
241
+ const top = this.peek(1);
242
+ if (this.type === 'doc-end' && top?.type !== 'doc-end') {
243
+ while (this.stack.length > 0)
244
+ yield* this.pop();
245
+ this.stack.push({
246
+ type: 'doc-end',
247
+ offset: this.offset,
248
+ source: this.source
249
+ });
250
+ return;
251
+ }
252
+ if (!top)
253
+ return yield* this.stream();
254
+ switch (top.type) {
255
+ case 'document':
256
+ return yield* this.document(top);
257
+ case 'alias':
258
+ case 'scalar':
259
+ case 'single-quoted-scalar':
260
+ case 'double-quoted-scalar':
261
+ return yield* this.scalar(top);
262
+ case 'block-scalar':
263
+ return yield* this.blockScalar(top);
264
+ case 'block-map':
265
+ return yield* this.blockMap(top);
266
+ case 'block-seq':
267
+ return yield* this.blockSequence(top);
268
+ case 'flow-collection':
269
+ return yield* this.flowCollection(top);
270
+ case 'doc-end':
271
+ return yield* this.documentEnd(top);
272
+ }
273
+ /* istanbul ignore next should not happen */
274
+ yield* this.pop();
275
+ }
276
+ peek(n) {
277
+ return this.stack[this.stack.length - n];
278
+ }
279
+ *pop(error) {
280
+ const token = error ?? this.stack.pop();
281
+ /* istanbul ignore if should not happen */
282
+ if (!token) {
283
+ const message = 'Tried to pop an empty stack';
284
+ yield { type: 'error', offset: this.offset, source: '', message };
285
+ }
286
+ else if (this.stack.length === 0) {
287
+ yield token;
288
+ }
289
+ else {
290
+ const top = this.peek(1);
291
+ if (token.type === 'block-scalar') {
292
+ // Block scalars use their parent rather than header indent
293
+ token.indent = 'indent' in top ? top.indent : 0;
294
+ }
295
+ else if (token.type === 'flow-collection' && top.type === 'document') {
296
+ // Ignore all indent for top-level flow collections
297
+ token.indent = 0;
298
+ }
299
+ if (token.type === 'flow-collection')
300
+ fixFlowSeqItems(token);
301
+ switch (top.type) {
302
+ case 'document':
303
+ top.value = token;
304
+ break;
305
+ case 'block-scalar':
306
+ top.props.push(token); // error
307
+ break;
308
+ case 'block-map': {
309
+ const it = top.items[top.items.length - 1];
310
+ if (it.value) {
311
+ top.items.push({ start: [], key: token, sep: [] });
312
+ this.onKeyLine = true;
313
+ return;
314
+ }
315
+ else if (it.sep) {
316
+ it.value = token;
317
+ }
318
+ else {
319
+ Object.assign(it, { key: token, sep: [] });
320
+ this.onKeyLine = !it.explicitKey;
321
+ return;
322
+ }
323
+ break;
324
+ }
325
+ case 'block-seq': {
326
+ const it = top.items[top.items.length - 1];
327
+ if (it.value)
328
+ top.items.push({ start: [], value: token });
329
+ else
330
+ it.value = token;
331
+ break;
332
+ }
333
+ case 'flow-collection': {
334
+ const it = top.items[top.items.length - 1];
335
+ if (!it || it.value)
336
+ top.items.push({ start: [], key: token, sep: [] });
337
+ else if (it.sep)
338
+ it.value = token;
339
+ else
340
+ Object.assign(it, { key: token, sep: [] });
341
+ return;
342
+ }
343
+ /* istanbul ignore next should not happen */
344
+ default:
345
+ yield* this.pop();
346
+ yield* this.pop(token);
347
+ }
348
+ if ((top.type === 'document' ||
349
+ top.type === 'block-map' ||
350
+ top.type === 'block-seq') &&
351
+ (token.type === 'block-map' || token.type === 'block-seq')) {
352
+ const last = token.items[token.items.length - 1];
353
+ if (last &&
354
+ !last.sep &&
355
+ !last.value &&
356
+ last.start.length > 0 &&
357
+ findNonEmptyIndex(last.start) === -1 &&
358
+ (token.indent === 0 ||
359
+ last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {
360
+ if (top.type === 'document')
361
+ top.end = last.start;
362
+ else
363
+ top.items.push({ start: last.start });
364
+ token.items.splice(-1, 1);
365
+ }
366
+ }
367
+ }
368
+ }
369
+ *stream() {
370
+ switch (this.type) {
371
+ case 'directive-line':
372
+ yield { type: 'directive', offset: this.offset, source: this.source };
373
+ return;
374
+ case 'byte-order-mark':
375
+ case 'space':
376
+ case 'comment':
377
+ case 'newline':
378
+ yield this.sourceToken;
379
+ return;
380
+ case 'doc-mode':
381
+ case 'doc-start': {
382
+ const doc = {
383
+ type: 'document',
384
+ offset: this.offset,
385
+ start: []
386
+ };
387
+ if (this.type === 'doc-start')
388
+ doc.start.push(this.sourceToken);
389
+ this.stack.push(doc);
390
+ return;
391
+ }
392
+ }
393
+ yield {
394
+ type: 'error',
395
+ offset: this.offset,
396
+ message: `Unexpected ${this.type} token in YAML stream`,
397
+ source: this.source
398
+ };
399
+ }
400
+ *document(doc) {
401
+ if (doc.value)
402
+ return yield* this.lineEnd(doc);
403
+ switch (this.type) {
404
+ case 'doc-start': {
405
+ if (findNonEmptyIndex(doc.start) !== -1) {
406
+ yield* this.pop();
407
+ yield* this.step();
408
+ }
409
+ else
410
+ doc.start.push(this.sourceToken);
411
+ return;
412
+ }
413
+ case 'anchor':
414
+ case 'tag':
415
+ case 'space':
416
+ case 'comment':
417
+ case 'newline':
418
+ doc.start.push(this.sourceToken);
419
+ return;
420
+ }
421
+ const bv = this.startBlockValue(doc);
422
+ if (bv)
423
+ this.stack.push(bv);
424
+ else {
425
+ yield {
426
+ type: 'error',
427
+ offset: this.offset,
428
+ message: `Unexpected ${this.type} token in YAML document`,
429
+ source: this.source
430
+ };
431
+ }
432
+ }
433
+ *scalar(scalar) {
434
+ if (this.type === 'map-value-ind') {
435
+ const prev = getPrevProps(this.peek(2));
436
+ const start = getFirstKeyStartProps(prev);
437
+ let sep;
438
+ if (scalar.end) {
439
+ sep = scalar.end;
440
+ sep.push(this.sourceToken);
441
+ delete scalar.end;
442
+ }
443
+ else
444
+ sep = [this.sourceToken];
445
+ const map = {
446
+ type: 'block-map',
447
+ offset: scalar.offset,
448
+ indent: scalar.indent,
449
+ items: [{ start, key: scalar, sep }]
450
+ };
451
+ this.onKeyLine = true;
452
+ this.stack[this.stack.length - 1] = map;
453
+ }
454
+ else
455
+ yield* this.lineEnd(scalar);
456
+ }
457
+ *blockScalar(scalar) {
458
+ switch (this.type) {
459
+ case 'space':
460
+ case 'comment':
461
+ case 'newline':
462
+ scalar.props.push(this.sourceToken);
463
+ return;
464
+ case 'scalar':
465
+ scalar.source = this.source;
466
+ // block-scalar source includes trailing newline
467
+ this.atNewLine = true;
468
+ this.indent = 0;
469
+ if (this.onNewLine) {
470
+ let nl = this.source.indexOf('\n') + 1;
471
+ while (nl !== 0) {
472
+ this.onNewLine(this.offset + nl);
473
+ nl = this.source.indexOf('\n', nl) + 1;
474
+ }
475
+ }
476
+ yield* this.pop();
477
+ break;
478
+ /* istanbul ignore next should not happen */
479
+ default:
480
+ yield* this.pop();
481
+ yield* this.step();
482
+ }
483
+ }
484
+ *blockMap(map) {
485
+ const it = map.items[map.items.length - 1];
486
+ // it.sep is true-ish if pair already has key or : separator
487
+ switch (this.type) {
488
+ case 'newline':
489
+ this.onKeyLine = false;
490
+ if (it.value) {
491
+ const end = 'end' in it.value ? it.value.end : undefined;
492
+ const last = Array.isArray(end) ? end[end.length - 1] : undefined;
493
+ if (last?.type === 'comment')
494
+ end?.push(this.sourceToken);
495
+ else
496
+ map.items.push({ start: [this.sourceToken] });
497
+ }
498
+ else if (it.sep) {
499
+ it.sep.push(this.sourceToken);
500
+ }
501
+ else {
502
+ it.start.push(this.sourceToken);
503
+ }
504
+ return;
505
+ case 'space':
506
+ case 'comment':
507
+ if (it.value) {
508
+ map.items.push({ start: [this.sourceToken] });
509
+ }
510
+ else if (it.sep) {
511
+ it.sep.push(this.sourceToken);
512
+ }
513
+ else {
514
+ if (this.atIndentedComment(it.start, map.indent)) {
515
+ const prev = map.items[map.items.length - 2];
516
+ const end = prev?.value?.end;
517
+ if (Array.isArray(end)) {
518
+ arrayPushArray(end, it.start);
519
+ end.push(this.sourceToken);
520
+ map.items.pop();
521
+ return;
522
+ }
523
+ }
524
+ it.start.push(this.sourceToken);
525
+ }
526
+ return;
527
+ }
528
+ if (this.indent >= map.indent) {
529
+ const atMapIndent = !this.onKeyLine && this.indent === map.indent;
530
+ const atNextItem = atMapIndent &&
531
+ (it.sep || it.explicitKey) &&
532
+ this.type !== 'seq-item-ind';
533
+ // For empty nodes, assign newline-separated not indented empty tokens to following node
534
+ let start = [];
535
+ if (atNextItem && it.sep && !it.value) {
536
+ const nl = [];
537
+ for (let i = 0; i < it.sep.length; ++i) {
538
+ const st = it.sep[i];
539
+ switch (st.type) {
540
+ case 'newline':
541
+ nl.push(i);
542
+ break;
543
+ case 'space':
544
+ break;
545
+ case 'comment':
546
+ if (st.indent > map.indent)
547
+ nl.length = 0;
548
+ break;
549
+ default:
550
+ nl.length = 0;
551
+ }
552
+ }
553
+ if (nl.length >= 2)
554
+ start = it.sep.splice(nl[1]);
555
+ }
556
+ switch (this.type) {
557
+ case 'anchor':
558
+ case 'tag':
559
+ if (atNextItem || it.value) {
560
+ start.push(this.sourceToken);
561
+ map.items.push({ start });
562
+ this.onKeyLine = true;
563
+ }
564
+ else if (it.sep) {
565
+ it.sep.push(this.sourceToken);
566
+ }
567
+ else {
568
+ it.start.push(this.sourceToken);
569
+ }
570
+ return;
571
+ case 'explicit-key-ind':
572
+ if (!it.sep && !it.explicitKey) {
573
+ it.start.push(this.sourceToken);
574
+ it.explicitKey = true;
575
+ }
576
+ else if (atNextItem || it.value) {
577
+ start.push(this.sourceToken);
578
+ map.items.push({ start, explicitKey: true });
579
+ }
580
+ else {
581
+ this.stack.push({
582
+ type: 'block-map',
583
+ offset: this.offset,
584
+ indent: this.indent,
585
+ items: [{ start: [this.sourceToken], explicitKey: true }]
586
+ });
587
+ }
588
+ this.onKeyLine = true;
589
+ return;
590
+ case 'map-value-ind':
591
+ if (it.explicitKey) {
592
+ if (!it.sep) {
593
+ if (includesToken(it.start, 'newline')) {
594
+ Object.assign(it, { key: null, sep: [this.sourceToken] });
595
+ }
596
+ else {
597
+ const start = getFirstKeyStartProps(it.start);
598
+ this.stack.push({
599
+ type: 'block-map',
600
+ offset: this.offset,
601
+ indent: this.indent,
602
+ items: [{ start, key: null, sep: [this.sourceToken] }]
603
+ });
604
+ }
605
+ }
606
+ else if (it.value) {
607
+ map.items.push({ start: [], key: null, sep: [this.sourceToken] });
608
+ }
609
+ else if (includesToken(it.sep, 'map-value-ind')) {
610
+ this.stack.push({
611
+ type: 'block-map',
612
+ offset: this.offset,
613
+ indent: this.indent,
614
+ items: [{ start, key: null, sep: [this.sourceToken] }]
615
+ });
616
+ }
617
+ else if (isFlowToken(it.key) &&
618
+ !includesToken(it.sep, 'newline')) {
619
+ const start = getFirstKeyStartProps(it.start);
620
+ const key = it.key;
621
+ const sep = it.sep;
622
+ sep.push(this.sourceToken);
623
+ // @ts-expect-error type guard is wrong here
624
+ delete it.key;
625
+ // @ts-expect-error type guard is wrong here
626
+ delete it.sep;
627
+ this.stack.push({
628
+ type: 'block-map',
629
+ offset: this.offset,
630
+ indent: this.indent,
631
+ items: [{ start, key, sep }]
632
+ });
633
+ }
634
+ else if (start.length > 0) {
635
+ // Not actually at next item
636
+ it.sep = it.sep.concat(start, this.sourceToken);
637
+ }
638
+ else {
639
+ it.sep.push(this.sourceToken);
640
+ }
641
+ }
642
+ else {
643
+ if (!it.sep) {
644
+ Object.assign(it, { key: null, sep: [this.sourceToken] });
645
+ }
646
+ else if (it.value || atNextItem) {
647
+ map.items.push({ start, key: null, sep: [this.sourceToken] });
648
+ }
649
+ else if (includesToken(it.sep, 'map-value-ind')) {
650
+ this.stack.push({
651
+ type: 'block-map',
652
+ offset: this.offset,
653
+ indent: this.indent,
654
+ items: [{ start: [], key: null, sep: [this.sourceToken] }]
655
+ });
656
+ }
657
+ else {
658
+ it.sep.push(this.sourceToken);
659
+ }
660
+ }
661
+ this.onKeyLine = true;
662
+ return;
663
+ case 'alias':
664
+ case 'scalar':
665
+ case 'single-quoted-scalar':
666
+ case 'double-quoted-scalar': {
667
+ const fs = this.flowScalar(this.type);
668
+ if (atNextItem || it.value) {
669
+ map.items.push({ start, key: fs, sep: [] });
670
+ this.onKeyLine = true;
671
+ }
672
+ else if (it.sep) {
673
+ this.stack.push(fs);
674
+ }
675
+ else {
676
+ Object.assign(it, { key: fs, sep: [] });
677
+ this.onKeyLine = true;
678
+ }
679
+ return;
680
+ }
681
+ default: {
682
+ const bv = this.startBlockValue(map);
683
+ if (bv) {
684
+ if (bv.type === 'block-seq') {
685
+ if (!it.explicitKey &&
686
+ it.sep &&
687
+ !includesToken(it.sep, 'newline')) {
688
+ yield* this.pop({
689
+ type: 'error',
690
+ offset: this.offset,
691
+ message: 'Unexpected block-seq-ind on same line with key',
692
+ source: this.source
693
+ });
694
+ return;
695
+ }
696
+ }
697
+ else if (atMapIndent) {
698
+ map.items.push({ start });
699
+ }
700
+ this.stack.push(bv);
701
+ return;
702
+ }
703
+ }
704
+ }
705
+ }
706
+ yield* this.pop();
707
+ yield* this.step();
708
+ }
709
+ *blockSequence(seq) {
710
+ const it = seq.items[seq.items.length - 1];
711
+ switch (this.type) {
712
+ case 'newline':
713
+ if (it.value) {
714
+ const end = 'end' in it.value ? it.value.end : undefined;
715
+ const last = Array.isArray(end) ? end[end.length - 1] : undefined;
716
+ if (last?.type === 'comment')
717
+ end?.push(this.sourceToken);
718
+ else
719
+ seq.items.push({ start: [this.sourceToken] });
720
+ }
721
+ else
722
+ it.start.push(this.sourceToken);
723
+ return;
724
+ case 'space':
725
+ case 'comment':
726
+ if (it.value)
727
+ seq.items.push({ start: [this.sourceToken] });
728
+ else {
729
+ if (this.atIndentedComment(it.start, seq.indent)) {
730
+ const prev = seq.items[seq.items.length - 2];
731
+ const end = prev?.value?.end;
732
+ if (Array.isArray(end)) {
733
+ arrayPushArray(end, it.start);
734
+ end.push(this.sourceToken);
735
+ seq.items.pop();
736
+ return;
737
+ }
738
+ }
739
+ it.start.push(this.sourceToken);
740
+ }
741
+ return;
742
+ case 'anchor':
743
+ case 'tag':
744
+ if (it.value || this.indent <= seq.indent)
745
+ break;
746
+ it.start.push(this.sourceToken);
747
+ return;
748
+ case 'seq-item-ind':
749
+ if (this.indent !== seq.indent)
750
+ break;
751
+ if (it.value || includesToken(it.start, 'seq-item-ind'))
752
+ seq.items.push({ start: [this.sourceToken] });
753
+ else
754
+ it.start.push(this.sourceToken);
755
+ return;
756
+ }
757
+ if (this.indent > seq.indent) {
758
+ const bv = this.startBlockValue(seq);
759
+ if (bv) {
760
+ this.stack.push(bv);
761
+ return;
762
+ }
763
+ }
764
+ yield* this.pop();
765
+ yield* this.step();
766
+ }
767
+ *flowCollection(fc) {
768
+ const it = fc.items[fc.items.length - 1];
769
+ if (this.type === 'flow-error-end') {
770
+ let top;
771
+ do {
772
+ yield* this.pop();
773
+ top = this.peek(1);
774
+ } while (top?.type === 'flow-collection');
775
+ }
776
+ else if (fc.end.length === 0) {
777
+ switch (this.type) {
778
+ case 'comma':
779
+ case 'explicit-key-ind':
780
+ if (!it || it.sep)
781
+ fc.items.push({ start: [this.sourceToken] });
782
+ else
783
+ it.start.push(this.sourceToken);
784
+ return;
785
+ case 'map-value-ind':
786
+ if (!it || it.value)
787
+ fc.items.push({ start: [], key: null, sep: [this.sourceToken] });
788
+ else if (it.sep)
789
+ it.sep.push(this.sourceToken);
790
+ else
791
+ Object.assign(it, { key: null, sep: [this.sourceToken] });
792
+ return;
793
+ case 'space':
794
+ case 'comment':
795
+ case 'newline':
796
+ case 'anchor':
797
+ case 'tag':
798
+ if (!it || it.value)
799
+ fc.items.push({ start: [this.sourceToken] });
800
+ else if (it.sep)
801
+ it.sep.push(this.sourceToken);
802
+ else
803
+ it.start.push(this.sourceToken);
804
+ return;
805
+ case 'alias':
806
+ case 'scalar':
807
+ case 'single-quoted-scalar':
808
+ case 'double-quoted-scalar': {
809
+ const fs = this.flowScalar(this.type);
810
+ if (!it || it.value)
811
+ fc.items.push({ start: [], key: fs, sep: [] });
812
+ else if (it.sep)
813
+ this.stack.push(fs);
814
+ else
815
+ Object.assign(it, { key: fs, sep: [] });
816
+ return;
817
+ }
818
+ case 'flow-map-end':
819
+ case 'flow-seq-end':
820
+ fc.end.push(this.sourceToken);
821
+ return;
822
+ }
823
+ const bv = this.startBlockValue(fc);
824
+ /* istanbul ignore else should not happen */
825
+ if (bv)
826
+ this.stack.push(bv);
827
+ else {
828
+ yield* this.pop();
829
+ yield* this.step();
830
+ }
831
+ }
832
+ else {
833
+ const parent = this.peek(2);
834
+ if (parent.type === 'block-map' &&
835
+ ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||
836
+ (this.type === 'newline' &&
837
+ !parent.items[parent.items.length - 1].sep))) {
838
+ yield* this.pop();
839
+ yield* this.step();
840
+ }
841
+ else if (this.type === 'map-value-ind' &&
842
+ parent.type !== 'flow-collection') {
843
+ const prev = getPrevProps(parent);
844
+ const start = getFirstKeyStartProps(prev);
845
+ fixFlowSeqItems(fc);
846
+ const sep = fc.end.splice(1, fc.end.length);
847
+ sep.push(this.sourceToken);
848
+ const map = {
849
+ type: 'block-map',
850
+ offset: fc.offset,
851
+ indent: fc.indent,
852
+ items: [{ start, key: fc, sep }]
853
+ };
854
+ this.onKeyLine = true;
855
+ this.stack[this.stack.length - 1] = map;
856
+ }
857
+ else {
858
+ yield* this.lineEnd(fc);
859
+ }
860
+ }
861
+ }
862
+ flowScalar(type) {
863
+ if (this.onNewLine) {
864
+ let nl = this.source.indexOf('\n') + 1;
865
+ while (nl !== 0) {
866
+ this.onNewLine(this.offset + nl);
867
+ nl = this.source.indexOf('\n', nl) + 1;
868
+ }
869
+ }
870
+ return {
871
+ type,
872
+ offset: this.offset,
873
+ indent: this.indent,
874
+ source: this.source
875
+ };
876
+ }
877
+ startBlockValue(parent) {
878
+ switch (this.type) {
879
+ case 'alias':
880
+ case 'scalar':
881
+ case 'single-quoted-scalar':
882
+ case 'double-quoted-scalar':
883
+ return this.flowScalar(this.type);
884
+ case 'block-scalar-header':
885
+ return {
886
+ type: 'block-scalar',
887
+ offset: this.offset,
888
+ indent: this.indent,
889
+ props: [this.sourceToken],
890
+ source: ''
891
+ };
892
+ case 'flow-map-start':
893
+ case 'flow-seq-start':
894
+ return {
895
+ type: 'flow-collection',
896
+ offset: this.offset,
897
+ indent: this.indent,
898
+ start: this.sourceToken,
899
+ items: [],
900
+ end: []
901
+ };
902
+ case 'seq-item-ind':
903
+ return {
904
+ type: 'block-seq',
905
+ offset: this.offset,
906
+ indent: this.indent,
907
+ items: [{ start: [this.sourceToken] }]
908
+ };
909
+ case 'explicit-key-ind': {
910
+ this.onKeyLine = true;
911
+ const prev = getPrevProps(parent);
912
+ const start = getFirstKeyStartProps(prev);
913
+ start.push(this.sourceToken);
914
+ return {
915
+ type: 'block-map',
916
+ offset: this.offset,
917
+ indent: this.indent,
918
+ items: [{ start, explicitKey: true }]
919
+ };
920
+ }
921
+ case 'map-value-ind': {
922
+ this.onKeyLine = true;
923
+ const prev = getPrevProps(parent);
924
+ const start = getFirstKeyStartProps(prev);
925
+ return {
926
+ type: 'block-map',
927
+ offset: this.offset,
928
+ indent: this.indent,
929
+ items: [{ start, key: null, sep: [this.sourceToken] }]
930
+ };
931
+ }
932
+ }
933
+ return null;
934
+ }
935
+ atIndentedComment(start, indent) {
936
+ if (this.type !== 'comment')
937
+ return false;
938
+ if (this.indent <= indent)
939
+ return false;
940
+ return start.every(st => st.type === 'newline' || st.type === 'space');
941
+ }
942
+ *documentEnd(docEnd) {
943
+ if (this.type !== 'doc-mode') {
944
+ if (docEnd.end)
945
+ docEnd.end.push(this.sourceToken);
946
+ else
947
+ docEnd.end = [this.sourceToken];
948
+ if (this.type === 'newline')
949
+ yield* this.pop();
950
+ }
951
+ }
952
+ *lineEnd(token) {
953
+ switch (this.type) {
954
+ case 'comma':
955
+ case 'doc-start':
956
+ case 'doc-end':
957
+ case 'flow-seq-end':
958
+ case 'flow-map-end':
959
+ case 'map-value-ind':
960
+ yield* this.pop();
961
+ yield* this.step();
962
+ break;
963
+ case 'newline':
964
+ this.onKeyLine = false;
965
+ // fallthrough
966
+ case 'space':
967
+ case 'comment':
968
+ default:
969
+ // all other values are errors
970
+ if (token.end)
971
+ token.end.push(this.sourceToken);
972
+ else
973
+ token.end = [this.sourceToken];
974
+ if (this.type === 'newline')
975
+ yield* this.pop();
976
+ }
977
+ }
978
+ }
979
+
980
+ exports.Parser = Parser;