@step-forge/step-forge 0.0.5 → 0.0.6
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/package.json +2 -2
- package/src/builderTypeUtils.js +2 -0
- package/src/builderTypeUtils.js.map +1 -0
- package/src/common.js +73 -0
- package/src/common.js.map +1 -0
- package/src/given.js +34 -0
- package/src/given.js.map +1 -0
- package/src/index.js +6 -0
- package/src/index.js.map +1 -0
- package/src/then.js +34 -0
- package/src/then.js.map +1 -0
- package/src/utils.js +54 -0
- package/src/utils.js.map +1 -0
- package/src/when.js +34 -0
- package/src/when.js.map +1 -0
- package/src/world.js +51 -0
- package/src/world.js.map +1 -0
- package/tsconfig.json +4 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@step-forge/step-forge",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"module": "./dist/step-forge.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"types": "./dist/index.d.ts",
|
|
15
15
|
"scripts": {
|
|
16
16
|
"dev": "vite --host",
|
|
17
|
-
"build": "rimraf build/**/* && tsc && vite build && dts-bundle-generator --config ./dts-bundle-generator.config.ts && copyfiles
|
|
17
|
+
"build": "rimraf build/**/* && rimraf dist/**/* && tsc && vite build && dts-bundle-generator --config ./dts-bundle-generator.config.ts && copyfiles -u 1 \"dist/**/*\" \"package.json\" build",
|
|
18
18
|
"test:cucumber": "NODE_ENV=test NODE_OPTIONS=\"--experimental-specifier-resolution=node --loader ts-node/esm\" TS_NODE_PROJECT=./tsconfig.cucumber.json cucumber-js -p default",
|
|
19
19
|
"test:ci": "NODE_ENV=test cucumber-js -p ci",
|
|
20
20
|
"test": "NODE_ENV=test PORT=7888 LOG_LEVEL=none cucumber-js -p all 2> /dev/null",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builderTypeUtils.js","sourceRoot":"","sources":["builderTypeUtils.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,SAAmD,EAC9B,EAAE,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC"}
|
package/src/common.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { Given as CucGiven, Then as CucThen, When as CucWhen, } from "@cucumber/cucumber";
|
|
3
|
+
import _ from "lodash";
|
|
4
|
+
import { requireFromGiven, requireFromThen, requireFromWhen, typeCoercer, } from "./utils";
|
|
5
|
+
const cucFunctionMap = {
|
|
6
|
+
given: CucGiven,
|
|
7
|
+
when: CucWhen,
|
|
8
|
+
then: CucThen,
|
|
9
|
+
};
|
|
10
|
+
export const addStep = (statement, stepType, dependencies = {
|
|
11
|
+
given: {},
|
|
12
|
+
when: {},
|
|
13
|
+
then: {},
|
|
14
|
+
}) => (stepFunction) => {
|
|
15
|
+
const statementFunction = statement;
|
|
16
|
+
const { given: givenDependencies, when: whenDependencies, then: thenDependencies, } = dependencies;
|
|
17
|
+
return {
|
|
18
|
+
statement,
|
|
19
|
+
dependencies,
|
|
20
|
+
stepType,
|
|
21
|
+
stepFunction,
|
|
22
|
+
register: () => {
|
|
23
|
+
const argCount = statementFunction.length;
|
|
24
|
+
const argMatchers = Array.from({ length: argCount }, () => "{string}");
|
|
25
|
+
const statement = statementFunction(...argMatchers);
|
|
26
|
+
const cucStepFunction = Object.defineProperty(async function (...args) {
|
|
27
|
+
const coercedArgs = args.map(typeCoercer);
|
|
28
|
+
const requiredGivenKeys = Object.entries(givenDependencies ?? {})
|
|
29
|
+
.filter(([, value]) => value === "required")
|
|
30
|
+
.map(([key]) => key);
|
|
31
|
+
const ensuredGivenValues = requireFromGiven(requiredGivenKeys, this);
|
|
32
|
+
const narrowedGiven = {
|
|
33
|
+
..._.pick(this.given, Object.keys(givenDependencies ?? {})),
|
|
34
|
+
...ensuredGivenValues,
|
|
35
|
+
};
|
|
36
|
+
const requiredWhenKeys = Object.entries(whenDependencies ?? {})
|
|
37
|
+
.filter(([, value]) => value === "required")
|
|
38
|
+
.map(([key]) => key);
|
|
39
|
+
const ensuredWhenValues = requireFromWhen(requiredWhenKeys, this);
|
|
40
|
+
const narrowedWhen = {
|
|
41
|
+
..._.pick(this.when, Object.keys(whenDependencies ?? {})),
|
|
42
|
+
...ensuredWhenValues,
|
|
43
|
+
};
|
|
44
|
+
const requiredThenKeys = Object.entries(thenDependencies ?? {})
|
|
45
|
+
.filter(([, value]) => value === "required")
|
|
46
|
+
.map(([key]) => key);
|
|
47
|
+
const ensuredThenValues = requireFromThen(requiredThenKeys, this);
|
|
48
|
+
const narrowedThen = {
|
|
49
|
+
..._.pick(this.then, Object.keys(thenDependencies ?? {})),
|
|
50
|
+
...ensuredThenValues,
|
|
51
|
+
};
|
|
52
|
+
const result = await stepFunction({
|
|
53
|
+
variables: coercedArgs,
|
|
54
|
+
given: narrowedGiven,
|
|
55
|
+
when: narrowedWhen,
|
|
56
|
+
then: narrowedThen,
|
|
57
|
+
});
|
|
58
|
+
this[stepType].merge({
|
|
59
|
+
...result,
|
|
60
|
+
});
|
|
61
|
+
}, "length", { value: argCount, configurable: true });
|
|
62
|
+
const cucStep = cucFunctionMap[stepType];
|
|
63
|
+
cucStep(statement, cucStepFunction);
|
|
64
|
+
return {
|
|
65
|
+
stepType,
|
|
66
|
+
dependencies,
|
|
67
|
+
statement: statementFunction,
|
|
68
|
+
stepFunction,
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["common.ts"],"names":[],"mappings":"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"}
|
package/src/given.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
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
ADDED
|
@@ -0,0 +1 @@
|
|
|
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/index.js
ADDED
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
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/then.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
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
ADDED
|
@@ -0,0 +1 @@
|
|
|
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/utils.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
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
ADDED
|
@@ -0,0 +1 @@
|
|
|
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/when.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
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
ADDED
|
@@ -0,0 +1 @@
|
|
|
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"}
|
package/src/world.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import _ from "lodash";
|
|
2
|
+
function mergeCustomizer(objValue, srcValue) {
|
|
3
|
+
if (_.isArray(objValue)) {
|
|
4
|
+
return objValue.concat(srcValue);
|
|
5
|
+
}
|
|
6
|
+
else if (objValue && !_.isPlainObject(objValue) && objValue !== srcValue) {
|
|
7
|
+
throw new Error(`Merge would have destroyed previous value ${objValue} with ${srcValue}`);
|
|
8
|
+
}
|
|
9
|
+
return objValue;
|
|
10
|
+
}
|
|
11
|
+
export const createMergeableState = (state) => {
|
|
12
|
+
return {
|
|
13
|
+
...state,
|
|
14
|
+
merge: (newState) => {
|
|
15
|
+
state = _.merge({ ...state }, newState, mergeCustomizer);
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export class BasicWorld {
|
|
20
|
+
givenState = {};
|
|
21
|
+
whenState = {};
|
|
22
|
+
thenState = {};
|
|
23
|
+
get given() {
|
|
24
|
+
return {
|
|
25
|
+
...this.givenState,
|
|
26
|
+
merge: (newState) => {
|
|
27
|
+
this.givenState = _.merge({ ...this.givenState }, newState, mergeCustomizer);
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
get when() {
|
|
32
|
+
return {
|
|
33
|
+
...this.whenState,
|
|
34
|
+
merge: (newState) => {
|
|
35
|
+
this.whenState = _.merge({ ...this.whenState }, newState, mergeCustomizer);
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
get then() {
|
|
40
|
+
return {
|
|
41
|
+
...this.thenState,
|
|
42
|
+
merge: (newState) => {
|
|
43
|
+
this.thenState = _.merge({ ...this.thenState }, newState, mergeCustomizer);
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export const createBasicWorld = () => {
|
|
49
|
+
return new BasicWorld();
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=world.js.map
|
package/src/world.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"world.js","sourceRoot":"","sources":["world.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAC;AAUvB,SAAS,eAAe,CAAC,QAAiB,EAAE,QAAiB;IAC3D,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CACb,6CAA6C,QAAQ,SAAS,QAAQ,EAAE,CACzE,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,KAAoB,EACI,EAAE;IAC1B,OAAO;QACL,GAAG,KAAK;QACR,KAAK,EAAE,CAAC,QAAoB,EAAE,EAAE;YAC9B,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC3D,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAQF,MAAM,OAAO,UAAU;IACb,UAAU,GAAsB,EAAE,CAAC;IACnC,SAAS,GAAqB,EAAE,CAAC;IACjC,SAAS,GAAqB,EAAE,CAAC;IAEzC,IAAW,KAAK;QACd,OAAO;YACL,GAAG,IAAI,CAAC,UAAU;YAClB,KAAK,EAAE,CAAC,QAAwB,EAAE,EAAE;gBAClC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CACvB,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,EACtB,QAAQ,EACR,eAAe,CAChB,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;IAED,IAAW,IAAI;QACb,OAAO;YACL,GAAG,IAAI,CAAC,SAAS;YACjB,KAAK,EAAE,CAAC,QAAuB,EAAE,EAAE;gBACjC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CACtB,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,EACrB,QAAQ,EACR,eAAe,CAChB,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;IAED,IAAW,IAAI;QACb,OAAO;YACL,GAAG,IAAI,CAAC,SAAS;YACjB,KAAK,EAAE,CAAC,QAAuB,EAAE,EAAE;gBACjC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CACtB,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,EACrB,QAAQ,EACR,eAAe,CAChB,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAI9B,EAAE;IACF,OAAO,IAAI,UAAU,EAAqB,CAAC;AAC7C,CAAC,CAAC"}
|
package/tsconfig.json
CHANGED
|
@@ -14,12 +14,14 @@
|
|
|
14
14
|
"sourceMap": true,
|
|
15
15
|
"resolveJsonModule": true,
|
|
16
16
|
"esModuleInterop": true,
|
|
17
|
-
"noEmit":
|
|
17
|
+
"noEmit": false,
|
|
18
18
|
"noUnusedLocals": true,
|
|
19
19
|
"noUnusedParameters": true,
|
|
20
20
|
"noImplicitReturns": true,
|
|
21
21
|
"forceConsistentCasingInFileNames": true,
|
|
22
|
-
"types": ["vite/client", "node"]
|
|
22
|
+
"types": ["vite/client", "node"],
|
|
23
|
+
"declaration": true,
|
|
24
|
+
"declarationDir": "./dist/types"
|
|
23
25
|
},
|
|
24
26
|
"include": ["src"],
|
|
25
27
|
"exclude": ["**/*.test.ts", "node_modules", "test/**", ".history/**"]
|