anypack
Version:
webpack the local deps
132 lines (118 loc) • 4.44 kB
JavaScript
var _ = require("lodash");
var otree = require("./tree");
var tempateMap = require("./templateFactory");
var path = require("path");
var $util = require("./util");
var nUtil = require("./nodeUtil");
function defineScope(options) {
this.options = _.assign({
regx: {
tplRaw: /^['"]\.\/[^'"]+['"]$/,
tpl: /\.\/[^'"]+$/
}
}, options);
this.deps = [];
this.vars = [];
}
defineScope.prototype = {
createRequireFunBody: function createRequireFunBody(baseInfo, onlyFunBody) {
var baseInfoText = baseInfo.text;
var options = this.options;
var regx = options.regx;
var deps = baseInfoText.oriDeps;
var vars = baseInfoText.oriVars;
var inlinedVars = this.inlinedVars(baseInfo);
var dynamicBody = tempateMap.dynamic(inlinedVars, baseInfoText.callBackFunBody);
var tail = tempateMap.tail(this.getTplContentByOrder(baseInfo.oriDeps));
var noInlined = $util.filterVars(deps, vars, regx.tplRaw);
this.deps = noInlined.deps.concat(this.deps);
this.vars = noInlined.vars.concat(this.vars);
if (onlyFunBody) {
return tempateMap.defineWrapperOnlyFunctionBody(tempateMap.top + dynamicBody + tail);
} else {
return tempateMap.defineWrapper(baseInfoText.name, this.deps, this.vars, tempateMap.top + dynamicBody + tail);
}
},
getTplContentByOrder: function getTplContentByOrder(deps) {
var _this = this;
var options = this.options;
var resolve = options.resolve;
var regx = options.regx;
var contentQueue = [];
deps = deps.filter(function (v, k) {
v = v.value;
var config = undefined;
var normalizedSrc = undefined;
var srcDir = $util.dir(options.src);
if (regx.tpl.test(v)) {
//deps
config = getTargetConfig(v);
normalizedSrc = normalizeSrc(v, config);
contentQueue.push(_this.inlineDefine(normalizedSrc, path.join(config.root, srcDir, config.dir || ""), true).contents.join(""));
}
});
return contentQueue;
function getTargetConfig(target) {
var config = resolve;
_.some(resolve.alias, function (v, k) {
if (new RegExp(k).test(target)) {
config = _.assign({}, resolve, v);
return true;
}
});
return config;
}
function normalizeSrc(src, config) {
var ext = path.extname(src);
if (config.ext && ext !== "." + config.ext) {
return src + "." + config.ext;
}
return src;
}
},
inlinedVars: function inlinedVars(biObj) {
var baseInfo = biObj.text;
var vars = baseInfo.oriVars;
var deps = baseInfo.oriDeps;
var inlineCounter = 2;
var options = this.options;
var regx = options.regx;
var inlinedVar = [];
deps.forEach(function (v, k) {
if (regx.tplRaw.test(v)) {
inlinedVar[k] = tempateMap.requireFunVarName(inlineCounter++, v);
} else {
inlinedVar[k] = vars[k];
}
});
return inlinedVar;
},
inlineDefine: function inlineDefine(src) {
var _this2 = this;
var dir = arguments.length <= 1 || arguments[1] === undefined ? "" : arguments[1];
var depDefine = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];
src = src || this.options.src;
var bodyArr = [];
var options = this.options;
var tree = new otree({
src: path.join(dir, src)
});
var entryAst = tree.curAst();
var baseInfo = undefined;
if (nUtil.isProgram(entryAst)) {
entryAst.body.forEach(function (item) {
if (!nUtil.isDefineModule(item)) return;
baseInfo = nUtil.getFormattedBaseInfo(item);
var bodyResult = _this2.createRequireFunBody(baseInfo, depDefine);
bodyArr.push(bodyResult);
});
}
return {
contents: bodyArr,
name: $util.transformRaw(baseInfo.text.name)
};
}
};
module.exports = defineScope;
//# sourceMappingURL=defineScope.js.map
;