parser-lr 0.0.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/README.md +48 -1
  2. package/bin/parser-lr.js +12502 -16
  3. package/bin/parser-lr.js.map +1 -1
  4. package/dist/lib/ast/ast-node.d.ts +59 -0
  5. package/dist/lib/ast/ast-node.d.ts.map +1 -0
  6. package/dist/lib/ast/ast-node.js +66 -0
  7. package/dist/lib/ast/ast-node.js.map +1 -0
  8. package/dist/lib/errors/index.d.ts +2 -0
  9. package/dist/lib/errors/index.d.ts.map +1 -0
  10. package/dist/lib/errors/index.js +2 -0
  11. package/dist/lib/errors/index.js.map +1 -0
  12. package/dist/lib/errors/parser-lr-error.d.ts +30 -0
  13. package/dist/lib/errors/parser-lr-error.d.ts.map +1 -0
  14. package/dist/lib/errors/parser-lr-error.js +45 -0
  15. package/dist/lib/errors/parser-lr-error.js.map +1 -0
  16. package/dist/lib/grammar/ast-schema.d.ts +28 -0
  17. package/dist/lib/grammar/ast-schema.d.ts.map +1 -0
  18. package/dist/lib/grammar/ast-schema.js +39 -0
  19. package/dist/lib/grammar/ast-schema.js.map +1 -0
  20. package/dist/lib/grammar/ast-type.d.ts +12 -0
  21. package/dist/lib/grammar/ast-type.d.ts.map +1 -0
  22. package/dist/lib/grammar/ast-type.js +2 -0
  23. package/dist/lib/grammar/ast-type.js.map +1 -0
  24. package/dist/lib/grammar/expression.d.ts +69 -0
  25. package/dist/lib/grammar/expression.d.ts.map +1 -0
  26. package/dist/lib/grammar/expression.js +2 -0
  27. package/dist/lib/grammar/expression.js.map +1 -0
  28. package/dist/lib/grammar/grammar-from-cst.d.ts +10 -0
  29. package/dist/lib/grammar/grammar-from-cst.d.ts.map +1 -0
  30. package/dist/lib/grammar/grammar-from-cst.js +638 -0
  31. package/dist/lib/grammar/grammar-from-cst.js.map +1 -0
  32. package/dist/lib/grammar/grammar-literals.d.ts +18 -0
  33. package/dist/lib/grammar/grammar-literals.d.ts.map +1 -0
  34. package/dist/lib/grammar/grammar-literals.js +67 -0
  35. package/dist/lib/grammar/grammar-literals.js.map +1 -0
  36. package/dist/lib/grammar/grammar.d.ts +45 -0
  37. package/dist/lib/grammar/grammar.d.ts.map +1 -0
  38. package/dist/lib/grammar/grammar.js +60 -0
  39. package/dist/lib/grammar/grammar.js.map +1 -0
  40. package/dist/lib/grammar/grammar.json +7950 -0
  41. package/dist/lib/grammar/index.d.ts +13 -0
  42. package/dist/lib/grammar/index.d.ts.map +1 -0
  43. package/dist/lib/grammar/index.js +7 -0
  44. package/dist/lib/grammar/index.js.map +1 -0
  45. package/dist/lib/grammar/meta-grammar-table.d.ts +19 -0
  46. package/dist/lib/grammar/meta-grammar-table.d.ts.map +1 -0
  47. package/dist/lib/grammar/meta-grammar-table.js +32 -0
  48. package/dist/lib/grammar/meta-grammar-table.js.map +1 -0
  49. package/dist/lib/grammar/production.d.ts +9 -0
  50. package/dist/lib/grammar/production.d.ts.map +1 -0
  51. package/dist/lib/grammar/production.js +2 -0
  52. package/dist/lib/grammar/production.js.map +1 -0
  53. package/dist/lib/grammar/read-grammar-error.d.ts +15 -0
  54. package/dist/lib/grammar/read-grammar-error.d.ts.map +1 -0
  55. package/dist/lib/grammar/read-grammar-error.js +18 -0
  56. package/dist/lib/grammar/read-grammar-error.js.map +1 -0
  57. package/dist/lib/grammar/read-grammar.d.ts +9 -0
  58. package/dist/lib/grammar/read-grammar.d.ts.map +1 -0
  59. package/dist/lib/grammar/read-grammar.js +21 -0
  60. package/dist/lib/grammar/read-grammar.js.map +1 -0
  61. package/dist/lib/grammar/token-rule.d.ts +11 -0
  62. package/dist/lib/grammar/token-rule.d.ts.map +1 -0
  63. package/dist/lib/grammar/token-rule.js +2 -0
  64. package/dist/lib/grammar/token-rule.js.map +1 -0
  65. package/dist/lib/grammar/transform-expression.d.ts +55 -0
  66. package/dist/lib/grammar/transform-expression.d.ts.map +1 -0
  67. package/dist/lib/grammar/transform-expression.js +2 -0
  68. package/dist/lib/grammar/transform-expression.js.map +1 -0
  69. package/dist/lib/grammar/transform-rule.d.ts +16 -0
  70. package/dist/lib/grammar/transform-rule.d.ts.map +1 -0
  71. package/dist/lib/grammar/transform-rule.js +2 -0
  72. package/dist/lib/grammar/transform-rule.js.map +1 -0
  73. package/dist/lib/grammar/transform-schema.d.ts +28 -0
  74. package/dist/lib/grammar/transform-schema.d.ts.map +1 -0
  75. package/dist/lib/grammar/transform-schema.js +39 -0
  76. package/dist/lib/grammar/transform-schema.js.map +1 -0
  77. package/dist/lib/index.d.ts +19 -0
  78. package/dist/lib/index.d.ts.map +1 -1
  79. package/dist/lib/index.js +13 -0
  80. package/dist/lib/index.js.map +1 -1
  81. package/dist/lib/lexer/index.d.ts +10 -0
  82. package/dist/lib/lexer/index.d.ts.map +1 -0
  83. package/dist/lib/lexer/index.js +8 -0
  84. package/dist/lib/lexer/index.js.map +1 -0
  85. package/dist/lib/lexer/lexer-compile-error.d.ts +15 -0
  86. package/dist/lib/lexer/lexer-compile-error.d.ts.map +1 -0
  87. package/dist/lib/lexer/lexer-compile-error.js +18 -0
  88. package/dist/lib/lexer/lexer-compile-error.js.map +1 -0
  89. package/dist/lib/lexer/lexer-compile.d.ts +94 -0
  90. package/dist/lib/lexer/lexer-compile.d.ts.map +1 -0
  91. package/dist/lib/lexer/lexer-compile.js +189 -0
  92. package/dist/lib/lexer/lexer-compile.js.map +1 -0
  93. package/dist/lib/lexer/lexer-error.d.ts +15 -0
  94. package/dist/lib/lexer/lexer-error.d.ts.map +1 -0
  95. package/dist/lib/lexer/lexer-error.js +18 -0
  96. package/dist/lib/lexer/lexer-error.js.map +1 -0
  97. package/dist/lib/lexer/lexer-input-error.d.ts +11 -0
  98. package/dist/lib/lexer/lexer-input-error.d.ts.map +1 -0
  99. package/dist/lib/lexer/lexer-input-error.js +13 -0
  100. package/dist/lib/lexer/lexer-input-error.js.map +1 -0
  101. package/dist/lib/lexer/lexer-state-error.d.ts +13 -0
  102. package/dist/lib/lexer/lexer-state-error.d.ts.map +1 -0
  103. package/dist/lib/lexer/lexer-state-error.js +15 -0
  104. package/dist/lib/lexer/lexer-state-error.js.map +1 -0
  105. package/dist/lib/lexer/lexer.d.ts +111 -0
  106. package/dist/lib/lexer/lexer.d.ts.map +1 -0
  107. package/dist/lib/lexer/lexer.js +270 -0
  108. package/dist/lib/lexer/lexer.js.map +1 -0
  109. package/dist/lib/lexer/token.d.ts +34 -0
  110. package/dist/lib/lexer/token.d.ts.map +1 -0
  111. package/dist/lib/lexer/token.js +38 -0
  112. package/dist/lib/lexer/token.js.map +1 -0
  113. package/dist/lib/parse-context-error.d.ts +13 -0
  114. package/dist/lib/parse-context-error.d.ts.map +1 -0
  115. package/dist/lib/parse-context-error.js +15 -0
  116. package/dist/lib/parse-context-error.js.map +1 -0
  117. package/dist/lib/parse-context.d.ts +106 -0
  118. package/dist/lib/parse-context.d.ts.map +1 -0
  119. package/dist/lib/parse-context.js +133 -0
  120. package/dist/lib/parse-context.js.map +1 -0
  121. package/dist/lib/parse-output-error.d.ts +13 -0
  122. package/dist/lib/parse-output-error.d.ts.map +1 -0
  123. package/dist/lib/parse-output-error.js +15 -0
  124. package/dist/lib/parse-output-error.js.map +1 -0
  125. package/dist/lib/parse-output.d.ts +10 -0
  126. package/dist/lib/parse-output.d.ts.map +1 -0
  127. package/dist/lib/parse-output.js +15 -0
  128. package/dist/lib/parse-output.js.map +1 -0
  129. package/dist/lib/parse-table/analysis/first-follow.d.ts +124 -0
  130. package/dist/lib/parse-table/analysis/first-follow.d.ts.map +1 -0
  131. package/dist/lib/parse-table/analysis/first-follow.js +274 -0
  132. package/dist/lib/parse-table/analysis/first-follow.js.map +1 -0
  133. package/dist/lib/parse-table/analysis/index.d.ts +2 -0
  134. package/dist/lib/parse-table/analysis/index.d.ts.map +1 -0
  135. package/dist/lib/parse-table/analysis/index.js +2 -0
  136. package/dist/lib/parse-table/analysis/index.js.map +1 -0
  137. package/dist/lib/parse-table/bnf/bnf-grammar.d.ts +65 -0
  138. package/dist/lib/parse-table/bnf/bnf-grammar.d.ts.map +1 -0
  139. package/dist/lib/parse-table/bnf/bnf-grammar.js +136 -0
  140. package/dist/lib/parse-table/bnf/bnf-grammar.js.map +1 -0
  141. package/dist/lib/parse-table/bnf/bnf-production.d.ts +12 -0
  142. package/dist/lib/parse-table/bnf/bnf-production.d.ts.map +1 -0
  143. package/dist/lib/parse-table/bnf/bnf-production.js +2 -0
  144. package/dist/lib/parse-table/bnf/bnf-production.js.map +1 -0
  145. package/dist/lib/parse-table/bnf/bnf-symbol.d.ts +40 -0
  146. package/dist/lib/parse-table/bnf/bnf-symbol.d.ts.map +1 -0
  147. package/dist/lib/parse-table/bnf/bnf-symbol.js +35 -0
  148. package/dist/lib/parse-table/bnf/bnf-symbol.js.map +1 -0
  149. package/dist/lib/parse-table/bnf/desugar-ebnf.d.ts +104 -0
  150. package/dist/lib/parse-table/bnf/desugar-ebnf.d.ts.map +1 -0
  151. package/dist/lib/parse-table/bnf/desugar-ebnf.js +217 -0
  152. package/dist/lib/parse-table/bnf/desugar-ebnf.js.map +1 -0
  153. package/dist/lib/parse-table/bnf/index.d.ts +6 -0
  154. package/dist/lib/parse-table/bnf/index.d.ts.map +1 -0
  155. package/dist/lib/parse-table/bnf/index.js +4 -0
  156. package/dist/lib/parse-table/bnf/index.js.map +1 -0
  157. package/dist/lib/parse-table/build-lr-table.d.ts +11 -0
  158. package/dist/lib/parse-table/build-lr-table.d.ts.map +1 -0
  159. package/dist/lib/parse-table/build-lr-table.js +158 -0
  160. package/dist/lib/parse-table/build-lr-table.js.map +1 -0
  161. package/dist/lib/parse-table/index.d.ts +22 -0
  162. package/dist/lib/parse-table/index.d.ts.map +1 -0
  163. package/dist/lib/parse-table/index.js +15 -0
  164. package/dist/lib/parse-table/index.js.map +1 -0
  165. package/dist/lib/parse-table/lr-algorithm-error.d.ts +13 -0
  166. package/dist/lib/parse-table/lr-algorithm-error.d.ts.map +1 -0
  167. package/dist/lib/parse-table/lr-algorithm-error.js +15 -0
  168. package/dist/lib/parse-table/lr-algorithm-error.js.map +1 -0
  169. package/dist/lib/parse-table/lr-algorithm.d.ts +19 -0
  170. package/dist/lib/parse-table/lr-algorithm.d.ts.map +1 -0
  171. package/dist/lib/parse-table/lr-algorithm.js +27 -0
  172. package/dist/lib/parse-table/lr-algorithm.js.map +1 -0
  173. package/dist/lib/parse-table/lr0/index.d.ts +3 -0
  174. package/dist/lib/parse-table/lr0/index.d.ts.map +1 -0
  175. package/dist/lib/parse-table/lr0/index.js +2 -0
  176. package/dist/lib/parse-table/lr0/index.js.map +1 -0
  177. package/dist/lib/parse-table/lr0/lr0-item-set.d.ts +106 -0
  178. package/dist/lib/parse-table/lr0/lr0-item-set.d.ts.map +1 -0
  179. package/dist/lib/parse-table/lr0/lr0-item-set.js +235 -0
  180. package/dist/lib/parse-table/lr0/lr0-item-set.js.map +1 -0
  181. package/dist/lib/parse-table/lr1/index.d.ts +3 -0
  182. package/dist/lib/parse-table/lr1/index.d.ts.map +1 -0
  183. package/dist/lib/parse-table/lr1/index.js +2 -0
  184. package/dist/lib/parse-table/lr1/index.js.map +1 -0
  185. package/dist/lib/parse-table/lr1/lr1-item-set.d.ts +157 -0
  186. package/dist/lib/parse-table/lr1/lr1-item-set.d.ts.map +1 -0
  187. package/dist/lib/parse-table/lr1/lr1-item-set.js +380 -0
  188. package/dist/lib/parse-table/lr1/lr1-item-set.js.map +1 -0
  189. package/dist/lib/parse-table/parse-table-build-error.d.ts +17 -0
  190. package/dist/lib/parse-table/parse-table-build-error.d.ts.map +1 -0
  191. package/dist/lib/parse-table/parse-table-build-error.js +20 -0
  192. package/dist/lib/parse-table/parse-table-build-error.js.map +1 -0
  193. package/dist/lib/parse-table/parse-table-error.d.ts +13 -0
  194. package/dist/lib/parse-table/parse-table-error.d.ts.map +1 -0
  195. package/dist/lib/parse-table/parse-table-error.js +15 -0
  196. package/dist/lib/parse-table/parse-table-error.js.map +1 -0
  197. package/dist/lib/parse-table/parse-table-json.d.ts +50 -0
  198. package/dist/lib/parse-table/parse-table-json.d.ts.map +1 -0
  199. package/dist/lib/parse-table/parse-table-json.js +9 -0
  200. package/dist/lib/parse-table/parse-table-json.js.map +1 -0
  201. package/dist/lib/parse-table/parse-table.d.ts +154 -0
  202. package/dist/lib/parse-table/parse-table.d.ts.map +1 -0
  203. package/dist/lib/parse-table/parse-table.js +314 -0
  204. package/dist/lib/parse-table/parse-table.js.map +1 -0
  205. package/dist/lib/parse-table/slr/index.d.ts +4 -0
  206. package/dist/lib/parse-table/slr/index.d.ts.map +1 -0
  207. package/dist/lib/parse-table/slr/index.js +3 -0
  208. package/dist/lib/parse-table/slr/index.js.map +1 -0
  209. package/dist/lib/parse-table/slr/parse-action.d.ts +3 -0
  210. package/dist/lib/parse-table/slr/parse-action.d.ts.map +1 -0
  211. package/dist/lib/parse-table/slr/parse-action.js +2 -0
  212. package/dist/lib/parse-table/slr/parse-action.js.map +1 -0
  213. package/dist/lib/parse-table/slr/slr-table.d.ts +14 -0
  214. package/dist/lib/parse-table/slr/slr-table.d.ts.map +1 -0
  215. package/dist/lib/parse-table/slr/slr-table.js +14 -0
  216. package/dist/lib/parse-table/slr/slr-table.js.map +1 -0
  217. package/dist/lib/parse-table/table/index.d.ts +5 -0
  218. package/dist/lib/parse-table/table/index.d.ts.map +1 -0
  219. package/dist/lib/parse-table/table/index.js +4 -0
  220. package/dist/lib/parse-table/table/index.js.map +1 -0
  221. package/dist/lib/parse-table/table/lr-parse-table.d.ts +92 -0
  222. package/dist/lib/parse-table/table/lr-parse-table.d.ts.map +1 -0
  223. package/dist/lib/parse-table/table/lr-parse-table.js +144 -0
  224. package/dist/lib/parse-table/table/lr-parse-table.js.map +1 -0
  225. package/dist/lib/parse-table/table/parse-action.d.ts +47 -0
  226. package/dist/lib/parse-table/table/parse-action.d.ts.map +1 -0
  227. package/dist/lib/parse-table/table/parse-action.js +49 -0
  228. package/dist/lib/parse-table/table/parse-action.js.map +1 -0
  229. package/dist/lib/parse-table/table/table-builder-base.d.ts +63 -0
  230. package/dist/lib/parse-table/table/table-builder-base.d.ts.map +1 -0
  231. package/dist/lib/parse-table/table/table-builder-base.js +129 -0
  232. package/dist/lib/parse-table/table/table-builder-base.js.map +1 -0
  233. package/dist/lib/parse-table/token-inventory.d.ts +9 -0
  234. package/dist/lib/parse-table/token-inventory.d.ts.map +1 -0
  235. package/dist/lib/parse-table/token-inventory.js +15 -0
  236. package/dist/lib/parse-table/token-inventory.js.map +1 -0
  237. package/dist/lib/parser-lr.d.ts +96 -2
  238. package/dist/lib/parser-lr.d.ts.map +1 -1
  239. package/dist/lib/parser-lr.js +130 -2
  240. package/dist/lib/parser-lr.js.map +1 -1
  241. package/dist/lib/shift-reduce/index.d.ts +3 -0
  242. package/dist/lib/shift-reduce/index.d.ts.map +1 -0
  243. package/dist/lib/shift-reduce/index.js +2 -0
  244. package/dist/lib/shift-reduce/index.js.map +1 -0
  245. package/dist/lib/shift-reduce/shift-reduce-engine.d.ts +82 -0
  246. package/dist/lib/shift-reduce/shift-reduce-engine.d.ts.map +1 -0
  247. package/dist/lib/shift-reduce/shift-reduce-engine.js +204 -0
  248. package/dist/lib/shift-reduce/shift-reduce-engine.js.map +1 -0
  249. package/dist/lib/transform/binding-map.d.ts +32 -0
  250. package/dist/lib/transform/binding-map.d.ts.map +1 -0
  251. package/dist/lib/transform/binding-map.js +59 -0
  252. package/dist/lib/transform/binding-map.js.map +1 -0
  253. package/dist/lib/transform/cst-transformer.d.ts +158 -0
  254. package/dist/lib/transform/cst-transformer.d.ts.map +1 -0
  255. package/dist/lib/transform/cst-transformer.js +381 -0
  256. package/dist/lib/transform/cst-transformer.js.map +1 -0
  257. package/dist/lib/transform/index.d.ts +4 -0
  258. package/dist/lib/transform/index.d.ts.map +1 -0
  259. package/dist/lib/transform/index.js +3 -0
  260. package/dist/lib/transform/index.js.map +1 -0
  261. package/package.json +10 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-map.js","sourceRoot":"","sources":["../../../src/lib/transform/binding-map.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAEzC,MAAM,YAAY,GAAG,qCAAqC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAErE,IAAI,YAAY,KAAK,IAAI,EACzB,CAAC;QACG,OAAO;YACH,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YACxB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;SAC1B,CAAC;IACN,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC5C,CAAC;QACG,OAAO;YACH,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3B,CAAC;IACN,CAAC;IAED,OAAO;QACH,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,GAAG;KACd,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,UAAoC;IAEhE,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAErC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAEtC,OAAO;YACH,KAAK;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;SACxB,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAC9B,UAAoC,EACpC,SAAiB;IAGjB,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,UAAU,CAAC,EAC9C,CAAC;QACG,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAC9B,CAAC;YACG,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;IACL,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,UAAU,CAAC,EAC9C,CAAC;QACG,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EACtD,CAAC;YACG,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -0,0 +1,158 @@
