@autometa/cucumber-expressions 0.4.3 → 1.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js DELETED
@@ -1,538 +0,0 @@
1
- var __accessCheck = (obj, member, msg) => {
2
- if (!member.has(obj))
3
- throw TypeError("Cannot " + msg);
4
- };
5
- var __privateGet = (obj, member, getter) => {
6
- __accessCheck(obj, member, "read from private field");
7
- return getter ? getter.call(obj) : member.get(obj);
8
- };
9
- var __privateAdd = (obj, member, value) => {
10
- if (member.has(obj))
11
- throw TypeError("Cannot add the same private member more than once");
12
- member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
13
- };
14
-
15
- // src/step-matcher.ts
16
- import { diffWordsWithSpace } from "diff";
17
- import { distance } from "closest-match";
18
- function checkMatch(text, it) {
19
- return it.matches(text);
20
- }
21
- function limitDiffs(sameStepType, differentStepType, max) {
22
- const sameDistances = sameStepType.map((it) => it.distance);
23
- const maxSameStepDistance = Math.max(...sameDistances);
24
- const otherStepDistance = differentStepType.map((it) => it.distance);
25
- const minDifferentStepDistance = Math.min(...otherStepDistance);
26
- if (maxSameStepDistance > minDifferentStepDistance) {
27
- const filter = sameStepType.filter(
28
- (it) => it.distance <= minDifferentStepDistance
29
- );
30
- if (filter.length >= max) {
31
- return { same: filter.slice(0, max), other: [] };
32
- }
33
- const diff = max - filter.length;
34
- const sameSlice = sameStepType.slice(0, diff);
35
- const differentSlice = differentStepType.slice(0, max - diff);
36
- return { same: sameSlice, other: differentSlice };
37
- }
38
- const maxIndex = Math.min(max, sameStepType.length);
39
- return { same: sameStepType.slice(0, maxIndex), other: [] };
40
- }
41
- function removeWhitespaceFromQuotedSubstrings(inputString) {
42
- const regex = /(["'])([^"']*?)\1/g;
43
- let modifiedString = inputString;
44
- let match;
45
- while (match = regex.exec(inputString)) {
46
- const quotedSubstring = match[0];
47
- const strippedSubstring = match[2].replace(/\s+/g, "");
48
- modifiedString = modifiedString.replace(
49
- quotedSubstring,
50
- `${match[1]}${strippedSubstring}${match[1]}`
51
- );
52
- }
53
- return modifiedString;
54
- }
55
- function getDiffs(text, maxResults, step) {
56
- const sorted = step.map((it) => {
57
- if (checkMatch(text, it)) {
58
- return { merged: text, step: it, gherkin: text, distance: 0 };
59
- }
60
- const collapsed = removeWhitespaceFromQuotedSubstrings(text);
61
- const diff = getDiff(collapsed, it);
62
- const refined = refineDiff(diff);
63
- const dist = distance(collapsed, refined);
64
- return { merged: refined, step: it, gherkin: text, distance: dist };
65
- }).sort((a, b) => a.distance - b.distance);
66
- const max = Math.min(maxResults, sorted.length);
67
- return sorted.slice(0, max);
68
- }
69
- function getDiff(text, it) {
70
- return diffWordsWithSpace(text, it.expression.source);
71
- }
72
- function refineDiff(diff) {
73
- const strings = [];
74
- for (let index = 0; index < diff.length; index++) {
75
- const gherkinChange = diff[index];
76
- const scopeChange = diff[index + 1];
77
- if (isExpressionCandidate(gherkinChange, scopeChange)) {
78
- strings.push(gherkinChange.value);
79
- const extra = extractTextAfterPlaceholder(scopeChange.value);
80
- if (extra) {
81
- strings.push(extra);
82
- }
83
- index++;
84
- continue;
85
- }
86
- if (gherkinChange.removed === true) {
87
- continue;
88
- }
89
- if (gherkinChange.value) {
90
- strings.push(gherkinChange.value);
91
- continue;
92
- }
93
- }
94
- return strings.join("");
95
- }
96
- function extractTextAfterPlaceholder(inputString) {
97
- const regex = /\{[^{}]+\}(.+)?/;
98
- const match = regex.exec(inputString);
99
- if (match && match[1]) {
100
- return match[1];
101
- } else {
102
- return null;
103
- }
104
- }
105
- function isExpressionCandidate(change1, change2) {
106
- if (change1 && change1.removed && change2 && change2.added) {
107
- const scopeText = change2.value;
108
- return /{.*}/.test(scopeText);
109
- }
110
- return false;
111
- }
112
-
113
- // src/search-report.ts
114
- import chalk from "colors-cli";
115
- var SameStepTypeMatch = class {
116
- constructor(diff) {
117
- this.keyword = diff.step.keyword;
118
- this.text = diff.merged;
119
- this.source = diff.step.expression.source;
120
- this.distance = diff.distance;
121
- }
122
- toString() {
123
- const keyword = chalk.green(this.keyword);
124
- const text = chalk.white(this.source);
125
- const distance2 = chalk.blue(`[${this.distance}]`);
126
- return `${distance2} ${keyword} ${text}`;
127
- }
128
- };
129
- var DifferentStepTypeMatch = class {
130
- constructor(diff) {
131
- this.keyword = diff.step.keyword;
132
- this.text = diff.merged;
133
- this.source = diff.step.expression.source;
134
- this.distance = diff.distance;
135
- }
136
- toString() {
137
- const keywordColor = chalk.cyan_bt;
138
- const keyword = keywordColor(this.keyword);
139
- const text = chalk.white(this.source);
140
- const distance2 = chalk.blue(`[${this.distance}]`);
141
- return `${distance2} ${keyword} ${text}`;
142
- }
143
- };
144
- var _sameMatchTypes, sameMatchTypes_get, _differentMatchTypes, differentMatchTypes_get;
145
- var FuzzySearchReport = class {
146
- constructor(depth = 0) {
147
- this.depth = depth;
148
- __privateAdd(this, _sameMatchTypes);
149
- __privateAdd(this, _differentMatchTypes);
150
- this.matches = [];
151
- this.children = [];
152
- }
153
- get length() {
154
- const childLength = this.children.map((it) => it.length).reduce((a, b) => a + b, 0);
155
- return this.matches.length + childLength;
156
- }
157
- addHeading(headingText) {
158
- this.headingText = headingText;
159
- return this;
160
- }
161
- addMatch(match) {
162
- this.matches.push(match);
163
- return this;
164
- }
165
- addChild(child) {
166
- this.children.push(child);
167
- return this;
168
- }
169
- toString() {
170
- if (this.length === 0) {
171
- return "";
172
- }
173
- const same = __privateGet(this, _sameMatchTypes, sameMatchTypes_get).filter((it) => it.distance < 10).map((it) => it.toString()).join("\n");
174
- const sameMessage = same.length > 0 ? chalk.italic(`Steps with matching step type:`) : "";
175
- const different = __privateGet(this, _differentMatchTypes, differentMatchTypes_get).filter((it) => it.distance < 10).map((it) => it.toString()).join("\n");
176
- const differentMessage = different.length > 0 ? chalk.italic(`Steps with different step type:`) : "";
177
- const messageArray = [];
178
- appendSubMessage(messageArray, sameMessage);
179
- appendSubMessage(messageArray, same);
180
- appendSubMessage(messageArray, differentMessage);
181
- appendSubMessage(messageArray, different);
182
- const children = [];
183
- this.children.forEach((child) => {
184
- appendChild(children, child);
185
- });
186
- const formatChildren = children.map((it) => it.toString()).join("\n");
187
- const message = messageArray.join(`
188
- `).trim();
189
- const heading = this.headingText && chalk.black(this.headingText);
190
- return `${heading ?? ""}
191
- ${message.replace(/\r\n|\n|\r/gm, `
192
- ${TAB}`)}
193
- ${formatChildren.replace(/\r\n|\n|\r/gm, `
194
- ${TAB}`)}`;
195
- }
196
- };
197
- _sameMatchTypes = new WeakSet();
198
- sameMatchTypes_get = function() {
199
- return this.matches.filter(
200
- (it) => it instanceof SameStepTypeMatch
201
- );
202
- };
203
- _differentMatchTypes = new WeakSet();
204
- differentMatchTypes_get = function() {
205
- return this.matches.filter(
206
- (it) => it instanceof DifferentStepTypeMatch
207
- );
208
- };
209
- function appendSubMessage(arr, message, prefix) {
210
- if (message && message.length > 0) {
211
- const str = prefix ? `${prefix ?? ""}${message ?? ""}` : message ?? "";
212
- arr.push(str);
213
- }
214
- }
215
- function appendChild(arr, message) {
216
- if (message) {
217
- arr.push(message);
218
- }
219
- }
220
- var SPACE = " ";
221
- var TAB = SPACE.repeat(2);
222
- function buildFuzzySearchReport({ same, other }, depth) {
223
- const report = new FuzzySearchReport(depth);
224
- same.forEach((diff) => {
225
- report.addMatch(new SameStepTypeMatch(diff));
226
- });
227
- other.forEach((diff) => {
228
- report.addMatch(new DifferentStepTypeMatch(diff));
229
- });
230
- return report;
231
- }
232
-
233
- // src/parameters.ts
234
- import {
235
- Argument,
236
- ParameterType
237
- } from "@cucumber/cucumber-expressions";
238
- import {
239
- def,
240
- func,
241
- instance,
242
- overloads,
243
- string,
244
- nil,
245
- array
246
- } from "@autometa/overloaded";
247
- ParameterType.prototype.transform = function transform(value, app) {
248
- return this.transformFn.apply(this, [...value ?? [], app]);
249
- };
250
- Argument.prototype.getValue = function getValue(app) {
251
- if (this.group.children.length > 0) {
252
- const value = this.group.children.filter((it) => it.value !== void 0).map((child) => child.value);
253
- if (value.length > 0) {
254
- return this.parameterType.transform(value, app);
255
- }
256
- }
257
- const groupValues = this.group ? this.group.value ? [this.group.value] : this.group.values : null;
258
- return this.parameterType.transform(groupValues, app);
259
- };
260
- var regexp = instance(RegExp).or(array([instance(RegExp)]));
261
- function defineParameterType(registry, ...params) {
262
- params.forEach((param) => {
263
- const { name, regex, regexpPattern, transform: transform2, type, primitive } = param;
264
- return registerParameterType(
265
- registry,
266
- name,
267
- regexpPattern ?? regex,
268
- transform2,
269
- type,
270
- primitive
271
- );
272
- });
273
- }
274
- function registerParameterType(registry, name, regexpPattern, transform2, type, primitive) {
275
- return overloads(
276
- def(
277
- string(),
278
- regexp,
279
- func("type"),
280
- func("transform"),
281
- func("primitive")
282
- ).matches((name2, regexp2, type2, transform3, primitive2) => {
283
- const primitivePrototype = primitive2;
284
- const typePrototype = type2;
285
- const wrapper = (val) => {
286
- const asPrimitive = primitivePrototype(val);
287
- const asType = new typePrototype(asPrimitive);
288
- return transform3(asType);
289
- };
290
- const param = new ParameterType(name2, regexp2, type2, wrapper);
291
- registry.defineParameterType(param);
292
- }),
293
- def`allTransforms`(
294
- string(),
295
- regexp,
296
- func("type"),
297
- func("transform"),
298
- nil("primitive")
299
- ).matches((name2, regexp2, type2, transform3) => {
300
- const typePrototype = type2;
301
- const wrapper = (val) => {
302
- const asType = new typePrototype(val);
303
- return transform3(asType);
304
- };
305
- const param = new ParameterType(name2, regexp2, type2, wrapper);
306
- registry.defineParameterType(param);
307
- }),
308
- def`transformPrimitive`(
309
- string(),
310
- regexp,
311
- nil("type"),
312
- func("transform"),
313
- func("primitive")
314
- ).matches((name2, regexp2, _, transform3, primitive2) => {
315
- const primitivePrototype = primitive2;
316
- const wrapper = (val) => {
317
- const asPrimitive = fromPrimitive(val, primitivePrototype);
318
- return transform3(asPrimitive);
319
- };
320
- const param = new ParameterType(name2, regexp2, primitive2, wrapper);
321
- registry.defineParameterType(param);
322
- }),
323
- def`encapsulatePrimitive`(
324
- string(),
325
- regexp,
326
- func("type"),
327
- nil("transform"),
328
- func("primitive")
329
- ).matches((name2, regexp2, type2, _, primitive2) => {
330
- const primitivePrototype = primitive2;
331
- const typePrototype = type2;
332
- const wrapper = (val) => {
333
- const asPrimitive = fromPrimitive(val, primitivePrototype);
334
- return new typePrototype(asPrimitive);
335
- };
336
- const param = new ParameterType(name2, regexp2, type2, wrapper);
337
- registry.defineParameterType(param);
338
- }),
339
- def`makeType`(string(), regexp, func("type"), nil(), nil()).matches(
340
- (name2, pattern, type2) => {
341
- const prototype = type2;
342
- const transform3 = (val) => new prototype(val);
343
- const param = new ParameterType(name2, pattern, null, transform3);
344
- registry.defineParameterType(param);
345
- }
346
- ),
347
- def`makePrimitive`(
348
- string(),
349
- regexp,
350
- nil(),
351
- nil(),
352
- func("primitive")
353
- ).matches((name2, pattern, _, __, primitive2) => {
354
- const prototype = primitive2;
355
- const transform3 = (val) => fromPrimitive(val, prototype);
356
- const param = new ParameterType(name2, pattern, null, transform3);
357
- registry.defineParameterType(param);
358
- }),
359
- def`transformValue`(
360
- string(),
361
- regexp,
362
- nil(),
363
- func("transform"),
364
- nil()
365
- ).matches((name2, pattern, _, transform3, __) => {
366
- const param = new ParameterType(name2, pattern, null, transform3);
367
- registry.defineParameterType(param);
368
- }),
369
- def`default`(string(), instance(RegExp), nil(), nil(), nil()).matches(
370
- (name2, pattern, _, __, ___) => {
371
- const transform3 = (val) => val;
372
- const param = new ParameterType(name2, pattern, null, transform3);
373
- registry.defineParameterType(param);
374
- }
375
- )
376
- ).use([name, regexpPattern, type, transform2, primitive]);
377
- }
378
- function fromPrimitive(value, primitive) {
379
- if (primitive === String) {
380
- return value;
381
- }
382
- if (primitive === Number) {
383
- return parseFloat(value);
384
- }
385
- if (primitive === Boolean) {
386
- return value === "true";
387
- }
388
- return primitive(value);
389
- }
390
-
391
- // src/default.parameters.ts
392
- import { def as def2, fallback, overloads as overloads2, string as string2 } from "@autometa/overloaded";
393
- import { Dates } from "@autometa/datetime";
394
- import { AssertIs } from "@autometa/asserters";
395
- import { DateTime } from "luxon";
396
- var strNum = /['"]-?\d+['"]/;
397
- var isodateRegexp = /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/;
398
- var shortDateRegex = /(\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)/;
399
- var boolTypesActive = ["active", "inactive"];
400
- var boolTypesEnabled = ["enabled", "disabled"];
401
- var boolTypes = ["true", "false"];
402
- var OrdinalParam = {
403
- name: "ordinal",
404
- regex: /(\d+)(?:st|nd|rd|th)/,
405
- transform: (value) => parseInt(value, 10)
406
- };
407
- var NumberParam = {
408
- name: "number",
409
- regex: /\d+/,
410
- primitive: Number
411
- };
412
- var AnyParam = {
413
- name: "any",
414
- regex: /.*/
415
- };
416
- var UnknownParam = {
417
- name: "unknown",
418
- regex: /.*/
419
- };
420
- var TextParam = {
421
- name: "text",
422
- regex: /"([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'/,
423
- primitive: String,
424
- transform: (value) => {
425
- const asStr = value;
426
- return asStr.replace(/^"(.*)"$/, "$1").replace(/^'(.*)'$/, "$1");
427
- }
428
- };
429
- var BooleanParam = {
430
- name: "boolean",
431
- regex: /true|false/,
432
- primitive: Boolean
433
- };
434
- var BoolParam = {
435
- name: "bool",
436
- regex: /true|false/,
437
- primitive: Boolean
438
- };
439
- var DateParam = {
440
- name: "date",
441
- regex: [isodateRegexp, shortDateRegex],
442
- type: Date
443
- };
444
- var PrimitiveParam = {
445
- name: "primitive",
446
- regex: [
447
- /true|false/,
448
- /enabled|disabled/,
449
- /active|inactive/,
450
- /null/,
451
- /empty/,
452
- /undefined|missing/,
453
- /NaN/,
454
- /Infinity/,
455
- /-Infinity/,
456
- isodateRegexp,
457
- shortDateRegex,
458
- /-?(\d*\.?\d+|\d{1,3}(,\d{3})*(\.\d+)?)/,
459
- // Comma delimited number, e.g. "1", "1,000", "1,000.00"
460
- /-?(\d*,?\d+|\d{1,3}(.\d{3})*(,\d+))/,
461
- // Period delimited number, e.g. "1", "1.000,00"
462
- /"([^"]*)"/,
463
- /'([^']*)'/
464
- ],
465
- transform: (value) => {
466
- return overloads2(
467
- def2(string2({ equals: "null" })).matches((_) => null),
468
- def2(string2({ in: ["undefined", "missing"] })).matches((_) => void 0),
469
- def2(string2({ in: boolTypes })).matches((val) => val === "true"),
470
- def2(string2({ equals: "NaN" })).matches((_) => NaN),
471
- def2(string2({ equals: "Infinity" })).matches((_) => Infinity),
472
- def2(string2({ equals: "-Infinity" })).matches((_) => -Infinity),
473
- def2(string2({ pattern: isodateRegexp })).matches(parseIso),
474
- def2(string2({ pattern: shortDateRegex })).matches(parseDate),
475
- def2(string2({ pattern: strNum })).matches(trimQuotes),
476
- def2(string2({ pattern: /^-?(\d{1,3}(,\d{3})*(\.\d+)?)/ })).matches(
477
- (val) => {
478
- const asStr = val.replace(/,/g, "");
479
- return parseFloat(asStr);
480
- }
481
- ),
482
- // def(string({ pattern: /-?(\d{1,3}(\.\d{3})*(,\d+)?)/ })).matches(
483
- // (val) =>{
484
- // const asStr = val.replace(/\./g, "").replace(/,/g, ".");
485
- // return Number(asStr);
486
- // }
487
- // ),
488
- def2(string2({ in: boolTypesEnabled })).matches(boolEnabled),
489
- def2(string2({ in: boolTypesActive })).matches(boolActive),
490
- fallback((val) => {
491
- AssertIs(val, "string");
492
- const fromPhrase = Dates.fromPhrase(val);
493
- if (fromPhrase && !isNaN(fromPhrase.getTime())) {
494
- return fromPhrase;
495
- }
496
- return val.replace(/^"(.*)"$/, "$1").replace(/^'(.*)'$/, "$1");
497
- })
498
- ).use([value]);
499
- }
500
- };
501
- function boolActive(val) {
502
- return val === "active";
503
- }
504
- function boolEnabled(val) {
505
- return val === "enabled";
506
- }
507
- function parseDate(val) {
508
- return new Date(Date.parse(val));
509
- }
510
- function trimQuotes(val) {
511
- return val.slice(1, -1);
512
- }
513
- function parseIso(val) {
514
- return DateTime.fromISO(val).toJSDate();
515
- }
516
- export {
517
- AnyParam,
518
- BoolParam,
519
- BooleanParam,
520
- DateParam,
521
- DifferentStepTypeMatch,
522
- FuzzySearchReport,
523
- NumberParam,
524
- OrdinalParam,
525
- PrimitiveParam,
526
- SameStepTypeMatch,
527
- TextParam,
528
- UnknownParam,
529
- buildFuzzySearchReport,
530
- checkMatch,
531
- defineParameterType,
532
- getDiff,
533
- getDiffs,
534
- isExpressionCandidate,
535
- limitDiffs,
536
- refineDiff
537
- };
538
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
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":";;;;;;;;;;;;;;;AAAA,SAAS,0BAAkC;AAC3C,SAAS,gBAAgB;AAUlB,SAAS,WAAW,MAAc,IAAyB;AAChE,SAAO,GAAG,QAAQ,IAAI;AACxB;AACO,SAAS,WACd,cACA,mBACA,KACkB;AAClB,QAAM,gBAAgB,aAAa,IAAI,CAAC,OAAO,GAAG,QAAQ;AAC1D,QAAM,sBAAsB,KAAK,IAAI,GAAG,aAAa;AACrD,QAAM,oBAAoB,kBAAkB,IAAI,CAAC,OAAO,GAAG,QAAQ;AACnE,QAAM,2BAA2B,KAAK,IAAI,GAAG,iBAAiB;AAI9D,MAAI,sBAAsB,0BAA0B;AAClD,UAAM,SAAS,aAAa;AAAA,MAC1B,CAAC,OAAO,GAAG,YAAY;AAAA,IACzB;AACA,QAAI,OAAO,UAAU,KAAK;AACxB,aAAO,EAAE,MAAM,OAAO,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,EAAE;AAAA,IACjD;AACA,UAAM,OAAO,MAAM,OAAO;AAC1B,UAAM,YAAY,aAAa,MAAM,GAAG,IAAI;AAC5C,UAAM,iBAAiB,kBAAkB,MAAM,GAAG,MAAM,IAAI;AAC5D,WAAO,EAAE,MAAM,WAAW,OAAO,eAAe;AAAA,EAClD;AACA,QAAM,WAAW,KAAK,IAAI,KAAK,aAAa,MAAM;AAClD,SAAO,EAAE,MAAM,aAAa,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,EAAE;AAC5D;AAEA,SAAS,qCAAqC,aAA6B;AACzE,QAAM,QAAQ;AACd,MAAI,iBAAiB;AAErB,MAAI;AACJ,SAAQ,QAAQ,MAAM,KAAK,WAAW,GAAI;AACxC,UAAM,kBAAkB,MAAM,CAAC;AAC/B,UAAM,oBAAoB,MAAM,CAAC,EAAE,QAAQ,QAAQ,EAAE;AACrD,qBAAiB,eAAe;AAAA,MAC9B;AAAA,MACA,GAAG,MAAM,CAAC,CAAC,GAAG,iBAAiB,GAAG,MAAM,CAAC,CAAC;AAAA,IAC5C;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,SAAS,MAAc,YAAoB,MAAoB;AAC7E,QAAM,SAAS,KACZ,IAAI,CAAC,OAAO;AACX,QAAI,WAAW,MAAM,EAAE,GAAG;AACxB,aAAO,EAAE,QAAQ,MAAM,MAAM,IAAI,SAAS,MAAM,UAAU,EAAE;AAAA,IAC9D;AACA,UAAM,YAAY,qCAAqC,IAAI;AAC3D,UAAM,OAAO,QAAQ,WAAW,EAAE;AAClC,UAAM,UAAU,WAAW,IAAI;AAC/B,UAAM,OAAO,SAAS,WAAW,OAAO;AACxC,WAAO,EAAE,QAAQ,SAAS,MAAM,IAAI,SAAS,MAAM,UAAU,KAAK;AAAA,EACpE,CAAC,EACA,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ;AACzC,QAAM,MAAM,KAAK,IAAI,YAAY,OAAO,MAAM;AAC9C,SAAO,OAAO,MAAM,GAAG,GAAG;AAC5B;AAEO,SAAS,QAAQ,MAAc,IAAgB;AACpD,SAAO,mBAAmB,MAAM,GAAG,WAAW,MAAM;AACtD;AAEO,SAAS,WAAW,MAAgB;AACzC,QAAM,UAAoB,CAAC;AAC3B,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS;AAChD,UAAM,gBAAgB,KAAK,KAAK;AAChC,UAAM,cAAc,KAAK,QAAQ,CAAC;AAClC,QAAI,sBAAsB,eAAe,WAAW,GAAG;AACrD,cAAQ,KAAK,cAAc,KAAK;AAChC,YAAM,QAAQ,4BAA4B,YAAY,KAAK;AAC3D,UAAI,OAAO;AACT,gBAAQ,KAAK,KAAK;AAAA,MACpB;AACA;AACA;AAAA,IACF;AACA,QAAI,cAAc,YAAY,MAAM;AAClC;AAAA,IACF;AACA,QAAI,cAAc,OAAO;AACvB,cAAQ,KAAK,cAAc,KAAK;AAEhC;AAAA,IACF;AAAA,EACF;AACA,SAAO,QAAQ,KAAK,EAAE;AACxB;AAEA,SAAS,4BAA4B,aAAoC;AAEvE,QAAM,QAAQ;AAGd,QAAM,QAAQ,MAAM,KAAK,WAAW;AAGpC,MAAI,SAAS,MAAM,CAAC,GAAG;AACrB,WAAO,MAAM,CAAC;AAAA,EAChB,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEO,SAAS,sBAAsB,SAAiB,SAAiB;AACtE,MAAI,WAAW,QAAQ,WAAW,WAAW,QAAQ,OAAO;AAC1D,UAAM,YAAY,QAAQ;AAC1B,WAAO,OAAO,KAAK,SAAS;AAAA,EAC9B;AACA,SAAO;AACT;;;AC9HA,OAAO,WAAW;AACX,IAAM,oBAAN,MAAwB;AAAA,EAK7B,YAAY,MAAgB;AAC1B,SAAK,UAAU,KAAK,KAAK;AACzB,SAAK,OAAO,KAAK;AACjB,SAAK,SAAS,KAAK,KAAK,WAAW;AACnC,SAAK,WAAW,KAAK;AAAA,EACvB;AAAA,EACA,WAAW;AACT,UAAM,UAAU,MAAM,MAAM,KAAK,OAAO;AACxC,UAAM,OAAO,MAAM,MAAM,KAAK,MAAM;AACpC,UAAMA,YAAW,MAAM,KAAK,IAAI,KAAK,QAAQ,GAAG;AAChD,WAAO,GAAGA,SAAQ,IAAI,OAAO,IAAI,IAAI;AAAA,EACvC;AACF;AACO,IAAM,yBAAN,MAA6B;AAAA,EAKlC,YAAY,MAAgB;AAC1B,SAAK,UAAU,KAAK,KAAK;AACzB,SAAK,OAAO,KAAK;AACjB,SAAK,SAAS,KAAK,KAAK,WAAW;AACnC,SAAK,WAAW,KAAK;AAAA,EACvB;AAAA,EACA,WAAW;AACT,UAAM,eAAe,MAAM;AAC3B,UAAM,UAAU,aAAa,KAAK,OAAO;AACzC,UAAM,OAAO,MAAM,MAAM,KAAK,MAAM;AACpC,UAAMA,YAAW,MAAM,KAAK,IAAI,KAAK,QAAQ,GAAG;AAChD,WAAO,GAAGA,SAAQ,IAAI,OAAO,IAAI,IAAI;AAAA,EACvC;AACF;AAtCA;AAuCO,IAAM,oBAAN,MAAwB;AAAA,EAI7B,YAAqB,QAAgB,GAAG;AAAnB;AAmBrB,uBAAI;AAKJ,uBAAI;AA1BJ,mBAA0D,CAAC;AAC3D,oBAAgC,CAAC;AAAA,EACQ;AAAA,EACzC,IAAI,SAAS;AACX,UAAM,cAAsB,KAAK,SAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,EACrB,OAAe,CAAC,GAAW,MAAc,IAAI,GAAG,CAAC;AACpD,WAAO,KAAK,QAAQ,SAAS;AAAA,EAC/B;AAAA,EACA,WAAW,aAAqB;AAC9B,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EACA,SAAS,OAAmD;AAC1D,SAAK,QAAQ,KAAK,KAAK;AACvB,WAAO;AAAA,EACT;AAAA,EACA,SAAS,OAA0B;AACjC,SAAK,SAAS,KAAK,KAAK;AACxB,WAAO;AAAA,EACT;AAAA,EAYA,WAAW;AACT,QAAI,KAAK,WAAW,GAAG;AACrB,aAAO;AAAA,IACT;AACA,UAAM,OAAO,mBAAK,qCACf,OAAO,CAAC,OAAO,GAAG,WAAW,EAAE,EAC/B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,EACzB,KAAK,IAAI;AACZ,UAAM,cACJ,KAAK,SAAS,IAAI,MAAM,OAAO,gCAAgC,IAAI;AACrE,UAAM,YAAY,mBAAK,+CACpB,OAAO,CAAC,OAAO,GAAG,WAAW,EAAE,EAC/B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,EACzB,KAAK,IAAI;AACZ,UAAM,mBACJ,UAAU,SAAS,IACf,MAAM,OAAO,iCAAiC,IAC9C;AAEN,UAAM,eAAyB,CAAC;AAChC,qBAAiB,cAAc,WAAW;AAC1C,qBAAiB,cAAc,IAAI;AACnC,qBAAiB,cAAc,gBAAgB;AAC/C,qBAAiB,cAAc,SAAS;AACxC,UAAM,WAAgC,CAAC;AACvC,SAAK,SAAS,QAAQ,CAAC,UAAU;AAC/B,kBAAY,UAAU,KAAK;AAAA,IAC7B,CAAC;AACD,UAAM,iBAAyB,SAC5B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,EACzB,KAAK,IAAI;AACZ,UAAM,UAAU,aAAa,KAAK;AAAA,CAAI,EAAE,KAAK;AAC7C,UAAM,UAAU,KAAK,eAAe,MAAM,MAAM,KAAK,WAAW;AAChE,WAAO,GAAG,WAAW,EAAE;AAAA,EACzB,QAAQ,QAAQ,gBAAgB;AAAA,EAAK,GAAG,EAAE,CAAC;AAAA,EAC3C,eAAe,QAAQ,gBAAgB;AAAA,EAAK,GAAG,EAAE,CAAC;AAAA,EAClD;AACF;AAhDM;AAAA,qBAAe,WAAG;AACpB,SAAO,KAAK,QAAQ;AAAA,IAClB,CAAC,OAAO,cAAc;AAAA,EACxB;AACF;AACI;AAAA,0BAAoB,WAAG;AACzB,SAAO,KAAK,QAAQ;AAAA,IAClB,CAAC,OAAO,cAAc;AAAA,EACxB;AACF;AAwCF,SAAS,iBAAiB,KAAe,SAAiB,QAAiB;AACzE,MAAI,WAAW,QAAQ,SAAS,GAAG;AACjC,UAAM,MAAM,SAAS,GAAG,UAAU,EAAE,GAAG,WAAW,EAAE,KAAK,WAAW;AACpE,QAAI,KAAK,GAAG;AAAA,EACd;AACF;AACA,SAAS,YAAY,KAA0B,SAA4B;AACzE,MAAI,SAAS;AACX,QAAI,KAAK,OAAO;AAAA,EAClB;AACF;AACA,IAAM,QAAQ;AACd,IAAM,MAAM,MAAM,OAAO,CAAC;AAEnB,SAAS,uBACd,EAAE,MAAM,MAAM,GACd,OACA;AACA,QAAM,SAAS,IAAI,kBAAkB,KAAK;AAC1C,OAAK,QAAQ,CAAC,SAAS;AACrB,WAAO,SAAS,IAAI,kBAAkB,IAAI,CAAC;AAAA,EAC7C,CAAC;AACD,QAAM,QAAQ,CAAC,SAAS;AACtB,WAAO,SAAS,IAAI,uBAAuB,IAAI,CAAC;AAAA,EAClD,CAAC;AACD,SAAO;AACT;;;ACzIA;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAOP,cAAc,UAAU,YAAY,SAAS,UAE3C,OACA,KACA;AACA,SACE,KACA,YAAY,MAAM,MAAM,CAAC,GAAI,SAAS,CAAC,GAAI,GAAG,CAAC;AACnD;AAGA,SAAS,UAAU,WAAW,SAAS,SAA4B,KAAU;AAC3E,MAAI,KAAK,MAAM,SAAS,SAAS,GAAG;AAClC,UAAM,QAAQ,KAAK,MAAM,SACtB,OAAO,CAAC,OAAO,GAAG,UAAU,MAAS,EACrC,IAAI,CAAC,UAAU,MAAM,KAAK;AAE7B,QAAI,MAAM,SAAS,GAAG;AACpB,aAAO,KAAK,cAAc,UAAU,OAAO,GAAG;AAAA,IAChD;AAAA,EACF;AACA,QAAM,cAAc,KAAK,QACrB,KAAK,MAAM,QACT,CAAC,KAAK,MAAM,KAAK,IACjB,KAAK,MAAM,SACb;AACJ,SAAO,KAAK,cAAc,UAAU,aAAa,GAAG;AACtD;AAyBA,IAAM,SAAS,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,MAAM,CAAC,CAAC,CAAC;AAErD,SAAS,oBACd,aACG,QACH;AACA,SAAO,QAAQ,CAAC,UAAU;AACxB,UAAM,EAAE,MAAM,OAAO,eAAe,WAAAC,YAAW,MAAM,UAAU,IAC7D;AACF,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,iBAAiB;AAAA,MACjBA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AACA,SAAS,sBACP,UACA,MACA,eACAA,YACA,MACA,WAOM;AACN,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,MACP;AAAA,MACA,KAAK,MAAM;AAAA,MACX,KAAK,WAAW;AAAA,MAChB,KAAK,WAAW;AAAA,IAClB,EAAE,QAAQ,CAACC,OAAMC,SAAQC,OAAMH,YAAWI,eAAc;AACtD,YAAM,qBAAqBA;AAC3B,YAAM,gBAAgBD;AACtB,YAAM,UAAU,CAAC,QAAiB;AAChC,cAAM,cAAc,mBAAmB,GAAG;AAC1C,cAAM,SAAS,IAAI,cAAc,WAAW;AAC5C,eAAOH,WAAU,MAAM;AAAA,MACzB;AACA,YAAM,QAAQ,IAAI,cAAcC,OAAMC,SAAQC,OAAM,OAAO;AAC3D,eAAS,oBAAoB,KAAK;AAAA,IACpC,CAAC;AAAA,IACD;AAAA,MACE,OAAO;AAAA,MACP;AAAA,MACA,KAAK,MAAM;AAAA,MACX,KAAK,WAAW;AAAA,MAChB,IAAI,WAAW;AAAA,IACjB,EAAE,QAAQ,CAACF,OAAMC,SAAQC,OAAMH,eAAc;AAC3C,YAAM,gBAAgBG;AACtB,YAAM,UAAU,CAAC,QAAiB;AAChC,cAAM,SAAS,IAAI,cAAc,GAAG;AACpC,eAAOH,WAAU,MAAM;AAAA,MACzB;AACA,YAAM,QAAQ,IAAI,cAAcC,OAAMC,SAAQC,OAAM,OAAO;AAC3D,eAAS,oBAAoB,KAAK;AAAA,IACpC,CAAC;AAAA,IACD;AAAA,MACE,OAAO;AAAA,MACP;AAAA,MACA,IAAI,MAAM;AAAA,MACV,KAAK,WAAW;AAAA,MAChB,KAAK,WAAW;AAAA,IAClB,EAAE,QAAQ,CAACF,OAAMC,SAAQ,GAAGF,YAAWI,eAAc;AACnD,YAAM,qBAAqBA;AAC3B,YAAM,UAAU,CAAC,QAAiB;AAChC,cAAM,cAAc,cAAc,KAAK,kBAAkB;AACzD,eAAOJ,WAAU,WAAW;AAAA,MAC9B;AACA,YAAM,QAAQ,IAAI,cAAcC,OAAMC,SAAQE,YAAW,OAAO;AAChE,eAAS,oBAAoB,KAAK;AAAA,IACpC,CAAC;AAAA,IACD;AAAA,MACE,OAAO;AAAA,MACP;AAAA,MACA,KAAK,MAAM;AAAA,MACX,IAAI,WAAW;AAAA,MACf,KAAK,WAAW;AAAA,IAClB,EAAE,QAAQ,CAACH,OAAMC,SAAQC,OAAM,GAAGC,eAAc;AAC9C,YAAM,qBAAqBA;AAC3B,YAAM,gBAAgBD;AACtB,YAAM,UAAU,CAAC,QAAiB;AAChC,cAAM,cAAc,cAAc,KAAK,kBAAkB;AACzD,eAAO,IAAI,cAAc,WAAW;AAAA,MACtC;AACA,YAAM,QAAQ,IAAI,cAAcF,OAAMC,SAAQC,OAAM,OAAO;AAC3D,eAAS,oBAAoB,KAAK;AAAA,IACpC,CAAC;AAAA,IACD,cAAc,OAAO,GAAG,QAAQ,KAAK,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE;AAAA,MAC1D,CAACF,OAAM,SAASE,UAAS;AACvB,cAAM,YAAYA;AAClB,cAAMH,aAAY,CAAC,QAAiB,IAAI,UAAU,GAAG;AACrD,cAAM,QAAQ,IAAI,cAAcC,OAAM,SAAS,MAAMD,UAAS;AAC9D,iBAAS,oBAAoB,KAAK;AAAA,MACpC;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,KAAK,WAAW;AAAA,IAClB,EAAE,QAAQ,CAACC,OAAM,SAAS,GAAG,IAAIG,eAAc;AAC7C,YAAM,YAAYA;AAClB,YAAMJ,aAAY,CAAC,QAAiB,cAAc,KAAK,SAAS;AAChE,YAAM,QAAQ,IAAI,cAAcC,OAAM,SAAS,MAAMD,UAAS;AAC9D,eAAS,oBAAoB,KAAK;AAAA,IACpC,CAAC;AAAA,IACD;AAAA,MACE,OAAO;AAAA,MACP;AAAA,MACA,IAAI;AAAA,MACJ,KAAK,WAAW;AAAA,MAChB,IAAI;AAAA,IACN,EAAE,QAAQ,CAACC,OAAM,SAAS,GAAGD,YAAW,OAAO;AAC7C,YAAM,QAAQ,IAAI,cAAcC,OAAM,SAAS,MAAMD,UAAS;AAC9D,eAAS,oBAAoB,KAAK;AAAA,IACpC,CAAC;AAAA,IACD,aAAa,OAAO,GAAG,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE;AAAA,MAC5D,CAACC,OAAM,SAAS,GAAG,IAAI,QAAQ;AAC7B,cAAMD,aAAY,CAAC,QAAiB;AACpC,cAAM,QAAQ,IAAI,cAAcC,OAAM,SAAS,MAAMD,UAAS;AAC9D,iBAAS,oBAAoB,KAAK;AAAA,MACpC;AAAA,IACF;AAAA,EACF,EAAE,IAAI,CAAC,MAAM,eAAe,MAAMA,YAAW,SAAS,CAAC;AACzD;AAEA,SAAS,cAAc,OAAgB,WAAiC;AACtE,MAAI,cAAc,QAAQ;AACxB,WAAO;AAAA,EACT;AACA,MAAI,cAAc,QAAQ;AACxB,WAAO,WAAW,KAAe;AAAA,EACnC;AACA,MAAI,cAAc,SAAS;AACzB,WAAO,UAAU;AAAA,EACnB;AACA,SAAO,UAAU,KAAK;AACxB;;;AC7NA,SAAS,OAAAK,MAAK,UAAU,aAAAC,YAAW,UAAAC,eAAc;AAEjD,SAAS,aAAa;AACtB,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AAEzB,IAAM,SAAS;AAEf,IAAM,gBACJ;AACF,IAAM,iBACJ;AACF,IAAM,kBAAkB,CAAC,UAAU,UAAU;AAC7C,IAAM,mBAAmB,CAAC,WAAW,UAAU;AAC/C,IAAM,YAAY,CAAC,QAAQ,OAAO;AAE3B,IAAM,eAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW,CAAC,UAAkB,SAAS,OAAO,EAAE;AAClD;AAEO,IAAM,cAAuC;AAAA,EAClD,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW;AACb;AAEO,IAAM,WAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,OAAO;AACT;AACO,IAAM,eAAwC;AAAA,EACnD,MAAM;AAAA,EACN,OAAO;AACT;AACO,IAAM,YAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW;AAAA,EACX,WAAW,CAAC,UAAkB;AAC5B,UAAM,QAAQ;AACd,WAAO,MAAM,QAAQ,YAAY,IAAI,EAAE,QAAQ,YAAY,IAAI;AAAA,EACjE;AACF;AAEO,IAAM,eAAe;AAAA,EAC1B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW;AACb;AACO,IAAM,YAAY;AAAA,EACvB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW;AACb;AACO,IAAM,YAAqC;AAAA,EAChD,MAAM;AAAA,EACN,OAAO,CAAC,eAAe,cAAc;AAAA,EACrC,MAAM;AACR;AAEO,IAAM,iBAAsC;AAAA,EACjD,MAAM;AAAA,EACN,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,WAAW,CAAC,UAAmB;AAC7B,WAAOD;AAAA,MACLD,KAAIE,QAAO,EAAE,QAAQ,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,IAAI;AAAA,MACnDF,KAAIE,QAAO,EAAE,IAAI,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,MAAS;AAAA,MACtEF,KAAIE,QAAO,EAAE,IAAI,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,QAAQ,MAAM;AAAA,MAC9DF,KAAIE,QAAO,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG;AAAA,MACjDF,KAAIE,QAAO,EAAE,QAAQ,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,QAAQ;AAAA,MAC3DF,KAAIE,QAAO,EAAE,QAAQ,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,SAAS;AAAA,MAC7DF,KAAIE,QAAO,EAAE,SAAS,cAAc,CAAC,CAAC,EAAE,QAAQ,QAAQ;AAAA,MACxDF,KAAIE,QAAO,EAAE,SAAS,eAAe,CAAC,CAAC,EAAE,QAAQ,SAAS;AAAA,MAC1DF,KAAIE,QAAO,EAAE,SAAS,OAAO,CAAC,CAAC,EAAE,QAAQ,UAAU;AAAA,MACnDF,KAAIE,QAAO,EAAE,SAAS,gCAAgC,CAAC,CAAC,EAAE;AAAA,QACxD,CAAC,QAAQ;AACP,gBAAM,QAAQ,IAAI,QAAQ,MAAM,EAAE;AAClC,iBAAO,WAAW,KAAK;AAAA,QACzB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOAF,KAAIE,QAAO,EAAE,IAAI,iBAAiB,CAAC,CAAC,EAAE,QAAQ,WAAW;AAAA,MACzDF,KAAIE,QAAO,EAAE,IAAI,gBAAgB,CAAC,CAAC,EAAE,QAAQ,UAAU;AAAA,MACvD,SAAS,CAAC,QAAQ;AAChB,iBAAS,KAAK,QAAQ;AACtB,cAAM,aAAa,MAAM,WAAW,GAAG;AACvC,YAAI,cAAc,CAAC,MAAM,WAAW,QAAQ,CAAC,GAAG;AAC9C,iBAAO;AAAA,QACT;AACA,eAAO,IAAI,QAAQ,YAAY,IAAI,EAAE,QAAQ,YAAY,IAAI;AAAA,MAC/D,CAAC;AAAA,IACH,EAAE,IAAI,CAAC,KAAK,CAAC;AAAA,EACf;AACF;AAEA,SAAS,WAAW,KAAsB;AACxC,SAAO,QAAQ;AACjB;AAEA,SAAS,YAAY,KAAsB;AACzC,SAAO,QAAQ;AACjB;AAEA,SAAS,UAAU,KAAmB;AACpC,SAAO,IAAI,KAAK,KAAK,MAAM,GAAG,CAAC;AACjC;AAEA,SAAS,WAAW,KAAqB;AACvC,SAAO,IAAI,MAAM,GAAG,EAAE;AACxB;AAEA,SAAS,SAAS,KAAmB;AACnC,SAAO,SAAS,QAAQ,GAAG,EAAE,SAAS;AACxC;","names":["distance","transform","name","regexp","type","primitive","def","overloads","string"]}