@witchcraft/expressit 0.0.2

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 (307) hide show
  1. package/README.md +86 -0
  2. package/dist/ast/builders/array.d.ts +8 -0
  3. package/dist/ast/builders/array.d.ts.map +1 -0
  4. package/dist/ast/builders/array.js +31 -0
  5. package/dist/ast/builders/condition.d.ts +20 -0
  6. package/dist/ast/builders/condition.d.ts.map +1 -0
  7. package/dist/ast/builders/condition.js +28 -0
  8. package/dist/ast/builders/delim.d.ts +11 -0
  9. package/dist/ast/builders/delim.d.ts.map +1 -0
  10. package/dist/ast/builders/delim.js +20 -0
  11. package/dist/ast/builders/error.d.ts +9 -0
  12. package/dist/ast/builders/error.d.ts.map +1 -0
  13. package/dist/ast/builders/error.js +16 -0
  14. package/dist/ast/builders/expression.d.ts +12 -0
  15. package/dist/ast/builders/expression.d.ts.map +1 -0
  16. package/dist/ast/builders/expression.js +31 -0
  17. package/dist/ast/builders/group.d.ts +20 -0
  18. package/dist/ast/builders/group.d.ts.map +1 -0
  19. package/dist/ast/builders/group.js +47 -0
  20. package/dist/ast/builders/index.d.ts +12 -0
  21. package/dist/ast/builders/index.d.ts.map +1 -0
  22. package/dist/ast/builders/index.js +24 -0
  23. package/dist/ast/builders/isFullPos.d.ts +6 -0
  24. package/dist/ast/builders/isFullPos.d.ts.map +1 -0
  25. package/dist/ast/builders/isFullPos.js +6 -0
  26. package/dist/ast/builders/pos.d.ts +21 -0
  27. package/dist/ast/builders/pos.d.ts.map +1 -0
  28. package/dist/ast/builders/pos.js +28 -0
  29. package/dist/ast/builders/token.d.ts +12 -0
  30. package/dist/ast/builders/token.d.ts.map +1 -0
  31. package/dist/ast/builders/token.js +26 -0
  32. package/dist/ast/builders/type.d.ts +6 -0
  33. package/dist/ast/builders/type.d.ts.map +1 -0
  34. package/dist/ast/builders/type.js +37 -0
  35. package/dist/ast/builders/variable.d.ts +17 -0
  36. package/dist/ast/builders/variable.d.ts.map +1 -0
  37. package/dist/ast/builders/variable.js +62 -0
  38. package/dist/ast/classes/ArrayNode.d.ts +18 -0
  39. package/dist/ast/classes/ArrayNode.d.ts.map +1 -0
  40. package/dist/ast/classes/ArrayNode.js +55 -0
  41. package/dist/ast/classes/Condition.d.ts +13 -0
  42. package/dist/ast/classes/Condition.d.ts.map +1 -0
  43. package/dist/ast/classes/Condition.js +21 -0
  44. package/dist/ast/classes/ConditionNode.d.ts +73 -0
  45. package/dist/ast/classes/ConditionNode.d.ts.map +1 -0
  46. package/dist/ast/classes/ConditionNode.js +101 -0
  47. package/dist/ast/classes/ErrorToken.d.ts +27 -0
  48. package/dist/ast/classes/ErrorToken.d.ts.map +1 -0
  49. package/dist/ast/classes/ErrorToken.js +47 -0
  50. package/dist/ast/classes/Expression.d.ts +13 -0
  51. package/dist/ast/classes/Expression.d.ts.map +1 -0
  52. package/dist/ast/classes/Expression.js +19 -0
  53. package/dist/ast/classes/ExpressionNode.d.ts +21 -0
  54. package/dist/ast/classes/ExpressionNode.d.ts.map +1 -0
  55. package/dist/ast/classes/ExpressionNode.js +57 -0
  56. package/dist/ast/classes/GroupNode.d.ts +64 -0
  57. package/dist/ast/classes/GroupNode.d.ts.map +1 -0
  58. package/dist/ast/classes/GroupNode.js +69 -0
  59. package/dist/ast/classes/Node.d.ts +22 -0
  60. package/dist/ast/classes/Node.d.ts.map +1 -0
  61. package/dist/ast/classes/Node.js +28 -0
  62. package/dist/ast/classes/Token.d.ts +27 -0
  63. package/dist/ast/classes/Token.d.ts.map +1 -0
  64. package/dist/ast/classes/Token.js +28 -0
  65. package/dist/ast/classes/ValidToken.d.ts +26 -0
  66. package/dist/ast/classes/ValidToken.d.ts.map +1 -0
  67. package/dist/ast/classes/ValidToken.js +49 -0
  68. package/dist/ast/classes/VariableNode.d.ts +33 -0
  69. package/dist/ast/classes/VariableNode.d.ts.map +1 -0
  70. package/dist/ast/classes/VariableNode.js +58 -0
  71. package/dist/ast/classes/index.d.ts +12 -0
  72. package/dist/ast/classes/index.d.ts.map +1 -0
  73. package/dist/ast/classes/index.js +24 -0
  74. package/dist/ast/handlers.d.ts +42 -0
  75. package/dist/ast/handlers.d.ts.map +1 -0
  76. package/dist/ast/handlers.js +150 -0
  77. package/dist/ast/index.d.ts +4 -0
  78. package/dist/ast/index.d.ts.map +1 -0
  79. package/dist/ast/index.js +8 -0
  80. package/dist/examples/advancedValueComparer.d.ts +3 -0
  81. package/dist/examples/advancedValueComparer.d.ts.map +1 -0
  82. package/dist/examples/advancedValueComparer.js +28 -0
  83. package/dist/examples/shortcutContextParser.d.ts +22 -0
  84. package/dist/examples/shortcutContextParser.d.ts.map +1 -0
  85. package/dist/examples/shortcutContextParser.js +126 -0
  86. package/dist/global.d.js +1 -0
  87. package/dist/grammar/ParserBase.d.ts +51 -0
  88. package/dist/grammar/ParserBase.d.ts.map +1 -0
  89. package/dist/grammar/ParserBase.js +516 -0
  90. package/dist/grammar/createTokens.d.ts +56 -0
  91. package/dist/grammar/createTokens.d.ts.map +1 -0
  92. package/dist/grammar/createTokens.js +843 -0
  93. package/dist/grammar/index.d.ts +3 -0
  94. package/dist/grammar/index.d.ts.map +1 -0
  95. package/dist/grammar/index.js +6 -0
  96. package/dist/helpers/errors.d.ts +9 -0
  97. package/dist/helpers/errors.d.ts.map +1 -0
  98. package/dist/helpers/errors.js +41 -0
  99. package/dist/helpers/general/applyBoolean.d.ts +3 -0
  100. package/dist/helpers/general/applyBoolean.d.ts.map +1 -0
  101. package/dist/helpers/general/applyBoolean.js +17 -0
  102. package/dist/helpers/general/applyPrefix.d.ts +4 -0
  103. package/dist/helpers/general/applyPrefix.d.ts.map +1 -0
  104. package/dist/helpers/general/applyPrefix.js +9 -0
  105. package/dist/helpers/general/defaultConditionNormalizer.d.ts +3 -0
  106. package/dist/helpers/general/defaultConditionNormalizer.d.ts.map +1 -0
  107. package/dist/helpers/general/defaultConditionNormalizer.js +6 -0
  108. package/dist/helpers/general/defaultKeyParser.d.ts +3 -0
  109. package/dist/helpers/general/defaultKeyParser.d.ts.map +1 -0
  110. package/dist/helpers/general/defaultKeyParser.js +8 -0
  111. package/dist/helpers/general/defaultPrefixApplier.d.ts +3 -0
  112. package/dist/helpers/general/defaultPrefixApplier.d.ts.map +1 -0
  113. package/dist/helpers/general/defaultPrefixApplier.js +6 -0
  114. package/dist/helpers/general/defaultValueComparer.d.ts +3 -0
  115. package/dist/helpers/general/defaultValueComparer.d.ts.map +1 -0
  116. package/dist/helpers/general/defaultValueComparer.js +6 -0
  117. package/dist/helpers/general/index.d.ts +7 -0
  118. package/dist/helpers/general/index.d.ts.map +1 -0
  119. package/dist/helpers/general/index.js +14 -0
  120. package/dist/helpers/index.d.ts +4 -0
  121. package/dist/helpers/index.d.ts.map +1 -0
  122. package/dist/helpers/index.js +8 -0
  123. package/dist/helpers/parser/assignParents.d.ts +4 -0
  124. package/dist/helpers/parser/assignParents.d.ts.map +1 -0
  125. package/dist/helpers/parser/assignParents.js +71 -0
  126. package/dist/helpers/parser/checkParserOpts.d.ts +3 -0
  127. package/dist/helpers/parser/checkParserOpts.d.ts.map +1 -0
  128. package/dist/helpers/parser/checkParserOpts.js +126 -0
  129. package/dist/helpers/parser/extractPosition.d.ts +9 -0
  130. package/dist/helpers/parser/extractPosition.d.ts.map +1 -0
  131. package/dist/helpers/parser/extractPosition.js +9 -0
  132. package/dist/helpers/parser/getUnclosedRightParenCount.d.ts +5 -0
  133. package/dist/helpers/parser/getUnclosedRightParenCount.d.ts.map +1 -0
  134. package/dist/helpers/parser/getUnclosedRightParenCount.js +20 -0
  135. package/dist/helpers/parser/index.d.ts +9 -0
  136. package/dist/helpers/parser/index.d.ts.map +1 -0
  137. package/dist/helpers/parser/index.js +18 -0
  138. package/dist/helpers/parser/parseParserOptions.d.ts +4 -0
  139. package/dist/helpers/parser/parseParserOptions.d.ts.map +1 -0
  140. package/dist/helpers/parser/parseParserOptions.js +45 -0
  141. package/dist/helpers/parser/seal.d.ts +8 -0
  142. package/dist/helpers/parser/seal.d.ts.map +1 -0
  143. package/dist/helpers/parser/seal.js +10 -0
  144. package/dist/helpers/parser/setParent.d.ts +6 -0
  145. package/dist/helpers/parser/setParent.d.ts.map +1 -0
  146. package/dist/helpers/parser/setParent.js +4 -0
  147. package/dist/helpers/parser/unescape.d.ts +3 -0
  148. package/dist/helpers/parser/unescape.d.ts.map +1 -0
  149. package/dist/helpers/parser/unescape.js +6 -0
  150. package/dist/index.d.ts +6 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +17 -0
  153. package/dist/methods/autocomplete.d.ts +18 -0
  154. package/dist/methods/autocomplete.d.ts.map +1 -0
  155. package/dist/methods/autocomplete.js +109 -0
  156. package/dist/methods/autoreplace.d.ts +13 -0
  157. package/dist/methods/autoreplace.d.ts.map +1 -0
  158. package/dist/methods/autoreplace.js +36 -0
  159. package/dist/methods/autosuggest.d.ts +28 -0
  160. package/dist/methods/autosuggest.d.ts.map +1 -0
  161. package/dist/methods/autosuggest.js +371 -0
  162. package/dist/methods/evaluate.d.ts +11 -0
  163. package/dist/methods/evaluate.d.ts.map +1 -0
  164. package/dist/methods/evaluate.js +30 -0
  165. package/dist/methods/getBestIndex.d.ts +19 -0
  166. package/dist/methods/getBestIndex.d.ts.map +1 -0
  167. package/dist/methods/getBestIndex.js +53 -0
  168. package/dist/methods/getIndexes.d.ts +17 -0
  169. package/dist/methods/getIndexes.d.ts.map +1 -0
  170. package/dist/methods/getIndexes.js +97 -0
  171. package/dist/methods/index.d.ts +9 -0
  172. package/dist/methods/index.d.ts.map +1 -0
  173. package/dist/methods/index.js +18 -0
  174. package/dist/methods/normalize.d.ts +12 -0
  175. package/dist/methods/normalize.d.ts.map +1 -0
  176. package/dist/methods/normalize.js +99 -0
  177. package/dist/methods/validate.d.ts +11 -0
  178. package/dist/methods/validate.d.ts.map +1 -0
  179. package/dist/methods/validate.js +111 -0
  180. package/dist/package.js +7 -0
  181. package/dist/package.json.js +193 -0
  182. package/dist/parser.d.ts +58 -0
  183. package/dist/parser.d.ts.map +1 -0
  184. package/dist/parser.js +136 -0
  185. package/dist/types/ast.d.ts +70 -0
  186. package/dist/types/ast.d.ts.map +1 -0
  187. package/dist/types/ast.js +29 -0
  188. package/dist/types/autocomplete.d.ts +143 -0
  189. package/dist/types/autocomplete.d.ts.map +1 -0
  190. package/dist/types/autocomplete.js +24 -0
  191. package/dist/types/errors.d.ts +34 -0
  192. package/dist/types/errors.d.ts.map +1 -0
  193. package/dist/types/errors.js +10 -0
  194. package/dist/types/index.d.ts +5 -0
  195. package/dist/types/index.d.ts.map +1 -0
  196. package/dist/types/index.js +9 -0
  197. package/dist/types/parser.d.ts +451 -0
  198. package/dist/types/parser.d.ts.map +1 -0
  199. package/dist/types/parser.js +1 -0
  200. package/dist/utils/extractTokens.d.ts +8 -0
  201. package/dist/utils/extractTokens.d.ts.map +1 -0
  202. package/dist/utils/extractTokens.js +50 -0
  203. package/dist/utils/getCursorInfo.d.ts +7 -0
  204. package/dist/utils/getCursorInfo.d.ts.map +1 -0
  205. package/dist/utils/getCursorInfo.js +86 -0
  206. package/dist/utils/getOppositeDelimiter.d.ts +6 -0
  207. package/dist/utils/getOppositeDelimiter.d.ts.map +1 -0
  208. package/dist/utils/getOppositeDelimiter.js +35 -0
  209. package/dist/utils/getSurroundingErrors.d.ts +25 -0
  210. package/dist/utils/getSurroundingErrors.d.ts.map +1 -0
  211. package/dist/utils/getSurroundingErrors.js +37 -0
  212. package/dist/utils/index.d.ts +10 -0
  213. package/dist/utils/index.d.ts.map +1 -0
  214. package/dist/utils/index.js +20 -0
  215. package/dist/utils/isBracket.d.ts +3 -0
  216. package/dist/utils/isBracket.d.ts.map +1 -0
  217. package/dist/utils/isBracket.js +7 -0
  218. package/dist/utils/isDelimiter.d.ts +6 -0
  219. package/dist/utils/isDelimiter.d.ts.map +1 -0
  220. package/dist/utils/isDelimiter.js +17 -0
  221. package/dist/utils/isParen.d.ts +3 -0
  222. package/dist/utils/isParen.d.ts.map +1 -0
  223. package/dist/utils/isParen.js +7 -0
  224. package/dist/utils/isQuote.d.ts +4 -0
  225. package/dist/utils/isQuote.d.ts.map +1 -0
  226. package/dist/utils/isQuote.js +7 -0
  227. package/dist/utils/prettyAst.d.ts +35 -0
  228. package/dist/utils/prettyAst.d.ts.map +1 -0
  229. package/dist/utils/prettyAst.js +112 -0
  230. package/package.json +152 -0
  231. package/src/ast/builders/array.ts +45 -0
  232. package/src/ast/builders/condition.ts +56 -0
  233. package/src/ast/builders/delim.ts +39 -0
  234. package/src/ast/builders/error.ts +22 -0
  235. package/src/ast/builders/expression.ts +66 -0
  236. package/src/ast/builders/group.ts +79 -0
  237. package/src/ast/builders/index.ts +13 -0
  238. package/src/ast/builders/isFullPos.ts +10 -0
  239. package/src/ast/builders/pos.ts +57 -0
  240. package/src/ast/builders/token.ts +46 -0
  241. package/src/ast/builders/type.ts +32 -0
  242. package/src/ast/builders/variable.ts +89 -0
  243. package/src/ast/classes/ArrayNode.ts +46 -0
  244. package/src/ast/classes/Condition.ts +22 -0
  245. package/src/ast/classes/ConditionNode.ts +141 -0
  246. package/src/ast/classes/ErrorToken.ts +49 -0
  247. package/src/ast/classes/Expression.ts +26 -0
  248. package/src/ast/classes/ExpressionNode.ts +62 -0
  249. package/src/ast/classes/GroupNode.ts +127 -0
  250. package/src/ast/classes/Node.ts +47 -0
  251. package/src/ast/classes/Token.ts +59 -0
  252. package/src/ast/classes/ValidToken.ts +56 -0
  253. package/src/ast/classes/VariableNode.ts +67 -0
  254. package/src/ast/classes/index.ts +13 -0
  255. package/src/ast/handlers.ts +190 -0
  256. package/src/ast/index.ts +5 -0
  257. package/src/examples/advancedValueComparer.ts +31 -0
  258. package/src/examples/shortcutContextParser.ts +140 -0
  259. package/src/global.d.ts +4 -0
  260. package/src/grammar/ParserBase.ts +715 -0
  261. package/src/grammar/createTokens.ts +512 -0
  262. package/src/grammar/index.ts +4 -0
  263. package/src/helpers/errors.ts +45 -0
  264. package/src/helpers/general/applyBoolean.ts +9 -0
  265. package/src/helpers/general/applyPrefix.ts +7 -0
  266. package/src/helpers/general/defaultConditionNormalizer.ts +9 -0
  267. package/src/helpers/general/defaultKeyParser.ts +8 -0
  268. package/src/helpers/general/defaultPrefixApplier.ts +7 -0
  269. package/src/helpers/general/defaultValueComparer.ts +7 -0
  270. package/src/helpers/general/index.ts +8 -0
  271. package/src/helpers/index.ts +5 -0
  272. package/src/helpers/parser/assignParents.ts +51 -0
  273. package/src/helpers/parser/checkParserOpts.ts +143 -0
  274. package/src/helpers/parser/extractPosition.ts +15 -0
  275. package/src/helpers/parser/getUnclosedRightParenCount.ts +22 -0
  276. package/src/helpers/parser/index.ts +10 -0
  277. package/src/helpers/parser/parseParserOptions.ts +54 -0
  278. package/src/helpers/parser/seal.ts +14 -0
  279. package/src/helpers/parser/setParent.ts +5 -0
  280. package/src/helpers/parser/unescape.ts +4 -0
  281. package/src/index.ts +7 -0
  282. package/src/methods/autocomplete.ts +128 -0
  283. package/src/methods/autoreplace.ts +46 -0
  284. package/src/methods/autosuggest.ts +543 -0
  285. package/src/methods/evaluate.ts +37 -0
  286. package/src/methods/getBestIndex.ts +53 -0
  287. package/src/methods/getIndexes.ts +99 -0
  288. package/src/methods/index.ts +10 -0
  289. package/src/methods/normalize.ts +138 -0
  290. package/src/methods/validate.ts +141 -0
  291. package/src/package.js +11 -0
  292. package/src/parser.ts +183 -0
  293. package/src/types/ast.ts +148 -0
  294. package/src/types/autocomplete.ts +152 -0
  295. package/src/types/errors.ts +40 -0
  296. package/src/types/index.ts +6 -0
  297. package/src/types/parser.ts +479 -0
  298. package/src/utils/extractTokens.ts +67 -0
  299. package/src/utils/getCursorInfo.ts +106 -0
  300. package/src/utils/getOppositeDelimiter.ts +36 -0
  301. package/src/utils/getSurroundingErrors.ts +57 -0
  302. package/src/utils/index.ts +11 -0
  303. package/src/utils/isBracket.ts +6 -0
  304. package/src/utils/isDelimiter.ts +18 -0
  305. package/src/utils/isParen.ts +6 -0
  306. package/src/utils/isQuote.ts +6 -0
  307. package/src/utils/prettyAst.ts +152 -0
