@witchcraft/expressit 0.0.2 → 0.1.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 (124) hide show
  1. package/README.md +6 -4
  2. package/dist/Lexer.d.ts +146 -0
  3. package/dist/Lexer.d.ts.map +1 -0
  4. package/dist/Lexer.js +960 -0
  5. package/dist/Parser.d.ts +140 -0
  6. package/dist/Parser.d.ts.map +1 -0
  7. package/dist/Parser.js +668 -0
  8. package/dist/ast/builders/token.js +1 -1
  9. package/dist/ast/handlers.d.ts +3 -3
  10. package/dist/ast/handlers.d.ts.map +1 -1
  11. package/dist/ast/index.d.ts.map +1 -1
  12. package/dist/examples/index.d.ts +2 -0
  13. package/dist/examples/index.d.ts.map +1 -0
  14. package/dist/examples/index.js +4 -0
  15. package/dist/examples/shortcutContextParser.d.ts +2 -1
  16. package/dist/examples/shortcutContextParser.d.ts.map +1 -1
  17. package/dist/examples/shortcutContextParser.js +9 -5
  18. package/dist/helpers/errors.d.ts.map +1 -1
  19. package/dist/helpers/errors.js +3 -1
  20. package/dist/helpers/index.d.ts.map +1 -1
  21. package/dist/helpers/parser/checkParserOpts.d.ts.map +1 -1
  22. package/dist/helpers/parser/checkParserOpts.js +3 -2
  23. package/dist/helpers/parser/extractPosition.d.ts +2 -6
  24. package/dist/helpers/parser/extractPosition.d.ts.map +1 -1
  25. package/dist/helpers/parser/extractPosition.js +3 -3
  26. package/dist/helpers/parser/getUnclosedRightParenCount.d.ts +2 -3
  27. package/dist/helpers/parser/getUnclosedRightParenCount.d.ts.map +1 -1
  28. package/dist/helpers/parser/getUnclosedRightParenCount.js +4 -4
  29. package/dist/index.d.ts +1 -2
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +3 -5
  32. package/dist/methods/autocomplete.d.ts.map +1 -1
  33. package/dist/methods/autocomplete.js +1 -1
  34. package/dist/methods/autoreplace.js +1 -1
  35. package/dist/methods/autosuggest.js +1 -1
  36. package/dist/methods/evaluate.d.ts.map +1 -1
  37. package/dist/methods/evaluate.js +3 -1
  38. package/dist/methods/getIndexes.d.ts.map +1 -1
  39. package/dist/methods/getIndexes.js +2 -1
  40. package/dist/methods/normalize.d.ts +0 -2
  41. package/dist/methods/normalize.d.ts.map +1 -1
  42. package/dist/methods/normalize.js +2 -3
  43. package/dist/methods/validate.d.ts.map +1 -1
  44. package/dist/methods/validate.js +3 -1
  45. package/dist/package.json.js +44 -37
  46. package/dist/types/ast.d.ts +2 -8
  47. package/dist/types/ast.d.ts.map +1 -1
  48. package/dist/types/errors.d.ts +5 -17
  49. package/dist/types/errors.d.ts.map +1 -1
  50. package/dist/types/errors.js +0 -1
  51. package/dist/types/parser.d.ts +6 -2
  52. package/dist/types/parser.d.ts.map +1 -1
  53. package/dist/utils/extractTokens.js +1 -1
  54. package/dist/utils/getCursorInfo.d.ts +2 -2
  55. package/dist/utils/getCursorInfo.d.ts.map +1 -1
  56. package/dist/utils/getCursorInfo.js +3 -2
  57. package/dist/utils/getOppositeDelimiter.d.ts.map +1 -1
  58. package/dist/utils/getOppositeDelimiter.js +1 -1
  59. package/dist/utils/prettyAst.d.ts.map +1 -1
  60. package/dist/utils/prettyAst.js +15 -9
  61. package/package.json +42 -37
  62. package/src/Lexer.ts +704 -0
  63. package/src/Parser.ts +972 -0
  64. package/src/ast/builders/array.ts +2 -2
  65. package/src/ast/builders/condition.ts +1 -1
  66. package/src/ast/builders/expression.ts +1 -1
  67. package/src/ast/builders/group.ts +1 -1
  68. package/src/ast/builders/index.ts +1 -1
  69. package/src/ast/builders/pos.ts +1 -1
  70. package/src/ast/builders/token.ts +2 -2
  71. package/src/ast/builders/type.ts +1 -1
  72. package/src/ast/builders/variable.ts +1 -1
  73. package/src/ast/classes/ConditionNode.ts +1 -1
  74. package/src/ast/classes/ErrorToken.ts +1 -1
  75. package/src/ast/classes/ValidToken.ts +2 -2
  76. package/src/ast/classes/index.ts +1 -1
  77. package/src/ast/handlers.ts +6 -6
  78. package/src/ast/index.ts +2 -2
  79. package/src/examples/index.ts +3 -0
  80. package/src/examples/shortcutContextParser.ts +11 -6
  81. package/src/helpers/errors.ts +5 -3
  82. package/src/helpers/general/defaultConditionNormalizer.ts +1 -1
  83. package/src/helpers/general/index.ts +1 -1
  84. package/src/helpers/index.ts +3 -2
  85. package/src/helpers/parser/checkParserOpts.ts +13 -12
  86. package/src/helpers/parser/extractPosition.ts +4 -8
  87. package/src/helpers/parser/getUnclosedRightParenCount.ts +6 -6
  88. package/src/helpers/parser/index.ts +1 -1
  89. package/src/helpers/parser/parseParserOptions.ts +1 -1
  90. package/src/index.ts +2 -2
  91. package/src/methods/autocomplete.ts +5 -5
  92. package/src/methods/autoreplace.ts +2 -2
  93. package/src/methods/autosuggest.ts +3 -3
  94. package/src/methods/evaluate.ts +4 -2
  95. package/src/methods/getIndexes.ts +2 -1
  96. package/src/methods/normalize.ts +3 -4
  97. package/src/methods/validate.ts +4 -2
  98. package/src/types/ast.ts +2 -9
  99. package/src/types/errors.ts +12 -22
  100. package/src/types/parser.ts +6 -4
  101. package/src/utils/extractTokens.ts +1 -1
  102. package/src/utils/getCursorInfo.ts +6 -4
  103. package/src/utils/getOppositeDelimiter.ts +5 -2
  104. package/src/utils/prettyAst.ts +5 -3
  105. package/dist/examples/advancedValueComparer.d.ts +0 -3
  106. package/dist/examples/advancedValueComparer.d.ts.map +0 -1
  107. package/dist/examples/advancedValueComparer.js +0 -28
  108. package/dist/grammar/ParserBase.d.ts +0 -51
  109. package/dist/grammar/ParserBase.d.ts.map +0 -1
  110. package/dist/grammar/ParserBase.js +0 -516
  111. package/dist/grammar/createTokens.d.ts +0 -56
  112. package/dist/grammar/createTokens.d.ts.map +0 -1
  113. package/dist/grammar/createTokens.js +0 -843
  114. package/dist/grammar/index.d.ts +0 -3
  115. package/dist/grammar/index.d.ts.map +0 -1
  116. package/dist/grammar/index.js +0 -6
  117. package/dist/parser.d.ts +0 -58
  118. package/dist/parser.d.ts.map +0 -1
  119. package/dist/parser.js +0 -136
  120. package/src/examples/advancedValueComparer.ts +0 -31
  121. package/src/grammar/ParserBase.ts +0 -715
  122. package/src/grammar/createTokens.ts +0 -512
  123. package/src/grammar/index.ts +0 -4
  124. package/src/parser.ts +0 -183
