@autometa/cucumber-expressions 0.3.11 → 0.4.1
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-coverage.log +45 -0
- package/.turbo/turbo-lint$colon$fix.log +4 -0
- package/.turbo/turbo-prettify.log +0 -0
- package/.turbo/turbo-test.log +43 -0
- package/CHANGELOG.md +13 -0
- package/README.md +1 -1
- package/dist/esm/index.js +34 -31
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.cts +14 -4
- package/dist/index.d.ts +14 -4
- package/dist/index.js +34 -31
- package/dist/index.js.map +1 -1
- package/package.json +14 -13
- package/tsup.config.ts +1 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
|
|
2
|
+
> @autometa/cucumber-expressions@0.1.2 coverage /Users/ben.aherne/Documents/GitHub/autometa/packages/cucumber-expressions
|
|
3
|
+
> vitest run --coverage
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
RUN v0.29.8 /Users/ben.aherne/Documents/GitHub/autometa/packages/cucumber-expressions
|
|
7
|
+
Coverage enabled with istanbul
|
|
8
|
+
|
|
9
|
+
✓ src/step-matchers.spec.ts (13 tests) 47ms
|
|
10
|
+
stdout | src/search-report.spec.ts > SearchReport > should format the match with same step type
|
|
11
|
+
Scenario: a test scenario
|
|
12
|
+
Steps with matching step type:
|
|
13
|
+
[4] Given I have {int} blue grapes in my {string}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
stdout | src/search-report.spec.ts > SearchReport > should format the match with different step type
|
|
17
|
+
Scenario: a test scenario
|
|
18
|
+
Steps with different step type:
|
|
19
|
+
[4] When I have {int} blue grapes in my {string}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
stdout | src/search-report.spec.ts > SearchReport > should format the match with same and different step type
|
|
23
|
+
Scenario: a test scenario
|
|
24
|
+
Steps with matching step type:
|
|
25
|
+
[4] Given I have {int} blue grapes in my {string}
|
|
26
|
+
Steps with different step type:
|
|
27
|
+
[4] When I have {int} blue grapes in my {string}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
stdout | src/search-report.spec.ts > SearchReport > should format the match with steps and children with steps
|
|
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
|
|
37
|
+
Steps with matching step type:
|
|
38
|
+
[4] Given I have {int} blue grapes in my {string}
|
|
39
|
+
Steps with different step type:
|
|
40
|
+
[2] When I have {int} blue grapes in my {string}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
✓ src/search-report.spec.ts (6 tests) 73ms
|
|
44
|
+
✓ src/parameters.spec.ts (15 tests) 2785ms
|
|
45
|
+
ELIFECYCLE Command failed.
|
|
File without changes
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
|
|
2
|
+
> @autometa/cucumber-expressions@0.4.0 test /Users/ben.aherne/Documents/GitHub/autometa/packages/cucumber-expressions
|
|
3
|
+
> vitest run --passWithNoTests
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
RUN v1.4.0 /Users/ben.aherne/Documents/GitHub/autometa/packages/cucumber-expressions
|
|
7
|
+
|
|
8
|
+
✓ src/step-matchers.spec.ts (13 tests) 8ms
|
|
9
|
+
stdout | src/search-report.spec.ts > SearchReport > should format the match with same step type
|
|
10
|
+
Scenario: a test scenario
|
|
11
|
+
Steps with matching step type:
|
|
12
|
+
[4] Given I have {int} blue grapes in my {string}
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
stdout | src/search-report.spec.ts > SearchReport > should format the match with different step type
|
|
16
|
+
Scenario: a test scenario
|
|
17
|
+
Steps with different step type:
|
|
18
|
+
[4] When I have {int} blue grapes in my {string}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
stdout | src/search-report.spec.ts > SearchReport > should format the match with same and different step type
|
|
22
|
+
Scenario: a test scenario
|
|
23
|
+
Steps with matching step type:
|
|
24
|
+
[4] Given I have {int} blue grapes in my {string}
|
|
25
|
+
Steps with different step type:
|
|
26
|
+
[4] When I have {int} blue grapes in my {string}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
stdout | src/search-report.spec.ts > SearchReport > should format the match with steps and children with steps
|
|
30
|
+
Feature: a test feature
|
|
31
|
+
Steps with matching step type:
|
|
32
|
+
[4] Given I have {int} blue grapes in my {string}
|
|
33
|
+
Steps with different step type:
|
|
34
|
+
[2] When I have {int} blue grapes in my {string}
|
|
35
|
+
Scenario: a test scenario
|
|
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
|
+
|
|
42
|
+
✓ src/search-report.spec.ts (6 tests) 5ms
|
|
43
|
+
ELIFECYCLE Test failed. See above for more details.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @autometa/cucumber-expressions
|
|
2
2
|
|
|
3
|
+
## 0.4.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [1d3f84e]
|
|
8
|
+
- @autometa/app@0.3.5
|
|
9
|
+
|
|
10
|
+
## 0.4.0
|
|
11
|
+
|
|
12
|
+
### Minor Changes
|
|
13
|
+
|
|
14
|
+
- 884c9dd: Add support to access App instance from cucumber expression transformer
|
|
15
|
+
|
|
3
16
|
## 0.3.11
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
package/README.md
CHANGED
package/dist/esm/index.js
CHANGED
|
@@ -244,31 +244,34 @@ import {
|
|
|
244
244
|
nil,
|
|
245
245
|
array
|
|
246
246
|
} from "@autometa/overloaded";
|
|
247
|
-
|
|
247
|
+
ParameterType.prototype.transform = function transform(value, app) {
|
|
248
|
+
return this.transformFn.apply(this, [...value ?? [], app]);
|
|
249
|
+
};
|
|
250
|
+
Argument.prototype.getValue = function getValue(app) {
|
|
248
251
|
if (this.group.children.length > 0) {
|
|
249
252
|
const value = this.group.children.filter((it) => it.value !== void 0).map((child) => child.value);
|
|
250
253
|
if (value.length > 0) {
|
|
251
|
-
return this.parameterType.transform(
|
|
254
|
+
return this.parameterType.transform(value, app);
|
|
252
255
|
}
|
|
253
256
|
}
|
|
254
257
|
const groupValues = this.group ? this.group.value ? [this.group.value] : this.group.values : null;
|
|
255
|
-
return this.parameterType.transform(
|
|
258
|
+
return this.parameterType.transform(groupValues, app);
|
|
256
259
|
};
|
|
257
260
|
var regexp = instance(RegExp).or(array([instance(RegExp)]));
|
|
258
261
|
function defineParameterType(registry, ...params) {
|
|
259
262
|
params.forEach((param) => {
|
|
260
|
-
const { name, regexpPattern, transform, type, primitive } = param;
|
|
263
|
+
const { name, regex, regexpPattern, transform: transform2, type, primitive } = param;
|
|
261
264
|
return registerParameterType(
|
|
262
265
|
registry,
|
|
263
266
|
name,
|
|
264
|
-
regexpPattern,
|
|
265
|
-
|
|
267
|
+
regexpPattern ?? regex,
|
|
268
|
+
transform2,
|
|
266
269
|
type,
|
|
267
270
|
primitive
|
|
268
271
|
);
|
|
269
272
|
});
|
|
270
273
|
}
|
|
271
|
-
function registerParameterType(registry, name, regexpPattern,
|
|
274
|
+
function registerParameterType(registry, name, regexpPattern, transform2, type, primitive) {
|
|
272
275
|
return overloads(
|
|
273
276
|
def(
|
|
274
277
|
string(),
|
|
@@ -276,13 +279,13 @@ function registerParameterType(registry, name, regexpPattern, transform, type, p
|
|
|
276
279
|
func("type"),
|
|
277
280
|
func("transform"),
|
|
278
281
|
func("primitive")
|
|
279
|
-
).matches((name2, regexp2, type2,
|
|
282
|
+
).matches((name2, regexp2, type2, transform3, primitive2) => {
|
|
280
283
|
const primitivePrototype = primitive2;
|
|
281
284
|
const typePrototype = type2;
|
|
282
285
|
const wrapper = (val) => {
|
|
283
286
|
const asPrimitive = primitivePrototype(val);
|
|
284
287
|
const asType = new typePrototype(asPrimitive);
|
|
285
|
-
return
|
|
288
|
+
return transform3(asType);
|
|
286
289
|
};
|
|
287
290
|
const param = new ParameterType(name2, regexp2, type2, wrapper);
|
|
288
291
|
registry.defineParameterType(param);
|
|
@@ -293,11 +296,11 @@ function registerParameterType(registry, name, regexpPattern, transform, type, p
|
|
|
293
296
|
func("type"),
|
|
294
297
|
func("transform"),
|
|
295
298
|
nil("primitive")
|
|
296
|
-
).matches((name2, regexp2, type2,
|
|
299
|
+
).matches((name2, regexp2, type2, transform3) => {
|
|
297
300
|
const typePrototype = type2;
|
|
298
301
|
const wrapper = (val) => {
|
|
299
302
|
const asType = new typePrototype(val);
|
|
300
|
-
return
|
|
303
|
+
return transform3(asType);
|
|
301
304
|
};
|
|
302
305
|
const param = new ParameterType(name2, regexp2, type2, wrapper);
|
|
303
306
|
registry.defineParameterType(param);
|
|
@@ -308,11 +311,11 @@ function registerParameterType(registry, name, regexpPattern, transform, type, p
|
|
|
308
311
|
nil("type"),
|
|
309
312
|
func("transform"),
|
|
310
313
|
func("primitive")
|
|
311
|
-
).matches((name2, regexp2, _,
|
|
314
|
+
).matches((name2, regexp2, _, transform3, primitive2) => {
|
|
312
315
|
const primitivePrototype = primitive2;
|
|
313
316
|
const wrapper = (val) => {
|
|
314
317
|
const asPrimitive = fromPrimitive(val, primitivePrototype);
|
|
315
|
-
return
|
|
318
|
+
return transform3(asPrimitive);
|
|
316
319
|
};
|
|
317
320
|
const param = new ParameterType(name2, regexp2, primitive2, wrapper);
|
|
318
321
|
registry.defineParameterType(param);
|
|
@@ -336,8 +339,8 @@ function registerParameterType(registry, name, regexpPattern, transform, type, p
|
|
|
336
339
|
def`makeType`(string(), regexp, func("type"), nil(), nil()).matches(
|
|
337
340
|
(name2, pattern, type2) => {
|
|
338
341
|
const prototype = type2;
|
|
339
|
-
const
|
|
340
|
-
const param = new ParameterType(name2, pattern, null,
|
|
342
|
+
const transform3 = (val) => new prototype(val);
|
|
343
|
+
const param = new ParameterType(name2, pattern, null, transform3);
|
|
341
344
|
registry.defineParameterType(param);
|
|
342
345
|
}
|
|
343
346
|
),
|
|
@@ -349,8 +352,8 @@ function registerParameterType(registry, name, regexpPattern, transform, type, p
|
|
|
349
352
|
func("primitive")
|
|
350
353
|
).matches((name2, pattern, _, __, primitive2) => {
|
|
351
354
|
const prototype = primitive2;
|
|
352
|
-
const
|
|
353
|
-
const param = new ParameterType(name2, pattern, null,
|
|
355
|
+
const transform3 = (val) => fromPrimitive(val, prototype);
|
|
356
|
+
const param = new ParameterType(name2, pattern, null, transform3);
|
|
354
357
|
registry.defineParameterType(param);
|
|
355
358
|
}),
|
|
356
359
|
def`transformValue`(
|
|
@@ -359,18 +362,18 @@ function registerParameterType(registry, name, regexpPattern, transform, type, p
|
|
|
359
362
|
nil(),
|
|
360
363
|
func("transform"),
|
|
361
364
|
nil()
|
|
362
|
-
).matches((name2, pattern, _,
|
|
363
|
-
const param = new ParameterType(name2, pattern, null,
|
|
365
|
+
).matches((name2, pattern, _, transform3, __) => {
|
|
366
|
+
const param = new ParameterType(name2, pattern, null, transform3);
|
|
364
367
|
registry.defineParameterType(param);
|
|
365
368
|
}),
|
|
366
369
|
def`default`(string(), instance(RegExp), nil(), nil(), nil()).matches(
|
|
367
370
|
(name2, pattern, _, __, ___) => {
|
|
368
|
-
const
|
|
369
|
-
const param = new ParameterType(name2, pattern, null,
|
|
371
|
+
const transform3 = (val) => val;
|
|
372
|
+
const param = new ParameterType(name2, pattern, null, transform3);
|
|
370
373
|
registry.defineParameterType(param);
|
|
371
374
|
}
|
|
372
375
|
)
|
|
373
|
-
).use([name, regexpPattern, type,
|
|
376
|
+
).use([name, regexpPattern, type, transform2, primitive]);
|
|
374
377
|
}
|
|
375
378
|
function fromPrimitive(value, primitive) {
|
|
376
379
|
if (primitive === String) {
|
|
@@ -398,25 +401,25 @@ var boolTypesEnabled = ["enabled", "disabled"];
|
|
|
398
401
|
var boolTypes = ["true", "false"];
|
|
399
402
|
var OrdinalParam = {
|
|
400
403
|
name: "ordinal",
|
|
401
|
-
|
|
404
|
+
regex: /(\d+)(?:st|nd|rd|th)/,
|
|
402
405
|
transform: (value) => parseInt(value, 10)
|
|
403
406
|
};
|
|
404
407
|
var NumberParam = {
|
|
405
408
|
name: "number",
|
|
406
|
-
|
|
409
|
+
regex: /\d+/,
|
|
407
410
|
primitive: Number
|
|
408
411
|
};
|
|
409
412
|
var AnyParam = {
|
|
410
413
|
name: "any",
|
|
411
|
-
|
|
414
|
+
regex: /.*/
|
|
412
415
|
};
|
|
413
416
|
var UnknownParam = {
|
|
414
417
|
name: "unknown",
|
|
415
|
-
|
|
418
|
+
regex: /.*/
|
|
416
419
|
};
|
|
417
420
|
var TextParam = {
|
|
418
421
|
name: "text",
|
|
419
|
-
|
|
422
|
+
regex: /"([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'/,
|
|
420
423
|
primitive: String,
|
|
421
424
|
transform: (value) => {
|
|
422
425
|
const asStr = value;
|
|
@@ -425,22 +428,22 @@ var TextParam = {
|
|
|
425
428
|
};
|
|
426
429
|
var BooleanParam = {
|
|
427
430
|
name: "boolean",
|
|
428
|
-
|
|
431
|
+
regex: /true|false/,
|
|
429
432
|
primitive: Boolean
|
|
430
433
|
};
|
|
431
434
|
var BoolParam = {
|
|
432
435
|
name: "bool",
|
|
433
|
-
|
|
436
|
+
regex: /true|false/,
|
|
434
437
|
primitive: Boolean
|
|
435
438
|
};
|
|
436
439
|
var DateParam = {
|
|
437
440
|
name: "date",
|
|
438
|
-
|
|
441
|
+
regex: [isodateRegexp, shortDateRegex],
|
|
439
442
|
type: Date
|
|
440
443
|
};
|
|
441
444
|
var PrimitiveParam = {
|
|
442
445
|
name: "primitive",
|
|
443
|
-
|
|
446
|
+
regex: [
|
|
444
447
|
/true|false/,
|
|
445
448
|
/enabled|disabled/,
|
|
446
449
|
/active|inactive/,
|
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 { 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\nfunction removeWhitespaceFromQuotedSubstrings(inputString: string): string {\n const regex = /([\"'])([^\"']*?)\\1/g;\n let modifiedString = inputString;\n\n let match;\n while ((match = regex.exec(inputString))) {\n const quotedSubstring = match[0];\n const strippedSubstring = match[2].replace(/\\s+/g, \"\"); // Remove whitespace\n modifiedString = modifiedString.replace(\n quotedSubstring,\n `${match[1]}${strippedSubstring}${match[1]}`\n );\n }\n\n return modifiedString;\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 collapsed = removeWhitespaceFromQuotedSubstrings(text);\n const diff = getDiff(collapsed, it);\n const refined = refineDiff(diff);\n const dist = distance(collapsed, 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 const extra = extractTextAfterPlaceholder(scopeChange.value);\n if (extra) {\n strings.push(extra);\n }\n index++;\n continue;\n }\n if (gherkinChange.removed === true) {\n continue;\n }\n if (gherkinChange.value) {\n strings.push(gherkinChange.value);\n\n continue;\n }\n }\n return strings.join(\"\");\n}\n\nfunction extractTextAfterPlaceholder(inputString: string): string | null {\n // Define a regular expression to match the pattern\n const regex = /\\{[^{}]+\\}(.+)?/;\n\n // Use regex.exec to find a match in the input string\n const match = regex.exec(inputString);\n\n // Check if a match was found\n if (match && match[1]) {\n return match[1]; // Extract and trim the matched text (including leading spaces if present)\n } else {\n return null; // No match found or nothing after curly braces\n }\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}\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 = this.headingText && 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}\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 = fromPrimitive(val, primitivePrototype);\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 = fromPrimitive(val, primitivePrototype);\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) => fromPrimitive(val, prototype);\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\nfunction fromPrimitive(value: unknown, primitive: PrimitiveConstructor) {\n if (primitive === String) {\n return value;\n }\n if (primitive === Number) {\n return parseFloat(value as string);\n }\n if (primitive === Boolean) {\n return value === \"true\";\n }\n return primitive(value);\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 OrdinalParam: ParamTypeDefinition = {\n name: \"ordinal\",\n regexpPattern: /(\\d+)(?:st|nd|rd|th)/,\n transform: (value: string) => parseInt(value, 10)\n};\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 = {\n name: \"boolean\",\n regexpPattern: /true|false/,\n primitive: Boolean,\n};\nexport const BoolParam = {\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|missing/,\n /NaN/,\n /Infinity/,\n /-Infinity/,\n isodateRegexp,\n shortDateRegex,\n /-?(\\d*\\.?\\d+|\\d{1,3}(,\\d{3})*(\\.\\d+)?)/, // Comma delimited number, e.g. \"1\", \"1,000\", \"1,000.00\"\n /-?(\\d*,?\\d+|\\d{1,3}(.\\d{3})*(,\\d+))/, // Period delimited number, e.g. \"1\", \"1.000,00\"\n /\"([^\"]*)\"/,\n /'([^']*)'/\n ],\n transform: (value: unknown) => {\n return overloads(\n def(string({ equals: \"null\" })).matches((_) => null),\n def(string({ in: [\"undefined\", \"missing\"] })).matches((_) => undefined),\n def(string({ in: boolTypes })).matches((val) => val === \"true\"),\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{1,3}(,\\d{3})*(\\.\\d+)?)/ })).matches(\n (val) => {\n const asStr = val.replace(/,/g, \"\");\n return parseFloat(asStr);\n }\n ),\n // def(string({ pattern: /-?(\\d{1,3}(\\.\\d{3})*(,\\d+)?)/ })).matches(\n // (val) =>{\n // const asStr = val.replace(/\\./g, \"\").replace(/,/g, \".\");\n // return Number(asStr);\n // }\n // ),\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\n"],"mappings":"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","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\nfunction removeWhitespaceFromQuotedSubstrings(inputString: string): string {\n const regex = /([\"'])([^\"']*?)\\1/g;\n let modifiedString = inputString;\n\n let match;\n while ((match = regex.exec(inputString))) {\n const quotedSubstring = match[0];\n const strippedSubstring = match[2].replace(/\\s+/g, \"\"); // Remove whitespace\n modifiedString = modifiedString.replace(\n quotedSubstring,\n `${match[1]}${strippedSubstring}${match[1]}`\n );\n }\n\n return modifiedString;\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 collapsed = removeWhitespaceFromQuotedSubstrings(text);\n const diff = getDiff(collapsed, it);\n const refined = refineDiff(diff);\n const dist = distance(collapsed, 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 const extra = extractTextAfterPlaceholder(scopeChange.value);\n if (extra) {\n strings.push(extra);\n }\n index++;\n continue;\n }\n if (gherkinChange.removed === true) {\n continue;\n }\n if (gherkinChange.value) {\n strings.push(gherkinChange.value);\n\n continue;\n }\n }\n return strings.join(\"\");\n}\n\nfunction extractTextAfterPlaceholder(inputString: string): string | null {\n // Define a regular expression to match the pattern\n const regex = /\\{[^{}]+\\}(.+)?/;\n\n // Use regex.exec to find a match in the input string\n const match = regex.exec(inputString);\n\n // Check if a match was found\n if (match && match[1]) {\n return match[1]; // Extract and trim the matched text (including leading spaces if present)\n } else {\n return null; // No match found or nothing after curly braces\n }\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}\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 = this.headingText && 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}\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\";\nimport { App } from \"@autometa/app\";\ndeclare module \"@cucumber/cucumber-expressions\" {\n interface ParameterType<T> {\n transform(groupValues: string[] | null, app: App): T;\n }\n}\nParameterType.prototype.transform = function transform(\n this: ParameterType<unknown> | undefined,\n value: string[] | null,\n app: App\n) {\n return (\n this as unknown as { transformFn: (...args: unknown[]) => unknown }\n ).transformFn.apply(this, [...(value ?? []), app]);\n} as unknown as typeof ParameterType.prototype.transform;\n\n// todo - this has a bug when dealing with {string} - does not remove quotes\nArgument.prototype.getValue = function getValue<T>(this: Argument, app: App) {\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\n if (value.length > 0) {\n return this.parameterType.transform(value, app) as T;\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(groupValues, app) as T;\n};\ntype PrimitiveConstructor =\n | typeof Number\n | typeof String\n | typeof Boolean\n | typeof BigInt;\n\nexport type ParamTypeDefinition = {\n name: string;\n regex: RegExp | RegExp[];\n /**\n * @deprecated use regex instead\n */\n regexpPattern?: RegExp | RegExp[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n transform?: (value: any, app: App) => 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, regex, regexpPattern, transform, type, primitive } =\n param as ParamTypeDefinition;\n return registerParameterType(\n registry,\n name,\n regexpPattern ?? regex,\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, app: App) => 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 = fromPrimitive(val, primitivePrototype);\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 = fromPrimitive(val, primitivePrototype);\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) => fromPrimitive(val, prototype);\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\nfunction fromPrimitive(value: unknown, primitive: PrimitiveConstructor) {\n if (primitive === String) {\n return value;\n }\n if (primitive === Number) {\n return parseFloat(value as string);\n }\n if (primitive === Boolean) {\n return value === \"true\";\n }\n return primitive(value);\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 OrdinalParam: ParamTypeDefinition = {\n name: \"ordinal\",\n regex: /(\\d+)(?:st|nd|rd|th)/,\n transform: (value: string) => parseInt(value, 10),\n};\n\nexport const NumberParam: AutoParamTypeDefinition = {\n name: \"number\",\n regex: /\\d+/,\n primitive: Number,\n};\n\nexport const AnyParam: AutoParamTypeDefinition = {\n name: \"any\",\n regex: /.*/,\n};\nexport const UnknownParam: AutoParamTypeDefinition = {\n name: \"unknown\",\n regex: /.*/,\n};\nexport const TextParam: ParamTypeDefinition = {\n name: \"text\",\n regex: /\"([^\"\\\\]*(\\\\.[^\"\\\\]*)*)\"|'([^'\\\\]*(\\\\.[^'\\\\]*)*)'/,\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 = {\n name: \"boolean\",\n regex: /true|false/,\n primitive: Boolean,\n};\nexport const BoolParam = {\n name: \"bool\",\n regex: /true|false/,\n primitive: Boolean,\n};\nexport const DateParam: AutoParamTypeDefinition = {\n name: \"date\",\n regex: [isodateRegexp, shortDateRegex],\n type: Date,\n};\n\nexport const PrimitiveParam: ParamTypeDefinition = {\n name: \"primitive\",\n regex: [\n /true|false/,\n /enabled|disabled/,\n /active|inactive/,\n /null/,\n /empty/,\n /undefined|missing/,\n /NaN/,\n /Infinity/,\n /-Infinity/,\n isodateRegexp,\n shortDateRegex,\n /-?(\\d*\\.?\\d+|\\d{1,3}(,\\d{3})*(\\.\\d+)?)/, // Comma delimited number, e.g. \"1\", \"1,000\", \"1,000.00\"\n /-?(\\d*,?\\d+|\\d{1,3}(.\\d{3})*(,\\d+))/, // Period delimited number, e.g. \"1\", \"1.000,00\"\n /\"([^\"]*)\"/,\n /'([^']*)'/,\n ],\n transform: (value: unknown) => {\n return overloads(\n def(string({ equals: \"null\" })).matches((_) => null),\n def(string({ in: [\"undefined\", \"missing\"] })).matches((_) => undefined),\n def(string({ in: boolTypes })).matches((val) => val === \"true\"),\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{1,3}(,\\d{3})*(\\.\\d+)?)/ })).matches(\n (val) => {\n const asStr = val.replace(/,/g, \"\");\n return parseFloat(asStr);\n }\n ),\n // def(string({ pattern: /-?(\\d{1,3}(\\.\\d{3})*(,\\d+)?)/ })).matches(\n // (val) =>{\n // const asStr = val.replace(/\\./g, \"\").replace(/,/g, \".\");\n // return Number(asStr);\n // }\n // ),\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","transform","name","regexp","type","primitive","def","overloads","string"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Change } from 'diff';
|
|
2
2
|
import { Expression, ParameterTypeRegistry } from '@cucumber/cucumber-expressions';
|
|
3
3
|
import { Class } from '@autometa/types';
|
|
4
|
+
import { App } from '@autometa/app';
|
|
4
5
|
|
|
5
6
|
type CachedStep = {
|
|
6
7
|
keyword: string;
|
|
@@ -63,10 +64,19 @@ declare class FuzzySearchReport {
|
|
|
63
64
|
}
|
|
64
65
|
declare function buildFuzzySearchReport({ same, other }: LimitedStepDiffs, depth: number): FuzzySearchReport;
|
|
65
66
|
|
|
67
|
+
declare module "@cucumber/cucumber-expressions" {
|
|
68
|
+
interface ParameterType<T> {
|
|
69
|
+
transform(groupValues: string[] | null, app: App): T;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
66
72
|
type ParamTypeDefinition = {
|
|
67
73
|
name: string;
|
|
68
|
-
|
|
69
|
-
|
|
74
|
+
regex: RegExp | RegExp[];
|
|
75
|
+
/**
|
|
76
|
+
* @deprecated use regex instead
|
|
77
|
+
*/
|
|
78
|
+
regexpPattern?: RegExp | RegExp[];
|
|
79
|
+
transform?: (value: any, app: App) => unknown;
|
|
70
80
|
type?: Class<unknown>;
|
|
71
81
|
primitive?: typeof String | typeof Number | typeof Boolean | typeof BigInt | typeof Date;
|
|
72
82
|
};
|
|
@@ -80,12 +90,12 @@ declare const UnknownParam: AutoParamTypeDefinition;
|
|
|
80
90
|
declare const TextParam: ParamTypeDefinition;
|
|
81
91
|
declare const BooleanParam: {
|
|
82
92
|
name: string;
|
|
83
|
-
|
|
93
|
+
regex: RegExp;
|
|
84
94
|
primitive: BooleanConstructor;
|
|
85
95
|
};
|
|
86
96
|
declare const BoolParam: {
|
|
87
97
|
name: string;
|
|
88
|
-
|
|
98
|
+
regex: RegExp;
|
|
89
99
|
primitive: BooleanConstructor;
|
|
90
100
|
};
|
|
91
101
|
declare const DateParam: AutoParamTypeDefinition;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Change } from 'diff';
|
|
2
2
|
import { Expression, ParameterTypeRegistry } from '@cucumber/cucumber-expressions';
|
|
3
3
|
import { Class } from '@autometa/types';
|
|
4
|
+
import { App } from '@autometa/app';
|
|
4
5
|
|
|
5
6
|
type CachedStep = {
|
|
6
7
|
keyword: string;
|
|
@@ -63,10 +64,19 @@ declare class FuzzySearchReport {
|
|
|
63
64
|
}
|
|
64
65
|
declare function buildFuzzySearchReport({ same, other }: LimitedStepDiffs, depth: number): FuzzySearchReport;
|
|
65
66
|
|
|
67
|
+
declare module "@cucumber/cucumber-expressions" {
|
|
68
|
+
interface ParameterType<T> {
|
|
69
|
+
transform(groupValues: string[] | null, app: App): T;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
66
72
|
type ParamTypeDefinition = {
|
|
67
73
|
name: string;
|
|
68
|
-
|
|
69
|
-
|
|
74
|
+
regex: RegExp | RegExp[];
|
|
75
|
+
/**
|
|
76
|
+
* @deprecated use regex instead
|
|
77
|
+
*/
|
|
78
|
+
regexpPattern?: RegExp | RegExp[];
|
|
79
|
+
transform?: (value: any, app: App) => unknown;
|
|
70
80
|
type?: Class<unknown>;
|
|
71
81
|
primitive?: typeof String | typeof Number | typeof Boolean | typeof BigInt | typeof Date;
|
|
72
82
|
};
|
|
@@ -80,12 +90,12 @@ declare const UnknownParam: AutoParamTypeDefinition;
|
|
|
80
90
|
declare const TextParam: ParamTypeDefinition;
|
|
81
91
|
declare const BooleanParam: {
|
|
82
92
|
name: string;
|
|
83
|
-
|
|
93
|
+
regex: RegExp;
|
|
84
94
|
primitive: BooleanConstructor;
|
|
85
95
|
};
|
|
86
96
|
declare const BoolParam: {
|
|
87
97
|
name: string;
|
|
88
|
-
|
|
98
|
+
regex: RegExp;
|
|
89
99
|
primitive: BooleanConstructor;
|
|
90
100
|
};
|
|
91
101
|
declare const DateParam: AutoParamTypeDefinition;
|
package/dist/index.js
CHANGED
|
@@ -287,31 +287,34 @@ function buildFuzzySearchReport({ same, other }, depth) {
|
|
|
287
287
|
// src/parameters.ts
|
|
288
288
|
var import_cucumber_expressions = require("@cucumber/cucumber-expressions");
|
|
289
289
|
var import_overloaded = require("@autometa/overloaded");
|
|
290
|
-
import_cucumber_expressions.
|
|
290
|
+
import_cucumber_expressions.ParameterType.prototype.transform = function transform(value, app) {
|
|
291
|
+
return this.transformFn.apply(this, [...value ?? [], app]);
|
|
292
|
+
};
|
|
293
|
+
import_cucumber_expressions.Argument.prototype.getValue = function getValue(app) {
|
|
291
294
|
if (this.group.children.length > 0) {
|
|
292
295
|
const value = this.group.children.filter((it) => it.value !== void 0).map((child) => child.value);
|
|
293
296
|
if (value.length > 0) {
|
|
294
|
-
return this.parameterType.transform(
|
|
297
|
+
return this.parameterType.transform(value, app);
|
|
295
298
|
}
|
|
296
299
|
}
|
|
297
300
|
const groupValues = this.group ? this.group.value ? [this.group.value] : this.group.values : null;
|
|
298
|
-
return this.parameterType.transform(
|
|
301
|
+
return this.parameterType.transform(groupValues, app);
|
|
299
302
|
};
|
|
300
303
|
var regexp = (0, import_overloaded.instance)(RegExp).or((0, import_overloaded.array)([(0, import_overloaded.instance)(RegExp)]));
|
|
301
304
|
function defineParameterType(registry, ...params) {
|
|
302
305
|
params.forEach((param) => {
|
|
303
|
-
const { name, regexpPattern, transform, type, primitive } = param;
|
|
306
|
+
const { name, regex, regexpPattern, transform: transform2, type, primitive } = param;
|
|
304
307
|
return registerParameterType(
|
|
305
308
|
registry,
|
|
306
309
|
name,
|
|
307
|
-
regexpPattern,
|
|
308
|
-
|
|
310
|
+
regexpPattern ?? regex,
|
|
311
|
+
transform2,
|
|
309
312
|
type,
|
|
310
313
|
primitive
|
|
311
314
|
);
|
|
312
315
|
});
|
|
313
316
|
}
|
|
314
|
-
function registerParameterType(registry, name, regexpPattern,
|
|
317
|
+
function registerParameterType(registry, name, regexpPattern, transform2, type, primitive) {
|
|
315
318
|
return (0, import_overloaded.overloads)(
|
|
316
319
|
(0, import_overloaded.def)(
|
|
317
320
|
(0, import_overloaded.string)(),
|
|
@@ -319,13 +322,13 @@ function registerParameterType(registry, name, regexpPattern, transform, type, p
|
|
|
319
322
|
(0, import_overloaded.func)("type"),
|
|
320
323
|
(0, import_overloaded.func)("transform"),
|
|
321
324
|
(0, import_overloaded.func)("primitive")
|
|
322
|
-
).matches((name2, regexp2, type2,
|
|
325
|
+
).matches((name2, regexp2, type2, transform3, primitive2) => {
|
|
323
326
|
const primitivePrototype = primitive2;
|
|
324
327
|
const typePrototype = type2;
|
|
325
328
|
const wrapper = (val) => {
|
|
326
329
|
const asPrimitive = primitivePrototype(val);
|
|
327
330
|
const asType = new typePrototype(asPrimitive);
|
|
328
|
-
return
|
|
331
|
+
return transform3(asType);
|
|
329
332
|
};
|
|
330
333
|
const param = new import_cucumber_expressions.ParameterType(name2, regexp2, type2, wrapper);
|
|
331
334
|
registry.defineParameterType(param);
|
|
@@ -336,11 +339,11 @@ function registerParameterType(registry, name, regexpPattern, transform, type, p
|
|
|
336
339
|
(0, import_overloaded.func)("type"),
|
|
337
340
|
(0, import_overloaded.func)("transform"),
|
|
338
341
|
(0, import_overloaded.nil)("primitive")
|
|
339
|
-
).matches((name2, regexp2, type2,
|
|
342
|
+
).matches((name2, regexp2, type2, transform3) => {
|
|
340
343
|
const typePrototype = type2;
|
|
341
344
|
const wrapper = (val) => {
|
|
342
345
|
const asType = new typePrototype(val);
|
|
343
|
-
return
|
|
346
|
+
return transform3(asType);
|
|
344
347
|
};
|
|
345
348
|
const param = new import_cucumber_expressions.ParameterType(name2, regexp2, type2, wrapper);
|
|
346
349
|
registry.defineParameterType(param);
|
|
@@ -351,11 +354,11 @@ function registerParameterType(registry, name, regexpPattern, transform, type, p
|
|
|
351
354
|
(0, import_overloaded.nil)("type"),
|
|
352
355
|
(0, import_overloaded.func)("transform"),
|
|
353
356
|
(0, import_overloaded.func)("primitive")
|
|
354
|
-
).matches((name2, regexp2, _,
|
|
357
|
+
).matches((name2, regexp2, _, transform3, primitive2) => {
|
|
355
358
|
const primitivePrototype = primitive2;
|
|
356
359
|
const wrapper = (val) => {
|
|
357
360
|
const asPrimitive = fromPrimitive(val, primitivePrototype);
|
|
358
|
-
return
|
|
361
|
+
return transform3(asPrimitive);
|
|
359
362
|
};
|
|
360
363
|
const param = new import_cucumber_expressions.ParameterType(name2, regexp2, primitive2, wrapper);
|
|
361
364
|
registry.defineParameterType(param);
|
|
@@ -379,8 +382,8 @@ function registerParameterType(registry, name, regexpPattern, transform, type, p
|
|
|
379
382
|
import_overloaded.def`makeType`((0, import_overloaded.string)(), regexp, (0, import_overloaded.func)("type"), (0, import_overloaded.nil)(), (0, import_overloaded.nil)()).matches(
|
|
380
383
|
(name2, pattern, type2) => {
|
|
381
384
|
const prototype = type2;
|
|
382
|
-
const
|
|
383
|
-
const param = new import_cucumber_expressions.ParameterType(name2, pattern, null,
|
|
385
|
+
const transform3 = (val) => new prototype(val);
|
|
386
|
+
const param = new import_cucumber_expressions.ParameterType(name2, pattern, null, transform3);
|
|
384
387
|
registry.defineParameterType(param);
|
|
385
388
|
}
|
|
386
389
|
),
|
|
@@ -392,8 +395,8 @@ function registerParameterType(registry, name, regexpPattern, transform, type, p
|
|
|
392
395
|
(0, import_overloaded.func)("primitive")
|
|
393
396
|
).matches((name2, pattern, _, __, primitive2) => {
|
|
394
397
|
const prototype = primitive2;
|
|
395
|
-
const
|
|
396
|
-
const param = new import_cucumber_expressions.ParameterType(name2, pattern, null,
|
|
398
|
+
const transform3 = (val) => fromPrimitive(val, prototype);
|
|
399
|
+
const param = new import_cucumber_expressions.ParameterType(name2, pattern, null, transform3);
|
|
397
400
|
registry.defineParameterType(param);
|
|
398
401
|
}),
|
|
399
402
|
import_overloaded.def`transformValue`(
|
|
@@ -402,18 +405,18 @@ function registerParameterType(registry, name, regexpPattern, transform, type, p
|
|
|
402
405
|
(0, import_overloaded.nil)(),
|
|
403
406
|
(0, import_overloaded.func)("transform"),
|
|
404
407
|
(0, import_overloaded.nil)()
|
|
405
|
-
).matches((name2, pattern, _,
|
|
406
|
-
const param = new import_cucumber_expressions.ParameterType(name2, pattern, null,
|
|
408
|
+
).matches((name2, pattern, _, transform3, __) => {
|
|
409
|
+
const param = new import_cucumber_expressions.ParameterType(name2, pattern, null, transform3);
|
|
407
410
|
registry.defineParameterType(param);
|
|
408
411
|
}),
|
|
409
412
|
import_overloaded.def`default`((0, import_overloaded.string)(), (0, import_overloaded.instance)(RegExp), (0, import_overloaded.nil)(), (0, import_overloaded.nil)(), (0, import_overloaded.nil)()).matches(
|
|
410
413
|
(name2, pattern, _, __, ___) => {
|
|
411
|
-
const
|
|
412
|
-
const param = new import_cucumber_expressions.ParameterType(name2, pattern, null,
|
|
414
|
+
const transform3 = (val) => val;
|
|
415
|
+
const param = new import_cucumber_expressions.ParameterType(name2, pattern, null, transform3);
|
|
413
416
|
registry.defineParameterType(param);
|
|
414
417
|
}
|
|
415
418
|
)
|
|
416
|
-
).use([name, regexpPattern, type,
|
|
419
|
+
).use([name, regexpPattern, type, transform2, primitive]);
|
|
417
420
|
}
|
|
418
421
|
function fromPrimitive(value, primitive) {
|
|
419
422
|
if (primitive === String) {
|
|
@@ -441,25 +444,25 @@ var boolTypesEnabled = ["enabled", "disabled"];
|
|
|
441
444
|
var boolTypes = ["true", "false"];
|
|
442
445
|
var OrdinalParam = {
|
|
443
446
|
name: "ordinal",
|
|
444
|
-
|
|
447
|
+
regex: /(\d+)(?:st|nd|rd|th)/,
|
|
445
448
|
transform: (value) => parseInt(value, 10)
|
|
446
449
|
};
|
|
447
450
|
var NumberParam = {
|
|
448
451
|
name: "number",
|
|
449
|
-
|
|
452
|
+
regex: /\d+/,
|
|
450
453
|
primitive: Number
|
|
451
454
|
};
|
|
452
455
|
var AnyParam = {
|
|
453
456
|
name: "any",
|
|
454
|
-
|
|
457
|
+
regex: /.*/
|
|
455
458
|
};
|
|
456
459
|
var UnknownParam = {
|
|
457
460
|
name: "unknown",
|
|
458
|
-
|
|
461
|
+
regex: /.*/
|
|
459
462
|
};
|
|
460
463
|
var TextParam = {
|
|
461
464
|
name: "text",
|
|
462
|
-
|
|
465
|
+
regex: /"([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'/,
|
|
463
466
|
primitive: String,
|
|
464
467
|
transform: (value) => {
|
|
465
468
|
const asStr = value;
|
|
@@ -468,22 +471,22 @@ var TextParam = {
|
|
|
468
471
|
};
|
|
469
472
|
var BooleanParam = {
|
|
470
473
|
name: "boolean",
|
|
471
|
-
|
|
474
|
+
regex: /true|false/,
|
|
472
475
|
primitive: Boolean
|
|
473
476
|
};
|
|
474
477
|
var BoolParam = {
|
|
475
478
|
name: "bool",
|
|
476
|
-
|
|
479
|
+
regex: /true|false/,
|
|
477
480
|
primitive: Boolean
|
|
478
481
|
};
|
|
479
482
|
var DateParam = {
|
|
480
483
|
name: "date",
|
|
481
|
-
|
|
484
|
+
regex: [isodateRegexp, shortDateRegex],
|
|
482
485
|
type: Date
|
|
483
486
|
};
|
|
484
487
|
var PrimitiveParam = {
|
|
485
488
|
name: "primitive",
|
|
486
|
-
|
|
489
|
+
regex: [
|
|
487
490
|
/true|false/,
|
|
488
491
|
/enabled|disabled/,
|
|
489
492
|
/active|inactive/,
|
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 { 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\nfunction removeWhitespaceFromQuotedSubstrings(inputString: string): string {\n const regex = /([\"'])([^\"']*?)\\1/g;\n let modifiedString = inputString;\n\n let match;\n while ((match = regex.exec(inputString))) {\n const quotedSubstring = match[0];\n const strippedSubstring = match[2].replace(/\\s+/g, \"\"); // Remove whitespace\n modifiedString = modifiedString.replace(\n quotedSubstring,\n `${match[1]}${strippedSubstring}${match[1]}`\n );\n }\n\n return modifiedString;\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 collapsed = removeWhitespaceFromQuotedSubstrings(text);\n const diff = getDiff(collapsed, it);\n const refined = refineDiff(diff);\n const dist = distance(collapsed, 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 const extra = extractTextAfterPlaceholder(scopeChange.value);\n if (extra) {\n strings.push(extra);\n }\n index++;\n continue;\n }\n if (gherkinChange.removed === true) {\n continue;\n }\n if (gherkinChange.value) {\n strings.push(gherkinChange.value);\n\n continue;\n }\n }\n return strings.join(\"\");\n}\n\nfunction extractTextAfterPlaceholder(inputString: string): string | null {\n // Define a regular expression to match the pattern\n const regex = /\\{[^{}]+\\}(.+)?/;\n\n // Use regex.exec to find a match in the input string\n const match = regex.exec(inputString);\n\n // Check if a match was found\n if (match && match[1]) {\n return match[1]; // Extract and trim the matched text (including leading spaces if present)\n } else {\n return null; // No match found or nothing after curly braces\n }\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}\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 = this.headingText && 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}\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 = fromPrimitive(val, primitivePrototype);\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 = fromPrimitive(val, primitivePrototype);\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) => fromPrimitive(val, prototype);\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\nfunction fromPrimitive(value: unknown, primitive: PrimitiveConstructor) {\n if (primitive === String) {\n return value;\n }\n if (primitive === Number) {\n return parseFloat(value as string);\n }\n if (primitive === Boolean) {\n return value === \"true\";\n }\n return primitive(value);\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 OrdinalParam: ParamTypeDefinition = {\n name: \"ordinal\",\n regexpPattern: /(\\d+)(?:st|nd|rd|th)/,\n transform: (value: string) => parseInt(value, 10)\n};\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 = {\n name: \"boolean\",\n regexpPattern: /true|false/,\n primitive: Boolean,\n};\nexport const BoolParam = {\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|missing/,\n /NaN/,\n /Infinity/,\n /-Infinity/,\n isodateRegexp,\n shortDateRegex,\n /-?(\\d*\\.?\\d+|\\d{1,3}(,\\d{3})*(\\.\\d+)?)/, // Comma delimited number, e.g. \"1\", \"1,000\", \"1,000.00\"\n /-?(\\d*,?\\d+|\\d{1,3}(.\\d{3})*(,\\d+))/, // Period delimited number, e.g. \"1\", \"1.000,00\"\n /\"([^\"]*)\"/,\n /'([^']*)'/\n ],\n transform: (value: unknown) => {\n return overloads(\n def(string({ equals: \"null\" })).matches((_) => null),\n def(string({ in: [\"undefined\", \"missing\"] })).matches((_) => undefined),\n def(string({ in: boolTypes })).matches((val) => val === \"true\"),\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{1,3}(,\\d{3})*(\\.\\d+)?)/ })).matches(\n (val) => {\n const asStr = val.replace(/,/g, \"\");\n return parseFloat(asStr);\n }\n ),\n // def(string({ pattern: /-?(\\d{1,3}(\\.\\d{3})*(,\\d+)?)/ })).matches(\n // (val) =>{\n // const asStr = val.replace(/\\./g, \"\").replace(/,/g, \".\");\n // return Number(asStr);\n // }\n // ),\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\n"],"mappings":"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","names":["chalk","distance","name","regexp","type","transform","primitive","import_overloaded"]}
|
|
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\";\n","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\nfunction removeWhitespaceFromQuotedSubstrings(inputString: string): string {\n const regex = /([\"'])([^\"']*?)\\1/g;\n let modifiedString = inputString;\n\n let match;\n while ((match = regex.exec(inputString))) {\n const quotedSubstring = match[0];\n const strippedSubstring = match[2].replace(/\\s+/g, \"\"); // Remove whitespace\n modifiedString = modifiedString.replace(\n quotedSubstring,\n `${match[1]}${strippedSubstring}${match[1]}`\n );\n }\n\n return modifiedString;\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 collapsed = removeWhitespaceFromQuotedSubstrings(text);\n const diff = getDiff(collapsed, it);\n const refined = refineDiff(diff);\n const dist = distance(collapsed, 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 const extra = extractTextAfterPlaceholder(scopeChange.value);\n if (extra) {\n strings.push(extra);\n }\n index++;\n continue;\n }\n if (gherkinChange.removed === true) {\n continue;\n }\n if (gherkinChange.value) {\n strings.push(gherkinChange.value);\n\n continue;\n }\n }\n return strings.join(\"\");\n}\n\nfunction extractTextAfterPlaceholder(inputString: string): string | null {\n // Define a regular expression to match the pattern\n const regex = /\\{[^{}]+\\}(.+)?/;\n\n // Use regex.exec to find a match in the input string\n const match = regex.exec(inputString);\n\n // Check if a match was found\n if (match && match[1]) {\n return match[1]; // Extract and trim the matched text (including leading spaces if present)\n } else {\n return null; // No match found or nothing after curly braces\n }\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}\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 = this.headingText && 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}\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\";\nimport { App } from \"@autometa/app\";\ndeclare module \"@cucumber/cucumber-expressions\" {\n interface ParameterType<T> {\n transform(groupValues: string[] | null, app: App): T;\n }\n}\nParameterType.prototype.transform = function transform(\n this: ParameterType<unknown> | undefined,\n value: string[] | null,\n app: App\n) {\n return (\n this as unknown as { transformFn: (...args: unknown[]) => unknown }\n ).transformFn.apply(this, [...(value ?? []), app]);\n} as unknown as typeof ParameterType.prototype.transform;\n\n// todo - this has a bug when dealing with {string} - does not remove quotes\nArgument.prototype.getValue = function getValue<T>(this: Argument, app: App) {\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\n if (value.length > 0) {\n return this.parameterType.transform(value, app) as T;\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(groupValues, app) as T;\n};\ntype PrimitiveConstructor =\n | typeof Number\n | typeof String\n | typeof Boolean\n | typeof BigInt;\n\nexport type ParamTypeDefinition = {\n name: string;\n regex: RegExp | RegExp[];\n /**\n * @deprecated use regex instead\n */\n regexpPattern?: RegExp | RegExp[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n transform?: (value: any, app: App) => 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, regex, regexpPattern, transform, type, primitive } =\n param as ParamTypeDefinition;\n return registerParameterType(\n registry,\n name,\n regexpPattern ?? regex,\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, app: App) => 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 = fromPrimitive(val, primitivePrototype);\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 = fromPrimitive(val, primitivePrototype);\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) => fromPrimitive(val, prototype);\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\nfunction fromPrimitive(value: unknown, primitive: PrimitiveConstructor) {\n if (primitive === String) {\n return value;\n }\n if (primitive === Number) {\n return parseFloat(value as string);\n }\n if (primitive === Boolean) {\n return value === \"true\";\n }\n return primitive(value);\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 OrdinalParam: ParamTypeDefinition = {\n name: \"ordinal\",\n regex: /(\\d+)(?:st|nd|rd|th)/,\n transform: (value: string) => parseInt(value, 10),\n};\n\nexport const NumberParam: AutoParamTypeDefinition = {\n name: \"number\",\n regex: /\\d+/,\n primitive: Number,\n};\n\nexport const AnyParam: AutoParamTypeDefinition = {\n name: \"any\",\n regex: /.*/,\n};\nexport const UnknownParam: AutoParamTypeDefinition = {\n name: \"unknown\",\n regex: /.*/,\n};\nexport const TextParam: ParamTypeDefinition = {\n name: \"text\",\n regex: /\"([^\"\\\\]*(\\\\.[^\"\\\\]*)*)\"|'([^'\\\\]*(\\\\.[^'\\\\]*)*)'/,\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 = {\n name: \"boolean\",\n regex: /true|false/,\n primitive: Boolean,\n};\nexport const BoolParam = {\n name: \"bool\",\n regex: /true|false/,\n primitive: Boolean,\n};\nexport const DateParam: AutoParamTypeDefinition = {\n name: \"date\",\n regex: [isodateRegexp, shortDateRegex],\n type: Date,\n};\n\nexport const PrimitiveParam: ParamTypeDefinition = {\n name: \"primitive\",\n regex: [\n /true|false/,\n /enabled|disabled/,\n /active|inactive/,\n /null/,\n /empty/,\n /undefined|missing/,\n /NaN/,\n /Infinity/,\n /-Infinity/,\n isodateRegexp,\n shortDateRegex,\n /-?(\\d*\\.?\\d+|\\d{1,3}(,\\d{3})*(\\.\\d+)?)/, // Comma delimited number, e.g. \"1\", \"1,000\", \"1,000.00\"\n /-?(\\d*,?\\d+|\\d{1,3}(.\\d{3})*(,\\d+))/, // Period delimited number, e.g. \"1\", \"1.000,00\"\n /\"([^\"]*)\"/,\n /'([^']*)'/,\n ],\n transform: (value: unknown) => {\n return overloads(\n def(string({ equals: \"null\" })).matches((_) => null),\n def(string({ in: [\"undefined\", \"missing\"] })).matches((_) => undefined),\n def(string({ in: boolTypes })).matches((val) => val === \"true\"),\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{1,3}(,\\d{3})*(\\.\\d+)?)/ })).matches(\n (val) => {\n const asStr = val.replace(/,/g, \"\");\n return parseFloat(asStr);\n }\n ),\n // def(string({ pattern: /-?(\\d{1,3}(\\.\\d{3})*(,\\d+)?)/ })).matches(\n // (val) =>{\n // const asStr = val.replace(/\\./g, \"\").replace(/,/g, \".\");\n // return Number(asStr);\n // }\n // ),\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","transform","name","regexp","type","primitive","import_overloaded"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autometa/cucumber-expressions",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "wrapper on @cucumber/cucumber-expressions",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -19,31 +19,33 @@
|
|
|
19
19
|
"@types/uuid": "^9.0.5",
|
|
20
20
|
"@typescript-eslint/eslint-plugin": "^5.54.1",
|
|
21
21
|
"@typescript-eslint/parser": "^5.54.1",
|
|
22
|
-
"@vitest/coverage-istanbul": "^
|
|
22
|
+
"@vitest/coverage-istanbul": "^1.4.0",
|
|
23
|
+
"@vitest/coverage-v8": "^1.4.0",
|
|
23
24
|
"eslint": "^8.37.0",
|
|
24
|
-
"eslint-config-custom": "0.6.0",
|
|
25
25
|
"eslint-config-prettier": "^8.3.0",
|
|
26
26
|
"istanbul": "^0.4.5",
|
|
27
27
|
"rimraf": "^4.1.2",
|
|
28
28
|
"strip-color": "^0.1.0",
|
|
29
|
-
"tsconfig": " *",
|
|
30
29
|
"tsup": "^7.2.0",
|
|
31
30
|
"typescript": "^4.9.5",
|
|
32
|
-
"vitest": "
|
|
31
|
+
"vitest": "1.4.0",
|
|
32
|
+
"eslint-config-custom": "0.6.0",
|
|
33
|
+
"tsconfig": "0.7.0"
|
|
33
34
|
},
|
|
34
35
|
"dependencies": {
|
|
35
|
-
"@autometa/asserters": "^0.1.8",
|
|
36
|
-
"@autometa/datetime": "^0.1.16",
|
|
37
|
-
"@autometa/errors": "^0.2.2",
|
|
38
|
-
"@autometa/overloaded": "^0.3.2",
|
|
39
|
-
"@autometa/types": "^0.4.1",
|
|
40
36
|
"@cucumber/cucumber-expressions": "^16.1.2",
|
|
41
37
|
"@types/diff": "^5.0.3",
|
|
42
38
|
"@types/luxon": "^3.3.1",
|
|
43
39
|
"closest-match": "^1.3.3",
|
|
44
40
|
"colors-cli": "^1.0.32",
|
|
45
41
|
"diff": "^5.1.0",
|
|
46
|
-
"luxon": "^3.3.0"
|
|
42
|
+
"luxon": "^3.3.0",
|
|
43
|
+
"@autometa/errors": "^0.2.2",
|
|
44
|
+
"@autometa/overloaded": "^0.3.2",
|
|
45
|
+
"@autometa/types": "^0.4.1",
|
|
46
|
+
"@autometa/datetime": "^0.1.16",
|
|
47
|
+
"@autometa/app": "^0.3.5",
|
|
48
|
+
"@autometa/asserters": "^0.1.8"
|
|
47
49
|
},
|
|
48
50
|
"scripts": {
|
|
49
51
|
"test": "vitest run --passWithNoTests",
|
|
@@ -54,6 +56,5 @@
|
|
|
54
56
|
"clean": "rimraf dist",
|
|
55
57
|
"build": "tsup",
|
|
56
58
|
"build:watch": "tsup --watch"
|
|
57
|
-
}
|
|
58
|
-
"readme": "# Introduction\n\nThere's nothing here yet"
|
|
59
|
+
}
|
|
59
60
|
}
|
package/tsup.config.ts
CHANGED
|
@@ -4,7 +4,7 @@ export default defineConfig({
|
|
|
4
4
|
clean: true, // clean up the dist folder
|
|
5
5
|
format: ["cjs", "esm"], // generate cjs and esm files
|
|
6
6
|
dts: true,
|
|
7
|
-
sourcemap:true, // generate sourcemaps
|
|
7
|
+
sourcemap: true, // generate sourcemaps
|
|
8
8
|
skipNodeModulesBundle: true,
|
|
9
9
|
entryPoints: ["src/index.ts"],
|
|
10
10
|
target: "es2020",
|