UNPKG

mtl-js-sdk

Version:

93 lines (70 loc) 2.24 kB
"use strict"; define(['./builder'], function (builder) { var symbolList; function addEntry(strategy, module, symbolPath) { symbolList.push(strategy, module, symbolPath); } function prepareNamespace(symbolPath, context) { if (!symbolPath) { return context; } var parts = symbolPath.split('.'); var cur = context; for (var i = 0, part; part = parts[i]; ++i) { cur = cur[part] = cur[part] || {}; } return cur; } var mapper = {}; mapper.reset = function () { symbolList = []; }; mapper.addEntry = addEntry; mapper.clobbers = function (module, symbolPath) { addEntry('c', module, symbolPath); }; mapper.merges = function (module, symbolPath) { addEntry('m', module, symbolPath); }; mapper.uniques = function (module, symbolPath) { addEntry('u', module, symbolPath); }; mapper.mapModules = function (context) { var origSymbols = {}; context.MTL_origSymbols = origSymbols; for (var i = 0, len = symbolList.length; i < len; i += 3) { var strategy = symbolList[i]; var module = symbolList[i + 1]; var symbolPath = symbolList[i + 2]; var lastDot = symbolPath.lastIndexOf('.'); var namespace = symbolPath.substr(0, lastDot); var lastName = symbolPath.substr(lastDot + 1); var parentObj = prepareNamespace(namespace, context); var target = parentObj[lastName]; if (strategy === 'u' && target) { console.log('Error: 扩展失败, ' + symbolPath + ' 已存在。'); } else if (strategy === 'm' && target) { builder.recursiveMerge(target, module); } else { if (!(symbolPath in origSymbols)) { origSymbols[symbolPath] = target; } builder.assignGetter(parentObj, lastName, module); } } }; mapper.getOriginalSymbol = function (context, symbolPath) { var origSymbols = context.MTL_origSymbols; if (origSymbols && symbolPath in origSymbols) { return origSymbols[symbolPath]; } var parts = symbolPath.split('.'); var obj = context; for (var i = 0; i < parts.length; ++i) { obj = obj && obj[parts[i]]; } return obj; }; mapper.reset(); return mapper; });