UNPKG

@foxpage/foxpage-manager

Version:

foxpage resource manager

75 lines (74 loc) 2.13 kB
"use strict"; 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;