fixed recurs

This commit is contained in:
Seth Trowbridge 2025-10-19 20:55:01 -04:00
parent ee537a781b
commit 03a8d13683

49
main.ts
View File

@ -1,24 +1,36 @@
type EnumDefinition = Record<string, string>; type EnumDefinition = Record<string, string>;
type EnumBlock = Record<string, EnumDefinition&{_:string}>; type EnumBlock = Record<string, EnumDefinition&{_:string}>;
type RecursiveObject<Obj extends EnumBlock> =
function Block<Fields extends EnumBlock>(options:Fields):{[F in keyof Fields]:{[E in keyof Fields[F]]:Fields}}
{ {
const list = []; [F in keyof Obj]:
let fieldLookup = {}; {
[E in keyof Omit<Obj[F], "_">]:RecursiveObject<Obj>
}
}
const proxyOuter = new Proxy({}, {get(_target, propName){ function Block<Fields extends EnumBlock>(options:Fields):()=>RecursiveObject<Fields>
fieldLookup = options[propName]; {
list.push(fieldLookup._); return ()=>{
return proxyInner const list = [];
}}); let fieldLookup = {};
const proxyInner = new Proxy({}, {get(_target, valName){ const proxyOuter = new Proxy(function(){
list.push(`:${fieldLookup[valName]};`); return list;
console.log(list); }, {get(_target, propName){
fieldLookup = options[propName];
if(fieldLookup)
{
list.push(fieldLookup._);
}
return proxyInner
}});
const proxyInner = new Proxy({}, {get(_target, valName){
list.push(`:${fieldLookup[valName]};`);
return proxyOuter;
}});
return proxyOuter; return proxyOuter;
}}); }
return proxyOuter;
} }
const styles = Block({ const styles = Block({
@ -26,9 +38,10 @@ const styles = Block({
Display:{_:"display", Flex:"flex", Grid:"grid", None:"none", Block:"block", InlineBlock:"inline-block"} Display:{_:"display", Flex:"flex", Grid:"grid", None:"none", Block:"block", InlineBlock:"inline-block"}
}); });
export default styles function Sheet<UserClasses extends Record<string, ReturnType<typeof styles>>>(userClasses:UserClasses):{[Class in keyof UserClasses]:string}
function Sheet<UserClasses extends Record<string, typeof styles>>(userClasses:UserClasses):{[Class in keyof UserClasses]:string}
{ {
return new Proxy({}, {get(_target, className){}}); return new Proxy({}, {get(_target, className){}});
} }
console.log(styles().Display.Block.Pos.Abs())