dimcode-darwin-x64 0.0.79-beta.0 → 0.1.0-alpha.10

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 (254) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +2 -0
  3. package/bin/dimcode +2 -2
  4. package/licenses/grok-build/LICENSE +204 -0
  5. package/licenses/grok-build/NOTICE +14 -0
  6. package/licenses/grok-build/xai-ratatui-inline/NOTICE +15 -0
  7. package/licenses/grok-build/xai-ratatui-textarea/NOTICE +8 -0
  8. package/package.json +12 -3
  9. package/release-manifest.json +19 -0
  10. package/bin/node_modules/skills/bin/cli.mjs +0 -14
  11. package/bin/node_modules/skills/dist/_chunks/libs/@clack/core.mjs +0 -767
  12. package/bin/node_modules/skills/dist/_chunks/libs/@clack/prompts.mjs +0 -334
  13. package/bin/node_modules/skills/dist/_chunks/libs/@kwsites/file-exists.mjs +0 -562
  14. package/bin/node_modules/skills/dist/_chunks/libs/@kwsites/promise-deferred.mjs +0 -37
  15. package/bin/node_modules/skills/dist/_chunks/libs/@vercel/detect-agent.mjs +0 -138
  16. package/bin/node_modules/skills/dist/_chunks/libs/simple-git.mjs +0 -3584
  17. package/bin/node_modules/skills/dist/_chunks/libs/xdg-basedir.mjs +0 -14
  18. package/bin/node_modules/skills/dist/_chunks/rolldown-runtime.mjs +0 -24
  19. package/bin/node_modules/skills/dist/cli.d.mts +0 -1
  20. package/bin/node_modules/skills/dist/cli.mjs +0 -6199
  21. package/bin/node_modules/skills/package.json +0 -143
  22. package/bin/node_modules/yaml/LICENSE +0 -13
  23. package/bin/node_modules/yaml/README.md +0 -172
  24. package/bin/node_modules/yaml/bin.mjs +0 -11
  25. package/bin/node_modules/yaml/browser/dist/compose/compose-collection.js +0 -88
  26. package/bin/node_modules/yaml/browser/dist/compose/compose-doc.js +0 -43
  27. package/bin/node_modules/yaml/browser/dist/compose/compose-node.js +0 -109
  28. package/bin/node_modules/yaml/browser/dist/compose/compose-scalar.js +0 -86
  29. package/bin/node_modules/yaml/browser/dist/compose/composer.js +0 -219
  30. package/bin/node_modules/yaml/browser/dist/compose/resolve-block-map.js +0 -115
  31. package/bin/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +0 -198
  32. package/bin/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +0 -49
  33. package/bin/node_modules/yaml/browser/dist/compose/resolve-end.js +0 -37
  34. package/bin/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +0 -207
  35. package/bin/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +0 -225
  36. package/bin/node_modules/yaml/browser/dist/compose/resolve-props.js +0 -146
  37. package/bin/node_modules/yaml/browser/dist/compose/util-contains-newline.js +0 -34
  38. package/bin/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +0 -26
  39. package/bin/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +0 -15
  40. package/bin/node_modules/yaml/browser/dist/compose/util-map-includes.js +0 -13
  41. package/bin/node_modules/yaml/browser/dist/doc/Document.js +0 -335
  42. package/bin/node_modules/yaml/browser/dist/doc/anchors.js +0 -71
  43. package/bin/node_modules/yaml/browser/dist/doc/applyReviver.js +0 -55
  44. package/bin/node_modules/yaml/browser/dist/doc/createNode.js +0 -88
  45. package/bin/node_modules/yaml/browser/dist/doc/directives.js +0 -176
  46. package/bin/node_modules/yaml/browser/dist/errors.js +0 -57
  47. package/bin/node_modules/yaml/browser/dist/index.js +0 -17
  48. package/bin/node_modules/yaml/browser/dist/log.js +0 -11
  49. package/bin/node_modules/yaml/browser/dist/nodes/Alias.js +0 -116
  50. package/bin/node_modules/yaml/browser/dist/nodes/Collection.js +0 -147
  51. package/bin/node_modules/yaml/browser/dist/nodes/Node.js +0 -38
  52. package/bin/node_modules/yaml/browser/dist/nodes/Pair.js +0 -36
  53. package/bin/node_modules/yaml/browser/dist/nodes/Scalar.js +0 -24
  54. package/bin/node_modules/yaml/browser/dist/nodes/YAMLMap.js +0 -144
  55. package/bin/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +0 -113
  56. package/bin/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +0 -63
  57. package/bin/node_modules/yaml/browser/dist/nodes/identity.js +0 -36
  58. package/bin/node_modules/yaml/browser/dist/nodes/toJS.js +0 -37
  59. package/bin/node_modules/yaml/browser/dist/parse/cst-scalar.js +0 -214
  60. package/bin/node_modules/yaml/browser/dist/parse/cst-stringify.js +0 -61
  61. package/bin/node_modules/yaml/browser/dist/parse/cst-visit.js +0 -97
  62. package/bin/node_modules/yaml/browser/dist/parse/cst.js +0 -98
  63. package/bin/node_modules/yaml/browser/dist/parse/lexer.js +0 -721
  64. package/bin/node_modules/yaml/browser/dist/parse/line-counter.js +0 -39
  65. package/bin/node_modules/yaml/browser/dist/parse/parser.js +0 -975
  66. package/bin/node_modules/yaml/browser/dist/public-api.js +0 -102
  67. package/bin/node_modules/yaml/browser/dist/schema/Schema.js +0 -37
  68. package/bin/node_modules/yaml/browser/dist/schema/common/map.js +0 -17
  69. package/bin/node_modules/yaml/browser/dist/schema/common/null.js +0 -15
  70. package/bin/node_modules/yaml/browser/dist/schema/common/seq.js +0 -17
  71. package/bin/node_modules/yaml/browser/dist/schema/common/string.js +0 -14
  72. package/bin/node_modules/yaml/browser/dist/schema/core/bool.js +0 -19
  73. package/bin/node_modules/yaml/browser/dist/schema/core/float.js +0 -43
  74. package/bin/node_modules/yaml/browser/dist/schema/core/int.js +0 -38
  75. package/bin/node_modules/yaml/browser/dist/schema/core/schema.js +0 -23
  76. package/bin/node_modules/yaml/browser/dist/schema/json/schema.js +0 -62
  77. package/bin/node_modules/yaml/browser/dist/schema/tags.js +0 -96
  78. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +0 -58
  79. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +0 -26
  80. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +0 -46
  81. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +0 -71
  82. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +0 -67
  83. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +0 -74
  84. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +0 -78
  85. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +0 -39
  86. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +0 -93
  87. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +0 -101
  88. package/bin/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +0 -146
  89. package/bin/node_modules/yaml/browser/dist/stringify/stringify.js +0 -129
  90. package/bin/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +0 -153
  91. package/bin/node_modules/yaml/browser/dist/stringify/stringifyComment.js +0 -20
  92. package/bin/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +0 -85
  93. package/bin/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +0 -25
  94. package/bin/node_modules/yaml/browser/dist/stringify/stringifyPair.js +0 -150
  95. package/bin/node_modules/yaml/browser/dist/stringify/stringifyString.js +0 -336
  96. package/bin/node_modules/yaml/browser/dist/util.js +0 -11
  97. package/bin/node_modules/yaml/browser/dist/visit.js +0 -233
  98. package/bin/node_modules/yaml/browser/index.js +0 -5
  99. package/bin/node_modules/yaml/browser/package.json +0 -3
  100. package/bin/node_modules/yaml/dist/cli.d.ts +0 -8
  101. package/bin/node_modules/yaml/dist/cli.mjs +0 -201
  102. package/bin/node_modules/yaml/dist/compose/compose-collection.d.ts +0 -11
  103. package/bin/node_modules/yaml/dist/compose/compose-collection.js +0 -90
  104. package/bin/node_modules/yaml/dist/compose/compose-doc.d.ts +0 -7
  105. package/bin/node_modules/yaml/dist/compose/compose-doc.js +0 -45
  106. package/bin/node_modules/yaml/dist/compose/compose-node.d.ts +0 -29
  107. package/bin/node_modules/yaml/dist/compose/compose-node.js +0 -112
  108. package/bin/node_modules/yaml/dist/compose/compose-scalar.d.ts +0 -5
  109. package/bin/node_modules/yaml/dist/compose/compose-scalar.js +0 -88
  110. package/bin/node_modules/yaml/dist/compose/composer.d.ts +0 -63
  111. package/bin/node_modules/yaml/dist/compose/composer.js +0 -224
  112. package/bin/node_modules/yaml/dist/compose/resolve-block-map.d.ts +0 -6
  113. package/bin/node_modules/yaml/dist/compose/resolve-block-map.js +0 -117
  114. package/bin/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +0 -11
  115. package/bin/node_modules/yaml/dist/compose/resolve-block-scalar.js +0 -200
  116. package/bin/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +0 -6
  117. package/bin/node_modules/yaml/dist/compose/resolve-block-seq.js +0 -51
  118. package/bin/node_modules/yaml/dist/compose/resolve-end.d.ts +0 -6
  119. package/bin/node_modules/yaml/dist/compose/resolve-end.js +0 -39
  120. package/bin/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +0 -7
  121. package/bin/node_modules/yaml/dist/compose/resolve-flow-collection.js +0 -209
  122. package/bin/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +0 -10
  123. package/bin/node_modules/yaml/dist/compose/resolve-flow-scalar.js +0 -227
  124. package/bin/node_modules/yaml/dist/compose/resolve-props.d.ts +0 -23
  125. package/bin/node_modules/yaml/dist/compose/resolve-props.js +0 -148
  126. package/bin/node_modules/yaml/dist/compose/util-contains-newline.d.ts +0 -2
  127. package/bin/node_modules/yaml/dist/compose/util-contains-newline.js +0 -36
  128. package/bin/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +0 -2
  129. package/bin/node_modules/yaml/dist/compose/util-empty-scalar-position.js +0 -28
  130. package/bin/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +0 -3
  131. package/bin/node_modules/yaml/dist/compose/util-flow-indent-check.js +0 -17
  132. package/bin/node_modules/yaml/dist/compose/util-map-includes.d.ts +0 -4
  133. package/bin/node_modules/yaml/dist/compose/util-map-includes.js +0 -15
  134. package/bin/node_modules/yaml/dist/doc/Document.d.ts +0 -141
  135. package/bin/node_modules/yaml/dist/doc/Document.js +0 -337
  136. package/bin/node_modules/yaml/dist/doc/anchors.d.ts +0 -24
  137. package/bin/node_modules/yaml/dist/doc/anchors.js +0 -76
  138. package/bin/node_modules/yaml/dist/doc/applyReviver.d.ts +0 -9
  139. package/bin/node_modules/yaml/dist/doc/applyReviver.js +0 -57
  140. package/bin/node_modules/yaml/dist/doc/createNode.d.ts +0 -17
  141. package/bin/node_modules/yaml/dist/doc/createNode.js +0 -90
  142. package/bin/node_modules/yaml/dist/doc/directives.d.ts +0 -49
  143. package/bin/node_modules/yaml/dist/doc/directives.js +0 -178
  144. package/bin/node_modules/yaml/dist/errors.d.ts +0 -21
  145. package/bin/node_modules/yaml/dist/errors.js +0 -62
  146. package/bin/node_modules/yaml/dist/index.d.ts +0 -25
  147. package/bin/node_modules/yaml/dist/index.js +0 -50
  148. package/bin/node_modules/yaml/dist/log.d.ts +0 -3
  149. package/bin/node_modules/yaml/dist/log.js +0 -19
  150. package/bin/node_modules/yaml/dist/nodes/Alias.d.ts +0 -29
  151. package/bin/node_modules/yaml/dist/nodes/Alias.js +0 -118
  152. package/bin/node_modules/yaml/dist/nodes/Collection.d.ts +0 -73
  153. package/bin/node_modules/yaml/dist/nodes/Collection.js +0 -151
  154. package/bin/node_modules/yaml/dist/nodes/Node.d.ts +0 -53
  155. package/bin/node_modules/yaml/dist/nodes/Node.js +0 -40
  156. package/bin/node_modules/yaml/dist/nodes/Pair.d.ts +0 -22
  157. package/bin/node_modules/yaml/dist/nodes/Pair.js +0 -39
  158. package/bin/node_modules/yaml/dist/nodes/Scalar.d.ts +0 -47
  159. package/bin/node_modules/yaml/dist/nodes/Scalar.js +0 -27
  160. package/bin/node_modules/yaml/dist/nodes/YAMLMap.d.ts +0 -53
  161. package/bin/node_modules/yaml/dist/nodes/YAMLMap.js +0 -147
  162. package/bin/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +0 -60
  163. package/bin/node_modules/yaml/dist/nodes/YAMLSeq.js +0 -115
  164. package/bin/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +0 -4
  165. package/bin/node_modules/yaml/dist/nodes/addPairToJSMap.js +0 -65
  166. package/bin/node_modules/yaml/dist/nodes/identity.d.ts +0 -23
  167. package/bin/node_modules/yaml/dist/nodes/identity.js +0 -53
  168. package/bin/node_modules/yaml/dist/nodes/toJS.d.ts +0 -29
  169. package/bin/node_modules/yaml/dist/nodes/toJS.js +0 -39
  170. package/bin/node_modules/yaml/dist/options.d.ts +0 -350
  171. package/bin/node_modules/yaml/dist/parse/cst-scalar.d.ts +0 -64
  172. package/bin/node_modules/yaml/dist/parse/cst-scalar.js +0 -218
  173. package/bin/node_modules/yaml/dist/parse/cst-stringify.d.ts +0 -8
  174. package/bin/node_modules/yaml/dist/parse/cst-stringify.js +0 -63
  175. package/bin/node_modules/yaml/dist/parse/cst-visit.d.ts +0 -39
  176. package/bin/node_modules/yaml/dist/parse/cst-visit.js +0 -99
  177. package/bin/node_modules/yaml/dist/parse/cst.d.ts +0 -109
  178. package/bin/node_modules/yaml/dist/parse/cst.js +0 -112
  179. package/bin/node_modules/yaml/dist/parse/lexer.d.ts +0 -87
  180. package/bin/node_modules/yaml/dist/parse/lexer.js +0 -723
  181. package/bin/node_modules/yaml/dist/parse/line-counter.d.ts +0 -22
  182. package/bin/node_modules/yaml/dist/parse/line-counter.js +0 -41
  183. package/bin/node_modules/yaml/dist/parse/parser.d.ts +0 -84
  184. package/bin/node_modules/yaml/dist/parse/parser.js +0 -980
  185. package/bin/node_modules/yaml/dist/public-api.d.ts +0 -44
  186. package/bin/node_modules/yaml/dist/public-api.js +0 -107
  187. package/bin/node_modules/yaml/dist/schema/Schema.d.ts +0 -17
  188. package/bin/node_modules/yaml/dist/schema/Schema.js +0 -39
  189. package/bin/node_modules/yaml/dist/schema/common/map.d.ts +0 -2
  190. package/bin/node_modules/yaml/dist/schema/common/map.js +0 -19
  191. package/bin/node_modules/yaml/dist/schema/common/null.d.ts +0 -4
  192. package/bin/node_modules/yaml/dist/schema/common/null.js +0 -17
  193. package/bin/node_modules/yaml/dist/schema/common/seq.d.ts +0 -2
  194. package/bin/node_modules/yaml/dist/schema/common/seq.js +0 -19
  195. package/bin/node_modules/yaml/dist/schema/common/string.d.ts +0 -2
  196. package/bin/node_modules/yaml/dist/schema/common/string.js +0 -16
  197. package/bin/node_modules/yaml/dist/schema/core/bool.d.ts +0 -4
  198. package/bin/node_modules/yaml/dist/schema/core/bool.js +0 -21
  199. package/bin/node_modules/yaml/dist/schema/core/float.d.ts +0 -4
  200. package/bin/node_modules/yaml/dist/schema/core/float.js +0 -47
  201. package/bin/node_modules/yaml/dist/schema/core/int.d.ts +0 -4
  202. package/bin/node_modules/yaml/dist/schema/core/int.js +0 -42
  203. package/bin/node_modules/yaml/dist/schema/core/schema.d.ts +0 -1
  204. package/bin/node_modules/yaml/dist/schema/core/schema.js +0 -25
  205. package/bin/node_modules/yaml/dist/schema/json/schema.d.ts +0 -2
  206. package/bin/node_modules/yaml/dist/schema/json/schema.js +0 -64
  207. package/bin/node_modules/yaml/dist/schema/json-schema.d.ts +0 -69
  208. package/bin/node_modules/yaml/dist/schema/tags.d.ts +0 -48
  209. package/bin/node_modules/yaml/dist/schema/tags.js +0 -99
  210. package/bin/node_modules/yaml/dist/schema/types.d.ts +0 -92
  211. package/bin/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +0 -2
  212. package/bin/node_modules/yaml/dist/schema/yaml-1.1/binary.js +0 -70
  213. package/bin/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +0 -7
  214. package/bin/node_modules/yaml/dist/schema/yaml-1.1/bool.js +0 -29
  215. package/bin/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +0 -4
  216. package/bin/node_modules/yaml/dist/schema/yaml-1.1/float.js +0 -50
  217. package/bin/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +0 -5
  218. package/bin/node_modules/yaml/dist/schema/yaml-1.1/int.js +0 -76
  219. package/bin/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +0 -9
  220. package/bin/node_modules/yaml/dist/schema/yaml-1.1/merge.js +0 -71
  221. package/bin/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +0 -22
  222. package/bin/node_modules/yaml/dist/schema/yaml-1.1/omap.js +0 -77
  223. package/bin/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +0 -10
  224. package/bin/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +0 -82
  225. package/bin/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +0 -1
  226. package/bin/node_modules/yaml/dist/schema/yaml-1.1/schema.js +0 -41
  227. package/bin/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +0 -28
  228. package/bin/node_modules/yaml/dist/schema/yaml-1.1/set.js +0 -96
  229. package/bin/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +0 -6
  230. package/bin/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +0 -105
  231. package/bin/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +0 -34
  232. package/bin/node_modules/yaml/dist/stringify/foldFlowLines.js +0 -151
  233. package/bin/node_modules/yaml/dist/stringify/stringify.d.ts +0 -21
  234. package/bin/node_modules/yaml/dist/stringify/stringify.js +0 -132
  235. package/bin/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +0 -17
  236. package/bin/node_modules/yaml/dist/stringify/stringifyCollection.js +0 -155
  237. package/bin/node_modules/yaml/dist/stringify/stringifyComment.d.ts +0 -10
  238. package/bin/node_modules/yaml/dist/stringify/stringifyComment.js +0 -24
  239. package/bin/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +0 -4
  240. package/bin/node_modules/yaml/dist/stringify/stringifyDocument.js +0 -87
  241. package/bin/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +0 -2
  242. package/bin/node_modules/yaml/dist/stringify/stringifyNumber.js +0 -27
  243. package/bin/node_modules/yaml/dist/stringify/stringifyPair.d.ts +0 -3
  244. package/bin/node_modules/yaml/dist/stringify/stringifyPair.js +0 -152
  245. package/bin/node_modules/yaml/dist/stringify/stringifyString.d.ts +0 -9
  246. package/bin/node_modules/yaml/dist/stringify/stringifyString.js +0 -338
  247. package/bin/node_modules/yaml/dist/test-events.d.ts +0 -4
  248. package/bin/node_modules/yaml/dist/test-events.js +0 -134
  249. package/bin/node_modules/yaml/dist/util.d.ts +0 -16
  250. package/bin/node_modules/yaml/dist/util.js +0 -28
  251. package/bin/node_modules/yaml/dist/visit.d.ts +0 -102
  252. package/bin/node_modules/yaml/dist/visit.js +0 -236
  253. package/bin/node_modules/yaml/package.json +0 -97
  254. package/bin/node_modules/yaml/util.js +0 -2
@@ -1,975 +0,0 @@
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 };