work-graph-simple/graph/types.ts

44 lines
1.5 KiB
TypeScript

export type User = {name:string, desk:Set<Desk>};
export type Role = {name:string, user:User[]};
export type Desk = {name:string, need:Part[], time:number[], make:Part[], pass:Map<Pass, {need:number[], make:number[]}>, mode:string, role:Role[]};
export type Work = [time:number, data:string, user:User];
export type Pass = {name:string, path:string, live:boolean, load:()=>Promise<void>, dump:()=>void};
export type Part = {name:string, pass:Map<Pass, {time:number, work:Work[], make:(user:User, data:string)=>void}>, need:Desk[], make:Desk[]};
export type GraphBuilder=
<
Users extends Record<string, string>,
Roles extends Record<string, [ name:string, ...users:Array<keyof Users>]>,
Parts extends Record<string, string>,
Desks extends Record<string, [ name:string, roles:Array<keyof Roles>, mode:"all"|"one", need:Partial<Record<keyof Parts, number>>, ...make:Array<keyof Parts>]>,
>
(
params:{
meta?:{name:string},
user:Users,
role:Roles,
part:Parts,
desk:Desks,
pass:Record<string, [name:string]>,
},
folderName:string
)
=>GraphParts
export type GraphParts = {
Desk:Record<string, Desk>,
Part:Record<string, Part>,
User:Record<string, User>,
Role:Record<string, Role>,
Pass:Record<string, Pass>
}
export type MassDscription=
(
params:Record<string, Parameters<GraphBuilder>[0]>
)
=>()=>Record<string, GraphParts>
export type UserPassFile = Record<string, Array<[time:number, data:string, user?:User]>>
export type Scanner =(desk:Desk, pass:Pass)=>void;