1
+ import { AstNode } from '../ast/ast-node.js';
2
+ import type { TransformSchema } from '../grammar/transform-schema.js';
3
+ import type { ParseTableProductionJson } from '../parse-table/parse-table-json.js';
4
+ import type { ParseTable } from '../parse-table/parse-table.js';
5
+ import { type ProductionSlot } from './binding-map.js';
6
+ /**
7
+ * Applies CST-to-AST transform rules to a concrete syntax tree.
8
+ */
9
+ export declare class CstTransformer {
10
+ private readonly schema;
11
+ private readonly table;
12
+ /**
13
+ * Creates a transformer for a transform schema and parse table.
14
+ *
15
+ * @param schema - CST-to-AST rules from the grammar `transform` section.
16
+ * @param table - Parse table supplying production metadata for reference lookup.
17
+ */
18
+ constructor(schema: TransformSchema, table: ParseTable);
19
+ /**
20
+ * Transforms a concrete syntax tree into an abstract syntax tree.
21
+ *
22
+ * @param cst - Parse tree rooted at the grammar start symbol.
23
+ * @returns Transformed AST, or null when transformation fails.
24
+ */
25
+ transform(cst: AstNode | null): AstNode | null;
26
+ /**
27
+ * Transforms a CST using a transform schema and parse table.
28
+ *
29
+ * @param cst - Parse tree rooted at the grammar start symbol.
30
+ * @param schema - CST-to-AST rules from the grammar `transform` section.
31
+ * @param table - Parse table supplying production metadata for reference lookup.
32
+ */
33
+ static transform(cst: AstNode | null, schema: TransformSchema, table: ParseTable): AstNode | null;
34
+ /**
35
+ * Transforms one CST node and its descendants.
36
+ *
37
+ * @param node - CST node to transform.
38
+ */
39
+ private transformNode;
40
+ /**
41
+ * Applies one transform expression to a CST node.
42
+ *
43
+ * @param node - CST node being transformed.
44
+ * @param expression - Transform expression for the matched alternative.
45
+ */
46
+ private applyExpression;
47
+ /**
48
+ * Builds an AST node from a `type.#variant(arg, …)` transform.
49
+ *
50
+ * @param node - CST node supplying bound child references.
51
+ * @param expression - Build transform expression.
52
+ */
53
+ private applyBuild;
54
+ /**
55
+ * Left-folds repeated infix operators into chained AST nodes.
56
+ *
57
+ * @param node - CST node for one operator application or repeat segment.
58
+ * @param expression - Fold-left transform expression.
59
+ */
60
+ private applyFoldLeft;
61
+ /**
62
+ * Right-folds repeated infix operators into chained AST nodes.
63
+ *
64
+ * @param node - CST node for one operator application or repeat segment.
65
+ * @param expression - Fold-right transform expression.
66
+ */
67
+ private applyFoldRight;
68
+ /**
69
+ * Flattens a `{ head tail }` repetition into one list AST node.
70
+ *
71
+ * @param node - CST node for one repeat segment.
72
+ * @param expression - Flatten transform expression.
73
+ */
74
+ private applyFlatten;
75
+ /**
76
+ * Transforms a CST node without explicit transform rules.
77
+ *
78
+ * @param node - CST node to pass through or unwrap.
79
+ */
80
+ private defaultTransform;
81
+ /**
82
+ * Transforms and compacts a list of child CST nodes.
83
+ *
84
+ * @param children - Child CST nodes.
85
+ */
86
+ private transformChildren;
87
+ /**
88
+ * Transforms one referenced child of a CST node.
89
+ *
90
+ * @param node - Parent CST node.
91
+ * @param reference - Binding or symbol name from a transform expression.
92
+ */
93
+ private transformReference;
94
+ /**
95
+ * Returns the CST child for a transform reference name.
96
+ *
97
+ * @param node - Parent CST node.
98
+ * @param reference - Binding or symbol name from a transform expression.
99
+ */
100
+ private resolveReferenceNode;
101
+ /**
102
+ * Resolves transform references to CST child nodes.
103
+ *
104
+ * @param node - Parent CST node.
105
+ * @param references - Reference names from a transform expression.
106
+ */
107
+ private resolveReferences;
108
+ /**
109
+ * Returns the recursive tail child for a repeat production node.
110
+ *
111
+ * @param node - Repeat CST node.
112
+ * @param resolved - Resolved reference child nodes.
113
+ */
114
+ private findRepeatTail;
115
+ /**
116
+ * Returns whether a CST node represents an epsilon production.
117
+ *
118
+ * @param node - CST node to test.
119
+ */
120
+ private isEpsilonNode;
121
+ /**
122
+ * Returns parse table production metadata for a CST node.
123
+ *
124
+ * @param node - CST node reduced by a known production.
125
+ */
126
+ private productionFor;
127
+ /**
128
+ * Finds the transform alternative matching a CST node variant.
129
+ *
130
+ * @param alternatives - Transform alternatives for one production.
131
+ * @param node - CST node being transformed.
132
+ */
133
+ private findAlternative;
134
+ /**
135
+ * Builds an AST interior node from transformed children.
136
+ *
137
+ * @param typeName - AST type name.
138
+ * @param variant - AST variant label.
139
+ * @param children - Transformed child nodes.
140
+ * @param location - Optional source span.
141
+ */
142
+ private buildAstNode;
143
+ }
144
+ /**
145
+ * Transforms a CST into an AST using transform rules and production metadata.
146
+ *
147
+ * @param cst - Parse tree rooted at the grammar start symbol.
148
+ * @param schema - CST-to-AST rules from the grammar `transform` section.
149
+ * @param table - Parse table supplying production metadata for reference lookup.
150
+ */
151
+ export declare function transformCst(cst: AstNode | null, schema: TransformSchema, table: ParseTable): AstNode | null;
152
+ /**
153
+ * Returns indexed slots for one production, for use in tests and diagnostics.
154
+ *
155
+ * @param production - Parse table production metadata.
156
+ */
157
+ export declare function describeProductionSlots(production: ParseTableProductionJson): readonly ProductionSlot[];
158
+ //# sourceMappingURL=cst-transformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cst-transformer.d.ts","sourceRoot":"","sources":["../../../src/lib/transform/cst-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,EAAuC,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE5F;;GAEG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IAEnC;;;;;OAKG;gBACgB,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU;IAM7D;;;;;OAKG;IACI,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI;IAUrD;;;;;;OAMG;WACW,SAAS,CACnB,GAAG,EAAE,OAAO,GAAG,IAAI,EACnB,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,UAAU,GAClB,OAAO,GAAG,IAAI;IAUjB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAiCrB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAwBvB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IA2BlB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IA2DrB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAsEtB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IA6BpB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IA2BxB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAyB5B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAiBrB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAUrB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;CAcvB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CACxB,GAAG,EAAE,OAAO,GAAG,IAAI,EACnB,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,UAAU,GAClB,OAAO,GAAG,IAAI,CAGhB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACnC,UAAU,EAAE,wBAAwB,GACrC,SAAS,cAAc,EAAE,CAG3B"}
@@ -0,0 +1,381 @@
1
+ import { AstNode } from '../ast/ast-node.js';
2
+ import { AUGMENTED_START_SYMBOL } from '../parse-table/bnf/bnf-grammar.js';
3
+ import { mergeChildLocations } from '../shift-reduce/shift-reduce-engine.js';
4
+ import { productionSlots, referenceSlotIndex } from './binding-map.js';
5
+ /**
6
+ * Applies CST-to-AST transform rules to a concrete syntax tree.
7
+ */
8
+ export class CstTransformer {
9
+ schema;
10
+ table;
11
+ /**
12
+ * Creates a transformer for a transform schema and parse table.
13
+ *
14
+ * @param schema - CST-to-AST rules from the grammar `transform` section.
15
+ * @param table - Parse table supplying production metadata for reference lookup.
16
+ */
17
+ constructor(schema, table) {
18
+ this.schema = schema;
19
+ this.table = table;
20
+ }
21
+ /**
22
+ * Transforms a concrete syntax tree into an abstract syntax tree.
23
+ *
24
+ * @param cst - Parse tree rooted at the grammar start symbol.
25
+ * @returns Transformed AST, or null when transformation fails.
26
+ */
27
+ transform(cst) {
28
+ if (cst === null) {
29
+ return null;
30
+ }
31
+ return this.transformNode(cst);
32
+ }
33
+ /**
34
+ * Transforms a CST using a transform schema and parse table.
35
+ *
36
+ * @param cst - Parse tree rooted at the grammar start symbol.
37
+ * @param schema - CST-to-AST rules from the grammar `transform` section.
38
+ * @param table - Parse table supplying production metadata for reference lookup.
39
+ */
40
+ static transform(cst, schema, table) {
41
+ if (cst === null) {
42
+ return null;
43
+ }
44
+ return new CstTransformer(schema, table).transform(cst);
45
+ }
46
+ /**
47
+ * Transforms one CST node and its descendants.
48
+ *
49
+ * @param node - CST node to transform.
50
+ */
51
+ transformNode(node) {
52
+ if (node.isTerminal) {
53
+ return node;
54
+ }
55
+ if (node.symbol === AUGMENTED_START_SYMBOL) {
56
+ return node.children.length === 1
57
+ ? this.transformNode(node.children[0])
58
+ : null;
59
+ }
60
+ const rule = this.schema.rule(node.symbol) ?? (node.origin === null ? null : this.schema.rule(node.origin));
61
+ if (rule === null) {
62
+ return this.defaultTransform(node);
63
+ }
64
+ const alternative = this.findAlternative(rule.alternatives, node);
65
+ if (alternative === null) {
66
+ return this.defaultTransform(node);
67
+ }
68
+ return this.applyExpression(node, alternative.expression);
69
+ }
70
+ /**
71
+ * Applies one transform expression to a CST node.
72
+ *
73
+ * @param node - CST node being transformed.
74
+ * @param expression - Transform expression for the matched alternative.
75
+ */
76
+ applyExpression(node, expression) {
77
+ switch (expression.kind) {
78
+ case 'drop':
79
+ return null;
80
+ case 'pass':
81
+ return this.transformReference(node, expression.reference);
82
+ case 'build':
83
+ return this.applyBuild(node, expression);
84
+ case 'foldLeft':
85
+ return this.applyFoldLeft(node, expression);
86
+ case 'foldRight':
87
+ return this.applyFoldRight(node, expression);
88
+ case 'flatten':
89
+ return this.applyFlatten(node, expression);
90
+ }
91
+ }
92
+ /**
93
+ * Builds an AST node from a `type.#variant(arg, …)` transform.
94
+ *
95
+ * @param node - CST node supplying bound child references.
96
+ * @param expression - Build transform expression.
97
+ */
98
+ applyBuild(node, expression) {
99
+ const children = [];
100
+ for (const reference of expression.arguments) {
101
+ const child = this.transformReference(node, reference);
102
+ if (child === null) {
103
+ return null;
104
+ }
105
+ children.push(child);
106
+ }
107
+ return AstNode.rule(expression.typeName, children, mergeChildLocations(children) ?? node.location, expression.variant);
108
+ }
109
+ /**
110
+ * Left-folds repeated infix operators into chained AST nodes.
111
+ *
112
+ * @param node - CST node for one operator application or repeat segment.
113
+ * @param expression - Fold-left transform expression.
114
+ */
115
+ applyFoldLeft(node, expression) {
116
+ const slots = this.resolveReferences(node, expression.references);
117
+ if (slots === null) {
118
+ return null;
119
+ }
120
+ const [leftRef, operatorRef, rightRef] = expression.references;
121
+ const left = this.transformReference(node, leftRef);
122
+ const operator = this.transformReference(node, operatorRef);
123
+ const right = this.transformReference(node, rightRef);
124
+ if (left === null || operator === null || right === null) {
125
+ return null;
126
+ }
127
+ let acc = this.buildAstNode(expression.typeName, expression.variant, [left, operator, right], node.location);
128
+ let tail = this.findRepeatTail(node, slots);
129
+ while (tail !== null && !this.isEpsilonNode(tail)) {
130
+ const tailSlots = this.resolveReferences(tail, expression.references);
131
+ if (tailSlots === null) {
132
+ return null;
133
+ }
134
+ const tailOperator = this.transformReference(tail, operatorRef);
135
+ const tailRight = this.transformReference(tail, rightRef);
136
+ if (tailOperator === null || tailRight === null) {
137
+ return null;
138
+ }
139
+ acc = this.buildAstNode(expression.typeName, expression.variant, [acc, tailOperator, tailRight], mergeChildLocations([acc, tailRight]) ?? node.location);
140
+ tail = this.findRepeatTail(tail, tailSlots);
141
+ }
142
+ return acc;
143
+ }
144
+ /**
145
+ * Right-folds repeated infix operators into chained AST nodes.
146
+ *
147
+ * @param node - CST node for one operator application or repeat segment.
148
+ * @param expression - Fold-right transform expression.
149
+ */
150
+ applyFoldRight(node, expression) {
151
+ const parts = [];
152
+ let current = node;
153
+ while (current !== null && !this.isEpsilonNode(current)) {
154
+ const leftRef = expression.references[0];
155
+ const operatorRef = expression.references[1];
156
+ const rightRef = expression.references[2];
157
+ if (leftRef === undefined || operatorRef === undefined || rightRef === undefined) {
158
+ return null;
159
+ }
160
+ const slots = this.resolveReferences(current, expression.references);
161
+ if (slots === null) {
162
+ return null;
163
+ }
164
+ const left = this.transformReference(current, leftRef);
165
+ const operator = this.transformReference(current, operatorRef);
166
+ const right = this.transformReference(current, rightRef);
167
+ if (left === null || operator === null || right === null) {
168
+ return null;
169
+ }
170
+ parts.push({ left, operator, right });
171
+ current = this.findRepeatTail(current, slots);
172
+ }
173
+ if (parts.length === 0) {
174
+ return null;
175
+ }
176
+ let acc = parts[parts.length - 1]?.right ?? null;
177
+ for (let index = parts.length - 1; index >= 0; index -= 1) {
178
+ const part = parts[index];
179
+ if (part === undefined || acc === null) {
180
+ return null;
181
+ }
182
+ acc = this.buildAstNode(expression.typeName, expression.variant, [part.left, part.operator, acc], mergeChildLocations([part.left, acc]) ?? node.location);
183
+ }
184
+ return acc;
185
+ }
186
+ /**
187
+ * Flattens a `{ head tail }` repetition into one list AST node.
188
+ *
189
+ * @param node - CST node for one repeat segment.
190
+ * @param expression - Flatten transform expression.
191
+ */
192
+ applyFlatten(node, expression) {
193
+ const items = [];
194
+ let current = node;
195
+ while (current !== null && !this.isEpsilonNode(current)) {
196
+ const head = this.transformReference(current, expression.head);
197
+ if (head === null) {
198
+ return null;
199
+ }
200
+ items.push(head);
201
+ current = this.resolveReferenceNode(current, expression.tail);
202
+ }
203
+ return AstNode.rule(expression.typeName, items, mergeChildLocations(items) ?? node.location, expression.variant);
204
+ }
205
+ /**
206
+ * Transforms a CST node without explicit transform rules.
207
+ *
208
+ * @param node - CST node to pass through or unwrap.
209
+ */
210
+ defaultTransform(node) {
211
+ if (this.isEpsilonNode(node)) {
212
+ return null;
213
+ }
214
+ const children = this.transformChildren(node.children);
215
+ if (children.length === 1) {
216
+ return children[0];
217
+ }
218
+ if (children.length === 0) {
219
+ return null;
220
+ }
221
+ return AstNode.rule(node.symbol, children, mergeChildLocations(children) ?? node.location, node.variant);
222
+ }
223
+ /**
224
+ * Transforms and compacts a list of child CST nodes.
225
+ *
226
+ * @param children - Child CST nodes.
227
+ */
228
+ transformChildren(children) {
229
+ const transformed = [];
230
+ for (const child of children) {
231
+ const node = this.transformNode(child);
232
+ if (node !== null) {
233
+ transformed.push(node);
234
+ }
235
+ }
236
+ return transformed;
237
+ }
238
+ /**
239
+ * Transforms one referenced child of a CST node.
240
+ *
241
+ * @param node - Parent CST node.
242
+ * @param reference - Binding or symbol name from a transform expression.
243
+ */
244
+ transformReference(node, reference) {
245
+ const child = this.resolveReferenceNode(node, reference);
246
+ if (child === null) {
247
+ return null;
248
+ }
249
+ return this.transformNode(child);
250
+ }
251
+ /**
252
+ * Returns the CST child for a transform reference name.
253
+ *
254
+ * @param node - Parent CST node.
255
+ * @param reference - Binding or symbol name from a transform expression.
256
+ */
257
+ resolveReferenceNode(node, reference) {
258
+ const production = this.productionFor(node);
259
+ if (production !== null) {
260
+ const slotIndex = referenceSlotIndex(production, reference);
261
+ if (slotIndex !== null) {
262
+ return node.children[slotIndex] ?? null;
263
+ }
264
+ }
265
+ for (const child of node.children) {
266
+ if (child.symbol === reference || child.origin === reference) {
267
+ return child;
268
+ }
269
+ }
270
+ return null;
271
+ }
272
+ /**
273
+ * Resolves transform references to CST child nodes.
274
+ *
275
+ * @param node - Parent CST node.
276
+ * @param references - Reference names from a transform expression.
277
+ */
278
+ resolveReferences(node, references) {
279
+ const resolved = [];
280
+ for (const reference of references) {
281
+ const child = this.resolveReferenceNode(node, reference);
282
+ if (child === null) {
283
+ return null;
284
+ }
285
+ resolved.push(child);
286
+ }
287
+ return resolved;
288
+ }
289
+ /**
290
+ * Returns the recursive tail child for a repeat production node.
291
+ *
292
+ * @param node - Repeat CST node.
293
+ * @param resolved - Resolved reference child nodes.
294
+ */
295
+ findRepeatTail(node, resolved) {
296
+ const lastChild = node.children[node.children.length - 1];
297
+ if (lastChild !== undefined && (lastChild.symbol === node.symbol || lastChild.origin === node.origin)) {
298
+ return lastChild;
299
+ }
300
+ for (const child of resolved) {
301
+ if (child.symbol === node.symbol || child.origin === node.origin) {
302
+ return child;
303
+ }
304
+ }
305
+ return null;
306
+ }
307
+ /**
308
+ * Returns whether a CST node represents an epsilon production.
309
+ *
310
+ * @param node - CST node to test.
311
+ */
312
+ isEpsilonNode(node) {
313
+ if (node.isTerminal) {
314
+ return false;
315
+ }
316
+ if (node.children.length > 0) {
317
+ return false;
318
+ }
319
+ const production = this.productionFor(node);
320
+ return production !== null && production.rhs.length === 0;
321
+ }
322
+ /**
323
+ * Returns parse table production metadata for a CST node.
324
+ *
325
+ * @param node - CST node reduced by a known production.
326
+ */
327
+ productionFor(node) {
328
+ if (node.productionId === null) {
329
+ return null;
330
+ }
331
+ return this.table.production(node.productionId);
332
+ }
333
+ /**
334
+ * Finds the transform alternative matching a CST node variant.
335
+ *
336
+ * @param alternatives - Transform alternatives for one production.
337
+ * @param node - CST node being transformed.
338
+ */
339
+ findAlternative(alternatives, node) {
340
+ if (node.variant !== null) {
341
+ const matched = alternatives.find((alternative) => alternative.label === node.variant);
342
+ if (matched !== undefined) {
343
+ return matched;
344
+ }
345
+ }
346
+ if (alternatives.length === 1) {
347
+ return alternatives[0];
348
+ }
349
+ return null;
350
+ }
351
+ /**
352
+ * Builds an AST interior node from transformed children.
353
+ *
354
+ * @param typeName - AST type name.
355
+ * @param variant - AST variant label.
356
+ * @param children - Transformed child nodes.
357
+ * @param location - Optional source span.
358
+ */
359
+ buildAstNode(typeName, variant, children, location) {
360
+ return AstNode.rule(typeName, [...children], location, variant);
361
+ }
362
+ }
363
+ /**
364
+ * Transforms a CST into an AST using transform rules and production metadata.
365
+ *
366
+ * @param cst - Parse tree rooted at the grammar start symbol.
367
+ * @param schema - CST-to-AST rules from the grammar `transform` section.
368
+ * @param table - Parse table supplying production metadata for reference lookup.
369
+ */
370
+ export function transformCst(cst, schema, table) {
371
+ return CstTransformer.transform(cst, schema, table);
372
+ }
373
+ /**
374
+ * Returns indexed slots for one production, for use in tests and diagnostics.
375
+ *
376
+ * @param production - Parse table production metadata.
377
+ */
378
+ export function describeProductionSlots(production) {
379
+ return productionSlots(production);
380
+ }
381
+ //# sourceMappingURL=cst-transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cst-transformer.js","sourceRoot":"","sources":["../../../src/lib/transform/cst-transformer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { parseRhsSymbolKey, productionSlots, referenceSlotIndex } from './binding-map.js';
2
+ export type { ProductionSlot } from './binding-map.js';
3
+ export { CstTransformer, describeProductionSlots, transformCst } from './cst-transformer.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/transform/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1F,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { parseRhsSymbolKey, productionSlots, referenceSlotIndex } from './binding-map.js';
2
+ export { CstTransformer, describeProductionSlots, transformCst } from './cst-transformer.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/transform/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE1F,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "parser-lr",
3
3
  "author": "Adam R Moss <adamrmoss@gmail.com>",
