@mantaq/core 0.2.0 → 0.4.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantaq/core",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "State machine runtime with actor model, event system, state hierarchy, effects, and virtual clock.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -12,16 +12,16 @@
12
12
  "dist"
13
13
  ],
14
14
  "type": "module",
15
+ "sideEffects": false,
15
16
  "exports": {
16
17
  ".": "./dist/index.mjs",
17
- "./internal": "./dist/internal.mjs",
18
18
  "./package.json": "./package.json"
19
19
  },
20
20
  "publishConfig": {
21
21
  "access": "public"
22
22
  },
23
23
  "dependencies": {
24
- "@mantaq/utils": "0.0.2"
24
+ "@mantaq/utils": "0.0.4"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@stryker-mutator/core": "^9",
@@ -29,11 +29,11 @@
29
29
  "@types/node": "^26.2.0",
30
30
  "@typescript/native-preview": "7.0.0-dev.20260707.2",
31
31
  "@vitest/coverage-v8": "4.1.10",
32
- "typescript": "^6.0.3",
32
+ "typescript": "6.0.3",
33
33
  "vite": "npm:@voidzero-dev/vite-plus-core@0.2.8",
34
34
  "vite-plus": "0.2.8",
35
35
  "vitest": "4.1.10",
36
- "@mantaq/pbt": "0.0.2"
36
+ "@mantaq/pbt": "0.0.3"
37
37
  },
