clarity-pattern-parser 3.0.7 → 3.0.9

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 (62) hide show
  1. package/dist/Cursor.js +105 -0
  2. package/dist/Cursor.js.map +1 -0
  3. package/dist/CursorHistory.js +104 -0
  4. package/dist/CursorHistory.js.map +1 -0
  5. package/dist/Permutor.js +52 -0
  6. package/dist/Permutor.js.map +1 -0
  7. package/dist/TextSuggester.js +223 -0
  8. package/dist/TextSuggester.js.map +1 -0
  9. package/dist/ast/CompositeNode.js +17 -0
  10. package/dist/ast/CompositeNode.js.map +1 -0
  11. package/dist/ast/Node.js +16 -0
  12. package/dist/ast/Node.js.map +1 -0
  13. package/dist/ast/ValueNode.js +14 -0
  14. package/dist/ast/ValueNode.js.map +1 -0
  15. package/dist/ast/Visitor.d.ts +2 -2
  16. package/dist/ast/Visitor.js +209 -0
  17. package/dist/ast/Visitor.js.map +1 -0
  18. package/dist/index.browser.js +38 -32
  19. package/dist/index.browser.js.map +1 -1
  20. package/dist/index.esm.js +38 -32
  21. package/dist/index.esm.js.map +1 -1
  22. package/dist/index.js +38 -32
  23. package/dist/index.js.map +1 -1
  24. package/dist/patterns/ParseError.js +9 -0
  25. package/dist/patterns/ParseError.js.map +1 -0
  26. package/dist/patterns/Pattern.js +127 -0
  27. package/dist/patterns/Pattern.js.map +1 -0
  28. package/dist/patterns/RecursivePattern.js +65 -0
  29. package/dist/patterns/RecursivePattern.js.map +1 -0
  30. package/dist/patterns/composite/AndComposite.js +117 -0
  31. package/dist/patterns/composite/AndComposite.js.map +1 -0
  32. package/dist/patterns/composite/CompositePattern.js +7 -0
  33. package/dist/patterns/composite/CompositePattern.js.map +1 -0
  34. package/dist/patterns/composite/OptionalComposite.js +29 -0
  35. package/dist/patterns/composite/OptionalComposite.js.map +1 -0
  36. package/dist/patterns/composite/OrComposite.js +69 -0
  37. package/dist/patterns/composite/OrComposite.js.map +1 -0
  38. package/dist/patterns/composite/RepeatComposite.js +83 -0
  39. package/dist/patterns/composite/RepeatComposite.js.map +1 -0
  40. package/dist/patterns/value/AndValue.js +118 -0
  41. package/dist/patterns/value/AndValue.js.map +1 -0
  42. package/dist/patterns/value/AnyOfThese.js +59 -0
  43. package/dist/patterns/value/AnyOfThese.js.map +1 -0
  44. package/dist/patterns/value/Literal.js +63 -0
  45. package/dist/patterns/value/Literal.js.map +1 -0
  46. package/dist/patterns/value/NotValue.js +70 -0
  47. package/dist/patterns/value/NotValue.js.map +1 -0
  48. package/dist/patterns/value/OptionalValue.js +32 -0
  49. package/dist/patterns/value/OptionalValue.js.map +1 -0
  50. package/dist/patterns/value/OrValue.js +73 -0
  51. package/dist/patterns/value/OrValue.js.map +1 -0
  52. package/dist/patterns/value/RegexValue.js +69 -0
  53. package/dist/patterns/value/RegexValue.js.map +1 -0
  54. package/dist/patterns/value/RepeatValue.js +84 -0
  55. package/dist/patterns/value/RepeatValue.js.map +1 -0
  56. package/dist/patterns/value/ValuePattern.js +7 -0
  57. package/dist/patterns/value/ValuePattern.js.map +1 -0
  58. package/package.json +1 -1
  59. package/src/TextSuggester.ts +15 -7
  60. package/src/ast/Visitor.ts +40 -40
  61. package/src/tests/TextSuggester.test.ts +15 -0
  62. package/src/tests/javascriptPatterns/json.ts +1 -0
