Showing content from http://s1.bdstatic.com/r/www/cache/efe/esl/2-1-6/esl.source.js below:
/** * ESL (Enterprise Standard Loader) * Copyright 2013 Baidu Inc. All rights reserved. * * @file Browser端æ åå è½½å¨ï¼ç¬¦åAMDè§è * @author errorrik(errorrik@gmail.com) * Firede(firede@firede.us) */ /* eslint-disable no-unused-vars */ /* jshint ignore:start */ var define; var require; var esl; /* jshint ignore:end */ /* eslint-enable no-unused-vars */ /* eslint-disable guard-for-in */ /* eslint-env amd:false */ (function (global) { // "mod"å¼å¤´çåéæå½æ°ä¸ºå
鍿¨¡å管ç彿° // 为æé«å缩çï¼ä¸ä½¿ç¨functionæobjectå
è£
/** * 模åå®¹å¨ * * @inner * @type {Object} */ var modModules = {}; // 模åç¶ææä¸¾é var MODULE_PRE_DEFINED = 1; var MODULE_ANALYZED = 2; var MODULE_PREPARED = 3; var MODULE_DEFINED = 4; /** * èªå¨å®ä¹ç模å表 * * 模ådefine factoryæ¯ç¨å°æ¶ææ§è¡ï¼ä½æ¯ä»¥ä¸å ç§æ
åµéè¦èªå¨é©¬ä¸æ§è¡ï¼ * 1. require([moduleId], callback) * 2. plugin module and plugin resource: require('plugin!resource') * 3. shim module * * @inner * @type {Object} */ var modAutoDefineModules = {}; /** * æ 记模åèªå¨è¿è¡å®ä¹ * * @inner * @param {string} id 模åid */ function modFlagAutoDefine(id) { if (!modIs(id, MODULE_DEFINED)) { modAutoDefineModules[id] = 1; } } /** * å
建moduleåç§°éå * * @inner * @type {Object} */ var BUILDIN_MODULE = { require: globalRequire, exports: 1, module: 1 }; /** * å
¨å±require彿° * * @inner * @type {Function} */ var actualGlobalRequire = createLocalRequire(); // #begin-ignore /** * è¶
æ¶æé宿¶å¨ * * @inner * @type {number} */ var waitTimeout; // #end-ignore /** * requireé
ç½® * * @inner * @type {Object} */ var requireConf = { baseUrl : './', paths : {}, config : {}, map : {}, packages : [], shim : {}, // #begin-ignore waitSeconds: 0, // #end-ignore bundles : {}, urlArgs : {} }; /** * å 载模å * * @param {string|Array} requireId 模åidææ¨¡åidæ°ç»ï¼ * @param {Function=} callback å è½½å®æçåè°å½æ° * @return {*} requireId为stringæ¶è¿åæ¨¡åæ´é²å¯¹è±¡ */ function globalRequire(requireId, callback) { // #begin-ignore // #begin assertNotContainRelativeId // ç¡®å®requireçæ¨¡åidä¸å
å«ç¸å¯¹idãç¨äºglobal requireï¼æåé¢é²é¾ä»¥è·è¸ªçé误åºç° var invalidIds = []; /** * çæµæ¨¡åidæ¯å¦relative id * * @inner * @param {string} id 模åid */ function monitor(id) { if (id.indexOf('.') === 0) { invalidIds.push(id); } } if (typeof requireId === 'string') { monitor(requireId); } else { each( requireId, function (id) { monitor(id); } ); } // å
å«ç¸å¯¹idæ¶ï¼ç´æ¥æåºé误 if (invalidIds.length > 0) { throw new Error( '[REQUIRE_FATAL]Relative ID is not allowed in global require: ' + invalidIds.join(', ') ); } // #end assertNotContainRelativeId // è¶
æ¶æé var timeout = requireConf.waitSeconds; if (timeout && (requireId instanceof Array)) { if (waitTimeout) { clearTimeout(waitTimeout); } waitTimeout = setTimeout(waitTimeoutNotice, timeout * 1000); } // #end-ignore return actualGlobalRequire(requireId, callback); } /** * çæ¬å· * * @type {string} */ globalRequire.version = '2.1.6'; /** * loaderåç§° * * @type {string} */ globalRequire.loader = 'esl'; /** * å°æ¨¡åæ è¯è½¬æ¢æç¸å¯¹çurl * * @param {string} id æ¨¡åæ è¯ * @return {string} */ globalRequire.toUrl = actualGlobalRequire.toUrl; // #begin-ignore /** * è¶
æ¶æé彿° * * @inner */ function waitTimeoutNotice() { var hangModules = []; var missModules = []; var hangModulesMap = {}; var missModulesMap = {}; var visited = {}; /** * æ£æ¥æ¨¡åçå è½½é误 * * @inner * @param {string} id 模åid * @param {boolean} hard æ¯å¦è£
è½½æ¶ä¾èµ */ function checkError(id, hard) { if (visited[id] || modIs(id, MODULE_DEFINED)) { return; } visited[id] = 1; var mod = modModules[id]; if (!mod) { if (!missModulesMap[id]) { missModulesMap[id] = 1; missModules.push(id); } } else if (hard || !modIs(id, MODULE_PREPARED) || mod.hang) { if (!hangModulesMap[id]) { hangModulesMap[id] = 1; hangModules.push(id); } each( mod.depMs, function (dep) { checkError(dep.absId, dep.hard); } ); } } for (var id in modAutoDefineModules) { checkError(id, 1); } if (hangModules.length || missModules.length) { throw new Error( '[MODULE_TIMEOUT]Hang(' + (hangModules.join(', ') || 'none') + ') Miss(' + (missModules.join(', ') || 'none') + ')' ); } } // #end-ignore /** * æªé¢å®ä¹ç模åéå * 主è¦åå¨å¿åæ¹å¼defineçæ¨¡å * * @inner * @type {Array} */ var wait4PreDefine = []; /** * å®ææ¨¡åé¢å®ä¹ï¼æ¤æ¶å¤ççæ¨¡åæ¯å¿ådefineçæ¨¡å * * @inner * @param {string} currentId å¿ådefineçæ¨¡åçid */ function modCompletePreDefine(currentId) { // HACK: è¿éå¨IEä¸æä¸ªæ§è½é·é±ï¼ä¸è½ä½¿ç¨ä»»ä½åéã // å¦åè²ä¼¼ä¼å½¢æåéå¼ç¨åä¿®æ¹ç读åéï¼å¯¼è´wait4PreDefineéæ¾å°é¾ each(wait4PreDefine, function (mod) { modPreDefine( currentId, mod.deps, mod.factory ); }); wait4PreDefine.length = 0; } /** * å®ä¹æ¨¡å * * @param {string=} id æ¨¡åæ è¯ * @param {Array=} dependencies ä¾èµæ¨¡åå表 * @param {Function=} factory å建模åçå·¥åæ¹æ³ */ function globalDefine(id, dependencies, factory) { // define(factory) // define(dependencies, factory) // define(id, factory) // define(id, dependencies, factory) if (factory == null) { if (dependencies == null) { factory = id; id = null; } else { factory = dependencies; dependencies = null; if (id instanceof Array) { dependencies = id; id = null; } } } if (factory == null) { return; } var opera = window.opera; // IEä¸éè¿current scriptçdata-require-idè·åå½åid if ( !id && document.attachEvent && (!(opera && opera.toString() === '[object Opera]')) ) { var currentScript = getCurrentScript(); id = currentScript && currentScript.getAttribute('data-require-id'); } if (id) { modPreDefine(id, dependencies, factory); } else { // 纪å½å°å
±äº«åéä¸ï¼å¨loadæreadystatechangeä¸å¤ç // æ åæµè§å¨ä¸ï¼ä½¿ç¨å¿ådefineæ¶ï¼å°è¿å
¥è¿ä¸ªåæ¯ wait4PreDefine[0] = { deps: dependencies, factory: factory }; } } globalDefine.amd = {}; /** * 模åé
ç½®è·å彿° * * @inner * @return {Object} 模åé
置对象 */ function moduleConfigGetter() { var conf = requireConf.config[this.id]; if (conf && typeof conf === 'object') { return conf; } return {}; } /** * é¢å®ä¹æ¨¡å * * @inner * @param {string} id æ¨¡åæ è¯ * @param {Array. } dependencies æ¾å¼å£°æçä¾èµæ¨¡åå表 * @param {*} factory 模åå®ä¹å½æ°ææ¨¡å对象 */ function modPreDefine(id, dependencies, factory) { // å°æ¨¡ååå
¥å®¹å¨ // // 模åå
é¨ä¿¡æ¯å
æ¬ // ----------------------------------- // id: module id // depsDec: 模åå®ä¹æ¶å£°æçä¾èµ // deps: 模åä¾èµï¼é»è®¤ä¸º['require', 'exports', 'module'] // factory: åå§å彿°æå¯¹è±¡ // factoryDeps: åå§å彿°çåæ°ä¾èµ // exports: 模åçå®é
æ´é²å¯¹è±¡ï¼AMDå®ä¹ï¼ // config: ç¨äºè·å模åé
置信æ¯ç彿°ï¼AMDå®ä¹ï¼ // state: 模åå½åç¶æ // require: local require彿° // depMs: å®é
ä¾èµç模åéåï¼æ°ç»å½¢å¼ // depMkv: å®é
ä¾èµç模åéåï¼è¡¨å½¢å¼ï¼ä¾¿äºæ¥æ¾ // depRs: å®é
ä¾èµçèµæºéå // ------------------------------------ if (!modModules[id]) { modModules[id] = { id : id, depsDec : dependencies, deps : dependencies || ['require', 'exports', 'module'], factoryDeps: [], factory : factory, exports : {}, config : moduleConfigGetter, state : MODULE_PRE_DEFINED, require : createLocalRequire(id), depMs : [], depMkv : {}, depRs : [], hang : 0 }; } } /** * å¼å§æ§è¡æ¨¡åå®ä¹åçåå¤å·¥ä½ * * é¦å
ï¼å®æå¯¹factoryä¸å£°æä¾èµçåææå * ç¶åï¼å°è¯å è½½"èµæºå è½½æé模å" * * éè¦å
å 载模åçåå æ¯ï¼å¦ææ¨¡åä¸åå¨ï¼æ æ³è¿è¡resourceId normalizeå * * @inner * @param {string} id 模åid */ function modPrepare(id) { var mod = modModules[id]; if (!mod || modIs(id, MODULE_ANALYZED)) { return; } var deps = mod.deps; var factory = mod.factory; var hardDependsCount = 0; // åæfunction bodyä¸çrequire // 妿å
嫿¾å¼ä¾èµå£°æï¼æ ¹æ®AMDè§å®åæ§è½èèï¼å¯ä»¥ä¸åæfactoryBody if (typeof factory === 'function') { hardDependsCount = Math.min(factory.length, deps.length); // If the dependencies argument is present, the module loader // SHOULD NOT scan for dependencies within the factory function. !mod.depsDec && factory.toString() .replace(/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, '') .replace(/require\(\s*(['"])([^'"]+)\1\s*\)/g, function ($0, $1, depId) { deps.push(depId); } ); } var requireModules = []; var depResources = []; each(deps, function (depId, index) { var idInfo = parseId(depId); var absId = normalize(idInfo.mod, id); var moduleInfo; var resInfo; if (absId && !BUILDIN_MODULE[absId]) { // 妿ä¾èµæ¯ä¸ä¸ªèµæºï¼å°å
¶ä¿¡æ¯æ·»å å°module.depRs // // module.depRsä¸ç项æå¯è½æ¯éå¤çã // å¨è¿ä¸ªé¶æ®µï¼å è½½resourceçmoduleå¯è½è¿æªdefinedï¼ // å¯¼è´æ¤æ¶resource idæ æ³è¢«normalizeã // // æ¯å¦å¯¹a/b/cèè¨ï¼ä¸é¢å 个resourceå¯è½æçæ¯åä¸ä¸ªèµæºï¼ // - js!../name.js // - js!a/name.js // - ../../js!../name.js // // æä»¥å è½½èµæºçmodule readyæ¶ï¼éè¦éåmodule.depRsè¿è¡å¤ç if (idInfo.res) { resInfo = { id: depId, mod: absId, res: idInfo.res }; depResources.push(depId); mod.depRs.push(resInfo); } // 对ä¾èµæ¨¡åçid normalizeè½ä¿è¯æ£ç¡®æ§ï¼å¨æ¤å¤è¿è¡å»é moduleInfo = mod.depMkv[absId]; if (!moduleInfo) { moduleInfo = { id: idInfo.mod, absId: absId, hard: index < hardDependsCount }; mod.depMs.push(moduleInfo); mod.depMkv[absId] = moduleInfo; requireModules.push(absId); } } else { moduleInfo = {absId: absId}; } // 妿å½åæ£å¨åæçä¾èµé¡¹æ¯defineä¸å£°æçï¼ // åè®°å½å°module.factoryDepsä¸ // å¨factory invokeåå°ç¨äºçæinvoke arguments if (index < hardDependsCount) { mod.factoryDeps.push(resInfo || moduleInfo); } }); mod.state = MODULE_ANALYZED; modInitFactoryInvoker(id); nativeAsyncRequire(requireModules); depResources.length && mod.require( depResources, function () { each(mod.depRs, function (res) { if (!res.absId) { res.absId = normalize(res.id, id); } }); modAutoDefine(); } ); } /** * 对ä¸äºéè¦èªå¨å®ä¹ç模åè¿è¡èªå¨å®ä¹ * * @inner */ function modAutoDefine() { for (var id in modAutoDefineModules) { modPrepare(id); modUpdatePreparedState(id); modTryInvokeFactory(id); } } /** * æ´æ°æ¨¡åçåå¤ç¶æ * * @inner * @param {string} id 模åid */ function modUpdatePreparedState(id) { var updatingModules = {}; update(id); function update(id) { modPrepare(id); if (!modIs(id, MODULE_ANALYZED)) { return false; } if (modIs(id, MODULE_PREPARED) || updatingModules[id]) { return true; } updatingModules[id] = 1; var mod = modModules[id]; var prepared = true; each( mod.depMs, function (dep) { // return (prepared = update(dep.absId)); prepared = update(dep.absId) && prepared; } ); // 夿resourceæ¯å¦å è½½å®æã妿resourceæªå è½½å®æï¼å认为æªåå¤å¥½ /* jshint ignore:start */ prepared && each( mod.depRs, function (dep) { prepared = !!dep.absId; return prepared; } ); /* jshint ignore:end */ if (prepared && !modIs(id, MODULE_PREPARED)) { mod.state = MODULE_PREPARED; } updatingModules[id] = 0; return prepared; } } /** * åå§å模åå®ä¹æ¶æéçfactoryæ§è¡å¨ * * @inner * @param {string} id 模åid */ function modInitFactoryInvoker(id) { var mod = modModules[id]; var invoking; mod.invokeFactory = invokeFactory; /** * åå§å模å * * @inner */ function invokeFactory() { if (invoking || mod.state !== MODULE_PREPARED) { return; } invoking = 1; // æ¼æ¥factory invokeæéçarguments var factoryReady = 1; each( mod.factoryDeps, function (dep) { var depId = dep.absId; if (!BUILDIN_MODULE[depId]) { modTryInvokeFactory(depId); return (factoryReady = modIs(depId, MODULE_DEFINED)); } } ); if (factoryReady) { try { // è°ç¨factory彿°åå§åmodule var factory = mod.factory; var exports = typeof factory === 'function' ? factory.apply(global, modGetModulesExports( mod.factoryDeps, { require: mod.require, exports: mod.exports, module: mod } )) : factory; if (exports != null) { mod.exports = exports; } mod.invokeFactory = null; } catch (ex) { mod.hang = 1; throw ex; } // 宿define // 䏿¾å¨tryéï¼é¿å
åç»çè¿è¡é误被è¿éåæ modDefined(id); } } } /** * å¤ææ¨¡åæ¯å¦å®æç¸åºçç¶æ * * @inner * @param {string} id æ¨¡åæ è¯ * @param {number} state ç¶æç ï¼ä½¿ç¨æ¶ä¼ å
¥ç¸åºçæä¸¾åéï¼æ¯å¦`MODULE_DEFINED` * @return {boolean} æ¯å¦å®æç¸åºçç¶æ */ function modIs(id, state) { return modModules[id] && modModules[id].state >= state; } /** * å°è¯æ§è¡æ¨¡åfactory彿°ï¼è¿è¡æ¨¡ååå§å * * @inner * @param {string} id 模åid */ function modTryInvokeFactory(id) { var mod = modModules[id]; if (mod && mod.invokeFactory) { mod.invokeFactory(); } } /** * æ ¹æ®æ¨¡åidæ°ç»ï¼è·åå
¶çexportsæ°ç» * ç¨äºæ¨¡ååå§åçfactoryåæ°ærequireçcallbackåæ°çæ * * @inner * @param {Array} modules 模åidæ°ç» * @param {Object} buildinModules å
建模å对象 * @return {Array} 模åexportsæ°ç» */ function modGetModulesExports(modules, buildinModules) { var args = []; each( modules, function (id, index) { if (typeof id === 'object') { id = id.absId; } args[index] = buildinModules[id] || modModules[id].exports; } ); return args; } /** * 模åå®ä¹å®æäºä»¶çå¬å¨å®¹å¨ * * @inner * @type {Object} */ var modDefinedListeners = {}; /** * æ·»å æ¨¡åå®ä¹å®ææ¶é´ççå¬å¨ * * @inner * @param {string} id æ¨¡åæ è¯ * @param {Function} listener çå¬å½æ° */ function modAddDefinedListener(id, listener) { if (modIs(id, MODULE_DEFINED)) { listener(); return; } var listeners = modDefinedListeners[id]; if (!listeners) { listeners = modDefinedListeners[id] = []; } listeners.push(listener); } /** * 模åç¶æåæ¢ä¸ºå®ä¹å®æ * å 为éè¦è§¦åäºä»¶ï¼MODULE_DEFINEDç¶æåæ¢éè¿è¯¥å½æ° * * @inner * @param {string} id æ¨¡åæ è¯ */ function modDefined(id) { var mod = modModules[id]; mod.state = MODULE_DEFINED; delete modAutoDefineModules[id]; var listeners = modDefinedListeners[id] || []; var len = listeners.length; while (len--) { // è¿éä¸åfunctionç±»åçæ£æµ // å 为listener齿¯éè¿modOnä¼ å
¥çï¼modOn为å
é¨è°ç¨ listeners[len](); } // æ¸
çlisteners listeners.length = 0; modDefinedListeners[id] = null; } /** * 弿¥å 载模å * å
é¨ä½¿ç¨ï¼æ¨¡åIDå¿
é¡»æ¯ç»è¿normalizeçTop-Level ID * * @inner * @param {Array} ids 模ååç§°ææ¨¡ååç§°å表 * @param {Function=} callback è·å模å宿æ¶çåè°å½æ° * @param {string} baseId åºç¡idï¼ç¨äºå½idsæ¯relative idæ¶çnormalize */ function nativeAsyncRequire(ids, callback, baseId) { var isCallbackCalled = 0; each(ids, function (id) { if (!(BUILDIN_MODULE[id] || modIs(id, MODULE_DEFINED))) { modAddDefinedListener(id, tryFinishRequire); (id.indexOf('!') > 0 ? loadResource : loadModule )(id, baseId); } }); tryFinishRequire(); /** * å°è¯å®ærequireï¼è°ç¨callback * 卿¨¡åä¸å
¶ä¾èµæ¨¡åé½å è½½å®æ¶è°ç¨ * * @inner */ function tryFinishRequire() { if (typeof callback === 'function' && !isCallbackCalled) { var isAllCompleted = 1; each(ids, function (id) { if (!BUILDIN_MODULE[id]) { return (isAllCompleted = !!modIs(id, MODULE_DEFINED)); } }); // æ£æµå¹¶è°ç¨callback if (isAllCompleted) { isCallbackCalled = 1; callback.apply( global, modGetModulesExports(ids, BUILDIN_MODULE) ); } } } } /** * æ£å¨å è½½çæ¨¡åå表 * * @inner * @type {Object} */ var loadingModules = {}; /** * å 载模å * * @inner * @param {string} moduleId æ¨¡åæ è¯ */ function loadModule(moduleId) { // å è½½è¿ç模åï¼å°±ä¸è¦åç»§ç»äº if (loadingModules[moduleId] || modModules[moduleId]) { return; } loadingModules[moduleId] = 1; // åå§åç¸å
³ shim çé
ç½® var shimConf = requireConf.shim[moduleId]; if (shimConf instanceof Array) { requireConf.shim[moduleId] = shimConf = { deps: shimConf }; } // shimä¾èµç模åéè¦èªå¨æ è¯ä¸ºshim // æ 论æ¯çº¯æ£çshim模åè¿æ¯hybird模å var shimDeps = shimConf && (shimConf.deps || []); if (shimDeps) { each(shimDeps, function (dep) { if (!requireConf.shim[dep]) { requireConf.shim[dep] = {}; } }); actualGlobalRequire(shimDeps, load); } else { load(); } /** * åé请æ±å»å 载模å * * @inner */ function load() { /* eslint-disable no-use-before-define */ var bundleModuleId = bundlesIndex[moduleId]; createScript(bundleModuleId || moduleId, loaded); /* eslint-enable no-use-before-define */ } /** * scriptæ ç¾å è½½å®æçäºä»¶å¤ç彿° * * @inner */ function loaded() { if (shimConf) { var exports; if (typeof shimConf.init === 'function') { exports = shimConf.init.apply( global, modGetModulesExports(shimDeps, BUILDIN_MODULE) ); } if (exports == null && shimConf.exports) { exports = global; each( shimConf.exports.split('.'), function (prop) { exports = exports[prop]; return !!exports; } ); } globalDefine(moduleId, shimDeps, function () { return exports || {}; }); } else { modCompletePreDefine(moduleId); } modAutoDefine(); } } /** * å è½½èµæº * * @inner * @param {string} pluginAndResource æä»¶ä¸èµæºæ è¯ * @param {string} baseId å½åç¯å¢çæ¨¡åæ è¯ */ function loadResource(pluginAndResource, baseId) { if (modModules[pluginAndResource]) { return; } /* eslint-disable no-use-before-define */ var bundleModuleId = bundlesIndex[pluginAndResource]; if (bundleModuleId) { loadModule(bundleModuleId); return; } /* eslint-enable no-use-before-define */ var idInfo = parseId(pluginAndResource); var resource = { id: pluginAndResource, state: MODULE_ANALYZED }; modModules[pluginAndResource] = resource; /** * pluginå è½½å®æçåè°å½æ° * * @inner * @param {*} value resourceçå¼ */ function pluginOnload(value) { resource.exports = value || true; modDefined(pluginAndResource); } /* jshint ignore:start */ /** * è¯¥æ¹æ³å
许plugin使ç¨å è½½çèµæºå£°ææ¨¡å * * @param {string} id 模åid * @param {string} text 模å声æå符串 */ pluginOnload.fromText = function (id, text) { new Function(text)(); modCompletePreDefine(id); }; /* jshint ignore:end */ /** * å è½½èµæº * * @inner * @param {Object} plugin ç¨äºå è½½èµæºçæä»¶æ¨¡å */ function load(plugin) { var pluginRequire = baseId ? modModules[baseId].require : actualGlobalRequire; plugin.load( idInfo.res, pluginRequire, pluginOnload, moduleConfigGetter.call({id: pluginAndResource}) ); } load(actualGlobalRequire(idInfo.mod)); } /** * é
ç½®require * * @param {Object} conf é
置对象 */ globalRequire.config = function (conf) { if (conf) { for (var key in requireConf) { var newValue = conf[key]; var oldValue = requireConf[key]; if (!newValue) { continue; } if (key === 'urlArgs' && typeof newValue === 'string') { requireConf.urlArgs['*'] = newValue; } else { // ç®åçå¤å¤é
ç½®è¿æ¯éè¦æ¯æï¼æä»¥é
ç½®å®ç°ä¸ºæ¯æäºçº§mix if (oldValue instanceof Array) { oldValue.push.apply(oldValue, newValue); } else if (typeof oldValue === 'object') { for (var k in newValue) { oldValue[k] = newValue[k]; } } else { requireConf[key] = newValue; } } } createConfIndex(); } }; // åå§åæ¶éè¦å建é
ç½®ç´¢å¼ createConfIndex(); /** * pathså
é¨ç´¢å¼ * * @inner * @type {Array} */ var pathsIndex; /** * packageså
é¨ç´¢å¼ * * @inner * @type {Array} */ var packagesIndex; /** * mappingå
é¨ç´¢å¼ * * @inner * @type {Array} */ var mappingIdIndex; /** * bundleså
é¨ç´¢å¼ * * @inner * @type {Object} */ var bundlesIndex; /** * urlArgså
é¨ç´¢å¼ * * @inner * @type {Array} */ var urlArgsIndex; /** * å°key为module id prefixçObjectï¼çææ°ç»å½¢å¼çç´¢å¼ï¼å¹¶æç
§é¿åº¦ååé¢æåº * * @inner * @param {Object} value æºå¼ * @param {boolean} allowAsterisk æ¯å¦å
许*å·è¡¨ç¤ºå¹é
ææ * @return {Array} ç´¢å¼å¯¹è±¡ */ function createKVSortedIndex(value, allowAsterisk) { var index = kv2List(value, 1, allowAsterisk); index.sort(descSorterByKOrName); return index; } /** * å建é
置信æ¯å
é¨ç´¢å¼ * * @inner */ function createConfIndex() { requireConf.baseUrl = requireConf.baseUrl.replace(/\/$/, '') + '/'; // create paths index pathsIndex = createKVSortedIndex(requireConf.paths); // create mappingId index mappingIdIndex = createKVSortedIndex(requireConf.map, 1); each( mappingIdIndex, function (item) { item.v = createKVSortedIndex(item.v); } ); var lastMapItem = mappingIdIndex[mappingIdIndex.length - 1]; if (lastMapItem && lastMapItem.k === '*') { each( mappingIdIndex, function (item) { if (item != lastMapItem) { item.v = item.v.concat(lastMapItem.v); } } ); } // create packages index var packageNames = {}; var packageLen = requireConf.packages.length; packagesIndex = []; while (packageLen--) { var packageConf = requireConf.packages[packageLen]; var pkg; switch (typeof packageConf) { case 'string': pkg = { name: packageConf.split('/')[0], location: packageConf }; break; case 'object': pkg = { name: packageConf.name, location: packageConf.location, main: packageConf.main }; break; } if (packageNames[pkg.name]) { continue; } packageNames[pkg.name] = 1; pkg.location = pkg.location || pkg.name; pkg.main = (pkg.main || 'main').replace(/\.js$/i, ''); pkg.reg = createPrefixRegexp(pkg.name); packagesIndex.push(pkg); } packagesIndex.sort(descSorterByKOrName); // create urlArgs index urlArgsIndex = createKVSortedIndex(requireConf.urlArgs, 1); // create bundles index bundlesIndex = {}; /* eslint-disable no-use-before-define */ function bundlesIterator(id) { bundlesIndex[resolvePackageId(id)] = key; } /* eslint-enable no-use-before-define */ for (var key in requireConf.bundles) { each(requireConf.bundles[key], bundlesIterator); } } /** * 对é
置信æ¯çç´¢å¼è¿è¡æ£ç´¢ * * @inner * @param {string} value è¦æ£ç´¢çå¼ * @param {Array} index ç´¢å¼å¯¹è±¡ * @param {Function} hitBehavior ç´¢å¼å½ä¸çè¡ä¸ºå½æ° */ function indexRetrieve(value, index, hitBehavior) { each(index, function (item) { if (item.reg.test(value)) { hitBehavior(item.v, item.k, item); return false; } }); } /** * å°`æ¨¡åæ è¯+'.extension'`å½¢å¼çåç¬¦ä¸²è½¬æ¢æç¸å¯¹çurl * * @inner * @param {string} source æºå符串 * @param {string} baseId å½åmodule id * @return {string} url */ function toUrl(source, baseId) { // å离 æ¨¡åæ è¯ å .extension var extReg = /(\.[a-z0-9]+)$/i; var queryReg = /(\?[^#]*)$/; var extname = ''; var id = source; var query = ''; if (queryReg.test(source)) { query = RegExp.$1; source = source.replace(queryReg, ''); } if (extReg.test(source)) { extname = RegExp.$1; id = source.replace(extReg, ''); } if (baseId != null) { id = normalize(id, baseId); } var url = id; // pathså¤çåå¹é
var isPathMap; indexRetrieve(id, pathsIndex, function (value, key) { url = url.replace(key, value); isPathMap = 1; }); // packageså¤çåå¹é
if (!isPathMap) { indexRetrieve(id, packagesIndex, function (value, key, item) { url = url.replace(item.name, item.location); }); } // ç¸å¯¹è·¯å¾æ¶ï¼éå baseUrl if (!/^([a-z]{2,10}:\/)?\//i.test(url)) { url = requireConf.baseUrl + url; } // éå .extension å query url += extname + query; // urlArgså¤çåå¹é
indexRetrieve(id, urlArgsIndex, function (value) { url += (url.indexOf('?') > 0 ? '&' : '?') + value; }); return url; } /** * å建local require彿° * * @inner * @param {number} baseId å½åmodule id * @return {Function} local require彿° */ function createLocalRequire(baseId) { var requiredCache = {}; function req(requireId, callback) { if (typeof requireId === 'string') { if (!requiredCache[requireId]) { var topLevelId = normalize(requireId, baseId); // æ ¹æ® https://github.com/amdjs/amdjs-api/wiki/require // It MUST throw an error if the module has not // already been loaded and evaluated. modTryInvokeFactory(topLevelId); if (!modIs(topLevelId, MODULE_DEFINED)) { throw new Error('[MODULE_MISS]"' + topLevelId + '" is not exists!'); } requiredCache[requireId] = modModules[topLevelId].exports; } return requiredCache[requireId]; } else if (requireId instanceof Array) { // åææ¯å¦æresourceï¼ååºpluginModuleå
var pureModules = []; var normalizedIds = []; each( requireId, function (id, i) { var idInfo = parseId(id); var absId = normalize(idInfo.mod, baseId); var resId = idInfo.res; var normalizedId = absId; if (resId) { var trueResId = absId + '!' + resId; if (resId.indexOf('.') !== 0 && bundlesIndex[trueResId]) { absId = normalizedId = trueResId; } else { normalizedId = null; } } normalizedIds[i] = normalizedId; modFlagAutoDefine(absId); pureModules.push(absId); } ); // å 载模å nativeAsyncRequire( pureModules, function () { /* jshint ignore:start */ each(normalizedIds, function (id, i) { if (id == null) { id = normalizedIds[i] = normalize(requireId[i], baseId); modFlagAutoDefine(id); } }); /* jshint ignore:end */ // modAutoDefineä¸ï¼factory invokeå¯è½åçé误 // ä»è导è´nativeAsyncRequire没æè¢«è°ç¨ï¼callback没æä¸ // æä»¥nativeAsyncRequireè¦å
è¿è¡ nativeAsyncRequire(normalizedIds, callback, baseId); modAutoDefine(); }, baseId ); modAutoDefine(); } } /** * å°[module ID] + '.extension'æ ¼å¼çåç¬¦ä¸²è½¬æ¢æurl * * @inner * @param {string} id 符åæè¿°æ ¼å¼çæºå符串 * @return {string} url */ req.toUrl = function (id) { return toUrl(id, baseId || ''); }; return req; } /** * id normalizeå * * @inner * @param {string} id éè¦normalizeçæ¨¡åæ è¯ * @param {string} baseId å½åç¯å¢çæ¨¡åæ è¯ * @return {string} normalizeç»æ */ function normalize(id, baseId) { if (!id) { return ''; } baseId = baseId || ''; var idInfo = parseId(id); if (!idInfo) { return id; } var resourceId = idInfo.res; var moduleId = relative2absolute(idInfo.mod, baseId); // æ ¹æ®configä¸çmapé
ç½®è¿è¡module id mapping indexRetrieve( baseId, mappingIdIndex, function (value) { indexRetrieve( moduleId, value, function (mdValue, mdKey) { moduleId = moduleId.replace(mdKey, mdValue); } ); } ); moduleId = resolvePackageId(moduleId); if (resourceId) { var mod = modIs(moduleId, MODULE_DEFINED) && actualGlobalRequire(moduleId); resourceId = mod && mod.normalize ? mod.normalize( resourceId, function (resId) { return normalize(resId, baseId); } ) : normalize(resourceId, baseId); moduleId += '!' + resourceId; } return moduleId; } /** * 对idè¿è¡packageè§£æ * 妿æ¯packageï¼åéå 主模åid * * @inner * @param {string} id 模åid * @return {string} è§£æåçid */ function resolvePackageId(id) { each( packagesIndex, function (packageConf) { var name = packageConf.name; if (name === id) { id = name + '/' + packageConf.main; return false; } } ); return id; } /** * ç¸å¯¹idè½¬æ¢æç»å¯¹id * * @inner * @param {string} id è¦è½¬æ¢çç¸å¯¹id * @param {string} baseId å½åæå¨ç¯å¢id * @return {string} ç»å¯¹id */ function relative2absolute(id, baseId) { if (id.indexOf('.') !== 0) { return id; } var segs = baseId.split('/').slice(0, -1).concat(id.split('/')); var res = []; for (var i = 0; i < segs.length; i++) { var seg = segs[i]; switch (seg) { case '.': break; case '..': if (res.length && res[res.length - 1] !== '..') { res.pop(); } else { // allow above root res.push(seg); } break; default: seg && res.push(seg); } } return res.join('/'); } /** * è§£æidï¼è¿å带æmoduleåresource屿§çObject * * @inner * @param {string} id æ è¯ * @return {Object} idè§£æç»æå¯¹è±¡ */ function parseId(id) { var segs = id.split('!'); if (segs[0]) { return { mod: segs[0], res: segs[1] }; } } /** * å°å¯¹è±¡æ°æ®è½¬æ¢ææ°ç»ï¼æ°ç»æ¯é¡¹æ¯å¸¦ækåvçObject * * @inner * @param {Object} source å¯¹è±¡æ°æ® * @param {boolean} keyMatchable keyæ¯å¦å
许被åç¼å¹é
* @param {boolean} allowAsterisk æ¯å¦æ¯æ*å¹é
ææ * @return {Array.
RetroSearch is an open source project built by @garambo
| Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4