@autometa/cucumber-expressions 0.1.7 → 0.1.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.
- package/.turbo/turbo-test.log +22 -22
- package/CHANGELOG.md +12 -0
- package/dist/esm/index.js +33 -25
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.cts +19 -22
- package/dist/index.d.ts +19 -22
- package/dist/index.js +35 -27
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
1
|
|
|
2
|
-
> @autometa/cucumber-expressions@0.1.
|
|
2
|
+
> @autometa/cucumber-expressions@0.1.8 test /Users/ben.aherne/Documents/GitHub/autometa/packages/cucumber-expressions
|
|
3
3
|
> vitest run --passWithNoTests
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
RUN v0.29.8 /Users/ben.aherne/Documents/GitHub/autometa/packages/cucumber-expressions
|
|
7
7
|
|
|
8
|
-
✓ src/step-matchers.spec.ts (
|
|
8
|
+
✓ src/step-matchers.spec.ts (12 tests) 60ms
|
|
9
9
|
stdout | src/search-report.spec.ts > SearchReport > should format the match with same step type
|
|
10
10
|
Scenario: a test scenario
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
Steps with matching step type:
|
|
12
|
+
[4] Given I have {int} blue grapes in my {string}
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
stdout | src/search-report.spec.ts > SearchReport > should format the match with different step type
|
|
16
16
|
Scenario: a test scenario
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
Steps with different step type:
|
|
18
|
+
[4] When I have {int} blue grapes in my {string}
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
stdout | src/search-report.spec.ts > SearchReport > should format the match with same and different step type
|
|
22
22
|
Scenario: a test scenario
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
Steps with matching step type:
|
|
24
|
+
[4] Given I have {int} blue grapes in my {string}
|
|
25
25
|
Steps with different step type:
|
|
26
|
-
|
|
26
|
+
[4] When I have {int} blue grapes in my {string}
|
|
27
27
|
|
|
28
28
|
|
|
29
|
+
✓ src/search-report.spec.ts (6 tests) 28ms
|
|
29
30
|
stdout | src/search-report.spec.ts > SearchReport > should format the match with steps and children with steps
|
|
30
31
|
Feature: a test feature
|
|
32
|
+
Steps with matching step type:
|
|
33
|
+
[4] Given I have {int} blue grapes in my {string}
|
|
34
|
+
Steps with different step type:
|
|
35
|
+
[2] When I have {int} blue grapes in my {string}
|
|
36
|
+
Scenario: a test scenario
|
|
31
37
|
Steps with matching step type:
|
|
32
38
|
[4] Given I have {int} blue grapes in my {string}
|
|
33
|
-
|
|
39
|
+
Steps with different step type:
|
|
34
40
|
[2] When I have {int} blue grapes in my {string}
|
|
35
|
-
|
|
36
|
-
Steps with matching step type:
|
|
37
|
-
[4] Given I have {int} blue grapes in my {string}
|
|
38
|
-
Steps with different step type:
|
|
39
|
-
[2] When I have {int} blue grapes in my {string}
|
|
40
|
-
|
|
41
|
+
|
|
41
42
|
|
|
42
|
-
✓ src/
|
|
43
|
-
✓ src/parameters.spec.ts (
|
|
44
|
-
✓ src/default.parameters.spec.ts (11 tests) 4120ms
|
|
43
|
+
✓ src/parameters.spec.ts (15 tests) 2124ms
|
|
44
|
+
✓ src/default.parameters.spec.ts (11 tests) 3604ms
|
|
45
45
|
|
|
46
46
|
Test Files 4 passed (4)
|
|
47
|
-
Tests
|
|
48
|
-
Start at
|
|
49
|
-
Duration
|
|
47
|
+
Tests 44 passed (44)
|
|
48
|
+
Start at 17:12:31
|
|
49
|
+
Duration 5.70s (transform 248ms, setup 0ms, collect 2.23s, tests 5.82s)
|
|
50
50
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @autometa/cucumber-expressions
|
|
2
2
|
|
|
3
|
+
## 0.1.9
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 4af1139a: Fix: fuzzy search for step names prints malformed strings
|
|
8
|
+
|
|
9
|
+
## 0.1.8
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 4bbb87e4: Fix: step search returns literal strings instead of expressions when no exact match is found
|
|
14
|
+
|
|
3
15
|
## 0.1.7
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/esm/index.js
CHANGED
|
@@ -15,7 +15,6 @@ var __privateAdd = (obj, member, value) => {
|
|
|
15
15
|
// src/step-matcher.ts
|
|
16
16
|
import { diffWordsWithSpace } from "diff";
|
|
17
17
|
import { distance } from "closest-match";
|
|
18
|
-
import { AssertKey } from "@autometa/asserters";
|
|
19
18
|
function checkMatch(text, it) {
|
|
20
19
|
return it.matches(text);
|
|
21
20
|
}
|
|
@@ -37,16 +36,13 @@ function limitDiffs(sameStepType, differentStepType, max) {
|
|
|
37
36
|
return { same: sameSlice, other: differentSlice };
|
|
38
37
|
}
|
|
39
38
|
const maxIndex = Math.min(max, sameStepType.length);
|
|
40
|
-
|
|
41
|
-
return result;
|
|
39
|
+
return { same: sameStepType.slice(0, maxIndex), other: [] };
|
|
42
40
|
}
|
|
43
41
|
function getDiffs(text, maxResults, step) {
|
|
44
42
|
const sorted = step.map((it) => {
|
|
45
43
|
if (checkMatch(text, it)) {
|
|
46
44
|
return { merged: text, step: it, gherkin: text, distance: 0 };
|
|
47
45
|
}
|
|
48
|
-
AssertKey(it, "expression");
|
|
49
|
-
AssertKey(it, "matches");
|
|
50
46
|
const diff = getDiff(text, it);
|
|
51
47
|
const refined = refineDiff(diff);
|
|
52
48
|
const dist = distance(text, refined);
|
|
@@ -68,6 +64,9 @@ function refineDiff(diff) {
|
|
|
68
64
|
index++;
|
|
69
65
|
continue;
|
|
70
66
|
}
|
|
67
|
+
if (gherkinChange.removed === true) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
71
70
|
if (gherkinChange.value) {
|
|
72
71
|
strings.push(gherkinChange.value);
|
|
73
72
|
continue;
|
|
@@ -76,7 +75,7 @@ function refineDiff(diff) {
|
|
|
76
75
|
return strings.join("");
|
|
77
76
|
}
|
|
78
77
|
function isExpressionCandidate(change1, change2) {
|
|
79
|
-
if (change1.removed && change2.added) {
|
|
78
|
+
if (change1 && change1.removed && change2 && change2.added) {
|
|
80
79
|
const scopeText = change2.value;
|
|
81
80
|
return /{.*}/.test(scopeText);
|
|
82
81
|
}
|
|
@@ -89,11 +88,12 @@ var SameStepTypeMatch = class {
|
|
|
89
88
|
constructor(diff) {
|
|
90
89
|
this.keyword = diff.step.keyword;
|
|
91
90
|
this.text = diff.merged;
|
|
91
|
+
this.source = diff.step.expression.source;
|
|
92
92
|
this.distance = diff.distance;
|
|
93
93
|
}
|
|
94
94
|
toString() {
|
|
95
95
|
const keyword = chalk.green(this.keyword);
|
|
96
|
-
const text = chalk.white(this.
|
|
96
|
+
const text = chalk.white(this.source);
|
|
97
97
|
const distance2 = chalk.blue(`[${this.distance}]`);
|
|
98
98
|
return `${distance2} ${keyword} ${text}`;
|
|
99
99
|
}
|
|
@@ -102,26 +102,29 @@ var DifferentStepTypeMatch = class {
|
|
|
102
102
|
constructor(diff) {
|
|
103
103
|
this.keyword = diff.step.keyword;
|
|
104
104
|
this.text = diff.merged;
|
|
105
|
+
this.source = diff.step.expression.source;
|
|
105
106
|
this.distance = diff.distance;
|
|
106
107
|
}
|
|
107
108
|
toString() {
|
|
108
109
|
const keywordColor = chalk.cyan_bt;
|
|
109
110
|
const keyword = keywordColor(this.keyword);
|
|
110
|
-
const text = chalk.
|
|
111
|
+
const text = chalk.white(this.source);
|
|
111
112
|
const distance2 = chalk.blue(`[${this.distance}]`);
|
|
112
113
|
return `${distance2} ${keyword} ${text}`;
|
|
113
114
|
}
|
|
114
115
|
};
|
|
115
116
|
var _sameMatchTypes, sameMatchTypes_get, _differentMatchTypes, differentMatchTypes_get;
|
|
116
117
|
var FuzzySearchReport = class {
|
|
117
|
-
constructor() {
|
|
118
|
+
constructor(depth = 0) {
|
|
119
|
+
this.depth = depth;
|
|
118
120
|
__privateAdd(this, _sameMatchTypes);
|
|
119
121
|
__privateAdd(this, _differentMatchTypes);
|
|
120
122
|
this.matches = [];
|
|
121
123
|
this.children = [];
|
|
122
124
|
}
|
|
123
125
|
get length() {
|
|
124
|
-
|
|
126
|
+
const childLength = this.children.map((it) => it.length).reduce((a, b) => a + b, 0);
|
|
127
|
+
return this.matches.length + childLength;
|
|
125
128
|
}
|
|
126
129
|
addHeading(headingText) {
|
|
127
130
|
this.headingText = headingText;
|
|
@@ -136,26 +139,31 @@ var FuzzySearchReport = class {
|
|
|
136
139
|
return this;
|
|
137
140
|
}
|
|
138
141
|
toString() {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
const
|
|
142
|
+
if (this.length === 0) {
|
|
143
|
+
return "";
|
|
144
|
+
}
|
|
145
|
+
const same = __privateGet(this, _sameMatchTypes, sameMatchTypes_get).filter((it) => it.distance < 10).map((it) => it.toString()).join("\n");
|
|
146
|
+
const sameMessage = same.length > 0 ? chalk.italic(`Steps with matching step type:`) : "";
|
|
147
|
+
const different = __privateGet(this, _differentMatchTypes, differentMatchTypes_get).filter((it) => it.distance < 10).map((it) => it.toString()).join("\n");
|
|
148
|
+
const differentMessage = different.length > 0 ? chalk.italic(`Steps with different step type:`) : "";
|
|
143
149
|
const messageArray = [];
|
|
144
150
|
appendSubMessage(messageArray, sameMessage);
|
|
145
|
-
appendSubMessage(messageArray, same
|
|
151
|
+
appendSubMessage(messageArray, same);
|
|
146
152
|
appendSubMessage(messageArray, differentMessage);
|
|
147
|
-
appendSubMessage(messageArray, different
|
|
153
|
+
appendSubMessage(messageArray, different);
|
|
148
154
|
const children = [];
|
|
149
155
|
this.children.forEach((child) => {
|
|
150
156
|
appendChild(children, child);
|
|
151
157
|
});
|
|
152
|
-
const formatChildren = children.map((it) => it.toString()
|
|
158
|
+
const formatChildren = children.map((it) => it.toString()).join("\n");
|
|
153
159
|
const message = messageArray.join(`
|
|
154
|
-
|
|
155
|
-
const heading = chalk.
|
|
156
|
-
return `${heading}
|
|
157
|
-
${
|
|
158
|
-
${
|
|
160
|
+
`).trim();
|
|
161
|
+
const heading = chalk.black(this.headingText);
|
|
162
|
+
return `${heading ?? ""}
|
|
163
|
+
${message.replace(/\r\n|\n|\r/gm, `
|
|
164
|
+
${TAB}`)}
|
|
165
|
+
${formatChildren.replace(/\r\n|\n|\r/gm, `
|
|
166
|
+
${TAB}`)}`;
|
|
159
167
|
}
|
|
160
168
|
};
|
|
161
169
|
_sameMatchTypes = new WeakSet();
|
|
@@ -172,7 +180,7 @@ differentMatchTypes_get = function() {
|
|
|
172
180
|
};
|
|
173
181
|
function appendSubMessage(arr, message, prefix) {
|
|
174
182
|
if (message && message.length > 0) {
|
|
175
|
-
const str = prefix ? `${prefix}${message}` : message;
|
|
183
|
+
const str = prefix ? `${prefix ?? ""}${message ?? ""}` : message ?? "";
|
|
176
184
|
arr.push(str);
|
|
177
185
|
}
|
|
178
186
|
}
|
|
@@ -183,8 +191,8 @@ function appendChild(arr, message) {
|
|
|
183
191
|
}
|
|
184
192
|
var SPACE = " ";
|
|
185
193
|
var TAB = SPACE.repeat(2);
|
|
186
|
-
function buildFuzzySearchReport({ same, other }) {
|
|
187
|
-
const report = new FuzzySearchReport();
|
|
194
|
+
function buildFuzzySearchReport({ same, other }, depth) {
|
|
195
|
+
const report = new FuzzySearchReport(depth);
|
|
188
196
|
same.forEach((diff) => {
|
|
189
197
|
report.addMatch(new SameStepTypeMatch(diff));
|
|
190
198
|
});
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/step-matcher.ts","../../src/search-report.ts","../../src/parameters.ts","../../src/default.parameters.ts"],"sourcesContent":["import { diffWordsWithSpace, Change } from \"diff\";\nimport { distance } from \"closest-match\";\nimport { Expression } from \"@cucumber/cucumber-expressions\";\nimport { AssertKey } from \"@autometa/asserters\";\nimport { StepKeyword, StepType } from \"@autometa/types\";\nexport interface Matchable {\n matches(text: string): boolean;\n}\n\nexport interface ExpressionWrapper {\n expression: Expression;\n}\n\nexport interface GherkinKeyword {\n type: StepType;\n}\nexport type StepDiff = {\n merged: string;\n step: {\n keyword: StepKeyword;\n expression: Expression;\n type: StepType;\n matches: (text: string) => boolean;\n };\n gherkin: string;\n distance: number;\n};\nexport type StepDiffs = StepDiff[];\nexport type LimitedStepDiffs = { same: StepDiffs; other: StepDiffs };\nexport function checkMatch<T extends Matchable>(text: string, it: T): boolean {\n return it.matches(text);\n}\nexport function limitDiffs(\n sameStepType: StepDiff[],\n differentStepType: StepDiff[],\n max: number\n) : LimitedStepDiffs {\n const sameDistances = sameStepType.map((it) => it.distance);\n const maxSameStepDistance = Math.max(...sameDistances);\n const otherStepDistance = differentStepType.map((it) => it.distance);\n const minDifferentStepDistance = Math.min(...otherStepDistance);\n // Prioritize same-type steps for search. Only\n // consider other-type steps when the lowest\n // other score is lower than the highest same scoreF\n if (maxSameStepDistance > minDifferentStepDistance) {\n const filter = sameStepType.filter(\n (it) => it.distance <= minDifferentStepDistance\n );\n if (filter.length >= max) {\n return { same: filter.slice(0, max), other: [] };\n }\n const diff = max - filter.length;\n const sameSlice = sameStepType.slice(0, diff);\n const differentSlice = differentStepType.slice(0, max - diff);\n return { same: sameSlice, other: differentSlice };\n }\n const maxIndex = Math.min(max, sameStepType.length);\n const result = { same: sameStepType.slice(0, maxIndex), other: [] };\n return result;\n}\n\nexport function getDiffs<T extends Matchable & ExpressionWrapper>(\n text: string,\n maxResults: number,\n step: T[]\n) {\n const sorted = step\n .map((it) => {\n if (checkMatch(text, it)) {\n return { merged: text, step: it, gherkin: text, distance: 0 };\n }\n AssertKey(it, \"expression\");\n AssertKey(it, \"matches\");\n const diff = getDiff(text, it);\n const refined = refineDiff(diff);\n const dist = distance(text, refined);\n return { merged: refined, step: it, gherkin: text, distance: dist };\n })\n .sort((a, b) => a.distance - b.distance);\n const max = Math.min(maxResults, sorted.length);\n return sorted.slice(0, max);\n}\n\nexport function getDiff<T extends ExpressionWrapper>(text: string, it: T) {\n return diffWordsWithSpace(text, it.expression.source);\n}\n\nexport function refineDiff(diff: Change[]) {\n const strings: string[] = [];\n for (let index = 0; index < diff.length; index++) {\n const gherkinChange = diff[index];\n const scopeChange = diff[index + 1];\n if (isExpressionCandidate(gherkinChange, scopeChange)) {\n strings.push(gherkinChange.value);\n index++;\n continue;\n }\n if (gherkinChange.value) {\n strings.push(gherkinChange.value);\n continue;\n }\n }\n return strings.join(\"\");\n}\n\nexport function isExpressionCandidate(change1: Change, change2: Change) {\n if (change1.removed && change2.added) {\n const scopeText = change2.value;\n return /{.*}/.test(scopeText);\n }\n return false;\n}\n","import type { LimitedStepDiffs, StepDiff } from \"./step-matcher\";\nimport chalk from \"colors-cli\";\nexport class SameStepTypeMatch {\n readonly keyword: string;\n readonly text: string;\n readonly distance: number;\n constructor(diff: StepDiff) {\n this.keyword = diff.step.keyword;\n this.text = diff.merged;\n this.distance = diff.distance;\n }\n toString() {\n const keyword = chalk.green(this.keyword);\n const text = chalk.white(this.text);\n const distance = chalk.blue(`[${this.distance}]`);\n return `${distance} ${keyword} ${text}`;\n }\n}\nexport class DifferentStepTypeMatch {\n readonly keyword: string;\n readonly text: string;\n readonly distance: number;\n constructor(diff: StepDiff) {\n this.keyword = diff.step.keyword;\n this.text = diff.merged;\n this.distance = diff.distance;\n }\n toString() {\n const keywordColor = chalk.cyan_bt;\n const keyword = keywordColor(this.keyword);\n const text = chalk.white_b(this.text);\n const distance = chalk.blue(`[${this.distance}]`);\n return `${distance} ${keyword} ${text}`;\n }\n}\nexport class FuzzySearchReport {\n headingText: string;\n matches: (SameStepTypeMatch | DifferentStepTypeMatch)[] = [];\n children: FuzzySearchReport[] = [];\n\n get length() {\n return (\n this.matches.length +\n this.children.length\n );\n }\n addHeading(headingText: string) {\n this.headingText = headingText;\n return this;\n }\n addMatch(match: SameStepTypeMatch | DifferentStepTypeMatch) {\n this.matches.push(match);\n return this;\n }\n addChild(child: FuzzySearchReport) {\n this.children.push(child);\n return this;\n }\n get #sameMatchTypes() {\n return this.matches.filter(\n (it) => it instanceof SameStepTypeMatch\n ) as SameStepTypeMatch[];\n }\n get #differentMatchTypes() {\n return this.matches.filter(\n (it) => it instanceof DifferentStepTypeMatch\n ) as DifferentStepTypeMatch[];\n }\n\n toString() {\n const same = this.#sameMatchTypes.map((it) => it.toString()).join(\"\\n\");\n const sameMessage = same.length > 0 ? `Steps with matching step type:` : \"\";\n const different = this.#differentMatchTypes\n .map((it) => it.toString())\n .join(\"\\n\");\n const differentMessage =\n different.length > 0 ? `Steps with different step type:` : \"\";\n const messageArray: string[] = [];\n appendSubMessage(messageArray, sameMessage);\n appendSubMessage(messageArray, same, TAB);\n appendSubMessage(messageArray, differentMessage);\n appendSubMessage(messageArray, different, TAB);\n const children: FuzzySearchReport[] = [];\n this.children.forEach((child) => {\n appendChild(children, child);\n });\n const formatChildren: string = children\n .map((it) => it.toString().replace(/^/gm, \" \"))\n .join(\"\\n\");\n const message = messageArray.join(`\\n${TAB}`);\n const heading = chalk.black_b(this.headingText);\n return `${heading}\n${TAB}${message}\n${formatChildren}`;\n }\n}\nfunction appendSubMessage(arr: string[], message: string, prefix?: string) {\n if (message && message.length > 0) {\n const str = prefix ? `${prefix}${message}` : message;\n arr.push(str);\n }\n}\nfunction appendChild(arr: FuzzySearchReport[], message: FuzzySearchReport) {\n if (message) {\n arr.push(message);\n }\n}\nconst SPACE = \" \";\nconst TAB = SPACE.repeat(2);\n\nexport function buildFuzzySearchReport({ same, other }: LimitedStepDiffs) {\n const report = new FuzzySearchReport();\n same.forEach((diff) => {\n report.addMatch(new SameStepTypeMatch(diff));\n });\n other.forEach((diff) => {\n report.addMatch(new DifferentStepTypeMatch(diff));\n });\n return report;\n}\n","import {\n Argument,\n ParameterType,\n ParameterTypeRegistry\n} from \"@cucumber/cucumber-expressions\";\nimport { Class } from \"@autometa/types\";\nimport {\n def,\n func,\n instance,\n overloads,\n string,\n nil,\n array\n} from \"@autometa/overloaded\";\n// todo - this has a bug when dealing with {string} - does not remove quotes\nArgument.prototype.getValue = function () {\n if (this.group.children.length > 0) {\n const value = this.group.children\n .filter((it) => it.value !== undefined)\n .map((child) => child.value);\n if (value.length > 0) {\n return this.parameterType.transform(this.parameterType, value);\n }\n }\n const groupValues = this.group\n ? this.group.value\n ? [this.group.value]\n : this.group.values\n : null;\n return this.parameterType.transform(this.parameterType, groupValues);\n};\ntype PrimitiveConstructor =\n | typeof Number\n | typeof String\n | typeof Boolean\n | typeof BigInt;\n\nexport type ParamTypeDefinition = {\n name: string;\n regexpPattern: RegExp | RegExp[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n transform?: (value: any) => unknown;\n type?: Class<unknown>;\n primitive?:\n | typeof String\n | typeof Number\n | typeof Boolean\n | typeof BigInt\n | typeof Date;\n};\n\nconst regexp = instance(RegExp).or(array([instance(RegExp)]));\n\nexport function defineParameterType<T extends ParamTypeDefinition[]>(\n registry: ParameterTypeRegistry,\n ...params: T\n) {\n params.forEach((param) => {\n const { name, regexpPattern, transform, type, primitive } =\n param as ParamTypeDefinition;\n return registerParameterType(\n registry,\n name,\n regexpPattern,\n transform,\n type,\n primitive\n );\n });\n}\nfunction registerParameterType(\n registry: ParameterTypeRegistry,\n name: string,\n regexpPattern: RegExp | RegExp[],\n transform: ((value: unknown) => unknown) | undefined,\n type: Class<unknown> | undefined,\n primitive:\n | NumberConstructor\n | StringConstructor\n | BooleanConstructor\n | BigIntConstructor\n | DateConstructor\n | undefined\n): void {\n return overloads(\n def(\n string(),\n regexp,\n func(\"type\"),\n func(\"transform\"),\n func(\"primitive\")\n ).matches((name, regexp, type, transform, primitive) => {\n const primitivePrototype = primitive as unknown as PrimitiveConstructor;\n const typePrototype = type as unknown as Class<unknown>;\n const wrapper = (val: unknown) => {\n const asPrimitive = primitivePrototype(val);\n const asType = new typePrototype(asPrimitive);\n return transform(asType);\n };\n const param = new ParameterType(name, regexp, type, wrapper);\n registry.defineParameterType(param);\n }),\n def`allTransforms`(\n string(),\n regexp,\n func(\"type\"),\n func(\"transform\"),\n nil(\"primitive\")\n ).matches((name, regexp, type, transform) => {\n const typePrototype = type as unknown as Class<unknown>;\n const wrapper = (val: unknown) => {\n const asType = new typePrototype(val);\n return transform(asType);\n };\n const param = new ParameterType(name, regexp, type, wrapper);\n registry.defineParameterType(param);\n }),\n def`transformPrimitive`(\n string(),\n regexp,\n nil(\"type\"),\n func(\"transform\"),\n func(\"primitive\")\n ).matches((name, regexp, _, transform, primitive) => {\n const primitivePrototype = primitive as unknown as PrimitiveConstructor;\n const wrapper = (val: unknown) => {\n const asPrimitive = primitivePrototype(val);\n return transform(asPrimitive);\n };\n const param = new ParameterType(name, regexp, primitive, wrapper);\n registry.defineParameterType(param);\n }),\n def`encapsulatePrimitive`(\n string(),\n regexp,\n func(\"type\"),\n nil(\"transform\"),\n func(\"primitive\")\n ).matches((name, regexp, type, _, primitive) => {\n const primitivePrototype = primitive as unknown as PrimitiveConstructor;\n const typePrototype = type as unknown as Class<unknown>;\n const wrapper = (val: unknown) => {\n const asPrimitive = primitivePrototype(val);\n return new typePrototype(asPrimitive);\n };\n const param = new ParameterType(name, regexp, type, wrapper);\n registry.defineParameterType(param);\n }),\n def`makeType`(string(), regexp, func(\"type\"), nil(), nil()).matches(\n (name, pattern, type) => {\n const prototype = type as unknown as Class<unknown>;\n const transform = (val: unknown) => new prototype(val);\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }\n ),\n def`makePrimitive`(\n string(),\n regexp,\n nil(),\n nil(),\n func(\"primitive\")\n ).matches((name, pattern, _, __, primitive) => {\n const prototype = primitive as unknown as PrimitiveConstructor;\n const transform = (val: unknown) => prototype(val);\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }),\n def`transformValue`(\n string(),\n regexp,\n nil(),\n func(\"transform\"),\n nil()\n ).matches((name, pattern, _, transform, __) => {\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }),\n def`default`(string(), instance(RegExp), nil(), nil(), nil()).matches(\n (name, pattern, _, __, ___) => {\n const transform = (val: unknown) => val;\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }\n )\n ).use([name, regexpPattern, type, transform, primitive]);\n}\n","import { def, fallback, overloads, string } from \"@autometa/overloaded\";\nimport { ParamTypeDefinition } from \"./parameters\";\nimport { Dates } from \"@autometa/datetime\";\nimport { AssertIs } from \"@autometa/asserters\";\nimport { DateTime } from \"luxon\";\ntype AutoParamTypeDefinition = Omit<ParamTypeDefinition, \"transform\">;\nconst strNum = /['\"]-?\\d+['\"]/;\n\nconst isodateRegexp =\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/;\nconst shortDateRegex =\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\d)/;\nconst boolTypesActive = [\"active\", \"inactive\"];\nconst boolTypesEnabled = [\"enabled\", \"disabled\"];\nconst boolTypes = [\"true\", \"false\"];\n\nexport const NumberParam: AutoParamTypeDefinition = {\n name: \"number\",\n regexpPattern: /\\d+/,\n primitive: Number\n};\n\nexport const AnyParam: AutoParamTypeDefinition = {\n name: \"any\",\n regexpPattern: /.*/\n};\nexport const UnknownParam: AutoParamTypeDefinition = {\n name: \"unknown\",\n regexpPattern: /.*/\n};\nexport const TextParam: ParamTypeDefinition = {\n name: \"text\",\n regexpPattern: /\"([^\"\\\\]*(\\\\.[^\"\\\\]*)*)\"|'([^'\\\\]*(\\\\.[^'\\\\]*)*)'/,\n primitive: String,\n transform: (value: string) => {\n const asStr = value as string;\n return asStr.replace(/^\"(.*)\"$/, \"$1\").replace(/^'(.*)'$/, \"$1\");\n }\n};\n\nexport const BooleanParam: AutoParamTypeDefinition = {\n name: \"boolean\",\n regexpPattern: /true|false/,\n primitive: Boolean\n};\nexport const BoolParam: AutoParamTypeDefinition = {\n name: \"bool\",\n regexpPattern: /true|false/,\n primitive: Boolean\n};\nexport const DateParam: AutoParamTypeDefinition = {\n name: \"date\",\n regexpPattern: [isodateRegexp, shortDateRegex],\n type: Date\n};\n\nexport const PrimitiveParam: ParamTypeDefinition = {\n name: \"primitive\",\n regexpPattern: [\n /true|false/,\n /enabled|disabled/,\n /active|inactive/,\n /null/,\n /empty/,\n /undefined/,\n /NaN/,\n /Infinity/,\n /-Infinity/,\n isodateRegexp,\n shortDateRegex,\n /-?\\d+/,\n /\"([^\"]*)\"/,\n /'([^']*)'/\n ],\n transform: (value: unknown) => {\n return overloads(\n def(string({ equals: \"null\" })).matches((_) => null),\n def(string({ equals: \"undefined\" })).matches((_) => undefined),\n def(string({ in: boolTypes })).matches((val) => Boolean(val)),\n def(string({ equals: \"NaN\" })).matches((_) => NaN),\n def(string({ equals: \"Infinity\" })).matches((_) => Infinity),\n def(string({ equals: \"-Infinity\" })).matches((_) => -Infinity),\n def(string({ pattern: isodateRegexp })).matches(parseIso),\n def(string({ pattern: shortDateRegex })).matches(parseDate),\n def(string({ pattern: strNum })).matches(trimQuotes),\n def(string({ pattern: /-?\\d+/ })).matches((val) => Number(val)),\n def(string({ in: boolTypesEnabled })).matches(boolEnabled),\n def(string({ in: boolTypesActive })).matches(boolActive),\n fallback((val) => {\n AssertIs(val, \"string\");\n const fromPhrase = Dates.fromPhrase(val);\n if (fromPhrase && !isNaN(fromPhrase.getTime())) {\n return fromPhrase;\n }\n return val.replace(/^\"(.*)\"$/, \"$1\").replace(/^'(.*)'$/, \"$1\");\n })\n ).use([value]);\n }\n};\n\nfunction boolActive(val: string): boolean {\n return val === \"active\";\n}\n\nfunction boolEnabled(val: string): boolean {\n return val === \"enabled\";\n}\n\nfunction parseDate(val: string): Date {\n return new Date(Date.parse(val));\n}\n\nfunction trimQuotes(val: string): string {\n return val.slice(1, -1);\n}\n\nfunction parseIso(val: string): Date {\n return DateTime.fromISO(val).toJSDate();\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA,SAAS,0BAAkC;AAC3C,SAAS,gBAAgB;AAEzB,SAAS,iBAAiB;AA0BnB,SAAS,WAAgC,MAAc,IAAgB;AAC5E,SAAO,GAAG,QAAQ,IAAI;AACxB;AACO,SAAS,WACd,cACA,mBACA,KACmB;AACnB,QAAM,gBAAgB,aAAa,IAAI,CAAC,OAAO,GAAG,QAAQ;AAC1D,QAAM,sBAAsB,KAAK,IAAI,GAAG,aAAa;AACrD,QAAM,oBAAoB,kBAAkB,IAAI,CAAC,OAAO,GAAG,QAAQ;AACnE,QAAM,2BAA2B,KAAK,IAAI,GAAG,iBAAiB;AAI9D,MAAI,sBAAsB,0BAA0B;AAClD,UAAM,SAAS,aAAa;AAAA,MAC1B,CAAC,OAAO,GAAG,YAAY;AAAA,IACzB;AACA,QAAI,OAAO,UAAU,KAAK;AACxB,aAAO,EAAE,MAAM,OAAO,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,EAAE;AAAA,IACjD;AACA,UAAM,OAAO,MAAM,OAAO;AAC1B,UAAM,YAAY,aAAa,MAAM,GAAG,IAAI;AAC5C,UAAM,iBAAiB,kBAAkB,MAAM,GAAG,MAAM,IAAI;AAC5D,WAAO,EAAE,MAAM,WAAW,OAAO,eAAe;AAAA,EAClD;AACA,QAAM,WAAW,KAAK,IAAI,KAAK,aAAa,MAAM;AAClD,QAAM,SAAS,EAAE,MAAM,aAAa,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,EAAE;AAClE,SAAO;AACT;AAEO,SAAS,SACd,MACA,YACA,MACA;AACA,QAAM,SAAS,KACZ,IAAI,CAAC,OAAO;AACX,QAAI,WAAW,MAAM,EAAE,GAAG;AACxB,aAAO,EAAE,QAAQ,MAAM,MAAM,IAAI,SAAS,MAAM,UAAU,EAAE;AAAA,IAC9D;AACA,cAAU,IAAI,YAAY;AAC1B,cAAU,IAAI,SAAS;AACvB,UAAM,OAAO,QAAQ,MAAM,EAAE;AAC7B,UAAM,UAAU,WAAW,IAAI;AAC/B,UAAM,OAAO,SAAS,MAAM,OAAO;AACnC,WAAO,EAAE,QAAQ,SAAS,MAAM,IAAI,SAAS,MAAM,UAAU,KAAK;AAAA,EACpE,CAAC,EACA,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ;AACzC,QAAM,MAAM,KAAK,IAAI,YAAY,OAAO,MAAM;AAC9C,SAAO,OAAO,MAAM,GAAG,GAAG;AAC5B;AAEO,SAAS,QAAqC,MAAc,IAAO;AACxE,SAAO,mBAAmB,MAAM,GAAG,WAAW,MAAM;AACtD;AAEO,SAAS,WAAW,MAAgB;AACzC,QAAM,UAAoB,CAAC;AAC3B,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS;AAChD,UAAM,gBAAgB,KAAK,KAAK;AAChC,UAAM,cAAc,KAAK,QAAQ,CAAC;AAClC,QAAI,sBAAsB,eAAe,WAAW,GAAG;AACrD,cAAQ,KAAK,cAAc,KAAK;AAChC;AACA;AAAA,IACF;AACA,QAAI,cAAc,OAAO;AACvB,cAAQ,KAAK,cAAc,KAAK;AAChC;AAAA,IACF;AAAA,EACF;AACA,SAAO,QAAQ,KAAK,EAAE;AACxB;AAEO,SAAS,sBAAsB,SAAiB,SAAiB;AACtE,MAAI,QAAQ,WAAW,QAAQ,OAAO;AACpC,UAAM,YAAY,QAAQ;AAC1B,WAAO,OAAO,KAAK,SAAS;AAAA,EAC9B;AACA,SAAO;AACT;;;AC9GA,OAAO,WAAW;AACX,IAAM,oBAAN,MAAwB;AAAA,EAI7B,YAAY,MAAgB;AAC1B,SAAK,UAAU,KAAK,KAAK;AACzB,SAAK,OAAO,KAAK;AACjB,SAAK,WAAW,KAAK;AAAA,EACvB;AAAA,EACA,WAAW;AACT,UAAM,UAAU,MAAM,MAAM,KAAK,OAAO;AACxC,UAAM,OAAO,MAAM,MAAM,KAAK,IAAI;AAClC,UAAMA,YAAW,MAAM,KAAK,IAAI,KAAK,QAAQ,GAAG;AAChD,WAAO,GAAGA,SAAQ,IAAI,OAAO,IAAI,IAAI;AAAA,EACvC;AACF;AACO,IAAM,yBAAN,MAA6B;AAAA,EAIlC,YAAY,MAAgB;AAC1B,SAAK,UAAU,KAAK,KAAK;AACzB,SAAK,OAAO,KAAK;AACjB,SAAK,WAAW,KAAK;AAAA,EACvB;AAAA,EACA,WAAW;AACT,UAAM,eAAe,MAAM;AAC3B,UAAM,UAAU,aAAa,KAAK,OAAO;AACzC,UAAM,OAAO,MAAM,QAAQ,KAAK,IAAI;AACpC,UAAMA,YAAW,MAAM,KAAK,IAAI,KAAK,QAAQ,GAAG;AAChD,WAAO,GAAGA,SAAQ,IAAI,OAAO,IAAI,IAAI;AAAA,EACvC;AACF;AAlCA;AAmCO,IAAM,oBAAN,MAAwB;AAAA,EAAxB;AAuBL,uBAAI;AAKJ,uBAAI;AA1BJ,mBAA0D,CAAC;AAC3D,oBAAgC,CAAC;AAAA;AAAA,EAEjC,IAAI,SAAS;AACX,WACE,KAAK,QAAQ,SACb,KAAK,SAAS;AAAA,EAElB;AAAA,EACA,WAAW,aAAqB;AAC9B,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EACA,SAAS,OAAmD;AAC1D,SAAK,QAAQ,KAAK,KAAK;AACvB,WAAO;AAAA,EACT;AAAA,EACA,SAAS,OAA0B;AACjC,SAAK,SAAS,KAAK,KAAK;AACxB,WAAO;AAAA,EACT;AAAA,EAYA,WAAW;AACT,UAAM,OAAO,mBAAK,qCAAgB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,EAAE,KAAK,IAAI;AACtE,UAAM,cAAc,KAAK,SAAS,IAAI,mCAAmC;AACzE,UAAM,YAAY,mBAAK,+CACpB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,EACzB,KAAK,IAAI;AACZ,UAAM,mBACJ,UAAU,SAAS,IAAI,oCAAoC;AAC7D,UAAM,eAAyB,CAAC;AAChC,qBAAiB,cAAc,WAAW;AAC1C,qBAAiB,cAAc,MAAM,GAAG;AACxC,qBAAiB,cAAc,gBAAgB;AAC/C,qBAAiB,cAAc,WAAW,GAAG;AAC7C,UAAM,WAAgC,CAAC;AACvC,SAAK,SAAS,QAAQ,CAAC,UAAU;AAC/B,kBAAY,UAAU,KAAK;AAAA,IAC7B,CAAC;AACD,UAAM,iBAAyB,SAC5B,IAAI,CAAC,OAAO,GAAG,SAAS,EAAE,QAAQ,OAAO,GAAG,CAAC,EAC7C,KAAK,IAAI;AACZ,UAAM,UAAU,aAAa,KAAK;AAAA,EAAK,GAAG,EAAE;AAC5C,UAAM,UAAU,MAAM,QAAQ,KAAK,WAAW;AAC9C,WAAO,GAAG,OAAO;AAAA,EACnB,GAAG,GAAG,OAAO;AAAA,EACb,cAAc;AAAA,EACd;AACF;AArCM;AAAA,qBAAe,WAAG;AACpB,SAAO,KAAK,QAAQ;AAAA,IAClB,CAAC,OAAO,cAAc;AAAA,EACxB;AACF;AACI;AAAA,0BAAoB,WAAG;AACzB,SAAO,KAAK,QAAQ;AAAA,IAClB,CAAC,OAAO,cAAc;AAAA,EACxB;AACF;AA6BF,SAAS,iBAAiB,KAAe,SAAiB,QAAiB;AACzE,MAAI,WAAW,QAAQ,SAAS,GAAG;AACjC,UAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,KAAK;AAC7C,QAAI,KAAK,GAAG;AAAA,EACd;AACF;AACA,SAAS,YAAY,KAA0B,SAA4B;AACzE,MAAI,SAAS;AACX,QAAI,KAAK,OAAO;AAAA,EAClB;AACF;AACA,IAAM,QAAQ;AACd,IAAM,MAAM,MAAM,OAAO,CAAC;AAEnB,SAAS,uBAAuB,EAAE,MAAM,MAAM,GAAqB;AACxE,QAAM,SAAS,IAAI,kBAAkB;AACrC,OAAK,QAAQ,CAAC,SAAS;AACrB,WAAO,SAAS,IAAI,kBAAkB,IAAI,CAAC;AAAA,EAC7C,CAAC;AACD,QAAM,QAAQ,CAAC,SAAS;AACtB,WAAO,SAAS,IAAI,uBAAuB,IAAI,CAAC;AAAA,EAClD,CAAC;AACD,SAAO;AACT;;;ACvHA;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,UAAU,WAAW,WAAY;AACxC,MAAI,KAAK,MAAM,SAAS,SAAS,GAAG;AAClC,UAAM,QAAQ,KAAK,MAAM,SACtB,OAAO,CAAC,OAAO,GAAG,UAAU,MAAS,EACrC,IAAI,CAAC,UAAU,MAAM,KAAK;AAC7B,QAAI,MAAM,SAAS,GAAG;AACpB,aAAO,KAAK,cAAc,UAAU,KAAK,eAAe,KAAK;AAAA,IAC/D;AAAA,EACF;AACA,QAAM,cAAc,KAAK,QACrB,KAAK,MAAM,QACT,CAAC,KAAK,MAAM,KAAK,IACjB,KAAK,MAAM,SACb;AACJ,SAAO,KAAK,cAAc,UAAU,KAAK,eAAe,WAAW;AACrE;AAqBA,IAAM,SAAS,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,MAAM,CAAC,CAAC,CAAC;AAErD,SAAS,oBACd,aACG,QACH;AACA,SAAO,QAAQ,CAAC,UAAU;AACxB,UAAM,EAAE,MAAM,eAAe,WAAW,MAAM,UAAU,IACtD;AACF,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AACA,SAAS,sBACP,UACA,MACA,eACA,WACA,MACA,WAOM;AACN,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,MACP;AAAA,MACA,KAAK,MAAM;AAAA,MACX,KAAK,WAAW;AAAA,MAChB,KAAK,WAAW;AAAA,IAClB,EAAE,QAAQ,CAACC,OAAMC,SAAQC,OAAMC,YAAWC,eAAc;AACtD,YAAM,qBAAqBA;AAC3B,YAAM,gBAAgBF;AACtB,YAAM,UAAU,CAAC,QAAiB;AAChC,cAAM,cAAc,mBAAmB,GAAG;AAC1C,cAAM,SAAS,IAAI,cAAc,WAAW;AAC5C,eAAOC,WAAU,MAAM;AAAA,MACzB;AACA,YAAM,QAAQ,IAAI,cAAcH,OAAMC,SAAQC,OAAM,OAAO;AAC3D,eAAS,oBAAoB,KAAK;AAAA,IACpC,CAAC;AAAA,IACD;AAAA,MACE,OAAO;AAAA,MACP;AAAA,MACA,KAAK,MAAM;AAAA,MACX,KAAK,WAAW;AAAA,MAChB,IAAI,WAAW;AAAA,IACjB,EAAE,QAAQ,CAACF,OAAMC,SAAQC,OAAMC,eAAc;AAC3C,YAAM,gBAAgBD;AACtB,YAAM,UAAU,CAAC,QAAiB;AAChC,cAAM,SAAS,IAAI,cAAc,GAAG;AACpC,eAAOC,WAAU,MAAM;AAAA,MACzB;AACA,YAAM,QAAQ,IAAI,cAAcH,OAAMC,SAAQC,OAAM,OAAO;AAC3D,eAAS,oBAAoB,KAAK;AAAA,IACpC,CAAC;AAAA,IACD;AAAA,MACE,OAAO;AAAA,MACP;AAAA,MACA,IAAI,MAAM;AAAA,MACV,KAAK,WAAW;AAAA,MAChB,KAAK,WAAW;AAAA,IAClB,EAAE,QAAQ,CAACF,OAAMC,SAAQ,GAAGE,YAAWC,eAAc;AACnD,YAAM,qBAAqBA;AAC3B,YAAM,UAAU,CAAC,QAAiB;AAChC,cAAM,cAAc,mBAAmB,GAAG;AAC1C,eAAOD,WAAU,WAAW;AAAA,MAC9B;AACA,YAAM,QAAQ,IAAI,cAAcH,OAAMC,SAAQG,YAAW,OAAO;AAChE,eAAS,oBAAoB,KAAK;AAAA,IACpC,CAAC;AAAA,IACD;AAAA,MACE,OAAO;AAAA,MACP;AAAA,MACA,KAAK,MAAM;AAAA,MACX,IAAI,WAAW;AAAA,MACf,KAAK,WAAW;AAAA,IAClB,EAAE,QAAQ,CAACJ,OAAMC,SAAQC,OAAM,GAAGE,eAAc;AAC9C,YAAM,qBAAqBA;AAC3B,YAAM,gBAAgBF;AACtB,YAAM,UAAU,CAAC,QAAiB;AAChC,cAAM,cAAc,mBAAmB,GAAG;AAC1C,eAAO,IAAI,cAAc,WAAW;AAAA,MACtC;AACA,YAAM,QAAQ,IAAI,cAAcF,OAAMC,SAAQC,OAAM,OAAO;AAC3D,eAAS,oBAAoB,KAAK;AAAA,IACpC,CAAC;AAAA,IACD,cAAc,OAAO,GAAG,QAAQ,KAAK,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE;AAAA,MAC1D,CAACF,OAAM,SAASE,UAAS;AACvB,cAAM,YAAYA;AAClB,cAAMC,aAAY,CAAC,QAAiB,IAAI,UAAU,GAAG;AACrD,cAAM,QAAQ,IAAI,cAAcH,OAAM,SAAS,MAAMG,UAAS;AAC9D,iBAAS,oBAAoB,KAAK;AAAA,MACpC;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,KAAK,WAAW;AAAA,IAClB,EAAE,QAAQ,CAACH,OAAM,SAAS,GAAG,IAAII,eAAc;AAC7C,YAAM,YAAYA;AAClB,YAAMD,aAAY,CAAC,QAAiB,UAAU,GAAG;AACjD,YAAM,QAAQ,IAAI,cAAcH,OAAM,SAAS,MAAMG,UAAS;AAC9D,eAAS,oBAAoB,KAAK;AAAA,IACpC,CAAC;AAAA,IACD;AAAA,MACE,OAAO;AAAA,MACP;AAAA,MACA,IAAI;AAAA,MACJ,KAAK,WAAW;AAAA,MAChB,IAAI;AAAA,IACN,EAAE,QAAQ,CAACH,OAAM,SAAS,GAAGG,YAAW,OAAO;AAC7C,YAAM,QAAQ,IAAI,cAAcH,OAAM,SAAS,MAAMG,UAAS;AAC9D,eAAS,oBAAoB,KAAK;AAAA,IACpC,CAAC;AAAA,IACD,aAAa,OAAO,GAAG,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE;AAAA,MAC5D,CAACH,OAAM,SAAS,GAAG,IAAI,QAAQ;AAC7B,cAAMG,aAAY,CAAC,QAAiB;AACpC,cAAM,QAAQ,IAAI,cAAcH,OAAM,SAAS,MAAMG,UAAS;AAC9D,iBAAS,oBAAoB,KAAK;AAAA,MACpC;AAAA,IACF;AAAA,EACF,EAAE,IAAI,CAAC,MAAM,eAAe,MAAM,WAAW,SAAS,CAAC;AACzD;;;AC3LA,SAAS,OAAAE,MAAK,UAAU,aAAAC,YAAW,UAAAC,eAAc;AAEjD,SAAS,aAAa;AACtB,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AAEzB,IAAM,SAAS;AAEf,IAAM,gBACJ;AACF,IAAM,iBACJ;AACF,IAAM,kBAAkB,CAAC,UAAU,UAAU;AAC7C,IAAM,mBAAmB,CAAC,WAAW,UAAU;AAC/C,IAAM,YAAY,CAAC,QAAQ,OAAO;AAE3B,IAAM,cAAuC;AAAA,EAClD,MAAM;AAAA,EACN,eAAe;AAAA,EACf,WAAW;AACb;AAEO,IAAM,WAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,eAAe;AACjB;AACO,IAAM,eAAwC;AAAA,EACnD,MAAM;AAAA,EACN,eAAe;AACjB;AACO,IAAM,YAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,eAAe;AAAA,EACf,WAAW;AAAA,EACX,WAAW,CAAC,UAAkB;AAC5B,UAAM,QAAQ;AACd,WAAO,MAAM,QAAQ,YAAY,IAAI,EAAE,QAAQ,YAAY,IAAI;AAAA,EACjE;AACF;AAEO,IAAM,eAAwC;AAAA,EACnD,MAAM;AAAA,EACN,eAAe;AAAA,EACf,WAAW;AACb;AACO,IAAM,YAAqC;AAAA,EAChD,MAAM;AAAA,EACN,eAAe;AAAA,EACf,WAAW;AACb;AACO,IAAM,YAAqC;AAAA,EAChD,MAAM;AAAA,EACN,eAAe,CAAC,eAAe,cAAc;AAAA,EAC7C,MAAM;AACR;AAEO,IAAM,iBAAsC;AAAA,EACjD,MAAM;AAAA,EACN,eAAe;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,WAAW,CAAC,UAAmB;AAC7B,WAAOD;AAAA,MACLD,KAAIE,QAAO,EAAE,QAAQ,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,IAAI;AAAA,MACnDF,KAAIE,QAAO,EAAE,QAAQ,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,MAAS;AAAA,MAC7DF,KAAIE,QAAO,EAAE,IAAI,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,QAAQ,GAAG,CAAC;AAAA,MAC5DF,KAAIE,QAAO,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG;AAAA,MACjDF,KAAIE,QAAO,EAAE,QAAQ,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,QAAQ;AAAA,MAC3DF,KAAIE,QAAO,EAAE,QAAQ,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,SAAS;AAAA,MAC7DF,KAAIE,QAAO,EAAE,SAAS,cAAc,CAAC,CAAC,EAAE,QAAQ,QAAQ;AAAA,MACxDF,KAAIE,QAAO,EAAE,SAAS,eAAe,CAAC,CAAC,EAAE,QAAQ,SAAS;AAAA,MAC1DF,KAAIE,QAAO,EAAE,SAAS,OAAO,CAAC,CAAC,EAAE,QAAQ,UAAU;AAAA,MACnDF,KAAIE,QAAO,EAAE,SAAS,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,OAAO,GAAG,CAAC;AAAA,MAC9DF,KAAIE,QAAO,EAAE,IAAI,iBAAiB,CAAC,CAAC,EAAE,QAAQ,WAAW;AAAA,MACzDF,KAAIE,QAAO,EAAE,IAAI,gBAAgB,CAAC,CAAC,EAAE,QAAQ,UAAU;AAAA,MACvD,SAAS,CAAC,QAAQ;AAChB,iBAAS,KAAK,QAAQ;AACtB,cAAM,aAAa,MAAM,WAAW,GAAG;AACvC,YAAI,cAAc,CAAC,MAAM,WAAW,QAAQ,CAAC,GAAG;AAC9C,iBAAO;AAAA,QACT;AACA,eAAO,IAAI,QAAQ,YAAY,IAAI,EAAE,QAAQ,YAAY,IAAI;AAAA,MAC/D,CAAC;AAAA,IACH,EAAE,IAAI,CAAC,KAAK,CAAC;AAAA,EACf;AACF;AAEA,SAAS,WAAW,KAAsB;AACxC,SAAO,QAAQ;AACjB;AAEA,SAAS,YAAY,KAAsB;AACzC,SAAO,QAAQ;AACjB;AAEA,SAAS,UAAU,KAAmB;AACpC,SAAO,IAAI,KAAK,KAAK,MAAM,GAAG,CAAC;AACjC;AAEA,SAAS,WAAW,KAAqB;AACvC,SAAO,IAAI,MAAM,GAAG,EAAE;AACxB;AAEA,SAAS,SAAS,KAAmB;AACnC,SAAO,SAAS,QAAQ,GAAG,EAAE,SAAS;AACxC;","names":["distance","name","regexp","type","transform","primitive","def","overloads","string"]}
|
|
1
|
+
{"version":3,"sources":["../../src/step-matcher.ts","../../src/search-report.ts","../../src/parameters.ts","../../src/default.parameters.ts"],"sourcesContent":["import { diffWordsWithSpace, Change } from \"diff\";\nimport { distance } from \"closest-match\";\nimport { CachedStep } from \"./types\";\nexport type StepDiff = {\n merged: string;\n step: CachedStep;\n gherkin: string;\n distance: number;\n};\nexport type StepDiffs = StepDiff[];\nexport type LimitedStepDiffs = { same: StepDiffs; other: StepDiffs };\nexport function checkMatch(text: string, it: CachedStep): boolean {\n return it.matches(text);\n}\nexport function limitDiffs(\n sameStepType: StepDiffs,\n differentStepType: StepDiffs,\n max: number\n): LimitedStepDiffs {\n const sameDistances = sameStepType.map((it) => it.distance);\n const maxSameStepDistance = Math.max(...sameDistances);\n const otherStepDistance = differentStepType.map((it) => it.distance);\n const minDifferentStepDistance = Math.min(...otherStepDistance);\n // Prioritize same-type steps for search. Only\n // consider other-type steps when the lowest\n // other score is lower than the highest same scoreF\n if (maxSameStepDistance > minDifferentStepDistance) {\n const filter = sameStepType.filter(\n (it) => it.distance <= minDifferentStepDistance\n );\n if (filter.length >= max) {\n return { same: filter.slice(0, max), other: [] };\n }\n const diff = max - filter.length;\n const sameSlice = sameStepType.slice(0, diff);\n const differentSlice = differentStepType.slice(0, max - diff);\n return { same: sameSlice, other: differentSlice };\n }\n const maxIndex = Math.min(max, sameStepType.length);\n return { same: sameStepType.slice(0, maxIndex), other: [] };\n}\n\nexport function getDiffs(text: string, maxResults: number, step: CachedStep[]) {\n const sorted = step\n .map((it) => {\n if (checkMatch(text, it)) {\n return { merged: text, step: it, gherkin: text, distance: 0 };\n }\n const diff = getDiff(text, it);\n const refined = refineDiff(diff);\n const dist = distance(text, refined);\n return { merged: refined, step: it, gherkin: text, distance: dist };\n })\n .sort((a, b) => a.distance - b.distance);\n const max = Math.min(maxResults, sorted.length);\n return sorted.slice(0, max);\n}\n\nexport function getDiff(text: string, it: CachedStep) {\n return diffWordsWithSpace(text, it.expression.source);\n}\n\nexport function refineDiff(diff: Change[]) {\n const strings: string[] = [];\n for (let index = 0; index < diff.length; index++) {\n const gherkinChange = diff[index];\n const scopeChange = diff[index + 1];\n if (isExpressionCandidate(gherkinChange, scopeChange)) {\n strings.push(gherkinChange.value);\n index++;\n continue;\n }\n if (gherkinChange.removed === true) {\n continue;\n }\n if (gherkinChange.value) {\n strings.push(gherkinChange.value);\n continue;\n }\n }\n return strings.join(\"\");\n}\n\nexport function isExpressionCandidate(change1: Change, change2: Change) {\n if (change1 && change1.removed && change2 && change2.added) {\n const scopeText = change2.value;\n return /{.*}/.test(scopeText);\n }\n return false;\n}","import type { LimitedStepDiffs, StepDiff } from \"./step-matcher\";\nimport chalk from \"colors-cli\";\nexport class SameStepTypeMatch {\n readonly keyword: string;\n readonly text: string;\n readonly source: string;\n readonly distance: number;\n constructor(diff: StepDiff) {\n this.keyword = diff.step.keyword;\n this.text = diff.merged;\n this.source = diff.step.expression.source;\n this.distance = diff.distance;\n }\n toString() {\n const keyword = chalk.green(this.keyword);\n const text = chalk.white(this.source);\n const distance = chalk.blue(`[${this.distance}]`);\n return `${distance} ${keyword} ${text}`;\n }\n}\nexport class DifferentStepTypeMatch {\n readonly keyword: string;\n readonly text: string;\n readonly source: string;\n readonly distance: number;\n constructor(diff: StepDiff) {\n this.keyword = diff.step.keyword;\n this.text = diff.merged;\n this.source = diff.step.expression.source;\n this.distance = diff.distance;\n }\n toString() {\n const keywordColor = chalk.cyan_bt;\n const keyword = keywordColor(this.keyword);\n const text = chalk.white(this.source);\n const distance = chalk.blue(`[${this.distance}]`);\n return `${distance} ${keyword} ${text}`;\n }\n}\nexport class FuzzySearchReport {\n headingText: string;\n matches: (SameStepTypeMatch | DifferentStepTypeMatch)[] = [];\n children: FuzzySearchReport[] = [];\n constructor(readonly depth: number = 0) {}\n get length() {\n const childLength: number = this.children\n .map((it) => it.length)\n .reduce<number>((a: number, b: number) => a + b, 0);\n return this.matches.length + childLength;\n }\n addHeading(headingText: string) {\n this.headingText = headingText;\n return this;\n }\n addMatch(match: SameStepTypeMatch | DifferentStepTypeMatch) {\n this.matches.push(match);\n return this;\n }\n addChild(child: FuzzySearchReport) {\n this.children.push(child);\n return this;\n }\n get #sameMatchTypes() {\n return this.matches.filter(\n (it) => it instanceof SameStepTypeMatch\n ) as SameStepTypeMatch[];\n }\n get #differentMatchTypes() {\n return this.matches.filter(\n (it) => it instanceof DifferentStepTypeMatch\n ) as DifferentStepTypeMatch[];\n }\n\n toString() {\n if (this.length === 0) {\n return \"\";\n }\n const same = this.#sameMatchTypes\n .filter((it) => it.distance < 10)\n .map((it) => it.toString())\n .join(\"\\n\");\n const sameMessage =\n same.length > 0 ? chalk.italic(`Steps with matching step type:`) : \"\";\n const different = this.#differentMatchTypes\n .filter((it) => it.distance < 10)\n .map((it) => it.toString())\n .join(\"\\n\");\n const differentMessage =\n different.length > 0\n ? chalk.italic(`Steps with different step type:`)\n : \"\";\n\n const messageArray: string[] = [];\n appendSubMessage(messageArray, sameMessage);\n appendSubMessage(messageArray, same);\n appendSubMessage(messageArray, differentMessage);\n appendSubMessage(messageArray, different);\n const children: FuzzySearchReport[] = [];\n this.children.forEach((child) => {\n appendChild(children, child);\n });\n const formatChildren: string = children\n .map((it) => it.toString())\n .join(\"\\n\")\n const message = messageArray.join(`\\n`).trim();\n const heading = chalk.black(this.headingText);\n return `${heading ?? \"\"}\n${message.replace(/\\r\\n|\\n|\\r/gm, `\\n${TAB}`)}\n${formatChildren.replace(/\\r\\n|\\n|\\r/gm, `\\n${TAB}`)}`;\n }\n}\nfunction appendSubMessage(arr: string[], message: string, prefix?: string) {\n if (message && message.length > 0) {\n const str = prefix ? `${prefix ?? \"\"}${message ?? \"\"}` : message ?? \"\";\n arr.push(str);\n }\n}\nfunction appendChild(arr: FuzzySearchReport[], message: FuzzySearchReport) {\n if (message) {\n arr.push(message);\n }\n}\nconst SPACE = \" \";\nconst TAB = SPACE.repeat(2);\n\nexport function buildFuzzySearchReport(\n { same, other }: LimitedStepDiffs,\n depth: number\n) {\n const report = new FuzzySearchReport(depth);\n same.forEach((diff) => {\n report.addMatch(new SameStepTypeMatch(diff));\n });\n other.forEach((diff) => {\n report.addMatch(new DifferentStepTypeMatch(diff));\n });\n return report;\n}","import {\n Argument,\n ParameterType,\n ParameterTypeRegistry\n} from \"@cucumber/cucumber-expressions\";\nimport { Class } from \"@autometa/types\";\nimport {\n def,\n func,\n instance,\n overloads,\n string,\n nil,\n array\n} from \"@autometa/overloaded\";\n// todo - this has a bug when dealing with {string} - does not remove quotes\nArgument.prototype.getValue = function () {\n if (this.group.children.length > 0) {\n const value = this.group.children\n .filter((it) => it.value !== undefined)\n .map((child) => child.value);\n if (value.length > 0) {\n return this.parameterType.transform(this.parameterType, value);\n }\n }\n const groupValues = this.group\n ? this.group.value\n ? [this.group.value]\n : this.group.values\n : null;\n return this.parameterType.transform(this.parameterType, groupValues);\n};\ntype PrimitiveConstructor =\n | typeof Number\n | typeof String\n | typeof Boolean\n | typeof BigInt;\n\nexport type ParamTypeDefinition = {\n name: string;\n regexpPattern: RegExp | RegExp[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n transform?: (value: any) => unknown;\n type?: Class<unknown>;\n primitive?:\n | typeof String\n | typeof Number\n | typeof Boolean\n | typeof BigInt\n | typeof Date;\n};\n\nconst regexp = instance(RegExp).or(array([instance(RegExp)]));\n\nexport function defineParameterType<T extends ParamTypeDefinition[]>(\n registry: ParameterTypeRegistry,\n ...params: T\n) {\n params.forEach((param) => {\n const { name, regexpPattern, transform, type, primitive } =\n param as ParamTypeDefinition;\n return registerParameterType(\n registry,\n name,\n regexpPattern,\n transform,\n type,\n primitive\n );\n });\n}\nfunction registerParameterType(\n registry: ParameterTypeRegistry,\n name: string,\n regexpPattern: RegExp | RegExp[],\n transform: ((value: unknown) => unknown) | undefined,\n type: Class<unknown> | undefined,\n primitive:\n | NumberConstructor\n | StringConstructor\n | BooleanConstructor\n | BigIntConstructor\n | DateConstructor\n | undefined\n): void {\n return overloads(\n def(\n string(),\n regexp,\n func(\"type\"),\n func(\"transform\"),\n func(\"primitive\")\n ).matches((name, regexp, type, transform, primitive) => {\n const primitivePrototype = primitive as unknown as PrimitiveConstructor;\n const typePrototype = type as unknown as Class<unknown>;\n const wrapper = (val: unknown) => {\n const asPrimitive = primitivePrototype(val);\n const asType = new typePrototype(asPrimitive);\n return transform(asType);\n };\n const param = new ParameterType(name, regexp, type, wrapper);\n registry.defineParameterType(param);\n }),\n def`allTransforms`(\n string(),\n regexp,\n func(\"type\"),\n func(\"transform\"),\n nil(\"primitive\")\n ).matches((name, regexp, type, transform) => {\n const typePrototype = type as unknown as Class<unknown>;\n const wrapper = (val: unknown) => {\n const asType = new typePrototype(val);\n return transform(asType);\n };\n const param = new ParameterType(name, regexp, type, wrapper);\n registry.defineParameterType(param);\n }),\n def`transformPrimitive`(\n string(),\n regexp,\n nil(\"type\"),\n func(\"transform\"),\n func(\"primitive\")\n ).matches((name, regexp, _, transform, primitive) => {\n const primitivePrototype = primitive as unknown as PrimitiveConstructor;\n const wrapper = (val: unknown) => {\n const asPrimitive = primitivePrototype(val);\n return transform(asPrimitive);\n };\n const param = new ParameterType(name, regexp, primitive, wrapper);\n registry.defineParameterType(param);\n }),\n def`encapsulatePrimitive`(\n string(),\n regexp,\n func(\"type\"),\n nil(\"transform\"),\n func(\"primitive\")\n ).matches((name, regexp, type, _, primitive) => {\n const primitivePrototype = primitive as unknown as PrimitiveConstructor;\n const typePrototype = type as unknown as Class<unknown>;\n const wrapper = (val: unknown) => {\n const asPrimitive = primitivePrototype(val);\n return new typePrototype(asPrimitive);\n };\n const param = new ParameterType(name, regexp, type, wrapper);\n registry.defineParameterType(param);\n }),\n def`makeType`(string(), regexp, func(\"type\"), nil(), nil()).matches(\n (name, pattern, type) => {\n const prototype = type as unknown as Class<unknown>;\n const transform = (val: unknown) => new prototype(val);\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }\n ),\n def`makePrimitive`(\n string(),\n regexp,\n nil(),\n nil(),\n func(\"primitive\")\n ).matches((name, pattern, _, __, primitive) => {\n const prototype = primitive as unknown as PrimitiveConstructor;\n const transform = (val: unknown) => prototype(val);\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }),\n def`transformValue`(\n string(),\n regexp,\n nil(),\n func(\"transform\"),\n nil()\n ).matches((name, pattern, _, transform, __) => {\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }),\n def`default`(string(), instance(RegExp), nil(), nil(), nil()).matches(\n (name, pattern, _, __, ___) => {\n const transform = (val: unknown) => val;\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }\n )\n ).use([name, regexpPattern, type, transform, primitive]);\n}\n","import { def, fallback, overloads, string } from \"@autometa/overloaded\";\nimport { ParamTypeDefinition } from \"./parameters\";\nimport { Dates } from \"@autometa/datetime\";\nimport { AssertIs } from \"@autometa/asserters\";\nimport { DateTime } from \"luxon\";\ntype AutoParamTypeDefinition = Omit<ParamTypeDefinition, \"transform\">;\nconst strNum = /['\"]-?\\d+['\"]/;\n\nconst isodateRegexp =\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/;\nconst shortDateRegex =\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\d)/;\nconst boolTypesActive = [\"active\", \"inactive\"];\nconst boolTypesEnabled = [\"enabled\", \"disabled\"];\nconst boolTypes = [\"true\", \"false\"];\n\nexport const NumberParam: AutoParamTypeDefinition = {\n name: \"number\",\n regexpPattern: /\\d+/,\n primitive: Number\n};\n\nexport const AnyParam: AutoParamTypeDefinition = {\n name: \"any\",\n regexpPattern: /.*/\n};\nexport const UnknownParam: AutoParamTypeDefinition = {\n name: \"unknown\",\n regexpPattern: /.*/\n};\nexport const TextParam: ParamTypeDefinition = {\n name: \"text\",\n regexpPattern: /\"([^\"\\\\]*(\\\\.[^\"\\\\]*)*)\"|'([^'\\\\]*(\\\\.[^'\\\\]*)*)'/,\n primitive: String,\n transform: (value: string) => {\n const asStr = value as string;\n return asStr.replace(/^\"(.*)\"$/, \"$1\").replace(/^'(.*)'$/, \"$1\");\n }\n};\n\nexport const BooleanParam: AutoParamTypeDefinition = {\n name: \"boolean\",\n regexpPattern: /true|false/,\n primitive: Boolean\n};\nexport const BoolParam: AutoParamTypeDefinition = {\n name: \"bool\",\n regexpPattern: /true|false/,\n primitive: Boolean\n};\nexport const DateParam: AutoParamTypeDefinition = {\n name: \"date\",\n regexpPattern: [isodateRegexp, shortDateRegex],\n type: Date\n};\n\nexport const PrimitiveParam: ParamTypeDefinition = {\n name: \"primitive\",\n regexpPattern: [\n /true|false/,\n /enabled|disabled/,\n /active|inactive/,\n /null/,\n /empty/,\n /undefined/,\n /NaN/,\n /Infinity/,\n /-Infinity/,\n isodateRegexp,\n shortDateRegex,\n /-?\\d+/,\n /\"([^\"]*)\"/,\n /'([^']*)'/\n ],\n transform: (value: unknown) => {\n return overloads(\n def(string({ equals: \"null\" })).matches((_) => null),\n def(string({ equals: \"undefined\" })).matches((_) => undefined),\n def(string({ in: boolTypes })).matches((val) => Boolean(val)),\n def(string({ equals: \"NaN\" })).matches((_) => NaN),\n def(string({ equals: \"Infinity\" })).matches((_) => Infinity),\n def(string({ equals: \"-Infinity\" })).matches((_) => -Infinity),\n def(string({ pattern: isodateRegexp })).matches(parseIso),\n def(string({ pattern: shortDateRegex })).matches(parseDate),\n def(string({ pattern: strNum })).matches(trimQuotes),\n def(string({ pattern: /-?\\d+/ })).matches((val) => Number(val)),\n def(string({ in: boolTypesEnabled })).matches(boolEnabled),\n def(string({ in: boolTypesActive })).matches(boolActive),\n fallback((val) => {\n AssertIs(val, \"string\");\n const fromPhrase = Dates.fromPhrase(val);\n if (fromPhrase && !isNaN(fromPhrase.getTime())) {\n return fromPhrase;\n }\n return val.replace(/^\"(.*)\"$/, \"$1\").replace(/^'(.*)'$/, \"$1\");\n })\n ).use([value]);\n }\n};\n\nfunction boolActive(val: string): boolean {\n return val === \"active\";\n}\n\nfunction boolEnabled(val: string): boolean {\n return val === \"enabled\";\n}\n\nfunction parseDate(val: string): Date {\n return new Date(Date.parse(val));\n}\n\nfunction trimQuotes(val: string): string {\n return val.slice(1, -1);\n}\n\nfunction parseIso(val: string): Date {\n return DateTime.fromISO(val).toJSDate();\n}\n"],"mappings":"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","names":["distance","name","regexp","type","transform","primitive","def","overloads","string"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,24 +1,17 @@
|
|
|
1
1
|
import { Change } from 'diff';
|
|
2
2
|
import { Expression, ParameterTypeRegistry } from '@cucumber/cucumber-expressions';
|
|
3
|
-
import {
|
|
3
|
+
import { Class } from '@autometa/types';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
interface ExpressionWrapper {
|
|
5
|
+
type CachedStep = {
|
|
6
|
+
keyword: string;
|
|
7
|
+
type: string;
|
|
9
8
|
expression: Expression;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
9
|
+
matches: (text: string) => boolean;
|
|
10
|
+
};
|
|
11
|
+
|
|
14
12
|
type StepDiff = {
|
|
15
13
|
merged: string;
|
|
16
|
-
step:
|
|
17
|
-
keyword: StepKeyword;
|
|
18
|
-
expression: Expression;
|
|
19
|
-
type: StepType;
|
|
20
|
-
matches: (text: string) => boolean;
|
|
21
|
-
};
|
|
14
|
+
step: CachedStep;
|
|
22
15
|
gherkin: string;
|
|
23
16
|
distance: number;
|
|
24
17
|
};
|
|
@@ -27,21 +20,22 @@ type LimitedStepDiffs = {
|
|
|
27
20
|
same: StepDiffs;
|
|
28
21
|
other: StepDiffs;
|
|
29
22
|
};
|
|
30
|
-
declare function checkMatch
|
|
31
|
-
declare function limitDiffs(sameStepType:
|
|
32
|
-
declare function getDiffs
|
|
23
|
+
declare function checkMatch(text: string, it: CachedStep): boolean;
|
|
24
|
+
declare function limitDiffs(sameStepType: StepDiffs, differentStepType: StepDiffs, max: number): LimitedStepDiffs;
|
|
25
|
+
declare function getDiffs(text: string, maxResults: number, step: CachedStep[]): {
|
|
33
26
|
merged: string;
|
|
34
|
-
step:
|
|
27
|
+
step: CachedStep;
|
|
35
28
|
gherkin: string;
|
|
36
29
|
distance: number;
|
|
37
30
|
}[];
|
|
38
|
-
declare function getDiff
|
|
31
|
+
declare function getDiff(text: string, it: CachedStep): Change[];
|
|
39
32
|
declare function refineDiff(diff: Change[]): string;
|
|
40
33
|
declare function isExpressionCandidate(change1: Change, change2: Change): boolean;
|
|
41
34
|
|
|
42
35
|
declare class SameStepTypeMatch {
|
|
43
36
|
readonly keyword: string;
|
|
44
37
|
readonly text: string;
|
|
38
|
+
readonly source: string;
|
|
45
39
|
readonly distance: number;
|
|
46
40
|
constructor(diff: StepDiff);
|
|
47
41
|
toString(): string;
|
|
@@ -49,22 +43,25 @@ declare class SameStepTypeMatch {
|
|
|
49
43
|
declare class DifferentStepTypeMatch {
|
|
50
44
|
readonly keyword: string;
|
|
51
45
|
readonly text: string;
|
|
46
|
+
readonly source: string;
|
|
52
47
|
readonly distance: number;
|
|
53
48
|
constructor(diff: StepDiff);
|
|
54
49
|
toString(): string;
|
|
55
50
|
}
|
|
56
51
|
declare class FuzzySearchReport {
|
|
57
52
|
#private;
|
|
53
|
+
readonly depth: number;
|
|
58
54
|
headingText: string;
|
|
59
55
|
matches: (SameStepTypeMatch | DifferentStepTypeMatch)[];
|
|
60
56
|
children: FuzzySearchReport[];
|
|
57
|
+
constructor(depth?: number);
|
|
61
58
|
get length(): number;
|
|
62
59
|
addHeading(headingText: string): this;
|
|
63
60
|
addMatch(match: SameStepTypeMatch | DifferentStepTypeMatch): this;
|
|
64
61
|
addChild(child: FuzzySearchReport): this;
|
|
65
62
|
toString(): string;
|
|
66
63
|
}
|
|
67
|
-
declare function buildFuzzySearchReport({ same, other }: LimitedStepDiffs): FuzzySearchReport;
|
|
64
|
+
declare function buildFuzzySearchReport({ same, other }: LimitedStepDiffs, depth: number): FuzzySearchReport;
|
|
68
65
|
|
|
69
66
|
type ParamTypeDefinition = {
|
|
70
67
|
name: string;
|
|
@@ -85,4 +82,4 @@ declare const BoolParam: AutoParamTypeDefinition;
|
|
|
85
82
|
declare const DateParam: AutoParamTypeDefinition;
|
|
86
83
|
declare const PrimitiveParam: ParamTypeDefinition;
|
|
87
84
|
|
|
88
|
-
export { AnyParam, BoolParam, BooleanParam, DateParam, DifferentStepTypeMatch,
|
|
85
|
+
export { AnyParam, BoolParam, BooleanParam, DateParam, DifferentStepTypeMatch, FuzzySearchReport, LimitedStepDiffs, NumberParam, ParamTypeDefinition, PrimitiveParam, SameStepTypeMatch, StepDiff, StepDiffs, TextParam, UnknownParam, buildFuzzySearchReport, checkMatch, defineParameterType, getDiff, getDiffs, isExpressionCandidate, limitDiffs, refineDiff };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,24 +1,17 @@
|
|
|
1
1
|
import { Change } from 'diff';
|
|
2
2
|
import { Expression, ParameterTypeRegistry } from '@cucumber/cucumber-expressions';
|
|
3
|
-
import {
|
|
3
|
+
import { Class } from '@autometa/types';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
interface ExpressionWrapper {
|
|
5
|
+
type CachedStep = {
|
|
6
|
+
keyword: string;
|
|
7
|
+
type: string;
|
|
9
8
|
expression: Expression;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
9
|
+
matches: (text: string) => boolean;
|
|
10
|
+
};
|
|
11
|
+
|
|
14
12
|
type StepDiff = {
|
|
15
13
|
merged: string;
|
|
16
|
-
step:
|
|
17
|
-
keyword: StepKeyword;
|
|
18
|
-
expression: Expression;
|
|
19
|
-
type: StepType;
|
|
20
|
-
matches: (text: string) => boolean;
|
|
21
|
-
};
|
|
14
|
+
step: CachedStep;
|
|
22
15
|
gherkin: string;
|
|
23
16
|
distance: number;
|
|
24
17
|
};
|
|
@@ -27,21 +20,22 @@ type LimitedStepDiffs = {
|
|
|
27
20
|
same: StepDiffs;
|
|
28
21
|
other: StepDiffs;
|
|
29
22
|
};
|
|
30
|
-
declare function checkMatch
|
|
31
|
-
declare function limitDiffs(sameStepType:
|
|
32
|
-
declare function getDiffs
|
|
23
|
+
declare function checkMatch(text: string, it: CachedStep): boolean;
|
|
24
|
+
declare function limitDiffs(sameStepType: StepDiffs, differentStepType: StepDiffs, max: number): LimitedStepDiffs;
|
|
25
|
+
declare function getDiffs(text: string, maxResults: number, step: CachedStep[]): {
|
|
33
26
|
merged: string;
|
|
34
|
-
step:
|
|
27
|
+
step: CachedStep;
|
|
35
28
|
gherkin: string;
|
|
36
29
|
distance: number;
|
|
37
30
|
}[];
|
|
38
|
-
declare function getDiff
|
|
31
|
+
declare function getDiff(text: string, it: CachedStep): Change[];
|
|
39
32
|
declare function refineDiff(diff: Change[]): string;
|
|
40
33
|
declare function isExpressionCandidate(change1: Change, change2: Change): boolean;
|
|
41
34
|
|
|
42
35
|
declare class SameStepTypeMatch {
|
|
43
36
|
readonly keyword: string;
|
|
44
37
|
readonly text: string;
|
|
38
|
+
readonly source: string;
|
|
45
39
|
readonly distance: number;
|
|
46
40
|
constructor(diff: StepDiff);
|
|
47
41
|
toString(): string;
|
|
@@ -49,22 +43,25 @@ declare class SameStepTypeMatch {
|
|
|
49
43
|
declare class DifferentStepTypeMatch {
|
|
50
44
|
readonly keyword: string;
|
|
51
45
|
readonly text: string;
|
|
46
|
+
readonly source: string;
|
|
52
47
|
readonly distance: number;
|
|
53
48
|
constructor(diff: StepDiff);
|
|
54
49
|
toString(): string;
|
|
55
50
|
}
|
|
56
51
|
declare class FuzzySearchReport {
|
|
57
52
|
#private;
|
|
53
|
+
readonly depth: number;
|
|
58
54
|
headingText: string;
|
|
59
55
|
matches: (SameStepTypeMatch | DifferentStepTypeMatch)[];
|
|
60
56
|
children: FuzzySearchReport[];
|
|
57
|
+
constructor(depth?: number);
|
|
61
58
|
get length(): number;
|
|
62
59
|
addHeading(headingText: string): this;
|
|
63
60
|
addMatch(match: SameStepTypeMatch | DifferentStepTypeMatch): this;
|
|
64
61
|
addChild(child: FuzzySearchReport): this;
|
|
65
62
|
toString(): string;
|
|
66
63
|
}
|
|
67
|
-
declare function buildFuzzySearchReport({ same, other }: LimitedStepDiffs): FuzzySearchReport;
|
|
64
|
+
declare function buildFuzzySearchReport({ same, other }: LimitedStepDiffs, depth: number): FuzzySearchReport;
|
|
68
65
|
|
|
69
66
|
type ParamTypeDefinition = {
|
|
70
67
|
name: string;
|
|
@@ -85,4 +82,4 @@ declare const BoolParam: AutoParamTypeDefinition;
|
|
|
85
82
|
declare const DateParam: AutoParamTypeDefinition;
|
|
86
83
|
declare const PrimitiveParam: ParamTypeDefinition;
|
|
87
84
|
|
|
88
|
-
export { AnyParam, BoolParam, BooleanParam, DateParam, DifferentStepTypeMatch,
|
|
85
|
+
export { AnyParam, BoolParam, BooleanParam, DateParam, DifferentStepTypeMatch, FuzzySearchReport, LimitedStepDiffs, NumberParam, ParamTypeDefinition, PrimitiveParam, SameStepTypeMatch, StepDiff, StepDiffs, TextParam, UnknownParam, buildFuzzySearchReport, checkMatch, defineParameterType, getDiff, getDiffs, isExpressionCandidate, limitDiffs, refineDiff };
|
package/dist/index.js
CHANGED
|
@@ -68,7 +68,6 @@ module.exports = __toCommonJS(src_exports);
|
|
|
68
68
|
// src/step-matcher.ts
|
|
69
69
|
var import_diff = require("diff");
|
|
70
70
|
var import_closest_match = require("closest-match");
|
|
71
|
-
var import_asserters = require("@autometa/asserters");
|
|
72
71
|
function checkMatch(text, it) {
|
|
73
72
|
return it.matches(text);
|
|
74
73
|
}
|
|
@@ -90,16 +89,13 @@ function limitDiffs(sameStepType, differentStepType, max) {
|
|
|
90
89
|
return { same: sameSlice, other: differentSlice };
|
|
91
90
|
}
|
|
92
91
|
const maxIndex = Math.min(max, sameStepType.length);
|
|
93
|
-
|
|
94
|
-
return result;
|
|
92
|
+
return { same: sameStepType.slice(0, maxIndex), other: [] };
|
|
95
93
|
}
|
|
96
94
|
function getDiffs(text, maxResults, step) {
|
|
97
95
|
const sorted = step.map((it) => {
|
|
98
96
|
if (checkMatch(text, it)) {
|
|
99
97
|
return { merged: text, step: it, gherkin: text, distance: 0 };
|
|
100
98
|
}
|
|
101
|
-
(0, import_asserters.AssertKey)(it, "expression");
|
|
102
|
-
(0, import_asserters.AssertKey)(it, "matches");
|
|
103
99
|
const diff = getDiff(text, it);
|
|
104
100
|
const refined = refineDiff(diff);
|
|
105
101
|
const dist = (0, import_closest_match.distance)(text, refined);
|
|
@@ -121,6 +117,9 @@ function refineDiff(diff) {
|
|
|
121
117
|
index++;
|
|
122
118
|
continue;
|
|
123
119
|
}
|
|
120
|
+
if (gherkinChange.removed === true) {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
124
123
|
if (gherkinChange.value) {
|
|
125
124
|
strings.push(gherkinChange.value);
|
|
126
125
|
continue;
|
|
@@ -129,7 +128,7 @@ function refineDiff(diff) {
|
|
|
129
128
|
return strings.join("");
|
|
130
129
|
}
|
|
131
130
|
function isExpressionCandidate(change1, change2) {
|
|
132
|
-
if (change1.removed && change2.added) {
|
|
131
|
+
if (change1 && change1.removed && change2 && change2.added) {
|
|
133
132
|
const scopeText = change2.value;
|
|
134
133
|
return /{.*}/.test(scopeText);
|
|
135
134
|
}
|
|
@@ -142,11 +141,12 @@ var SameStepTypeMatch = class {
|
|
|
142
141
|
constructor(diff) {
|
|
143
142
|
this.keyword = diff.step.keyword;
|
|
144
143
|
this.text = diff.merged;
|
|
144
|
+
this.source = diff.step.expression.source;
|
|
145
145
|
this.distance = diff.distance;
|
|
146
146
|
}
|
|
147
147
|
toString() {
|
|
148
148
|
const keyword = import_colors_cli.default.green(this.keyword);
|
|
149
|
-
const text = import_colors_cli.default.white(this.
|
|
149
|
+
const text = import_colors_cli.default.white(this.source);
|
|
150
150
|
const distance2 = import_colors_cli.default.blue(`[${this.distance}]`);
|
|
151
151
|
return `${distance2} ${keyword} ${text}`;
|
|
152
152
|
}
|
|
@@ -155,26 +155,29 @@ var DifferentStepTypeMatch = class {
|
|
|
155
155
|
constructor(diff) {
|
|
156
156
|
this.keyword = diff.step.keyword;
|
|
157
157
|
this.text = diff.merged;
|
|
158
|
+
this.source = diff.step.expression.source;
|
|
158
159
|
this.distance = diff.distance;
|
|
159
160
|
}
|
|
160
161
|
toString() {
|
|
161
162
|
const keywordColor = import_colors_cli.default.cyan_bt;
|
|
162
163
|
const keyword = keywordColor(this.keyword);
|
|
163
|
-
const text = import_colors_cli.default.
|
|
164
|
+
const text = import_colors_cli.default.white(this.source);
|
|
164
165
|
const distance2 = import_colors_cli.default.blue(`[${this.distance}]`);
|
|
165
166
|
return `${distance2} ${keyword} ${text}`;
|
|
166
167
|
}
|
|
167
168
|
};
|
|
168
169
|
var _sameMatchTypes, sameMatchTypes_get, _differentMatchTypes, differentMatchTypes_get;
|
|
169
170
|
var FuzzySearchReport = class {
|
|
170
|
-
constructor() {
|
|
171
|
+
constructor(depth = 0) {
|
|
172
|
+
this.depth = depth;
|
|
171
173
|
__privateAdd(this, _sameMatchTypes);
|
|
172
174
|
__privateAdd(this, _differentMatchTypes);
|
|
173
175
|
this.matches = [];
|
|
174
176
|
this.children = [];
|
|
175
177
|
}
|
|
176
178
|
get length() {
|
|
177
|
-
|
|
179
|
+
const childLength = this.children.map((it) => it.length).reduce((a, b) => a + b, 0);
|
|
180
|
+
return this.matches.length + childLength;
|
|
178
181
|
}
|
|
179
182
|
addHeading(headingText) {
|
|
180
183
|
this.headingText = headingText;
|
|
@@ -189,26 +192,31 @@ var FuzzySearchReport = class {
|
|
|
189
192
|
return this;
|
|
190
193
|
}
|
|
191
194
|
toString() {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
const
|
|
195
|
+
if (this.length === 0) {
|
|
196
|
+
return "";
|
|
197
|
+
}
|
|
198
|
+
const same = __privateGet(this, _sameMatchTypes, sameMatchTypes_get).filter((it) => it.distance < 10).map((it) => it.toString()).join("\n");
|
|
199
|
+
const sameMessage = same.length > 0 ? import_colors_cli.default.italic(`Steps with matching step type:`) : "";
|
|
200
|
+
const different = __privateGet(this, _differentMatchTypes, differentMatchTypes_get).filter((it) => it.distance < 10).map((it) => it.toString()).join("\n");
|
|
201
|
+
const differentMessage = different.length > 0 ? import_colors_cli.default.italic(`Steps with different step type:`) : "";
|
|
196
202
|
const messageArray = [];
|
|
197
203
|
appendSubMessage(messageArray, sameMessage);
|
|
198
|
-
appendSubMessage(messageArray, same
|
|
204
|
+
appendSubMessage(messageArray, same);
|
|
199
205
|
appendSubMessage(messageArray, differentMessage);
|
|
200
|
-
appendSubMessage(messageArray, different
|
|
206
|
+
appendSubMessage(messageArray, different);
|
|
201
207
|
const children = [];
|
|
202
208
|
this.children.forEach((child) => {
|
|
203
209
|
appendChild(children, child);
|
|
204
210
|
});
|
|
205
|
-
const formatChildren = children.map((it) => it.toString()
|
|
211
|
+
const formatChildren = children.map((it) => it.toString()).join("\n");
|
|
206
212
|
const message = messageArray.join(`
|
|
207
|
-
|
|
208
|
-
const heading = import_colors_cli.default.
|
|
209
|
-
return `${heading}
|
|
210
|
-
${
|
|
211
|
-
${
|
|
213
|
+
`).trim();
|
|
214
|
+
const heading = import_colors_cli.default.black(this.headingText);
|
|
215
|
+
return `${heading ?? ""}
|
|
216
|
+
${message.replace(/\r\n|\n|\r/gm, `
|
|
217
|
+
${TAB}`)}
|
|
218
|
+
${formatChildren.replace(/\r\n|\n|\r/gm, `
|
|
219
|
+
${TAB}`)}`;
|
|
212
220
|
}
|
|
213
221
|
};
|
|
214
222
|
_sameMatchTypes = new WeakSet();
|
|
@@ -225,7 +233,7 @@ differentMatchTypes_get = function() {
|
|
|
225
233
|
};
|
|
226
234
|
function appendSubMessage(arr, message, prefix) {
|
|
227
235
|
if (message && message.length > 0) {
|
|
228
|
-
const str = prefix ? `${prefix}${message}` : message;
|
|
236
|
+
const str = prefix ? `${prefix ?? ""}${message ?? ""}` : message ?? "";
|
|
229
237
|
arr.push(str);
|
|
230
238
|
}
|
|
231
239
|
}
|
|
@@ -236,8 +244,8 @@ function appendChild(arr, message) {
|
|
|
236
244
|
}
|
|
237
245
|
var SPACE = " ";
|
|
238
246
|
var TAB = SPACE.repeat(2);
|
|
239
|
-
function buildFuzzySearchReport({ same, other }) {
|
|
240
|
-
const report = new FuzzySearchReport();
|
|
247
|
+
function buildFuzzySearchReport({ same, other }, depth) {
|
|
248
|
+
const report = new FuzzySearchReport(depth);
|
|
241
249
|
same.forEach((diff) => {
|
|
242
250
|
report.addMatch(new SameStepTypeMatch(diff));
|
|
243
251
|
});
|
|
@@ -382,7 +390,7 @@ function registerParameterType(registry, name, regexpPattern, transform, type, p
|
|
|
382
390
|
// src/default.parameters.ts
|
|
383
391
|
var import_overloaded2 = require("@autometa/overloaded");
|
|
384
392
|
var import_datetime = require("@autometa/datetime");
|
|
385
|
-
var
|
|
393
|
+
var import_asserters = require("@autometa/asserters");
|
|
386
394
|
var import_luxon = require("luxon");
|
|
387
395
|
var strNum = /['"]-?\d+['"]/;
|
|
388
396
|
var isodateRegexp = /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/;
|
|
@@ -460,7 +468,7 @@ var PrimitiveParam = {
|
|
|
460
468
|
(0, import_overloaded2.def)((0, import_overloaded2.string)({ in: boolTypesEnabled })).matches(boolEnabled),
|
|
461
469
|
(0, import_overloaded2.def)((0, import_overloaded2.string)({ in: boolTypesActive })).matches(boolActive),
|
|
462
470
|
(0, import_overloaded2.fallback)((val) => {
|
|
463
|
-
(0,
|
|
471
|
+
(0, import_asserters.AssertIs)(val, "string");
|
|
464
472
|
const fromPhrase = import_datetime.Dates.fromPhrase(val);
|
|
465
473
|
if (fromPhrase && !isNaN(fromPhrase.getTime())) {
|
|
466
474
|
return fromPhrase;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/step-matcher.ts","../src/search-report.ts","../src/parameters.ts","../src/default.parameters.ts"],"sourcesContent":["export * from \"./step-matcher\";\nexport * from './search-report'\nexport * from'./parameters'\nexport * from './default.parameters'","import { diffWordsWithSpace, Change } from \"diff\";\nimport { distance } from \"closest-match\";\nimport { Expression } from \"@cucumber/cucumber-expressions\";\nimport { AssertKey } from \"@autometa/asserters\";\nimport { StepKeyword, StepType } from \"@autometa/types\";\nexport interface Matchable {\n matches(text: string): boolean;\n}\n\nexport interface ExpressionWrapper {\n expression: Expression;\n}\n\nexport interface GherkinKeyword {\n type: StepType;\n}\nexport type StepDiff = {\n merged: string;\n step: {\n keyword: StepKeyword;\n expression: Expression;\n type: StepType;\n matches: (text: string) => boolean;\n };\n gherkin: string;\n distance: number;\n};\nexport type StepDiffs = StepDiff[];\nexport type LimitedStepDiffs = { same: StepDiffs; other: StepDiffs };\nexport function checkMatch<T extends Matchable>(text: string, it: T): boolean {\n return it.matches(text);\n}\nexport function limitDiffs(\n sameStepType: StepDiff[],\n differentStepType: StepDiff[],\n max: number\n) : LimitedStepDiffs {\n const sameDistances = sameStepType.map((it) => it.distance);\n const maxSameStepDistance = Math.max(...sameDistances);\n const otherStepDistance = differentStepType.map((it) => it.distance);\n const minDifferentStepDistance = Math.min(...otherStepDistance);\n // Prioritize same-type steps for search. Only\n // consider other-type steps when the lowest\n // other score is lower than the highest same scoreF\n if (maxSameStepDistance > minDifferentStepDistance) {\n const filter = sameStepType.filter(\n (it) => it.distance <= minDifferentStepDistance\n );\n if (filter.length >= max) {\n return { same: filter.slice(0, max), other: [] };\n }\n const diff = max - filter.length;\n const sameSlice = sameStepType.slice(0, diff);\n const differentSlice = differentStepType.slice(0, max - diff);\n return { same: sameSlice, other: differentSlice };\n }\n const maxIndex = Math.min(max, sameStepType.length);\n const result = { same: sameStepType.slice(0, maxIndex), other: [] };\n return result;\n}\n\nexport function getDiffs<T extends Matchable & ExpressionWrapper>(\n text: string,\n maxResults: number,\n step: T[]\n) {\n const sorted = step\n .map((it) => {\n if (checkMatch(text, it)) {\n return { merged: text, step: it, gherkin: text, distance: 0 };\n }\n AssertKey(it, \"expression\");\n AssertKey(it, \"matches\");\n const diff = getDiff(text, it);\n const refined = refineDiff(diff);\n const dist = distance(text, refined);\n return { merged: refined, step: it, gherkin: text, distance: dist };\n })\n .sort((a, b) => a.distance - b.distance);\n const max = Math.min(maxResults, sorted.length);\n return sorted.slice(0, max);\n}\n\nexport function getDiff<T extends ExpressionWrapper>(text: string, it: T) {\n return diffWordsWithSpace(text, it.expression.source);\n}\n\nexport function refineDiff(diff: Change[]) {\n const strings: string[] = [];\n for (let index = 0; index < diff.length; index++) {\n const gherkinChange = diff[index];\n const scopeChange = diff[index + 1];\n if (isExpressionCandidate(gherkinChange, scopeChange)) {\n strings.push(gherkinChange.value);\n index++;\n continue;\n }\n if (gherkinChange.value) {\n strings.push(gherkinChange.value);\n continue;\n }\n }\n return strings.join(\"\");\n}\n\nexport function isExpressionCandidate(change1: Change, change2: Change) {\n if (change1.removed && change2.added) {\n const scopeText = change2.value;\n return /{.*}/.test(scopeText);\n }\n return false;\n}\n","import type { LimitedStepDiffs, StepDiff } from \"./step-matcher\";\nimport chalk from \"colors-cli\";\nexport class SameStepTypeMatch {\n readonly keyword: string;\n readonly text: string;\n readonly distance: number;\n constructor(diff: StepDiff) {\n this.keyword = diff.step.keyword;\n this.text = diff.merged;\n this.distance = diff.distance;\n }\n toString() {\n const keyword = chalk.green(this.keyword);\n const text = chalk.white(this.text);\n const distance = chalk.blue(`[${this.distance}]`);\n return `${distance} ${keyword} ${text}`;\n }\n}\nexport class DifferentStepTypeMatch {\n readonly keyword: string;\n readonly text: string;\n readonly distance: number;\n constructor(diff: StepDiff) {\n this.keyword = diff.step.keyword;\n this.text = diff.merged;\n this.distance = diff.distance;\n }\n toString() {\n const keywordColor = chalk.cyan_bt;\n const keyword = keywordColor(this.keyword);\n const text = chalk.white_b(this.text);\n const distance = chalk.blue(`[${this.distance}]`);\n return `${distance} ${keyword} ${text}`;\n }\n}\nexport class FuzzySearchReport {\n headingText: string;\n matches: (SameStepTypeMatch | DifferentStepTypeMatch)[] = [];\n children: FuzzySearchReport[] = [];\n\n get length() {\n return (\n this.matches.length +\n this.children.length\n );\n }\n addHeading(headingText: string) {\n this.headingText = headingText;\n return this;\n }\n addMatch(match: SameStepTypeMatch | DifferentStepTypeMatch) {\n this.matches.push(match);\n return this;\n }\n addChild(child: FuzzySearchReport) {\n this.children.push(child);\n return this;\n }\n get #sameMatchTypes() {\n return this.matches.filter(\n (it) => it instanceof SameStepTypeMatch\n ) as SameStepTypeMatch[];\n }\n get #differentMatchTypes() {\n return this.matches.filter(\n (it) => it instanceof DifferentStepTypeMatch\n ) as DifferentStepTypeMatch[];\n }\n\n toString() {\n const same = this.#sameMatchTypes.map((it) => it.toString()).join(\"\\n\");\n const sameMessage = same.length > 0 ? `Steps with matching step type:` : \"\";\n const different = this.#differentMatchTypes\n .map((it) => it.toString())\n .join(\"\\n\");\n const differentMessage =\n different.length > 0 ? `Steps with different step type:` : \"\";\n const messageArray: string[] = [];\n appendSubMessage(messageArray, sameMessage);\n appendSubMessage(messageArray, same, TAB);\n appendSubMessage(messageArray, differentMessage);\n appendSubMessage(messageArray, different, TAB);\n const children: FuzzySearchReport[] = [];\n this.children.forEach((child) => {\n appendChild(children, child);\n });\n const formatChildren: string = children\n .map((it) => it.toString().replace(/^/gm, \" \"))\n .join(\"\\n\");\n const message = messageArray.join(`\\n${TAB}`);\n const heading = chalk.black_b(this.headingText);\n return `${heading}\n${TAB}${message}\n${formatChildren}`;\n }\n}\nfunction appendSubMessage(arr: string[], message: string, prefix?: string) {\n if (message && message.length > 0) {\n const str = prefix ? `${prefix}${message}` : message;\n arr.push(str);\n }\n}\nfunction appendChild(arr: FuzzySearchReport[], message: FuzzySearchReport) {\n if (message) {\n arr.push(message);\n }\n}\nconst SPACE = \" \";\nconst TAB = SPACE.repeat(2);\n\nexport function buildFuzzySearchReport({ same, other }: LimitedStepDiffs) {\n const report = new FuzzySearchReport();\n same.forEach((diff) => {\n report.addMatch(new SameStepTypeMatch(diff));\n });\n other.forEach((diff) => {\n report.addMatch(new DifferentStepTypeMatch(diff));\n });\n return report;\n}\n","import {\n Argument,\n ParameterType,\n ParameterTypeRegistry\n} from \"@cucumber/cucumber-expressions\";\nimport { Class } from \"@autometa/types\";\nimport {\n def,\n func,\n instance,\n overloads,\n string,\n nil,\n array\n} from \"@autometa/overloaded\";\n// todo - this has a bug when dealing with {string} - does not remove quotes\nArgument.prototype.getValue = function () {\n if (this.group.children.length > 0) {\n const value = this.group.children\n .filter((it) => it.value !== undefined)\n .map((child) => child.value);\n if (value.length > 0) {\n return this.parameterType.transform(this.parameterType, value);\n }\n }\n const groupValues = this.group\n ? this.group.value\n ? [this.group.value]\n : this.group.values\n : null;\n return this.parameterType.transform(this.parameterType, groupValues);\n};\ntype PrimitiveConstructor =\n | typeof Number\n | typeof String\n | typeof Boolean\n | typeof BigInt;\n\nexport type ParamTypeDefinition = {\n name: string;\n regexpPattern: RegExp | RegExp[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n transform?: (value: any) => unknown;\n type?: Class<unknown>;\n primitive?:\n | typeof String\n | typeof Number\n | typeof Boolean\n | typeof BigInt\n | typeof Date;\n};\n\nconst regexp = instance(RegExp).or(array([instance(RegExp)]));\n\nexport function defineParameterType<T extends ParamTypeDefinition[]>(\n registry: ParameterTypeRegistry,\n ...params: T\n) {\n params.forEach((param) => {\n const { name, regexpPattern, transform, type, primitive } =\n param as ParamTypeDefinition;\n return registerParameterType(\n registry,\n name,\n regexpPattern,\n transform,\n type,\n primitive\n );\n });\n}\nfunction registerParameterType(\n registry: ParameterTypeRegistry,\n name: string,\n regexpPattern: RegExp | RegExp[],\n transform: ((value: unknown) => unknown) | undefined,\n type: Class<unknown> | undefined,\n primitive:\n | NumberConstructor\n | StringConstructor\n | BooleanConstructor\n | BigIntConstructor\n | DateConstructor\n | undefined\n): void {\n return overloads(\n def(\n string(),\n regexp,\n func(\"type\"),\n func(\"transform\"),\n func(\"primitive\")\n ).matches((name, regexp, type, transform, primitive) => {\n const primitivePrototype = primitive as unknown as PrimitiveConstructor;\n const typePrototype = type as unknown as Class<unknown>;\n const wrapper = (val: unknown) => {\n const asPrimitive = primitivePrototype(val);\n const asType = new typePrototype(asPrimitive);\n return transform(asType);\n };\n const param = new ParameterType(name, regexp, type, wrapper);\n registry.defineParameterType(param);\n }),\n def`allTransforms`(\n string(),\n regexp,\n func(\"type\"),\n func(\"transform\"),\n nil(\"primitive\")\n ).matches((name, regexp, type, transform) => {\n const typePrototype = type as unknown as Class<unknown>;\n const wrapper = (val: unknown) => {\n const asType = new typePrototype(val);\n return transform(asType);\n };\n const param = new ParameterType(name, regexp, type, wrapper);\n registry.defineParameterType(param);\n }),\n def`transformPrimitive`(\n string(),\n regexp,\n nil(\"type\"),\n func(\"transform\"),\n func(\"primitive\")\n ).matches((name, regexp, _, transform, primitive) => {\n const primitivePrototype = primitive as unknown as PrimitiveConstructor;\n const wrapper = (val: unknown) => {\n const asPrimitive = primitivePrototype(val);\n return transform(asPrimitive);\n };\n const param = new ParameterType(name, regexp, primitive, wrapper);\n registry.defineParameterType(param);\n }),\n def`encapsulatePrimitive`(\n string(),\n regexp,\n func(\"type\"),\n nil(\"transform\"),\n func(\"primitive\")\n ).matches((name, regexp, type, _, primitive) => {\n const primitivePrototype = primitive as unknown as PrimitiveConstructor;\n const typePrototype = type as unknown as Class<unknown>;\n const wrapper = (val: unknown) => {\n const asPrimitive = primitivePrototype(val);\n return new typePrototype(asPrimitive);\n };\n const param = new ParameterType(name, regexp, type, wrapper);\n registry.defineParameterType(param);\n }),\n def`makeType`(string(), regexp, func(\"type\"), nil(), nil()).matches(\n (name, pattern, type) => {\n const prototype = type as unknown as Class<unknown>;\n const transform = (val: unknown) => new prototype(val);\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }\n ),\n def`makePrimitive`(\n string(),\n regexp,\n nil(),\n nil(),\n func(\"primitive\")\n ).matches((name, pattern, _, __, primitive) => {\n const prototype = primitive as unknown as PrimitiveConstructor;\n const transform = (val: unknown) => prototype(val);\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }),\n def`transformValue`(\n string(),\n regexp,\n nil(),\n func(\"transform\"),\n nil()\n ).matches((name, pattern, _, transform, __) => {\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }),\n def`default`(string(), instance(RegExp), nil(), nil(), nil()).matches(\n (name, pattern, _, __, ___) => {\n const transform = (val: unknown) => val;\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }\n )\n ).use([name, regexpPattern, type, transform, primitive]);\n}\n","import { def, fallback, overloads, string } from \"@autometa/overloaded\";\nimport { ParamTypeDefinition } from \"./parameters\";\nimport { Dates } from \"@autometa/datetime\";\nimport { AssertIs } from \"@autometa/asserters\";\nimport { DateTime } from \"luxon\";\ntype AutoParamTypeDefinition = Omit<ParamTypeDefinition, \"transform\">;\nconst strNum = /['\"]-?\\d+['\"]/;\n\nconst isodateRegexp =\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/;\nconst shortDateRegex =\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\d)/;\nconst boolTypesActive = [\"active\", \"inactive\"];\nconst boolTypesEnabled = [\"enabled\", \"disabled\"];\nconst boolTypes = [\"true\", \"false\"];\n\nexport const NumberParam: AutoParamTypeDefinition = {\n name: \"number\",\n regexpPattern: /\\d+/,\n primitive: Number\n};\n\nexport const AnyParam: AutoParamTypeDefinition = {\n name: \"any\",\n regexpPattern: /.*/\n};\nexport const UnknownParam: AutoParamTypeDefinition = {\n name: \"unknown\",\n regexpPattern: /.*/\n};\nexport const TextParam: ParamTypeDefinition = {\n name: \"text\",\n regexpPattern: /\"([^\"\\\\]*(\\\\.[^\"\\\\]*)*)\"|'([^'\\\\]*(\\\\.[^'\\\\]*)*)'/,\n primitive: String,\n transform: (value: string) => {\n const asStr = value as string;\n return asStr.replace(/^\"(.*)\"$/, \"$1\").replace(/^'(.*)'$/, \"$1\");\n }\n};\n\nexport const BooleanParam: AutoParamTypeDefinition = {\n name: \"boolean\",\n regexpPattern: /true|false/,\n primitive: Boolean\n};\nexport const BoolParam: AutoParamTypeDefinition = {\n name: \"bool\",\n regexpPattern: /true|false/,\n primitive: Boolean\n};\nexport const DateParam: AutoParamTypeDefinition = {\n name: \"date\",\n regexpPattern: [isodateRegexp, shortDateRegex],\n type: Date\n};\n\nexport const PrimitiveParam: ParamTypeDefinition = {\n name: \"primitive\",\n regexpPattern: [\n /true|false/,\n /enabled|disabled/,\n /active|inactive/,\n /null/,\n /empty/,\n /undefined/,\n /NaN/,\n /Infinity/,\n /-Infinity/,\n isodateRegexp,\n shortDateRegex,\n /-?\\d+/,\n /\"([^\"]*)\"/,\n /'([^']*)'/\n ],\n transform: (value: unknown) => {\n return overloads(\n def(string({ equals: \"null\" })).matches((_) => null),\n def(string({ equals: \"undefined\" })).matches((_) => undefined),\n def(string({ in: boolTypes })).matches((val) => Boolean(val)),\n def(string({ equals: \"NaN\" })).matches((_) => NaN),\n def(string({ equals: \"Infinity\" })).matches((_) => Infinity),\n def(string({ equals: \"-Infinity\" })).matches((_) => -Infinity),\n def(string({ pattern: isodateRegexp })).matches(parseIso),\n def(string({ pattern: shortDateRegex })).matches(parseDate),\n def(string({ pattern: strNum })).matches(trimQuotes),\n def(string({ pattern: /-?\\d+/ })).matches((val) => Number(val)),\n def(string({ in: boolTypesEnabled })).matches(boolEnabled),\n def(string({ in: boolTypesActive })).matches(boolActive),\n fallback((val) => {\n AssertIs(val, \"string\");\n const fromPhrase = Dates.fromPhrase(val);\n if (fromPhrase && !isNaN(fromPhrase.getTime())) {\n return fromPhrase;\n }\n return val.replace(/^\"(.*)\"$/, \"$1\").replace(/^'(.*)'$/, \"$1\");\n })\n ).use([value]);\n }\n};\n\nfunction boolActive(val: string): boolean {\n return val === \"active\";\n}\n\nfunction boolEnabled(val: string): boolean {\n return val === \"enabled\";\n}\n\nfunction parseDate(val: string): Date {\n return new Date(Date.parse(val));\n}\n\nfunction trimQuotes(val: string): string {\n return val.slice(1, -1);\n}\n\nfunction parseIso(val: string): Date {\n return DateTime.fromISO(val).toJSDate();\n}\n"],"mappings":"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","names":["chalk","distance","name","regexp","type","transform","primitive","import_overloaded","import_asserters"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/step-matcher.ts","../src/search-report.ts","../src/parameters.ts","../src/default.parameters.ts"],"sourcesContent":["export * from \"./step-matcher\";\nexport * from './search-report'\nexport * from'./parameters'\nexport * from './default.parameters'","import { diffWordsWithSpace, Change } from \"diff\";\nimport { distance } from \"closest-match\";\nimport { CachedStep } from \"./types\";\nexport type StepDiff = {\n merged: string;\n step: CachedStep;\n gherkin: string;\n distance: number;\n};\nexport type StepDiffs = StepDiff[];\nexport type LimitedStepDiffs = { same: StepDiffs; other: StepDiffs };\nexport function checkMatch(text: string, it: CachedStep): boolean {\n return it.matches(text);\n}\nexport function limitDiffs(\n sameStepType: StepDiffs,\n differentStepType: StepDiffs,\n max: number\n): LimitedStepDiffs {\n const sameDistances = sameStepType.map((it) => it.distance);\n const maxSameStepDistance = Math.max(...sameDistances);\n const otherStepDistance = differentStepType.map((it) => it.distance);\n const minDifferentStepDistance = Math.min(...otherStepDistance);\n // Prioritize same-type steps for search. Only\n // consider other-type steps when the lowest\n // other score is lower than the highest same scoreF\n if (maxSameStepDistance > minDifferentStepDistance) {\n const filter = sameStepType.filter(\n (it) => it.distance <= minDifferentStepDistance\n );\n if (filter.length >= max) {\n return { same: filter.slice(0, max), other: [] };\n }\n const diff = max - filter.length;\n const sameSlice = sameStepType.slice(0, diff);\n const differentSlice = differentStepType.slice(0, max - diff);\n return { same: sameSlice, other: differentSlice };\n }\n const maxIndex = Math.min(max, sameStepType.length);\n return { same: sameStepType.slice(0, maxIndex), other: [] };\n}\n\nexport function getDiffs(text: string, maxResults: number, step: CachedStep[]) {\n const sorted = step\n .map((it) => {\n if (checkMatch(text, it)) {\n return { merged: text, step: it, gherkin: text, distance: 0 };\n }\n const diff = getDiff(text, it);\n const refined = refineDiff(diff);\n const dist = distance(text, refined);\n return { merged: refined, step: it, gherkin: text, distance: dist };\n })\n .sort((a, b) => a.distance - b.distance);\n const max = Math.min(maxResults, sorted.length);\n return sorted.slice(0, max);\n}\n\nexport function getDiff(text: string, it: CachedStep) {\n return diffWordsWithSpace(text, it.expression.source);\n}\n\nexport function refineDiff(diff: Change[]) {\n const strings: string[] = [];\n for (let index = 0; index < diff.length; index++) {\n const gherkinChange = diff[index];\n const scopeChange = diff[index + 1];\n if (isExpressionCandidate(gherkinChange, scopeChange)) {\n strings.push(gherkinChange.value);\n index++;\n continue;\n }\n if (gherkinChange.removed === true) {\n continue;\n }\n if (gherkinChange.value) {\n strings.push(gherkinChange.value);\n continue;\n }\n }\n return strings.join(\"\");\n}\n\nexport function isExpressionCandidate(change1: Change, change2: Change) {\n if (change1 && change1.removed && change2 && change2.added) {\n const scopeText = change2.value;\n return /{.*}/.test(scopeText);\n }\n return false;\n}","import type { LimitedStepDiffs, StepDiff } from \"./step-matcher\";\nimport chalk from \"colors-cli\";\nexport class SameStepTypeMatch {\n readonly keyword: string;\n readonly text: string;\n readonly source: string;\n readonly distance: number;\n constructor(diff: StepDiff) {\n this.keyword = diff.step.keyword;\n this.text = diff.merged;\n this.source = diff.step.expression.source;\n this.distance = diff.distance;\n }\n toString() {\n const keyword = chalk.green(this.keyword);\n const text = chalk.white(this.source);\n const distance = chalk.blue(`[${this.distance}]`);\n return `${distance} ${keyword} ${text}`;\n }\n}\nexport class DifferentStepTypeMatch {\n readonly keyword: string;\n readonly text: string;\n readonly source: string;\n readonly distance: number;\n constructor(diff: StepDiff) {\n this.keyword = diff.step.keyword;\n this.text = diff.merged;\n this.source = diff.step.expression.source;\n this.distance = diff.distance;\n }\n toString() {\n const keywordColor = chalk.cyan_bt;\n const keyword = keywordColor(this.keyword);\n const text = chalk.white(this.source);\n const distance = chalk.blue(`[${this.distance}]`);\n return `${distance} ${keyword} ${text}`;\n }\n}\nexport class FuzzySearchReport {\n headingText: string;\n matches: (SameStepTypeMatch | DifferentStepTypeMatch)[] = [];\n children: FuzzySearchReport[] = [];\n constructor(readonly depth: number = 0) {}\n get length() {\n const childLength: number = this.children\n .map((it) => it.length)\n .reduce<number>((a: number, b: number) => a + b, 0);\n return this.matches.length + childLength;\n }\n addHeading(headingText: string) {\n this.headingText = headingText;\n return this;\n }\n addMatch(match: SameStepTypeMatch | DifferentStepTypeMatch) {\n this.matches.push(match);\n return this;\n }\n addChild(child: FuzzySearchReport) {\n this.children.push(child);\n return this;\n }\n get #sameMatchTypes() {\n return this.matches.filter(\n (it) => it instanceof SameStepTypeMatch\n ) as SameStepTypeMatch[];\n }\n get #differentMatchTypes() {\n return this.matches.filter(\n (it) => it instanceof DifferentStepTypeMatch\n ) as DifferentStepTypeMatch[];\n }\n\n toString() {\n if (this.length === 0) {\n return \"\";\n }\n const same = this.#sameMatchTypes\n .filter((it) => it.distance < 10)\n .map((it) => it.toString())\n .join(\"\\n\");\n const sameMessage =\n same.length > 0 ? chalk.italic(`Steps with matching step type:`) : \"\";\n const different = this.#differentMatchTypes\n .filter((it) => it.distance < 10)\n .map((it) => it.toString())\n .join(\"\\n\");\n const differentMessage =\n different.length > 0\n ? chalk.italic(`Steps with different step type:`)\n : \"\";\n\n const messageArray: string[] = [];\n appendSubMessage(messageArray, sameMessage);\n appendSubMessage(messageArray, same);\n appendSubMessage(messageArray, differentMessage);\n appendSubMessage(messageArray, different);\n const children: FuzzySearchReport[] = [];\n this.children.forEach((child) => {\n appendChild(children, child);\n });\n const formatChildren: string = children\n .map((it) => it.toString())\n .join(\"\\n\")\n const message = messageArray.join(`\\n`).trim();\n const heading = chalk.black(this.headingText);\n return `${heading ?? \"\"}\n${message.replace(/\\r\\n|\\n|\\r/gm, `\\n${TAB}`)}\n${formatChildren.replace(/\\r\\n|\\n|\\r/gm, `\\n${TAB}`)}`;\n }\n}\nfunction appendSubMessage(arr: string[], message: string, prefix?: string) {\n if (message && message.length > 0) {\n const str = prefix ? `${prefix ?? \"\"}${message ?? \"\"}` : message ?? \"\";\n arr.push(str);\n }\n}\nfunction appendChild(arr: FuzzySearchReport[], message: FuzzySearchReport) {\n if (message) {\n arr.push(message);\n }\n}\nconst SPACE = \" \";\nconst TAB = SPACE.repeat(2);\n\nexport function buildFuzzySearchReport(\n { same, other }: LimitedStepDiffs,\n depth: number\n) {\n const report = new FuzzySearchReport(depth);\n same.forEach((diff) => {\n report.addMatch(new SameStepTypeMatch(diff));\n });\n other.forEach((diff) => {\n report.addMatch(new DifferentStepTypeMatch(diff));\n });\n return report;\n}","import {\n Argument,\n ParameterType,\n ParameterTypeRegistry\n} from \"@cucumber/cucumber-expressions\";\nimport { Class } from \"@autometa/types\";\nimport {\n def,\n func,\n instance,\n overloads,\n string,\n nil,\n array\n} from \"@autometa/overloaded\";\n// todo - this has a bug when dealing with {string} - does not remove quotes\nArgument.prototype.getValue = function () {\n if (this.group.children.length > 0) {\n const value = this.group.children\n .filter((it) => it.value !== undefined)\n .map((child) => child.value);\n if (value.length > 0) {\n return this.parameterType.transform(this.parameterType, value);\n }\n }\n const groupValues = this.group\n ? this.group.value\n ? [this.group.value]\n : this.group.values\n : null;\n return this.parameterType.transform(this.parameterType, groupValues);\n};\ntype PrimitiveConstructor =\n | typeof Number\n | typeof String\n | typeof Boolean\n | typeof BigInt;\n\nexport type ParamTypeDefinition = {\n name: string;\n regexpPattern: RegExp | RegExp[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n transform?: (value: any) => unknown;\n type?: Class<unknown>;\n primitive?:\n | typeof String\n | typeof Number\n | typeof Boolean\n | typeof BigInt\n | typeof Date;\n};\n\nconst regexp = instance(RegExp).or(array([instance(RegExp)]));\n\nexport function defineParameterType<T extends ParamTypeDefinition[]>(\n registry: ParameterTypeRegistry,\n ...params: T\n) {\n params.forEach((param) => {\n const { name, regexpPattern, transform, type, primitive } =\n param as ParamTypeDefinition;\n return registerParameterType(\n registry,\n name,\n regexpPattern,\n transform,\n type,\n primitive\n );\n });\n}\nfunction registerParameterType(\n registry: ParameterTypeRegistry,\n name: string,\n regexpPattern: RegExp | RegExp[],\n transform: ((value: unknown) => unknown) | undefined,\n type: Class<unknown> | undefined,\n primitive:\n | NumberConstructor\n | StringConstructor\n | BooleanConstructor\n | BigIntConstructor\n | DateConstructor\n | undefined\n): void {\n return overloads(\n def(\n string(),\n regexp,\n func(\"type\"),\n func(\"transform\"),\n func(\"primitive\")\n ).matches((name, regexp, type, transform, primitive) => {\n const primitivePrototype = primitive as unknown as PrimitiveConstructor;\n const typePrototype = type as unknown as Class<unknown>;\n const wrapper = (val: unknown) => {\n const asPrimitive = primitivePrototype(val);\n const asType = new typePrototype(asPrimitive);\n return transform(asType);\n };\n const param = new ParameterType(name, regexp, type, wrapper);\n registry.defineParameterType(param);\n }),\n def`allTransforms`(\n string(),\n regexp,\n func(\"type\"),\n func(\"transform\"),\n nil(\"primitive\")\n ).matches((name, regexp, type, transform) => {\n const typePrototype = type as unknown as Class<unknown>;\n const wrapper = (val: unknown) => {\n const asType = new typePrototype(val);\n return transform(asType);\n };\n const param = new ParameterType(name, regexp, type, wrapper);\n registry.defineParameterType(param);\n }),\n def`transformPrimitive`(\n string(),\n regexp,\n nil(\"type\"),\n func(\"transform\"),\n func(\"primitive\")\n ).matches((name, regexp, _, transform, primitive) => {\n const primitivePrototype = primitive as unknown as PrimitiveConstructor;\n const wrapper = (val: unknown) => {\n const asPrimitive = primitivePrototype(val);\n return transform(asPrimitive);\n };\n const param = new ParameterType(name, regexp, primitive, wrapper);\n registry.defineParameterType(param);\n }),\n def`encapsulatePrimitive`(\n string(),\n regexp,\n func(\"type\"),\n nil(\"transform\"),\n func(\"primitive\")\n ).matches((name, regexp, type, _, primitive) => {\n const primitivePrototype = primitive as unknown as PrimitiveConstructor;\n const typePrototype = type as unknown as Class<unknown>;\n const wrapper = (val: unknown) => {\n const asPrimitive = primitivePrototype(val);\n return new typePrototype(asPrimitive);\n };\n const param = new ParameterType(name, regexp, type, wrapper);\n registry.defineParameterType(param);\n }),\n def`makeType`(string(), regexp, func(\"type\"), nil(), nil()).matches(\n (name, pattern, type) => {\n const prototype = type as unknown as Class<unknown>;\n const transform = (val: unknown) => new prototype(val);\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }\n ),\n def`makePrimitive`(\n string(),\n regexp,\n nil(),\n nil(),\n func(\"primitive\")\n ).matches((name, pattern, _, __, primitive) => {\n const prototype = primitive as unknown as PrimitiveConstructor;\n const transform = (val: unknown) => prototype(val);\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }),\n def`transformValue`(\n string(),\n regexp,\n nil(),\n func(\"transform\"),\n nil()\n ).matches((name, pattern, _, transform, __) => {\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }),\n def`default`(string(), instance(RegExp), nil(), nil(), nil()).matches(\n (name, pattern, _, __, ___) => {\n const transform = (val: unknown) => val;\n const param = new ParameterType(name, pattern, null, transform);\n registry.defineParameterType(param);\n }\n )\n ).use([name, regexpPattern, type, transform, primitive]);\n}\n","import { def, fallback, overloads, string } from \"@autometa/overloaded\";\nimport { ParamTypeDefinition } from \"./parameters\";\nimport { Dates } from \"@autometa/datetime\";\nimport { AssertIs } from \"@autometa/asserters\";\nimport { DateTime } from \"luxon\";\ntype AutoParamTypeDefinition = Omit<ParamTypeDefinition, \"transform\">;\nconst strNum = /['\"]-?\\d+['\"]/;\n\nconst isodateRegexp =\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/;\nconst shortDateRegex =\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\d)/;\nconst boolTypesActive = [\"active\", \"inactive\"];\nconst boolTypesEnabled = [\"enabled\", \"disabled\"];\nconst boolTypes = [\"true\", \"false\"];\n\nexport const NumberParam: AutoParamTypeDefinition = {\n name: \"number\",\n regexpPattern: /\\d+/,\n primitive: Number\n};\n\nexport const AnyParam: AutoParamTypeDefinition = {\n name: \"any\",\n regexpPattern: /.*/\n};\nexport const UnknownParam: AutoParamTypeDefinition = {\n name: \"unknown\",\n regexpPattern: /.*/\n};\nexport const TextParam: ParamTypeDefinition = {\n name: \"text\",\n regexpPattern: /\"([^\"\\\\]*(\\\\.[^\"\\\\]*)*)\"|'([^'\\\\]*(\\\\.[^'\\\\]*)*)'/,\n primitive: String,\n transform: (value: string) => {\n const asStr = value as string;\n return asStr.replace(/^\"(.*)\"$/, \"$1\").replace(/^'(.*)'$/, \"$1\");\n }\n};\n\nexport const BooleanParam: AutoParamTypeDefinition = {\n name: \"boolean\",\n regexpPattern: /true|false/,\n primitive: Boolean\n};\nexport const BoolParam: AutoParamTypeDefinition = {\n name: \"bool\",\n regexpPattern: /true|false/,\n primitive: Boolean\n};\nexport const DateParam: AutoParamTypeDefinition = {\n name: \"date\",\n regexpPattern: [isodateRegexp, shortDateRegex],\n type: Date\n};\n\nexport const PrimitiveParam: ParamTypeDefinition = {\n name: \"primitive\",\n regexpPattern: [\n /true|false/,\n /enabled|disabled/,\n /active|inactive/,\n /null/,\n /empty/,\n /undefined/,\n /NaN/,\n /Infinity/,\n /-Infinity/,\n isodateRegexp,\n shortDateRegex,\n /-?\\d+/,\n /\"([^\"]*)\"/,\n /'([^']*)'/\n ],\n transform: (value: unknown) => {\n return overloads(\n def(string({ equals: \"null\" })).matches((_) => null),\n def(string({ equals: \"undefined\" })).matches((_) => undefined),\n def(string({ in: boolTypes })).matches((val) => Boolean(val)),\n def(string({ equals: \"NaN\" })).matches((_) => NaN),\n def(string({ equals: \"Infinity\" })).matches((_) => Infinity),\n def(string({ equals: \"-Infinity\" })).matches((_) => -Infinity),\n def(string({ pattern: isodateRegexp })).matches(parseIso),\n def(string({ pattern: shortDateRegex })).matches(parseDate),\n def(string({ pattern: strNum })).matches(trimQuotes),\n def(string({ pattern: /-?\\d+/ })).matches((val) => Number(val)),\n def(string({ in: boolTypesEnabled })).matches(boolEnabled),\n def(string({ in: boolTypesActive })).matches(boolActive),\n fallback((val) => {\n AssertIs(val, \"string\");\n const fromPhrase = Dates.fromPhrase(val);\n if (fromPhrase && !isNaN(fromPhrase.getTime())) {\n return fromPhrase;\n }\n return val.replace(/^\"(.*)\"$/, \"$1\").replace(/^'(.*)'$/, \"$1\");\n })\n ).use([value]);\n }\n};\n\nfunction boolActive(val: string): boolean {\n return val === \"active\";\n}\n\nfunction boolEnabled(val: string): boolean {\n return val === \"enabled\";\n}\n\nfunction parseDate(val: string): Date {\n return new Date(Date.parse(val));\n}\n\nfunction trimQuotes(val: string): string {\n return val.slice(1, -1);\n}\n\nfunction parseIso(val: string): Date {\n return DateTime.fromISO(val).toJSDate();\n}\n"],"mappings":"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","names":["chalk","distance","name","regexp","type","transform","primitive","import_overloaded"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autometa/cucumber-expressions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"description": "wrapper on @cucumber/cucumber-expressions",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"tsup": "^7.2.0",
|
|
29
29
|
"typescript": "^4.9.5",
|
|
30
30
|
"vitest": "^0.29.8",
|
|
31
|
-
"
|
|
32
|
-
"
|
|
31
|
+
"tsconfig": "0.7.0",
|
|
32
|
+
"eslint-config-custom": "0.6.0"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@cucumber/cucumber-expressions": "^16.1.2",
|