This commit is contained in:
Zef Hemel
2022-05-13 17:05:52 +02:00
parent 3c5048ac25
commit 7d01f77318
12 changed files with 70 additions and 55 deletions
+21 -38
View File
@@ -1,14 +1,7 @@
import { compile } from "../compile";
import { sandboxCompile, sandboxCompileModule } from "../compile";
import { SysCallMapping } from "../system";
import { tmpdir } from "os";
import { mkdir, rm, symlink, writeFile } from "fs/promises";
import { nodeModulesDir } from "../environments/node_sandbox";
const exposedModules = [
"@silverbulletmd/plugos-silverbullet-syscall",
"@plugos/plugos-syscall",
"yaml",
];
import globalModules from "../../common/dist/global.plug.json";
import * as ts from "typescript";
@@ -69,36 +62,26 @@ export function esbuildSyscalls(): SysCallMapping {
ctx,
filename: string,
code: string,
functionName?: string
functionName?: string,
excludeModules: string[] = []
): Promise<string> => {
let tmpDir = await prepareCompileEnv(filename, code);
let jsCode = await compile(`${tmpDir}/${filename}`, functionName, false, [
"yaml",
"handlebars",
]);
await rm(tmpDir, { recursive: true });
return jsCode;
return await sandboxCompile(
filename,
code,
functionName,
true,
[],
[...Object.keys(globalModules.dependencies), ...excludeModules]
);
},
"esbuild.compileModule": async (
ctx,
moduleName: string
): Promise<string> => {
return await sandboxCompileModule(
moduleName,
Object.keys(globalModules.dependencies)
);
},
};
}
async function prepareCompileEnv(filename: string, code: string) {
let tmpDir = `${tmpdir()}/plugos-${Math.random()}`;
await mkdir(tmpDir, { recursive: true });
const srcNodeModules = `${nodeModulesDir}/node_modules`;
const targetNodeModules = `${tmpDir}/node_modules`;
await mkdir(`${targetNodeModules}/@silverbulletmd`, { recursive: true });
await mkdir(`${targetNodeModules}/@plugos`, { recursive: true });
for (const exposedModule of exposedModules) {
await symlink(
`${srcNodeModules}/${exposedModule}`,
`${targetNodeModules}/${exposedModule}`,
"dir"
);
}
await writeFile(`${tmpDir}/${filename}`, code);
return tmpDir;
}