@witchcraft/expressit 0.2.2 → 0.3.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 (99) hide show
  1. package/README.md +1 -2
  2. package/dist/Lexer.d.ts +99 -94
  3. package/dist/Lexer.d.ts.map +1 -1
  4. package/dist/Lexer.js +211 -559
  5. package/dist/Parser.d.ts +26 -26
  6. package/dist/Parser.d.ts.map +1 -1
  7. package/dist/Parser.js +2 -1
  8. package/dist/ast/builders/condition.d.ts +1 -1
  9. package/dist/ast/builders/condition.d.ts.map +1 -1
  10. package/dist/ast/builders/condition.js +1 -0
  11. package/dist/ast/builders/delim.d.ts +2 -2
  12. package/dist/ast/builders/delim.d.ts.map +1 -1
  13. package/dist/ast/builders/error.d.ts +2 -2
  14. package/dist/ast/builders/error.d.ts.map +1 -1
  15. package/dist/ast/builders/expression.d.ts +2 -2
  16. package/dist/ast/builders/expression.d.ts.map +1 -1
  17. package/dist/ast/builders/expression.js +2 -6
  18. package/dist/ast/builders/group.d.ts +1 -1
  19. package/dist/ast/builders/group.d.ts.map +1 -1
  20. package/dist/ast/builders/group.js +1 -3
  21. package/dist/ast/builders/pos.d.ts +2 -2
  22. package/dist/ast/builders/pos.d.ts.map +1 -1
  23. package/dist/ast/builders/token.d.ts +2 -2
  24. package/dist/ast/builders/token.d.ts.map +1 -1
  25. package/dist/ast/builders/type.d.ts +2 -2
  26. package/dist/ast/builders/type.d.ts.map +1 -1
  27. package/dist/ast/builders/variable.d.ts +3 -3
  28. package/dist/ast/builders/variable.d.ts.map +1 -1
  29. package/dist/ast/createConditionNode.d.ts +1 -1
  30. package/dist/ast/createConditionNode.d.ts.map +1 -1
  31. package/dist/ast/createGroupNode.d.ts +1 -1
  32. package/dist/ast/createGroupNode.d.ts.map +1 -1
  33. package/dist/ast/createToken.d.ts +2 -2
  34. package/dist/ast/createToken.d.ts.map +1 -1
  35. package/dist/ast/createToken.js +2 -2
  36. package/dist/ast/error.d.ts +2 -2
  37. package/dist/ast/error.d.ts.map +1 -1
  38. package/dist/ast/error.js +1 -0
  39. package/dist/ast/handlers.d.ts +23 -23
  40. package/dist/ast/handlers.d.ts.map +1 -1
  41. package/dist/ast/handlers.js +1 -1
  42. package/dist/examples/ParserWithSqlSupport.d.ts +5 -5
  43. package/dist/examples/ParserWithSqlSupport.d.ts.map +1 -1
  44. package/dist/examples/ParserWithSqlSupport.js +2 -0
  45. package/dist/index.js +2 -2
  46. package/dist/internal/ExpressitError.d.ts +2 -2
  47. package/dist/internal/ExpressitError.d.ts.map +1 -1
  48. package/dist/internal/checkParserOpts.js +11 -11
  49. package/dist/package.json.js +2 -60
  50. package/dist/types/ast.d.ts +60 -58
  51. package/dist/types/ast.d.ts.map +1 -1
  52. package/dist/types/ast.js +26 -27
  53. package/dist/types/autocomplete.d.ts +23 -21
  54. package/dist/types/autocomplete.d.ts.map +1 -1
  55. package/dist/types/autocomplete.js +24 -21
  56. package/dist/types/errors.d.ts +12 -10
  57. package/dist/types/errors.d.ts.map +1 -1
  58. package/dist/types/errors.js +8 -7
  59. package/dist/types/index.js +2 -2
  60. package/dist/types/parser.d.ts +3 -3
  61. package/dist/types/parser.d.ts.map +1 -1
  62. package/dist/utils/getCursorInfo.js +2 -0
  63. package/dist/utils/getOppositeDelimiter.d.ts +2 -2
  64. package/dist/utils/getOppositeDelimiter.d.ts.map +1 -1
  65. package/dist/utils/isDelimiter.d.ts +2 -2
  66. package/dist/utils/isDelimiter.d.ts.map +1 -1
  67. package/dist/utils/isParen.d.ts +2 -2
  68. package/dist/utils/isParen.d.ts.map +1 -1
  69. package/dist/utils/isQuote.d.ts +2 -2
  70. package/dist/utils/isQuote.d.ts.map +1 -1
  71. package/package.json +13 -13
  72. package/src/Lexer.ts +98 -88
  73. package/src/Parser.ts +61 -61
  74. package/src/ast/builders/condition.ts +3 -3
  75. package/src/ast/builders/delim.ts +4 -4
  76. package/src/ast/builders/error.ts +3 -3
  77. package/src/ast/builders/expression.ts +4 -8
  78. package/src/ast/builders/group.ts +2 -4
  79. package/src/ast/builders/pos.ts +3 -3
  80. package/src/ast/builders/token.ts +2 -2
  81. package/src/ast/builders/type.ts +2 -2
  82. package/src/ast/builders/variable.ts +5 -5
  83. package/src/ast/createConditionNode.ts +2 -2
  84. package/src/ast/createGroupNode.ts +4 -4
  85. package/src/ast/createToken.ts +6 -6
  86. package/src/ast/error.ts +2 -2
  87. package/src/ast/handlers.ts +20 -20
  88. package/src/examples/ParserWithSqlSupport.ts +11 -5
  89. package/src/internal/ExpressitError.ts +3 -3
  90. package/src/internal/checkParserOpts.ts +11 -11
  91. package/src/types/ast.ts +101 -96
  92. package/src/types/autocomplete.ts +26 -22
  93. package/src/types/errors.ts +18 -13
  94. package/src/types/parser.ts +3 -3
  95. package/src/utils/getOppositeDelimiter.ts +2 -2
  96. package/src/utils/getSurroundingErrors.ts +4 -4
  97. package/src/utils/isDelimiter.ts +3 -3
  98. package/src/utils/isParen.ts +2 -2
  99. package/src/utils/isQuote.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../src/types/autocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAG9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb;;;;OAIG;IACH,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,qFAAqF;IACrF,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,sGAAsG;IACtG,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,4BAA4B;IAC5B,KAAK,EAAE;QACN,gCAAgC;QAChC,IAAI,CAAC,EAAE,UAAU,CAAA;QACjB,gCAAgC;QAChC,IAAI,CAAC,EAAE,UAAU,CAAA;KACjB,CAAA;IACD,+GAA+G;IAC/G,UAAU,EAAE;QACX,uGAAuG;QACvG,IAAI,EAAE,OAAO,CAAA;QACb,yGAAyG;QACzG,IAAI,EAAE,OAAO,CAAA;KACb,CAAA;CACD,CAAA;AAED,oBAAY,eAAe;IAE1B,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,eAAe,oBAAoB;IACnC,iBAAiB,sBAAsB;IACvC,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;IAC3B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,0BAA0B,+BAA+B;IACzD,wBAAwB,6BAA6B;IACrD,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,WAAW,gBAAgB;CAG3B;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,eAAe,CAAA;IACrB,gEAAgE;IAChE,KAAK,EAAE,QAAQ,CAAA;IACf,yBAAyB;IACzB,UAAU,EAAE,UAAU,CAAA;IACtB,yEAAyE;IACzE,QAAQ,EAAE;QACT;;;;WAIG;QACH,UAAU,EAAE;YACX,KAAK,EAAE,OAAO,CAAA;YACd,MAAM,EAAE,OAAO,CAAA;SACf,CAAA;QACD;;;;;;WAMG;QACH,KAAK,EAAE,OAAO,CAAA;QACd,6OAA6O;QAC7O,MAAM,EAAE,MAAM,GAAG,KAAK,CAAA;KACtB,CAAA;IACD;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;CAChB,CAAA;AAGD,MAAM,MAAM,UAAU,GAAG;IACxB,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;CACb,CAAA"}
