phantom-pr 0.2.5 → 0.2.6

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