@vielzeug/clockwork 26.11.5 → 26.11.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/dist/_dev.js CHANGED
@@ -1,6 +1,5 @@
1
- //#region src/_dev.ts
1
+ // src/_dev.ts
2
2
  function warn(e) {}
3
- //#endregion
4
3
  export { warn };
5
4
 
6
5
  //# sourceMappingURL=_dev.js.map
package/dist/clockwork.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { tapper as e } from "@vielzeug/arsenal";
2
- //#region src/errors.ts
2
+ // src/errors.ts
3
3
  var ClockworkError = class extends Error {
4
4
  details;
5
5
  constructor(e, t = {}, n) {
@@ -283,7 +283,6 @@ var ClockworkError = class extends Error {
283
283
  }).result
284
284
  };
285
285
  };
286
- //#endregion
287
286
  export { ClockworkDefinitionError, ClockworkError, ClockworkSnapshotError, ClockworkTransitionLimitError, defineMachine };
288
287
 
289
288
  //# sourceMappingURL=clockwork.js.map
package/dist/errors.js CHANGED
@@ -1,11 +1,10 @@
1
- //#region src/errors.ts
1
+ // src/errors.ts
2
2
  var ClockworkError = class extends Error {
3
3
  details;
4
4
  constructor(e, t = {}, n) {
5
5
  super(e, n), this.name = new.target.name, this.details = Object.freeze({ ...t }), Object.setPrototypeOf(this, new.target.prototype);
6
6
  }
7
7
  }, ClockworkDefinitionError = class extends ClockworkError {}, ClockworkSnapshotError = class extends ClockworkError {}, ClockworkTransitionLimitError = class extends ClockworkError {};
8
- //#endregion
9
8
  export { ClockworkDefinitionError, ClockworkError, ClockworkSnapshotError, ClockworkTransitionLimitError };
10
9
 
11
10
  //# sourceMappingURL=errors.js.map
@@ -1,2 +1,2 @@
1
- const e=require("./errors.cjs");require("./_dev.cjs");let t=require("@vielzeug/arsenal");var n=2147483647,r=1e3,isContextRecord=e=>{if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype},assertDefinition=t=>{let r=t.context;if(r!==void 0&&!isContextRecord(r))throw new e.ClockworkDefinitionError(`machine context must be a non-array object record`,{});for(let[r,i]of Object.entries(t.states)){for(let[t,n]of Object.entries(i.on??{}))if(Array.isArray(n)&&n.length===0)throw new e.ClockworkDefinitionError(`a transition array must not be empty`,{state:r,type:t});for(let[t,a]of(i.after??[]).entries())if(!Number.isFinite(a.delay)||a.delay<0||a.delay>n)throw new e.ClockworkDefinitionError(`state "${r}" after delay must be between 0 and ${n}`,{delay:a.delay,index:t,state:r})}},createSnapshot=(e,t)=>{let n=Object.assign(Object.create(Object.getPrototypeOf(t)),t);return Object.freeze({context:Object.freeze(n),state:e})},normalizeSnapshot=e=>Object.isFrozen(e)&&Object.isFrozen(e.context)?e:createSnapshot(e.state,e.context),invalidSnapshot=t=>{throw new e.ClockworkSnapshotError(`snapshot state "${String(t)}" is not declared`,{state:t})},isMachineEvent=e=>typeof e==`object`&&!!e&&typeof e.type==`string`,nodeFor=(e,t)=>Object.hasOwn(e.states,t)?e.states[t]:invalidSnapshot(t),assertSnapshot=(t,n)=>{if(!isContextRecord(n.context))throw new e.ClockworkSnapshotError(`snapshot context must be a non-array object record`,{});nodeFor(t,n.state)},selectTransition=(e,t,n)=>{assertSnapshot(e,t);let r=nodeFor(e,t.state);if(n.kind===`after`)return!r.after||!r.after.includes(n.after)?void 0:!n.after.guard||n.after.guard({context:t.context,event:void 0})?{event:void 0,transition:n.after}:void 0;let i=r.on;if(!i||!Object.hasOwn(i,n.event.type))return;let a=i[n.event.type],o=Array.isArray(a)?a:[a];for(let e of o)if(!e.guard||e.guard({context:t.context,event:n.event}))return{event:n.event,transition:e}},transition=(t,n,r)=>{let i=selectTransition(t,n,r);if(!i)return{event:r.kind===`event`?r.event:void 0,result:{snapshot:normalizeSnapshot(n),type:`ignored`}};let a=i.transition.reduce?i.transition.reduce({context:n.context,event:i.event}):n.context;if(!isContextRecord(a))throw new e.ClockworkSnapshotError(`a reducer must return a non-array object record`,{state:n.state});return{event:i.event,result:{snapshot:createSnapshot(i.transition.target,a),type:`transition`},transition:i.transition}},canTransition=(e,t,n)=>selectTransition(e,t,{event:n,kind:`event`})!==void 0,createActor=(n,i,a={})=>{let o=a.snapshot??i;assertSnapshot(n,o);let s=createSnapshot(o.state,o.context),c=new Set,l=(0,t.tapper)(),u=new AbortController,d=new Set,f=new Set,p=[],m=!1,h=!1,cancelStateResources=()=>{for(let e of d)clearTimeout(e);d.clear();for(let e of f)e.abort();f.clear()},dispose=()=>{m||(m=!0,p.length=0,cancelStateResources(),c.clear(),l.emit({type:`dispose`}),l.clear(),u.abort())},observeError=(e,t)=>{l.emit({error:e,event:t.event,phase:t.phase,state:t.state,type:`error`})},fail=(e,t)=>{observeError(e,t),dispose()},run=e=>{if(!m){if(h)p.push(e);else{h=!0;try{process(e),flush()}finally{h=!1}}}},send=e=>{m||isMachineEvent(e)&&run({event:e,kind:`event`})},runEffects=(e,t,n)=>{for(let r of e){if(m)return;try{r({context:s.context,event:n,send,signal:u.signal})}catch(e){fail(e,{event:n,phase:`effect`,state:t})}}},establishStateResources=(e,t)=>{let r=nodeFor(n,e);for(let e of r.after??[]){let t=setTimeout(()=>{d.delete(t),run({after:e,kind:`after`})},e.delay);d.add(t)}for(let n of r.invoke??[]){let r=new AbortController;f.add(r);let i=s.context,a=t;Promise.resolve().then(()=>n.src({context:i,event:a,signal:r.signal})).then(t=>{if(f.delete(r),!(m||r.signal.aborted||!n.onDone))try{send(n.onDone({context:i,result:t}))}catch(t){fail(t,{event:a,phase:`invoke`,state:e})}},t=>{if(f.delete(r),!(m||r.signal.aborted))try{n.onError?send(n.onError({context:i,error:t})):fail(t,{event:a,phase:`invoke`,state:e})}catch(t){fail(t,{event:a,phase:`invoke`,state:e})}})}},notify=e=>{for(let t of[...c]){if(m)return;try{t(s)}catch(t){observeError(t,{event:e,phase:`subscriber`,state:s.state})}}},process=e=>{let t=s,r;try{r=transition(n,s,e)}catch(t){fail(t,{event:e.kind===`event`?e.event:void 0,phase:`transition`,state:s.state});return}if(r.result.type===`ignored`||!r.transition){l.emit({event:r.event,snapshot:r.result.snapshot,type:`ignored`});return}let i=nodeFor(n,t.state);s=r.result.snapshot,l.emit({event:r.event,snapshot:s,type:`transition`}),cancelStateResources(),establishStateResources(s.state,r.event),notify(r.event),runEffects(i.exit??[],t.state,r.event),runEffects(r.transition.effects??[],t.state,r.event),runEffects(nodeFor(n,s.state).entry??[],s.state,r.event)},flush=()=>{let t=0;for(;p.length>0&&!m;){if(t+=1,t>r){fail(new e.ClockworkTransitionLimitError(`maximum queued transitions exceeded`,{maxTransitions:r}),{phase:`transition`,state:s.state});return}let n=p.shift();n&&process(n)}};return establishStateResources(s.state,void 0),a.snapshot||runEffects(nodeFor(n,s.state).entry??[],s.state,void 0),{can:e=>{if(m)return!1;try{return isMachineEvent(e)?canTransition(n,s,e):!1}catch(t){return fail(t,{event:e,phase:`transition`,state:s.state}),!1}},get disposalSignal(){return u.signal},dispose,get disposed(){return m},send,get snapshot(){return s},subscribe(e){return m?()=>void 0:(c.add(e),()=>c.delete(e))},tap(e,t){return m?()=>void 0:l.tap(e,t)},[Symbol.dispose]:dispose}},defineMachine=()=>e=>{assertDefinition(e);let t=e.context??{},n=createSnapshot(e.initial,t);return{can:(t,n)=>canTransition(e,t,n),createActor:t=>createActor(e,n,t),initialSnapshot:n,transition:(t,n)=>transition(e,t,{event:n,kind:`event`}).result}};exports.defineMachine=defineMachine;
1
+ require("./_dev.cjs");const e=require("./errors.cjs");let t=require("@vielzeug/arsenal");var n=2147483647,r=1e3,isContextRecord=e=>{if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype},assertDefinition=t=>{let r=t.context;if(r!==void 0&&!isContextRecord(r))throw new e.ClockworkDefinitionError(`machine context must be a non-array object record`,{});for(let[r,i]of Object.entries(t.states)){for(let[t,n]of Object.entries(i.on??{}))if(Array.isArray(n)&&n.length===0)throw new e.ClockworkDefinitionError(`a transition array must not be empty`,{state:r,type:t});for(let[t,a]of(i.after??[]).entries())if(!Number.isFinite(a.delay)||a.delay<0||a.delay>n)throw new e.ClockworkDefinitionError(`state "${r}" after delay must be between 0 and ${n}`,{delay:a.delay,index:t,state:r})}},createSnapshot=(e,t)=>{let n=Object.assign(Object.create(Object.getPrototypeOf(t)),t);return Object.freeze({context:Object.freeze(n),state:e})},normalizeSnapshot=e=>Object.isFrozen(e)&&Object.isFrozen(e.context)?e:createSnapshot(e.state,e.context),invalidSnapshot=t=>{throw new e.ClockworkSnapshotError(`snapshot state "${String(t)}" is not declared`,{state:t})},isMachineEvent=e=>typeof e==`object`&&!!e&&typeof e.type==`string`,nodeFor=(e,t)=>Object.hasOwn(e.states,t)?e.states[t]:invalidSnapshot(t),assertSnapshot=(t,n)=>{if(!isContextRecord(n.context))throw new e.ClockworkSnapshotError(`snapshot context must be a non-array object record`,{});nodeFor(t,n.state)},selectTransition=(e,t,n)=>{assertSnapshot(e,t);let r=nodeFor(e,t.state);if(n.kind===`after`)return!r.after||!r.after.includes(n.after)?void 0:!n.after.guard||n.after.guard({context:t.context,event:void 0})?{event:void 0,transition:n.after}:void 0;let i=r.on;if(!i||!Object.hasOwn(i,n.event.type))return;let a=i[n.event.type],o=Array.isArray(a)?a:[a];for(let e of o)if(!e.guard||e.guard({context:t.context,event:n.event}))return{event:n.event,transition:e}},transition=(t,n,r)=>{let i=selectTransition(t,n,r);if(!i)return{event:r.kind===`event`?r.event:void 0,result:{snapshot:normalizeSnapshot(n),type:`ignored`}};let a=i.transition.reduce?i.transition.reduce({context:n.context,event:i.event}):n.context;if(!isContextRecord(a))throw new e.ClockworkSnapshotError(`a reducer must return a non-array object record`,{state:n.state});return{event:i.event,result:{snapshot:createSnapshot(i.transition.target,a),type:`transition`},transition:i.transition}},canTransition=(e,t,n)=>selectTransition(e,t,{event:n,kind:`event`})!==void 0,createActor=(n,i,a={})=>{let o=a.snapshot??i;assertSnapshot(n,o);let s=createSnapshot(o.state,o.context),c=new Set,l=(0,t.tapper)(),u=new AbortController,d=new Set,f=new Set,p=[],m=!1,h=!1,cancelStateResources=()=>{for(let e of d)clearTimeout(e);d.clear();for(let e of f)e.abort();f.clear()},dispose=()=>{m||(m=!0,p.length=0,cancelStateResources(),c.clear(),l.emit({type:`dispose`}),l.clear(),u.abort())},observeError=(e,t)=>{l.emit({error:e,event:t.event,phase:t.phase,state:t.state,type:`error`})},fail=(e,t)=>{observeError(e,t),dispose()},run=e=>{if(!m){if(h)p.push(e);else{h=!0;try{process(e),flush()}finally{h=!1}}}},send=e=>{m||isMachineEvent(e)&&run({event:e,kind:`event`})},runEffects=(e,t,n)=>{for(let r of e){if(m)return;try{r({context:s.context,event:n,send,signal:u.signal})}catch(e){fail(e,{event:n,phase:`effect`,state:t})}}},establishStateResources=(e,t)=>{let r=nodeFor(n,e);for(let e of r.after??[]){let t=setTimeout(()=>{d.delete(t),run({after:e,kind:`after`})},e.delay);d.add(t)}for(let n of r.invoke??[]){let r=new AbortController;f.add(r);let i=s.context,a=t;Promise.resolve().then(()=>n.src({context:i,event:a,signal:r.signal})).then(t=>{if(f.delete(r),!(m||r.signal.aborted||!n.onDone))try{send(n.onDone({context:i,result:t}))}catch(t){fail(t,{event:a,phase:`invoke`,state:e})}},t=>{if(f.delete(r),!(m||r.signal.aborted))try{n.onError?send(n.onError({context:i,error:t})):fail(t,{event:a,phase:`invoke`,state:e})}catch(t){fail(t,{event:a,phase:`invoke`,state:e})}})}},notify=e=>{for(let t of[...c]){if(m)return;try{t(s)}catch(t){observeError(t,{event:e,phase:`subscriber`,state:s.state})}}},process=e=>{let t=s,r;try{r=transition(n,s,e)}catch(t){fail(t,{event:e.kind===`event`?e.event:void 0,phase:`transition`,state:s.state});return}if(r.result.type===`ignored`||!r.transition){l.emit({event:r.event,snapshot:r.result.snapshot,type:`ignored`});return}let i=nodeFor(n,t.state);s=r.result.snapshot,l.emit({event:r.event,snapshot:s,type:`transition`}),cancelStateResources(),establishStateResources(s.state,r.event),notify(r.event),runEffects(i.exit??[],t.state,r.event),runEffects(r.transition.effects??[],t.state,r.event),runEffects(nodeFor(n,s.state).entry??[],s.state,r.event)},flush=()=>{let t=0;for(;p.length>0&&!m;){if(t+=1,t>r){fail(new e.ClockworkTransitionLimitError(`maximum queued transitions exceeded`,{maxTransitions:r}),{phase:`transition`,state:s.state});return}let n=p.shift();n&&process(n)}};return establishStateResources(s.state,void 0),a.snapshot||runEffects(nodeFor(n,s.state).entry??[],s.state,void 0),{can:e=>{if(m)return!1;try{return isMachineEvent(e)?canTransition(n,s,e):!1}catch(t){return fail(t,{event:e,phase:`transition`,state:s.state}),!1}},get disposalSignal(){return u.signal},dispose,get disposed(){return m},send,get snapshot(){return s},subscribe(e){return m?()=>void 0:(c.add(e),()=>c.delete(e))},tap(e,t){return m?()=>void 0:l.tap(e,t)},[Symbol.dispose]:dispose}},defineMachine=()=>e=>{assertDefinition(e);let t=e.context??{},n=createSnapshot(e.initial,t);return{can:(t,n)=>canTransition(e,t,n),createActor:t=>createActor(e,n,t),initialSnapshot:n,transition:(t,n)=>transition(e,t,{event:n,kind:`event`}).result}};exports.defineMachine=defineMachine;
2
2
  //# sourceMappingURL=interpret.cjs.map
