Adding applyModule! function
This commit is contained in:
parent
b4372b69fa
commit
99ee0da8c1
1 changed files with 40 additions and 0 deletions
|
|
@ -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) => {
|
||||
const moduleDefs = [...definitions.values()]
|
||||
.filter(d => d.module === moduleName);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue