export type User = {name:string, id:string, desk:Set}; export type Role = {name:string, id:string, user:User[]}; export type Desk = {name:string, id:string, need:Part[], time:number[], make:Part[], pass:Map, role:Role[]}; export type Pass = {name:string, id:string, path:string, live:boolean, load:()=>Promise, dump:()=>void}; export type Part = {name:string, id:string, pass:MapPromise}>, need:Desk[], make:Desk[], loop?:boolean}; export type Work = [time:number, data:string, user:User]; export type Scan = {need_dirty:number[], make_dirty:number[], need_empty:number[], make_empty:number[]} export type GraphBuilder= < Users extends Record, Roles extends Record]>, Parts extends Record, Desks extends Record, need:Partial>, ...make:Array]>, > ( params:{ meta?:{name:string}, user:Users, role:Roles, part:Parts, desk:Desks, pass:Record, } ) =>GraphParts export type GraphParts = { Desk:Record, Part:Record, User:Record, Role:Record, Pass:Record Path:string } export type MassBuilder=>(rooms:Params)=>()=>{ [K in keyof Params]: GraphParts } export type UserPassFile = Record> export type Scanner =(desk:Desk, pass:Pass)=>void;