package/dist/interpret.js CHANGED
@@ -1,7 +1,7 @@
1
- import { ClockworkDefinitionError as e, ClockworkSnapshotError as t, ClockworkTransitionLimitError as n } from "./errors.js";
2
1
  import "./_dev.js";
2
+ import { ClockworkDefinitionError as e, ClockworkSnapshotError as t, ClockworkTransitionLimitError as n } from "./errors.js";
3
3
  import { tapper as r } from "@vielzeug/arsenal";
4
- //#region src/interpret.ts
4
+ // src/interpret.ts
5
5
  var i = 2147483647, a = 1e3, isContextRecord = (e) => {
6
6
  if (typeof e != "object" || !e || Array.isArray(e)) return !1;
7
7
  let t = Object.getPrototypeOf(e);
@@ -280,7 +280,6 @@ var i = 2147483647, a = 1e3, isContextRecord = (e) => {
280
280
  }).result
281
281
  };
282
282
  };
283
- //#endregion
284
283
  export { defineMachine };
285
284
 
286
285
  //# sourceMappingURL=interpret.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vielzeug/clockwork",
3
- "version": "26.11.5",
3
+ "version": "26.11.6",
4
4
  "description": "Framework-neutral finite state machines with pure transitions and actors",
5
5
  "repository": {
6
6
  "type": "git",
@@ -31,22 +31,22 @@
31
31
  "registry": "https://registry.npmjs.org/"
32
32
  },
