dimcode-darwin-x64 0.0.76 → 0.0.77

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