clarity-pattern-parser 3.0.16 → 4.0.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 (168) hide show
  1. package/README.md +0 -191
  2. package/dist/ast/Node.d.ts +4 -5
  3. package/dist/index.browser.js +476 -731
  4. package/dist/index.browser.js.map +1 -1
  5. package/dist/index.d.ts +10 -18
  6. package/dist/index.esm.js +469 -716
  7. package/dist/index.esm.js.map +1 -1
  8. package/dist/index.js +476 -731
  9. package/dist/index.js.map +1 -1
  10. package/dist/patterns/And.d.ts +24 -0
  11. package/dist/patterns/Literal.d.ts +19 -0
  12. package/dist/patterns/LookAhead.d.ts +8 -0
  13. package/dist/patterns/Not.d.ts +11 -0
  14. package/dist/patterns/Or.d.ts +22 -0
  15. package/dist/patterns/Pattern.d.ts +6 -7
  16. package/dist/patterns/{RecursivePattern.d.ts → Recursive.d.ts} +4 -4
  17. package/dist/patterns/Reference.d.ts +14 -0
  18. package/dist/patterns/Regex.d.ts +21 -0
  19. package/dist/patterns/Repeat.d.ts +20 -0
  20. package/package.json +1 -1
  21. package/src/CursorHistory.ts +1 -1
  22. package/src/ast/Node.ts +20 -17
  23. package/src/ast/Visitor.ts +14 -18
  24. package/src/index.ts +17 -33
  25. package/src/patterns/And.ts +178 -0
  26. package/src/patterns/Literal.ts +91 -0
  27. package/src/patterns/Not.ts +50 -0
  28. package/src/patterns/Or.ts +132 -0
  29. package/src/patterns/Pattern.ts +31 -47
  30. package/src/patterns/Recursive.ts +92 -0
  31. package/src/patterns/{ReferencePattern.ts → Reference.ts} +32 -28
  32. package/src/patterns/Regex.ts +123 -0
  33. package/src/patterns/Repeat.ts +155 -0
  34. package/src/tests/{AndValue.test.ts → And.test.ts} +31 -41
  35. package/src/tests/CursorHistory.test.ts +6 -6
  36. package/src/tests/Cusor.test.ts +7 -10
  37. package/src/tests/Literal.test.ts +3 -5
  38. package/src/tests/LookAhead.test.ts +2 -51
  39. package/src/tests/Not.test.ts +51 -0
  40. package/src/tests/Or.test.ts +113 -0
  41. package/src/tests/Pattern.test.ts +40 -139
  42. package/src/tests/{RecursivePattern.test.ts → Recursive.test.ts} +10 -8
  43. package/src/tests/Reference.test.ts +16 -0
  44. package/src/tests/{RepeatValue.test.ts → Repeat.test.ts} +10 -42
  45. package/src/tests/TextSuggester.test.ts +20 -28
  46. package/src/tests/{NodeVisitor.test.ts → Visitor.test.ts} +42 -21
  47. package/src/tests/cssPatterns/cssValue.ts +2 -2
  48. package/src/tests/cssPatterns/divider.ts +2 -2
  49. package/src/tests/cssPatterns/hex.ts +2 -2
  50. package/src/tests/cssPatterns/method.ts +7 -9
  51. package/src/tests/cssPatterns/name.ts +2 -2
  52. package/src/tests/cssPatterns/number.ts +2 -2
  53. package/src/tests/cssPatterns/optionalSpaces.ts +1 -2
  54. package/src/tests/cssPatterns/spaces.ts +2 -2
  55. package/src/tests/cssPatterns/unit.ts +3 -3
  56. package/src/tests/cssPatterns/value.ts +2 -2
  57. package/src/tests/cssPatterns/values.ts +2 -2
  58. package/src/tests/htmlPatterns/element.ts +18 -33
  59. package/src/tests/javascriptPatterns/boolean.ts +2 -3
  60. package/src/tests/javascriptPatterns/json.ts +14 -26
  61. package/src/tests/javascriptPatterns/name.ts +3 -20
  62. package/src/tests/javascriptPatterns/number.ts +2 -2
  63. package/src/tests/javascriptPatterns/objectLiteral.ts +9 -16
  64. package/src/tests/javascriptPatterns/string.ts +26 -24
  65. package/src/tests/javascriptPatterns/unit.ts +3 -6
  66. package/src/tests/javascriptPatterns/whitespace.ts +8 -12
  67. package/src/tests/naturalLanguage/filter.ts +16 -33
  68. package/src/tests/patterns/sentence.ts +8 -8
  69. package/dist/Cursor.js +0 -105
  70. package/dist/Cursor.js.map +0 -1
  71. package/dist/CursorHistory.js +0 -104
  72. package/dist/CursorHistory.js.map +0 -1
  73. package/dist/Permutor.d.ts +0 -13
  74. package/dist/Permutor.js +0 -52
  75. package/dist/Permutor.js.map +0 -1
  76. package/dist/TextSuggester.js +0 -244
  77. package/dist/TextSuggester.js.map +0 -1
  78. package/dist/ast/CompositeNode.d.ts +0 -6
  79. package/dist/ast/CompositeNode.js +0 -17
  80. package/dist/ast/CompositeNode.js.map +0 -1
  81. package/dist/ast/Node.js +0 -16
  82. package/dist/ast/Node.js.map +0 -1
  83. package/dist/ast/NodeVisitor.d.ts +0 -31
  84. package/dist/ast/ValueNode.d.ts +0 -6
  85. package/dist/ast/ValueNode.js +0 -14
  86. package/dist/ast/ValueNode.js.map +0 -1
  87. package/dist/ast/Visitor.js +0 -209
  88. package/dist/ast/Visitor.js.map +0 -1
  89. package/dist/patterns/ParseError.js +0 -9
  90. package/dist/patterns/ParseError.js.map +0 -1
  91. package/dist/patterns/Pattern.js +0 -127
  92. package/dist/patterns/Pattern.js.map +0 -1
  93. package/dist/patterns/RecursivePattern.js +0 -65
  94. package/dist/patterns/RecursivePattern.js.map +0 -1
  95. package/dist/patterns/composite/AndComposite.d.ts +0 -22
  96. package/dist/patterns/composite/AndComposite.js +0 -117
  97. package/dist/patterns/composite/AndComposite.js.map +0 -1
  98. package/dist/patterns/composite/CompositePattern.d.ts +0 -4
  99. package/dist/patterns/composite/CompositePattern.js +0 -7
  100. package/dist/patterns/composite/CompositePattern.js.map +0 -1
  101. package/dist/patterns/composite/OptionalComposite.d.ts +0 -10
  102. package/dist/patterns/composite/OptionalComposite.js +0 -29
  103. package/dist/patterns/composite/OptionalComposite.js.map +0 -1
  104. package/dist/patterns/composite/OrComposite.d.ts +0 -16
  105. package/dist/patterns/composite/OrComposite.js +0 -69
  106. package/dist/patterns/composite/OrComposite.js.map +0 -1
  107. package/dist/patterns/composite/RepeatComposite.d.ts +0 -21
  108. package/dist/patterns/composite/RepeatComposite.js +0 -88
  109. package/dist/patterns/composite/RepeatComposite.js.map +0 -1
  110. package/dist/patterns/value/AndValue.d.ts +0 -21
  111. package/dist/patterns/value/AndValue.js +0 -118
  112. package/dist/patterns/value/AndValue.js.map +0 -1
  113. package/dist/patterns/value/AnyOfThese.d.ts +0 -18
  114. package/dist/patterns/value/AnyOfThese.js +0 -59
  115. package/dist/patterns/value/AnyOfThese.js.map +0 -1
  116. package/dist/patterns/value/Literal.d.ts +0 -20
  117. package/dist/patterns/value/Literal.js +0 -63
  118. package/dist/patterns/value/Literal.js.map +0 -1
  119. package/dist/patterns/value/NotValue.d.ts +0 -17
  120. package/dist/patterns/value/NotValue.js +0 -70
  121. package/dist/patterns/value/NotValue.js.map +0 -1
  122. package/dist/patterns/value/OptionalValue.d.ts +0 -9
  123. package/dist/patterns/value/OptionalValue.js +0 -32
  124. package/dist/patterns/value/OptionalValue.js.map +0 -1
  125. package/dist/patterns/value/OrValue.d.ts +0 -19
  126. package/dist/patterns/value/OrValue.js +0 -73
  127. package/dist/patterns/value/OrValue.js.map +0 -1
  128. package/dist/patterns/value/RegexValue.d.ts +0 -19
  129. package/dist/patterns/value/RegexValue.js +0 -69
  130. package/dist/patterns/value/RegexValue.js.map +0 -1
  131. package/dist/patterns/value/RepeatValue.d.ts +0 -19
  132. package/dist/patterns/value/RepeatValue.js +0 -89
  133. package/dist/patterns/value/RepeatValue.js.map +0 -1
  134. package/dist/patterns/value/ValuePattern.d.ts +0 -5
  135. package/dist/patterns/value/ValuePattern.js +0 -7
  136. package/dist/patterns/value/ValuePattern.js.map +0 -1
  137. package/src/Permutor.ts +0 -64
  138. package/src/ast/CompositeNode.ts +0 -26
  139. package/src/ast/ValueNode.ts +0 -28
  140. package/src/patterns/RecursivePattern.ts +0 -86
  141. package/src/patterns/composite/AndComposite.ts +0 -159
  142. package/src/patterns/composite/CompositePattern.ts +0 -7
  143. package/src/patterns/composite/OptionalComposite.ts +0 -37
  144. package/src/patterns/composite/OrComposite.ts +0 -96
  145. package/src/patterns/composite/RepeatComposite.ts +0 -130
  146. package/src/patterns/value/AndValue.ts +0 -152
  147. package/src/patterns/value/AnyOfThese.ts +0 -81
  148. package/src/patterns/value/Literal.ts +0 -92
  149. package/src/patterns/value/NotValue.ts +0 -95
  150. package/src/patterns/value/OptionalValue.ts +0 -39
  151. package/src/patterns/value/OrValue.ts +0 -103
  152. package/src/patterns/value/RegexValue.ts +0 -103
  153. package/src/patterns/value/RepeatValue.ts +0 -131
  154. package/src/patterns/value/ValuePattern.ts +0 -8
  155. package/src/tests/AndComposite.test.ts +0 -102
  156. package/src/tests/AnyOfThese.test.ts +0 -74
  157. package/src/tests/CompositeNode.test.ts +0 -33
  158. package/src/tests/NotValue.test.ts +0 -76
  159. package/src/tests/OptionalValue.test.ts +0 -50
  160. package/src/tests/OrComposite.test.ts +0 -75
  161. package/src/tests/OrValue.test.ts +0 -171
  162. package/src/tests/Permutor.test.ts +0 -30
  163. package/src/tests/ReferencePattern.test.ts +0 -24
  164. package/src/tests/RegexValue.test.ts +0 -22
  165. package/src/tests/RepeatComposite.test.ts +0 -58
  166. package/src/tests/ValueNode.test.ts +0 -24
  167. package/src/tests/javascriptPatterns/varStatement.ts +0 -0
  168. package/src/tests/readmeDemo.test.ts +0 -124