4
- "version": "0.0.0",
4
+ "version": "0.2.0",
5
5
  "description": "Shift-reduce parser library for EBNF grammars",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -29,21 +29,28 @@
29
29
  "registry": "https://registry.npmjs.org/"
30
30
  },
31
31
  "scripts": {
32
+ "publish": "npm run build && npm publish",
33
+ "bootstrap": "npm link && parser-lr table generate -g grammars/grammar.grammar -o src/lib/grammar/grammar.json",
32
34
  "build": "npm run build:clean && npm run build:lib && npm run build:cli",
33
35
  "build:clean": "rm -rf dist && rm -f bin/parser-lr.js bin/parser-lr.js.map",
34
- "build:lib": "tsc -p tsconfig.lib.json",
35
- "build:cli": "rollup -c rollup.cli.config.js",
36
+ "build:lib": "tsc -p tsconfig.lib.json && cp src/lib/grammar/grammar.json dist/lib/grammar/",
37
+ "build:cli": "rollup -c rollup.cli.config.js && chmod +x bin/parser-lr.js",
38
+ "test": "jest",
36
39
  "prepack": "npm run build"
37
40
  },
38
41
  "dependencies": {},
39
42
  "devDependencies": {
43
+ "@jest/globals": "29.x",
40
44
  "@rollup/plugin-commonjs": "28.x",
41
45
  "@rollup/plugin-json": "6.x",
42
46
  "@rollup/plugin-node-resolve": "16.x",
43
47
  "@rollup/plugin-typescript": "12.x",
48
+ "@types/jest": "29.x",
44
49
  "@types/node": "22.x",
45
50
  "commander": "12.x",
51
+ "jest": "29.x",
46
52
  "rollup": "4.x",
53
+ "ts-jest": "29.x",
47
54
  "tslib": "2.x",
48
55
  "typescript": "5.x"
49
56
  }