@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@step-forge/step-forge",
3
- "version": "0.0.5",
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 ./package.json build",
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,2 @@
1
+ export const isString = (statement) => typeof statement === "string";
2
+ //# sourceMappingURL=builderTypeUtils.js.map
@@ -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
@@ -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
@@ -0,0 +1,6 @@
1
+ import { givenBuilder } from "./given";
2
+ import { whenBuilder } from "./when";
3
+ import { thenBuilder } from "./then";
4
+ import { BasicWorld } from "./world";
5
+ export { givenBuilder, whenBuilder, thenBuilder, BasicWorld };
6
+ //# sourceMappingURL=index.js.map
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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": true,
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/**"]