@onereach/state-machine-test-utils 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 +3 -0
- package/dist/index.d.mts +22 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +47 -0
package/README.md
ADDED
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { DocumentDriver, DriverConcurrency, DriverWatch } from "@onereach/state-machine-store";
|
|
2
|
+
//#region src/types.d.ts
|
|
3
|
+
interface DriverContractOptions<TReference> {
|
|
4
|
+
name: string;
|
|
5
|
+
createDriver(): DocumentDriver<TReference> | Promise<DocumentDriver<TReference>>;
|
|
6
|
+
createRef(name: string): TReference;
|
|
7
|
+
expectedCapabilities?: {
|
|
8
|
+
concurrency?: DriverConcurrency;
|
|
9
|
+
watch?: DriverWatch;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Some remote/polling drivers may need more time.
|
|
13
|
+
*/
|
|
14
|
+
watchTimeoutMs?: number;
|
|
15
|
+
cleanup?(driver: DocumentDriver<TReference>): void | Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region src/document-driver-contract.d.ts
|
|
19
|
+
declare function documentDriverContract<TReference>(options: DriverContractOptions<TReference>): void;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { type DriverContractOptions, documentDriverContract };
|
|
22
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/document-driver-contract.ts"],"mappings":";;UAEiB,sBAAsB;EACrC;EAEA,gBAAgB,eAAe,cAAc,QAAQ,eAAe;EAEpE,UAAU,eAAe;EAEzB;IACE,cAAc;IACd,QAAQ;;;;;EAMV;EAEA,SAAS,QAAQ,eAAe,qBAAqB;;;;iBCbvC,uBAAuB,YAAY,SAAS,sBAAsB"}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{RevisionConflictError as e}from"@onereach/state-machine-store";import{describe as t,expect as n,it as r}from"vitest";function i(i){t(`${i.name} document driver contract`,()=>{r(`reports expected capabilities`,async()=>{let e=await i.createDriver();try{i.expectedCapabilities?.concurrency&&n(e.capabilities.concurrency).toBe(i.expectedCapabilities.concurrency),i.expectedCapabilities?.watch!==void 0&&n(e.capabilities.watch).toBe(i.expectedCapabilities.watch)}finally{await i.cleanup?.(e)}}),r(`returns undefined for a missing document`,async()=>{let e=await i.createDriver();try{let t=i.createRef(a(`missing`));await n(e.load(t)).resolves.toBeUndefined()}finally{await i.cleanup?.(e)}}),r(`saves and loads a document`,async()=>{let e=await i.createDriver();try{let t=i.createRef(a(`save-load`)),r=await e.save(t,{foo:`bar`,nested:{value:42}},{expectedRevision:null});n(r.revision).toEqual(n.any(String));let o=await e.load(t);n(o).toMatchObject({revision:r.revision,value:{foo:`bar`,nested:{value:42}}})}finally{await i.cleanup?.(e)}}),r(`implements create-only semantics with expectedRevision=null`,async()=>{let t=await i.createDriver();try{let r=i.createRef(a(`create-only`));await t.save(r,{value:1},{expectedRevision:null});let o=t.save(r,{value:2},{expectedRevision:null});await n(o).rejects.toBeInstanceOf(e)}finally{await i.cleanup?.(t)}}),r(`implements compare-and-set semantics`,async()=>{let t=await i.createDriver();try{let r=i.createRef(a(`cas`)),o=await t.save(r,{value:1},{expectedRevision:null}),s=await t.save(r,{value:2},{expectedRevision:o.revision});n(s.revision).not.toBe(o.revision);let c=t.save(r,{value:3},{expectedRevision:o.revision});await n(c).rejects.toBeInstanceOf(e);let l=await t.load(r);n(l?.value).toEqual({value:2})}finally{await i.cleanup?.(t)}}),r(`rejects delete with a stale revision`,async()=>{let t=await i.createDriver();try{let r=i.createRef(a(`stale-delete`)),o=await t.save(r,{value:1},{expectedRevision:null});await t.save(r,{value:2},{expectedRevision:o.revision});let s=t.delete(r,{expectedRevision:o.revision});await n(s).rejects.toBeInstanceOf(e),n(await t.load(r)).toBeDefined()}finally{await i.cleanup?.(t)}}),r(`deletes a document`,async()=>{let e=await i.createDriver();try{let t=i.createRef(a(`delete`)),r=await e.save(t,{value:1},{expectedRevision:null}),o=await e.delete(t,{expectedRevision:r.revision});n(o).toBe(!0),n(await e.load(t)).toBeUndefined(),n(await e.delete(t)).toBe(!1)}finally{await i.cleanup?.(e)}}),r(`does not expose shared object references`,async()=>{let e=await i.createDriver();try{let t=i.createRef(a(`clone`)),r={nested:{count:1}};await e.save(t,r,{expectedRevision:null}),r.nested.count=100;let o=await e.load(t);n(o?.value).toEqual({nested:{count:1}})}finally{await i.cleanup?.(e)}}),i.expectedCapabilities?.watch!==!1&&r(`notifies about create, update and delete`,{timeout:i.watchTimeoutMs??1e4},async()=>{let e=await i.createDriver(),t=new AbortController;try{n(e).toHaveProperty(`watch`,n.any(Function));let r=i.createRef(a(`watch`)),s=e.watch(r,{signal:t.signal})[Symbol.asyncIterator](),c=s.next();await o();let l=await e.save(r,{version:1},{expectedRevision:null}),u=await c;n(u.done).toBe(!1),n(u.value).toMatchObject({type:`created`,revision:l.revision});let d=s.next();await o();let f=await e.save(r,{version:2},{expectedRevision:l.revision}),p=await d;n(p.value).toMatchObject({type:`updated`,revision:f.revision});let m=s.next();await o(),await e.delete(r,{expectedRevision:f.revision});let h=await m;n(h.value).toMatchObject({type:`deleted`}),await s.return?.()}finally{t.abort(),await i.cleanup?.(e)}})})}function a(e){return`${e}-${crypto.randomUUID()}`}function o(){return new Promise(e=>setTimeout(e,0))}export{i as documentDriverContract};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/document-driver-contract.ts"],"sourcesContent":["/* eslint-disable unicorn/no-null */\nimport { RevisionConflictError } from '@onereach/state-machine-store';\nimport { describe, expect, it } from 'vitest';\n\nimport { DriverContractOptions } from './types.ts';\n\nexport function documentDriverContract<TReference>(options: DriverContractOptions<TReference>): void {\n describe(`${options.name} document driver contract`, () => {\n it('reports expected capabilities', async () => {\n const driver = await options.createDriver();\n\n try {\n if (options.expectedCapabilities?.concurrency) {\n expect(driver.capabilities.concurrency).toBe(options.expectedCapabilities.concurrency);\n }\n\n if (options.expectedCapabilities?.watch !== undefined) {\n expect(driver.capabilities.watch).toBe(options.expectedCapabilities.watch);\n }\n } finally {\n await options.cleanup?.(driver);\n }\n });\n\n it('returns undefined for a missing document', async () => {\n const driver = await options.createDriver();\n\n try {\n const reference = options.createRef(uniqueName('missing'));\n\n await expect(driver.load(reference)).resolves.toBeUndefined();\n } finally {\n await options.cleanup?.(driver);\n }\n });\n\n it('saves and loads a document', async () => {\n const driver = await options.createDriver();\n\n try {\n const reference = options.createRef(uniqueName('save-load'));\n\n const saved = await driver.save(\n reference,\n {\n foo: 'bar',\n nested: { value: 42 },\n },\n { expectedRevision: null },\n );\n\n expect(saved.revision).toEqual(expect.any(String));\n\n const loaded = await driver.load(reference);\n expect(loaded).toMatchObject({\n revision: saved.revision,\n value: {\n foo: 'bar',\n nested: { value: 42 },\n },\n });\n } finally {\n await options.cleanup?.(driver);\n }\n });\n\n it('implements create-only semantics with expectedRevision=null', async () => {\n const driver = await options.createDriver();\n\n try {\n const reference = options.createRef(uniqueName('create-only'));\n\n await driver.save(reference, { value: 1 }, { expectedRevision: null });\n const savePromise = driver.save(reference, { value: 2 }, { expectedRevision: null });\n await expect(savePromise).rejects.toBeInstanceOf(RevisionConflictError);\n } finally {\n await options.cleanup?.(driver);\n }\n });\n\n it('implements compare-and-set semantics', async () => {\n const driver = await options.createDriver();\n\n try {\n const reference = options.createRef(uniqueName('cas'));\n\n const first = await driver.save(reference, { value: 1 }, { expectedRevision: null });\n const second = await driver.save(reference, { value: 2 }, { expectedRevision: first.revision });\n\n expect(second.revision).not.toBe(first.revision);\n\n const savePromise = driver.save(reference, { value: 3 }, { expectedRevision: first.revision });\n await expect(savePromise).rejects.toBeInstanceOf(RevisionConflictError);\n\n const final = await driver.load(reference);\n expect(final?.value).toEqual({ value: 2 });\n } finally {\n await options.cleanup?.(driver);\n }\n });\n\n it('rejects delete with a stale revision', async () => {\n const driver = await options.createDriver();\n\n try {\n const reference = options.createRef(uniqueName('stale-delete'));\n\n const first = await driver.save(reference, { value: 1 }, { expectedRevision: null });\n await driver.save(reference, { value: 2 }, { expectedRevision: first.revision });\n\n const deletedPromise = driver.delete(reference, { expectedRevision: first.revision });\n await expect(deletedPromise).rejects.toBeInstanceOf(RevisionConflictError);\n\n expect(await driver.load(reference)).toBeDefined();\n } finally {\n await options.cleanup?.(driver);\n }\n });\n\n it('deletes a document', async () => {\n const driver = await options.createDriver();\n\n try {\n const reference = options.createRef(uniqueName('delete'));\n\n const saved = await driver.save(reference, { value: 1 }, { expectedRevision: null });\n const isDeleteResult = await driver.delete(reference, { expectedRevision: saved.revision });\n expect(isDeleteResult).toBe(true);\n\n expect(await driver.load(reference)).toBeUndefined();\n expect(await driver.delete(reference)).toBe(false);\n } finally {\n await options.cleanup?.(driver);\n }\n });\n\n it('does not expose shared object references', async () => {\n const driver = await options.createDriver();\n\n try {\n const reference = options.createRef(uniqueName('clone'));\n\n const value = {\n nested: { count: 1 },\n };\n\n await driver.save(reference, value, { expectedRevision: null });\n value.nested.count = 100;\n\n const loaded = await driver.load(reference);\n\n expect(loaded?.value).toEqual({ nested: { count: 1 } });\n } finally {\n await options.cleanup?.(driver);\n }\n });\n\n if (options.expectedCapabilities?.watch !== false) {\n it('notifies about create, update and delete', { timeout: options.watchTimeoutMs ?? 10_000 }, async () => {\n const driver = await options.createDriver();\n\n const controller = new AbortController();\n\n try {\n expect(driver).toHaveProperty('watch', expect.any(Function));\n\n const reference = options.createRef(uniqueName('watch'));\n const iterator = driver.watch!(reference, { signal: controller.signal })[Symbol.asyncIterator]();\n\n /*\n * Test the create notification.\n *\n * Start next() before modifying storage so\n * the watcher is actually listening.\n */\n const createdPromise = iterator.next();\n\n /*\n * Give the async generator a turn to register\n * the watcher.\n */\n await nextTurn();\n\n const createdSave = await driver.save(reference, { version: 1 }, { expectedRevision: null });\n const created = await createdPromise;\n expect(created.done).toBe(false);\n expect(created.value).toMatchObject({\n type: 'created',\n revision: createdSave.revision,\n });\n\n /*\n * Test the update notification.\n */\n const updatedPromise = iterator.next();\n await nextTurn();\n const updatedSave = await driver.save(reference, { version: 2 }, { expectedRevision: createdSave.revision });\n const updated = await updatedPromise;\n\n expect(updated.value).toMatchObject({\n type: 'updated',\n revision: updatedSave.revision,\n });\n\n /*\n * Test the delete notification.\n */\n const deletedPromise = iterator.next();\n await nextTurn();\n await driver.delete(reference, { expectedRevision: updatedSave.revision });\n const deleted = await deletedPromise;\n expect(deleted.value).toMatchObject({\n type: 'deleted',\n });\n\n await iterator.return?.();\n } finally {\n controller.abort();\n await options.cleanup?.(driver);\n }\n });\n }\n });\n}\n\nfunction uniqueName(prefix: string): string {\n return `${prefix}-${crypto.randomUUID()}`;\n}\n\nfunction nextTurn(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 0));\n}\n"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@onereach/state-machine-test-utils",
|
|
3
|
+
"version": "1.0.0-framework.2",
|
|
4
|
+
"description": "State Machine test utilities to support driver development",
|
|
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
|
+
"@types/source-map-support": "^0.5.10",
|
|
23
|
+
"publint": "^0.3.24",
|
|
24
|
+
"rollup-plugin-visualizer": "^7.1.1",
|
|
25
|
+
"tsdown": "^0.22.14",
|
|
26
|
+
"typescript": "^6.0.3"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@onereach/state-machine-store": "1.0.0-framework.2"
|
|
30
|
+
},
|
|
31
|
+
"peerDependencies": {
|
|
32
|
+
"vitest": "^4.1.11"
|
|
33
|
+
},
|
|
34
|
+
"exports": {
|
|
35
|
+
".": "./dist/index.mjs",
|
|
36
|
+
"./package.json": "./package.json"
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "tsdown --config tsdown.config.mts",
|
|
40
|
+
"build:visualize": "VISUALIZE=1 pnpm build",
|
|
41
|
+
"preversion_": "pnpm build && pnpm test",
|
|
42
|
+
"publish:rc": "pnpm version prerelease --preid rc && pnpm publish --tag rc",
|
|
43
|
+
"test": "pnpm run unit",
|
|
44
|
+
"unit": "vitest run",
|
|
45
|
+
"preversion": "pnpm build"
|
|
46
|
+
}
|
|
47
|
+
}
|