@step-forge/step-forge 0.0.6 → 0.0.7-beta.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/dist/step-forge.js +212 -0
- package/package.json +9 -8
- package/.eslintignore +0 -6
- package/.eslintrc +0 -18
- package/.prettierignore +0 -6
- package/.prettierrc +0 -15
- package/CHANGELOG.md +0 -28
- package/cucumber.mjs +0 -38
- package/docs/assets/state_deps.gif +0 -0
- package/dts-bundle-generator.config.ts +0 -11
- package/features/basic.feature +0 -21
- package/features/exported.feature +0 -6
- package/features/steps/commonSteps.ts +0 -93
- package/features/steps/exportedSteps.ts +0 -42
- package/features/steps/world.ts +0 -29
- package/src/builderTypeUtils.js +0 -2
- package/src/builderTypeUtils.js.map +0 -1
- package/src/builderTypeUtils.ts +0 -27
- package/src/common.js +0 -73
- package/src/common.js.map +0 -1
- package/src/common.ts +0 -138
- package/src/given.js +0 -34
- package/src/given.js.map +0 -1
- package/src/given.ts +0 -102
- package/src/index.js +0 -6
- package/src/index.js.map +0 -1
- package/src/index.ts +0 -6
- package/src/then.js +0 -34
- package/src/then.js.map +0 -1
- package/src/then.ts +0 -128
- package/src/utils.js +0 -54
- package/src/utils.js.map +0 -1
- package/src/utils.ts +0 -74
- package/src/vite-env.d.ts.old +0 -1
- package/src/when.js +0 -34
- package/src/when.js.map +0 -1
- package/src/when.ts +0 -118
- package/src/world.js +0 -51
- package/src/world.js.map +0 -1
- package/src/world.ts +0 -90
- package/test/givenCompilationTests.ts +0 -130
- package/test/testUtils.ts +0 -30
- package/test/thenCompilationTests.ts +0 -207
- package/test/whenCompilationTests.ts +0 -157
- package/ts-node-esm-register.js +0 -8
- package/tsconfig.cucumber.json +0 -23
- package/tsconfig.json +0 -28
- package/vite.config.ts +0 -36
package/src/common.ts
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import {
|
|
3
|
-
Given as CucGiven,
|
|
4
|
-
Then as CucThen,
|
|
5
|
-
When as CucWhen,
|
|
6
|
-
} from "@cucumber/cucumber";
|
|
7
|
-
import _ from "lodash";
|
|
8
|
-
|
|
9
|
-
import { StepType } from "./builderTypeUtils";
|
|
10
|
-
import {
|
|
11
|
-
requireFromGiven,
|
|
12
|
-
requireFromThen,
|
|
13
|
-
requireFromWhen,
|
|
14
|
-
typeCoercer,
|
|
15
|
-
} from "./utils";
|
|
16
|
-
import { MergeableWorld } from "./world";
|
|
17
|
-
|
|
18
|
-
const cucFunctionMap = {
|
|
19
|
-
given: CucGiven,
|
|
20
|
-
when: CucWhen,
|
|
21
|
-
then: CucThen,
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export const addStep =
|
|
25
|
-
<
|
|
26
|
-
ResolvedStepType extends StepType,
|
|
27
|
-
Statement extends (...args: any[]) => string,
|
|
28
|
-
Dependencies extends {
|
|
29
|
-
given: any;
|
|
30
|
-
when: any;
|
|
31
|
-
then: any;
|
|
32
|
-
},
|
|
33
|
-
Variables,
|
|
34
|
-
GivenState,
|
|
35
|
-
WhenState,
|
|
36
|
-
ThenState,
|
|
37
|
-
RestrictedGivenState,
|
|
38
|
-
RestrictedWhenState,
|
|
39
|
-
RestrictedThenState,
|
|
40
|
-
>(
|
|
41
|
-
statement: Statement,
|
|
42
|
-
stepType: ResolvedStepType,
|
|
43
|
-
dependencies: Dependencies = {
|
|
44
|
-
given: {},
|
|
45
|
-
when: {},
|
|
46
|
-
then: {},
|
|
47
|
-
} as Dependencies
|
|
48
|
-
) =>
|
|
49
|
-
(
|
|
50
|
-
stepFunction: (input: {
|
|
51
|
-
variables: Variables;
|
|
52
|
-
given: RestrictedGivenState;
|
|
53
|
-
when: RestrictedWhenState;
|
|
54
|
-
then: RestrictedThenState;
|
|
55
|
-
}) => ResolvedStepType extends "given"
|
|
56
|
-
? Partial<GivenState>
|
|
57
|
-
: ResolvedStepType extends "when"
|
|
58
|
-
? Partial<WhenState>
|
|
59
|
-
: Partial<ThenState> | void
|
|
60
|
-
) => {
|
|
61
|
-
const statementFunction = statement;
|
|
62
|
-
const {
|
|
63
|
-
given: givenDependencies,
|
|
64
|
-
when: whenDependencies,
|
|
65
|
-
then: thenDependencies,
|
|
66
|
-
} = dependencies;
|
|
67
|
-
return {
|
|
68
|
-
statement,
|
|
69
|
-
dependencies,
|
|
70
|
-
stepType,
|
|
71
|
-
stepFunction,
|
|
72
|
-
register: () => {
|
|
73
|
-
const argCount = statementFunction.length;
|
|
74
|
-
const argMatchers = Array.from({ length: argCount }, () => "{string}");
|
|
75
|
-
const statement = statementFunction(...argMatchers);
|
|
76
|
-
const cucStepFunction = Object.defineProperty(
|
|
77
|
-
async function (
|
|
78
|
-
this: MergeableWorld<GivenState, WhenState, ThenState>,
|
|
79
|
-
...args: string[]
|
|
80
|
-
) {
|
|
81
|
-
const coercedArgs = args.map(typeCoercer);
|
|
82
|
-
const requiredGivenKeys = Object.entries(givenDependencies ?? {})
|
|
83
|
-
.filter(([, value]) => value === "required")
|
|
84
|
-
.map(([key]) => key);
|
|
85
|
-
const ensuredGivenValues = requireFromGiven(
|
|
86
|
-
requiredGivenKeys as (keyof GivenState)[],
|
|
87
|
-
this
|
|
88
|
-
);
|
|
89
|
-
const narrowedGiven = {
|
|
90
|
-
..._.pick(this.given, Object.keys(givenDependencies ?? {})),
|
|
91
|
-
...ensuredGivenValues,
|
|
92
|
-
};
|
|
93
|
-
const requiredWhenKeys = Object.entries(whenDependencies ?? {})
|
|
94
|
-
.filter(([, value]) => value === "required")
|
|
95
|
-
.map(([key]) => key);
|
|
96
|
-
const ensuredWhenValues = requireFromWhen(
|
|
97
|
-
requiredWhenKeys as (keyof WhenState)[],
|
|
98
|
-
this
|
|
99
|
-
);
|
|
100
|
-
const narrowedWhen = {
|
|
101
|
-
..._.pick(this.when, Object.keys(whenDependencies ?? {})),
|
|
102
|
-
...ensuredWhenValues,
|
|
103
|
-
};
|
|
104
|
-
const requiredThenKeys = Object.entries(thenDependencies ?? {})
|
|
105
|
-
.filter(([, value]) => value === "required")
|
|
106
|
-
.map(([key]) => key);
|
|
107
|
-
const ensuredThenValues = requireFromThen(
|
|
108
|
-
requiredThenKeys as (keyof ThenState)[],
|
|
109
|
-
this
|
|
110
|
-
);
|
|
111
|
-
const narrowedThen = {
|
|
112
|
-
..._.pick(this.then, Object.keys(thenDependencies ?? {})),
|
|
113
|
-
...ensuredThenValues,
|
|
114
|
-
};
|
|
115
|
-
const result = await stepFunction({
|
|
116
|
-
variables: coercedArgs as Variables,
|
|
117
|
-
given: narrowedGiven as RestrictedGivenState,
|
|
118
|
-
when: narrowedWhen as RestrictedWhenState,
|
|
119
|
-
then: narrowedThen as RestrictedThenState,
|
|
120
|
-
});
|
|
121
|
-
this[stepType].merge({
|
|
122
|
-
...(result as any),
|
|
123
|
-
});
|
|
124
|
-
},
|
|
125
|
-
"length",
|
|
126
|
-
{ value: argCount, configurable: true }
|
|
127
|
-
);
|
|
128
|
-
const cucStep = cucFunctionMap[stepType];
|
|
129
|
-
cucStep(statement, cucStepFunction);
|
|
130
|
-
return {
|
|
131
|
-
stepType,
|
|
132
|
-
dependencies,
|
|
133
|
-
statement: statementFunction,
|
|
134
|
-
stepFunction,
|
|
135
|
-
};
|
|
136
|
-
},
|
|
137
|
-
};
|
|
138
|
-
};
|
package/src/given.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { isString, } from "./builderTypeUtils";
|
|
3
|
-
import { addStep } from "./common";
|
|
4
|
-
const givenDependencies = (statement, stepType) => (dependencies) => {
|
|
5
|
-
const fullDependencies = {
|
|
6
|
-
...dependencies,
|
|
7
|
-
when: {},
|
|
8
|
-
then: {},
|
|
9
|
-
};
|
|
10
|
-
return {
|
|
11
|
-
step: addStep(statement, stepType, fullDependencies),
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
|
-
const givenStatement = (stepType) => (statement) => {
|
|
15
|
-
let normalizedStatement;
|
|
16
|
-
if (isString(statement)) {
|
|
17
|
-
normalizedStatement = (() => statement);
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
normalizedStatement = statement;
|
|
21
|
-
}
|
|
22
|
-
const dependencyFunc = givenDependencies(normalizedStatement, stepType);
|
|
23
|
-
const stepFunc = addStep(normalizedStatement, stepType);
|
|
24
|
-
return {
|
|
25
|
-
dependencies: dependencyFunc,
|
|
26
|
-
step: stepFunc,
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
export const givenBuilder = () => {
|
|
30
|
-
return {
|
|
31
|
-
statement: givenStatement("given"),
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
//# sourceMappingURL=given.js.map
|
package/src/given.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"given.js","sourceRoot":"","sources":["given.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAIL,QAAQ,GAGT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,iBAAiB,GACrB,CAME,SAAoB,EACpB,QAA0B,EAC1B,EAAE,CACJ,CAAmD,YAElD,EAAE,EAAE;IAYH,MAAM,gBAAgB,GAAG;QACvB,GAAG,YAAY;QACf,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,EAAE;KACT,CAAC;IACF,OAAO;QACL,IAAI,EAAE,OAAO,CAWX,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC;KACzC,CAAC;AACJ,CAAC,CAAC;AAEJ,MAAM,cAAc,GAClB,CAAgD,QAA0B,EAAE,EAAE,CAC9E,CACE,SAAoB,EACpB,EAAE;IACF,IAAI,mBAES,CAAC;IACd,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACxB,mBAAmB,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAQ,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,mBAAmB,GAAG,SAAgB,CAAC;IACzC,CAAC;IAID,MAAM,cAAc,GAAG,iBAAiB,CAKtC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,OAAO,CAWtB,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACjC,OAAO;QACL,YAAY,EAAE,cAAc;QAC5B,IAAI,EAAE,QAAQ;KACf,CAAC;AACJ,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,YAAY,GAAG,GAAe,EAAE;IAC3C,OAAO;QACL,SAAS,EAAE,cAAc,CAAsB,OAAO,CAAC;KACxD,CAAC;AACJ,CAAC,CAAC"}
|
package/src/given.ts
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
EmptyDependencies,
|
|
5
|
-
EmptyObject,
|
|
6
|
-
GetFunctionArgs,
|
|
7
|
-
isString,
|
|
8
|
-
RequiredOrOptional,
|
|
9
|
-
StepType,
|
|
10
|
-
} from "./builderTypeUtils";
|
|
11
|
-
import { addStep } from "./common";
|
|
12
|
-
|
|
13
|
-
const givenDependencies =
|
|
14
|
-
<
|
|
15
|
-
Statement extends (...args: any[]) => string,
|
|
16
|
-
ResolvedStepType extends StepType,
|
|
17
|
-
Variables,
|
|
18
|
-
GivenState,
|
|
19
|
-
>(
|
|
20
|
-
statement: Statement,
|
|
21
|
-
stepType: ResolvedStepType
|
|
22
|
-
) =>
|
|
23
|
-
<GivenDeps extends RequiredOrOptional<GivenState>>(dependencies: {
|
|
24
|
-
given: GivenDeps;
|
|
25
|
-
}) => {
|
|
26
|
-
type RestrictedGivenState = {
|
|
27
|
-
[K in keyof GivenState as K extends keyof GivenDeps
|
|
28
|
-
? K
|
|
29
|
-
: never]: GivenDeps[K] extends "optional"
|
|
30
|
-
? GivenState[K] | undefined
|
|
31
|
-
: GivenState[K];
|
|
32
|
-
};
|
|
33
|
-
type Dependencies = typeof dependencies & {
|
|
34
|
-
when: EmptyObject;
|
|
35
|
-
then: EmptyObject;
|
|
36
|
-
};
|
|
37
|
-
const fullDependencies = {
|
|
38
|
-
...dependencies,
|
|
39
|
-
when: {},
|
|
40
|
-
then: {},
|
|
41
|
-
};
|
|
42
|
-
return {
|
|
43
|
-
step: addStep<
|
|
44
|
-
ResolvedStepType,
|
|
45
|
-
Statement,
|
|
46
|
-
Dependencies,
|
|
47
|
-
Variables,
|
|
48
|
-
GivenState,
|
|
49
|
-
never, // when state
|
|
50
|
-
never, // then state
|
|
51
|
-
RestrictedGivenState,
|
|
52
|
-
never, // restricted when state
|
|
53
|
-
never // restricted then state
|
|
54
|
-
>(statement, stepType, fullDependencies),
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const givenStatement =
|
|
59
|
-
<ResolvedStepType extends StepType, GivenState>(stepType: ResolvedStepType) =>
|
|
60
|
-
<Statement extends ((...args: [...any]) => string) | string>(
|
|
61
|
-
statement: Statement
|
|
62
|
-
) => {
|
|
63
|
-
let normalizedStatement: Statement extends string
|
|
64
|
-
? () => string
|
|
65
|
-
: Statement;
|
|
66
|
-
if (isString(statement)) {
|
|
67
|
-
normalizedStatement = (() => statement) as any;
|
|
68
|
-
} else {
|
|
69
|
-
normalizedStatement = statement as any;
|
|
70
|
-
}
|
|
71
|
-
type NormalizedStatement = typeof normalizedStatement;
|
|
72
|
-
|
|
73
|
-
type Variables = Statement extends string ? [] : GetFunctionArgs<Statement>;
|
|
74
|
-
const dependencyFunc = givenDependencies<
|
|
75
|
-
NormalizedStatement,
|
|
76
|
-
ResolvedStepType,
|
|
77
|
-
Variables,
|
|
78
|
-
GivenState
|
|
79
|
-
>(normalizedStatement, stepType);
|
|
80
|
-
const stepFunc = addStep<
|
|
81
|
-
ResolvedStepType,
|
|
82
|
-
NormalizedStatement,
|
|
83
|
-
EmptyDependencies,
|
|
84
|
-
Variables,
|
|
85
|
-
GivenState,
|
|
86
|
-
never,
|
|
87
|
-
never,
|
|
88
|
-
never,
|
|
89
|
-
never,
|
|
90
|
-
never
|
|
91
|
-
>(normalizedStatement, stepType);
|
|
92
|
-
return {
|
|
93
|
-
dependencies: dependencyFunc,
|
|
94
|
-
step: stepFunc,
|
|
95
|
-
};
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
export const givenBuilder = <GivenState>() => {
|
|
99
|
-
return {
|
|
100
|
-
statement: givenStatement<"given", GivenState>("given"),
|
|
101
|
-
};
|
|
102
|
-
};
|
package/src/index.js
DELETED
package/src/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC"}
|
package/src/index.ts
DELETED
package/src/then.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { isString, } from "./builderTypeUtils";
|
|
3
|
-
import { addStep } from "./common";
|
|
4
|
-
const thenDependencies = (statement, stepType) => (dependencies) => {
|
|
5
|
-
const fullDependencies = {
|
|
6
|
-
given: dependencies.given ?? {},
|
|
7
|
-
when: dependencies.when ?? {},
|
|
8
|
-
then: dependencies.then ?? {},
|
|
9
|
-
};
|
|
10
|
-
return {
|
|
11
|
-
step: addStep(statement, stepType, fullDependencies),
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
|
-
const thenStatement = (stepType) => (statement) => {
|
|
15
|
-
let normalizedStatement;
|
|
16
|
-
if (isString(statement)) {
|
|
17
|
-
normalizedStatement = (() => statement);
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
normalizedStatement = statement;
|
|
21
|
-
}
|
|
22
|
-
const dependencyFunc = thenDependencies(normalizedStatement, stepType);
|
|
23
|
-
const stepFunc = addStep(normalizedStatement, stepType);
|
|
24
|
-
return {
|
|
25
|
-
dependencies: dependencyFunc,
|
|
26
|
-
step: stepFunc,
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
export const thenBuilder = () => {
|
|
30
|
-
return {
|
|
31
|
-
statement: thenStatement("then"),
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
//# sourceMappingURL=then.js.map
|
package/src/then.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"then.js","sourceRoot":"","sources":["then.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAGL,QAAQ,GAGT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,gBAAgB,GACpB,CAQE,SAAoB,EACpB,QAA0B,EAC1B,EAAE,CACJ,CAIE,YAID,EAAE,EAAE;IA2BH,MAAM,gBAAgB,GAAiB;QACrC,KAAK,EAAE,YAAY,CAAC,KAAK,IAAK,EAAgB;QAC9C,IAAI,EAAE,YAAY,CAAC,IAAI,IAAK,EAAe;QAC3C,IAAI,EAAE,YAAY,CAAC,IAAI,IAAK,EAAe;KAC5C,CAAC;IACF,OAAO;QACL,IAAI,EAAE,OAAO,CAWX,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC;KACzC,CAAC;AACJ,CAAC,CAAC;AAEJ,MAAM,aAAa,GACjB,CACE,QAA0B,EAC1B,EAAE,CACJ,CACE,SAAoB,EACpB,EAAE;IACF,IAAI,mBAES,CAAC;IACd,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACxB,mBAAmB,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAQ,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,mBAAmB,GAAG,SAAgB,CAAC;IACzC,CAAC;IAID,MAAM,cAAc,GAAG,gBAAgB,CAOrC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,OAAO,CAWtB,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACjC,OAAO;QACL,YAAY,EAAE,cAAc;QAC5B,IAAI,EAAE,QAAQ;KACf,CAAC;AACJ,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,WAAW,GAAG,GAAqC,EAAE;IAChE,OAAO;QACL,SAAS,EAAE,aAAa,CAA2C,MAAM,CAAC;KAC3E,CAAC;AACJ,CAAC,CAAC"}
|
package/src/then.ts
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
EmptyDependencies,
|
|
5
|
-
GetFunctionArgs,
|
|
6
|
-
isString,
|
|
7
|
-
RequiredOrOptional,
|
|
8
|
-
StepType,
|
|
9
|
-
} from "./builderTypeUtils";
|
|
10
|
-
import { addStep } from "./common";
|
|
11
|
-
|
|
12
|
-
const thenDependencies =
|
|
13
|
-
<
|
|
14
|
-
Statement extends (...args: any[]) => string,
|
|
15
|
-
ResolvedStepType extends StepType,
|
|
16
|
-
Variables,
|
|
17
|
-
GivenState,
|
|
18
|
-
WhenState,
|
|
19
|
-
ThenState,
|
|
20
|
-
>(
|
|
21
|
-
statement: Statement,
|
|
22
|
-
stepType: ResolvedStepType
|
|
23
|
-
) =>
|
|
24
|
-
<
|
|
25
|
-
GivenDeps extends RequiredOrOptional<GivenState>,
|
|
26
|
-
WhenDeps extends RequiredOrOptional<WhenState>,
|
|
27
|
-
ThenDeps extends RequiredOrOptional<ThenState>,
|
|
28
|
-
>(dependencies: {
|
|
29
|
-
given?: GivenDeps;
|
|
30
|
-
when?: WhenDeps;
|
|
31
|
-
then?: ThenDeps;
|
|
32
|
-
}) => {
|
|
33
|
-
type RestrictedGivenState = {
|
|
34
|
-
[K in keyof GivenState as K extends keyof GivenDeps
|
|
35
|
-
? K
|
|
36
|
-
: never]: GivenDeps[K] extends "optional"
|
|
37
|
-
? GivenState[K] | undefined
|
|
38
|
-
: GivenState[K];
|
|
39
|
-
};
|
|
40
|
-
type RestrictedWhenState = {
|
|
41
|
-
[K in keyof WhenState as K extends keyof WhenDeps
|
|
42
|
-
? K
|
|
43
|
-
: never]: WhenDeps[K] extends "optional"
|
|
44
|
-
? WhenState[K] | undefined
|
|
45
|
-
: WhenState[K];
|
|
46
|
-
};
|
|
47
|
-
type RestrictedThenState = {
|
|
48
|
-
[K in keyof ThenState as K extends keyof ThenDeps
|
|
49
|
-
? K
|
|
50
|
-
: never]: ThenDeps[K] extends "optional"
|
|
51
|
-
? ThenState[K] | undefined
|
|
52
|
-
: ThenState[K];
|
|
53
|
-
};
|
|
54
|
-
type Dependencies = {
|
|
55
|
-
given: GivenDeps;
|
|
56
|
-
when: WhenDeps;
|
|
57
|
-
then: ThenDeps;
|
|
58
|
-
};
|
|
59
|
-
const fullDependencies: Dependencies = {
|
|
60
|
-
given: dependencies.given ?? ({} as GivenDeps),
|
|
61
|
-
when: dependencies.when ?? ({} as WhenDeps),
|
|
62
|
-
then: dependencies.then ?? ({} as ThenDeps),
|
|
63
|
-
};
|
|
64
|
-
return {
|
|
65
|
-
step: addStep<
|
|
66
|
-
ResolvedStepType,
|
|
67
|
-
Statement,
|
|
68
|
-
Dependencies,
|
|
69
|
-
Variables,
|
|
70
|
-
GivenState,
|
|
71
|
-
WhenState,
|
|
72
|
-
ThenState,
|
|
73
|
-
RestrictedGivenState,
|
|
74
|
-
RestrictedWhenState,
|
|
75
|
-
RestrictedThenState
|
|
76
|
-
>(statement, stepType, fullDependencies),
|
|
77
|
-
};
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
const thenStatement =
|
|
81
|
-
<ResolvedStepType extends StepType, GivenState, WhenState, ThenState>(
|
|
82
|
-
stepType: ResolvedStepType
|
|
83
|
-
) =>
|
|
84
|
-
<Statement extends ((...args: [...any]) => string) | string>(
|
|
85
|
-
statement: Statement
|
|
86
|
-
) => {
|
|
87
|
-
let normalizedStatement: Statement extends string
|
|
88
|
-
? () => string
|
|
89
|
-
: Statement;
|
|
90
|
-
if (isString(statement)) {
|
|
91
|
-
normalizedStatement = (() => statement) as any;
|
|
92
|
-
} else {
|
|
93
|
-
normalizedStatement = statement as any;
|
|
94
|
-
}
|
|
95
|
-
type NormalizedStatement = typeof normalizedStatement;
|
|
96
|
-
|
|
97
|
-
type Variables = Statement extends string ? [] : GetFunctionArgs<Statement>;
|
|
98
|
-
const dependencyFunc = thenDependencies<
|
|
99
|
-
NormalizedStatement,
|
|
100
|
-
ResolvedStepType,
|
|
101
|
-
Variables,
|
|
102
|
-
GivenState,
|
|
103
|
-
WhenState,
|
|
104
|
-
ThenState
|
|
105
|
-
>(normalizedStatement, stepType);
|
|
106
|
-
const stepFunc = addStep<
|
|
107
|
-
ResolvedStepType,
|
|
108
|
-
NormalizedStatement,
|
|
109
|
-
EmptyDependencies,
|
|
110
|
-
Variables,
|
|
111
|
-
GivenState,
|
|
112
|
-
WhenState,
|
|
113
|
-
ThenState,
|
|
114
|
-
never,
|
|
115
|
-
never,
|
|
116
|
-
never
|
|
117
|
-
>(normalizedStatement, stepType);
|
|
118
|
-
return {
|
|
119
|
-
dependencies: dependencyFunc,
|
|
120
|
-
step: stepFunc,
|
|
121
|
-
};
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
export const thenBuilder = <GivenState, WhenState, ThenState>() => {
|
|
125
|
-
return {
|
|
126
|
-
statement: thenStatement<"then", GivenState, WhenState, ThenState>("then"),
|
|
127
|
-
};
|
|
128
|
-
};
|
package/src/utils.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
export const requireFromGiven = (keys, world) => {
|
|
2
|
-
keys.forEach(key => {
|
|
3
|
-
if (!world.given[key]) {
|
|
4
|
-
throw new Error(`Key ${String(key)} is required in given state`);
|
|
5
|
-
}
|
|
6
|
-
});
|
|
7
|
-
return keys.reduce((acc, key) => {
|
|
8
|
-
return {
|
|
9
|
-
...acc,
|
|
10
|
-
[key]: world.given[key],
|
|
11
|
-
};
|
|
12
|
-
}, {});
|
|
13
|
-
};
|
|
14
|
-
export const requireFromWhen = (keys, world) => {
|
|
15
|
-
keys.forEach(key => {
|
|
16
|
-
if (!world.when[key]) {
|
|
17
|
-
throw new Error(`Key ${String(key)} is required in when state`);
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
return keys.reduce((acc, key) => {
|
|
21
|
-
return {
|
|
22
|
-
...acc,
|
|
23
|
-
[key]: world.when[key],
|
|
24
|
-
};
|
|
25
|
-
}, {});
|
|
26
|
-
};
|
|
27
|
-
export const requireFromThen = (keys, world) => {
|
|
28
|
-
keys.forEach(key => {
|
|
29
|
-
if (!world.then[key]) {
|
|
30
|
-
throw new Error(`Key ${String(key)} is required in then state`);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
return keys.reduce((acc, key) => {
|
|
34
|
-
return {
|
|
35
|
-
...acc,
|
|
36
|
-
[key]: world.then[key],
|
|
37
|
-
};
|
|
38
|
-
}, {});
|
|
39
|
-
};
|
|
40
|
-
export const typeCoercer = (value) => {
|
|
41
|
-
// Try to parse as integer first
|
|
42
|
-
const numberValue = parseInt(value, 10);
|
|
43
|
-
if (!isNaN(numberValue)) {
|
|
44
|
-
return numberValue;
|
|
45
|
-
}
|
|
46
|
-
// Check for boolean values
|
|
47
|
-
if (value === "true")
|
|
48
|
-
return true;
|
|
49
|
-
if (value === "false")
|
|
50
|
-
return false;
|
|
51
|
-
// Return original string if no other type matches
|
|
52
|
-
return value;
|
|
53
|
-
};
|
|
54
|
-
//# sourceMappingURL=utils.js.map
|
package/src/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAiB,EACjB,KAA0C,EAC1C,EAAE;IACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACjB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QACnE,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACX,OAAO;YACL,GAAG,GAAG;YACN,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;SACxB,CAAC;IACJ,CAAC,EACD,EAAkC,CACnC,CAAC;AACJ,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,IAAiB,EACjB,KAA0C,EAC1C,EAAE;IACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACX,OAAO;YACL,GAAG,GAAG;YACN,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;SACvB,CAAC;IACJ,CAAC,EACD,EAAkC,CACnC,CAAC;AACJ,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,IAAiB,EACjB,KAA0C,EAC1C,EAAE;IACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACX,OAAO;YACL,GAAG,GAAG;YACN,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;SACvB,CAAC;IACJ,CAAC,EACD,EAAkC,CACnC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,EAAE;IAC3C,gCAAgC;IAChC,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACxB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,2BAA2B;IAC3B,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAEpC,kDAAkD;IAClD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
|
package/src/utils.ts
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { MergeableWorld } from "./world";
|
|
2
|
-
|
|
3
|
-
export const requireFromGiven = <G>(
|
|
4
|
-
keys: (keyof G)[],
|
|
5
|
-
world: MergeableWorld<G, unknown, unknown>
|
|
6
|
-
) => {
|
|
7
|
-
keys.forEach(key => {
|
|
8
|
-
if (!world.given[key]) {
|
|
9
|
-
throw new Error(`Key ${String(key)} is required in given state`);
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
return keys.reduce(
|
|
13
|
-
(acc, key) => {
|
|
14
|
-
return {
|
|
15
|
-
...acc,
|
|
16
|
-
[key]: world.given[key],
|
|
17
|
-
};
|
|
18
|
-
},
|
|
19
|
-
{} as { [key in keyof G]: G[key] }
|
|
20
|
-
);
|
|
21
|
-
};
|
|
22
|
-
export const requireFromWhen = <W>(
|
|
23
|
-
keys: (keyof W)[],
|
|
24
|
-
world: MergeableWorld<unknown, W, unknown>
|
|
25
|
-
) => {
|
|
26
|
-
keys.forEach(key => {
|
|
27
|
-
if (!world.when[key]) {
|
|
28
|
-
throw new Error(`Key ${String(key)} is required in when state`);
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
return keys.reduce(
|
|
32
|
-
(acc, key) => {
|
|
33
|
-
return {
|
|
34
|
-
...acc,
|
|
35
|
-
[key]: world.when[key],
|
|
36
|
-
};
|
|
37
|
-
},
|
|
38
|
-
{} as { [key in keyof W]: W[key] }
|
|
39
|
-
);
|
|
40
|
-
};
|
|
41
|
-
export const requireFromThen = <T>(
|
|
42
|
-
keys: (keyof T)[],
|
|
43
|
-
world: MergeableWorld<unknown, unknown, T>
|
|
44
|
-
) => {
|
|
45
|
-
keys.forEach(key => {
|
|
46
|
-
if (!world.then[key]) {
|
|
47
|
-
throw new Error(`Key ${String(key)} is required in then state`);
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
return keys.reduce(
|
|
51
|
-
(acc, key) => {
|
|
52
|
-
return {
|
|
53
|
-
...acc,
|
|
54
|
-
[key]: world.then[key],
|
|
55
|
-
};
|
|
56
|
-
},
|
|
57
|
-
{} as { [key in keyof T]: T[key] }
|
|
58
|
-
);
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
export const typeCoercer = (value: string) => {
|
|
62
|
-
// Try to parse as integer first
|
|
63
|
-
const numberValue = parseInt(value, 10);
|
|
64
|
-
if (!isNaN(numberValue)) {
|
|
65
|
-
return numberValue;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// Check for boolean values
|
|
69
|
-
if (value === "true") return true;
|
|
70
|
-
if (value === "false") return false;
|
|
71
|
-
|
|
72
|
-
// Return original string if no other type matches
|
|
73
|
-
return value;
|
|
74
|
-
};
|
package/src/vite-env.d.ts.old
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/// <reference types="vite/client" />
|
package/src/when.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { isString, } from "./builderTypeUtils";
|
|
3
|
-
import { addStep } from "./common";
|
|
4
|
-
const whenDependencies = (statement, stepType) => (dependencies) => {
|
|
5
|
-
const fullDependencies = {
|
|
6
|
-
given: dependencies.given ?? {},
|
|
7
|
-
when: dependencies.when ?? {},
|
|
8
|
-
then: {},
|
|
9
|
-
};
|
|
10
|
-
return {
|
|
11
|
-
step: addStep(statement, stepType, fullDependencies),
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
|
-
const whenStatement = (stepType) => (statement) => {
|
|
15
|
-
let normalizedStatement;
|
|
16
|
-
if (isString(statement)) {
|
|
17
|
-
normalizedStatement = (() => statement);
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
normalizedStatement = statement;
|
|
21
|
-
}
|
|
22
|
-
const dependencyFunc = whenDependencies(normalizedStatement, stepType);
|
|
23
|
-
const stepFunc = addStep(normalizedStatement, stepType);
|
|
24
|
-
return {
|
|
25
|
-
dependencies: dependencyFunc,
|
|
26
|
-
step: stepFunc,
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
export const whenBuilder = () => {
|
|
30
|
-
return {
|
|
31
|
-
statement: whenStatement("when"),
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
//# sourceMappingURL=when.js.map
|
package/src/when.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"when.js","sourceRoot":"","sources":["when.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAIL,QAAQ,GAGT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,gBAAgB,GACpB,CAOE,SAAoB,EACpB,QAA0B,EAC1B,EAAE,CACJ,CAGE,YAGD,EAAE,EAAE;IAoBH,MAAM,gBAAgB,GAAiB;QACrC,KAAK,EAAE,YAAY,CAAC,KAAK,IAAK,EAAgB;QAC9C,IAAI,EAAE,YAAY,CAAC,IAAI,IAAK,EAAe;QAC3C,IAAI,EAAE,EAAE;KACT,CAAC;IACF,OAAO;QACL,IAAI,EAAE,OAAO,CAWX,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC;KACzC,CAAC;AACJ,CAAC,CAAC;AAEJ,MAAM,aAAa,GACjB,CACE,QAA0B,EAC1B,EAAE,CACJ,CACE,SAAoB,EACpB,EAAE;IACF,IAAI,mBAES,CAAC;IACd,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACxB,mBAAmB,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAQ,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,mBAAmB,GAAG,SAAgB,CAAC;IACzC,CAAC;IAID,MAAM,cAAc,GAAG,gBAAgB,CAMrC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,OAAO,CAWtB,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACjC,OAAO;QACL,YAAY,EAAE,cAAc;QAC5B,IAAI,EAAE,QAAQ;KACf,CAAC;AACJ,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,WAAW,GAAG,GAA0B,EAAE;IACrD,OAAO;QACL,SAAS,EAAE,aAAa,CAAgC,MAAM,CAAC;KAChE,CAAC;AACJ,CAAC,CAAC"}
|