@webfaas/webfaas-core
Version:
WebFaaS Framework - Core
67 lines • 2.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ModuleCompileJavaScript = void 0;
const vm = require("vm");
const SandBox_1 = require("./SandBox");
const Log_1 = require("../Log/Log");
const ILog_1 = require("../Log/ILog");
const WebFaasError_1 = require("../WebFaasError/WebFaasError");
const wrapper = [
"(function (exports, require, module, __filename, __dirname) { ",
"\n});"
];
/**
* ModuleCompileJavaScript
*/
class ModuleCompileJavaScript {
constructor(log) {
this.defaultGlobalRequire = (path) => {
this.log.write(ILog_1.LogLevelEnum.DEBUG, "defaultGlobalRequire", ILog_1.LogCodeEnum.PROCESS.toString(), path, null, __filename);
return require(path);
};
this.log = log || new Log_1.Log();
this.defaultSandBoxContext = SandBox_1.SandBox.SandBoxBuilderContext();
}
getLog() {
return this.log;
}
/**
* return a code compiled
* @param code
* @param moduleCompileManifestData
* @param sandboxContext
* @param globalRequire
*/
compile(code, moduleCompileManifestData, sandboxContext, globalRequire) {
try {
let timeInit = new Date().getTime();
let codeWrapper = wrapper[0] + code + wrapper[1];
if (!sandboxContext) {
sandboxContext = this.defaultSandBoxContext;
}
var compiledWrapper = vm.runInNewContext(codeWrapper, sandboxContext, {
filename: moduleCompileManifestData.mainFileFullPath,
lineOffset: 0,
displayErrors: true
});
//let newModule = {} as Object;
let newModule = {};
newModule.exports = {};
compiledWrapper(newModule.exports, globalRequire || this.defaultGlobalRequire, newModule, moduleCompileManifestData.mainFileFullPath, moduleCompileManifestData.mainFileDirName);
//logDetail
let logDetail = {};
logDetail.manifest = moduleCompileManifestData;
logDetail.delay = new Date().getTime() - timeInit;
this.log.write(ILog_1.LogLevelEnum.INFO, "compile", ILog_1.LogCodeEnum.COMPILE.toString(), "compiled", logDetail, __filename);
return newModule;
}
catch (errTry) {
let logDetail = {};
logDetail.moduleCompileManifestData = moduleCompileManifestData;
this.log.writeError("compile", errTry, logDetail, __filename);
throw new WebFaasError_1.WebFaasError.CompileError(errTry);
}
}
}
exports.ModuleCompileJavaScript = ModuleCompileJavaScript;
//# sourceMappingURL=ModuleCompileJavaScript.js.map