@@ -1,70 +0,0 @@
1
- import ValuePattern from "./ValuePattern";
2
- import ValueNode from "../../ast/ValueNode";
3
- import ParseError from "../ParseError";
4
- import Pattern from "../Pattern";
5
- export default class NotValue extends ValuePattern {
6
- constructor(name, pattern) {
7
- super("not-value", name, [pattern]);
8
- this.match = "";
9
- this.node = null;
10
- this.mark = 0;
11
- this._assertArguments();
12
- }
13
- _assertArguments() {
14
- if (!(this.children[0] instanceof Pattern)) {
15
- throw new Error("Invalid Arguments: Expected the pattern to be a ValuePattern.");
16
- }
17
- if (typeof this.name !== "string") {
18
- throw new Error("Invalid Arguments: Expected name to be a string.");
19
- }
20
- }
21
- _reset(cursor) {
22
- this.match = "";
23
- this.node = null;
24
- this.cursor = cursor;
25
- this.mark = this.cursor.mark();
26
- }
27
- parse(cursor) {
28
- this._reset(cursor);
29
- this._tryPattern();
30
- return this.node;
31
- }
32
- _tryPattern() {
33
- while (true) {
34
- const mark = this.cursor.mark();
35
- this.children[0].parse(this.cursor);
36
- if (this.cursor.hasUnresolvedError()) {
37
- this.cursor.resolveError();
38
- this.cursor.moveToMark(mark);
39
- this.match += this.cursor.getChar();
40
- break;
41
- }
42
- else {
43
- this.cursor.moveToMark(mark);
44
- break;
45
- }
46
- }
47
- this._processMatch();
48
- }
49
- _processMatch() {
50
- if (this.match.length === 0) {
51
- const parseError = new ParseError(`Didn't find any characters that didn't match the ${this.children[0].name} pattern.`, this.mark, this);
52
- this.cursor.throwError(parseError);
53
- }
54
- else {
55
- this.node = new ValueNode("not-value", this.name, this.match, this.mark, this.mark);
56
- this.cursor.index = this.node.endIndex;
57
- this.cursor.addMatch(this, this.node);
58
- }
59
- }
60
- clone(name) {
61
- if (typeof name !== "string") {
62
- name = this.name;
63
- }
64
- return new NotValue(name, this.children[0]);
65
- }
66
- getTokens() {
67
- return [];
68
- }
69
- }
70
- //# sourceMappingURL=NotValue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NotValue.js","sourceRoot":"","sources":["../../../src/patterns/value/NotValue.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import ValuePattern from "./ValuePattern";
2
- import Cursor from "../../Cursor";
3
- export default class OptionalValue extends ValuePattern {
4
- constructor(pattern: ValuePattern);
5
- private _assertArguments;
6
- parse(cursor: Cursor): import("../..").Node | null;
7
- clone(): OptionalValue;
8
- getTokens(): string[];
9
- }
@@ -1,32 +0,0 @@
1
- import ValuePattern from "./ValuePattern";
2
- export default class OptionalValue extends ValuePattern {
3
- constructor(pattern) {
4
- super("optional-value", "optional-value", [pattern]);
5
- this._assertArguments();
6
- }
7
- _assertArguments() {
8
- if (!(this.children[0] instanceof ValuePattern)) {
9
- throw new Error("Invalid Arguments: Expected a ValuePattern.");
10
- }
11
- }
12
- parse(cursor) {
13
- const mark = cursor.mark();
14
- const node = this.children[0].parse(cursor);
15
- if (cursor.hasUnresolvedError() || node == null) {
16
- cursor.resolveError();
17
- cursor.moveToMark(mark);
18
- return null;
19
- }
20
- else {
21
- cursor.addMatch(this, node);
22
- return node;
23
- }
24
- }
25
- clone() {
26
- return new OptionalValue(this.children[0]);
27
- }
28
- getTokens() {
29
- return this._children[0].getTokens();
30
- }
31
- }
32
- //# sourceMappingURL=OptionalValue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OptionalValue.js","sourceRoot":"","sources":["../../../src/patterns/value/OptionalValue.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAI1C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY;IACrD,YAAY,OAAqB;QAC/B,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,YAAY,CAAC,EAAE;YAC/C,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAChE;IACH,CAAC;IAED,KAAK,CAAC,MAAc;QAClB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,MAAM,CAAC,kBAAkB,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE;YAC/C,MAAM,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;SACb;aAAM;YACL,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,KAAK;QACH,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAiB,CAAC,CAAC;IAC7D,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACvC,CAAC;CACF"}
@@ -1,19 +0,0 @@
1
- import ValuePattern from "./ValuePattern";
2
- import ValueNode from "../../ast/ValueNode";
3
- import ParseError from "../ParseError";
4
- import Cursor from "../../Cursor";
5
- export default class OrValue extends ValuePattern {
6
- index: number;
7
- errors: ParseError[];
8
- node: ValueNode | null;
9
- cursor: Cursor;
10
- mark: number;
11
- parseError: ParseError | null;
12
- constructor(name: string, patterns: ValuePattern[]);
13
- private _assertArguments;
14
- private _reset;
15
- parse(cursor: Cursor): ValueNode | null;
16
- private _tryPattern;
17
- clone(name: string): OrValue;
18
- getTokens(): string[];
19
- }
@@ -1,73 +0,0 @@
1
- import ValuePattern from "./ValuePattern";
2
- import ValueNode from "../../ast/ValueNode";
3
- import OptionalValue from "./OptionalValue";
4
- export default class OrValue extends ValuePattern {
5
- constructor(name, patterns) {
6
- super("or-value", name, patterns);
7
- this.index = 0;
8
- this.errors = [];
9
- this.node = null;
10
- this.mark = 0;
11
- this.parseError = null;
12
- this._assertArguments();
13
- }
14
- _assertArguments() {
15
- if (this._children.length < 2) {
16
- throw new Error("Invalid Argument: OrValue needs to have more than one value pattern.");
17
- }
18
- const hasOptionalChildren = this._children.some((pattern) => pattern instanceof OptionalValue);
19
- if (hasOptionalChildren) {
20
- throw new Error("OrValues cannot have optional values.");
21
- }
22
- }
23
- _reset(cursor) {
24
- this.index = 0;
25
- this.errors = [];
26
- this.node = null;
27
- this.cursor = cursor;
28
- this.mark = cursor.mark();
29
- }
30
- parse(cursor) {
31
- this._reset(cursor);
32
- this._tryPattern();
33
- return this.node;
34
- }
35
- _tryPattern() {
36
- while (true) {
37
- const pattern = this._children[this.index];
38
- const node = pattern.parse(this.cursor);
39
- if (this.cursor.hasUnresolvedError()) {
40
- if (this.index + 1 < this._children.length) {
41
- this.cursor.resolveError();
42
- this.index++;
43
- this.cursor.moveToMark(this.mark);
44
- }
45
- else {
46
- this.node = null;
47
- break;
48
- }
49
- }
50
- else {
51
- this.node = new ValueNode("or-value", this.name, node.value, node.startIndex, node.endIndex);
52
- this.cursor.index = this.node.endIndex;
53
- this.cursor.addMatch(this, this.node);
54
- break;
55
- }
56
- }
57
- }
58
- clone(name) {
59
- if (typeof name !== "string") {
60
- name = this.name;
61
- }
62
- return new OrValue(name, this._children);
63
- }
64
- getTokens() {
65
- const tokens = this._children.map((c) => c.getTokens());
66
- const hasPrimitiveTokens = tokens.every((t) => t.every((value) => typeof value === "string"));
67
- if (hasPrimitiveTokens && tokens.length > 0) {
68
- return tokens.reduce((acc, t) => acc.concat(t), []);
69
- }
70
- return this._children[0].getTokens();
71
- }
72
- }
73
- //# sourceMappingURL=OrValue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrValue.js","sourceRoot":"","sources":["../../../src/patterns/value/OrValue.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC5C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAK5C,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,YAAY;IAQ/C,YAAY,IAAY,EAAE,QAAwB;QAChD,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAR7B,UAAK,GAAW,CAAC,CAAC;QAClB,WAAM,GAAiB,EAAE,CAAC;QAC1B,SAAI,GAAqB,IAAI,CAAC;QAE9B,SAAI,GAAW,CAAC,CAAC;QACjB,eAAU,GAAsB,IAAI,CAAC;QAI1C,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEO,gBAAgB;QACtB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;SACH;QAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAC7C,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,YAAY,aAAa,CAC9C,CAAC;QAEF,IAAI,mBAAmB,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC1D;IACH,CAAC;IAEO,MAAM,CAAC,MAAc;QAC3B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,MAAc;QAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAEO,WAAW;QACjB,OAAO,IAAI,EAAE;YACX,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAc,CAAC;YAErD,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE;gBACpC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;oBAC1C,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;oBAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACnC;qBAAM;oBACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;oBACjB,MAAM;iBACP;aACF;iBAAM;gBACL,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CACvB,UAAU,EACV,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,QAAQ,CACd,CAAC;gBAEF,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEtC,MAAM;aACP;SACF;IACH,CAAC;IAED,KAAK,CAAC,IAAY;QAChB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SAClB;QACD,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,SAA2B,CAAC,CAAC;IAC7D,CAAC;IAED,SAAS;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAExD,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5C,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAC9C,CAAC;QAEF,IAAI,kBAAkB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SACrD;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACvC,CAAC;CACF"}
@@ -1,19 +0,0 @@
1
- import ValueNode from "../../ast/ValueNode";
2
- import ValuePattern from "./ValuePattern";
3
- import Cursor from "../../Cursor";
4
- export default class RegexValue extends ValuePattern {
5
- regexString: string;
6
- regex: RegExp;
7
- node: ValueNode | null;
8
- cursor: Cursor;
9
- substring: string;
10
- constructor(name: string, regex: string);
11
- private _assertArguments;
12
- parse(cursor: Cursor): ValueNode | null;
13
- private _reset;
14
- private _tryPattern;
15
- private _processError;
16
- clone(name: string): RegexValue;
17
- getTokenValue(): string;
18
- getTokens(): string[];
19
- }
@@ -1,69 +0,0 @@
1
- import ParseError from "../ParseError";
2
- import ValueNode from "../../ast/ValueNode";
3
- import ValuePattern from "./ValuePattern";
4
- export default class RegexValue extends ValuePattern {
5
- constructor(name, regex) {
6
- super("regex-value", name);
7
- this.node = null;
8
- this.substring = "";
9
- this.regexString = regex;
10
- this.regex = new RegExp(`^${regex}`, "g");
11
- this._assertArguments();
12
- }
13
- _assertArguments() {
14
- if (typeof this.regexString !== "string") {
15
- throw new Error("Invalid Arguments: The regex argument needs to be a string of regex.");
16
- }
17
- if (this.regexString.length < 1) {
18
- throw new Error("Invalid Arguments: The regex string argument needs to be at least one character long.");
19
- }
20
- if (this.regexString.charAt(0) === "^") {
21
- throw new Error("Invalid Arguments: The regex string cannot start with a '^' because it is expected to be in the middle of a string.");
22
- }
23
- if (this.regexString.charAt(this.regexString.length - 1) === "$") {
24
- throw new Error("Invalid Arguments: The regex string cannot end with a '$' because it is expected to be in the middle of a string.");
25
- }
26
- }
27
- parse(cursor) {
28
- this._reset(cursor);
29
- this._tryPattern();
30
- return this.node;
31
- }
32
- _reset(cursor) {
33
- this.cursor = cursor;
34
- this.regex.lastIndex = 0;
35
- this.substring = this.cursor.text.substr(this.cursor.getIndex());
36
- this.node = null;
37
- }
38
- _tryPattern() {
39
- const result = this.regex.exec(this.substring);
40
- if (result != null && result.index === 0) {
41
- const currentIndex = this.cursor.getIndex();
42
- const newIndex = currentIndex + result[0].length - 1;
43
- this.node = new ValueNode("regex-value", this.name, result[0], currentIndex, newIndex);
44
- this.cursor.index = newIndex;
45
- this.cursor.addMatch(this, this.node);
46
- }
47
- else {
48
- this._processError();
49
- }
50
- }
51
- _processError() {
52
- const message = `ParseError: Expected regex pattern of '${this.regexString}' but found '${this.substring}'.`;
53
- const parseError = new ParseError(message, this.cursor.getIndex(), this);
54
- this.cursor.throwError(parseError);
55
- }
56
- clone(name) {
57
- if (typeof name !== "string") {
58
- name = this.name;
59
- }
60
- return new RegexValue(name, this.regexString);
61
- }
62
- getTokenValue() {
63
- return this.name;
64
- }
65
- getTokens() {
66
- return [this.name];
67
- }
68
- }
69
- //# sourceMappingURL=RegexValue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RegexValue.js","sourceRoot":"","sources":["../../../src/patterns/value/RegexValue.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import ValuePattern from "./ValuePattern";
2
- import ValueNode from "../../ast/ValueNode";
3
- import Cursor from "../../Cursor";
4
- export default class RepeatValue extends ValuePattern {
5
- _pattern: ValuePattern;
6
- _divider: ValuePattern;
7
- nodes: ValueNode[];
8
- cursor: Cursor;
9
- mark: number;
10
- node: ValueNode | null;
11
- constructor(name: string, pattern: ValuePattern, divider?: ValuePattern);
12
- private _assertArguments;
13
- private _reset;
14
- parse(cursor: Cursor): ValueNode | null;
15
- private _tryPattern;
16
- private _processMatch;
17
- clone(name?: string): RepeatValue;
18
- getTokens(): string[];
19
- }
@@ -1,89 +0,0 @@
1
- import ValuePattern from "./ValuePattern";
2
- import ValueNode from "../../ast/ValueNode";
3
- import ParseError from "../ParseError";
4
- import OptionalValue from "./OptionalValue";
5
- export default class RepeatValue extends ValuePattern {
6
- constructor(name, pattern, divider) {
7
- super("repeat-value", name, divider != null ? [pattern, divider] : [pattern]);
8
- this.nodes = [];
9
- this.mark = 0;
10
- this.node = null;
11
- this._pattern = this.children[0];
12
- this._divider = this.children[1];
13
- this._assertArguments();
14
- }
15
- _assertArguments() {
16
- if (this._pattern instanceof OptionalValue) {
17
- throw new Error("Invalid Arguments: The pattern cannot be a optional pattern.");
18
- }
19
- }
20
- _reset(cursor) {
21
- this.nodes = [];
22
- this.cursor = cursor;
23
- this.mark = this.cursor.mark();
24
- }
25
- parse(cursor) {
26
- this._reset(cursor);
27
- this._tryPattern();
28
- return this.node;
29
- }
30
- _tryPattern() {
31
- while (true) {
32
- const node = this._pattern.parse(this.cursor);
33
- if (this.cursor.hasUnresolvedError()) {
34
- this._processMatch();
35
- break;
36
- }
37
- else {
38
- this.nodes.push(node);
39
- if (node.endIndex === this.cursor.lastIndex()) {
40
- this._processMatch();
41
- break;
42
- }
43
- this.cursor.next();
44
- if (this._divider != null) {
45
- const mark = this.cursor.mark();
46
- const node = this._divider.parse(this.cursor);
47
- if (this.cursor.hasUnresolvedError()) {
48
- this.cursor.moveToMark(mark);
49
- this._processMatch();
50
- break;
51
- }
52
- else {
53
- this.nodes.push(node);
54
- if (node.endIndex === this.cursor.lastIndex()) {
55
- this._processMatch();
56
- break;
57
- }
58
- this.cursor.next();
59
- }
60
- }
61
- }
62
- }
63
- }
64
- _processMatch() {
65
- const endsOnDivider = this.nodes.length % 2 === 0;
66
- this.cursor.resolveError();
67
- if (endsOnDivider) {
68
- const parseError = new ParseError(`Did not find a repeating match of ${this.name}.`, this.mark, this);
69
- this.cursor.throwError(parseError);
70
- this.node = null;
71
- }
72
- else {
73
- const value = this.nodes.map((node) => node.value).join("");
74
- this.node = new ValueNode("repeat-value", this.name, value, this.nodes[0].startIndex, this.nodes[this.nodes.length - 1].endIndex);
75
- this.cursor.index = this.node.endIndex;
76
- this.cursor.addMatch(this, this.node);
77
- }
78
- }
79
- clone(name) {
80
- if (typeof name !== "string") {
81
- name = this.name;
82
- }
83
- return new RepeatValue(name, this._pattern, this._divider);
84
- }
85
- getTokens() {
86
- return this._pattern.getTokens();
87
- }
88
- }
89
- //# sourceMappingURL=RepeatValue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RepeatValue.js","sourceRoot":"","sources":["../../../src/patterns/value/RepeatValue.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import Pattern from "../Pattern";
2
- export default abstract class ValuePattern extends Pattern {
3
- constructor(type: string, name: string, children?: ValuePattern[]);
4
- abstract clone(name?: string): ValuePattern;
5
- }
@@ -1,7 +0,0 @@
1
- import Pattern from "../Pattern";
2
- export default class ValuePattern extends Pattern {
3
- constructor(type, name, children = []) {
4
- super(type, name, children);
5
- }
6
- }
7
- //# sourceMappingURL=ValuePattern.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ValuePattern.js","sourceRoot":"","sources":["../../../src/patterns/value/ValuePattern.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAgB,YAAa,SAAQ,OAAO;IACxD,YAAY,IAAY,EAAE,IAAY,EAAE,WAA2B,EAAE;QACnE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9B,CAAC;CAEF"}
package/src/Permutor.ts DELETED
@@ -1,64 +0,0 @@
1
- export default class Permutor {
2
- public array: Array<Array<string>>;
3
- public positionToOptions: { [key: string]: string[] };
4
-
5
- constructor() {
6
- this.array = [];
7
- this.positionToOptions = {};
8
- }
9
-
10
- permute(array: any) {
11
- this.array = array;
12
- this.createPositionMap();
13
- return this.getPermutations();
14
- }
15
-
16
- getPermutations() {
17
- return this.array[0].reduce((acc: any, value, index) => {
18
- return acc.concat(this.getOptions(0, index));
19
- }, []);
20
- }
21
-
22
- getKey(x: number, y: number) {
23
- return `${x}|${y}`;
24
- }
25
-
26
- createPositionMap() {
27
- this.positionToOptions = {};
28
-
29
- for (let x = this.array.length - 1; x >= 0; x--) {
30
- for (let y = 0; y < this.array[x].length; y++) {
31
- const yValue = this.array[x][y];
32
- const nextX = x + 1;
33
-
34
- if (this.array[nextX] != null) {
35
- const options = this.array[nextX];
36
-
37
- const value = options
38
- .map((option, index) => {
39
- let permutations = this.getOptions(nextX, index);
40
-
41
- return permutations.map((option) => {
42
- return `${yValue}${option}`;
43
- });
44
- })
45
- .reduce((acc, value) => {
46
- return acc.concat(value);
47
- }, []);
48
-
49
- this.setOptions(x, y, value);
50
- } else {
51
- this.setOptions(x, y, [yValue]);
52
- }
53
- }
54
- }
55
- }
56
-
57
- getOptions(x: number, y: number) {
58
- return this.positionToOptions[this.getKey(x, y)];
59
- }
60
-
61
- setOptions(x: number, y: number, value: string[]) {
62
- this.positionToOptions[this.getKey(x, y)] = value;
63
- }
64
- }
@@ -1,26 +0,0 @@
1
- import Node from "./Node";
2
-
3
- export default class CompositeNode extends Node {
4
- constructor(type: string, name: string, startIndex = 0, endIndex = 0) {
5
- super(type, name, startIndex, endIndex, true);
6
- }
7
-
8
- clone() {
9
- const node = new CompositeNode(
10
- this.type,
11
- this.name,
12
- this.startIndex,
13
- this.endIndex
14
- );
15
-
16
- node.children = this.children.map((child) => {
17
- return child.clone();
18
- });
19
-
20
- return node;
21
- }
22
-
23
- toString() {
24
- return this.children.map((child) => child.toString()).join("");
25
- }
26
- }
@@ -1,28 +0,0 @@
1
- import Node from "./Node";
2
-
3
- export default class ValueNode extends Node {
4
- constructor(
5
- type: string,
6
- name: string,
7
- value: string,
8
- startIndex = 0,
9
- endIndex = 0
10
- ) {
11
- super(type, name, startIndex, endIndex);
12
- this.value = value;
13
- }
14
-
15
- clone() {
16
- return new ValueNode(
17
- this.type,
18
- this.name,
19
- this.value,
20
- this.startIndex,
21
- this.endIndex
22
- );
23
- }
24
-
25
- toString() {
26
- return this.value;
27
- }
28
- }
@@ -1,86 +0,0 @@
1
- import Pattern from "./Pattern";
2
- import ParserError from "./ParseError";
3
- import Cursor from "../Cursor";
4
-
5
- export default class RecursivePattern extends Pattern {
6
- public isRecursing: boolean;
7
- public pattern: Pattern | null = null;
8
-
9
- constructor(name: string) {
10
- super("recursive", name);
11
- this.isRecursing = false;
12
- }
13
-
14
- getPattern() {
15
- return this._climb(this.parent, (pattern: Pattern | null) => {
16
- if (pattern == null) {
17
- return false;
18
- }
19
- return pattern.name === this.name;
20
- });
21
- }
22
-
23
- _climb(
24
- pattern: Pattern | null,
25
- isMatch: (pattern: Pattern | null) => boolean
26
- ): Pattern | null {
27
- if (isMatch(pattern)) {
28
- return pattern;
29
- } else {
30
- if (pattern && pattern.parent != null) {
31
- return this._climb(pattern.parent, isMatch);
32
- }
33
- return null;
34
- }
35
- }
36
-
37
- parse(cursor: Cursor) {
38
- if (this.pattern == null) {
39
- const pattern = this.getPattern();
40
-
41
- if (pattern == null) {
42
- cursor.throwError(
43
- new ParserError(
44
- `Couldn't find parent pattern to recursively parse, with the name ${this.name}.`,
45
- cursor.index,
46
- this as Pattern
47
- )
48
- );
49
- return null;
50
- }
51
-
52
- this.pattern = pattern.clone();
53
- this.pattern.parent = this as Pattern;
54
- }
55
-
56
- const node = this.pattern.parse(cursor);
57
-
58
- if (!cursor.hasUnresolvedError() && node != null) {
59
- cursor.addMatch(this as Pattern, node);
60
- }
61
-
62
- return node;
63
- }
64
-
65
- clone(name?: string): Pattern {
66
- if (typeof name !== "string") {
67
- name = this.name;
68
- }
69
- return new RecursivePattern(name);
70
- }
71
-
72
- getTokenValue() {
73
- return this.getPattern()?.getTokenValue() || null;
74
- }
75
-
76
- getTokens() {
77
- if (!this.isRecursing) {
78
- this.isRecursing = true;
79
- const tokens = this.getPattern()?.getTokens() || [];
80
- this.isRecursing = false;
81
-
82
- return tokens;
83
- }
84
- return [];
85
- }
86
- }