33
33
  "scripts": {
34
- "build": "vite build && pnpm --silent run build:bundle && pnpm --silent run build:types && pnpm --silent run verify:exports",
34
+ "build": "vite build && bun run --silent build:bundle && bun run --silent build:types && bun run --silent verify:exports",
35
35
  "build:bundle": "vite build --config vite.bundle.config.ts",
36
36
  "build:types": "tsc -p tsconfig.declarations.json",
37
37
  "fix": "biome check --write src",
38
38
  "lint": "biome ci src",
39
- "prepublishOnly": "pnpm --silent run build",
39
+ "prepublishOnly": "bun run --silent build",
40
40
  "test": "vitest",
41
- "verify:exports": "node verify-exports.mjs"
41
+ "verify:exports": "bun verify-exports.mjs"
42
42
  },
43
43
  "dependencies": {
44
- "@vielzeug/arsenal": "26.11.5"
44
+ "@vielzeug/arsenal": "26.11.6"
45
45
  },
46
46
  "devDependencies": {
47
- "@types/node": "^26.6.5",
47
+ "@types/node": "^26.6.6",
48
48
  "typescript": "^6.0.3",
49
- "vite": "^8.3.4",
50
- "vitest": "^5.0.5"
49
+ "vite": "^8.3.6",
50
+ "vitest": "^5.1.0"
51
51
  }
52
52
  }