@hozu/machine 0.1.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/LICENSE +21 -0
- package/README.md +15 -0
- package/dist/compile.d.ts +9 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +177 -0
- package/dist/compile.js.map +1 -0
- package/dist/data.d.ts +6 -0
- package/dist/data.d.ts.map +1 -0
- package/dist/data.js +65 -0
- package/dist/data.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/transition.d.ts +6 -0
- package/dist/transition.d.ts.map +1 -0
- package/dist/transition.js +65 -0
- package/dist/transition.js.map +1 -0
- package/dist/types.d.ts +87 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +45 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 olevatorr
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# @hozu/machine
|
|
2
|
+
|
|
3
|
+
Isomorphic compiled state-machine interpreter behind Hozu features.
|
|
4
|
+
|
|
5
|
+
Part of [Hozu](https://github.com/olevatorr/Hozu#readme), an AI-first web framework. Most apps start from
|
|
6
|
+
`npm create hozu@latest`, which installs the right packages and sets up Claude Code or `AGENTS.md` agents.
|
|
7
|
+
|
|
8
|
+
```sh
|
|
9
|
+
npm install @hozu/machine
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Requires Node 22.18 or newer. Documentation: the [README](https://github.com/olevatorr/Hozu#readme) and the
|
|
13
|
+
agent skill that `create-hozu` writes into each app.
|
|
14
|
+
|
|
15
|
+
MIT © olevatorr
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { FeatureIR, GuardExpr, ValueExpr } from '@hozu/core/ir';
|
|
2
|
+
import type { CompiledMachine, Fns, Getter, Test } from './types.ts';
|
|
3
|
+
export declare class CompileError extends Error {
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function compileValue(v: ValueExpr, fns: Fns): Getter;
|
|
7
|
+
export declare function compileGuard(g: GuardExpr, fns: Fns): Test;
|
|
8
|
+
export declare function compileMachine(feature: FeatureIR, fns?: Fns, routes?: Record<string, string>): CompiledMachine;
|
|
9
|
+
//# sourceMappingURL=compile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,SAAS,EAAE,SAAS,EAAsB,SAAS,EAAE,MAAM,eAAe,CAAA;AAElG,OAAO,KAAK,EACV,eAAe,EAGf,GAAG,EACH,MAAM,EACN,IAAI,EAEL,MAAM,YAAY,CAAA;AAEnB,qBAAa,YAAa,SAAQ,KAAK;IAC5B,IAAI,SAAiB;CAC/B;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,CAyC3D;AAID,wBAAgB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,CAEzD;AAkFD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,SAAS,EAClB,GAAG,GAAE,GAAQ,EACb,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAClC,eAAe,CA8DjB"}
|
package/dist/compile.js
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { equal, getIn, pathOf, setIn } from './data.js';
|
|
2
|
+
export class CompileError extends Error {
|
|
3
|
+
name = 'CompileError';
|
|
4
|
+
}
|
|
5
|
+
export function compileValue(v, fns) {
|
|
6
|
+
if ('literal' in v) {
|
|
7
|
+
const literal = v.literal;
|
|
8
|
+
return () => literal;
|
|
9
|
+
}
|
|
10
|
+
if ('object' in v) {
|
|
11
|
+
const entries = Object.entries(v.object).map(([k, x]) => [k, compileValue(x, fns)]);
|
|
12
|
+
return (env) => {
|
|
13
|
+
const out = {};
|
|
14
|
+
for (const [k, get] of entries)
|
|
15
|
+
out[k] = get(env);
|
|
16
|
+
return out;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
if ('fn' in v) {
|
|
20
|
+
const impl = fns[v.fn];
|
|
21
|
+
if (!impl)
|
|
22
|
+
throw new CompileError(`No implementation bound for fn ${v.fn}`);
|
|
23
|
+
const arg = compileValue(v.arg, fns);
|
|
24
|
+
return (env) => impl(arg(env));
|
|
25
|
+
}
|
|
26
|
+
if ('link' in v) {
|
|
27
|
+
const id = v.link;
|
|
28
|
+
const params = compileValue(v.params, fns);
|
|
29
|
+
const search = compileValue(v.search, fns);
|
|
30
|
+
return (env) => pathOf(env.routes?.[id] ?? '', params(env), search(env));
|
|
31
|
+
}
|
|
32
|
+
if ('test' in v) {
|
|
33
|
+
const test = guard(v.test, fns);
|
|
34
|
+
return (env) => test(env);
|
|
35
|
+
}
|
|
36
|
+
const { path } = v;
|
|
37
|
+
if (v.ref === 'binding') {
|
|
38
|
+
const depth = v.depth;
|
|
39
|
+
return path.length ? (env) => getIn(env.bindings?.[depth], path) : (env) => env.bindings?.[depth] ?? null;
|
|
40
|
+
}
|
|
41
|
+
if (v.ref === 'dom') {
|
|
42
|
+
const [field, ...rest] = path;
|
|
43
|
+
return (env) => (env.dom && field ? getIn(env.dom(field), rest) : null);
|
|
44
|
+
}
|
|
45
|
+
const ref = v.ref;
|
|
46
|
+
if (path.length === 0)
|
|
47
|
+
return (env) => env[ref] ?? null;
|
|
48
|
+
return (env) => getIn(env[ref], path);
|
|
49
|
+
}
|
|
50
|
+
const numeric = (x) => (typeof x === 'number' || typeof x === 'string' ? x : Number.NaN);
|
|
51
|
+
export function compileGuard(g, fns) {
|
|
52
|
+
return guard(g, fns);
|
|
53
|
+
}
|
|
54
|
+
function guard(g, fns) {
|
|
55
|
+
switch (g.op) {
|
|
56
|
+
case 'and': {
|
|
57
|
+
const args = g.args.map((a) => guard(a, fns));
|
|
58
|
+
return (env) => args.every((t) => t(env));
|
|
59
|
+
}
|
|
60
|
+
case 'or': {
|
|
61
|
+
const args = g.args.map((a) => guard(a, fns));
|
|
62
|
+
return (env) => args.some((t) => t(env));
|
|
63
|
+
}
|
|
64
|
+
case 'not': {
|
|
65
|
+
const arg = guard(g.arg, fns);
|
|
66
|
+
return (env) => !arg(env);
|
|
67
|
+
}
|
|
68
|
+
case 'fn': {
|
|
69
|
+
const call = compileValue({ fn: g.fn, arg: g.arg }, fns);
|
|
70
|
+
return (env) => call(env) === true;
|
|
71
|
+
}
|
|
72
|
+
default: {
|
|
73
|
+
const l = compileValue(g.left, fns);
|
|
74
|
+
const r = compileValue(g.right, fns);
|
|
75
|
+
switch (g.op) {
|
|
76
|
+
case 'eq':
|
|
77
|
+
return (env) => equal(l(env), r(env));
|
|
78
|
+
case 'neq':
|
|
79
|
+
return (env) => !equal(l(env), r(env));
|
|
80
|
+
case 'lt':
|
|
81
|
+
return (env) => numeric(l(env)) < numeric(r(env));
|
|
82
|
+
case 'lte':
|
|
83
|
+
return (env) => numeric(l(env)) <= numeric(r(env));
|
|
84
|
+
case 'gt':
|
|
85
|
+
return (env) => numeric(l(env)) > numeric(r(env));
|
|
86
|
+
default:
|
|
87
|
+
return (env) => numeric(l(env)) >= numeric(r(env));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function assign(a, fns) {
|
|
93
|
+
const { path } = a;
|
|
94
|
+
const v = compileValue(a.value, fns);
|
|
95
|
+
switch (a.op) {
|
|
96
|
+
case 'set':
|
|
97
|
+
return (ctx, env) => setIn(ctx, path, v({ ...env, context: ctx }));
|
|
98
|
+
case 'append':
|
|
99
|
+
return (ctx, env) => {
|
|
100
|
+
const list = getIn(ctx, path);
|
|
101
|
+
return setIn(ctx, path, [...(Array.isArray(list) ? list : []), v({ ...env, context: ctx })]);
|
|
102
|
+
};
|
|
103
|
+
case 'inc':
|
|
104
|
+
return (ctx, env) => setIn(ctx, path, Number(getIn(ctx, path) ?? 0) + Number(v({ ...env, context: ctx })));
|
|
105
|
+
case 'removeWhere': {
|
|
106
|
+
const key = a.key;
|
|
107
|
+
return (ctx, env) => {
|
|
108
|
+
const list = getIn(ctx, path);
|
|
109
|
+
const match = v({ ...env, context: ctx });
|
|
110
|
+
const items = Array.isArray(list) ? list : [];
|
|
111
|
+
return setIn(ctx, path, items.filter((item) => !equal(item !== null && typeof item === 'object' && !Array.isArray(item) ? item[key] : null, match)));
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const navigateTo = (url, routes) => (env) => url({ ...env, routes });
|
|
117
|
+
export function compileMachine(feature, fns = {}, routes = {}) {
|
|
118
|
+
const m = feature.machine;
|
|
119
|
+
if (!m)
|
|
120
|
+
throw new CompileError(`Feature ${feature.id} has no machine`);
|
|
121
|
+
const names = Object.keys(m.states);
|
|
122
|
+
const index = new Map(names.map((n, i) => [n, i]));
|
|
123
|
+
const indexOf = (name) => {
|
|
124
|
+
const i = index.get(name);
|
|
125
|
+
if (i === undefined)
|
|
126
|
+
throw new CompileError(`Unknown state "${name}" in ${feature.id}`);
|
|
127
|
+
return i;
|
|
128
|
+
};
|
|
129
|
+
const transitions = [];
|
|
130
|
+
const compile = (t, id) => {
|
|
131
|
+
transitions.push(id);
|
|
132
|
+
return {
|
|
133
|
+
id,
|
|
134
|
+
guard: t.guard ? guard(t.guard, fns) : null,
|
|
135
|
+
target: indexOf(t.target),
|
|
136
|
+
assign: t.assign.map((a) => assign(a, fns)),
|
|
137
|
+
navigate: t.navigate ? navigateTo(compileValue(t.navigate, fns), routes) : null,
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
const states = names.map((name) => {
|
|
141
|
+
const s = m.states[name];
|
|
142
|
+
const on = new Map();
|
|
143
|
+
for (const [event, list] of Object.entries(s.on))
|
|
144
|
+
on.set(event, list.map((t, i) => compile(t, `${name}/on/${event}/${i}`)));
|
|
145
|
+
const after = new Map();
|
|
146
|
+
s.after.forEach((a, i) => {
|
|
147
|
+
const t = compile(a.transition, `${name}/after/${i}`);
|
|
148
|
+
after.set(a.ms, [...(after.get(a.ms) ?? []), t]);
|
|
149
|
+
});
|
|
150
|
+
const invoke = s.invoke;
|
|
151
|
+
return {
|
|
152
|
+
name,
|
|
153
|
+
final: s.final,
|
|
154
|
+
on,
|
|
155
|
+
invoke: invoke && {
|
|
156
|
+
effect: invoke.effect,
|
|
157
|
+
input: compileValue(invoke.input, fns),
|
|
158
|
+
done: invoke.done.map((t, i) => compile(t, `${name}/invoke/done/${i}`)),
|
|
159
|
+
failed: new Map(Object.entries(invoke.failed).map(([error, list]) => [
|
|
160
|
+
error,
|
|
161
|
+
list.map((t, i) => compile(t, `${name}/invoke/failed/${error}/${i}`)),
|
|
162
|
+
])),
|
|
163
|
+
},
|
|
164
|
+
after,
|
|
165
|
+
timers: [...after.keys()].sort((a, b) => a - b),
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
return {
|
|
169
|
+
feature: feature.id,
|
|
170
|
+
initial: indexOf(m.initial),
|
|
171
|
+
initialContext: m.initialContext,
|
|
172
|
+
states,
|
|
173
|
+
index,
|
|
174
|
+
transitions,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"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"}
|
package/dist/data.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Json } from '@hozu/core/ir';
|
|
2
|
+
export declare function getIn(value: Json | undefined, path: readonly string[]): Json;
|
|
3
|
+
export declare function setIn(value: Json, path: readonly string[], next: Json, i?: number): Json;
|
|
4
|
+
export declare function equal(a: Json | undefined, b: Json | undefined): boolean;
|
|
5
|
+
export declare const pathOf: (pattern: string, params: Json | undefined, search?: Json) => string;
|
|
6
|
+
//# sourceMappingURL=data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAIzC,wBAAgB,KAAK,CAAC,KAAK,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAO5E;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,SAAI,GAAG,IAAI,CAUnF;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,OAAO,CAavE;AAED,eAAO,MAAM,MAAM,YAAa,MAAM,UAAU,IAAI,GAAG,SAAS,WAAW,IAAI,KAAG,MAmBjF,CAAA"}
|
package/dist/data.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export function getIn(value, path) {
|
|
2
|
+
let current = value;
|
|
3
|
+
for (const key of path) {
|
|
4
|
+
if (current === null || typeof current !== 'object')
|
|
5
|
+
return null;
|
|
6
|
+
current = current[key];
|
|
7
|
+
}
|
|
8
|
+
return current === undefined ? null : current;
|
|
9
|
+
}
|
|
10
|
+
export function setIn(value, path, next, i = 0) {
|
|
11
|
+
if (i === path.length)
|
|
12
|
+
return next;
|
|
13
|
+
const key = path[i];
|
|
14
|
+
if (Array.isArray(value)) {
|
|
15
|
+
const copy = value.slice();
|
|
16
|
+
copy[Number(key)] = setIn(value[Number(key)] ?? null, path, next, i + 1);
|
|
17
|
+
return copy;
|
|
18
|
+
}
|
|
19
|
+
const base = value !== null && typeof value === 'object' ? value : {};
|
|
20
|
+
return { ...base, [key]: setIn(base[key] ?? null, path, next, i + 1) };
|
|
21
|
+
}
|
|
22
|
+
export function equal(a, b) {
|
|
23
|
+
if (a === b)
|
|
24
|
+
return true;
|
|
25
|
+
if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object')
|
|
26
|
+
return false;
|
|
27
|
+
if (Array.isArray(a)) {
|
|
28
|
+
if (!Array.isArray(b) || a.length !== b.length)
|
|
29
|
+
return false;
|
|
30
|
+
for (let i = 0; i < a.length; i++)
|
|
31
|
+
if (!equal(a[i], b[i]))
|
|
32
|
+
return false;
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
if (Array.isArray(b))
|
|
36
|
+
return false;
|
|
37
|
+
const ka = Object.keys(a);
|
|
38
|
+
if (ka.length !== Object.keys(b).length)
|
|
39
|
+
return false;
|
|
40
|
+
for (const k of ka)
|
|
41
|
+
if (!Object.hasOwn(b, k) || !equal(a[k], b[k]))
|
|
42
|
+
return false;
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
export const pathOf = (pattern, params, search) => {
|
|
46
|
+
const [route = '', defaults = ''] = pattern.split('?');
|
|
47
|
+
const path = route.replace(/\/:([A-Za-z]\w*)[?*+]?/g, (_, key) => {
|
|
48
|
+
const x = getIn(params, [key]);
|
|
49
|
+
return [x ?? []]
|
|
50
|
+
.flat()
|
|
51
|
+
.map((s) => `/${encodeURIComponent(String(s))}`)
|
|
52
|
+
.join('');
|
|
53
|
+
}) || '/';
|
|
54
|
+
const skip = defaults.split('&');
|
|
55
|
+
let q = '';
|
|
56
|
+
if (search && typeof search === 'object')
|
|
57
|
+
for (const key of Object.keys(search).sort()) {
|
|
58
|
+
const x = search[key];
|
|
59
|
+
const pair = `${encodeURIComponent(key)}=${encodeURIComponent(String(x))}`;
|
|
60
|
+
if (x !== null && typeof x !== 'object' && !skip.includes(pair))
|
|
61
|
+
q += `${q && '&'}${pair}`;
|
|
62
|
+
}
|
|
63
|
+
return q ? `${path}?${q}` : path;
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=data.js.map
|
package/dist/data.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { CompileError, compileGuard, compileMachine, compileValue } from './compile.ts';
|
|
2
|
+
export { equal, getIn, pathOf, setIn } from './data.ts';
|
|
3
|
+
export { enter, init, transition } from './transition.ts';
|
|
4
|
+
export type * from './types.ts';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACvF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACzD,mBAAmB,YAAY,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACvF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Json } from '@hozu/core/ir';
|
|
2
|
+
import type { CompiledMachine, Input, Snapshot, Step } from './types.ts';
|
|
3
|
+
export declare function enter(machine: CompiledMachine, state: string, context: Json, entry?: number): Step;
|
|
4
|
+
export declare const init: (machine: CompiledMachine) => Step;
|
|
5
|
+
export declare function transition(machine: CompiledMachine, snapshot: Snapshot, input: Input): Step;
|
|
6
|
+
//# sourceMappingURL=transition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../src/transition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,EAAE,eAAe,EAAmC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAezG,wBAAgB,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,SAAI,GAAG,IAAI,CAM7F;AAED,eAAO,MAAM,IAAI,YAAa,eAAe,KAAG,IAC+B,CAAA;AAuB/E,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAqB3F"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
function enterEffects(machine, state, context, entry, effects) {
|
|
2
|
+
const s = machine.states[state];
|
|
3
|
+
if (s.invoke)
|
|
4
|
+
effects.push({ type: 'invoke', entry, effect: s.invoke.effect, input: s.invoke.input({ context }) });
|
|
5
|
+
for (const ms of s.timers)
|
|
6
|
+
effects.push({ type: 'timer', entry, ms });
|
|
7
|
+
}
|
|
8
|
+
export function enter(machine, state, context, entry = 1) {
|
|
9
|
+
const index = machine.index.get(state);
|
|
10
|
+
if (index === undefined)
|
|
11
|
+
throw new Error(`Unknown state "${state}" in ${machine.feature}`);
|
|
12
|
+
const effects = [];
|
|
13
|
+
enterEffects(machine, index, context, entry, effects);
|
|
14
|
+
return { snapshot: { state, context, entry }, effects, taken: null };
|
|
15
|
+
}
|
|
16
|
+
export const init = (machine) => enter(machine, machine.states[machine.initial].name, machine.initialContext);
|
|
17
|
+
const ignored = (snapshot) => ({ snapshot, effects: [], taken: null });
|
|
18
|
+
function fire(machine, snapshot, candidates, env) {
|
|
19
|
+
if (!candidates)
|
|
20
|
+
return ignored(snapshot);
|
|
21
|
+
for (const t of candidates) {
|
|
22
|
+
if (t.guard && !t.guard(env))
|
|
23
|
+
continue;
|
|
24
|
+
let context = snapshot.context;
|
|
25
|
+
for (const update of t.assign)
|
|
26
|
+
context = update(context, env);
|
|
27
|
+
const entry = snapshot.entry + 1;
|
|
28
|
+
const effects = t.navigate === null ? [] : [{ type: 'navigate', url: String(t.navigate(env)) }];
|
|
29
|
+
enterEffects(machine, t.target, context, entry, effects);
|
|
30
|
+
return { snapshot: { state: machine.states[t.target].name, context, entry }, effects, taken: t.id };
|
|
31
|
+
}
|
|
32
|
+
return ignored(snapshot);
|
|
33
|
+
}
|
|
34
|
+
export function transition(machine, snapshot, input) {
|
|
35
|
+
const state = machine.states[machine.index.get(snapshot.state) ?? -1];
|
|
36
|
+
if (!state || state.final)
|
|
37
|
+
return ignored(snapshot);
|
|
38
|
+
const context = snapshot.context;
|
|
39
|
+
switch (input.type) {
|
|
40
|
+
case 'event':
|
|
41
|
+
return fire(machine, snapshot, state.on.get(input.event), { context, event: input.payload });
|
|
42
|
+
case 'done':
|
|
43
|
+
if (input.entry !== snapshot.entry || !state.invoke)
|
|
44
|
+
return ignored(snapshot);
|
|
45
|
+
return fire(machine, snapshot, state.invoke.done, { context, result: input.result });
|
|
46
|
+
case 'failed': {
|
|
47
|
+
if (input.entry !== snapshot.entry || !state.invoke)
|
|
48
|
+
return ignored(snapshot);
|
|
49
|
+
const failed = state.invoke.failed;
|
|
50
|
+
const declared = failed.has(input.error);
|
|
51
|
+
const error = declared ? input.data : { message: messageOf(input.data, input.error) };
|
|
52
|
+
return fire(machine, snapshot, failed.get(declared ? input.error : 'Unexpected'), { context, error });
|
|
53
|
+
}
|
|
54
|
+
case 'timer':
|
|
55
|
+
if (input.entry !== snapshot.entry)
|
|
56
|
+
return ignored(snapshot);
|
|
57
|
+
return fire(machine, snapshot, state.after.get(input.ms), { context });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function messageOf(data, error) {
|
|
61
|
+
if (data !== null && typeof data === 'object' && !Array.isArray(data) && typeof data.message === 'string')
|
|
62
|
+
return data.message;
|
|
63
|
+
return error;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=transition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transition.js","sourceRoot":"","sources":["../src/transition.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { Json } from '@hozu/core/ir';
|
|
2
|
+
export interface Snapshot {
|
|
3
|
+
state: string;
|
|
4
|
+
context: Json;
|
|
5
|
+
entry: number;
|
|
6
|
+
}
|
|
7
|
+
export type Input = {
|
|
8
|
+
type: 'event';
|
|
9
|
+
event: string;
|
|
10
|
+
payload: Json;
|
|
11
|
+
} | {
|
|
12
|
+
type: 'done';
|
|
13
|
+
entry: number;
|
|
14
|
+
result: Json;
|
|
15
|
+
} | {
|
|
16
|
+
type: 'failed';
|
|
17
|
+
entry: number;
|
|
18
|
+
error: string;
|
|
19
|
+
data: Json;
|
|
20
|
+
} | {
|
|
21
|
+
type: 'timer';
|
|
22
|
+
entry: number;
|
|
23
|
+
ms: number;
|
|
24
|
+
};
|
|
25
|
+
export type Effect = {
|
|
26
|
+
type: 'invoke';
|
|
27
|
+
entry: number;
|
|
28
|
+
effect: string;
|
|
29
|
+
input: Json;
|
|
30
|
+
} | {
|
|
31
|
+
type: 'timer';
|
|
32
|
+
entry: number;
|
|
33
|
+
ms: number;
|
|
34
|
+
} | {
|
|
35
|
+
type: 'navigate';
|
|
36
|
+
url: string;
|
|
37
|
+
};
|
|
38
|
+
export interface Step {
|
|
39
|
+
snapshot: Snapshot;
|
|
40
|
+
effects: Effect[];
|
|
41
|
+
taken: string | null;
|
|
42
|
+
}
|
|
43
|
+
export type Fns = Record<string, (input: never) => unknown>;
|
|
44
|
+
export interface Env {
|
|
45
|
+
context?: Json;
|
|
46
|
+
input?: Json;
|
|
47
|
+
event?: Json;
|
|
48
|
+
result?: Json;
|
|
49
|
+
error?: Json;
|
|
50
|
+
params?: Json;
|
|
51
|
+
search?: Json;
|
|
52
|
+
bindings?: Json[];
|
|
53
|
+
dom?: (field: string) => Json;
|
|
54
|
+
routes?: Record<string, string>;
|
|
55
|
+
}
|
|
56
|
+
export type Getter = (env: Env) => Json;
|
|
57
|
+
export type Test = (env: Env) => boolean;
|
|
58
|
+
export type Update = (context: Json, env: Env) => Json;
|
|
59
|
+
export interface CompiledTransition {
|
|
60
|
+
id: string;
|
|
61
|
+
guard: Test | null;
|
|
62
|
+
target: number;
|
|
63
|
+
assign: Update[];
|
|
64
|
+
navigate: Getter | null;
|
|
65
|
+
}
|
|
66
|
+
export interface CompiledState {
|
|
67
|
+
name: string;
|
|
68
|
+
final: boolean;
|
|
69
|
+
on: Map<string, CompiledTransition[]>;
|
|
70
|
+
invoke: {
|
|
71
|
+
effect: string;
|
|
72
|
+
input: Getter;
|
|
73
|
+
done: CompiledTransition[];
|
|
74
|
+
failed: Map<string, CompiledTransition[]>;
|
|
75
|
+
} | null;
|
|
76
|
+
after: Map<number, CompiledTransition[]>;
|
|
77
|
+
timers: number[];
|
|
78
|
+
}
|
|
79
|
+
export interface CompiledMachine {
|
|
80
|
+
feature: string;
|
|
81
|
+
initial: number;
|
|
82
|
+
initialContext: Json;
|
|
83
|
+
states: CompiledState[];
|
|
84
|
+
index: Map<string, number>;
|
|
85
|
+
transitions: string[];
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hozu/machine",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Isomorphic compiled state-machine interpreter behind Hozu features",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"hozu",
|
|
7
|
+
"framework",
|
|
8
|
+
"ai",
|
|
9
|
+
"agents",
|
|
10
|
+
"ssr",
|
|
11
|
+
"islands",
|
|
12
|
+
"typescript"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://github.com/olevatorr/Hozu/tree/main/packages/machine#readme",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/olevatorr/Hozu/issues"
|
|
17
|
+
},
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/olevatorr/Hozu.git",
|
|
21
|
+
"directory": "packages/machine"
|
|
22
|
+
},
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"author": "olevatorr",
|
|
25
|
+
"type": "module",
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"default": "./dist/index.js"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"dist"
|
|
34
|
+
],
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=22.18"
|
|
37
|
+
},
|
|
38
|
+
"publishConfig": {
|
|
39
|
+
"access": "public"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@hozu/core": "0.1.0"
|
|
43
|
+
},
|
|
44
|
+
"sideEffects": false
|
|
45
|
+
}
|