@onereach/state-machine-driver-memory 1.0.0-framework.2

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/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # @onereach/state-machine-driver-memory
2
+
3
+ In-memory storage driver for State Machine templates and instances.
@@ -0,0 +1,91 @@
1
+ import { DocumentDriver, DriverCapabilities, DriverChange, DriverDeleteOptions, DriverLoadOptions, DriverLoadResult, DriverSaveOptions, DriverSaveResult, DriverWatchOptions, StateMachineInstanceDriver, StateMachineInstanceReference, StateTemplateDriver, StateTemplateReference } from "@onereach/state-machine-store";
2
+ //#region src/backend/internal-queue.d.ts
3
+ declare class PushQueue<T> {
4
+ private readonly items;
5
+ private readonly waiters;
6
+ push(value: T): void;
7
+ next(signal?: AbortSignal): Promise<T>;
8
+ }
9
+ //#endregion
10
+ //#region src/backend/types.d.ts
11
+ interface MemoryRecord {
12
+ value: unknown;
13
+ revision: string;
14
+ }
15
+ interface MemoryWatcher {
16
+ push(value: unknown): void;
17
+ }
18
+ interface QueueWaiter<T> {
19
+ resolve(value: T): void;
20
+ reject(error: unknown): void;
21
+ }
22
+ type MemoryBackendChange = {
23
+ type: 'created';
24
+ revision: string;
25
+ } | {
26
+ type: 'updated';
27
+ revision: string;
28
+ } | {
29
+ type: 'deleted';
30
+ };
31
+ interface MemoryBackendHooks {
32
+ beforeLoad?: (key: string) => void | Promise<void>;
33
+ beforeSave?: (key: string) => void | Promise<void>;
34
+ afterSave?: (key: string) => void | Promise<void>;
35
+ beforeDelete?: (key: string) => void | Promise<void>;
36
+ afterDelete?: (key: string) => void | Promise<void>;
37
+ }
38
+ //#endregion
39
+ //#region src/backend/backend.d.ts
40
+ declare class MemoryBackend {
41
+ private revision;
42
+ private readonly watchers;
43
+ readonly records: Map<string, MemoryRecord>;
44
+ readonly hooks: MemoryBackendHooks;
45
+ constructor(hooks?: MemoryBackendHooks);
46
+ nextRevision(): string;
47
+ subscribe(key: string): PushQueue<MemoryBackendChange>;
48
+ unsubscribe(key: string, queue: PushQueue<MemoryBackendChange>): void;
49
+ emit(key: string, change: MemoryBackendChange): void;
50
+ get watcherCount(): number;
51
+ /**
52
+ * Useful for asserting lower-level persistence behavior
53
+ * in driver tests.
54
+ */
55
+ size(): number;
56
+ clear(): void;
57
+ }
58
+ //#endregion
59
+ //#region src/generic-driver/types.d.ts
60
+ interface MemoryDocumentDriverOptions<TReference> {
61
+ key(reference: TReference): string;
62
+ backend?: MemoryBackend;
63
+ }
64
+ interface MemoryDriverOptions {
65
+ backend?: MemoryBackend;
66
+ }
67
+ //#endregion
68
+ //#region src/generic-driver/generic-driver.d.ts
69
+ declare class MemoryDocumentDriver<TReference> implements DocumentDriver<TReference> {
70
+ private readonly options;
71
+ readonly capabilities: DriverCapabilities;
72
+ readonly backend: MemoryBackend;
73
+ constructor(options: MemoryDocumentDriverOptions<TReference>);
74
+ load<TState = unknown>(reference: TReference, options?: DriverLoadOptions): Promise<DriverLoadResult<TState> | undefined>;
75
+ save<TState = unknown>(reference: TReference, value: TState, options?: DriverSaveOptions): Promise<DriverSaveResult>;
76
+ delete(reference: TReference, options?: DriverDeleteOptions): Promise<boolean>;
77
+ watch(reference: TReference, options?: DriverWatchOptions): AsyncIterable<DriverChange<TReference>>;
78
+ }
79
+ //#endregion
80
+ //#region src/instance-driver.d.ts
81
+ declare class MemoryStateMachineInstanceDriver extends MemoryDocumentDriver<StateMachineInstanceReference> implements StateMachineInstanceDriver {
82
+ constructor(options?: MemoryDriverOptions);
83
+ }
84
+ //#endregion
85
+ //#region src/template-driver.d.ts
86
+ declare class MemoryStateTemplateDriver extends MemoryDocumentDriver<StateTemplateReference> implements StateTemplateDriver {
87
+ constructor(options?: MemoryDriverOptions);
88
+ }
89
+ //#endregion
90
+ export { MemoryBackend, type MemoryBackendChange, type MemoryBackendHooks, MemoryDocumentDriver, type MemoryDocumentDriverOptions, type MemoryDriverOptions, type MemoryRecord, MemoryStateMachineInstanceDriver, MemoryStateTemplateDriver, type MemoryWatcher, type QueueWaiter };
91
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/backend/internal-queue.ts","../src/backend/types.ts","../src/backend/backend.ts","../src/generic-driver/types.ts","../src/generic-driver/generic-driver.ts","../src/instance-driver.ts","../src/template-driver.ts"],"mappings":";;cAIa,UAAU;mBACJ;mBACA;EAEjB,KAAK,OAAO;EAWZ,KAAK,SAAS,cAAc,QAAQ;;;;UCnBrB;EACf;EACA;;UAGe;EACf,KAAK;;UAGU,YAAY;EAC3B,QAAQ,OAAO;EACf,OAAO;;KAGG;EAEN;EACA;;EAGA;EACA;;EAGA;;UAGW;EACf,cAAc,uBAAuB;EAErC,cAAc,uBAAuB;EACrC,aAAa,uBAAuB;EAEpC,gBAAgB,uBAAuB;EACvC,eAAe,uBAAuB;;;;cC/B3B;UACH;mBACS;WAED,SAAO,YAAA;WACP,OAAO;EAEX,YAAA,QAAO;EAIZ;EAKA,UAAU,cAAc,UAAU;EAelC,YAAY,aAAa,OAAO,UAAU;EAU1C,KAAK,aAAa,QAAQ;MAUtB;;;;;EAcJ;EAIA;;;;UCtEQ,4BAA4B;EAC3C,IAAI,WAAW;EAEf,UAAU;;UAGK;EACf,UAAU;;;;cCSC,qBAAqB,uBAAuB,eAAe;mBACrD;WAED,cAAc;WAKrB,SAAS;EAEN,YAAA,SAAS,4BAA4B;EAKpC,KAAK,kBAChB,WAAW,YACX,UAAU,oBACT,QAAQ,iBAAiB;EAsBf,KAAK,kBAChB,WAAW,YACX,OAAO,QACP,UAAS,oBACR,QAAQ;EAgDE,OAAO,WAAW,YAAY,UAAS,sBAA2B;EAkCjE,MACZ,WAAW,YACX,UAAS,qBACR,cAAc,aAAa;;;;cC9InB,yCACH,qBAAqB,0CAClB;EAEC,YAAA,UAAS;;;;cCJV,kCACH,qBAAqB,mCAClB;EAEC,YAAA,UAAS"}
package/dist/index.mjs ADDED
@@ -0,0 +1,2 @@
1
+ import{RevisionConflictError as e}from"@onereach/state-machine-store";function t(t,n){if(n!==void 0){if(n===null){if(t!==void 0)throw new e(null,t);return}if(t!==n)throw new e(n,t)}}function n(e){if(e?.aborted)throw e.reason??Error(`Operation aborted`)}var r=class{items=[];waiters=[];push(e){let t=this.waiters.shift();if(t){t.resolve(e);return}this.items.push(e)}next(e){n(e);let t=this.items.shift();return t===void 0?new Promise((t,n)=>{let r,i=()=>{let t=this.waiters.indexOf(r);t!==-1&&this.waiters.splice(t,1),a(),n(e?.reason instanceof Error?e.reason:Error(`Operation aborted`))},a=()=>{e?.removeEventListener(`abort`,i)};r={resolve(e){a(),t(e)},reject(e){a(),n(e)}},this.waiters.push(r),e?.addEventListener(`abort`,i,{once:!0})}):Promise.resolve(t)}},i=class{revision=0;watchers=new Map;records=new Map;hooks;constructor(e={}){this.hooks=e}nextRevision(){return this.revision+=1,`memory:${this.revision}`}subscribe(e){let t=new r,n=this.watchers.get(e);return n||(n=new Set,this.watchers.set(e,n)),n.add(t),t}unsubscribe(e,t){let n=this.watchers.get(e);n&&(n.delete(t),n.size===0&&this.watchers.delete(e))}emit(e,t){let n=this.watchers.get(e);if(n)for(let e of n)e.push(t)}get watcherCount(){let e=0;for(let t of this.watchers.values())e+=t.size;return e}size(){return this.records.size}clear(){this.records.clear()}},a=class{options;capabilities={concurrency:`atomic-cas`,watch:`push`};backend;constructor(e){this.options=e,this.backend=e.backend??new i}async load(e,t){n(t?.signal);let r=this.options.key(e);await this.backend.hooks.beforeLoad?.(r),n(t?.signal);let i=this.backend.records.get(r);if(i)return{value:structuredClone(i.value),revision:i.revision,metadata:{driver:`memory`,key:r}}}async save(e,r,i={}){n(i.signal);let a=this.options.key(e);await this.backend.hooks.beforeSave?.(a),n(i.signal);let o=this.backend.records.get(a);t(o?.revision,i.expectedRevision);let s=this.backend.nextRevision();return this.backend.records.set(a,{value:structuredClone(r),revision:s}),this.backend.emit(a,{type:o?`updated`:`created`,revision:s}),await this.backend.hooks.afterSave?.(a),{revision:s,metadata:{driver:`memory`,key:a}}}async delete(r,i={}){n(i.signal);let a=this.options.key(r);await this.backend.hooks.beforeDelete?.(a),n(i.signal);let o=this.backend.records.get(a);if(!o){if(typeof i.expectedRevision==`string`)throw new e(i.expectedRevision,void 0);return!1}return t(o.revision,i.expectedRevision),this.backend.records.delete(a),this.backend.emit(a,{type:`deleted`}),await this.backend.hooks.afterDelete?.(a),!0}async*watch(e,t={}){n(t.signal);let r=this.options.key(e),i=this.backend.subscribe(r);try{for(;;){let n=await i.next(t.signal);switch(n.type){case`created`:yield{type:`created`,ref:e,revision:n.revision};break;case`updated`:yield{type:`updated`,ref:e,revision:n.revision};break;case`deleted`:yield{type:`deleted`,ref:e}}}}finally{this.backend.unsubscribe(r,i)}}},o=class extends a{constructor(e={}){super({key:e=>`instance:${e.id}`,backend:e.backend})}},s=class extends a{constructor(e={}){super({key:e=>[`template`,e.id,e.version??`latest`].join(`:`),backend:e.backend})}};export{i as MemoryBackend,a as MemoryDocumentDriver,o as MemoryStateMachineInstanceDriver,s as MemoryStateTemplateDriver};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/helpers.ts","../src/backend/internal-queue.ts","../src/backend/backend.ts","../src/generic-driver/generic-driver.ts","../src/instance-driver.ts","../src/template-driver.ts"],"sourcesContent":["import { RevisionConflictError } from '@onereach/state-machine-store';\n\nexport function assertExpectedRevision(actual: string | undefined, expected: string | null | undefined): void {\n /*\n * Unconditional.\n */\n if (expected === undefined) return;\n\n /*\n * Create-only.\n */\n if (expected === null) {\n if (actual !== undefined) {\n // eslint-disable-next-line unicorn/no-null\n throw new RevisionConflictError(null, actual);\n }\n\n return;\n }\n\n if (actual !== expected) throw new RevisionConflictError(expected, actual);\n}\n\nexport function throwIfAborted(signal?: AbortSignal): void {\n if (!signal?.aborted) {\n return;\n }\n\n throw signal.reason ?? new Error('Operation aborted');\n}\n","import { throwIfAborted } from '../helpers.ts';\n\nimport { QueueWaiter } from './types.ts';\n\nexport class PushQueue<T> {\n private readonly items: T[] = [];\n private readonly waiters: QueueWaiter<T>[] = [];\n\n push(value: T): void {\n const waiter = this.waiters.shift();\n\n if (waiter) {\n waiter.resolve(value);\n return;\n }\n\n this.items.push(value);\n }\n\n next(signal?: AbortSignal): Promise<T> {\n throwIfAborted(signal);\n\n const item = this.items.shift();\n\n if (item !== undefined) return Promise.resolve(item);\n\n return new Promise<T>((resolve, reject) => {\n // eslint-disable-next-line prefer-const\n let waiter: QueueWaiter<T>;\n\n const onAbort = () => {\n const index = this.waiters.indexOf(waiter);\n\n if (index !== -1) this.waiters.splice(index, 1);\n\n cleanup();\n reject(signal?.reason instanceof Error ? signal.reason : new Error('Operation aborted'));\n };\n\n const cleanup = () => {\n signal?.removeEventListener('abort', onAbort);\n };\n\n waiter = {\n resolve(value) {\n cleanup();\n resolve(value);\n },\n\n reject(error) {\n cleanup();\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(error);\n },\n };\n\n this.waiters.push(waiter);\n\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n }\n}\n","import { PushQueue } from './internal-queue.ts';\nimport type { MemoryBackendChange, MemoryBackendHooks, MemoryRecord } from './types.ts';\n\nexport class MemoryBackend {\n private revision = 0;\n private readonly watchers = new Map<string, Set<PushQueue<MemoryBackendChange>>>();\n\n public readonly records = new Map<string, MemoryRecord>();\n public readonly hooks: MemoryBackendHooks;\n\n constructor(hooks: MemoryBackendHooks = {}) {\n this.hooks = hooks;\n }\n\n public nextRevision(): string {\n this.revision += 1;\n return `memory:${this.revision}`;\n }\n\n public subscribe(key: string): PushQueue<MemoryBackendChange> {\n const queue = new PushQueue<MemoryBackendChange>();\n\n let watchers = this.watchers.get(key);\n\n if (!watchers) {\n watchers = new Set();\n this.watchers.set(key, watchers);\n }\n\n watchers.add(queue);\n\n return queue;\n }\n\n public unsubscribe(key: string, queue: PushQueue<MemoryBackendChange>): void {\n const watchers = this.watchers.get(key);\n\n if (!watchers) return;\n\n watchers.delete(queue);\n\n if (watchers.size === 0) this.watchers.delete(key);\n }\n\n public emit(key: string, change: MemoryBackendChange): void {\n const watchers = this.watchers.get(key);\n\n if (!watchers) return;\n\n for (const watcher of watchers) {\n watcher.push(change);\n }\n }\n\n public get watcherCount(): number {\n let count = 0;\n\n for (const watchers of this.watchers.values()) {\n count += watchers.size;\n }\n\n return count;\n }\n\n /**\n * Useful for asserting lower-level persistence behavior\n * in driver tests.\n */\n public size(): number {\n return this.records.size;\n }\n\n public clear(): void {\n this.records.clear();\n }\n}\n","import { RevisionConflictError } from '@onereach/state-machine-store';\nimport type {\n DocumentDriver,\n DriverCapabilities,\n DriverChange,\n DriverDeleteOptions,\n DriverLoadOptions,\n DriverLoadResult,\n DriverSaveOptions,\n DriverSaveResult,\n DriverWatchOptions,\n} from '@onereach/state-machine-store';\n\nimport { MemoryBackend } from '../backend/backend.ts';\nimport { assertExpectedRevision, throwIfAborted } from '../helpers.ts';\n\nimport type { MemoryDocumentDriverOptions } from './types.ts';\n\nexport class MemoryDocumentDriver<TReference> implements DocumentDriver<TReference> {\n private readonly options: MemoryDocumentDriverOptions<TReference>;\n\n public readonly capabilities: DriverCapabilities = {\n concurrency: 'atomic-cas',\n watch: 'push',\n };\n\n readonly backend: MemoryBackend;\n\n constructor(options: MemoryDocumentDriverOptions<TReference>) {\n this.options = options;\n this.backend = options.backend ?? new MemoryBackend();\n }\n\n public async load<TState = unknown>(\n reference: TReference,\n options?: DriverLoadOptions,\n ): Promise<DriverLoadResult<TState> | undefined> {\n throwIfAborted(options?.signal);\n\n const key = this.options.key(reference);\n\n await this.backend.hooks.beforeLoad?.(key);\n throwIfAborted(options?.signal);\n\n const record = this.backend.records.get(key);\n\n if (!record) return undefined;\n\n return {\n value: structuredClone(record.value) as TState,\n revision: record.revision,\n metadata: {\n driver: 'memory',\n key,\n },\n };\n }\n\n public async save<TState = unknown>(\n reference: TReference,\n value: TState,\n options: DriverSaveOptions = {},\n ): Promise<DriverSaveResult> {\n throwIfAborted(options.signal);\n\n const key = this.options.key(reference);\n\n /*\n * Test synchronization happens BEFORE the atomic CAS\n * section.\n */\n await this.backend.hooks.beforeSave?.(key);\n\n throwIfAborted(options.signal);\n\n /*\n * Atomic CAS section.\n *\n * Do not introduce an await between get/check/set.\n */\n const current = this.backend.records.get(key);\n\n assertExpectedRevision(current?.revision, options.expectedRevision);\n\n const revision = this.backend.nextRevision();\n\n this.backend.records.set(key, {\n value: structuredClone(value),\n revision,\n });\n\n /*\n * Emit synchronously after the record has changed.\n */\n this.backend.emit(key, {\n type: current ? 'updated' : 'created',\n revision,\n });\n\n await this.backend.hooks.afterSave?.(key);\n\n return {\n revision,\n metadata: {\n driver: 'memory',\n key,\n },\n };\n }\n\n public async delete(reference: TReference, options: DriverDeleteOptions = {}): Promise<boolean> {\n throwIfAborted(options.signal);\n\n const key = this.options.key(reference);\n await this.backend.hooks.beforeDelete?.(key);\n\n throwIfAborted(options.signal);\n\n /*\n * Atomic delete CAS section.\n */\n const current = this.backend.records.get(key);\n\n if (!current) {\n if (typeof options.expectedRevision === 'string') {\n throw new RevisionConflictError(options.expectedRevision, undefined);\n }\n\n return false;\n }\n\n assertExpectedRevision(current.revision, options.expectedRevision);\n\n this.backend.records.delete(key);\n\n this.backend.emit(key, {\n type: 'deleted',\n });\n\n await this.backend.hooks.afterDelete?.(key);\n\n return true;\n }\n\n public async *watch(\n reference: TReference,\n options: DriverWatchOptions = {},\n ): AsyncIterable<DriverChange<TReference>> {\n throwIfAborted(options.signal);\n\n const key = this.options.key(reference);\n const queue = this.backend.subscribe(key);\n\n try {\n while (true) {\n const change = await queue.next(options.signal);\n\n switch (change.type) {\n case 'created': {\n yield {\n type: 'created',\n ref: reference,\n revision: change.revision,\n };\n\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n break;\n }\n\n case 'updated': {\n yield {\n type: 'updated',\n ref: reference,\n revision: change.revision,\n };\n\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n break;\n }\n\n case 'deleted': {\n yield {\n type: 'deleted',\n ref: reference,\n };\n\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n break;\n }\n }\n }\n } finally {\n this.backend.unsubscribe(key, queue);\n }\n }\n}\n","import type { StateMachineInstanceDriver, StateMachineInstanceReference } from '@onereach/state-machine-store';\n\nimport { MemoryDocumentDriver } from './generic-driver/generic-driver.ts';\nimport type { MemoryDriverOptions } from './generic-driver/types.ts';\n\nexport class MemoryStateMachineInstanceDriver\n extends MemoryDocumentDriver<StateMachineInstanceReference>\n implements StateMachineInstanceDriver\n{\n constructor(options: MemoryDriverOptions = {}) {\n super({\n key: (reference) => `instance:${reference.id}`,\n backend: options.backend,\n });\n }\n}\n","import type { StateTemplateDriver, StateTemplateReference } from '@onereach/state-machine-store';\n\nimport { MemoryDocumentDriver } from './generic-driver/generic-driver.ts';\nimport { MemoryDriverOptions } from './generic-driver/types.ts';\n\nexport class MemoryStateTemplateDriver\n extends MemoryDocumentDriver<StateTemplateReference>\n implements StateTemplateDriver\n{\n constructor(options: MemoryDriverOptions = {}) {\n super({\n key: (reference) => ['template', reference.id, reference.version ?? 'latest'].join(':'),\n backend: options.backend,\n });\n }\n}\n"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@onereach/state-machine-driver-memory",
3
+ "version": "1.0.0-framework.2",
4
+ "description": "State Machine in-memory driver",
5
+ "keywords": [
6
+ "onereach",
7
+ "toolkit",
8
+ "state-machine"
9
+ ],
10
+ "author": "OneReach Development Team <dev.team@onereach.ai>",
11
+ "license": "Apache-2.0",
12
+ "type": "module",
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "!dist/metafile*.json"
19
+ ],
20
+ "devDependencies": {
21
+ "@arethetypeswrong/core": "^0.18.5",
22
+ "@onereach/state-machine-test-utils": "1.0.0-framework.2",
23
+ "@types/source-map-support": "^0.5.10",
24
+ "publint": "^0.3.24",
25
+ "rollup-plugin-visualizer": "^7.1.1",
26
+ "tsdown": "^0.22.14",
27
+ "typescript": "^6.0.3",
28
+ "vitest": "^4.1.11"
29
+ },
30
+ "dependencies": {
31
+ "@onereach/state-machine-store": "1.0.0-framework.2"
32
+ },
33
+ "exports": {
34
+ ".": "./dist/index.mjs",
35
+ "./package.json": "./package.json"
36
+ },
37
+ "scripts": {
38
+ "build": "tsdown --config tsdown.config.mts",
39
+ "build:visualize": "VISUALIZE=1 pnpm build",
40
+ "preversion_": "pnpm build && pnpm test",
41
+ "publish:rc": "pnpm version prerelease --preid rc && pnpm publish --tag rc",
42
+ "test": "pnpm run unit",
43
+ "unit": "vitest run",
44
+ "preversion": "pnpm build"
45
+ }
46
+ }