work-graph-simple/types.ts
2025-07-26 21:35:31 -04:00

92 lines
2.6 KiB
TypeScript

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>]>,
Pass extends Record<
string,
[
name:string,
user:Partial<Record<
keyof Users,
Partial<Record<
keyof Parts,
Array<[time:number, data:string]>
>>
>>
]
>
>
(
params:{
user:Users,
role:Roles,
part:Parts,
desk:Desks,
pass:Pass,
}
)
=>void
export type GraphLoader=
<
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>]>,
Passes extends Record<
string,
[
name:string,
user:Partial<Record<
keyof Users,
Partial<Record<
keyof Parts,
Array<[time:number, data:string]>
>>
>>
]
>
>
(
params:{
user:Users,
role:Roles,
part:Parts,
desk:Desks,
pass?:Passes,
}
)
=>void
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[], mode:string, role:Role[]};
export type Work = [user:User, time:number, data:string];
export type Pass = {name:string, path:string};
export type Part = {name:string, pass:Map<Pass, {time:number, work:Work[]}>, need:Desk[], make:Desk[]};
type MassRoomMeta = {name:string}
type MassPassMeta = [name:string]
export type MassDscription=
<
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:Record<string, {
meta?:MassRoomMeta,
user:Users,
role:Roles,
part:Parts,
desk:Desks,
pass:Record<string, MassPassMeta>,
}>
)
=>void