@foxpage/foxpage-manager
Version:
foxpage resource manager
75 lines (74 loc) • 2.13 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadFile = exports.runInNodeContext = exports.computeMD5Hash = void 0;
const crypto_1 = __importDefault(require("crypto"));
const fs_1 = require("fs");
const vm_1 = require("vm");
const json5_1 = __importDefault(require("json5"));
/**
* compute MD5
*
* @export
* @param {string} code
* @param {number} [len=8]
* @return {*}
*/
function computeMD5Hash(code, len = 8) {
const md5 = crypto_1.default.createHash('md5');
md5.update(code);
const hash = md5.digest('hex');
return hash.substr(0, len);
}
exports.computeMD5Hash = computeMD5Hash;
/**
* run code in node context
*
* @export
* @param {string} code
* @return {*}
*/
function runInNodeContext(code) {
const mod = { exports: {} };
const context = (0, vm_1.createContext)({ module: mod, exports: mod.exports, require: require, global: global });
(0, vm_1.runInContext)(code, context);
return mod;
}
exports.runInNodeContext = runInNodeContext;
/**
* load file content
*
* @export
* @template T
* @param {string} filePath
* @param {T} [def]
* @param {*} [{ useJSON5 = false }={}]
* @return {*} {T}
*/
function loadFile(filePath, def, { useJSON5 = false } = {}) {
try {
if (useJSON5 && filePath.endsWith('.json')) {
const source = (0, fs_1.readFileSync)(filePath, { encoding: 'utf-8' });
const result = json5_1.default.parse(source);
return result;
}
let mod = require(filePath);
if (mod && typeof mod === 'object' && 'default' in mod) {
return mod;
}
// clear cache
delete require.cache[require.resolve(filePath)];
mod = require(filePath);
return mod;
}
catch (error) {
if (def !== undefined) {
return def;
}
// logger.debug('load file %s fail. error: ', filePath, error);
throw error;
}
}
exports.loadFile = loadFile;