This commit is contained in:
Seth Trowbridge 2025-07-03 11:53:20 -04:00
parent 297cc5e07d
commit 18c2687e78
3 changed files with 103 additions and 0 deletions

94
block_core.ts Normal file
View File

@ -0,0 +1,94 @@
export type Work = {data:string, user:string, time:number};
export type Part = {name:string, time:number, work:Work[], need:Desk[], make:Desk[]};
export type Need = [part:Part, time:number];
export type DeskMode = "all" | "one";
export type Desk = {name:string, need:Need[], make:Part[], mode:DeskMode, role:[]};
const Part = (name:string):Part=>
{
return {name, time:0, work:[], need:[], make:[]};
}
const Desk = (name:string, need:Need[], make:Part[], mode:DeskMode):Desk=>
{
const obj:Desk = {name, need, make, mode, role:[]};
for(let i=0; i<need.length; i++)
{
const [part] = need[i];
part.need.push(obj);
}
for(let i=0; i<make.length; i++)
{
make[i].make.push(obj);
}
return obj;
}
const Work =(part:Part, data:string, time=Date.now())=>{
const work = {data, user:"", time};
if(time > part.time){
part.work.unshift(work);
part.time = time;
}
else
{
part.work.push(work);
}
part.need.forEach(Recompute);
part.make.forEach(Recompute);
}
const Recompute = (desk:Desk)=>{
let latestMake = -Infinity;
for(let i=0; i<desk.make.length; i++)
{
const {time} = desk.make[i];
if(time > latestMake)
{
latestMake = time;
}
}
let latestNeed = -Infinity;
const dirtyNeed = [];
for(let i=0; i<desk.need.length; i++)
{
const [{time}] = desk.need[i];
if(time > latestNeed)
{
latestNeed = time;
}
if(time < latestMake)
{
dirtyNeed.push(i);
}
}
const dirtyMake = []
for(let i=0; i<desk.make.length; i++)
{
const {time} = desk.make[i];
if(time > latestNeed)
{
dirtyMake.push(i);
}
}
return [dirtyNeed, dirtyMake];
}
type User = {name:string};
type Role = [name:string, users:[]]
function BlockRole<Records extends Record<string, string>>(r:Records):{[K in keyof Records]: Role} {
const result = {};
for (const key in r) {
result[key] = [key, []];
}
return result;
}
export {Part, Desk, Work, Recompute, BlockRole};

4
block_graph.ts Normal file
View File

@ -0,0 +1,4 @@
import * as Core from "./block_core.ts";
const resp = await import("./block_role.ts");
const roleTest = resp.default.r1;

5
block_role.ts Normal file
View File

@ -0,0 +1,5 @@
import { BlockRole } from "./block_core.ts";
export default BlockRole({
r1:"Developer"
})