diff --git a/README.md b/README.md index f74b5cd..b75627c 100644 --- a/README.md +++ b/README.md @@ -49,11 +49,12 @@ When in doubt simplify. * [Unified Turing Machine](https://github.com/Phuire-Research/Stratimux/blob/main/The-Unified-Turing-Machine.md) - The governing concept for this entire framework. ## Change Log ![Tests](https://github.com/Phuire-Research/Stratimux/actions/workflows/node.js.yml/badge.svg) -### **BREAKING** v0.1.66 5/13/2024 +### **BREAKING** v0.1.67 5/13/2024 * Revamped the Action Creator Functions to follow behind the current creator with an **options** parameter design choice. * Note pure action creators will not provide an option for payload * Cascaded priority to ActionStrategies to allow for planning priority ahead of time. * Updated the PrincipleFunction documentation to have the semaphore parameter to now be conceptSemaphore. This allows for an easy drop in into the options parameter. +* Made createAxium utilize the same **options** design pattern. ### v0.1.65 5/13/2024 * Removed one more level of deepness from DotPath(6 levels now), projects should now compile without the excessively deep error. ### v0.1.64 5/13/2024 diff --git a/package.json b/package.json index 84895ab..6aebf3d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "stratimux", "license": "GPL-3.0", - "version": "0.1.66", + "version": "0.1.67", "description": "Unified Turing Machine", "main": "dist/index.js", "module": "dist/index.mjs", diff --git a/src/index.ts b/src/index.ts index ebd84ad..388e829 100644 --- a/src/index.ts +++ b/src/index.ts @@ -61,7 +61,14 @@ export { debounceAction, throttleAction } from './model/actionOperators'; -export type { Action, ActionType, ActionCreator, ActionCreatorWithPayload } from './model/action'; +export type { + Action, + ActionType, + ActionCreator, + ActionCreatorWithPayload, + ActionOptions, + ActionWithPayloadOptions +} from './model/action'; export { primeAction, createAction, diff --git a/src/model/axium.ts b/src/model/axium.ts index 95bd41c..aa8293c 100644 --- a/src/model/axium.ts +++ b/src/model/axium.ts @@ -99,12 +99,20 @@ export const defaultMethodSubscription = (concepts: Concepts, tail: Action[], ac export function createAxium( name: string, initialConcepts: Concept[], - logging?: boolean, - storeDialog?: boolean, - logActionStream?: boolean + options?: { + logging?: boolean, + storeDialog?: boolean, + logActionStream?: boolean + } ): Axium { const concepts: Concepts = {}; - const init = [createAxiumConcept(name, storeDialog, logging, logActionStream), ...initialConcepts]; + const init = [ + createAxiumConcept( + name, + options?.storeDialog, + options?.logging, + options?.logActionStream + ), ...initialConcepts]; init.forEach((concept, i) => { concept.semaphore = i; concepts[i] = concept; diff --git a/src/test/addConcepts.test.ts b/src/test/addConcepts.test.ts index 1c7cf74..8961696 100644 --- a/src/test/addConcepts.test.ts +++ b/src/test/addConcepts.test.ts @@ -14,7 +14,7 @@ import { createStage } from '../model/stagePlanner'; import { axiumSelectOpen } from '../concepts/axium/axium.selector'; test('Axium add Concepts Strategy Test', (done) => { - const axium = createAxium('axiumAddConceptTest',[], true, true); + const axium = createAxium('axiumAddConceptTest',[], {logging: true, storeDialog: true}); const plan = axium.plan('Add Concepts Stage',[ createStage((concepts, dispatch) => { console.log('Add Counter Concept'); diff --git a/src/test/asynchronousRecursion.test.ts b/src/test/asynchronousRecursion.test.ts index 7031a80..a9c68d6 100644 --- a/src/test/asynchronousRecursion.test.ts +++ b/src/test/asynchronousRecursion.test.ts @@ -19,7 +19,7 @@ import { createStage, stageWaitForOpenThenIterate } from '../model/stagePlanner' test('Asynchronous recursion', (done) => { const list = ['This', 'list', 'will', 'deplete', 'to', 'control', 'recursion', 'and', 'be', 'halting', 'complete']; const experiment = createExperimentConcept(createExperimentState(), [experimentRecurseIterateIdQuality]); - const axium = createAxium('Experiment async method creator with Concepts', [experiment], false, true); + const axium = createAxium('Experiment async method creator with Concepts', [experiment], {storeDialog: true}); const plan = axium.plan('Experiment debounce add one', [ stageWaitForOpenThenIterate(() => axiumKick()), createStage((_, dispatch) => { diff --git a/src/test/chain.test.ts b/src/test/chain.test.ts index 9ed9a22..6cbc664 100644 --- a/src/test/chain.test.ts +++ b/src/test/chain.test.ts @@ -14,7 +14,7 @@ import { counterSubtract } from '../concepts/counter/qualities/subtract.quality' import { chainEnd } from '../concepts/chain/qualities/chainEnd.quality'; test('Axium Test', (done) => { - const axium = createAxium('chainConceptTest', [createCounterConcept(), createChainConcept()], true, true); + const axium = createAxium('chainConceptTest', [createCounterConcept(), createChainConcept()], {logging: true, storeDialog: true}); let count = 0; let willDispatch = true; const sub = axium.subscribe((concepts: Concepts) => { diff --git a/src/test/conceptToString.test.ts b/src/test/conceptToString.test.ts index e421041..4be767f 100644 --- a/src/test/conceptToString.test.ts +++ b/src/test/conceptToString.test.ts @@ -7,7 +7,7 @@ import { createCounterConcept } from '../concepts/counter/counter.concept'; import { conceptsToString } from '../model/concept'; test('Axium Counting Strategy Test', (done) => { - const axium = createAxium('axiumStrategyTest', [createCounterConcept()], true, true); + const axium = createAxium('axiumStrategyTest', [createCounterConcept()], {logging: true, storeDialog: true}); const sub = axium.subscribe(concepts => { console.log('CONCEPTS:', conceptsToString(concepts)); expect(true).toBe(true); diff --git a/src/test/onChange.test.ts b/src/test/onChange.test.ts index 1af852c..36eea08 100644 --- a/src/test/onChange.test.ts +++ b/src/test/onChange.test.ts @@ -21,7 +21,7 @@ test('Axium onChange Test', (done) => { [axiumSelectLastStrategy.keys]: (concepts: Concepts) => console.log('CHECK: ', selectSlice(concepts, axiumSelectLastStrategy)) }; - const axium = createAxium('axiumStrategyTest', [createCounterConcept()], true, true); + const axium = createAxium('axiumStrategyTest', [createCounterConcept()], {logging: true, storeDialog: true}); const plan = axium.plan('Counting Strategy Plan with selectors', [ createStage((concepts, dispatch) => { diff --git a/src/test/ownership.test.ts b/src/test/ownership.test.ts index 537880a..74e977e 100644 --- a/src/test/ownership.test.ts +++ b/src/test/ownership.test.ts @@ -30,7 +30,7 @@ test('Ownership Test', (done) => { createOwnershipConcept(), createCounterConcept(), createExperimentConcept(createExperimentState(), [experimentCheckInStrategyQuality], [experimentActionQuePrinciple]) - ], true, true); + ], {logging: true, storeDialog: true}); const plan = axium.plan( 'Testing Ownership Staging', [ createStage((cpts, dispatch) => { diff --git a/src/test/priority/priority.test.ts b/src/test/priority/priority.test.ts index beaa0b3..97e5819 100644 --- a/src/test/priority/priority.test.ts +++ b/src/test/priority/priority.test.ts @@ -26,7 +26,7 @@ test('Priority Test', (done) => { const priorityTest = createAxium('Priority Test', [ createExperimentPriorityConcept() - ], true, true, true); + ], {logging: true, storeDialog: true, logActionStream: true}); const firstStage = (name: string, priority: number) => createStage((concepts, dispatch, changes) => { const priorityState = select.state(concepts, experimentName); diff --git a/src/test/priority/priorityAction.test.ts b/src/test/priority/priorityAction.test.ts index fb54b69..39dcf8c 100644 --- a/src/test/priority/priorityAction.test.ts +++ b/src/test/priority/priorityAction.test.ts @@ -32,7 +32,7 @@ test('Priority Action Test', (done) => { const priorityTest = createAxium('Priority Test', [ createExperimentPriorityConcept() - ], true, true, true); + ], {logging: true, storeDialog: true, logActionStream: true}); const firstStage = (name: string, priority: number) => createStage((concepts, dispatch, changes) => { const priorityState = select.state(concepts, experimentName); diff --git a/src/test/random/random.test.ts b/src/test/random/random.test.ts index 9f3f422..210285a 100644 --- a/src/test/random/random.test.ts +++ b/src/test/random/random.test.ts @@ -7,7 +7,7 @@ import { axiumKick } from '../../concepts/axium/qualities/kick.quality'; import { createStage, stageWaitForOpenThenIterate } from '../../model/stagePlanner'; test('Axium Counting Strategy Test', (done) => { - const axium = createAxium('axiumStrategyTest', [createCounterConcept()], true, true); + const axium = createAxium('axiumStrategyTest', [createCounterConcept()], {logging: true, storeDialog: true}); let strategyTopic = 'SOME STRATEGY TOPIC'; let expectedOutput = 0; let totalExpected = 0; diff --git a/src/test/removeConcepts.test.ts b/src/test/removeConcepts.test.ts index 7b57fe3..b23d0e6 100644 --- a/src/test/removeConcepts.test.ts +++ b/src/test/removeConcepts.test.ts @@ -15,7 +15,7 @@ import { createStage, stageWaitForOpenThenIterate } from '../model/stagePlanner' import { axiumKick } from '../concepts/axium/qualities/kick.quality'; test('Axium remove Concepts Strategy Test', (done) => { - const axium = createAxium('axiumRemoveConceptsTest', [createCounterConcept()], true, true); + const axium = createAxium('axiumRemoveConceptsTest', [createCounterConcept()], { logging: true, storeDialog: true }); const plan = axium.plan('Remove Concepts Stage',[ stageWaitForOpenThenIterate(() => axiumKick()), createStage((concepts, dispatch) => { diff --git a/src/test/selector.test.ts b/src/test/selector.test.ts index 6ae2ef3..67a74e5 100644 --- a/src/test/selector.test.ts +++ b/src/test/selector.test.ts @@ -14,7 +14,7 @@ test('Axium Selector Test', (done) => { const counter = createCounterConcept(); const counterState = counter.state as CounterState; counterState.count = 10; - const axium = createAxium('axiumSelectorTest', [counter], true, true); + const axium = createAxium('axiumSelectorTest', [counter], {logging: true, storeDialog: true}); const sub = axium.subscribe((concepts: Concepts) => { const state = selectState(concepts, counterName); console.log('CHECK COUNT', state?.count); @@ -28,7 +28,7 @@ test('Axium Selector State Slice Test', (done) => { const counter = createCounterConcept(); const counterState = counter.state as CounterState; counterState.count = 10; - const axium = createAxium('axiumSelectorStateSlicedTest', [counter], true, true); + const axium = createAxium('axiumSelectorStateSlicedTest', [counter], {logging: true, storeDialog: true}); axium.subscribe((concepts: Concepts) => { const count = selectSlice(concepts, counterSelectCount); expect(count).toBe(10); diff --git a/src/test/setStageOptions.test.ts b/src/test/setStageOptions.test.ts index 9eea150..2df50c6 100644 --- a/src/test/setStageOptions.test.ts +++ b/src/test/setStageOptions.test.ts @@ -15,7 +15,7 @@ import { initializeTopic } from '../concepts/axium/strategies/initialization.str test('Axium setStageSelectors Test', (done) => { let tally = 0; - const axium = createAxium('axiumStrategyTest', [createCounterConcept()], true, true); + const axium = createAxium('axiumStrategyTest', [createCounterConcept()], {logging: true, storeDialog: true}); const plan = axium.plan('Counting Strategy Plan using setStageSelectors', [ createStage((concepts, dispatch) => { @@ -50,7 +50,7 @@ test('Axium setStageSelectors Test', (done) => { test('Axium setStageBeat Test', (done) => { let tally = 0; - const axium = createAxium('axiumStrategyTest', [createCounterConcept()], true, true); + const axium = createAxium('axiumStrategyTest', [createCounterConcept()], {logging: true, storeDialog: true}); const plan = axium.plan('Counting Strategy Plan using setStageBeat', [ createStage((concepts, dispatch) => { @@ -80,7 +80,7 @@ test('Axium setStageBeat Test', (done) => { }); test('Axium setStagePriority Test', (done) => { - const axium = createAxium('axiumStrategyTest', [createCounterConcept()], true, true); + const axium = createAxium('axiumStrategyTest', [createCounterConcept()], {logging: true, storeDialog: true}); let ready = false; let tally = 0; const plan = axium.plan('Counting Strategy Plan using setStagePriority', diff --git a/src/test/stageDispatchOptions.test.ts b/src/test/stageDispatchOptions.test.ts index e02920a..1345d36 100644 --- a/src/test/stageDispatchOptions.test.ts +++ b/src/test/stageDispatchOptions.test.ts @@ -13,7 +13,7 @@ import { createStage } from '../model/stagePlanner'; test('Axium Stage Dispatch Options Test', (done) => { let runCount = 0; - const axium = createAxium('axiumStageDispatchOptionsTest', [createCounterConcept()], true); + const axium = createAxium('axiumStageDispatchOptionsTest', [createCounterConcept()], {logging: true}); const sub = axium.subscribe((concepts) => { const axiumState = concepts[0].state as AxiumState; if (axiumState.badPlans.length > 0) { diff --git a/src/test/stagePlannerBeat.test.ts b/src/test/stagePlannerBeat.test.ts index e4c7d9d..ee9977e 100644 --- a/src/test/stagePlannerBeat.test.ts +++ b/src/test/stagePlannerBeat.test.ts @@ -21,7 +21,7 @@ test('Stage Planner Beat Test', (done) => { let timerActive = false; const axium = createAxium('axium test stage planner beat', [ createCounterConcept() - ], true, true); + ], {logging: true, storeDialog: true}); const beat = 105; const plan = axium.plan('Stage Planner Beat Test', [ stageWaitForOpenThenIterate(() => axiumKick()), diff --git a/src/test/stagedPrinciple.test.ts b/src/test/stagedPrinciple.test.ts index e1bb88b..50d0132 100644 --- a/src/test/stagedPrinciple.test.ts +++ b/src/test/stagedPrinciple.test.ts @@ -50,6 +50,6 @@ test('Axium Principle Stage', (done) => { }; createAxium('axiumStrategyTest', [ createExperimentConcept(createExperimentState(), [experimentMockToTrueQuality], [experimentPrinciple]) - ], true, true); + ], {logging: true, storeDialog: true}); }); /*#>*/ \ No newline at end of file diff --git a/src/test/strategy.test.ts b/src/test/strategy.test.ts index 357e22b..159e508 100644 --- a/src/test/strategy.test.ts +++ b/src/test/strategy.test.ts @@ -11,7 +11,7 @@ import { countingTopic } from '../concepts/counter/strategies/counting.strategy' import { createStage } from '../model/stagePlanner'; test('Axium Counting Strategy Test', (done) => { - const axium = createAxium('axiumStrategyTest', [createCounterConcept()], true, true); + const axium = createAxium('axiumStrategyTest', [createCounterConcept()], {logging: true, storeDialog: true}); const plan = axium.plan('Counting Strategy Plan', [ createStage((_, dispatch) => { diff --git a/src/test/unifiedSelector.test.ts b/src/test/unifiedSelector.test.ts index 8562049..0c2bdfb 100644 --- a/src/test/unifiedSelector.test.ts +++ b/src/test/unifiedSelector.test.ts @@ -19,7 +19,7 @@ import { createStage } from '../model/stagePlanner'; test('Unified Selector Test', (done) => { const axium = createAxium('Selector Test via Counter', [ createCounterConcept() - ], true, true); + ], {logging: true, storeDialog: true}); const plan = axium.plan('Plan: Counter Selector', [ createStage((concepts, _) => { console.log('FIRED!!!');