diff --git a/tsconfig.json b/deno.json similarity index 100% rename from tsconfig.json rename to deno.json diff --git a/graph.js b/graph.js index 385629f..932f45b 100644 --- a/graph.js +++ b/graph.js @@ -1,7 +1,7 @@ /** @import * as TYPES from "./types.ts" */ /** @type {TYPES.GraphBuilder} */ -export default function({users, roles, parts, desks}) +export default function({users, roles, parts, desks, passes}) { // mutate users @@ -21,7 +21,7 @@ export default function({users, roles, parts, desks}) for(let roleId in roles) { const [name, ...userIds] = roles[roleId]; - RoleList[roleId] = {name, user:userIds.map(uId=>UserList[uId])}; + RoleList[roleId] = {name, user:userIds.map(uId=>UserList[/**@type{string}*/(uId)])}; } // mutate parts @@ -31,20 +31,18 @@ export default function({users, roles, parts, desks}) for(let partId in parts) { const name = parts[partId]; - PartList[partId] = /** @type {TYPES.Part} */({name, work:[], time:0, need:[], make:[]}); + PartList[partId] = /** @type {TYPES.Part} */({name, need:[], make:[], pass:new Map()}); } - // mutate desks /** @type {Record} */ //@ts-ignore const DeskList = desks; - for(let deskId in desks) { const [name, roleIDs, mode, needObj, ...makePartIDs] = desks[deskId]; - const need =[]; - const time =[]; + /** @type {TYPES.Part[]}*/ const need =[]; + /** @type {number[]}*/ const time =[]; /** @type {TYPES.Desk} */ const desk = { @@ -81,6 +79,41 @@ export default function({users, roles, parts, desks}) DeskList[deskId] = desk; } +// Apply passes + for(let passID in passes) + { + const [name, users] = passes[passID]; + /** @type {TYPES.Pass} */ + const pass = {name, path:passID}; + + for(let userID in users) + { + const userPart = users[userID]; + const user = UserList[userID]; + for(let partID in userPart) + { + const part = PartList[partID]; + const entries = userPart[partID]; + entries.forEach(([time, data]) => { + /** @type {TYPES.Work} */ + const work = [user, time, data]; + + let partPass = part.pass.get(pass); + if(!partPass) + { + partPass = {time:0, work:[]} + part.pass.set(pass, partPass); + } + partPass.work.push(work); + if(partPass.time < time) + { + partPass.time = time; + } + }); + } + } + } + console.log(users, parts, desks); } diff --git a/index.js b/index.js index 1e922e7..e7ce293 100644 --- a/index.js +++ b/index.js @@ -15,5 +15,21 @@ Graph({ desks: { d1:["Desk 01", ["dev"], "all", {p2:3}, "p1"] + }, + passes: + { + pass1: + [ + "Pass One", + { + u2: + { + p1:[ + [123, "some data"], + [456, "more data"] + ] + } + } + ] } }); \ No newline at end of file diff --git a/types.ts b/types.ts index e9815d0..fc0e90b 100644 --- a/types.ts +++ b/types.ts @@ -1,18 +1,31 @@ -type PartBlueprint = string -type UserBlueprint = string - export type GraphBuilder= < - Users extends Record, + Users extends Record, Roles extends Record]>, - Parts extends Record, - Desks extends Record, mode:"all"|"one", need:Partial>, ...make:Array]> + Parts extends Record, + Desks extends Record, mode:"all"|"one", need:Partial>, ...make:Array]>, + Pass extends Record< + string, + [ + name:string, + user:Partial + >> + >> + ] + > > ( - params:{users:Users, - roles:Roles, - parts:Parts, - desks:Desks} + params:{ + users:Users, + roles:Roles, + parts:Parts, + desks:Desks, + passes:Pass, + } ) =>void @@ -20,6 +33,6 @@ export type GraphBuilder= export type User = {name:string, desk:Set}; 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, part:Part, time:number, data:string]; -export type Part = {name:string, time:number, work:Work[], need:Desk[], make:Desk[]}; - +export type Work = [user:User, time:number, data:string]; +export type Pass = {name:string, path:string}; +export type Part = {name:string, pass:Map, need:Desk[], make:Desk[]}; \ No newline at end of file