Compare commits

...

3 Commits

Author SHA1 Message Date
24a3da1a5b better profiles 2025-11-07 11:45:19 -05:00
4e247f3f09 better setup 2025-11-07 11:37:12 -05:00
77db64b46d started 2025-11-07 09:41:12 -05:00
17 changed files with 98 additions and 201 deletions

10
app.js
View File

@ -1,6 +1,8 @@
/** @import * as TYPES from "./graph/types.ts" */
/** @import * as TYPES from "./graph.d.ts" */
import * as FSHandle from "./store-directory-handle.js";
import "./graph.js";
import Styles from "./styles.js";
const {DOM, Div, Tag} = Styles;
@ -12,14 +14,14 @@ async function PickHandle()
}
async function LoadHandleFiles()
{
console.log("fetching room.js", handle);
console.log("fetching setup.js", handle);
if(handle)
{
try
{
const module = await import("./graph/room.js"+"?bust="+Math.random());
await import("./user-data/setup.js"+"?bust="+Math.random());
/** @type {Record<string, TYPES.GraphParts>} */
const read = module.default();
const read = BuildResults;
for(const roomKey in read)
{

56
deep/mock-user-folder/setup.d.ts vendored Normal file
View File

@ -0,0 +1,56 @@
export type User = {name:string, id:string, desk:Set<Desk>};
export type Role = {name:string, id:string, user:User[]};
export type Desk = {name:string, id:string, need:Part[], time:number[], make:Part[], pass:Map<Pass, Scan>, role:Role[]};
export type Pass = {name:string, id:string, path:string, live:boolean, load:()=>Promise<void>, dump:()=>void};
export type Part = {name:string, id:string, pass:Map<Pass, {time:number, work:Work[], make:(user:User, data:string)=>Promise<void>}>, 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[], due_date?:Date}
export type GraphBuilder=
<
Users extends Record<string, string>,
Roles extends Record<string, [ name:string, ...users:Array<keyof Users>]>,
Parts extends Record<string, [ name:string, loop?:"loop"] >,
PartKeys = keyof Parts,
Desks extends Record<string, [ name:string, roles:Array<keyof Roles>, need:{[K in PartKeys]?: number}, ...make:Array<PartKeys>]>,
>
(
params:{
meta?:{name:string},
user:Users,
role:Roles,
part:Parts,
desk:Desks,
pass:Record<string, [name: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>
Path:string
}
// export type MassBuilder=<Params extends Record<string, GraphParts>>(rooms:Params)=>()=>{
// [K in keyof Params]: GraphParts
// }
export type MassBuilder=<Params extends Record<string, GraphParts>>(rooms:Params)=>void
export type UserPassFile = Record<string, Array<[time:number, data:string, user?:User]>>
export type Scanner =(desk:Desk, pass:Pass)=>void;
declare global
{
const Setup: MassBuilder;
const Room: GraphBuilder;
const BuildResults: Record<string, GraphParts>
}

View File

@ -1,22 +1,17 @@
//@ts-check
import CreateAllRooms, {Room} from "../../graph/graph.js";
const user = {
u1:"Seth T",
u4:"Sarah S",
u5:"Adam M",
u6:"Matt Y",
u7:"Seth F",
u8:"Brittany F"
};
export default CreateAllRooms({
Setup(
{
room_01:Room({
user,
user:{
u1:"developer person",
u2:"team lead person",
u3:"writer person",
},
role:{
dev:["Development", "u1"],
write:["Writing", "u5"],
admin:["Admin", "u4"]
write:["Writing", "u3"],
admin:["Admin", "u2"]
},
part:{
p1:["Page title"],

View File

@ -35,10 +35,19 @@ export type GraphParts = {
Path:string
}
export type MassBuilder=<Params extends Record<string, GraphParts>>(rooms:Params)=>()=>{
[K in keyof Params]: GraphParts
}
// export type MassBuilder=<Params extends Record<string, GraphParts>>(rooms:Params)=>()=>{
// [K in keyof Params]: GraphParts
// }
export type MassBuilder=<Params extends Record<string, GraphParts>>(rooms:Params)=>void
export type UserPassFile = Record<string, Array<[time:number, data:string, user?:User]>>
export type Scanner =(desk:Desk, pass:Pass)=>void;
export type Scanner =(desk:Desk, pass:Pass)=>void;
declare global
{
const Setup: MassBuilder;
const Room: GraphBuilder;
const BuildResults: Record<string, GraphParts>
}

View File

@ -1,5 +1,5 @@
/** @import * as TYPES from "./types.ts" */
import * as FSAccess from "../store-directory-handle.js";
/** @import * as TYPES from "./graph.js" */
import * as FSAccess from "./store-directory-handle.js";
export const noop = "no-op";
@ -207,13 +207,11 @@ export function Room({user, role, part, desk, pass})
/** @type {TYPES.MassBuilder} */
export default function MassBuild(params)
{
return ()=>{
Object.entries(params).forEach( ([roomFolderName, roomData])=>
{
roomData.Path = roomFolderName;
});
return params;
}
Object.entries(params).forEach( ([roomFolderName, roomData])=>
{
roomData.Path = roomFolderName;
});
globalThis.BuildResults = params;
}
/** @type {TYPES.Scanner} */
@ -311,4 +309,8 @@ Loop parts:
stamp = estMax;
}
desk.pass.set(pass, {need_dirty:dirtyNeed, make_dirty:dirtyMake, need_empty:emptyNeed, make_empty:emptyMake, due_date:isFinite(stamp) ? new Date(stamp) : undefined})
};
};
globalThis.Setup = MassBuild;
globalThis.Room = Room;
globalThis.BuildResults = {};

View File

@ -1,43 +0,0 @@
//@ts-check
import CreateAllRooms, {Room} from "../../graph/graph.js";
const user = {
u1:"Seth T",
u4:"Sarah S",
u5:"Adam M",
u6:"Matt Y",
u7:"Seth F",
u8:"Brittany F"
};
export default CreateAllRooms({
room_01:Room({
user,
role:{
dev:["Development", "u1"],
write:["Writing", "u5"],
admin:["Admin", "u4"]
},
part:{
p1:["Page title"],
p2:["Page slug"],
p3:["Page preview"],
p4:["Page Project"],
p5:["Page Corrections", "loop"],
},
desk:{
d1:["Write page metas", ["admin", "write"], { }, "p1", "p2"],
d2:["Build Page preview", ["admin", "dev" ], {p1:1, p2:1, p5:1}, "p3", "p4"],
d3:["Proof Page", ["admin", "write"], {p3:1, }, "p5" ]
},
pass:{
pass_01:["January"],
//pass_02:["February"],
//pass_03:["March"],
//pass_04:["April"],
//pass_05:["May"],
//pass_06:["June"],
//pass_07:["July"],
}
})
});

View File

@ -1,14 +0,0 @@
{
"p1": [
[
1762196165935,
"normal title"
]
],
"p2": [
[
1762196173135,
"normal slug"
]
]
}

View File

@ -1,8 +0,0 @@
{
"p4": [
[
1762193485093,
"Make made Late"
]
]
}

View File

@ -1,8 +0,0 @@
{
"p1":
[
[123456, "data"],
[4562358723, "more data"],
[789235072367, "even more data"]
]
}

View File

@ -1,8 +0,0 @@
{
"p1": [
[
1762186057868,
"Need made Early"
]
]
}

View File

@ -1,14 +0,0 @@
{
"p4": [
[
1762196034794,
"Make made Early"
]
],
"p1": [
[
1762196047017,
"Need made Late"
]
]
}

View File

@ -1,14 +0,0 @@
{
"p3": [
[
1762196236384,
"complete 3"
]
],
"p4": [
[
1762196245327,
"complete 4"
]
]
}

View File

@ -1,14 +0,0 @@
{
"p1": [
[
1762196209704,
"complete 1"
]
],
"p2": [
[
1762196217319,
"complete 2"
]
]
}

View File

@ -1,18 +0,0 @@
{
"p3": [
[
1762196341950,
"complete 3"
]
],
"p4": [
[
1762196348950,
"complete 4"
],
[
1762196393702,
"complete Later"
]
]
}

View File

@ -1,18 +0,0 @@
{
"p1": [
[
1762196328127,
"complete 1"
]
],
"p2": [
[
1762196335342,
"complete 2"
],
[
1762196363079,
"complete Late"
]
]
}

View File

@ -1,8 +0,0 @@
{
"p1": [
[
1762201681431,
"underway"
]
]
}

View File

@ -21,12 +21,12 @@ async function Interceptor(event)
const pathname = url.pathname.substring(1);
let parts = pathname.split("/");
if(parts[0] == "graph")
if(parts[0] == "user-data")
{
console.log("intercept:", pathname);
const handle = await FSAccess.getDirectoryHandle();
const text = await FSAccess.Read(handle, parts);
const text = await FSAccess.Read(handle, parts.slice(1));
if(text)
{
console.log("successful intercept:", pathname);