Adding applyModule! function

This commit is contained in:
Dustin Swan 2026-04-06 19:54:16 -06:00
parent b4372b69fa
commit 99ee0da8c1
No known key found for this signature in database
GPG key ID: 30D46587E2100467

View file

@ -169,6 +169,46 @@ export const _rt = {
}); });
} }
}, },
"applyModule!": (moduleName: string) => (code: string) => {
try {
const tokens = tokenize(code);
const parser = new Parser(tokens, code);
const { definitions: defs } = parser.parse();
// Find existing module defs
const existingNames = new Set(
[...definitions.values()]
.filter(d => d.module === moduleName)
.map(d => d.name)
);
// Apply new defs
const newNames = new Set<string>();
for (const def of defs) {
def.module = moduleName;
if (def.body) {
recompile(def.name, def.body);
definitions.set(def.name, def);
newNames.add(def.name);
}
}
// Delete missing defs
for (const name of existingNames) {
if (!newNames.has(name)) {
delete store[name];
definitions.delete(name);
}
}
// Sync to disk
syncToFilesystem([...newNames][0] || moduleName);
return { _tag: 'Defined', _0: moduleName };
} catch (e: any) {
return { _tag: 'Err', _0: e.message };
}
},
"saveModule!": (moduleName: string) => { "saveModule!": (moduleName: string) => {
const moduleDefs = [...definitions.values()] const moduleDefs = [...definitions.values()]
.filter(d => d.module === moduleName); .filter(d => d.module === moduleName);