1
+ {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../src/types/autocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAGnD,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAG9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb;;;;OAIG;IACH,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,qFAAqF;IACrF,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,sGAAsG;IACtG,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,4BAA4B;IAC5B,KAAK,EAAE;QACN,gCAAgC;QAChC,IAAI,CAAC,EAAE,UAAU,CAAA;QACjB,gCAAgC;QAChC,IAAI,CAAC,EAAE,UAAU,CAAA;KACjB,CAAA;IACD,+GAA+G;IAC/G,UAAU,EAAE;QACX,uGAAuG;QACvG,IAAI,EAAE,OAAO,CAAA;QACb,yGAAyG;QACzG,IAAI,EAAE,OAAO,CAAA;KACb,CAAA;CACD,CAAA;AAED,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;CAqB1B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,cAAc,CAAA;IACpB,gEAAgE;IAChE,KAAK,EAAE,QAAQ,CAAA;IACf,yBAAyB;IACzB,UAAU,EAAE,UAAU,CAAA;IACtB,yEAAyE;IACzE,QAAQ,EAAE;QACT;;;;WAIG;QACH,UAAU,EAAE;YACX,KAAK,EAAE,OAAO,CAAA;YACd,MAAM,EAAE,OAAO,CAAA;SACf,CAAA;QACD;;;;;;WAMG;QACH,KAAK,EAAE,OAAO,CAAA;QACd,6OAA6O;QAC7O,MAAM,EAAE,MAAM,GAAG,KAAK,CAAA;KACtB,CAAA;IACD;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;CAChB,CAAA;AAGD,MAAM,MAAM,UAAU,GAAG;IACxB,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;CACb,CAAA"}
@@ -1,24 +1,27 @@
1
- var SUGGESTION_TYPE = /* @__PURE__ */ ((SUGGESTION_TYPE2) => {
2
- SUGGESTION_TYPE2["VARIABLE"] = "VARIABLE";
3
- SUGGESTION_TYPE2["ARRAY_VALUE"] = "ARRAY_VALUE";
4
- SUGGESTION_TYPE2["VALUE"] = "VALUE";
5
- SUGGESTION_TYPE2["PREFIX"] = "PREFIX";
6
- SUGGESTION_TYPE2["BOOLEAN_WORD_OP"] = "BOOLEAN_WORD_OP";
7
- SUGGESTION_TYPE2["BOOLEAN_SYMBOL_OP"] = "BOOLEAN_SYMBOL_OP";
8
- SUGGESTION_TYPE2["BACKTICK"] = "BACKTICK";
9
- SUGGESTION_TYPE2["DOUBLEQUOTE"] = "DOUBLEQUOTE";
10
- SUGGESTION_TYPE2["SINGLEQUOTE"] = "SINGLEQUOTE";
11
- SUGGESTION_TYPE2["PARENL"] = "PARENL";
12
- SUGGESTION_TYPE2["PARENR"] = "PARENR";
13
- SUGGESTION_TYPE2["PROPERTY"] = "PROPERTY";
14
- SUGGESTION_TYPE2["EXPANDED_PROPERTY_OPERATOR"] = "EXPANDED_PROPERTY_OPERATOR";
15
- SUGGESTION_TYPE2["CUSTOM_PROPERTY_OPERATOR"] = "CUSTOM_PROPERTY_OPERATOR";
16
- SUGGESTION_TYPE2["PROPERTY_SEP"] = "PROPERTY_SEP";
17
- SUGGESTION_TYPE2["BRAKCETR"] = "BRAKCETR";
18
- SUGGESTION_TYPE2["REGEX"] = "REGEX";
19
- SUGGESTION_TYPE2["REGEX_FLAGS"] = "REGEX_FLAGS";
20
- return SUGGESTION_TYPE2;
21
- })(SUGGESTION_TYPE || {});
1
+ import "@alanscodelog/utils";
2
+ import { enumFromArray } from "@alanscodelog/utils/enumFromArray.js";
3
+ const SUGGESTION_TYPE = enumFromArray([
4
+ "VARIABLE",
5
+ "ARRAY_VALUE",
6
+ "VALUE",
7
+ "PREFIX",
8
+ "BOOLEAN_WORD_OP",
9
+ "BOOLEAN_SYMBOL_OP",
10
+ "BACKTICK",
11
+ "DOUBLEQUOTE",
12
+ "SINGLEQUOTE",
13
+ "PARENL",
14
+ "PARENR",
15
+ "PROPERTY",
16
+ "EXPANDED_PROPERTY_OPERATOR",
17
+ "CUSTOM_PROPERTY_OPERATOR",
18
+ "PROPERTY_SEP",
19
+ "BRAKCETR",
20
+ "REGEX",
21
+ "REGEX_FLAGS"
22
+ /** This is not an oversight, I haven't figured out a fast way to detect left bracket errors. */
23
+ // BRAKCETL = "BRAKCETL",
24
+ ]);
22
25
  export {
23
26
  SUGGESTION_TYPE
24
27
  };
@@ -1,20 +1,22 @@
1
+ import { type EnumLike } from "@alanscodelog/utils";
1
2
  import type { ParserOptions } from "./parser.js";
2
- export declare enum ERROR_CODES {
3
- PARSER_POSITION_ERROR = "PARSER.POSITION",
4
- PARSER_CONFLICTING_OPTIONS_ERROR = "PARSER.OPTIONS.CONFLICTING",
5
- PARSER_OPTION_REQUIRED_ERROR = "PARSER.OPTIONS.CUSTOM_REQUIRED"
6
- }
7
- export type ErrorInfo<T extends ERROR_CODES> = T extends ERROR_CODES ? ERROR_Info[T] : never;
8
- export type ERROR_Info = {
9
- [ERROR_CODES.PARSER_POSITION_ERROR]: {
3
+ export declare const PARSER_ERROR: {
4
+ POSITION_ERROR: "PARSER.POSITION_ERROR";
5
+ CONFLICTING_OPTIONS_ERROR: "PARSER.CONFLICTING_OPTIONS_ERROR";
6
+ OPTION_REQUIRED_ERROR: "PARSER.OPTION_REQUIRED_ERROR";
7
+ };
8
+ export type ParserError = EnumLike<typeof PARSER_ERROR>;
9
+ export type ErrorInfo<T extends ParserError> = T extends ParserError ? ErrorCodesInfo[T] : never;
10
+ export type ErrorCodesInfo = {
11
+ [PARSER_ERROR.POSITION_ERROR]: {
10
12
  start?: number;
11
13
  end?: number;
12
14
  };
13
- [ERROR_CODES.PARSER_CONFLICTING_OPTIONS_ERROR]: {
15
+ [PARSER_ERROR.CONFLICTING_OPTIONS_ERROR]: {
14
16
  prohibited: string[];
15
17
  invalid: string;
16
18
  };
17
- [ERROR_CODES.PARSER_OPTION_REQUIRED_ERROR]: {
19
+ [PARSER_ERROR.OPTION_REQUIRED_ERROR]: {
18
20
  options?: (keyof ParserOptions)[];
19
21
  requires: keyof ParserOptions;
20
22
  };
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGhD,oBAAY,WAAW;IACtB,qBAAqB,oBAAoB;IACzC,gCAAgC,+BAA+B;IAC/D,4BAA4B,mCAAmC;CAC/D;AAGD,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,WAAW,IAC1C,CAAC,SAAS,WAAW,GACnB,UAAU,CAAC,CAAC,CAAC,GACb,KAAK,CAAA;AAGR,MAAM,MAAM,UAAU,GAAG;IACxB,CAAC,WAAW,CAAC,qBAAqB,CAAC,EAAE;QACpC,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,GAAG,CAAC,EAAE,MAAM,CAAA;KACZ,CAAA;IACD,CAAC,WAAW,CAAC,gCAAgC,CAAC,EAAE;QAC/C,UAAU,EAAE,MAAM,EAAE,CAAA;QACpB,OAAO,EAAE,MAAM,CAAA;KACf,CAAA;IACD,CAAC,WAAW,CAAC,4BAA4B,CAAC,EAAE;QAC3C,OAAO,CAAC,EAAE,CAAC,MAAM,aAAa,CAAC,EAAE,CAAA;QACjC,QAAQ,EAAE,MAAM,aAAa,CAAA;KAC7B,CAAA;CACD,CAAA"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAGnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGhD,eAAO,MAAM,YAAY;;;;CAIZ,CAAA;AAEb,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CAAA;AAGvD,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,WAAW,IAC1C,CAAC,SAAS,WAAW,GACnB,cAAc,CAAC,CAAC,CAAC,GACjB,KAAK,CAAA;AAGR,MAAM,MAAM,cAAc,GAAG;IAC5B,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;QAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,GAAG,CAAC,EAAE,MAAM,CAAA;KACZ,CAAA;IACD,CAAC,YAAY,CAAC,yBAAyB,CAAC,EAAE;QACzC,UAAU,EAAE,MAAM,EAAE,CAAA;QACpB,OAAO,EAAE,MAAM,CAAA;KACf,CAAA;IACD,CAAC,YAAY,CAAC,qBAAqB,CAAC,EAAE;QACrC,OAAO,CAAC,EAAE,CAAC,MAAM,aAAa,CAAC,EAAE,CAAA;QACjC,QAAQ,EAAE,MAAM,aAAa,CAAA;KAC7B,CAAA;CACD,CAAA"}
@@ -1,9 +1,10 @@
1
- var ERROR_CODES = /* @__PURE__ */ ((ERROR_CODES2) => {
2
- ERROR_CODES2["PARSER_POSITION_ERROR"] = "PARSER.POSITION";
3
- ERROR_CODES2["PARSER_CONFLICTING_OPTIONS_ERROR"] = "PARSER.OPTIONS.CONFLICTING";
4
- ERROR_CODES2["PARSER_OPTION_REQUIRED_ERROR"] = "PARSER.OPTIONS.CUSTOM_REQUIRED";
5
- return ERROR_CODES2;
6
- })(ERROR_CODES || {});
1
+ import "@alanscodelog/utils";
2
+ import { enumFromArray } from "@alanscodelog/utils/enumFromArray.js";
3
+ const PARSER_ERROR = enumFromArray([
4
+ "POSITION_ERROR",
5
+ "CONFLICTING_OPTIONS_ERROR",
6
+ "OPTION_REQUIRED_ERROR"
7
+ ], "PARSER.");
7
8
  export {
8
- ERROR_CODES
9
+ PARSER_ERROR
9
10
  };
@@ -1,9 +1,9 @@
1
1
  import { AST_TYPE, TOKEN_TYPE } from "./ast.js";
2
2
  import { SUGGESTION_TYPE } from "./autocomplete.js";
3
- import { ERROR_CODES } from "./errors.js";
3
+ import { PARSER_ERROR } from "./errors.js";
4
4
  export {
5
5
  AST_TYPE,
6
- ERROR_CODES,
6
+ PARSER_ERROR,
7
7
  SUGGESTION_TYPE,
8
8
  TOKEN_TYPE
9
9
  };
@@ -415,9 +415,9 @@ export type ValueQuery = {
415
415
  /** {@link ParserOptions}["valueValidator"] */
416
416
  export type ValidationQuery = Omit<ValueQuery, "value" | "operator" | "prefix" | "regexFlags" | "property"> & {
417
417
  value?: VariableNode | ArrayNode;
418
- operator?: ValidToken<TOKEN_TYPE.VALUE | TOKEN_TYPE.OP_CUSTOM>;
419
- prefix?: ValidToken<TOKEN_TYPE.VALUE>;
420
- regexFlags?: ValidToken<TOKEN_TYPE.VALUE>;
418
+ operator?: ValidToken<typeof TOKEN_TYPE.VALUE | typeof TOKEN_TYPE.OP_CUSTOM>;
419
+ prefix?: ValidToken<typeof TOKEN_TYPE.VALUE>;
420
+ regexFlags?: ValidToken<typeof TOKEN_TYPE.VALUE>;
421
421
  property: VariableNode[];
422
422
  /** The property as would be passed to the {@link ParserOptions}["valueComparer"] function (i.e. joined as a string using the {@link ParseOptions}["prefixApplier"] ) */
423
423
  propertyName?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/types/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/types/parser.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { isArray } from "@alanscodelog/utils/isArray.js";
2
2
  import { unreachable } from "@alanscodelog/utils/unreachable.js";
3
3
  import { extractTokens } from "./extractTokens.js";
4
+ import "../types/ast.js";
5
+ import "../types/autocomplete.js";
4
6
  function getCursorInfo(input, ast, index) {
5
7
  const tokens = isArray(ast) ? ast : extractTokens(ast);
6
8
  if (input.length < index || index < 0) {
@@ -1,7 +1,7 @@
1
1
  import type { generateParentsMap } from "./generateParentsMap.js";
2
- import { type AnyToken, type TokenDelimiterTypes } from "../types/ast.js";
2
+ import { type AnyToken, type TokenDelimiter } from "../types/ast.js";
3
3
  /**
4
4
  * Given a delimiter token, returns it's opposite pair, or undefined if the type passed was not a delimiter token (so you can pass any type without checking).
5
5
  */
6
- export declare function getOppositeDelimiter(token: AnyToken, parentsMap: ReturnType<typeof generateParentsMap>): AnyToken<TokenDelimiterTypes> | undefined;
6
+ export declare function getOppositeDelimiter(token: AnyToken, parentsMap: ReturnType<typeof generateParentsMap>): AnyToken<TokenDelimiter> | undefined;
7
7
  //# sourceMappingURL=getOppositeDelimiter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getOppositeDelimiter.d.ts","sourceRoot":"","sources":["../../src/utils/getOppositeDelimiter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAMjE,OAAO,EAAE,KAAK,QAAQ,EAAiE,KAAK,mBAAmB,EAAqB,MAAM,iBAAiB,CAAA;AAE3J;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,GAC/C,QAAQ,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAuB3C"}
1
+ {"version":3,"file":"getOppositeDelimiter.d.ts","sourceRoot":"","sources":["../../src/utils/getOppositeDelimiter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAMjE,OAAO,EAAE,KAAK,QAAQ,EAAiE,KAAK,cAAc,EAAqB,MAAM,iBAAiB,CAAA;AAEtJ;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,GAC/C,QAAQ,CAAC,cAAc,CAAC,GAAG,SAAS,CAuBtC"}
@@ -1,6 +1,6 @@
1
- import { type AnyToken, type TokenDelimiterTypes } from "../types/ast.js";
1
+ import { type AnyToken, type TokenDelimiter } from "../types/ast.js";
2
2
  /**
3
3
  * Returns whether token is a delimiter type (including if it's an expanded operator separator).
4
4
  */
5
- export declare function isDelimiter(token?: AnyToken): token is AnyToken<TokenDelimiterTypes>;
5
+ export declare function isDelimiter(token?: AnyToken): token is AnyToken<TokenDelimiter>;
6
6
  //# sourceMappingURL=isDelimiter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isDelimiter.d.ts","sourceRoot":"","sources":["../../src/utils/isDelimiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAErF;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAAC,mBAAmB,CAAC,CAYpF"}
1
+ {"version":3,"file":"isDelimiter.d.ts","sourceRoot":"","sources":["../../src/utils/isDelimiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhF;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAAC,cAAc,CAAC,CAY/E"}
@@ -1,3 +1,3 @@
1
- import { type AnyToken, type TokenParenTypes } from "../types/ast.js";
2
- export declare function isParen(token?: AnyToken): token is AnyToken<TokenParenTypes>;
1
+ import { type AnyToken, type TokenParen } from "../types/ast.js";
2
+ export declare function isParen(token?: AnyToken): token is AnyToken<TokenParen>;
3
3
  //# sourceMappingURL=isParen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isParen.d.ts","sourceRoot":"","sources":["../../src/utils/isParen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGjF,wBAAgB,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAAC,eAAe,CAAC,CAE5E"}
1
+ {"version":3,"file":"isParen.d.ts","sourceRoot":"","sources":["../../src/utils/isParen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAG5E,wBAAgB,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAAC,UAAU,CAAC,CAEvE"}
@@ -1,4 +1,4 @@
1
- import { type AnyToken, type TokenQuoteTypes } from "../types/ast.js";
1
+ import { type AnyToken, type TokenQuote } from "../types/ast.js";
2
2
  /** Returns if the token is a quote token. This includes regex delimiters. */
3
- export declare function isQuote(token?: AnyToken): token is AnyToken<TokenQuoteTypes>;
3
+ export declare function isQuote(token?: AnyToken): token is AnyToken<TokenQuote>;
4
4
  //# sourceMappingURL=isQuote.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isQuote.d.ts","sourceRoot":"","sources":["../../src/utils/isQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjF,6EAA6E;AAC7E,wBAAgB,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAAC,eAAe,CAAC,CAE5E"}
1
+ {"version":3,"file":"isQuote.d.ts","sourceRoot":"","sources":["../../src/utils/isQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5E,6EAA6E;AAC7E,wBAAgB,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAAC,UAAU,CAAC,CAEvE"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@witchcraft/expressit",
3
3
  "description": "A blazing fast, customizable, error-tolerant expression parser that creates safe to eval expressions + a few other goodies like autocomplete.",
4
- "version": "0.2.2",
4
+ "version": "0.3.0",
5
5
  "types": "./dist/index.d.ts",
6
6
  "type": "module",
7
- "module": "./dist/index.js",
7
+ "main": "./dist/index.js",
8
8
  "sideEffects": false,
9
9
  "exports": {
10
10
  ".": {
@@ -85,21 +85,21 @@
85
85
  "prepare": "husky && npm run build"
86
86
  },
87
87
  "dependencies": {
88
- "@alanscodelog/utils": "^4.0.0"
88
+ "@alanscodelog/utils": "^5.1.0"
89
89
  },
90
90
  "devDependencies": {
91
91
  "@alanscodelog/commitlint-config": "^3.0.1",
92
92
  "@alanscodelog/eslint-config": "5.0.3",
93
- "@alanscodelog/semantic-release-config": "^5.0.3",
94
- "@alanscodelog/tsconfigs": "^5.0.1",
93
+ "@alanscodelog/semantic-release-config": "^5.0.4",
94
+ "@alanscodelog/tsconfigs": "^6.0.0",
95
95
  "@commitlint/cli": "^19.6.1",
96
96
  "@electric-sql/pglite": "^0.2.12",
97
97
  "@types/node": "^22.10.2",
98
- "@vitest/coverage-v8": "^2.1.8",
98
+ "@vitest/coverage-v8": "^3.1.1",
99
99
  "concurrently": "^9.1.0",
100
100
  "cross-env": "^7.0.3",
101
- "drizzle-kit": "^0.30.1",
102
- "drizzle-orm": "^0.38.2",
101
+ "drizzle-kit": "^0.31.0",
102
+ "drizzle-orm": "^0.42.0",
103
103
  "fast-glob": "^3.3.1",
104
104
  "http-server": "^14.1.1",
105
105
  "husky": "^9.1.7",
@@ -108,12 +108,12 @@
108
108
  "onchange": "^7.1.0",
109
109
  "semantic-release": "^24.2.0",
110
110
  "ts-node": "^10.9.1",
111
- "typedoc": "0.27.5",
112
- "typescript": "~5.7.2",
111
+ "typedoc": "0.28.3",
112
+ "typescript": "~5.8.3",
113
113
  "vite": "^6.0.2",
114
- "vite-plugin-externalize-deps": "^0.8.0",
114
+ "vite-plugin-externalize-deps": "^0.9.0",
115
115
  "vite-tsconfig-paths": "^5.1.4",
116
- "vitest": "^2.1.8"
116
+ "vitest": "^3.1.1"
117
117
  },
118
118
  "author": "Alan <alanscodelog@gmail.com>",
119
119
  "repository": "https://github.com/witchcraftjs/expressit",
@@ -143,7 +143,7 @@
143
143
  },
144
144
  "browserslist": "defaults and supports es6-module,maintained node versions",
145
145
  "engines": {
146
- "node": ">=18.0.0"
146
+ "node": ">=20.0.0"
147
147
  },
148
148
  "@comments": {
149
149
  "scripts": {
package/src/Lexer.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import type { EnumLike } from "@alanscodelog/utils"
2
+ import { enumFromArray } from "@alanscodelog/utils/enumFromArray.js"
1
3
  import { isBlank } from "@alanscodelog/utils/isBlank.js"
2
4
  import { pushIfNotIn } from "@alanscodelog/utils/pushIfNotIn.js"
3
5
 
@@ -7,63 +9,68 @@ import type { FullParserOptions } from "./types/index.js"
7
9
 
8
10
  const regexFlags = /^[a-zA-Z]+/
9
11
 
10
- enum MODE {
11
- MAIN = "MAIN",
12
- MAYBE_QUOTE_ERROR = "MAYBE_QUOTE_ERROR",
13
- NOT_SINGLE = "NOT_SINGLE",
14
- NOT_DOUBLE = "NOT_DOUBLE",
15
- NOT_BACKTICK = "NOT_BACKTICK",
16
- NOT_REGEX = "NOT_REGEX",
17
- REGEX_END = "REGEX_END",
18
- BRACKET_MAIN = "BRACKET_MAIN",
19
- BRACKET_MAYBE_QUOTE_ERROR = "BRACKET_MAYBE_QUOTE_ERROR",
20
- BRACKET_NOT_SINGLE = "BRACKET_NOT_SINGLE",
21
- BRACKET_NOT_DOUBLE = "BRACKET_NOT_DOUBLE",
22
- BRACKET_NOT_BACKTICK = "BRACKET_NOT_BACKTICK",
23
-
24
- }
12
+ const MODE = enumFromArray([
13
+ "MAIN",
14
+ "MAYBE_QUOTE_ERROR",
15
+ "NOT_SINGLE",
16
+ "NOT_DOUBLE",
17
+ "NOT_BACKTICK",
18
+ "NOT_REGEX",
19
+ "REGEX_END",
20
+ "BRACKET_MAIN",
21
+ "BRACKET_MAYBE_QUOTE_ERROR",
22
+ "BRACKET_NOT_SINGLE",
23
+ "BRACKET_NOT_DOUBLE",
24
+ "BRACKET_NOT_BACKTICK",
25
+ "BRACKET_NOT_REGEX",
26
+ "BRACKET_REGEX_END",
27
+ ])
28
+
25
29
  const BRACKET_PREFIX = "BRACKET"
26
30
 
31
+ export const $T = enumFromArray([
32
+ "_",
33
+ "VALUE_UNQUOTED",
34
+ "VALUE_REGEX",
35
+ "VALUE_NOT_SINGLE",
36
+ "VALUE_NOT_DOUBLE",
37
+ "VALUE_NOT_BACKTICK",
38
+ "SYM_OR",
39
+ "SYM_AND",
40
+ "SYM_NOT",
41
+ "WORD_OR",
42
+ "WORD_AND",
43
+ "WORD_NOT",
44
+ "REGEX_START",
45
+ "REGEX_END",
46
+ "EXP_PROP_OP",
47
+ "CUSTOM_PROP_OP",
48
+ "PAREN_L",
49
+ "PAREN_R",
50
+ "BRACKET_L",
51
+ "BRACKET_R",
52
+ "QUOTE_SINGLE",
53
+ "QUOTE_DOUBLE",
54
+ "QUOTE_BACKTICK",
55
+ ])
56
+
27
57
  // eslint-disable-next-line @typescript-eslint/naming-convention
28
- export enum $T {
29
- _ = "_", // whitespace,
30
- VALUE_UNQUOTED = "VALUE_UNQUOTED",
31
- VALUE_REGEX = "VALUE_REGEX",
32
- VALUE_NOT_SINGLE = "VALUE_NOT_SINGLE",
33
- VALUE_NOT_DOUBLE = "VALUE_NOT_DOUBLE",
34
- VALUE_NOT_BACKTICK = "VALUE_NOT_BACKTICK",
35
- SYM_OR = "SYM_OR",
36
- SYM_AND = "SYM_AND",
37
- SYM_NOT = "SYM_NOT",
38
- WORD_OR = "WORD_OR",
39
- WORD_AND = "WORD_AND",
40
- WORD_NOT = "WORD_NOT",
41
- REGEX_START = "REGEX_START",
42
- REGEX_END = "REGEX_END",
43
- EXP_PROP_OP = "EXP_PROP_OP",
44
- CUSTOM_PROP_OP = "CUSTOM_PROP_OP",
45
- PAREN_L = "PAREN_L",
46
- PAREN_R = "PAREN_R",
47
- BRACKET_L = "BRACKET_L",
48
- BRACKET_R = "BRACKET_R",
49
- QUOTE_SINGLE = "QUOTE_SINGLE",
50
- QUOTE_DOUBLE = "QUOTE_DOUBLE",
51
- QUOTE_BACKTICK = "QUOTE_BACKTICK",
52
- }
58
+ export type $TType = EnumLike<typeof $T>
53
59
 
60
+ export const $C = enumFromArray([
61
+ "ANY",
62
+ "QUOTE_ANY",
63
+ "REGEX_ANY",
64
+ "VALUE_FOR_SINGLE",
65
+ "VALUE_FOR_DOUBLE",
66
+ "VALUE_FOR_BACKTICK",
67
+ "OPERATOR_OR",
68
+ "OPERATOR_AND",
69
+ "OPERATOR_NOT",
70
+ "VALUE",
71
+ ])
54
72
  // eslint-disable-next-line @typescript-eslint/naming-convention
55
- export enum $C {
56
- ANY = "ANY",
57
- QUOTE_ANY = "QUOTE_ANY",
58
- REGEX_ANY = "REGEX_ANY",
59
- VALUE_FOR_SINGLE = "VALUE_FOR_SINGLE",
60
- VALUE_FOR_DOUBLE = "VALUE_FOR_DOUBLE",
61
- VALUE_FOR_BACKTICK = "VALUE_FOR_BACKTICK",
62
- OPERATOR_OR = "OPERATOR_OR",
63
- OPERATOR_AND = "OPERATOR_AND",
64
- OPERATOR_NOT = "OPERATOR_NOT",
65
- VALUE = "VALUE",
66
- }
73
+ export type $CType = EnumLike<typeof $C>
67
74
 
68
75
 
69
76
  type SymbolInfo = {
@@ -80,40 +87,42 @@ type SymbolInfo = {
80
87
 
81
88
  type TokenMatchFunc = (c: string, input: string, start: number, mode: string) => string | boolean
82
89
 
83
- interface BaseTokenType<T extends $T | $C> {
90
+ interface LexerBaseToken<T extends $TType | $CType> {
84
91
  type: T
85
92
  skip?: boolean
86
93
  }
87
- export interface RealTokenType<
88
- T extends $T = $T,
94
+
95
+ export interface LexerRealToken<
96
+ T extends $TType = $TType,
89
97
  TPush extends string | undefined = undefined,
90
98
  // TCategories extends $C[] | undefined = undefined,
91
- > extends BaseTokenType<T> {
99
+ > extends LexerBaseToken<T> {
92
100
  matches: TokenMatchFunc
93
101
  push?: TPush | ((mode: string, tokens: Token[]) => TPush)
94
102
  // categories?: TCategories
95
- longerAlt?: $T
103
+ longerAlt?: $TType
96
104
  skip?: boolean
97
105
  }
98
- export interface TokenCategoryType<
99
- TC extends $C,
100
- TTokens extends RealTokenType<$T, any>[] = RealTokenType<$T, any>[],
101
- > extends BaseTokenType<TC> {
106
+
107
+ export interface LexerCategoryToken<
108
+ TC extends $CType,
109
+ TTokens extends LexerRealToken<$TType, any>[] = LexerRealToken<$TType, any>[],
110
+ > extends LexerBaseToken<TC> {
102
111
  isCategory: true
103
112
  entries: Partial<Record<TTokens[number]["type"], TTokens[number]>>
104
113
  // entries: Partial<Record<TTokens[number]["type"], TTokens[number]>>
105
114
  }
106
115
 
107
- export type TokenType<TC extends $C | $T> = TC extends $T
108
- ? RealTokenType<TC, any>
109
- : TC extends $C
110
- ? TokenCategoryType<TC>
116
+ export type LexerToken<TC extends $CType | $TType> = TC extends $TType
117
+ ? LexerRealToken<TC, any>
118
+ : TC extends $CType
119
+ ? LexerCategoryToken<TC>
111
120
  : never
112
121
 
113
- function createTokenCategoryType<T extends $C, TTokens extends RealTokenType<$T, any>>(
122
+ function createLexerCategoryToken<T extends $CType, TTokens extends LexerRealToken<$TType, any>>(
114
123
  type: T,
115
124
  entries: (TTokens | undefined)[],
116
- ): TokenCategoryType<T, TTokens[]> {
125
+ ): LexerCategoryToken<T, TTokens[]> {
117
126
  return {
118
127
  type,
119
128
  isCategory: true,
@@ -125,12 +134,12 @@ function createTokenCategoryType<T extends $C, TTokens extends RealTokenType<$T,
125
134
  }
126
135
 
127
136
  function createTokenType<
128
- T extends $T,
137
+ T extends $TType,
129
138
  TPush extends string | undefined = undefined,
130
139
  >(
131
140
  type: T,
132
- opts: Omit<RealTokenType<T, TPush>, "type">,
133
- ): RealTokenType<T, TPush > {
141
+ opts: Omit<LexerRealToken<T, TPush>, "type">,
142
+ ): LexerRealToken<T, TPush > {
134
143
  return {
135
144
  type,
136
145
  ...opts,
@@ -164,7 +173,7 @@ function matchSymbol(symbols: string[]): TokenMatchFunc {
164
173
  }
165
174
  }
166
175
 
167
- export interface Token<T extends $T | $C = $T | $C> {
176
+ export interface Token<T extends $TType | $CType = $TType | $CType> {
168
177
  type: T
169
178
  value: string
170
179
  startOffset: number
@@ -175,11 +184,11 @@ export interface Token<T extends $T | $C = $T | $C> {
175
184
  export class Lexer {
176
185
  symbols: SymbolInfo
177
186
 
178
- $: {[key in $T]: RealTokenType<key, any> }
187
+ $: {[key in $TType]: LexerRealToken<key, any> }
179
188
 
180
189
  $categories: ReturnType<Lexer["createTokens"]>["$categories"]
181
190
 
182
- branches: {[key in keyof typeof MODE]?: TokenType<$T>[] }
191
+ branches: {[key in keyof typeof MODE]?: LexerToken<$TType>[] }
183
192
 
184
193
  opts: FullParserOptions<any>
185
194
 
@@ -509,7 +518,7 @@ export class Lexer {
509
518
  }),
510
519
  }
511
520
  const $categories = {
512
- [$C.ANY]: createTokenCategoryType($C.ANY, [
521
+ [$C.ANY]: createLexerCategoryToken($C.ANY, [
513
522
  $[$T.REGEX_START],
514
523
  $[$T.REGEX_END],
515
524
  $[$T.QUOTE_SINGLE],
@@ -532,39 +541,39 @@ export class Lexer {
532
541
  $[$T.BRACKET_L],
533
542
  $[$T.BRACKET_R],
534
543
  ] as const),
535
- [$C.VALUE]: createTokenCategoryType($C.VALUE, [
544
+ [$C.VALUE]: createLexerCategoryToken($C.VALUE, [
536
545
  $[$T.VALUE_UNQUOTED],
537
546
  $[$T.VALUE_NOT_SINGLE],
538
547
  $[$T.VALUE_NOT_DOUBLE],
539
548
  $[$T.VALUE_NOT_BACKTICK],
540
549
  ] as const),
541
- [$C.VALUE_FOR_SINGLE]: createTokenCategoryType($C.VALUE_FOR_SINGLE, [
550
+ [$C.VALUE_FOR_SINGLE]: createLexerCategoryToken($C.VALUE_FOR_SINGLE, [
542
551
  $[$T.VALUE_NOT_SINGLE],
543
552
  ] as const),
544
- [$C.VALUE_FOR_DOUBLE]: createTokenCategoryType($C.VALUE_FOR_DOUBLE, [
553
+ [$C.VALUE_FOR_DOUBLE]: createLexerCategoryToken($C.VALUE_FOR_DOUBLE, [
545
554
  $[$T.VALUE_NOT_DOUBLE],
546
555
  ] as const),
547
- [$C.VALUE_FOR_BACKTICK]: createTokenCategoryType($C.VALUE_FOR_BACKTICK, [
556
+ [$C.VALUE_FOR_BACKTICK]: createLexerCategoryToken($C.VALUE_FOR_BACKTICK, [
548
557
  $[$T.VALUE_NOT_BACKTICK],
549
558
  ] as const),
550
- [$C.REGEX_ANY]: createTokenCategoryType($C.REGEX_ANY, [
559
+ [$C.REGEX_ANY]: createLexerCategoryToken($C.REGEX_ANY, [
551
560
  $[$T.REGEX_START],
552
561
  $[$T.REGEX_END],
553
562
  ] as const),
554
- [$C.QUOTE_ANY]: createTokenCategoryType($C.QUOTE_ANY, [
563
+ [$C.QUOTE_ANY]: createLexerCategoryToken($C.QUOTE_ANY, [
555
564
  $[$T.QUOTE_SINGLE],
556
565
  $[$T.QUOTE_DOUBLE],
557
566
  $[$T.QUOTE_BACKTICK],
558
567
  ] as const),
559
- [$C.OPERATOR_OR]: createTokenCategoryType($C.OPERATOR_OR, [
568
+ [$C.OPERATOR_OR]: createLexerCategoryToken($C.OPERATOR_OR, [
560
569
  $[$T.SYM_OR],
561
570
  $[$T.WORD_OR],
562
571
  ] as const),
563
- [$C.OPERATOR_AND]: createTokenCategoryType($C.OPERATOR_AND, [
572
+ [$C.OPERATOR_AND]: createLexerCategoryToken($C.OPERATOR_AND, [
564
573
  $[$T.SYM_AND],
565
574
  $[$T.WORD_AND],
566
575
  ] as const),
567
- [$C.OPERATOR_NOT]: createTokenCategoryType($C.OPERATOR_NOT, [
576
+ [$C.OPERATOR_NOT]: createLexerCategoryToken($C.OPERATOR_NOT, [
568
577
  $[$T.SYM_NOT],
569
578
  $[$T.WORD_NOT],
570
579
  ] as const),
@@ -572,7 +581,7 @@ export class Lexer {
572
581
  return { $, $categories }
573
582
  }
574
583
 
575
- createModeBranches(): {[key in keyof typeof MODE]?: TokenType<$T>[] } {
584
+ createModeBranches(): {[key in keyof typeof MODE]?: LexerToken<$TType>[] } {
576
585
  const opts = this.opts
577
586
  const $ = this.$
578
587
  const quotes = [
@@ -652,13 +661,13 @@ export class Lexer {
652
661
  }
653
662
 
654
663
 
655
- tokenize(input: string): Token<$T>[] {
664
+ tokenize(input: string): Token<$TType>[] {
656
665
  const branches = this.createModeBranches()
657
- const tokens: Token<$T>[] = []
666
+ const tokens: Token<$TType>[] = []
658
667
  let mode = MODE.MAIN
659
668
  let index = 0
660
669
  let c = input[index]
661
- let branch = branches[mode] as any as TokenType<$T>[]
670
+ let branch = branches[mode] as any as LexerToken<$TType>[]
662
671
  while (index < input.length) {
663
672
  for (const t of branch) {
664
673
  let match = t.matches(c, input, index, mode)
@@ -694,7 +703,8 @@ export class Lexer {
694
703
  return tokens
695
704
  }
696
705
  }
697
- function createToken<T extends $T>(type: T, value: string, startOffset: number, endOffset: number): Token<T> {
706
+
707
+ function createToken<T extends $TType>(type: T, value: string, startOffset: number, endOffset: number): Token<T> {
698
708
  return {
699
709
  type,
700
710
  value,