@foxpage/foxpage-manager
Version:
foxpage resource manager
47 lines (45 loc) • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.wrapCode = exports.wrapRequire = void 0;
const foxpage_shared_1 = require("@foxpage/foxpage-shared");
const service_1 = require("../service");
/**
* wrap require
*
* @export
* @param {NodeRequire} req
* @param {WrappedPackageDetail} [{ deps = [] }={}]
* @return {*} {NodeRequire}
*/
function wrapRequire(req, { appId = '', deps } = {}) {
const wrappedRequire = (id) => {
var _a;
const idx = deps ? deps.findIndex(it => it === id) : -1;
if (idx > -1) {
const foxpagePackage = (_a = (0, service_1.getApplication)(appId)) === null || _a === void 0 ? void 0 : _a.packageManager.getPackageSync(id);
if (foxpagePackage && foxpagePackage.available) {
return foxpagePackage.exported;
}
}
return req(id);
};
Object.assign(wrappedRequire, req);
return wrappedRequire;
}
exports.wrapRequire = wrapRequire;
const fnName = 'wrapRequire';
/**
* to support foxpage package require other foxpage package, we need impl my `require` fn to override original
* @param code
*/
function wrapCode(code, detail) {
const data = (0, foxpage_shared_1.pick)(detail, ['appId', 'name', 'version', 'deps']);
const arg = JSON.stringify(data, undefined, 2);
const filepath = __filename.replace(/\\/g, '\\\\');
const wrapped = `
;var require = require("${filepath}").${fnName}(require, ${arg});
${code}
`;
return wrapped;
}
exports.wrapCode = wrapCode;