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,980 +0,0 @@
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;