@@ -14,7 +14,7 @@ export default class Visitor {
14
14
  if (node.isComposite) {
15
15
  const children: Node[] = [];
16
16
 
17
- this.walkUp(node, (descendant: Node) => {
17
+ Visitor.walkUp(node, (descendant: Node) => {
18
18
  if (!descendant.isComposite) {
19
19
  children.push(descendant);
20
20
  }
@@ -68,7 +68,7 @@ export default class Visitor {
68
68
  return this;
69
69
  }
70
70
 
71
- this.walkDown(this.root, (node, stack) => {
71
+ Visitor.walkDown(this.root, (node, stack) => {
72
72
  if (this.selectedNodes.includes(node)) {
73
73
  const parent = stack[stack.length - 1];
74
74
  const grandParent = stack[stack.length - 2];
@@ -90,7 +90,7 @@ export default class Visitor {
90
90
  return this;
91
91
  }
92
92
 
93
- this.walkUp(this.root, (node, stack) => {
93
+ Visitor.walkUp(this.root, (node, stack) => {
94
94
  if (this.selectedNodes.includes(node)) {
95
95
  const parent = stack[stack.length - 1];
96
96
 
@@ -111,7 +111,7 @@ export default class Visitor {
111
111
  return this;
112
112
  }
113
113
 
114
- this.walkDown(this.root, (node, stack) => {
114
+ Visitor.walkDown(this.root, (node, stack) => {
115
115
  if (this.selectedNodes.includes(node)) {
116
116
  const parent = stack[stack.length - 1];
117
117
 
@@ -147,41 +147,6 @@ export default class Visitor {
147
147
  return callback(node);
148
148
  }
149
149
 
150
- walkUp(
151
- node: Node,
152
- callback: (node: Node, ancestors: Node[]) => void,
153
- ancestors: Node[] = []
154
- ) {
155
- ancestors.push(node);
156
-
157
- if (node.isComposite && Array.isArray(node.children)) {
158
- const children = node.children.slice();
159
- children.forEach((c) => this.walkUp(c, callback, ancestors));
160
- }
161
-
162
- ancestors.pop();
163
- callback(node, ancestors);
164
-
165
- return this;
166
- }
167
-
168
- walkDown(
169
- node: Node,
170
- callback: (node: Node, ancestors: Node[]) => void,
171
- ancestors: Node[] = []
172
- ) {
173
- callback(node, ancestors);
174
- ancestors.push(node);
175
-
176
- if (node.isComposite && Array.isArray(node.children)) {
177
- const children = node.children.slice();
178
- children.forEach((c) => this.walkDown(c, callback, ancestors));
179
- }
180
-
181
- ancestors.pop();
182
- return this;
183
- }
184
-
185
150
  selectAll() {
186
151
  return this.select((n) => true);
187
152
  }
@@ -204,7 +169,7 @@ export default class Visitor {
204
169
  const selectedNodes: Node[] = [];
205
170
 
206
171
  if (node.isComposite) {
207
- this.walkDown(node, (descendant: Node) => {
172
+ Visitor.walkDown(node, (descendant: Node) => {
208
173
  if (callback(descendant)) {
209
174
  selectedNodes.push(descendant);
210
175
  }
@@ -272,4 +237,39 @@ export default class Visitor {
272
237
  return new Visitor(root);
273
238
  }
274
239
  }
240
+
241
+ static walkUp(
242
+ node: Node,
243
+ callback: (node: Node, ancestors: Node[]) => void,
244
+ ancestors: Node[] = []
245
+ ) {
246
+ ancestors.push(node);
247
+
248
+ if (node.isComposite && Array.isArray(node.children)) {
249
+ const children = node.children.slice();
250
+ children.forEach((c) => this.walkUp(c, callback, ancestors));
251
+ }
252
+
253
+ ancestors.pop();
254
+ callback(node, ancestors);
255
+
256
+ return this;
257
+ }
258
+
259
+ static walkDown(
260
+ node: Node,
261
+ callback: (node: Node, ancestors: Node[]) => void,
262
+ ancestors: Node[] = []
263
+ ) {
264
+ callback(node, ancestors);
265
+ ancestors.push(node);
266
+
267
+ if (node.isComposite && Array.isArray(node.children)) {
268
+ const children = node.children.slice();
269
+ children.forEach((c) => this.walkDown(c, callback, ancestors));
270
+ }
271
+
272
+ ancestors.pop();
273
+ return this;
274
+ }
275
275
  }
@@ -80,6 +80,21 @@ describe("TextInspector", () => {
80
80
  expect(inspection.error).toBe(null);
81
81
  });
82
82
 
83
+ test("Partial Half Match On First Token", () => {
84
+ const text = "Pa";
85
+ const textInspector = new TextSuggester();
86
+
87
+ const inspection = textInspector.suggest(text, sentence);
88
+
89
+ expect(inspection.match?.startIndex).toBe(0);
90
+ expect(inspection.match?.endIndex).toBe(1);
91
+ expect(inspection.match?.text).toBe("Pa");
92
+ expect(inspection.options.values.length).toBe(1);
93
+ expect(inspection.options.values[0]).toBe("t");
94
+ expect(inspection.isComplete).toBe(false);
95
+ expect(inspection.error).toBe(null);
96
+ });
97
+
83
98
  test("Empty String", () => {
84
99
  const text = "";
85
100
  const textInspector = new TextSuggester();
@@ -13,6 +13,7 @@ import {
13
13
  import string from "./string";
14
14
  import number from "./number";
15
15
  import boolean from "./boolean";
16
+ import Cursor from "../../Cursor";
16
17
 
17
18
  const openCurlyBracket = new Literal("open-curly-bracket", "{");
18
19
  const closeCurlyBracket = new Literal("close-curly-bracket", "}");