38
38
  "scripts": {
39
39
  "build": "vp pack",
@@ -1,152 +0,0 @@
1
- //#region src/state.d.ts
2
- declare function state<const T extends string>(id: T): <Payload = unknown>() => StateRef<T, Payload, false>;
3
- type AnyStateRef = StateRef<string, unknown, boolean>;
4
- interface RegionOptions {
5
- initial: string;
6
- states: Record<string, AnyStateRef>;
7
- }
8
- type RegionsOptions = Record<string, RegionOptions>;
9
- declare class StateRef<T extends string, Payload = unknown, IsFinal extends boolean = false> {
10
- readonly name: T;
11
- readonly isFinal: IsFinal;
12
- /** @internal */ _regions: RegionsOptions | undefined;
13
- constructor(name: T, isFinal: IsFinal);
14
- regions(options: RegionsOptions): this;
15
- final(): StateRef<T, Payload, true>;
16
- create(payload: Payload): {
17
- state: StateRef<T, Payload, IsFinal>;
18
- payload: Payload;
19
- };
20
- }
21
- //#endregion
22
- //#region src/event.d.ts
23
- declare function event<const T extends string>(type: T): <Payload extends object | void = void>() => EventRef<T, Payload>;
24
- type AnyEventRef = EventRef<string, object | void>;
25
- type InternalEvent = {
26
- type: string;
27
- payload?: unknown;
28
- };
29
- type CreatedOfEvent<T extends string, P> = P extends void ? {
30
- type: T;
31
- } : {
32
- type: T;
33
- payload: P;
34
- };
35
- declare class EventRef<const T extends string, Payload extends object | void = void> {
36
- readonly type: T;
37
- constructor(type: T);
38
- is(anyEvent: unknown): anyEvent is CreatedOfEvent<T, Payload>;
39
- create(): Payload extends void ? {
40
- type: T;
41
- } : void;
42
- create(payload: Payload): Payload extends void ? {
43
- type: T;
44
- } : {
45
- type: T;
46
- payload: Payload;
47
- };
48
- }
49
- //#endregion
50
- //#region src/clock.d.ts
51
- interface Clock {
52
- setTimeout(ms: number, cb: () => void, options?: {
53
- signal?: AbortSignal;
54
- eventName?: string;
55
- }): number;
56
- clearTimeout(id: number): void;
57
- setInterval(ms: number, cb: () => void, options?: {
58
- signal?: AbortSignal;
59
- }): number;
60
- clearInterval(id: number): void;
61
- now(): number;
62
- /** Optional hook for draining queues after clock advances (VirtualClock). */
63
- setDrain?(fn: () => void): void;
64
- }
65
- //#endregion
66
- //#region src/context.d.ts
67
- declare class Context<T> {
68
- #private;
69
- constructor(get: () => T, set: (value: T) => void);
70
- get(): T;
71
- set(value: T): void;
72
- }
73
- //#endregion
74
- //#region src/actor-types.d.ts
75
- type CreatedOf<E extends AnyEventRef> = E extends EventRef<infer Type, infer P> ? CreatedOfEvent<Type, P> : never;
76
- type NonFinalStateRef<States extends AnyStateRef[]> = Extract<States[number], {
77
- isFinal: false;
78
- }>;
79
- interface EffectInput<ActorContext, Payload = unknown> {
80
- signal: AbortSignal;
81
- state: {
82
- name: string;
83
- payload: Payload;
84
- };
85
- event: InternalEvent;
86
- context: Context<ActorContext>;
87
- emit: (event: InternalEvent) => void;
88
- clock: Clock;
89
- }
90
- type EffectFn<ActorContext, Payload = unknown> = (input: EffectInput<ActorContext, Payload>) => void | Promise<void>;
91
- type ErrorReason = "transition" | "effect" | "budget" | "output" | "internal" | "async" | "unhandled";
92
- interface ErrorInfo {
93
- error: unknown;
94
- state: AnyStateRef;
95
- context: unknown;
96
- event: InternalEvent;
97
- reason: ErrorReason;
98
- }
99
- interface TransitionInfo {
100
- event: InternalEvent;
101
- from: string;
102
- to: string;
103
- transitioned: boolean;
104
- }
105
- type ErrorState = StateRef<"__error", unknown, true>;
106
- type TransitionResult<AllowedState extends AnyStateRef = AnyStateRef, AllowedEmit extends string = string> = {
107
- state?: AllowedState | {
108
- state: AllowedState;
109
- payload?: unknown;
110
- };
111
- payload?: unknown;
112
- emit?: Array<{
113
- type: AllowedEmit;
114
- payload?: unknown;
115
- }>;
116
- };
117
- //#endregion
118
- //#region src/actor-internal.d.ts
119
- interface Snapshot<C = unknown> {
120
- path: string[];
121
- context: C;
122
- payload?: unknown;
123
- regions: Record<string, Snapshot<unknown>>;
124
- done?: boolean;
125
- error?: ErrorInfo;
126
- }
127
- interface AnyActor<C = Record<string, unknown>> {
128
- state: AnyStateRef;
129
- clock: Clock;
130
- regions: Record<string, AnyActor>;
131
- send(event: AnyEventRef | InternalEvent): void;
132
- snapshot(): Snapshot<C>;
133
- on(event: "change", fn: (snapshot: Snapshot<C>, prev: Snapshot<C>) => void): () => void;
134
- on(event: "done", fn: () => void): () => void;
135
- on(event: "transition", fn: (info: TransitionInfo) => void): () => void;
136
- recover(target: {
137
- state: AnyStateRef;
138
- context: C;
139
- }): void;
140
- settled(): Promise<void>;
141
- context?: C;
142
- options?: {
143
- transitions?: Record<string, Record<string, unknown>>;
144
- effects?: Record<string, unknown[]>;
145
- states?: ReadonlyArray<{
146
- name: string;
147
- isFinal: boolean;
148
- }>;
149
- };
150
- }
151
- //#endregion
152
- export { InternalEvent as _, EffectInput as a, StateRef as b, ErrorState as c, TransitionResult as d, Context as f, EventRef as g, CreatedOfEvent as h, EffectFn as i, NonFinalStateRef as l, AnyEventRef as m, Snapshot as n, ErrorInfo as o, Clock as p, CreatedOf as r, ErrorReason as s, AnyActor as t, TransitionInfo as u, event as v, state as x, AnyStateRef as y };
@@ -1,26 +0,0 @@
1
- import { _ as InternalEvent, t as AnyActor } from "./actor-internal-B4iAxUG_.mjs";
2
- import { Either } from "@mantaq/utils";
3
- //#region src/internal-registry.d.ts
4
- interface ActorInternal {
5
- children: Map<string, AnyActor>;
6
- getOutputHandler(): ((event: InternalEvent) => void) | null;
7
- setOutputHandler(fn: ((event: InternalEvent) => void) | null): void;
8
- pushInternal(event: InternalEvent): void;
9
- drainInternal(): void;
10
- abortEffects(): void;
11
- }
12
- interface RegistryError {
13
- message: string;
14
- }
15
- declare global {
16
- var __mantaqCoreInternalRegistry: WeakMap<object, ActorInternal> | undefined;
17
- }
18
- declare function registerActor(actor: object, internal: ActorInternal): void;
19
- declare function getChildren(actor: object): Either<RegistryError, Map<string, AnyActor>>;
20
- declare function getOutputHandler(actor: object): Either<RegistryError, ((event: InternalEvent) => void) | null>;
21
- declare function setOutputHandler(actor: object, fn: ((event: InternalEvent) => void) | null): Either<RegistryError, void>;
22
- declare function pushInternal(actor: object, event: InternalEvent): Either<RegistryError, void>;
23
- declare function drainInternal(actor: object): Either<RegistryError, void>;
24
- declare function abortEffects(actor: object): Either<RegistryError, void>;
25
- //#endregion
26
- export { ActorInternal, RegistryError, abortEffects, drainInternal, getChildren, getOutputHandler, pushInternal, registerActor, setOutputHandler };
package/dist/internal.mjs DELETED
@@ -1,31 +0,0 @@
1
- import { Either } from "@mantaq/utils";
2
- //#region src/internal-registry.ts
3
- const registry = globalThis.__mantaqCoreInternalRegistry ??= /* @__PURE__ */ new WeakMap();
4
- const UNREGISTERED = { message: "[mantaq] actor is not registered with the internal registry" };
5
- function withInternal(actor, fn) {
6
- const internal = registry.get(actor);
7
- return internal === void 0 ? Either.left(UNREGISTERED) : [void 0, fn(internal)];
8
- }
9
- function registerActor(actor, internal) {
10
- registry.set(actor, internal);
11
- }
12
- function getChildren(actor) {
13
- return withInternal(actor, (internal) => internal.children);
14
- }
15
- function getOutputHandler(actor) {
16
- return withInternal(actor, (internal) => internal.getOutputHandler());
17
- }
18
- function setOutputHandler(actor, fn) {
19
- return withInternal(actor, (internal) => internal.setOutputHandler(fn));
20
- }
21
- function pushInternal(actor, event) {
22
- return withInternal(actor, (internal) => internal.pushInternal(event));
23
- }
24
- function drainInternal(actor) {
25
- return withInternal(actor, (internal) => internal.drainInternal());
26
- }
27
- function abortEffects(actor) {
28
- return withInternal(actor, (internal) => internal.abortEffects());
29
- }
30
- //#endregion
31
- export { abortEffects, drainInternal, getChildren, getOutputHandler, pushInternal, registerActor, setOutputHandler };