@@ -1,30 +1,20 @@
1
- import type { DeepPartial } from "@alanscodelog/utils"
2
- import type { ILexingError, IRecognitionException, IToken } from "chevrotain"
3
-
4
1
  import type { ParserOptions } from "./parser.js"
5
2
 
6
3
 
7
4
  export enum ERROR_CODES {
8
- "PARSER_ERROR" = "PARSER.ERROR",
9
- "PARSER_POSITION_ERROR" = "PARSER.POSITION",
10
- "PARSER_CONFLICTING_OPTIONS_ERROR" = "PARSER.OPTIONS.CONFLICTING",
11
- "PARSER_OPTION_REQUIRED_ERROR" = "PARSER.OPTIONS.CUSTOM_REQUIRED",
5
+ PARSER_POSITION_ERROR = "PARSER.POSITION",
6
+ PARSER_CONFLICTING_OPTIONS_ERROR = "PARSER.OPTIONS.CONFLICTING",
7
+ PARSER_OPTION_REQUIRED_ERROR = "PARSER.OPTIONS.CUSTOM_REQUIRED",
12
8
  }
13
- export type ErrorInfo<T extends keyof ErrorInfos> = ErrorInfos[T]
14
- export type ErrorInfos = {
15
- [ERROR_CODES.PARSER_ERROR]: {
16
- input: string
17
- options: DeepPartial<ParserOptions> | undefined
18
- // eslint-disable-next-line @typescript-eslint/naming-convention
19
- "parsed options": ParserOptions
20
- error: Error
21
- // eslint-disable-next-line @typescript-eslint/naming-convention
22
- "lexer errors": ILexingError[]
23
- // eslint-disable-next-line @typescript-eslint/naming-convention
24
- "lexed tokens": IToken[]
25
- // eslint-disable-next-line @typescript-eslint/naming-convention
26
- "parser errors": IRecognitionException[]
27
- }
9
+
10
+
11
+ export type ErrorInfo<T extends ERROR_CODES> =
12
+ T extends ERROR_CODES
13
+ ? ERROR_Info[T]
14
+ : never
15
+
16
+ // eslint-disable-next-line @typescript-eslint/naming-convention
17
+ export type ERROR_Info = {
28
18
  [ERROR_CODES.PARSER_POSITION_ERROR]: {
29
19
  start?: number
30
20
  end?: number
@@ -1,9 +1,12 @@
1
- import type { DeepRequired, MakeRequired } from "@alanscodelog/utils"
1
+ import type { DeepRequired, MakeRequired } from "@alanscodelog/utils/types"
2
2
 
3
3
  import type { Position, TOKEN_TYPE } from "./ast.js"
4
4
 
5
- import type { ArrayNode, Condition, ConditionNode, ValidToken, VariableNode } from "../ast/classes/index.js"
6
-
5
+ import type { ArrayNode } from "../ast/classes/ArrayNode.js"
6
+ import type { Condition } from "../ast/classes/Condition.js"
7
+ import type { ConditionNode } from "../ast/classes/ConditionNode.js"
8
+ import type { ValidToken } from "../ast/classes/ValidToken.js"
9
+ import type { VariableNode } from "../ast/classes/VariableNode.js"
7
10
 
8
11
  // #partially-synced
9
12
  export type FullParserOptions<T extends {} = {}> = MakeRequired<
@@ -393,7 +396,6 @@ export type ParserOptions<T extends {} = {}> = {
393
396
  * ```
394
397
  */
395
398
  valueValidator?: ValueValidator<T>
396
-
397
399
  }
398
400
 
399
401
  /** {@link ParserOptions.conditionNormalizer} */
@@ -1,4 +1,4 @@
1
- import { unreachable } from "@alanscodelog/utils"
1
+ import { unreachable } from "@alanscodelog/utils/unreachable"
2
2
 
3
3
  import { ArrayNode } from "../ast/classes/ArrayNode.js"
4
4
  import { ConditionNode } from "../ast/classes/ConditionNode.js"
@@ -1,10 +1,12 @@
1
- import { isArray, unreachable } from "@alanscodelog/utils"
1
+ import { isArray } from "@alanscodelog/utils/isArray"
2
+ import { unreachable } from "@alanscodelog/utils/unreachable"
2
3
 
3
4
  import { extractTokens } from "./extractTokens.js"
4
5
 
5
- import { ErrorToken, ValidToken } from "../ast/classes/index.js"
6
- import type { AnyToken, ParserResults } from "../types/ast.js"
7
- import type { CursorInfo } from "../types/autocomplete.js"
6
+ import { ErrorToken } from "../ast/classes/ErrorToken.js"
7
+ import { ValidToken } from "../ast/classes/ValidToken.js"
8
+ import { type AnyToken, type ParserResults } from "../types/ast.js"
9
+ import { type CursorInfo } from "../types/autocomplete.js"
8
10
 
9
11
 
10
12
  /**
@@ -1,11 +1,14 @@
1
- import { unreachable } from "@alanscodelog/utils"
1
+ import { unreachable } from "@alanscodelog/utils/unreachable"
2
2
 
3
3
  import { isBracket } from "./isBracket.js"
4
4
  import { isDelimiter } from "./isDelimiter.js"
5
5
  import { isParen } from "./isParen.js"
6
6
  import { isQuote } from "./isQuote.js"
7
7
 
8
- import type { ArrayNode, ConditionNode, GroupNode, VariableNode } from "../ast/classes/index.js"
8
+ import type { ArrayNode } from "../ast/classes/ArrayNode.js"
9
+ import type { ConditionNode } from "../ast/classes/ConditionNode.js"
10
+ import type { GroupNode } from "../ast/classes/GroupNode.js"
11
+ import type { VariableNode } from "../ast/classes/VariableNode.js"
9
12
  import { type AnyToken, TOKEN_TYPE, type TokenDelimiterTypes } from "../types/ast.js"
10
13
 
11
14
  /**
@@ -1,6 +1,8 @@
1
1
  /* eslint-disable prefer-rest-params */
2
- import { type AddParameters, colors as color } from "@alanscodelog/utils"
3
- import { isBlank, unreachable } from "@alanscodelog/utils"
2
+ import * as color from "@alanscodelog/utils/colors"
3
+ import { isBlank } from "@alanscodelog/utils/isBlank"
4
+ import { type AddParameters } from "@alanscodelog/utils/types"
5
+ import { unreachable } from "@alanscodelog/utils/unreachable"
4
6
 
5
7
  import { ArrayNode, ConditionNode, ErrorToken, ExpressionNode, GroupNode, ValidToken, VariableNode } from "../ast/classes/index.js"
6
8
  import { type AnyToken, type ParserResults, TOKEN_TYPE } from "../types/ast.js"
@@ -126,7 +128,7 @@ export function prettyAst(
126
128
  const bracketL = ast.bracket.left ? prettyAst_(ast.bracket.left, opts, c, ast.values.length === 0 && !ast.bracket.right ? __L : ___, "") : ""
127
129
  const values = ast.values.length > 0
128
130
  ? ast.values.map((node, i) =>
129
- prettyAst_(node, opts, c, !ast.bracket.right && i === ast.values.length - 1 ? __L : ___, "")
131
+ prettyAst_(node, opts, c, !ast.bracket.right && i === ast.values.length - 1 ? __L : ___, ""),
130
132
  )
131
133
  : []
132
134
  const bracketR = ast.bracket.right ? prettyAst_(ast.bracket.right, opts, c, __L, "") : ""
@@ -1,3 +0,0 @@
1
- import type { ValueQuery } from "../types/parser.js";
2
- export declare function valueComparer(contextValue: string, { operator, prefix, value, isRegex, regexFlags }: ValueQuery): boolean;
3
- //# sourceMappingURL=advancedValueComparer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"advancedValueComparer.d.ts","sourceRoot":"","sources":["../../src/examples/advancedValueComparer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAKpD,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,UAAU,GAAG,OAAO,CAyBzH"}
@@ -1,28 +0,0 @@
1
- function valueComparer(contextValue, { operator, prefix, value, isRegex, regexFlags }) {
2
- let finalValue = value;
3
- if (prefix) {
4
- const val = value;
5
- switch (prefix) {
6
- case "num":
7
- finalValue = parseInt(val, 2);
8
- break;
9
- }
10
- }
11
- if (isRegex) {
12
- const val = value;
13
- const regex = new RegExp(val, regexFlags);
14
- return contextValue.match(regex) !== null;
15
- }
16
- if (operator) {
17
- switch (operator) {
18
- case ">":
19
- return contextValue > finalValue;
20
- case "contains":
21
- return contextValue.includes(finalValue);
22
- }
23
- }
24
- return contextValue === finalValue;
25
- }
26
- export {
27
- valueComparer
28
- };
@@ -1,51 +0,0 @@
1
- import { EmbeddedActionsParser, type IToken } from "chevrotain";
2
- import type { createTokens } from "./createTokens.js";
3
- import { ArrayNode } from "../ast/classes/ArrayNode.js";
4
- import { ConditionNode } from "../ast/classes/ConditionNode.js";
5
- import type { ExpressionNode } from "../ast/classes/ExpressionNode.js";
6
- import type { GroupNode } from "../ast/classes/GroupNode.js";
7
- import type { ValidToken } from "../ast/classes/ValidToken.js";
8
- import { VariableNode } from "../ast/classes/VariableNode.js";
9
- import { type AnyToken, type ParserResults, TOKEN_TYPE, type TokenQuoteTypes } from "../types/ast.js";
10
- import type { FullParserOptions } from "../types/parser.js";
11
- export declare class ParserBase<T extends {} = {}> extends EmbeddedActionsParser {
12
- rawInput: string;
13
- private subParser?;
14
- private subParser2?;
15
- constructor(opts: FullParserOptions<T>, t: ReturnType<typeof createTokens>["tokens"], { customOpAlsoNegation, expandedSepAlsoCustom }: ReturnType<typeof createTokens>["info"]);
16
- }
17
- export interface ParserBase {
18
- shift: number;
19
- main: () => ParserResults;
20
- anySym: () => IToken;
21
- boolOr: () => ExpressionNode;
22
- boolAnd: () => ExpressionNode;
23
- condition: () => ConditionNode | GroupNode;
24
- property: () => {
25
- prop?: VariableNode;
26
- rest: {
27
- sepL?: ValidToken<TOKEN_TYPE.OP_EXPANDED_SEP>;
28
- sepR?: ValidToken<TOKEN_TYPE.OP_EXPANDED_SEP>;
29
- propertyOperator?: ConditionNode["propertyOperator"];
30
- };
31
- };
32
- plainGroup: () => [ValidToken<TOKEN_TYPE.PARENL>, GroupNode["expression"], ValidToken<TOKEN_TYPE.PARENR> | undefined];
33
- plainBracketGroup: () => ArrayNode;
34
- not: () => ValidToken<TOKEN_TYPE.NOT>;
35
- variable: () => VariableNode;
36
- valueDelimAny: () => AnyToken<TokenQuoteTypes>;
37
- quoteSingle: () => AnyToken<TOKEN_TYPE.SINGLEQUOTE>;
38
- quoteDouble: () => AnyToken<TOKEN_TYPE.DOUBLEQUOTE>;
39
- quoteBacktick: () => AnyToken<TOKEN_TYPE.BACKTICK>;
40
- regexAny: () => AnyToken<TOKEN_TYPE.REGEX> | [AnyToken<TOKEN_TYPE.REGEX>, ValidToken<TOKEN_TYPE.VALUE>];
41
- valueNotSingle: () => AnyToken<TOKEN_TYPE.VALUE>;
42
- valueNotDouble: () => AnyToken<TOKEN_TYPE.VALUE>;
43
- valueNotBacktick: () => AnyToken<TOKEN_TYPE.VALUE>;
44
- valueUnquoted: () => AnyToken<TOKEN_TYPE.VALUE>;
45
- valueRegex: () => AnyToken<TOKEN_TYPE.VALUE>;
46
- parenL: () => ValidToken<TOKEN_TYPE.PARENL>;
47
- parenR: () => ValidToken<TOKEN_TYPE.PARENR> | undefined;
48
- bracketL: () => ValidToken<TOKEN_TYPE.BRACKETL>;
49
- bracketR: () => ValidToken<TOKEN_TYPE.BRACKETR> | undefined;
50
- }
51
- //# sourceMappingURL=ParserBase.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ParserBase.d.ts","sourceRoot":"","sources":["../../src/grammar/ParserBase.ts"],"names":[],"mappings":"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"}