From da2cce3253ec31a4da69254926c7ff96fa8758b3 Mon Sep 17 00:00:00 2001 From: Evyatar Date: Mon, 13 Nov 2023 01:11:56 +0200 Subject: [PATCH] patch(vest): Add SuiteWalker --- packages/vest/src/core/VestBus/VestBus.ts | 11 +- .../core/isolate/IsolateTest/TestWalker.ts | 25 -- .../__tests__/hasRemainingTests.test.ts | 22 +- .../core/test/helpers/matchingFieldName.ts | 10 + packages/vest/src/suite/SuiteWalker.ts | 35 +++ packages/vest/src/suite/runCallbacks.ts | 4 +- .../selectors/shouldAddValidProperty.ts | 37 +-- .../vest/src/suiteResult/suiteRunResult.ts | 4 +- packages/vest/tsconfig.json | 267 +++++++++++++----- 9 files changed, 287 insertions(+), 128 deletions(-) create mode 100644 packages/vest/src/suite/SuiteWalker.ts diff --git a/packages/vest/src/core/VestBus/VestBus.ts b/packages/vest/src/core/VestBus/VestBus.ts index 03b7e7aac..3546baef2 100644 --- a/packages/vest/src/core/VestBus/VestBus.ts +++ b/packages/vest/src/core/VestBus/VestBus.ts @@ -1,3 +1,4 @@ +import { SuiteWalker } from 'SuiteWalker'; import { CB, ValueOf } from 'vest-utils'; import { Bus, RuntimeEvents, TIsolate } from 'vestjs-runtime'; @@ -29,11 +30,6 @@ export function useInitVestBus() { const { fieldName } = VestTest.getData(testObject); useRunFieldCallbacks(fieldName); - - if (!TestWalker.hasRemainingTests()) { - // When no more tests are running, emit the done event - VestBus.emit(Events.ALL_RUNNING_TESTS_FINISHED); - } }); on(Events.TEST_RUN_STARTED, () => { @@ -54,6 +50,11 @@ export function useInitVestBus() { } CommonStateMachine.setDone(isolate); + + if (!SuiteWalker.hasPending()) { + // When no more tests are running, emit the done event + VestBus.emit(Events.ALL_RUNNING_TESTS_FINISHED); + } }); on(Events.DONE_TEST_OMISSION_PASS, () => { diff --git a/packages/vest/src/core/isolate/IsolateTest/TestWalker.ts b/packages/vest/src/core/isolate/IsolateTest/TestWalker.ts index e410d95cb..a71a90595 100644 --- a/packages/vest/src/core/isolate/IsolateTest/TestWalker.ts +++ b/packages/vest/src/core/isolate/IsolateTest/TestWalker.ts @@ -16,22 +16,6 @@ export class TestWalker { return !Walker.has(root, VestTest.is); } - static someIncompleteTests( - predicate: (test: TIsolateTest) => boolean, - root: MaybeRoot = TestWalker.defaultRoot() - ): boolean { - if (!root) return false; - return Walker.some( - root, - isolate => { - VestTest.isX(isolate); - - return VestTest.isPending(isolate) && predicate(isolate); - }, - VestTest.is - ); - } - static someTests( predicate: (test: TIsolateTest) => boolean, root: MaybeRoot = TestWalker.defaultRoot() @@ -78,15 +62,6 @@ export class TestWalker { ); } - static hasRemainingTests(fieldName?: TFieldName): boolean { - return TestWalker.someIncompleteTests(testObject => { - if (fieldName) { - return matchingFieldName(VestTest.getData(testObject), fieldName); - } - return true; - }); - } - static pluckTests( predicate: (test: TIsolateTest) => boolean, root: MaybeRoot = TestWalker.defaultRoot() diff --git a/packages/vest/src/core/isolate/IsolateTest/__tests__/hasRemainingTests.test.ts b/packages/vest/src/core/isolate/IsolateTest/__tests__/hasRemainingTests.test.ts index 4493e96af..0ac2de068 100644 --- a/packages/vest/src/core/isolate/IsolateTest/__tests__/hasRemainingTests.test.ts +++ b/packages/vest/src/core/isolate/IsolateTest/__tests__/hasRemainingTests.test.ts @@ -1,9 +1,9 @@ import wait from 'wait'; -import { TestWalker } from 'TestWalker'; +import { SuiteWalker } from 'SuiteWalker'; import * as vest from 'vest'; -describe('TestWalker.hasRemainingTests', () => { +describe('SuiteWalker.hasRemainingTests', () => { let hasRemaining: boolean | null = null; let count = 0; @@ -15,7 +15,7 @@ describe('TestWalker.hasRemainingTests', () => { describe('When no remaining tests', () => { it('should return false', () => { vest.create(() => { - hasRemaining = TestWalker.hasRemainingTests(); + hasRemaining = SuiteWalker.hasRemainingTests(); })(); expect(hasRemaining).toBe(false); }); @@ -27,7 +27,7 @@ describe('TestWalker.hasRemainingTests', () => { vest.test('f1', async () => { await wait(100); }); - hasRemaining = TestWalker.hasRemainingTests(); + hasRemaining = SuiteWalker.hasRemainingTests(); })(); expect(hasRemaining).toBe(true); @@ -40,7 +40,7 @@ describe('TestWalker.hasRemainingTests', () => { await wait(100); }); count++; - hasRemaining = TestWalker.hasRemainingTests(); + hasRemaining = SuiteWalker.hasRemainingTests(); }); suite(); suite(); @@ -58,7 +58,7 @@ describe('TestWalker.hasRemainingTests', () => { await wait(100); }); count++; - hasRemaining = TestWalker.hasRemainingTests(); + hasRemaining = SuiteWalker.hasRemainingTests(); }); suite(); @@ -73,7 +73,7 @@ describe('TestWalker.hasRemainingTests', () => { describe('When no remaining tests', () => { it('Should return false', () => { vest.create(() => { - hasRemaining = TestWalker.hasRemainingTests('f1'); + hasRemaining = SuiteWalker.hasRemainingTests('f1'); })(); expect(hasRemaining).toBe(false); }); @@ -85,7 +85,7 @@ describe('TestWalker.hasRemainingTests', () => { vest.test('f1', async () => { await wait(100); }); - hasRemaining = TestWalker.hasRemainingTests('f1'); + hasRemaining = SuiteWalker.hasRemainingTests('f1'); })(); expect(hasRemaining).toBe(true); }); @@ -97,7 +97,7 @@ describe('TestWalker.hasRemainingTests', () => { await wait(100); }); count++; - hasRemaining = TestWalker.hasRemainingTests('f1'); + hasRemaining = SuiteWalker.hasRemainingTests('f1'); }); suite(); suite(); @@ -116,8 +116,8 @@ describe('TestWalker.hasRemainingTests', () => { }); count++; hasRemaining = - TestWalker.hasRemainingTests('f1') && - TestWalker.hasRemainingTests('f2'); + SuiteWalker.hasRemainingTests('f1') && + SuiteWalker.hasRemainingTests('f2'); }); suite(); diff --git a/packages/vest/src/core/test/helpers/matchingFieldName.ts b/packages/vest/src/core/test/helpers/matchingFieldName.ts index 13868720d..aef83d3be 100644 --- a/packages/vest/src/core/test/helpers/matchingFieldName.ts +++ b/packages/vest/src/core/test/helpers/matchingFieldName.ts @@ -16,3 +16,13 @@ export default function matchingFieldName( ): boolean { return !!(fieldName && WithFieldName.fieldName === fieldName); } + +export function matchesOrHasNoFieldName( + WithFieldName: WithFieldName, + fieldName?: Maybe +): boolean { + if (fieldName) { + return matchingFieldName(WithFieldName, fieldName); + } + return true; +} diff --git a/packages/vest/src/suite/SuiteWalker.ts b/packages/vest/src/suite/SuiteWalker.ts new file mode 100644 index 000000000..53d1df400 --- /dev/null +++ b/packages/vest/src/suite/SuiteWalker.ts @@ -0,0 +1,35 @@ +import { Predicates, type Predicate } from 'vest-utils'; +import { TIsolate, VestRuntime, Walker } from 'vestjs-runtime'; + +import { CommonStates } from 'CommonStateMachine'; +import { TIsolateTest } from 'IsolateTest'; +import { TFieldName } from 'SuiteResultTypes'; +import { VestTest } from 'VestTest'; +import { matchesOrHasNoFieldName } from 'matchingFieldName'; + +export class SuiteWalker { + static defaultRoot = VestRuntime.useAvailableRoot; + + static hasPending(predicate?: Predicate): boolean { + const root = SuiteWalker.defaultRoot(); + + if (!root) { + return false; + } + + return Walker.some(root, (isolate: TIsolate) => { + return ( + (isolate.status === CommonStates.PENDING && predicate?.(isolate)) ?? + true + ); + }); + } + + static hasRemainingTests(fieldName?: TFieldName): boolean { + return SuiteWalker.hasPending( + Predicates.all(VestTest.is, (testObject: TIsolateTest) => { + return matchesOrHasNoFieldName(VestTest.getData(testObject), fieldName); + }) + ); + } +} diff --git a/packages/vest/src/suite/runCallbacks.ts b/packages/vest/src/suite/runCallbacks.ts index 88ba707a9..06b5d131f 100644 --- a/packages/vest/src/suite/runCallbacks.ts +++ b/packages/vest/src/suite/runCallbacks.ts @@ -2,7 +2,7 @@ import { isArray, callEach } from 'vest-utils'; import { useDoneCallbacks, useFieldCallbacks } from 'Runtime'; import { TFieldName } from 'SuiteResultTypes'; -import { TestWalker } from 'TestWalker'; +import { SuiteWalker } from 'SuiteWalker'; /** * Runs done callback per field when async tests are finished running. @@ -12,7 +12,7 @@ export function useRunFieldCallbacks(fieldName?: TFieldName): void { if ( fieldName && - !TestWalker.hasRemainingTests(fieldName) && + !SuiteWalker.hasRemainingTests(fieldName) && isArray(fieldCallbacks[fieldName]) ) { callEach(fieldCallbacks[fieldName]); diff --git a/packages/vest/src/suiteResult/selectors/shouldAddValidProperty.ts b/packages/vest/src/suiteResult/selectors/shouldAddValidProperty.ts index 08cba75b8..4966a29e6 100644 --- a/packages/vest/src/suiteResult/selectors/shouldAddValidProperty.ts +++ b/packages/vest/src/suiteResult/selectors/shouldAddValidProperty.ts @@ -1,4 +1,6 @@ +import { SuiteWalker } from 'SuiteWalker'; import { useIsOptionalFieldApplied } from 'optional'; +import { Predicates } from 'vest-utils'; import { VestRuntime } from 'vestjs-runtime'; import { SuiteOptionalFields, TIsolateSuite } from 'IsolateSuite'; @@ -62,12 +64,14 @@ export function useShouldAddValidPropertyInGroup( // Does the given field have any pending tests that are not optional? function useHasNonOptionalIncomplete(fieldName?: TFieldName) { - return TestWalker.someIncompleteTests(testObject => { - if (nonMatchingFieldName(VestTest.getData(testObject), fieldName)) { - return false; - } - return !useIsOptionalFieldApplied(fieldName); - }); + return SuiteWalker.hasPending( + Predicates.all( + VestTest.is, + (testObject: TIsolateTest) => + !nonMatchingFieldName(VestTest.getData(testObject), fieldName), + () => !useIsOptionalFieldApplied(fieldName) + ) + ); } // Do the given group/field have any pending tests that are not optional? @@ -75,17 +79,16 @@ function useHasNonOptionalIncompleteByGroup( groupName: TGroupName, fieldName: TFieldName ): boolean { - return TestWalker.someIncompleteTests(testObject => { - if (nonMatchingGroupName(testObject, groupName)) { - return false; - } - - if (nonMatchingFieldName(VestTest.getData(testObject), fieldName)) { - return false; - } - - return !useIsOptionalFieldApplied(fieldName); - }); + return SuiteWalker.hasPending( + Predicates.all( + VestTest.is, + (testObject: TIsolateTest) => + !nonMatchingGroupName(testObject, groupName), + (testObject: TIsolateTest) => + !nonMatchingFieldName(VestTest.getData(testObject), fieldName), + () => !useIsOptionalFieldApplied(fieldName) + ) + ); } // Did all of the tests for the provided field run/omit? diff --git a/packages/vest/src/suiteResult/suiteRunResult.ts b/packages/vest/src/suiteResult/suiteRunResult.ts index 6f8c4ecaa..2246fb009 100644 --- a/packages/vest/src/suiteResult/suiteRunResult.ts +++ b/packages/vest/src/suiteResult/suiteRunResult.ts @@ -1,3 +1,4 @@ +import { SuiteWalker } from 'SuiteWalker'; import { assign } from 'vest-utils'; import { VestRuntime } from 'vestjs-runtime'; @@ -7,7 +8,6 @@ import { TFieldName, TGroupName, } from 'SuiteResultTypes'; -import { TestWalker } from 'TestWalker'; import { useDeferDoneCallback } from 'deferDoneCallback'; import { shouldSkipDoneRegistration } from 'shouldSkipDoneRegistration'; import { useCreateSuiteResult } from 'suiteResult'; @@ -43,7 +43,7 @@ function done( return output; } const useDoneCallback = () => callback(useCreateSuiteResult()); - if (!TestWalker.hasRemainingTests(fieldName)) { + if (!SuiteWalker.hasRemainingTests(fieldName)) { useDoneCallback(); return output; } diff --git a/packages/vest/tsconfig.json b/packages/vest/tsconfig.json index b57f400af..90af2548d 100644 --- a/packages/vest/tsconfig.json +++ b/packages/vest/tsconfig.json @@ -7,108 +7,243 @@ "declarationMap": true, "outDir": "./dist", "paths": { - "vest": ["./src/vest.ts"], - "vestMocks": ["./src/testUtils/vestMocks.ts"], - "testPromise": ["./src/testUtils/testPromise.ts"], - "testDummy": ["./src/testUtils/testDummy.ts"], - "suiteDummy": ["./src/testUtils/suiteDummy.ts"], - "partition": ["./src/testUtils/partition.ts"], - "mockThrowError": ["./src/testUtils/mockThrowError.ts"], - "TVestMock": ["./src/testUtils/TVestMock.ts"], - "suiteRunResult": ["./src/suiteResult/suiteRunResult.ts"], - "suiteResult": ["./src/suiteResult/suiteResult.ts"], - "SummaryFailure": ["./src/suiteResult/SummaryFailure.ts"], - "SuiteResultTypes": ["./src/suiteResult/SuiteResultTypes.ts"], - "Severity": ["./src/suiteResult/Severity.ts"], + "vest": [ + "./src/vest.ts" + ], + "vestMocks": [ + "./src/testUtils/vestMocks.ts" + ], + "testPromise": [ + "./src/testUtils/testPromise.ts" + ], + "testDummy": [ + "./src/testUtils/testDummy.ts" + ], + "suiteDummy": [ + "./src/testUtils/suiteDummy.ts" + ], + "partition": [ + "./src/testUtils/partition.ts" + ], + "mockThrowError": [ + "./src/testUtils/mockThrowError.ts" + ], + "TVestMock": [ + "./src/testUtils/TVestMock.ts" + ], + "suiteRunResult": [ + "./src/suiteResult/suiteRunResult.ts" + ], + "suiteResult": [ + "./src/suiteResult/suiteResult.ts" + ], + "SummaryFailure": [ + "./src/suiteResult/SummaryFailure.ts" + ], + "SuiteResultTypes": [ + "./src/suiteResult/SuiteResultTypes.ts" + ], + "Severity": [ + "./src/suiteResult/Severity.ts" + ], "useProduceSuiteSummary": [ "./src/suiteResult/selectors/useProduceSuiteSummary.ts" ], - "suiteSelectors": ["./src/suiteResult/selectors/suiteSelectors.ts"], + "suiteSelectors": [ + "./src/suiteResult/selectors/suiteSelectors.ts" + ], "shouldAddValidProperty": [ "./src/suiteResult/selectors/shouldAddValidProperty.ts" ], "hasFailuresByTestObjects": [ "./src/suiteResult/selectors/hasFailuresByTestObjects.ts" ], - "collectFailures": ["./src/suiteResult/selectors/collectFailures.ts"], + "collectFailures": [ + "./src/suiteResult/selectors/collectFailures.ts" + ], "shouldSkipDoneRegistration": [ "./src/suiteResult/done/shouldSkipDoneRegistration.ts" ], - "deferDoneCallback": ["./src/suiteResult/done/deferDoneCallback.ts"], - "staticSuite": ["./src/suite/staticSuite.ts"], - "runCallbacks": ["./src/suite/runCallbacks.ts"], - "getTypedMethods": ["./src/suite/getTypedMethods.ts"], - "createSuite": ["./src/suite/createSuite.ts"], - "SuiteTypes": ["./src/suite/SuiteTypes.ts"], + "deferDoneCallback": [ + "./src/suiteResult/done/deferDoneCallback.ts" + ], + "staticSuite": [ + "./src/suite/staticSuite.ts" + ], + "runCallbacks": [ + "./src/suite/runCallbacks.ts" + ], + "getTypedMethods": [ + "./src/suite/getTypedMethods.ts" + ], + "createSuite": [ + "./src/suite/createSuite.ts" + ], + "SuiteWalker": [ + "./src/suite/SuiteWalker.ts" + ], + "SuiteTypes": [ + "./src/suite/SuiteTypes.ts" + ], "validateSuiteParams": [ "./src/suite/validateParams/validateSuiteParams.ts" ], - "skipWhen": ["./src/isolates/skipWhen.ts"], - "omitWhen": ["./src/isolates/omitWhen.ts"], - "group": ["./src/isolates/group.ts"], - "each": ["./src/isolates/each.ts"], - "warn": ["./src/hooks/warn.ts"], - "include": ["./src/hooks/include.ts"], - "optional": ["./src/hooks/optional/optional.ts"], - "omitOptionalFields": ["./src/hooks/optional/omitOptionalFields.ts"], - "mode": ["./src/hooks/optional/mode.ts"], - "OptionalTypes": ["./src/hooks/optional/OptionalTypes.ts"], - "Modes": ["./src/hooks/optional/Modes.ts"], - "useIsExcluded": ["./src/hooks/focused/useIsExcluded.ts"], - "useHasOnliedTests": ["./src/hooks/focused/useHasOnliedTests.ts"], - "focused": ["./src/hooks/focused/focused.ts"], - "FocusedKeys": ["./src/hooks/focused/FocusedKeys.ts"], - "promisify": ["./src/exports/promisify.ts"], - "parser": ["./src/exports/parser.ts"], - "enforce@schema": ["./src/exports/enforce@schema.ts"], - "enforce@isURL": ["./src/exports/enforce@isURL.ts"], - "enforce@email": ["./src/exports/enforce@email.ts"], - "enforce@date": ["./src/exports/enforce@date.ts"], - "enforce@compounds": ["./src/exports/enforce@compounds.ts"], - "enforce@compose": ["./src/exports/enforce@compose.ts"], - "classnames": ["./src/exports/classnames.ts"], - "SuiteSerializer": ["./src/exports/SuiteSerializer.ts"], - "ErrorStrings": ["./src/errors/ErrorStrings.ts"], - "Runtime": ["./src/core/Runtime.ts"], - "test": ["./src/core/test/test.ts"], - "test.memo": ["./src/core/test/test.memo.ts"], - "TestTypes": ["./src/core/test/TestTypes.ts"], + "skipWhen": [ + "./src/isolates/skipWhen.ts" + ], + "omitWhen": [ + "./src/isolates/omitWhen.ts" + ], + "group": [ + "./src/isolates/group.ts" + ], + "each": [ + "./src/isolates/each.ts" + ], + "warn": [ + "./src/hooks/warn.ts" + ], + "include": [ + "./src/hooks/include.ts" + ], + "optional": [ + "./src/hooks/optional/optional.ts" + ], + "omitOptionalFields": [ + "./src/hooks/optional/omitOptionalFields.ts" + ], + "mode": [ + "./src/hooks/optional/mode.ts" + ], + "OptionalTypes": [ + "./src/hooks/optional/OptionalTypes.ts" + ], + "Modes": [ + "./src/hooks/optional/Modes.ts" + ], + "useIsExcluded": [ + "./src/hooks/focused/useIsExcluded.ts" + ], + "useHasOnliedTests": [ + "./src/hooks/focused/useHasOnliedTests.ts" + ], + "focused": [ + "./src/hooks/focused/focused.ts" + ], + "FocusedKeys": [ + "./src/hooks/focused/FocusedKeys.ts" + ], + "promisify": [ + "./src/exports/promisify.ts" + ], + "parser": [ + "./src/exports/parser.ts" + ], + "enforce@schema": [ + "./src/exports/enforce@schema.ts" + ], + "enforce@isURL": [ + "./src/exports/enforce@isURL.ts" + ], + "enforce@email": [ + "./src/exports/enforce@email.ts" + ], + "enforce@date": [ + "./src/exports/enforce@date.ts" + ], + "enforce@compounds": [ + "./src/exports/enforce@compounds.ts" + ], + "enforce@compose": [ + "./src/exports/enforce@compose.ts" + ], + "classnames": [ + "./src/exports/classnames.ts" + ], + "SuiteSerializer": [ + "./src/exports/SuiteSerializer.ts" + ], + "ErrorStrings": [ + "./src/errors/ErrorStrings.ts" + ], + "Runtime": [ + "./src/core/Runtime.ts" + ], + "test": [ + "./src/core/test/test.ts" + ], + "test.memo": [ + "./src/core/test/test.memo.ts" + ], + "TestTypes": [ + "./src/core/test/TestTypes.ts" + ], "verifyTestRun": [ "./src/core/test/testLevelFlowControl/verifyTestRun.ts" ], - "runTest": ["./src/core/test/testLevelFlowControl/runTest.ts"], + "runTest": [ + "./src/core/test/testLevelFlowControl/runTest.ts" + ], "shouldUseErrorMessage": [ "./src/core/test/helpers/shouldUseErrorMessage.ts" ], "nonMatchingSeverityProfile": [ "./src/core/test/helpers/nonMatchingSeverityProfile.ts" ], - "matchingGroupName": ["./src/core/test/helpers/matchingGroupName.ts"], - "matchingFieldName": ["./src/core/test/helpers/matchingFieldName.ts"], - "VestReconciler": ["./src/core/isolate/VestReconciler.ts"], - "VestIsolateType": ["./src/core/isolate/VestIsolateType.ts"], - "IsolateReconciler": ["./src/core/isolate/IsolateReconciler.ts"], + "matchingGroupName": [ + "./src/core/test/helpers/matchingGroupName.ts" + ], + "matchingFieldName": [ + "./src/core/test/helpers/matchingFieldName.ts" + ], + "VestReconciler": [ + "./src/core/isolate/VestReconciler.ts" + ], + "VestIsolateType": [ + "./src/core/isolate/VestIsolateType.ts" + ], + "IsolateReconciler": [ + "./src/core/isolate/IsolateReconciler.ts" + ], "isSameProfileTest": [ "./src/core/isolate/IsolateTest/isSameProfileTest.ts" ], "cancelOverriddenPendingTest": [ "./src/core/isolate/IsolateTest/cancelOverriddenPendingTest.ts" ], - "VestTest": ["./src/core/isolate/IsolateTest/VestTest.ts"], - "TestWalker": ["./src/core/isolate/IsolateTest/TestWalker.ts"], + "VestTest": [ + "./src/core/isolate/IsolateTest/VestTest.ts" + ], + "TestWalker": [ + "./src/core/isolate/IsolateTest/TestWalker.ts" + ], "IsolateTestReconciler": [ "./src/core/isolate/IsolateTest/IsolateTestReconciler.ts" ], - "IsolateTest": ["./src/core/isolate/IsolateTest/IsolateTest.ts"], - "IsolateSuite": ["./src/core/isolate/IsolateSuite/IsolateSuite.ts"], - "IsolateEach": ["./src/core/isolate/IsolateEach/IsolateEach.ts"], - "SuiteContext": ["./src/core/context/SuiteContext.ts"], - "VestBus": ["./src/core/VestBus/VestBus.ts"], - "BusEvents": ["./src/core/VestBus/BusEvents.ts"], + "IsolateTest": [ + "./src/core/isolate/IsolateTest/IsolateTest.ts" + ], + "IsolateSuite": [ + "./src/core/isolate/IsolateSuite/IsolateSuite.ts" + ], + "IsolateEach": [ + "./src/core/isolate/IsolateEach/IsolateEach.ts" + ], + "SuiteContext": [ + "./src/core/context/SuiteContext.ts" + ], + "VestBus": [ + "./src/core/VestBus/VestBus.ts" + ], + "BusEvents": [ + "./src/core/VestBus/BusEvents.ts" + ], "IsolateTestStateMachine": [ "./src/core/StateMachines/IsolateTestStateMachine.ts" ], - "CommonStateMachine": ["./src/core/StateMachines/CommonStateMachine.ts"] + "CommonStateMachine": [ + "./src/core/StateMachines/CommonStateMachine.ts" + ] } } }