package/README.md ADDED
@@ -0,0 +1,86 @@
1
+
2
+ ### 🚧 WORK IN PROGRESS 🚧
3
+
4
+ ![Docs](https://github.com/witchcraftjs/expressit/workflows/Docs/badge.svg)
5
+ ![Build](https://github.com/witchcraftjs/expressit/workflows/Build/badge.svg)
6
+ [![Release](https://github.com/witchcraftjs/expressit/workflows/Release/badge.svg)](https://www.npmjs.com/@witchcraft/expressit)
7
+
8
+ Expressit is a blazing fast, customizable, error-tolerant expression parser that creates safe to eval expressions + a few other goodies.
9
+
10
+ # [Docs](https://witchcraftjs.github.io/expressit)
11
+ # [Demo](https://witchcraftjs.github.io/expressit/demo)
12
+ # Install
13
+
14
+ ```
15
+ pnpm install @witchcraft/expressit
16
+ ```
17
+
18
+ # Features
19
+ - **Error Recovery**
20
+ - The parser is designed to recover from ALL errors, even **multiple** errors, making it easy to provide things like syntax highlighting.
21
+ - **Custom Operator Keywords**
22
+ - You can use whatever keywords you want for the operators and their strictness (whether something like `oregano` will parse to `or egano` or `oregano` can be adjusted to allow the use of keywords (usually symbols) without whitespace).
23
+ - **Prefixed Group Parsing (optional)**
24
+ - Adds the ability do `prefix(variable)` which gets expanded into `prefixvariable`. You can also customize how they get prefixed (e.g. you can make `prefix(variable)` expand to `prefix.variable` instead).
25
+ - **Custom Property Operator**
26
+ - Extended with custom separator (e.g. `:`): `property:OP:value`.
27
+ - Custom set (e.g. `=`, `>`, `<`, etc): `property=value`.
28
+ - **Array(optional), Regex(optional), and Group Values**
29
+ - Can be parsed alone, but intended for use with custom property operators: `prop=[val1, val2]`, `prop=/regex/flags`, `prop=(a || b)`.
30
+ - **Batteries Included**
31
+ - Can `validate` (for syntax highlighting) and `evaluate` ASTs according to custom rules.
32
+ - **Autosuggest/complete/replace Helpers**
33
+ - Never think about autocompletion ever again!
34
+ - **Other Useful Utility Functions:**
35
+ - `extractTokens`, `getCursorInfo`, `getOppositeDelimiter`, `getSurroundingErrors` - useful for adding custom syntax highlighting.
36
+ - `prettyAst` - pretty prints a compact version of the ast for debugging
37
+ - other minor helpers - `isDelimiter`, `isQuote`, etc.
38
+ - **Pre-Configured Parsers** - Includes a pre-configured boolean parser (intended for parsing shortcut contexts in a similar way to VS Code).
39
+ - **Lots of Docs and Tests**
40
+
41
+ # Usage
42
+
43
+ ```ts
44
+ import { Parser, ErrorToken } from "@witchcraft/expressit"
45
+
46
+ const parser = new Parser({/* opts */})
47
+ const context = {
48
+ a: false,
49
+ b: true
50
+ }
51
+
52
+ // USER INPUT
53
+ const input = "a || b"
54
+ const cursor = 1 // a| || b
55
+
56
+ const ast = parser.parse(input)
57
+
58
+ if (ast instanceof ErrorToken || !ast.valid) {
59
+ // ...show regular errors (no input, missing tokens, etc)
60
+ } else {
61
+ // validation can be controlled by parser options
62
+ const errors = parser.validate(ast)
63
+ // ...show more complex errors, e.g. unknown variables, etc
64
+ }
65
+
66
+ // ON AUTOCOMPLETE
67
+ const suggestions = parser.autosuggest(input, ast, cursor)
68
+ const completions = parser.autocomplete(suggestions, {
69
+ // known possible suggestions
70
+ variables: ["c", "d", "e"],
71
+ // can also be values, prefixes, keywords, properties, etc
72
+ })
73
+ // ...show completions
74
+
75
+ // ON ENTER/SUBMIT
76
+ const res = parser.evaluate(ast, context)
77
+ ```
78
+ Many more examples can be found in the [tests](https://github.com/witchcraftjs/expressit/blob/master/tests), and there's also some WIP pre-configured parsers in [src/examples](https://github.com/witchcraftjs/expressit/blob/master/src/examples/) whose usage can be seen in [./test/examples.spec.ts](https://github.com/witchcraftjs/expressit/blob/master/test/examples.spec.ts).
79
+
80
+ ## [Development](./docs-src/DEVELOPMENT.md)
81
+
82
+ ## Related
83
+
84
+ [Shortcuts Manager](https://github.com/alanscodelog/shortcuts-manager)
85
+
86
+ [Parsekey (shortcuts parser)](https://github.com/alanscodelog/parsekey)
@@ -0,0 +1,8 @@
1
+ import { type Position } from "../../types/ast.js";
2
+ import { ArrayNode } from "../classes/ArrayNode.js";
3
+ import type { VariableNode } from "../classes/VariableNode.js";
4
+ export declare function array(values: VariableNode[], bracket?: {
5
+ left?: boolean;
6
+ right?: boolean;
7
+ }, parenLeftPos?: Position, parenRightPos?: Position): ArrayNode;
8
+ //# sourceMappingURL=array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../src/ast/builders/array.ts"],"names":[],"mappings":"AAIA,OAAO,EAAY,KAAK,QAAQ,EAAc,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAG9D,wBAAgB,KAAK,CACpB,MAAM,EAAE,YAAY,EAAE,EACtB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAgC,EAC1E,YAAY,CAAC,EAAE,QAAQ,EACvB,aAAa,CAAC,EAAE,QAAQ,GACtB,SAAS,CA8BX"}
@@ -0,0 +1,31 @@
1
+ import { token } from "./token.js";
2
+ import { AST_TYPE, TOKEN_TYPE } from "../../types/ast.js";
3
+ import { ArrayNode } from "../classes/ArrayNode.js";
4
+ function array(values, bracket = { right: true, left: true }, parenLeftPos, parenRightPos) {
5
+ var _a, _b, _c, _d, _e, _f;
6
+ const node = {
7
+ type: AST_TYPE.ARRAY,
8
+ values
9
+ };
10
+ node.bracket = {};
11
+ const start = ((_a = values[0]) == null ? void 0 : _a.start) ?? (parenLeftPos == null ? void 0 : parenLeftPos.end);
12
+ const end = ((_b = values[values.length - 1]) == null ? void 0 : _b.end) ?? (parenRightPos == null ? void 0 : parenRightPos.start) ?? (parenLeftPos == null ? void 0 : parenLeftPos.end);
13
+ parenLeftPos ?? (parenLeftPos = start !== void 0 ? { start: start - 1, end: start } : void 0);
14
+ parenRightPos ?? (parenRightPos = end !== void 0 ? { start: end, end: end + 1 } : void 0);
15
+ node.bracket.left = token(TOKEN_TYPE.BRACKETL, "[", parenLeftPos);
16
+ if (bracket == null ? void 0 : bracket.right) {
17
+ node.bracket.right = token(TOKEN_TYPE.BRACKETR, "]", parenRightPos);
18
+ } else {
19
+ if (parenRightPos) {
20
+ parenRightPos.end = parenRightPos.start;
21
+ }
22
+ node.bracket.right = token(TOKEN_TYPE.BRACKETR, void 0, parenRightPos);
23
+ }
24
+ node.start = ((_c = node.bracket.left) == null ? void 0 : _c.start) ?? start ?? ((_d = node.bracket) == null ? void 0 : _d.right.start);
25
+ node.end = ((_f = (_e = node.bracket) == null ? void 0 : _e.right) == null ? void 0 : _f.end) ?? end ?? node.bracket.left.end;
26
+ const instance = new ArrayNode(node);
27
+ return instance;
28
+ }
29
+ export {
30
+ array
31
+ };
@@ -0,0 +1,20 @@
1
+ import { type AnyToken, type TOKEN_TYPE } from "../../types/ast.js";
2
+ import type { ArrayNode } from "../classes/ArrayNode.js";
3
+ import { ConditionNode } from "../classes/ConditionNode.js";
4
+ import type { ErrorToken } from "../classes/ErrorToken.js";
5
+ import type { GroupNode } from "../classes/GroupNode.js";
6
+ import type { ValidToken } from "../classes/ValidToken.js";
7
+ import type { VariableNode } from "../classes/VariableNode.js";
8
+ /**
9
+ * Creates a @see ConditionNode
10
+ *
11
+ * @param variable An existing @see VariableNode
12
+ *
13
+ * @param not Defaults to plain true condition. To negate it you must pass an existing "not" operator @see ValidToken which will be set as the node's operator and set the node's value to false.
14
+ *
15
+ * @param property Set the property for a property operator. A property operator must be passed if this is passed.
16
+ * @param propertyOperator Set the operator for a property condition. A property must have been passed. The property operator must be a valid token. There is no case where it would not be. If using an operator that is the same as a separator, if used as an operator, should be set as an operator.
17
+ * @param sep Pass separator tokens for expanded property conditions.
18
+ */
19
+ export declare function condition(value: VariableNode | GroupNode | ArrayNode | ErrorToken<TOKEN_TYPE.VALUE>, not?: true | ValidToken<TOKEN_TYPE.NOT>, property?: VariableNode | ErrorToken<TOKEN_TYPE.VALUE>, propertyOperator?: AnyToken<TOKEN_TYPE.OP_CUSTOM | TOKEN_TYPE.VALUE>, { right, left }?: Partial<Record<"right" | "left", ValidToken<TOKEN_TYPE.OP_EXPANDED_SEP>>>): ConditionNode;
20
+ //# sourceMappingURL=condition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition.d.ts","sourceRoot":"","sources":["../../../src/ast/builders/condition.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,QAAQ,EAAiB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D;;;;;;;;;;GAUG;AAEH,wBAAgB,SAAS,CACxB,KAAK,EACH,YAAY,GACZ,SAAS,GACT,SAAS,GACT,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAC9B,GAAG,GAAE,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAQ,EAC7C,QAAQ,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EACtD,gBAAgB,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,EACpE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAE,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAO,GAC9F,aAAa,CAsBf"}
@@ -0,0 +1,28 @@
1
+ import { pos } from "./pos.js";
2
+ import { ConditionNode } from "../classes/ConditionNode.js";
3
+ function condition(value, not = true, property, propertyOperator, { right, left } = {}) {
4
+ const position = pos(value);
5
+ const notStart = not === true ? void 0 : not.start;
6
+ position.start = notStart ?? (property == null ? void 0 : property.start) ?? (propertyOperator == null ? void 0 : propertyOperator.start) ?? position.start;
7
+ const node = {
8
+ property,
9
+ value,
10
+ propertyOperator,
11
+ ...position
12
+ };
13
+ if (not !== true) {
14
+ node.operator = not;
15
+ }
16
+ if (right || left) {
17
+ node.sep = {};
18
+ if (right)
19
+ node.sep.right = right;
20
+ if (left)
21
+ node.sep.left = left;
22
+ }
23
+ const instance = new ConditionNode(node);
24
+ return instance;
25
+ }
26
+ export {
27
+ condition
28
+ };
@@ -0,0 +1,11 @@
1
+ import { type ExtractTokenType } from "../../types/ast.js";
2
+ /**
3
+ * Faster way, more intuitive way to generate the options for matching delimiters (e.g. quotes and parens) for functions like @see variable and @see group .
4
+ */
5
+ export declare function delim<TLeft extends boolean | string, TRight extends boolean | string, TType extends TLeft extends string ? ExtractTokenType<TLeft> : TRight extends string ? ExtractTokenType<TRight> : undefined>(left?: TLeft, right?: TRight): {
6
+ left: TLeft extends string ? true : TLeft;
7
+ right: TRight extends string ? true : TRight;
8
+ } & TType extends undefined ? {} : {
9
+ type: TType;
10
+ };
11
+ //# sourceMappingURL=delim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delim.d.ts","sourceRoot":"","sources":["../../../src/ast/builders/delim.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,gBAAgB,EAAc,MAAM,oBAAoB,CAAA;AAEtE;;GAEG;AAEH,wBAAgB,KAAK,CACpB,KAAK,SAAS,OAAO,GAAG,MAAM,EAC9B,MAAM,SAAS,OAAO,GAAG,MAAM,EAC/B,KAAK,SAAS,KAAK,SAAS,MAAM,GAC/B,gBAAgB,CAAC,KAAK,CAAC,GACvB,MAAM,SAAS,MAAM,GACrB,gBAAgB,CAAC,MAAM,CAAC,GACxB,SAAS,EAEZ,IAAI,GAAE,KAAsB,EAC5B,KAAK,GAAE,MAAwB,GAE/B;IACC,IAAI,EAAE,KAAK,SAAS,MAAM,GAAG,IAAI,GAAG,KAAK,CAAA;IACzC,KAAK,EAAE,MAAM,SAAS,MAAM,GAAG,IAAI,GAAG,MAAM,CAAA;CAC5C,GAAG,KAAK,SAAS,SAAS,GAAG,EAAE,GAAG;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAelD"}
@@ -0,0 +1,20 @@
1
+ import { type } from "./type.js";
2
+ import { TOKEN_TYPE } from "../../types/ast.js";
3
+ function delim(left = false, right = false) {
4
+ let quoteType;
5
+ if (typeof left === "string")
6
+ quoteType = type(left);
7
+ else if (typeof right === "string")
8
+ quoteType = type(right);
9
+ const opts = {
10
+ left: left === true || typeof left === "string" && left !== void 0,
11
+ right: right === true || typeof right === "string" && right !== void 0
12
+ };
13
+ if (quoteType !== void 0 && ![TOKEN_TYPE.PARENL, TOKEN_TYPE.PARENR].includes(quoteType)) {
14
+ opts.type = quoteType;
15
+ }
16
+ return opts;
17
+ }
18
+ export {
19
+ delim
20
+ };
@@ -0,0 +1,9 @@
1
+ import { TOKEN_TYPE } from "../../types/ast.js";
2
+ import { ErrorToken } from "../classes/ErrorToken.js";
3
+ /**
4
+ * Creates an error token.
5
+ *
6
+ * @param expected Can be passed an array of @see ValidToken_TYPE or strings, in which case it will use @see type internally. So instead of `[TOKEN_TYPE.VALUE]` we can do `[""]` and instead of `[TOKEN_TYPE.PARENR]` we can do `[")"]`.
7
+ */
8
+ export declare function error<T extends TOKEN_TYPE>(pos: number, expected: T[]): ErrorToken<T>;
9
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../src/ast/builders/error.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAGrD;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { type } from "./type.js";
2
+ import { TOKEN_TYPE } from "../../types/ast.js";
3
+ import { ErrorToken } from "../classes/ErrorToken.js";
4
+ function error(pos, expected_) {
5
+ const expected = expected_.map((item) => {
6
+ if (TOKEN_TYPE[item] === void 0) {
7
+ return type(item);
8
+ } else {
9
+ return item;
10
+ }
11
+ });
12
+ return new ErrorToken({ expected, start: pos, end: pos });
13
+ }
14
+ export {
15
+ error
16
+ };
@@ -0,0 +1,12 @@
1
+ import { type AnyToken, TOKEN_TYPE, type TokenBooleanTypes } from "../../types/ast.js";
2
+ import type { ConditionNode } from "../classes/ConditionNode.js";
3
+ import type { ErrorToken } from "../classes/ErrorToken.js";
4
+ import { ExpressionNode } from "../classes/ExpressionNode.js";
5
+ import type { GroupNode } from "../classes/GroupNode.js";
6
+ /**
7
+ * Creates an @see ExpressionNode, can be passed nothing for any of the tokens to automatically create error tokens.
8
+ *
9
+ * Also automatically sets the correct start/end positions from valid tokens (e.g. for start, searching left to right for a valid token and vice versa) assuming at least one is defined.
10
+ */
11
+ export declare function expression(left: ConditionNode | ExpressionNode | GroupNode | ErrorToken<TOKEN_TYPE.VALUE> | undefined, operator: AnyToken<TokenBooleanTypes> | undefined, right: ConditionNode | ExpressionNode | GroupNode | ErrorToken<TOKEN_TYPE.VALUE> | undefined): ExpressionNode;
12
+ //# sourceMappingURL=expression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../src/ast/builders/expression.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,QAAQ,EAAiB,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACrG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAGxD;;;;GAIG;AACH,wBAAgB,UAAU,CACzB,IAAI,EACJ,aAAa,GACb,cAAc,GACd,SAAS,GACT,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,GAC5B,SAAS,EACT,QAAQ,EACR,QAAQ,CAAC,iBAAiB,CAAC,GAC3B,SAAS,EACT,KAAK,EACL,aAAa,GACb,cAAc,GACd,SAAS,GACT,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,GAC5B,SAAS,GACP,cAAc,CAkChB"}
@@ -0,0 +1,31 @@
1
+ import { pos } from "./pos.js";
2
+ import { token } from "./token.js";
3
+ import { TOKEN_TYPE } from "../../types/ast.js";
4
+ import { ExpressionNode } from "../classes/ExpressionNode.js";
5
+ function expression(left, operator, right) {
6
+ const start = (left == null ? void 0 : left.start) ?? (operator == null ? void 0 : operator.start) ?? (right == null ? void 0 : right.start);
7
+ const end = (right == null ? void 0 : right.end) ?? (operator == null ? void 0 : operator.end) ?? (left == null ? void 0 : left.end);
8
+ const position = pos({ start, end });
9
+ if (left === void 0) {
10
+ left = token(TOKEN_TYPE.VALUE, void 0, { start: position.start });
11
+ }
12
+ let op;
13
+ if (operator === void 0) {
14
+ operator = token([TOKEN_TYPE.AND, TOKEN_TYPE.OR], void 0, { start: left.end });
15
+ } else
16
+ op = operator;
17
+ if (right === void 0) {
18
+ right = token(TOKEN_TYPE.VALUE, void 0, { start: op.end });
19
+ }
20
+ const node = {
21
+ left,
22
+ operator: op,
23
+ right,
24
+ ...position
25
+ };
26
+ const instance = new ExpressionNode(node);
27
+ return instance;
28
+ }
29
+ export {
30
+ expression
31
+ };
@@ -0,0 +1,20 @@
1
+ import { type Position, TOKEN_TYPE } from "../../types/ast.js";
2
+ import type { ConditionNode } from "../classes/ConditionNode.js";
3
+ import type { ErrorToken } from "../classes/ErrorToken.js";
4
+ import type { ExpressionNode } from "../classes/ExpressionNode.js";
5
+ import { GroupNode } from "../classes/GroupNode.js";
6
+ import type { ValidToken } from "../classes/ValidToken.js";
7
+ /**
8
+ * Creates a group.
9
+ *
10
+ * Automatically creates error tokens if missing condition or parens (not prefix because it is optional). Will look at the position of prefix if available.
11
+ *
12
+ * @param paren Use to add parens to group, usually by using @see delim . If either `right` or `left` are false or undefined, error tokens will be created. Unlike @see variable, if undefined is passed for parens, parens are created by default.
13
+ *
14
+ * The positions of the parens can be adjusted with the last two parameters by passing positions.
15
+ */
16
+ export declare function group(prefix: ConditionNode | ValidToken<TOKEN_TYPE.NOT> | undefined, expression: ConditionNode | ExpressionNode | GroupNode | ErrorToken<TOKEN_TYPE.VALUE> | undefined, paren?: {
17
+ left?: boolean;
18
+ right?: boolean;
19
+ }, parenLeftPos?: Position, parenRightPos?: Position): GroupNode;
20
+ //# sourceMappingURL=group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../../src/ast/builders/group.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,QAAQ,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D;;;;;;;;GAQG;AAEH,wBAAgB,KAAK,CACpB,MAAM,EACJ,aAAa,GACb,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,GAC1B,SAAS,EAEX,UAAU,EACR,aAAa,GACb,cAAc,GACd,SAAS,GACT,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,GAC5B,SAAS,EAEX,KAAK,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAgC,EACxE,YAAY,CAAC,EAAE,QAAQ,EACvB,aAAa,CAAC,EAAE,QAAQ,GACtB,SAAS,CA2CX"}
@@ -0,0 +1,47 @@
1
+ import { token } from "./token.js";
2
+ import { TOKEN_TYPE } from "../../types/ast.js";
3
+ import { GroupNode } from "../classes/GroupNode.js";
4
+ function group(prefix, expression, paren = { right: true, left: true }, parenLeftPos, parenRightPos) {
5
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
6
+ if (expression === void 0) {
7
+ expression = token(TOKEN_TYPE.VALUE, void 0, (prefix == null ? void 0 : prefix.end) !== void 0 ? { start: prefix.end } : void 0);
8
+ }
9
+ const node = {
10
+ expression
11
+ };
12
+ if (prefix) {
13
+ node.prefix = prefix;
14
+ const locToRight = ((_b = (_a = node.paren) == null ? void 0 : _a.left) == null ? void 0 : _b.start) ?? ((_c = node.expression) == null ? void 0 : _c.start) ?? ((_d = node.paren) == null ? void 0 : _d.right.start);
15
+ if (prefix.start === void 0 && locToRight !== void 0) {
16
+ throw new Error("group builder: missing prefix location when passed expression with location");
17
+ }
18
+ }
19
+ node.paren = {};
20
+ const start = expression.start;
21
+ const end = expression.end;
22
+ parenLeftPos ?? (parenLeftPos = start !== void 0 ? { start: start - 1, end: start } : void 0);
23
+ parenRightPos ?? (parenRightPos = end !== void 0 ? { start: end, end: end + 1 } : void 0);
24
+ if (paren == null ? void 0 : paren.left) {
25
+ node.paren.left = token(TOKEN_TYPE.PARENL, "(", parenLeftPos);
26
+ } else {
27
+ if (parenLeftPos) {
28
+ parenLeftPos.start = parenLeftPos.end;
29
+ }
30
+ node.paren.left = token(TOKEN_TYPE.PARENL, void 0, parenLeftPos);
31
+ }
32
+ if (paren == null ? void 0 : paren.right) {
33
+ node.paren.right = token(TOKEN_TYPE.PARENR, ")", parenRightPos);
34
+ } else {
35
+ if (parenRightPos) {
36
+ parenRightPos.end = parenRightPos.start;
37
+ }
38
+ node.paren.right = token(TOKEN_TYPE.PARENR, void 0, parenRightPos);
39
+ }
40
+ node.start = ((_e = node.prefix) == null ? void 0 : _e.start) ?? ((_g = (_f = node.paren) == null ? void 0 : _f.left) == null ? void 0 : _g.start) ?? ((_h = node.expression) == null ? void 0 : _h.start) ?? ((_i = node.paren) == null ? void 0 : _i.right.start);
41
+ node.end = ((_k = (_j = node.paren) == null ? void 0 : _j.right) == null ? void 0 : _k.end) ?? ((_l = node.expression) == null ? void 0 : _l.end) ?? ((_m = node.paren) == null ? void 0 : _m.left.end) ?? ((_n = node.prefix) == null ? void 0 : _n.end);
42
+ const instance = new GroupNode(node);
43
+ return instance;
44
+ }
45
+ export {
46
+ group
47
+ };
@@ -0,0 +1,12 @@
1
+ export { array } from "./array.js";
2
+ export { condition } from "./condition.js";
3
+ export { delim } from "./delim.js";
4
+ export { error } from "./error.js";
5
+ export { expression } from "./expression.js";
6
+ export { group } from "./group.js";
7
+ export { isFullPos } from "./isFullPos.js";
8
+ export { pos } from "./pos.js";
9
+ export { token } from "./token.js";
10
+ export { type } from "./type.js";
11
+ export { variable } from "./variable.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ast/builders/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { array } from "./array.js";
2
+ import { condition } from "./condition.js";
3
+ import { delim } from "./delim.js";
4
+ import { error } from "./error.js";
5
+ import { expression } from "./expression.js";
6
+ import { group } from "./group.js";
7
+ import { isFullPos } from "./isFullPos.js";
8
+ import { pos } from "./pos.js";
9
+ import { token } from "./token.js";
10
+ import { type } from "./type.js";
11
+ import { variable } from "./variable.js";
12
+ export {
13
+ array,
14
+ condition,
15
+ delim,
16
+ error,
17
+ expression,
18
+ group,
19
+ isFullPos,
20
+ pos,
21
+ token,
22
+ type,
23
+ variable
24
+ };
@@ -0,0 +1,6 @@
1
+ import type { Position } from "../../types/ast.js";
2
+ /**
3
+ * @internal
4
+ */
5
+ export declare function isFullPos(position?: Partial<Position> | any): position is Position;
6
+ //# sourceMappingURL=isFullPos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isFullPos.d.ts","sourceRoot":"","sources":["../../../src/ast/builders/isFullPos.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAElD;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,QAAQ,IAAI,QAAQ,CAIlF"}
@@ -0,0 +1,6 @@
1
+ function isFullPos(position) {
2
+ return typeof position === "object" && position.start !== void 0 && position.end !== void 0;
3
+ }
4
+ export {
5
+ isFullPos
6
+ };
@@ -0,0 +1,21 @@
1
+ import type { AnyToken, AST_TYPE, EmptyObj, Position, TOKEN_TYPE } from "../../types/ast.js";
2
+ import type { Node } from "../classes/Node.js";
3
+ /**
4
+ * Can either:
5
+ *
6
+ * - Create a position from two numbers.
7
+ * - Extract just a position from anything with a (full) position.
8
+ * - From a partial position if `{fill:true}`.
9
+ */
10
+ export declare function pos<TItem extends Position | Partial<Position> | EmptyObj>(item: TItem, opts: {
11
+ fill: true;
12
+ }): TItem extends {
13
+ start: number;
14
+ } | {
15
+ end: number;
16
+ } ? Position : EmptyObj;
17
+ export declare function pos<TItem extends Position | Partial<Position> | EmptyObj>(item: TItem, opts?: undefined | {
18
+ fill: false;
19
+ }): TItem extends Position ? Position : TItem extends AnyToken<TOKEN_TYPE> | Position | EmptyObj ? Position | EmptyObj : TItem extends Node<AST_TYPE> | Position | EmptyObj ? Position | EmptyObj : EmptyObj;
20
+ export declare function pos(start: number, end: number): Position;
21
+ //# sourceMappingURL=pos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pos.d.ts","sourceRoot":"","sources":["../../../src/ast/builders/pos.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC5F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE9C;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,KAAK,SAAS,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,EACxE,IAAI,EAAE,KAAK,EACX,IAAI,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GAClB,KAAK,SAAS;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACjD,QAAQ,GACR,QAAQ,CAAA;AACX,wBAAgB,GAAG,CAAC,KAAK,SAAS,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,EACxE,IAAI,EAAE,KAAK,EACX,IAAI,CAAC,EAAE,SAAS,GAAG;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GAGlC,KAAK,SAAS,QAAQ,GACpB,QAAQ,GACR,KAAK,SAAS,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,QAAQ,GACxD,QAAQ,GAAG,QAAQ,GACnB,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,QAAQ,GAClD,QAAQ,GAAG,QAAQ,GACnB,QAAQ,CAAA;AACX,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { isFullPos } from "./isFullPos.js";
2
+ function pos(start, end) {
3
+ if (typeof start === "number") {
4
+ return { start, end };
5
+ } else {
6
+ const item = start;
7
+ if (item === void 0)
8
+ return {};
9
+ const fill = typeof end === "object" ? end.fill : false;
10
+ if (isFullPos(item)) {
11
+ return { start: item.start, end: item.end };
12
+ } else {
13
+ if (fill) {
14
+ let start2 = item.start;
15
+ let end2 = item.end;
16
+ if (start2 !== void 0 && end2 === void 0)
17
+ end2 = start2;
18
+ if (end2 !== void 0 && start2 === void 0)
19
+ start2 = end2;
20
+ return { start: start2, end: end2 };
21
+ }
22
+ return {};
23
+ }
24
+ }
25
+ }
26
+ export {
27
+ pos
28
+ };
@@ -0,0 +1,12 @@
1
+ import type { EmptyObj, Position, TOKEN_TYPE } from "../../types/ast.js";
2
+ import { ErrorToken } from "../classes/ErrorToken.js";
3
+ import { ValidToken } from "../classes/ValidToken.js";
4
+ /**
5
+ * Creates a @see ValidToken or of the given type with the given value. If no value is given, creates an @see ErrorToken instead.
6
+ *
7
+ * Can be passed multiple types when creating an error token to set the expected field.
8
+ *
9
+ * If the token is an error token, just `start` or `end` can be passed, and the other position will be filled to the same value.
10
+ */
11
+ export declare function token<TValue extends string | undefined, TType extends TOKEN_TYPE = TOKEN_TYPE>(type: TValue extends undefined ? TType | TType[] : TType, value: TValue, position?: Position | Partial<Position> | EmptyObj): TValue extends undefined ? ErrorToken<TType> : ValidToken<TType>;
12
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/ast/builders/token.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAY,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAGrD;;;;;;GAMG;AAEH,wBAAgB,KAAK,CACpB,MAAM,SAAS,MAAM,GAAG,SAAS,EACjC,KAAK,SAAS,UAAU,GAAG,UAAU,EAErC,IAAI,EAAE,MAAM,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK,EAAE,GAAG,KAAK,EACxD,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAa,GACpD,MAAM,SAAS,SAAS,GACxB,UAAU,CAAC,KAAK,CAAC,GACjB,UAAU,CAAC,KAAK,CAAC,CAmBnB"}
@@ -0,0 +1,26 @@
1
+ import { isArray } from "@alanscodelog/utils";
2
+ import { pos } from "./pos.js";
3
+ import { ErrorToken } from "../classes/ErrorToken.js";
4
+ import { ValidToken } from "../classes/ValidToken.js";
5
+ function token(type, value, position = {}) {
6
+ position = pos(position, { fill: true });
7
+ let token2;
8
+ if (value !== void 0) {
9
+ token2 = new ValidToken({
10
+ type,
11
+ value,
12
+ start: position.start,
13
+ end: position.end
14
+ });
15
+ } else {
16
+ token2 = new ErrorToken({
17
+ expected: isArray(type) ? type : [type],
18
+ start: position.start,
19
+ end: position.end
20
+ });
21
+ }
22
+ return token2;
23
+ }
24
+ export {
25
+ token
26
+ };
@@ -0,0 +1,6 @@
1
+ import { type ExtractTokenType } from "../../types/ast.js";
2
+ /**
3
+ * Given a the string value of an operator or single delimiter token, returns the corresponding @see ValidToken_TYPE .
4
+ */
5
+ export declare function type<T extends string>(operatorSymbol: T): ExtractTokenType<T>;
6
+ //# sourceMappingURL=type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../src/ast/builders/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAc,MAAM,oBAAoB,CAAA;AACtE;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EACpC,cAAc,EAAE,CAAC,GACf,gBAAgB,CAAC,CAAC,CAAC,CAwBrB"}
@@ -0,0 +1,37 @@
1
+ import { TOKEN_TYPE } from "../../types/ast.js";
2
+ function type(operatorSymbol) {
3
+ switch (operatorSymbol) {
4
+ case "`":
5
+ return TOKEN_TYPE.BACKTICK;
6
+ case `'`:
7
+ return TOKEN_TYPE.SINGLEQUOTE;
8
+ case `"`:
9
+ return TOKEN_TYPE.DOUBLEQUOTE;
10
+ case `(`:
11
+ return TOKEN_TYPE.PARENL;
12
+ case `)`:
13
+ return TOKEN_TYPE.PARENR;
14
+ case `[`:
15
+ return TOKEN_TYPE.BRACKETL;
16
+ case `]`:
17
+ return TOKEN_TYPE.BRACKETR;
18
+ case `/`:
19
+ return TOKEN_TYPE.REGEX;
20
+ case `and`:
21
+ case `&&`:
22
+ case `&`:
23
+ return TOKEN_TYPE.AND;
24
+ case `or`:
25
+ case `||`:
26
+ case `|`:
27
+ return TOKEN_TYPE.OR;
28
+ case `not`:
29
+ case `!`:
30
+ return TOKEN_TYPE.NOT;
31
+ default:
32
+ return TOKEN_TYPE.VALUE;
33
+ }
34
+ }
35
+ export {
36
+ type
37
+ };
@@ -0,0 +1,17 @@
1
+ import { type AnyToken, type EmptyObj, type Position, TOKEN_TYPE, type TokenQuoteTypes } from "../../types/ast.js";
2
+ import type { ValidToken } from "../classes/ValidToken.js";
3
+ import { VariableNode } from "../classes/VariableNode.js";
4
+ /**
5
+ * Creates an @see VariableNode .
6
+ *
7
+ * @param quote Use to add quotes to the variable, usually by using @see delim . If false or undefined, no quotes are added. Otherwise at least `type` must be passed. If one side is defined but not the other, error tokens will be created with the given type.
8
+ *
9
+ * @param position Refers to position of the value (in case it needs to be created) not the node. Quote positions are automatically calculated from this if used. If value is already a token, there's no need to pass a position, it can be extracted from the token.
10
+ */
11
+ export declare function variable(prefix: ValidToken<TOKEN_TYPE.VALUE> | undefined, value: string | AnyToken<TOKEN_TYPE.VALUE>, quote?: {
12
+ type: TokenQuoteTypes;
13
+ left?: boolean;
14
+ right?: boolean;
15
+ flags?: string;
16
+ }, position?: Position | EmptyObj): VariableNode;
17
+ //# sourceMappingURL=variable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variable.d.ts","sourceRoot":"","sources":["../../../src/ast/builders/variable.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAClH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAGzD;;;;;;GAMG;AAEH,wBAAgB,QAAQ,CACvB,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,SAAS,EAChD,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAC1C,KAAK,CAAC,EAAE;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAClF,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAC5B,YAAY,CAyDd"}