import { bindInspector, forgeDomain, forgePolicyEngine, forgeRegistry, forgeResourceHub, forgeSelector, memoryInspector, } from 'zudux-state'; type User = { id: string; name: string; team: string }; const users = forgeRegistry({ key: (user) => user.id, indexes: { team: (user) => user.team } }); type DirectoryState = { users: ReturnType }; const policy = forgePolicyEngine([ { name: 'admin-writes', effect: 'allow', roles: ['admin'], commands: ['saveUser'] }, ]); const directory = forgeDomain({ name: 'directory', seed: { users: users.empty() }, commands: { saveUser(context, user: User) { context.edit((draft) => users.put(draft.users, user)); }, }, policy: policy.policy(), }); const inspector = memoryInspector(); bindInspector(directory, inspector); await directory.run('saveUser', { id: 'u1', name: 'Ada', team: 'platform' }, { actor: 'admin-7', tags: { roles: 'admin' }, idempotencyKey: 'user-u1-v1', }); const teamCount = forgeSelector( [(state: Readonly) => state.users], (state) => users.byIndex(state, 'team', 'platform').length, ); console.log(teamCount(directory.read())); const resources = forgeResourceHub({ user: { load: async ({ signal }, id: string) => { const response = await fetch(`/api/users/${id}`, { signal }); return response.json() as Promise; }, tags: (user) => [`User:${user.id}`], }, }); await resources.prefetch('user', 'u1');