New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

liferay-amd-loader

Package Overview
Dependencies
Maintainers
1
Versions
39
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

liferay-amd-loader - npm Package Compare versions

Comparing version 1.4.4 to 1.5.0

dist/demo/modules3/a.js

2

dist/loader-min.js

@@ -1,1 +0,1 @@

(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){N=e}function r(e){K=e}function o(){return function(){process.nextTick(l)}}function i(){return function(){G(l)}}function s(){var e=0,t=new H(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function a(){return function(){setTimeout(l,1)}}function l(){for(var e=0;Y>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}Y=0}function c(){try{var e=require,t=e("vertx");return G=t.runOnLoop||t.runOnContext,i()}catch(n){return a()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var s=arguments[r-1];K(function(){E(r,o,s,i)})}else x(n,o,e,t);return o}function d(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return M(n,e),n}function h(){}function p(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function _(e){try{return e.then}catch(t){return re.error=t,re}}function m(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){K(function(e){var r=!1,o=m(n,t,function(n){r||(r=!0,t!==n?M(e,n):P(e,n))},function(t){r||(r=!0,C(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,C(e,o))},e)}function y(e,t){t._state===te?P(e,t._result):t._state===ne?C(e,t._result):x(t,void 0,function(t){M(e,t)},function(t){C(e,t)})}function b(e,n,r){n.constructor===e.constructor&&r===Z&&constructor.resolve===$?y(e,n):r===re?C(e,re.error):void 0===r?P(e,n):t(r)?v(e,n,r):P(e,n)}function M(t,n){t===n?C(t,p()):e(n)?b(t,n,_(n)):P(t,n)}function w(e){e._onerror&&e._onerror(e._result),O(e)}function P(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&K(O,e))}function C(e,t){e._state===ee&&(e._state=ne,e._result=t,K(w,e))}function x(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&K(O,e)}function O(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;s<t.length;s+=3)r=t[s],o=t[s+n],r?E(n,r,o,i):o(i);e._subscribers.length=0}}function j(){this.error=null}function A(e,t){try{return e(t)}catch(n){return oe.error=n,oe}}function E(e,n,r,o){var i,s,u,a,l=t(r);if(l){if(i=A(r,o),i===oe?(a=!0,s=i.error,i=null):u=!0,n===i)return void C(n,g())}else i=o,u=!0;n._state!==ee||(l&&u?M(n,i):a?C(n,s):e===te?P(n,i):e===ne&&C(n,i))}function k(e,t){try{t(function(t){M(e,t)},function(t){C(e,t)})}catch(n){C(e,n)}}function B(e){return new ce(this,e).promise}function S(e){function t(e){M(o,e)}function n(e){C(o,e)}var r=this,o=new r(h);if(!V(e))return C(o,new TypeError("You must pass an array to race.")),o;for(var i=e.length,s=0;o._state===ee&&i>s;s++)x(r.resolve(e[s]),void 0,t,n);return o}function D(e){var t=this,n=new t(h);return C(n,e),n}function q(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function L(e){this._id=ae++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&q(),this instanceof L?k(this,e):R())}function I(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?P(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&P(this.promise,this._result))):C(this.promise,this._validationError())}function F(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;n&&"[object Promise]"===Object.prototype.toString.call(n.resolve())&&!n.cast||(e.Promise=le)}var T;T=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var G,N,U,V=T,Y=0,K=function(e,t){X[Y]=e,X[Y+1]=t,Y+=2,2===Y&&(N?N(l):U())},W="undefined"!=typeof window?window:void 0,z=W||{},H=z.MutationObserver||z.WebKitMutationObserver,J="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),Q="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);U=J?o():H?s():Q?u():void 0===W&&"function"==typeof require?c():a();var Z=f,$=d,ee=void 0,te=1,ne=2,re=new j,oe=new j,ie=B,se=S,ue=D,ae=0,le=L;L.all=ie,L.race=se,L.resolve=$,L.reject=ue,L._setScheduler=n,L._setAsap=r,L._asap=K,L.prototype={constructor:L,then:Z,"catch":function(e){return this.then(null,e)}};var ce=I;I.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},I.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},I.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===$){var o=_(e);if(o===Z&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===le){var i=new n(h);b(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},I.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?C(r,n):this._result[t]=n),0===this._remaining&&P(r,this._result)},I.prototype._willSettleAt=function(e,t){var n=this;x(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=F,de={Promise:le,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return de}):"undefined"!=typeof module&&module.exports?module.exports=de:"undefined"!=typeof this&&(this.ES6Promise=de),fe()}).call(this),function(){var global={};global.__CONFIG__=window.__CONFIG__,function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.EventEmitter=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(){this._events={}}return t.prototype={constructor:t,on:function(e,t){var n=this._events[e]=this._events[e]||[];n.push(t)},off:function(e,t){var n=this._events[e];if(n){var r=n.indexOf(t);r>-1&&n.splice(r,1)}},emit:function(e,t){var n=this._events[e];if(n){n=n.slice(0);for(var r=0;r<n.length;r++){var o=n[r];o.call(o,t)}}}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.ConfigParser=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(e){this._config={},this._modules={},this._conditionalModules={},this._parseConfig(e)}return t.prototype={constructor:t,addModule:function(e){var t=this._modules[e.name];if(t)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);else this._modules[e.name]=e;return this._registerConditionalModule(e),this._modules[e.name]},getConfig:function(){return this._config},getConditionalModules:function(){return this._conditionalModules},getModules:function(){return this._modules},mapModule:function(e){if(!this._config.maps)return e;var t;t=Array.isArray(e)?e:[e];for(var n=0;n<t.length;n++){var r=t[n],o=!1;for(var i in this._config.maps)if(Object.prototype.hasOwnProperty.call(this._config.maps,i)&&(r===i||0===r.indexOf(i+"/"))){r=this._config.maps[i]+r.substring(i.length),t[n]=r,o=!0;break}o||"function"!=typeof this._config.maps["*"]||(t[n]=this._config.maps["*"](r))}return Array.isArray(e)?t:t[0]},_parseConfig:function(e){for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&("modules"===t?this._parseModules(e[t]):this._config[t]=e[t]);return this._config},_parseModules:function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)){var n=e[t];n.name=t,this.addModule(n)}return this._modules},_registerConditionalModule:function(e){if(e.condition){var t=this._conditionalModules[e.condition.trigger];t||(this._conditionalModules[e.condition.trigger]=t=[]),t.push(e.name)}}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.DependencyBuilder=n}("undefined"!=typeof global?global:this,function(global){"use strict";function DependencyBuilder(e){this._configParser=e,this._pathResolver=new global.PathResolver,this._result=[]}var hasOwnProperty=Object.prototype.hasOwnProperty;return DependencyBuilder.prototype={constructor:DependencyBuilder,resolveDependencies:function(e){this._queue=e.slice(0);var t;try{this._resolveDependencies(),t=this._result.reverse().slice(0)}finally{this._cleanup()}return t},_cleanup:function(){var e=this._configParser.getModules();for(var t in e)if(hasOwnProperty.call(e,t)){var n=e[t];n.conditionalMark=!1,n.mark=!1,n.tmpMark=!1}this._queue.length=0,this._result.length=0},_processConditionalModules:function(e){var t=this._configParser.getConditionalModules()[e.name];if(t&&!e.conditionalMark){for(var n=this._configParser.getModules(),r=0;r<t.length;r++){var o=n[t[r]];-1===this._queue.indexOf(o.name)&&this._testConditionalModule(o.condition.test)&&this._queue.push(o.name)}e.conditionalMark=!0}},_resolveDependencies:function(){for(var e=this._configParser.getModules(),t=0;t<this._queue.length;t++){var n=e[this._queue[t]];n||(n=this._configParser.addModule({name:this._queue[t],dependencies:[]})),n.mark||this._visit(n)}},_testConditionalModule:function(testFunction){return"function"==typeof testFunction?testFunction():eval("false || "+testFunction)()},_visit:function(e){if(e.tmpMark)throw new Error("Error processing module: "+e.name+". The provided configuration is not Directed Acyclic Graph.");if(this._processConditionalModules(e),!e.mark){e.tmpMark=!0;for(var t=this._configParser.getModules(),n=0;n<e.dependencies.length;n++){var r=e.dependencies[n];if("exports"!==r&&"module"!==r){r=this._pathResolver.resolvePath(e.name,r);var o=this._configParser.mapModule(r),i=t[o];i||(i=this._configParser.addModule({name:o,dependencies:[]})),this._visit(i)}}e.mark=!0,e.tmpMark=!1,this._result.unshift(e.name)}},_queue:[]},DependencyBuilder}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.URLBuilder=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(e){this._configParser=e}var n=/^https?:\/\/|\/\/|www\./;return t.prototype={constructor:t,build:function(e){var t=[],r=[],o=[],i=[],s=[],u=this._configParser.getConfig(),a=u.basePath||"",l=this._configParser.getModules();a.length&&"/"!==a.charAt(a.length-1)&&(a+="/");for(var c=0;c<e.length;c++){var f=l[e[c]];if(f.fullPath)s.push({modules:[f.name],url:f.fullPath});else{var d=this._getModulePath(f),h=0===d.indexOf("/");n.test(d)?s.push({modules:[f.name],url:d}):u.combine?h?(t.push(d),o.push(f.name)):(r.push(d),i.push(f.name)):s.push({modules:[f.name],url:u.url+(h?"":a)+d})}f.requested=!0}return r.length&&(s.push({modules:i,url:u.url+a+r.join("&"+a)}),r.length=0),t.length&&(s.push({modules:o,url:u.url+t.join("&")}),t.length=0),s},_getModulePath:function(e){var t=e.path||e.name,r=this._configParser.getConfig().paths;for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(t!==o&&0!==t.indexOf(o+"/")||(t=r[o]+t.substring(o.length)));return n.test(t)||t.indexOf(".js")===t.length-3||(t+=".js"),t}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.PathResolver=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(){}return t.prototype={constructor:t,resolvePath:function(e,t){if("exports"===t||"module"===t||0!==t.indexOf(".")&&0!==t.indexOf(".."))return t;var n=e.split("/");n.splice(-1,1);for(var r=t.split("/"),o=r.splice(-1,1),i=0;i<r.length;i++){var s=r[i];if("."!==s)if(".."===s){if(!n.length){n=n.concat(r.slice(i));break}n.splice(-1,1)}else n.push(s)}return n.push(o),n.join("/")}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.Loader=new n,e.require=e.Loader.require.bind(e.Loader),e.define=e.Loader.define.bind(e.Loader),e.define.amd={}}("undefined"!=typeof global?global:this,function(e){"use strict";function t(n){t.superclass.constructor.apply(this,arguments),this._config=n||e.__CONFIG__,this._modulesMap={}}t.prototype=Object.create(e.EventEmitter.prototype),t.prototype.constructor=t,t.superclass=e.EventEmitter.prototype;var n={addModule:function(e){return this._getConfigParser().addModule(e)},define:function(e,t,n,r){var o=arguments.length;if(!(2>o)){if(2===o){if("string"!=typeof e)return;n=t,t=["module","exports"]}var i=r||{},s=this._getConfigParser(),u=this._getPathResolver();t=t.map(function(t){return u.resolvePath(e,t)}),i.name=e,i.dependencies=t,i.pendingImplementation=n,s.addModule(i),this._modulesMap[i.name]||(this._modulesMap[i.name]=!0),this.emit("moduleRegister",e)}},getConditionalModules:function(){return this._getConfigParser().getConditionalModules()},getModules:function(){return this._getConfigParser().getModules()},require:function(){var e,t,n,r,o=this;if(Array.isArray(arguments[0]))n=arguments[0],r="function"==typeof arguments[1]?arguments[1]:null,e="function"==typeof arguments[2]?arguments[2]:null;else for(n=[],t=0;t<arguments.length;++t)if("string"==typeof arguments[t])n[t]=arguments[t];else if("function"==typeof arguments[t]){r=arguments[t],e="function"==typeof arguments[++t]?arguments[t]:null;break}var i,s=o._getConfigParser(),u=s.mapModule(n);new Promise(function(e,t){o._resolveDependencies(u).then(function(r){var a=s.getConfig();0!==a.waitTimeout&&(i=setTimeout(function(){var e=s.getModules(),o=new Error("Load timeout for modules: "+n);o.dependecies=r,o.mappedModules=u,o.missingDependencies=r.filter(function(t){return!e[t].implementation}),o.modules=n,t(o)},a.waitTimeout||7e3)),o._loadModules(r).then(e,t)},t)}).then(function(e){if(clearTimeout(i),r){var t=o._getModuleImplementations(u);r.apply(r,t)}},function(t){clearTimeout(i),e&&e.call(e,t)})},_createModulePromise:function(e){var t=this;return new Promise(function(n,r){var o=t._getConfigParser().getModules(),i=o[e];if(i.exports){var s=t._getValueGlobalNS(i.exports);if(s)n(s);else{var u=function(o){if(o.indexOf(e)>=0){t.off("scriptLoaded",u);var s=t._getValueGlobalNS(i.exports);s?n(s):r(new Error("Module "+e+" does not export the specified value: "+i.exports))}};t.on("scriptLoaded",u)}}else{var a=function(r){r===e&&(t.off("moduleRegister",a),t._modulesMap[e]=!0,n(e))};t.on("moduleRegister",a)}})},_getConfigParser:function(){return this._configParser||(this._configParser=new e.ConfigParser(this._config)),this._configParser},_getDependencyBuilder:function(){return this._dependencyBuilder||(this._dependencyBuilder=new e.DependencyBuilder(this._getConfigParser())),this._dependencyBuilder},_getValueGlobalNS:function(e){return(0,eval)("this")[e]},_getMissingDepenencies:function(e){for(var t=this._getConfigParser(),n=t.getModules(),r=Object.create(null),o=0;o<e.length;o++)for(var i=n[e[o]],s=t.mapModule(i.dependencies),u=0;u<s.length;u++){var a=s[u],l=n[a];"exports"===a||"module"===a||l&&l.pendingImplementation||(r[a]=1)}return Object.keys(r)},_getModuleImplementations:function(e){for(var t=[],n=this._getConfigParser().getModules(),r=0;r<e.length;r++){var o=n[e[r]];t.push(o?o.implementation:void 0)}return t},_getPathResolver:function(){return this._pathResolver||(this._pathResolver=new e.PathResolver),this._pathResolver},_getURLBuilder:function(){return this._urlBuilder||(this._urlBuilder=new e.URLBuilder(this._getConfigParser())),this._urlBuilder},_filterModulesByProperty:function(e,t){var n=t;"string"==typeof t&&(n=[t]);for(var r=[],o=this._getConfigParser().getModules(),i=0;i<e.length;i++){var s=e[i],u=o[e[i]];if(u){if("exports"!==u&&"module"!==u){for(var a,l=0;l<n.length;l++)if(u[n[l]]){a=!0;break}a||r.push(s)}}else r.push(s)}return r},_loadModules:function(e){var t=this;return new Promise(function(n,r){var o=t._filterModulesByProperty(e,["requested","pendingImplementation"]);if(o.length){for(var i=t._getURLBuilder().build(o),s=[],u=0;u<i.length;u++)s.push(t._loadScript(i[u]));Promise.all(s).then(function(n){return t._waitForModules(e)}).then(function(e){n(e)})["catch"](function(e){r(e)})}else t._waitForModules(e).then(function(e){n(e)})["catch"](function(e){r(e)})})},_loadScript:function(e){var t=this;return new Promise(function(n,r){var o=document.createElement("script");o.src=e.url,o.onload=o.onreadystatechange=function(){this.readyState&&"complete"!==this.readyState&&"load"!==this.readyState||(o.onload=o.onreadystatechange=null,n(o),t.emit("scriptLoaded",e.modules))},o.onerror=function(){document.head.removeChild(o),r(o)},document.head.appendChild(o)})},_resolveDependencies:function(e){var t=this;return new Promise(function(n,r){try{var o=t._getDependencyBuilder().resolveDependencies(e);n(o)}catch(i){r(i)}})},_setModuleImplementation:function(e){for(var t=this._getConfigParser().getModules(),n=0;n<e.length;n++){var r=e[n];if(!r.implementation)if(r.exports)r.pendingImplementation=r.implementation=this._getValueGlobalNS(r.exports);else{for(var o,i=[],s=this._getConfigParser(),u=0;u<r.dependencies.length;u++){var a=r.dependencies[u];if("exports"===a)o={},i.push(o);else if("module"===a)o={exports:{}},i.push(o);else{var l=t[s.mapModule(a)],c=l.implementation;i.push(c)}}var f;f="function"==typeof r.pendingImplementation?r.pendingImplementation.apply(r.pendingImplementation,i):r.pendingImplementation,f?r.implementation=f:o&&(r.implementation=o.exports||o)}}},_waitForModule:function(e){var t=this,n=t._modulesMap[e];return n||(n=t._createModulePromise(e),t._modulesMap[e]=n),n},_waitForModules:function(e){var t=this;return new Promise(function(n,r){for(var o=[],i=0;i<e.length;i++)o.push(t._waitForModule(e[i]));Promise.all(o).then(function(o){var i=t._getConfigParser().getModules(),s=function(){for(var r=[],o=0;o<e.length;o++)r.push(i[e[o]]);t._setModuleImplementation(r),n(r)},u=t._getMissingDepenencies(e);u.length?t.require(u,s,r):s()},r)})}};return Object.keys(n).forEach(function(e){t.prototype[e]=n[e]}),t}),window.Loader=global.Loader,window.require=global.require,window.define=global.define}();
(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){N=e}function r(e){K=e}function o(){return function(){process.nextTick(l)}}function i(){return function(){G(l)}}function s(){var e=0,t=new H(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function a(){return function(){setTimeout(l,1)}}function l(){for(var e=0;Y>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}Y=0}function c(){try{var e=require,t=e("vertx");return G=t.runOnLoop||t.runOnContext,i()}catch(n){return a()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var s=arguments[r-1];K(function(){E(r,o,s,i)})}else x(n,o,e,t);return o}function d(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return M(n,e),n}function h(){}function p(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function _(e){try{return e.then}catch(t){return re.error=t,re}}function m(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){K(function(e){var r=!1,o=m(n,t,function(n){r||(r=!0,t!==n?M(e,n):P(e,n))},function(t){r||(r=!0,C(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,C(e,o))},e)}function y(e,t){t._state===te?P(e,t._result):t._state===ne?C(e,t._result):x(t,void 0,function(t){M(e,t)},function(t){C(e,t)})}function b(e,n,r){n.constructor===e.constructor&&r===Z&&constructor.resolve===$?y(e,n):r===re?C(e,re.error):void 0===r?P(e,n):t(r)?v(e,n,r):P(e,n)}function M(t,n){t===n?C(t,p()):e(n)?b(t,n,_(n)):P(t,n)}function w(e){e._onerror&&e._onerror(e._result),O(e)}function P(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&K(O,e))}function C(e,t){e._state===ee&&(e._state=ne,e._result=t,K(w,e))}function x(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&K(O,e)}function O(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;s<t.length;s+=3)r=t[s],o=t[s+n],r?E(n,r,o,i):o(i);e._subscribers.length=0}}function A(){this.error=null}function j(e,t){try{return e(t)}catch(n){return oe.error=n,oe}}function E(e,n,r,o){var i,s,u,a,l=t(r);if(l){if(i=j(r,o),i===oe?(a=!0,s=i.error,i=null):u=!0,n===i)return void C(n,g())}else i=o,u=!0;n._state!==ee||(l&&u?M(n,i):a?C(n,s):e===te?P(n,i):e===ne&&C(n,i))}function L(e,t){try{t(function(t){M(e,t)},function(t){C(e,t)})}catch(n){C(e,n)}}function B(e){return new ce(this,e).promise}function k(e){function t(e){M(o,e)}function n(e){C(o,e)}var r=this,o=new r(h);if(!V(e))return C(o,new TypeError("You must pass an array to race.")),o;for(var i=e.length,s=0;o._state===ee&&i>s;s++)x(r.resolve(e[s]),void 0,t,n);return o}function R(e){var t=this,n=new t(h);return C(n,e),n}function S(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function D(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function q(e){this._id=ae++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&S(),this instanceof q?L(this,e):D())}function I(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?P(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&P(this.promise,this._result))):C(this.promise,this._validationError())}function F(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;n&&"[object Promise]"===Object.prototype.toString.call(n.resolve())&&!n.cast||(e.Promise=le)}var T;T=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var G,N,U,V=T,Y=0,K=function(e,t){X[Y]=e,X[Y+1]=t,Y+=2,2===Y&&(N?N(l):U())},W="undefined"!=typeof window?window:void 0,z=W||{},H=z.MutationObserver||z.WebKitMutationObserver,J="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),Q="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);U=J?o():H?s():Q?u():void 0===W&&"function"==typeof require?c():a();var Z=f,$=d,ee=void 0,te=1,ne=2,re=new A,oe=new A,ie=B,se=k,ue=R,ae=0,le=q;q.all=ie,q.race=se,q.resolve=$,q.reject=ue,q._setScheduler=n,q._setAsap=r,q._asap=K,q.prototype={constructor:q,then:Z,"catch":function(e){return this.then(null,e)}};var ce=I;I.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},I.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},I.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===$){var o=_(e);if(o===Z&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===le){var i=new n(h);b(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},I.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?C(r,n):this._result[t]=n),0===this._remaining&&P(r,this._result)},I.prototype._willSettleAt=function(e,t){var n=this;x(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=F,de={Promise:le,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return de}):"undefined"!=typeof module&&module.exports?module.exports=de:"undefined"!=typeof this&&(this.ES6Promise=de),fe()}).call(this),function(){var global={};global.__CONFIG__=window.__CONFIG__,function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.EventEmitter=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(){this._events={}}return t.prototype={constructor:t,on:function(e,t){var n=this._events[e]=this._events[e]||[];n.push(t)},off:function(e,t){var n=this._events[e];if(n){var r=n.indexOf(t);r>-1&&n.splice(r,1)}},emit:function(e,t){var n=this._events[e];if(n){n=n.slice(0);for(var r=0;r<n.length;r++){var o=n[r];o.call(o,t)}}}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.ConfigParser=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(e){this._config={},this._modules={},this._conditionalModules={},this._parseConfig(e)}return t.prototype={constructor:t,addModule:function(e){var t=this._modules[e.name];if(t)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);else this._modules[e.name]=e;return this._registerConditionalModule(e),this._modules[e.name]},getConfig:function(){return this._config},getConditionalModules:function(){return this._conditionalModules},getModules:function(){return this._modules},mapModule:function(e){if(!this._config.maps)return e;var t;t=Array.isArray(e)?e:[e];for(var n=0;n<t.length;n++){var r=t[n],o=!1;for(var i in this._config.maps)if(Object.prototype.hasOwnProperty.call(this._config.maps,i)&&(r===i||0===r.indexOf(i+"/"))){r=this._config.maps[i]+r.substring(i.length),t[n]=r,o=!0;break}o||"function"!=typeof this._config.maps["*"]||(t[n]=this._config.maps["*"](r))}return Array.isArray(e)?t:t[0]},_parseConfig:function(e){for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&("modules"===t?this._parseModules(e[t]):this._config[t]=e[t]);return this._config},_parseModules:function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)){var n=e[t];n.name=t,this.addModule(n)}return this._modules},_registerConditionalModule:function(e){if(e.condition){var t=this._conditionalModules[e.condition.trigger];t||(this._conditionalModules[e.condition.trigger]=t=[]),t.push(e.name)}}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.DependencyBuilder=n}("undefined"!=typeof global?global:this,function(global){"use strict";function DependencyBuilder(e){this._configParser=e,this._pathResolver=new global.PathResolver,this._result=[]}var hasOwnProperty=Object.prototype.hasOwnProperty;return DependencyBuilder.prototype={constructor:DependencyBuilder,resolveDependencies:function(e){this._queue=e.slice(0);var t;try{this._resolveDependencies(),t=this._result.reverse().slice(0)}finally{this._cleanup()}return t},_cleanup:function(){var e=this._configParser.getModules();for(var t in e)if(hasOwnProperty.call(e,t)){var n=e[t];n.conditionalMark=!1,n.mark=!1,n.tmpMark=!1}this._queue.length=0,this._result.length=0},_processConditionalModules:function(e){var t=this._configParser.getConditionalModules()[e.name];if(t&&!e.conditionalMark){for(var n=this._configParser.getModules(),r=0;r<t.length;r++){var o=n[t[r]];-1===this._queue.indexOf(o.name)&&this._testConditionalModule(o.condition.test)&&this._queue.push(o.name)}e.conditionalMark=!0}},_resolveDependencies:function(){for(var e=this._configParser.getModules(),t=0;t<this._queue.length;t++){var n=e[this._queue[t]];n||(n=this._configParser.addModule({name:this._queue[t],dependencies:[]})),n.mark||this._visit(n)}},_testConditionalModule:function(testFunction){return"function"==typeof testFunction?testFunction():eval("false || "+testFunction)()},_visit:function(e){if(e.tmpMark)throw new Error("Error processing module: "+e.name+". The provided configuration is not Directed Acyclic Graph.");if(this._processConditionalModules(e),!e.mark){e.tmpMark=!0;for(var t=this._configParser.getModules(),n=0;n<e.dependencies.length;n++){var r=e.dependencies[n];if("exports"!==r&&"module"!==r){r=this._pathResolver.resolvePath(e.name,r);var o=this._configParser.mapModule(r),i=t[o];i||(i=this._configParser.addModule({name:o,dependencies:[]})),this._visit(i)}}e.mark=!0,e.tmpMark=!1,this._result.unshift(e.name)}},_queue:[]},DependencyBuilder}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.URLBuilder=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(e){this._configParser=e}var n=/^https?:\/\/|\/\/|www\./;return t.prototype={constructor:t,build:function(e){var t=[],r=[],o=[],i=[],s=[],u=this._configParser.getConfig(),a=u.basePath||"",l=this._configParser.getModules();a.length&&"/"!==a.charAt(a.length-1)&&(a+="/");for(var c=0;c<e.length;c++){var f=l[e[c]];if(f.fullPath)s.push({modules:[f.name],url:f.fullPath});else{var d=this._getModulePath(f),h=0===d.indexOf("/");n.test(d)?s.push({modules:[f.name],url:d}):!u.combine||f.anonymous?s.push({modules:[f.name],url:u.url+(h?"":a)+d}):h?(t.push(d),o.push(f.name)):(r.push(d),i.push(f.name))}f.requested=!0}return r.length&&(s=s.concat(this._generateBufferURLs(i,r,{basePath:a,url:u.url,urlMaxLength:u.urlMaxLength})),r.length=0),t.length&&(s=s.concat(this._generateBufferURLs(o,t,{url:u.url,urlMaxLength:u.urlMaxLength})),t.length=0),s},_generateBufferURLs:function(e,t,n){var r,o=n.basePath||"",i=[],s=n.urlMaxLength||2e3,u={modules:[e[0]],url:n.url+o+t[0]};for(r=1;r<t.length;r++){var a=e[r],l=t[r];u.url.length+o.length+l.length+1<s?(u.modules.push(a),u.url+="&"+o+l):(i.push(u),u={modules:[a],url:n.url+o+l})}return i.push(u),i},_getModulePath:function(e){var t=e.path||e.name,r=this._configParser.getConfig().paths||{},o=!1;return Object.keys(r).forEach(function(e){t!==e&&0!==t.indexOf(e+"/")||(t=r[e]+t.substring(e.length))}),o||"function"!=typeof r["*"]||(t=r["*"](t)),n.test(t)||t.indexOf(".js")===t.length-3||(t+=".js"),t}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.PathResolver=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(){}return t.prototype={constructor:t,resolvePath:function(e,t){if("exports"===t||"module"===t||0!==t.indexOf(".")&&0!==t.indexOf(".."))return t;var n=e.split("/");n.splice(-1,1);for(var r=t.split("/"),o=r.splice(-1,1),i=0;i<r.length;i++){var s=r[i];if("."!==s)if(".."===s){if(!n.length){n=n.concat(r.slice(i));break}n.splice(-1,1)}else n.push(s)}return n.push(o),n.join("/")}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.Loader=new n,e.require=e.Loader.require.bind(e.Loader),e.define=e.Loader.define.bind(e.Loader),e.define.amd={}}("undefined"!=typeof global?global:this,function(e){"use strict";function t(n){t.superclass.constructor.apply(this,arguments),this._config=n||e.__CONFIG__,this._modulesMap={}}t.prototype=Object.create(e.EventEmitter.prototype),t.prototype.constructor=t,t.superclass=e.EventEmitter.prototype;var n={addModule:function(e){return this._getConfigParser().addModule(e)},define:function(e,t,n,r){var o=this;r=r||{};var i=arguments.length;if(r.anonymous=!1,2>i?(n=arguments[0],t=["module","exports"],r.anonymous=!0):2===i&&("string"==typeof e?(t=["module","exports"],n=arguments[1]):(t=arguments[0],n=arguments[1],r.anonymous=!0)),r.anonymous){var s=function(e){if(o.off("scriptLoaded",s),1!==e.length)throw new Error("Multiple anonymous modules cannot be served via combo service. Please set `combine` to `false` or describe the modules in the config and mark them as anonymous.",e);var i=e[0];o._define(i,t,n,r)};o.on("scriptLoaded",s)}else this._define(e,t,n,r)},getConditionalModules:function(){return this._getConfigParser().getConditionalModules()},getModules:function(){return this._getConfigParser().getModules()},require:function(){var e,t,n,r,o=this;if(Array.isArray(arguments[0]))n=arguments[0],r="function"==typeof arguments[1]?arguments[1]:null,e="function"==typeof arguments[2]?arguments[2]:null;else for(n=[],t=0;t<arguments.length;++t)if("string"==typeof arguments[t])n[t]=arguments[t];else if("function"==typeof arguments[t]){r=arguments[t],e="function"==typeof arguments[++t]?arguments[t]:null;break}var i,s=o._getConfigParser(),u=s.mapModule(n);new Promise(function(e,t){o._resolveDependencies(u).then(function(r){var a=s.getConfig();0!==a.waitTimeout&&(i=setTimeout(function(){var e=s.getModules(),o=new Error("Load timeout for modules: "+n);o.dependecies=r,o.mappedModules=u,o.missingDependencies=r.filter(function(t){return!e[t].implementation}),o.modules=n,t(o)},a.waitTimeout||7e3)),o._loadModules(r).then(e,t)},t)}).then(function(e){if(clearTimeout(i),r){var t=o._getModuleImplementations(u);r.apply(r,t)}},function(t){clearTimeout(i),e&&e.call(e,t)})},_createModulePromise:function(e){var t=this;return new Promise(function(n,r){var o=t._getConfigParser().getModules(),i=o[e];if(i.exports){var s=t._getValueGlobalNS(i.exports);if(s)n(s);else{var u=function(o){if(o.indexOf(e)>=0){t.off("scriptLoaded",u);var s=t._getValueGlobalNS(i.exports);s?n(s):r(new Error("Module "+e+" does not export the specified value: "+i.exports))}};t.on("scriptLoaded",u)}}else{var a=function(r){r===e&&(t.off("moduleRegister",a),t._modulesMap[e]=!0,n(e))};t.on("moduleRegister",a)}})},_define:function(e,t,n,r){var o=r||{},i=this._getConfigParser(),s=this._getPathResolver();t=t.map(function(t){return s.resolvePath(e,t)}),o.name=e,o.dependencies=t,o.pendingImplementation=n,i.addModule(o),this._modulesMap[o.name]||(this._modulesMap[o.name]=!0),this.emit("moduleRegister",e)},_getConfigParser:function(){return this._configParser||(this._configParser=new e.ConfigParser(this._config)),this._configParser},_getDependencyBuilder:function(){return this._dependencyBuilder||(this._dependencyBuilder=new e.DependencyBuilder(this._getConfigParser())),this._dependencyBuilder},_getValueGlobalNS:function(e){return(0,eval)("this")[e]},_getMissingDepenencies:function(e){for(var t=this._getConfigParser(),n=t.getModules(),r=Object.create(null),o=0;o<e.length;o++)for(var i=n[e[o]],s=t.mapModule(i.dependencies),u=0;u<s.length;u++){var a=s[u],l=n[a];"exports"===a||"module"===a||l&&l.pendingImplementation||(r[a]=1)}return Object.keys(r)},_getModuleImplementations:function(e){for(var t=[],n=this._getConfigParser().getModules(),r=0;r<e.length;r++){var o=n[e[r]];t.push(o?o.implementation:void 0)}return t},_getPathResolver:function(){return this._pathResolver||(this._pathResolver=new e.PathResolver),this._pathResolver},_getURLBuilder:function(){return this._urlBuilder||(this._urlBuilder=new e.URLBuilder(this._getConfigParser())),this._urlBuilder},_filterModulesByProperty:function(e,t){var n=t;"string"==typeof t&&(n=[t]);for(var r=[],o=this._getConfigParser().getModules(),i=0;i<e.length;i++){var s=e[i],u=o[e[i]];if(u){if("exports"!==u&&"module"!==u){for(var a=0,l=0;l<n.length;l++)if(u[n[l]]){a=!0;break}a||r.push(s)}}else r.push(s)}return r},_loadModules:function(e){var t=this;return new Promise(function(n,r){var o=t._filterModulesByProperty(e,["requested","pendingImplementation"]);if(o.length){for(var i=t._getURLBuilder().build(o),s=[],u=0;u<i.length;u++)s.push(t._loadScript(i[u]));Promise.all(s).then(function(n){return t._waitForModules(e)}).then(function(e){n(e)})["catch"](function(e){r(e)})}else t._waitForModules(e).then(function(e){n(e)})["catch"](function(e){r(e)})})},_loadScript:function(e){var t=this;return new Promise(function(n,r){var o=document.createElement("script");o.src=e.url,o.onload=o.onreadystatechange=function(){this.readyState&&"complete"!==this.readyState&&"load"!==this.readyState||(o.onload=o.onreadystatechange=null,n(o),t.emit("scriptLoaded",e.modules))},o.onerror=function(){document.head.removeChild(o),r(o)},document.head.appendChild(o)})},_resolveDependencies:function(e){var t=this;return new Promise(function(n,r){try{var o=t._getDependencyBuilder().resolveDependencies(e);n(o)}catch(i){r(i)}})},_setModuleImplementation:function(e){for(var t=this._getConfigParser().getModules(),n=0;n<e.length;n++){var r=e[n];if(!r.implementation)if(r.exports)r.pendingImplementation=r.implementation=this._getValueGlobalNS(r.exports);else{for(var o,i=[],s=this._getConfigParser(),u=0;u<r.dependencies.length;u++){var a=r.dependencies[u];if("exports"===a)o={},i.push(o);else if("module"===a)o={exports:{}},i.push(o);else{var l=t[s.mapModule(a)],c=l.implementation;i.push(c)}}var f;f="function"==typeof r.pendingImplementation?r.pendingImplementation.apply(r.pendingImplementation,i):r.pendingImplementation,f?r.implementation=f:o&&(r.implementation=o.exports||o)}}},_waitForModule:function(e){var t=this,n=t._modulesMap[e];return n||(n=t._createModulePromise(e),t._modulesMap[e]=n),n},_waitForModules:function(e){var t=this;return new Promise(function(n,r){for(var o=[],i=0;i<e.length;i++)o.push(t._waitForModule(e[i]));Promise.all(o).then(function(o){var i=t._getConfigParser().getModules(),s=function(){for(var r=[],o=0;o<e.length;o++)r.push(i[e[o]]);t._setModuleImplementation(r),n(r)},u=t._getMissingDepenencies(e);u.length?t.require(u,s,r):s()},r)})}};return Object.keys(n).forEach(function(e){t.prototype[e]=n[e]}),t}),window.Loader=global.Loader,window.require=global.require,window.define=global.define}();

@@ -581,2 +581,3 @@ (function() {

/**

@@ -588,3 +589,2 @@ * Creates an instance of URLBuilder class.

*/
function URLBuilder(configParser) {

@@ -608,3 +608,2 @@ this._configParser = configParser;

var modulesRelativeURL = [];
var result = [];

@@ -643,5 +642,6 @@

// If combine is disabled, create individual URL based on config URL and module path.
// If the module path starts with "/", do not include basePath in the URL.
} else if (!config.combine) {
// If combine is disabled, or the module is an anonymous one,
// create an individual URL based on the config URL and module's path.
// If the module's path starts with "/", do not include basePath in the URL.
} else if (!config.combine || module.anonymous) {
result.push({

@@ -653,5 +653,5 @@ modules: [module.name],

} else {
// If combine is true and module does not have full path, it will be collected
// in a buffer to be loaded among with other modules from combo loader.
// We will put the path in different buffer depending on the fact if it is absolute URL or not.
// If combine is true, this is not an anonymous module and the module does not have full path.
// The module will be collected in a buffer to be loaded among with other modules from combo loader.
// The path will be stored in different buffer depending on the fact if it is absolute URL or not.
if (absolutePath) {

@@ -672,15 +672,27 @@ bufferAbsoluteURL.push(path);

if (bufferRelativeURL.length) {
result.push({
modules: modulesRelativeURL,
url: config.url + basePath + bufferRelativeURL.join('&' + basePath)
});
result = result.concat(
this._generateBufferURLs(
modulesRelativeURL,
bufferRelativeURL,
{
basePath: basePath,
url: config.url,
urlMaxLength: config.urlMaxLength
}
)
);
bufferRelativeURL.length = 0;
}
if (bufferAbsoluteURL.length) {
result.push({
modules: modulesAbsoluteURL,
url: config.url + bufferAbsoluteURL.join('&')
});
result = result.concat(
this._generateBufferURLs(
modulesAbsoluteURL,
bufferAbsoluteURL,
{
url: config.url,
urlMaxLength: config.urlMaxLength
}
)
);
bufferAbsoluteURL.length = 0;

@@ -693,2 +705,44 @@ }

/**
* Generate the appropriate set of URLs based on the list of
* required modules and the maximum allowed URL length
*
* @param {Array<String>} modules Array of module names
* @param {Array<String>} urls Array of module URLs
* @param {Object} config Configuration object containing URL, basePath and urlMaxLength
* @return {Array<Object>} Resulting array of {modules, url} objects
*/
_generateBufferURLs: function(modules, urls, config) {
var i;
var basePath = config.basePath || '';
var result = [];
var urlMaxLength = config.urlMaxLength || 2000;
var urlResult = {
modules: [modules[0]],
url: config.url + basePath + urls[0]
};
for (i = 1; i < urls.length; i++) {
var module = modules[i];
var path = urls[i];
if ((urlResult.url.length + basePath.length + path.length + 1) < urlMaxLength) {
urlResult.modules.push(module);
urlResult.url += '&' + basePath + path;
} else {
result.push(urlResult);
urlResult = {
modules: [module],
url: config.url + basePath + path
};
}
}
result.push(urlResult);
return result;
},
/**
* Returns the path for a module. If module has property path, it will be returned directly. Otherwise,

@@ -704,11 +758,15 @@ * the name of module will be used and extension .js will be added to module name if omitted.

var paths = this._configParser.getConfig().paths;
var paths = this._configParser.getConfig().paths || {};
for (var key in paths) {
var found = false;
Object.keys(paths).forEach(function(item) {
/* istanbul ignore else */
if (Object.prototype.hasOwnProperty.call(paths, key)) {
if (path === key || path.indexOf(key + '/') === 0) {
path = paths[key] + path.substring(key.length);
}
if (path === item || path.indexOf(item + '/') === 0) {
path = paths[item] + path.substring(item.length);
}
});
/* istanbul ignore else */
if(!found && typeof paths['*'] === 'function') {
path = paths['*'](path);
}

@@ -889,13 +947,19 @@

* </ul>
* @return {Object} The constructed module.
*/
define: function(name, dependencies, implementation, config) {
var self = this;
console.log('DEFINE', name, dependencies);
config = config || {};
var passedArgsCount = arguments.length;
config.anonymous = false;
if (passedArgsCount < 2) {
console.log('DEFINE, module with one param only, returning');
// we don't support modules with implementation only
return;
console.log('DEFINE, module with one param only, this should be anonymous module');
implementation = arguments[0];
dependencies = ['module', 'exports'];
config.anonymous = true;
} else if (passedArgsCount === 2) {

@@ -906,35 +970,32 @@ if (typeof name === 'string') {

// this is a module name
implementation = dependencies;
dependencies = ['module', 'exports'];
implementation = arguments[1];
} else {
// anonymous module, we don't support this
return;
console.log('DEFINE, module with one param only, this should be anonymous module');
dependencies = arguments[0];
implementation = arguments[1];
config.anonymous = true;
}
}
// Create a new module by merging the provided config with the passed name,
// dependencies and implementation.
var module = config || {};
var configParser = this._getConfigParser();
if (config.anonymous) {
// Postpone module's registration till the next scriptLoaded event
var onScriptLoaded = function(loadedModules) {
self.off('scriptLoaded', onScriptLoaded);
var pathResolver = this._getPathResolver();
if (loadedModules.length !== 1) {
throw new Error('Multiple anonymous modules cannot be served via combo service. ' +
'Please set `combine` to `false` or describe the modules in the config ' +
'and mark them as anonymous.', loadedModules);
} else {
var moduleName = loadedModules[0];
self._define(moduleName, dependencies, implementation, config);
}
};
// Resolve the path according to the parent module. Example:
// define('metal/src/component/component', ['../array/array']) will become:
// define('metal/src/component/component', ['metal/src/array/array'])
dependencies = dependencies.map(function(dependency) {
return pathResolver.resolvePath(name, dependency);
});
module.name = name;
module.dependencies = dependencies;
module.pendingImplementation = implementation;
configParser.addModule(module);
if (!this._modulesMap[module.name]) {
this._modulesMap[module.name] = true;
self.on('scriptLoaded', onScriptLoaded);
} else {
// This is not an anonymous module, go directly to module's registration flow
this._define(name, dependencies, implementation, config);
}
this.emit('moduleRegister', name);
},

@@ -1128,2 +1189,41 @@

/**
* Defines a module in the system and fires {@link Loader#event:moduleRegister} event with the registered module as param.
* Called internally by {@link Loader#define} method once it normalizes the passed arguments.
*
* @memberof! Loader#
* @protected
* @param {string} name The name of the module.
* @param {array} dependencies List of module dependencies.
* @param {function} implementation The implementation of the module.
* @param {object=} config See {@link Loader:define} for more details.
*/
_define: function(name, dependencies, implementation, config) {
// Create a new module by merging the provided config with the passed name,
// dependencies and implementation.
var module = config || {};
var configParser = this._getConfigParser();
var pathResolver = this._getPathResolver();
// Resolve the path according to the parent module. Example:
// define('metal/src/component/component', ['../array/array']) will become:
// define('metal/src/component/component', ['metal/src/array/array'])
dependencies = dependencies.map(function(dependency) {
return pathResolver.resolvePath(name, dependency);
});
module.name = name;
module.dependencies = dependencies;
module.pendingImplementation = implementation;
configParser.addModule(module);
if (!this._modulesMap[module.name]) {
this._modulesMap[module.name] = true;
}
this.emit('moduleRegister', name);
},
/**
* Returns instance of {@link ConfigParser} class.

@@ -1291,3 +1391,3 @@ *

for (var found, j = 0; j < properties.length; j++) {
for (var found = 0, j = 0; j < properties.length; j++) {
if (registeredModule[properties[j]]) {

@@ -1338,14 +1438,14 @@ found = true;

Promise.all(pendingScripts).then(function(loadedScripts) {
return self._waitForModules(moduleNames);
})
// As soon as all scripts were loaded and all dependencies have been resolved,
// resolve the main Promise
.then(function(loadedModules) {
resolve(loadedModules);
})
// If any script fails to load or other error happens,
// reject the main Promise
.catch(function(error) {
reject(error);
});
return self._waitForModules(moduleNames);
})
// As soon as all scripts were loaded and all dependencies have been resolved,
// resolve the main Promise
.then(function(loadedModules) {
resolve(loadedModules);
})
// If any script fails to load or other error happens,
// reject the main Promise
.catch(function(error) {
reject(error);
});
} else {

@@ -1355,9 +1455,9 @@ // If there are no any missing modules, just wait for modules dependencies

self._waitForModules(moduleNames).then(function(loadedModules) {
resolve(loadedModules);
})
// If some error happens, for example if some module implementation
// throws error, reject the main Promise
.catch(function(error) {
reject(error);
});
resolve(loadedModules);
})
// If some error happens, for example if some module implementation
// throws error, reject the main Promise
.catch(function(error) {
reject(error);
});
}

@@ -1468,3 +1568,3 @@ });

} else if (dependency === 'module') {
exportsImpl = {exports: {}};
exportsImpl = { exports: {} };

@@ -1556,3 +1656,3 @@ dependencyImplementations.push(exportsImpl);

var defineModules = function () {
var defineModules = function() {
var definedModules = [];

@@ -1593,2 +1693,3 @@

return Loader;

@@ -1595,0 +1696,0 @@ }));

@@ -1,1 +0,1 @@

!function(){var global={};global.__CONFIG__=window.__CONFIG__,function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.EventEmitter=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(){this._events={}}return t.prototype={constructor:t,on:function(e,t){var n=this._events[e]=this._events[e]||[];n.push(t)},off:function(e,t){var n=this._events[e];if(n){var o=n.indexOf(t);o>-1&&n.splice(o,1)}},emit:function(e,t){var n=this._events[e];if(n){n=n.slice(0);for(var o=0;o<n.length;o++){var i=n[o];i.call(i,t)}}}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.ConfigParser=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(e){this._config={},this._modules={},this._conditionalModules={},this._parseConfig(e)}return t.prototype={constructor:t,addModule:function(e){var t=this._modules[e.name];if(t)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);else this._modules[e.name]=e;return this._registerConditionalModule(e),this._modules[e.name]},getConfig:function(){return this._config},getConditionalModules:function(){return this._conditionalModules},getModules:function(){return this._modules},mapModule:function(e){if(!this._config.maps)return e;var t;t=Array.isArray(e)?e:[e];for(var n=0;n<t.length;n++){var o=t[n],i=!1;for(var r in this._config.maps)if(Object.prototype.hasOwnProperty.call(this._config.maps,r)&&(o===r||0===o.indexOf(r+"/"))){o=this._config.maps[r]+o.substring(r.length),t[n]=o,i=!0;break}i||"function"!=typeof this._config.maps["*"]||(t[n]=this._config.maps["*"](o))}return Array.isArray(e)?t:t[0]},_parseConfig:function(e){for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&("modules"===t?this._parseModules(e[t]):this._config[t]=e[t]);return this._config},_parseModules:function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)){var n=e[t];n.name=t,this.addModule(n)}return this._modules},_registerConditionalModule:function(e){if(e.condition){var t=this._conditionalModules[e.condition.trigger];t||(this._conditionalModules[e.condition.trigger]=t=[]),t.push(e.name)}}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.DependencyBuilder=n}("undefined"!=typeof global?global:this,function(global){"use strict";function DependencyBuilder(e){this._configParser=e,this._pathResolver=new global.PathResolver,this._result=[]}var hasOwnProperty=Object.prototype.hasOwnProperty;return DependencyBuilder.prototype={constructor:DependencyBuilder,resolveDependencies:function(e){this._queue=e.slice(0);var t;try{this._resolveDependencies(),t=this._result.reverse().slice(0)}finally{this._cleanup()}return t},_cleanup:function(){var e=this._configParser.getModules();for(var t in e)if(hasOwnProperty.call(e,t)){var n=e[t];n.conditionalMark=!1,n.mark=!1,n.tmpMark=!1}this._queue.length=0,this._result.length=0},_processConditionalModules:function(e){var t=this._configParser.getConditionalModules()[e.name];if(t&&!e.conditionalMark){for(var n=this._configParser.getModules(),o=0;o<t.length;o++){var i=n[t[o]];-1===this._queue.indexOf(i.name)&&this._testConditionalModule(i.condition.test)&&this._queue.push(i.name)}e.conditionalMark=!0}},_resolveDependencies:function(){for(var e=this._configParser.getModules(),t=0;t<this._queue.length;t++){var n=e[this._queue[t]];n||(n=this._configParser.addModule({name:this._queue[t],dependencies:[]})),n.mark||this._visit(n)}},_testConditionalModule:function(testFunction){return"function"==typeof testFunction?testFunction():eval("false || "+testFunction)()},_visit:function(e){if(e.tmpMark)throw new Error("Error processing module: "+e.name+". The provided configuration is not Directed Acyclic Graph.");if(this._processConditionalModules(e),!e.mark){e.tmpMark=!0;for(var t=this._configParser.getModules(),n=0;n<e.dependencies.length;n++){var o=e.dependencies[n];if("exports"!==o&&"module"!==o){o=this._pathResolver.resolvePath(e.name,o);var i=this._configParser.mapModule(o),r=t[i];r||(r=this._configParser.addModule({name:i,dependencies:[]})),this._visit(r)}}e.mark=!0,e.tmpMark=!1,this._result.unshift(e.name)}},_queue:[]},DependencyBuilder}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.URLBuilder=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(e){this._configParser=e}var n=/^https?:\/\/|\/\/|www\./;return t.prototype={constructor:t,build:function(e){var t=[],o=[],i=[],r=[],s=[],u=this._configParser.getConfig(),l=u.basePath||"",a=this._configParser.getModules();l.length&&"/"!==l.charAt(l.length-1)&&(l+="/");for(var d=0;d<e.length;d++){var f=a[e[d]];if(f.fullPath)s.push({modules:[f.name],url:f.fullPath});else{var c=this._getModulePath(f),p=0===c.indexOf("/");n.test(c)?s.push({modules:[f.name],url:c}):u.combine?p?(t.push(c),i.push(f.name)):(o.push(c),r.push(f.name)):s.push({modules:[f.name],url:u.url+(p?"":l)+c})}f.requested=!0}return o.length&&(s.push({modules:r,url:u.url+l+o.join("&"+l)}),o.length=0),t.length&&(s.push({modules:i,url:u.url+t.join("&")}),t.length=0),s},_getModulePath:function(e){var t=e.path||e.name,o=this._configParser.getConfig().paths;for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(t!==i&&0!==t.indexOf(i+"/")||(t=o[i]+t.substring(i.length)));return n.test(t)||t.indexOf(".js")===t.length-3||(t+=".js"),t}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.PathResolver=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(){}return t.prototype={constructor:t,resolvePath:function(e,t){if("exports"===t||"module"===t||0!==t.indexOf(".")&&0!==t.indexOf(".."))return t;var n=e.split("/");n.splice(-1,1);for(var o=t.split("/"),i=o.splice(-1,1),r=0;r<o.length;r++){var s=o[r];if("."!==s)if(".."===s){if(!n.length){n=n.concat(o.slice(r));break}n.splice(-1,1)}else n.push(s)}return n.push(i),n.join("/")}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.Loader=new n,e.require=e.Loader.require.bind(e.Loader),e.define=e.Loader.define.bind(e.Loader),e.define.amd={}}("undefined"!=typeof global?global:this,function(e){"use strict";function t(n){t.superclass.constructor.apply(this,arguments),this._config=n||e.__CONFIG__,this._modulesMap={}}t.prototype=Object.create(e.EventEmitter.prototype),t.prototype.constructor=t,t.superclass=e.EventEmitter.prototype;var n={addModule:function(e){return this._getConfigParser().addModule(e)},define:function(e,t,n,o){var i=arguments.length;if(!(2>i)){if(2===i){if("string"!=typeof e)return;n=t,t=["module","exports"]}var r=o||{},s=this._getConfigParser(),u=this._getPathResolver();t=t.map(function(t){return u.resolvePath(e,t)}),r.name=e,r.dependencies=t,r.pendingImplementation=n,s.addModule(r),this._modulesMap[r.name]||(this._modulesMap[r.name]=!0),this.emit("moduleRegister",e)}},getConditionalModules:function(){return this._getConfigParser().getConditionalModules()},getModules:function(){return this._getConfigParser().getModules()},require:function(){var e,t,n,o,i=this;if(Array.isArray(arguments[0]))n=arguments[0],o="function"==typeof arguments[1]?arguments[1]:null,e="function"==typeof arguments[2]?arguments[2]:null;else for(n=[],t=0;t<arguments.length;++t)if("string"==typeof arguments[t])n[t]=arguments[t];else if("function"==typeof arguments[t]){o=arguments[t],e="function"==typeof arguments[++t]?arguments[t]:null;break}var r,s=i._getConfigParser(),u=s.mapModule(n);new Promise(function(e,t){i._resolveDependencies(u).then(function(o){var l=s.getConfig();0!==l.waitTimeout&&(r=setTimeout(function(){var e=s.getModules(),i=new Error("Load timeout for modules: "+n);i.dependecies=o,i.mappedModules=u,i.missingDependencies=o.filter(function(t){return!e[t].implementation}),i.modules=n,t(i)},l.waitTimeout||7e3)),i._loadModules(o).then(e,t)},t)}).then(function(e){if(clearTimeout(r),o){var t=i._getModuleImplementations(u);o.apply(o,t)}},function(t){clearTimeout(r),e&&e.call(e,t)})},_createModulePromise:function(e){var t=this;return new Promise(function(n,o){var i=t._getConfigParser().getModules(),r=i[e];if(r.exports){var s=t._getValueGlobalNS(r.exports);if(s)n(s);else{var u=function(i){if(i.indexOf(e)>=0){t.off("scriptLoaded",u);var s=t._getValueGlobalNS(r.exports);s?n(s):o(new Error("Module "+e+" does not export the specified value: "+r.exports))}};t.on("scriptLoaded",u)}}else{var l=function(o){o===e&&(t.off("moduleRegister",l),t._modulesMap[e]=!0,n(e))};t.on("moduleRegister",l)}})},_getConfigParser:function(){return this._configParser||(this._configParser=new e.ConfigParser(this._config)),this._configParser},_getDependencyBuilder:function(){return this._dependencyBuilder||(this._dependencyBuilder=new e.DependencyBuilder(this._getConfigParser())),this._dependencyBuilder},_getValueGlobalNS:function(e){return(0,eval)("this")[e]},_getMissingDepenencies:function(e){for(var t=this._getConfigParser(),n=t.getModules(),o=Object.create(null),i=0;i<e.length;i++)for(var r=n[e[i]],s=t.mapModule(r.dependencies),u=0;u<s.length;u++){var l=s[u],a=n[l];"exports"===l||"module"===l||a&&a.pendingImplementation||(o[l]=1)}return Object.keys(o)},_getModuleImplementations:function(e){for(var t=[],n=this._getConfigParser().getModules(),o=0;o<e.length;o++){var i=n[e[o]];t.push(i?i.implementation:void 0)}return t},_getPathResolver:function(){return this._pathResolver||(this._pathResolver=new e.PathResolver),this._pathResolver},_getURLBuilder:function(){return this._urlBuilder||(this._urlBuilder=new e.URLBuilder(this._getConfigParser())),this._urlBuilder},_filterModulesByProperty:function(e,t){var n=t;"string"==typeof t&&(n=[t]);for(var o=[],i=this._getConfigParser().getModules(),r=0;r<e.length;r++){var s=e[r],u=i[e[r]];if(u){if("exports"!==u&&"module"!==u){for(var l,a=0;a<n.length;a++)if(u[n[a]]){l=!0;break}l||o.push(s)}}else o.push(s)}return o},_loadModules:function(e){var t=this;return new Promise(function(n,o){var i=t._filterModulesByProperty(e,["requested","pendingImplementation"]);if(i.length){for(var r=t._getURLBuilder().build(i),s=[],u=0;u<r.length;u++)s.push(t._loadScript(r[u]));Promise.all(s).then(function(n){return t._waitForModules(e)}).then(function(e){n(e)})["catch"](function(e){o(e)})}else t._waitForModules(e).then(function(e){n(e)})["catch"](function(e){o(e)})})},_loadScript:function(e){var t=this;return new Promise(function(n,o){var i=document.createElement("script");i.src=e.url,i.onload=i.onreadystatechange=function(){this.readyState&&"complete"!==this.readyState&&"load"!==this.readyState||(i.onload=i.onreadystatechange=null,n(i),t.emit("scriptLoaded",e.modules))},i.onerror=function(){document.head.removeChild(i),o(i)},document.head.appendChild(i)})},_resolveDependencies:function(e){var t=this;return new Promise(function(n,o){try{var i=t._getDependencyBuilder().resolveDependencies(e);n(i)}catch(r){o(r)}})},_setModuleImplementation:function(e){for(var t=this._getConfigParser().getModules(),n=0;n<e.length;n++){var o=e[n];if(!o.implementation)if(o.exports)o.pendingImplementation=o.implementation=this._getValueGlobalNS(o.exports);else{for(var i,r=[],s=this._getConfigParser(),u=0;u<o.dependencies.length;u++){var l=o.dependencies[u];if("exports"===l)i={},r.push(i);else if("module"===l)i={exports:{}},r.push(i);else{var a=t[s.mapModule(l)],d=a.implementation;r.push(d)}}var f;f="function"==typeof o.pendingImplementation?o.pendingImplementation.apply(o.pendingImplementation,r):o.pendingImplementation,f?o.implementation=f:i&&(o.implementation=i.exports||i)}}},_waitForModule:function(e){var t=this,n=t._modulesMap[e];return n||(n=t._createModulePromise(e),t._modulesMap[e]=n),n},_waitForModules:function(e){var t=this;return new Promise(function(n,o){for(var i=[],r=0;r<e.length;r++)i.push(t._waitForModule(e[r]));Promise.all(i).then(function(i){var r=t._getConfigParser().getModules(),s=function(){for(var o=[],i=0;i<e.length;i++)o.push(r[e[i]]);t._setModuleImplementation(o),n(o)},u=t._getMissingDepenencies(e);u.length?t.require(u,s,o):s()},o)})}};return Object.keys(n).forEach(function(e){t.prototype[e]=n[e]}),t}),window.Loader=global.Loader,window.require=global.require,window.define=global.define}();
!function(){var global={};global.__CONFIG__=window.__CONFIG__,function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.EventEmitter=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(){this._events={}}return t.prototype={constructor:t,on:function(e,t){var n=this._events[e]=this._events[e]||[];n.push(t)},off:function(e,t){var n=this._events[e];if(n){var o=n.indexOf(t);o>-1&&n.splice(o,1)}},emit:function(e,t){var n=this._events[e];if(n){n=n.slice(0);for(var o=0;o<n.length;o++){var i=n[o];i.call(i,t)}}}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.ConfigParser=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(e){this._config={},this._modules={},this._conditionalModules={},this._parseConfig(e)}return t.prototype={constructor:t,addModule:function(e){var t=this._modules[e.name];if(t)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);else this._modules[e.name]=e;return this._registerConditionalModule(e),this._modules[e.name]},getConfig:function(){return this._config},getConditionalModules:function(){return this._conditionalModules},getModules:function(){return this._modules},mapModule:function(e){if(!this._config.maps)return e;var t;t=Array.isArray(e)?e:[e];for(var n=0;n<t.length;n++){var o=t[n],i=!1;for(var r in this._config.maps)if(Object.prototype.hasOwnProperty.call(this._config.maps,r)&&(o===r||0===o.indexOf(r+"/"))){o=this._config.maps[r]+o.substring(r.length),t[n]=o,i=!0;break}i||"function"!=typeof this._config.maps["*"]||(t[n]=this._config.maps["*"](o))}return Array.isArray(e)?t:t[0]},_parseConfig:function(e){for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&("modules"===t?this._parseModules(e[t]):this._config[t]=e[t]);return this._config},_parseModules:function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)){var n=e[t];n.name=t,this.addModule(n)}return this._modules},_registerConditionalModule:function(e){if(e.condition){var t=this._conditionalModules[e.condition.trigger];t||(this._conditionalModules[e.condition.trigger]=t=[]),t.push(e.name)}}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.DependencyBuilder=n}("undefined"!=typeof global?global:this,function(global){"use strict";function DependencyBuilder(e){this._configParser=e,this._pathResolver=new global.PathResolver,this._result=[]}var hasOwnProperty=Object.prototype.hasOwnProperty;return DependencyBuilder.prototype={constructor:DependencyBuilder,resolveDependencies:function(e){this._queue=e.slice(0);var t;try{this._resolveDependencies(),t=this._result.reverse().slice(0)}finally{this._cleanup()}return t},_cleanup:function(){var e=this._configParser.getModules();for(var t in e)if(hasOwnProperty.call(e,t)){var n=e[t];n.conditionalMark=!1,n.mark=!1,n.tmpMark=!1}this._queue.length=0,this._result.length=0},_processConditionalModules:function(e){var t=this._configParser.getConditionalModules()[e.name];if(t&&!e.conditionalMark){for(var n=this._configParser.getModules(),o=0;o<t.length;o++){var i=n[t[o]];-1===this._queue.indexOf(i.name)&&this._testConditionalModule(i.condition.test)&&this._queue.push(i.name)}e.conditionalMark=!0}},_resolveDependencies:function(){for(var e=this._configParser.getModules(),t=0;t<this._queue.length;t++){var n=e[this._queue[t]];n||(n=this._configParser.addModule({name:this._queue[t],dependencies:[]})),n.mark||this._visit(n)}},_testConditionalModule:function(testFunction){return"function"==typeof testFunction?testFunction():eval("false || "+testFunction)()},_visit:function(e){if(e.tmpMark)throw new Error("Error processing module: "+e.name+". The provided configuration is not Directed Acyclic Graph.");if(this._processConditionalModules(e),!e.mark){e.tmpMark=!0;for(var t=this._configParser.getModules(),n=0;n<e.dependencies.length;n++){var o=e.dependencies[n];if("exports"!==o&&"module"!==o){o=this._pathResolver.resolvePath(e.name,o);var i=this._configParser.mapModule(o),r=t[i];r||(r=this._configParser.addModule({name:i,dependencies:[]})),this._visit(r)}}e.mark=!0,e.tmpMark=!1,this._result.unshift(e.name)}},_queue:[]},DependencyBuilder}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.URLBuilder=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(e){this._configParser=e}var n=/^https?:\/\/|\/\/|www\./;return t.prototype={constructor:t,build:function(e){var t=[],o=[],i=[],r=[],s=[],u=this._configParser.getConfig(),a=u.basePath||"",l=this._configParser.getModules();a.length&&"/"!==a.charAt(a.length-1)&&(a+="/");for(var d=0;d<e.length;d++){var f=l[e[d]];if(f.fullPath)s.push({modules:[f.name],url:f.fullPath});else{var c=this._getModulePath(f),h=0===c.indexOf("/");n.test(c)?s.push({modules:[f.name],url:c}):!u.combine||f.anonymous?s.push({modules:[f.name],url:u.url+(h?"":a)+c}):h?(t.push(c),i.push(f.name)):(o.push(c),r.push(f.name))}f.requested=!0}return o.length&&(s=s.concat(this._generateBufferURLs(r,o,{basePath:a,url:u.url,urlMaxLength:u.urlMaxLength})),o.length=0),t.length&&(s=s.concat(this._generateBufferURLs(i,t,{url:u.url,urlMaxLength:u.urlMaxLength})),t.length=0),s},_generateBufferURLs:function(e,t,n){var o,i=n.basePath||"",r=[],s=n.urlMaxLength||2e3,u={modules:[e[0]],url:n.url+i+t[0]};for(o=1;o<t.length;o++){var a=e[o],l=t[o];u.url.length+i.length+l.length+1<s?(u.modules.push(a),u.url+="&"+i+l):(r.push(u),u={modules:[a],url:n.url+i+l})}return r.push(u),r},_getModulePath:function(e){var t=e.path||e.name,o=this._configParser.getConfig().paths||{},i=!1;return Object.keys(o).forEach(function(e){t!==e&&0!==t.indexOf(e+"/")||(t=o[e]+t.substring(e.length))}),i||"function"!=typeof o["*"]||(t=o["*"](t)),n.test(t)||t.indexOf(".js")===t.length-3||(t+=".js"),t}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.PathResolver=n}("undefined"!=typeof global?global:this,function(e){"use strict";function t(){}return t.prototype={constructor:t,resolvePath:function(e,t){if("exports"===t||"module"===t||0!==t.indexOf(".")&&0!==t.indexOf(".."))return t;var n=e.split("/");n.splice(-1,1);for(var o=t.split("/"),i=o.splice(-1,1),r=0;r<o.length;r++){var s=o[r];if("."!==s)if(".."===s){if(!n.length){n=n.concat(o.slice(r));break}n.splice(-1,1)}else n.push(s)}return n.push(i),n.join("/")}},t}),function(e,t){"use strict";var n=t(e);"object"==typeof module&&module&&(module.exports=n),"function"==typeof define&&define.amd&&define(t),e.Loader=new n,e.require=e.Loader.require.bind(e.Loader),e.define=e.Loader.define.bind(e.Loader),e.define.amd={}}("undefined"!=typeof global?global:this,function(e){"use strict";function t(n){t.superclass.constructor.apply(this,arguments),this._config=n||e.__CONFIG__,this._modulesMap={}}t.prototype=Object.create(e.EventEmitter.prototype),t.prototype.constructor=t,t.superclass=e.EventEmitter.prototype;var n={addModule:function(e){return this._getConfigParser().addModule(e)},define:function(e,t,n,o){var i=this;o=o||{};var r=arguments.length;if(o.anonymous=!1,2>r?(n=arguments[0],t=["module","exports"],o.anonymous=!0):2===r&&("string"==typeof e?(t=["module","exports"],n=arguments[1]):(t=arguments[0],n=arguments[1],o.anonymous=!0)),o.anonymous){var s=function(e){if(i.off("scriptLoaded",s),1!==e.length)throw new Error("Multiple anonymous modules cannot be served via combo service. Please set `combine` to `false` or describe the modules in the config and mark them as anonymous.",e);var r=e[0];i._define(r,t,n,o)};i.on("scriptLoaded",s)}else this._define(e,t,n,o)},getConditionalModules:function(){return this._getConfigParser().getConditionalModules()},getModules:function(){return this._getConfigParser().getModules()},require:function(){var e,t,n,o,i=this;if(Array.isArray(arguments[0]))n=arguments[0],o="function"==typeof arguments[1]?arguments[1]:null,e="function"==typeof arguments[2]?arguments[2]:null;else for(n=[],t=0;t<arguments.length;++t)if("string"==typeof arguments[t])n[t]=arguments[t];else if("function"==typeof arguments[t]){o=arguments[t],e="function"==typeof arguments[++t]?arguments[t]:null;break}var r,s=i._getConfigParser(),u=s.mapModule(n);new Promise(function(e,t){i._resolveDependencies(u).then(function(o){var a=s.getConfig();0!==a.waitTimeout&&(r=setTimeout(function(){var e=s.getModules(),i=new Error("Load timeout for modules: "+n);i.dependecies=o,i.mappedModules=u,i.missingDependencies=o.filter(function(t){return!e[t].implementation}),i.modules=n,t(i)},a.waitTimeout||7e3)),i._loadModules(o).then(e,t)},t)}).then(function(e){if(clearTimeout(r),o){var t=i._getModuleImplementations(u);o.apply(o,t)}},function(t){clearTimeout(r),e&&e.call(e,t)})},_createModulePromise:function(e){var t=this;return new Promise(function(n,o){var i=t._getConfigParser().getModules(),r=i[e];if(r.exports){var s=t._getValueGlobalNS(r.exports);if(s)n(s);else{var u=function(i){if(i.indexOf(e)>=0){t.off("scriptLoaded",u);var s=t._getValueGlobalNS(r.exports);s?n(s):o(new Error("Module "+e+" does not export the specified value: "+r.exports))}};t.on("scriptLoaded",u)}}else{var a=function(o){o===e&&(t.off("moduleRegister",a),t._modulesMap[e]=!0,n(e))};t.on("moduleRegister",a)}})},_define:function(e,t,n,o){var i=o||{},r=this._getConfigParser(),s=this._getPathResolver();t=t.map(function(t){return s.resolvePath(e,t)}),i.name=e,i.dependencies=t,i.pendingImplementation=n,r.addModule(i),this._modulesMap[i.name]||(this._modulesMap[i.name]=!0),this.emit("moduleRegister",e)},_getConfigParser:function(){return this._configParser||(this._configParser=new e.ConfigParser(this._config)),this._configParser},_getDependencyBuilder:function(){return this._dependencyBuilder||(this._dependencyBuilder=new e.DependencyBuilder(this._getConfigParser())),this._dependencyBuilder},_getValueGlobalNS:function(e){return(0,eval)("this")[e]},_getMissingDepenencies:function(e){for(var t=this._getConfigParser(),n=t.getModules(),o=Object.create(null),i=0;i<e.length;i++)for(var r=n[e[i]],s=t.mapModule(r.dependencies),u=0;u<s.length;u++){var a=s[u],l=n[a];"exports"===a||"module"===a||l&&l.pendingImplementation||(o[a]=1)}return Object.keys(o)},_getModuleImplementations:function(e){for(var t=[],n=this._getConfigParser().getModules(),o=0;o<e.length;o++){var i=n[e[o]];t.push(i?i.implementation:void 0)}return t},_getPathResolver:function(){return this._pathResolver||(this._pathResolver=new e.PathResolver),this._pathResolver},_getURLBuilder:function(){return this._urlBuilder||(this._urlBuilder=new e.URLBuilder(this._getConfigParser())),this._urlBuilder},_filterModulesByProperty:function(e,t){var n=t;"string"==typeof t&&(n=[t]);for(var o=[],i=this._getConfigParser().getModules(),r=0;r<e.length;r++){var s=e[r],u=i[e[r]];if(u){if("exports"!==u&&"module"!==u){for(var a=0,l=0;l<n.length;l++)if(u[n[l]]){a=!0;break}a||o.push(s)}}else o.push(s)}return o},_loadModules:function(e){var t=this;return new Promise(function(n,o){var i=t._filterModulesByProperty(e,["requested","pendingImplementation"]);if(i.length){for(var r=t._getURLBuilder().build(i),s=[],u=0;u<r.length;u++)s.push(t._loadScript(r[u]));Promise.all(s).then(function(n){return t._waitForModules(e)}).then(function(e){n(e)})["catch"](function(e){o(e)})}else t._waitForModules(e).then(function(e){n(e)})["catch"](function(e){o(e)})})},_loadScript:function(e){var t=this;return new Promise(function(n,o){var i=document.createElement("script");i.src=e.url,i.onload=i.onreadystatechange=function(){this.readyState&&"complete"!==this.readyState&&"load"!==this.readyState||(i.onload=i.onreadystatechange=null,n(i),t.emit("scriptLoaded",e.modules))},i.onerror=function(){document.head.removeChild(i),o(i)},document.head.appendChild(i)})},_resolveDependencies:function(e){var t=this;return new Promise(function(n,o){try{var i=t._getDependencyBuilder().resolveDependencies(e);n(i)}catch(r){o(r)}})},_setModuleImplementation:function(e){for(var t=this._getConfigParser().getModules(),n=0;n<e.length;n++){var o=e[n];if(!o.implementation)if(o.exports)o.pendingImplementation=o.implementation=this._getValueGlobalNS(o.exports);else{for(var i,r=[],s=this._getConfigParser(),u=0;u<o.dependencies.length;u++){var a=o.dependencies[u];if("exports"===a)i={},r.push(i);else if("module"===a)i={exports:{}},r.push(i);else{var l=t[s.mapModule(a)],d=l.implementation;r.push(d)}}var f;f="function"==typeof o.pendingImplementation?o.pendingImplementation.apply(o.pendingImplementation,r):o.pendingImplementation,f?o.implementation=f:i&&(o.implementation=i.exports||i)}}},_waitForModule:function(e){var t=this,n=t._modulesMap[e];return n||(n=t._createModulePromise(e),t._modulesMap[e]=n),n},_waitForModules:function(e){var t=this;return new Promise(function(n,o){for(var i=[],r=0;r<e.length;r++)i.push(t._waitForModule(e[r]));Promise.all(i).then(function(i){var r=t._getConfigParser().getModules(),s=function(){for(var o=[],i=0;i<e.length;i++)o.push(r[e[i]]);t._setModuleImplementation(o),n(o)},u=t._getMissingDepenencies(e);u.length?t.require(u,s,o):s()},o)})}};return Object.keys(n).forEach(function(e){t.prototype[e]=n[e]}),t}),window.Loader=global.Loader,window.require=global.require,window.define=global.define}();

@@ -581,2 +581,3 @@ (function() {

/**

@@ -588,3 +589,2 @@ * Creates an instance of URLBuilder class.

*/
function URLBuilder(configParser) {

@@ -608,3 +608,2 @@ this._configParser = configParser;

var modulesRelativeURL = [];
var result = [];

@@ -643,5 +642,6 @@

// If combine is disabled, create individual URL based on config URL and module path.
// If the module path starts with "/", do not include basePath in the URL.
} else if (!config.combine) {
// If combine is disabled, or the module is an anonymous one,
// create an individual URL based on the config URL and module's path.
// If the module's path starts with "/", do not include basePath in the URL.
} else if (!config.combine || module.anonymous) {
result.push({

@@ -653,5 +653,5 @@ modules: [module.name],

} else {
// If combine is true and module does not have full path, it will be collected
// in a buffer to be loaded among with other modules from combo loader.
// We will put the path in different buffer depending on the fact if it is absolute URL or not.
// If combine is true, this is not an anonymous module and the module does not have full path.
// The module will be collected in a buffer to be loaded among with other modules from combo loader.
// The path will be stored in different buffer depending on the fact if it is absolute URL or not.
if (absolutePath) {

@@ -672,15 +672,27 @@ bufferAbsoluteURL.push(path);

if (bufferRelativeURL.length) {
result.push({
modules: modulesRelativeURL,
url: config.url + basePath + bufferRelativeURL.join('&' + basePath)
});
result = result.concat(
this._generateBufferURLs(
modulesRelativeURL,
bufferRelativeURL,
{
basePath: basePath,
url: config.url,
urlMaxLength: config.urlMaxLength
}
)
);
bufferRelativeURL.length = 0;
}
if (bufferAbsoluteURL.length) {
result.push({
modules: modulesAbsoluteURL,
url: config.url + bufferAbsoluteURL.join('&')
});
result = result.concat(
this._generateBufferURLs(
modulesAbsoluteURL,
bufferAbsoluteURL,
{
url: config.url,
urlMaxLength: config.urlMaxLength
}
)
);
bufferAbsoluteURL.length = 0;

@@ -693,2 +705,44 @@ }

/**
* Generate the appropriate set of URLs based on the list of
* required modules and the maximum allowed URL length
*
* @param {Array<String>} modules Array of module names
* @param {Array<String>} urls Array of module URLs
* @param {Object} config Configuration object containing URL, basePath and urlMaxLength
* @return {Array<Object>} Resulting array of {modules, url} objects
*/
_generateBufferURLs: function(modules, urls, config) {
var i;
var basePath = config.basePath || '';
var result = [];
var urlMaxLength = config.urlMaxLength || 2000;
var urlResult = {
modules: [modules[0]],
url: config.url + basePath + urls[0]
};
for (i = 1; i < urls.length; i++) {
var module = modules[i];
var path = urls[i];
if ((urlResult.url.length + basePath.length + path.length + 1) < urlMaxLength) {
urlResult.modules.push(module);
urlResult.url += '&' + basePath + path;
} else {
result.push(urlResult);
urlResult = {
modules: [module],
url: config.url + basePath + path
};
}
}
result.push(urlResult);
return result;
},
/**
* Returns the path for a module. If module has property path, it will be returned directly. Otherwise,

@@ -704,11 +758,15 @@ * the name of module will be used and extension .js will be added to module name if omitted.

var paths = this._configParser.getConfig().paths;
var paths = this._configParser.getConfig().paths || {};
for (var key in paths) {
var found = false;
Object.keys(paths).forEach(function(item) {
/* istanbul ignore else */
if (Object.prototype.hasOwnProperty.call(paths, key)) {
if (path === key || path.indexOf(key + '/') === 0) {
path = paths[key] + path.substring(key.length);
}
if (path === item || path.indexOf(item + '/') === 0) {
path = paths[item] + path.substring(item.length);
}
});
/* istanbul ignore else */
if(!found && typeof paths['*'] === 'function') {
path = paths['*'](path);
}

@@ -889,13 +947,19 @@

* </ul>
* @return {Object} The constructed module.
*/
define: function(name, dependencies, implementation, config) {
var self = this;
void 0;
config = config || {};
var passedArgsCount = arguments.length;
config.anonymous = false;
if (passedArgsCount < 2) {
void 0;
// we don't support modules with implementation only
return;
implementation = arguments[0];
dependencies = ['module', 'exports'];
config.anonymous = true;
} else if (passedArgsCount === 2) {

@@ -906,35 +970,32 @@ if (typeof name === 'string') {

// this is a module name
implementation = dependencies;
dependencies = ['module', 'exports'];
implementation = arguments[1];
} else {
// anonymous module, we don't support this
return;
void 0;
dependencies = arguments[0];
implementation = arguments[1];
config.anonymous = true;
}
}
// Create a new module by merging the provided config with the passed name,
// dependencies and implementation.
var module = config || {};
var configParser = this._getConfigParser();
if (config.anonymous) {
// Postpone module's registration till the next scriptLoaded event
var onScriptLoaded = function(loadedModules) {
self.off('scriptLoaded', onScriptLoaded);
var pathResolver = this._getPathResolver();
if (loadedModules.length !== 1) {
throw new Error('Multiple anonymous modules cannot be served via combo service. ' +
'Please set `combine` to `false` or describe the modules in the config ' +
'and mark them as anonymous.', loadedModules);
} else {
var moduleName = loadedModules[0];
self._define(moduleName, dependencies, implementation, config);
}
};
// Resolve the path according to the parent module. Example:
// define('metal/src/component/component', ['../array/array']) will become:
// define('metal/src/component/component', ['metal/src/array/array'])
dependencies = dependencies.map(function(dependency) {
return pathResolver.resolvePath(name, dependency);
});
module.name = name;
module.dependencies = dependencies;
module.pendingImplementation = implementation;
configParser.addModule(module);
if (!this._modulesMap[module.name]) {
this._modulesMap[module.name] = true;
self.on('scriptLoaded', onScriptLoaded);
} else {
// This is not an anonymous module, go directly to module's registration flow
this._define(name, dependencies, implementation, config);
}
this.emit('moduleRegister', name);
},

@@ -1128,2 +1189,41 @@

/**
* Defines a module in the system and fires {@link Loader#event:moduleRegister} event with the registered module as param.
* Called internally by {@link Loader#define} method once it normalizes the passed arguments.
*
* @memberof! Loader#
* @protected
* @param {string} name The name of the module.
* @param {array} dependencies List of module dependencies.
* @param {function} implementation The implementation of the module.
* @param {object=} config See {@link Loader:define} for more details.
*/
_define: function(name, dependencies, implementation, config) {
// Create a new module by merging the provided config with the passed name,
// dependencies and implementation.
var module = config || {};
var configParser = this._getConfigParser();
var pathResolver = this._getPathResolver();
// Resolve the path according to the parent module. Example:
// define('metal/src/component/component', ['../array/array']) will become:
// define('metal/src/component/component', ['metal/src/array/array'])
dependencies = dependencies.map(function(dependency) {
return pathResolver.resolvePath(name, dependency);
});
module.name = name;
module.dependencies = dependencies;
module.pendingImplementation = implementation;
configParser.addModule(module);
if (!this._modulesMap[module.name]) {
this._modulesMap[module.name] = true;
}
this.emit('moduleRegister', name);
},
/**
* Returns instance of {@link ConfigParser} class.

@@ -1291,3 +1391,3 @@ *

for (var found, j = 0; j < properties.length; j++) {
for (var found = 0, j = 0; j < properties.length; j++) {
if (registeredModule[properties[j]]) {

@@ -1338,14 +1438,14 @@ found = true;

Promise.all(pendingScripts).then(function(loadedScripts) {
return self._waitForModules(moduleNames);
})
// As soon as all scripts were loaded and all dependencies have been resolved,
// resolve the main Promise
.then(function(loadedModules) {
resolve(loadedModules);
})
// If any script fails to load or other error happens,
// reject the main Promise
.catch(function(error) {
reject(error);
});
return self._waitForModules(moduleNames);
})
// As soon as all scripts were loaded and all dependencies have been resolved,
// resolve the main Promise
.then(function(loadedModules) {
resolve(loadedModules);
})
// If any script fails to load or other error happens,
// reject the main Promise
.catch(function(error) {
reject(error);
});
} else {

@@ -1355,9 +1455,9 @@ // If there are no any missing modules, just wait for modules dependencies

self._waitForModules(moduleNames).then(function(loadedModules) {
resolve(loadedModules);
})
// If some error happens, for example if some module implementation
// throws error, reject the main Promise
.catch(function(error) {
reject(error);
});
resolve(loadedModules);
})
// If some error happens, for example if some module implementation
// throws error, reject the main Promise
.catch(function(error) {
reject(error);
});
}

@@ -1468,3 +1568,3 @@ });

} else if (dependency === 'module') {
exportsImpl = {exports: {}};
exportsImpl = { exports: {} };

@@ -1556,3 +1656,3 @@ dependencyImplementations.push(exportsImpl);

var defineModules = function () {
var defineModules = function() {
var definedModules = [];

@@ -1593,2 +1693,3 @@

return Loader;

@@ -1595,0 +1696,0 @@ }));

@@ -134,3 +134,8 @@ 'use strict';

gulp.task('modules', ['copy-bower', 'modules2'], function() {
gulp.task('modules3', function() {
return gulp.src('src/modules3/**/*.js')
.pipe(gulp.dest('dist/demo/modules3'));
});
gulp.task('modules', ['copy-bower', 'modules2', 'modules3'], function() {
return gulp.src('src/modules/**/*.js')

@@ -137,0 +142,0 @@ .pipe(babel({

{
"name": "liferay-amd-loader",
"version": "1.4.4",
"version": "1.5.0",
"description": "AMD Loader with support for combo URL and conditional loading",

@@ -5,0 +5,0 @@ "main": "main.js",

@@ -6,2 +6,4 @@ AMD Module Loader

___Note:___ Loading anonymous modules via combo URL is not possible. If some of the modules is anonymous and `combine` is set to `true`, the module should be registered and `anonymous` property to be set as `true`. In this way this module will be excluded from the combo URL and a separate `script` element will be created for it. If `combine` is set to `false`, describing the module is not needed.
How to build it?

@@ -154,2 +156,14 @@ -------------

The Loader also supports an `*` as key in the `paths` configuration. The value should be a function, which will receive the module as an argument and the returned value will be used as a path for this module. The `*` has lower precedence than a specific key for a given module. Example:
```javascript
__CONFIG__ = {
paths: {
'*': function(module) {
return 'https://rawgit.com/bkardell/gaps/master/' + module + '.js';
}
}
};
```
Mapping module names

@@ -199,2 +213,19 @@ ======

The Loader also supports an `*` as key in the `maps` configuration. The value should be a function, which will receive the module as an argument and the returned value will be used as the new module name. The `*` has lower precedence than a specific key for a given module. Example:
```javascript
__CONFIG__ = {
maps: {
'*': function(module) {
if (module.indexOf('@') === -1) {
module += '@1.0';
}
return module;
}
}
};
```
Loading modules via combo URL

@@ -201,0 +232,0 @@ ======

@@ -59,13 +59,19 @@ 'use strict';

* </ul>
* @return {Object} The constructed module.
*/
define: function(name, dependencies, implementation, config) {
var self = this;
console.log('DEFINE', name, dependencies);
config = config || {};
var passedArgsCount = arguments.length;
config.anonymous = false;
if (passedArgsCount < 2) {
console.log('DEFINE, module with one param only, returning');
// we don't support modules with implementation only
return;
console.log('DEFINE, module with one param only, this should be anonymous module');
implementation = arguments[0];
dependencies = ['module', 'exports'];
config.anonymous = true;
} else if (passedArgsCount === 2) {

@@ -76,35 +82,32 @@ if (typeof name === 'string') {

// this is a module name
implementation = dependencies;
dependencies = ['module', 'exports'];
implementation = arguments[1];
} else {
// anonymous module, we don't support this
return;
console.log('DEFINE, module with one param only, this should be anonymous module');
dependencies = arguments[0];
implementation = arguments[1];
config.anonymous = true;
}
}
// Create a new module by merging the provided config with the passed name,
// dependencies and implementation.
var module = config || {};
var configParser = this._getConfigParser();
if (config.anonymous) {
// Postpone module's registration till the next scriptLoaded event
var onScriptLoaded = function(loadedModules) {
self.off('scriptLoaded', onScriptLoaded);
var pathResolver = this._getPathResolver();
if (loadedModules.length !== 1) {
throw new Error('Multiple anonymous modules cannot be served via combo service. ' +
'Please set `combine` to `false` or describe the modules in the config ' +
'and mark them as anonymous.', loadedModules);
} else {
var moduleName = loadedModules[0];
self._define(moduleName, dependencies, implementation, config);
}
};
// Resolve the path according to the parent module. Example:
// define('metal/src/component/component', ['../array/array']) will become:
// define('metal/src/component/component', ['metal/src/array/array'])
dependencies = dependencies.map(function(dependency) {
return pathResolver.resolvePath(name, dependency);
});
module.name = name;
module.dependencies = dependencies;
module.pendingImplementation = implementation;
configParser.addModule(module);
if (!this._modulesMap[module.name]) {
this._modulesMap[module.name] = true;
self.on('scriptLoaded', onScriptLoaded);
} else {
// This is not an anonymous module, go directly to module's registration flow
this._define(name, dependencies, implementation, config);
}
this.emit('moduleRegister', name);
},

@@ -298,2 +301,41 @@

/**
* Defines a module in the system and fires {@link Loader#event:moduleRegister} event with the registered module as param.
* Called internally by {@link Loader#define} method once it normalizes the passed arguments.
*
* @memberof! Loader#
* @protected
* @param {string} name The name of the module.
* @param {array} dependencies List of module dependencies.
* @param {function} implementation The implementation of the module.
* @param {object=} config See {@link Loader:define} for more details.
*/
_define: function(name, dependencies, implementation, config) {
// Create a new module by merging the provided config with the passed name,
// dependencies and implementation.
var module = config || {};
var configParser = this._getConfigParser();
var pathResolver = this._getPathResolver();
// Resolve the path according to the parent module. Example:
// define('metal/src/component/component', ['../array/array']) will become:
// define('metal/src/component/component', ['metal/src/array/array'])
dependencies = dependencies.map(function(dependency) {
return pathResolver.resolvePath(name, dependency);
});
module.name = name;
module.dependencies = dependencies;
module.pendingImplementation = implementation;
configParser.addModule(module);
if (!this._modulesMap[module.name]) {
this._modulesMap[module.name] = true;
}
this.emit('moduleRegister', name);
},
/**
* Returns instance of {@link ConfigParser} class.

@@ -461,3 +503,3 @@ *

for (var found, j = 0; j < properties.length; j++) {
for (var found = 0, j = 0; j < properties.length; j++) {
if (registeredModule[properties[j]]) {

@@ -508,14 +550,14 @@ found = true;

Promise.all(pendingScripts).then(function(loadedScripts) {
return self._waitForModules(moduleNames);
})
// As soon as all scripts were loaded and all dependencies have been resolved,
// resolve the main Promise
.then(function(loadedModules) {
resolve(loadedModules);
})
// If any script fails to load or other error happens,
// reject the main Promise
.catch(function(error) {
reject(error);
});
return self._waitForModules(moduleNames);
})
// As soon as all scripts were loaded and all dependencies have been resolved,
// resolve the main Promise
.then(function(loadedModules) {
resolve(loadedModules);
})
// If any script fails to load or other error happens,
// reject the main Promise
.catch(function(error) {
reject(error);
});
} else {

@@ -525,9 +567,9 @@ // If there are no any missing modules, just wait for modules dependencies

self._waitForModules(moduleNames).then(function(loadedModules) {
resolve(loadedModules);
})
// If some error happens, for example if some module implementation
// throws error, reject the main Promise
.catch(function(error) {
reject(error);
});
resolve(loadedModules);
})
// If some error happens, for example if some module implementation
// throws error, reject the main Promise
.catch(function(error) {
reject(error);
});
}

@@ -638,3 +680,3 @@ });

} else if (dependency === 'module') {
exportsImpl = {exports: {}};
exportsImpl = { exports: {} };

@@ -726,3 +768,3 @@ dependencyImplementations.push(exportsImpl);

var defineModules = function () {
var defineModules = function() {
var definedModules = [];

@@ -761,2 +803,2 @@

Loader.prototype[key] = LoaderProtoMethods[key];
});
});

@@ -7,2 +7,3 @@ 'use strict';

/**

@@ -14,3 +15,2 @@ * Creates an instance of URLBuilder class.

*/
function URLBuilder(configParser) {

@@ -34,3 +34,2 @@ this._configParser = configParser;

var modulesRelativeURL = [];
var result = [];

@@ -69,5 +68,6 @@

// If combine is disabled, create individual URL based on config URL and module path.
// If the module path starts with "/", do not include basePath in the URL.
} else if (!config.combine) {
// If combine is disabled, or the module is an anonymous one,
// create an individual URL based on the config URL and module's path.
// If the module's path starts with "/", do not include basePath in the URL.
} else if (!config.combine || module.anonymous) {
result.push({

@@ -79,5 +79,5 @@ modules: [module.name],

} else {
// If combine is true and module does not have full path, it will be collected
// in a buffer to be loaded among with other modules from combo loader.
// We will put the path in different buffer depending on the fact if it is absolute URL or not.
// If combine is true, this is not an anonymous module and the module does not have full path.
// The module will be collected in a buffer to be loaded among with other modules from combo loader.
// The path will be stored in different buffer depending on the fact if it is absolute URL or not.
if (absolutePath) {

@@ -98,15 +98,27 @@ bufferAbsoluteURL.push(path);

if (bufferRelativeURL.length) {
result.push({
modules: modulesRelativeURL,
url: config.url + basePath + bufferRelativeURL.join('&' + basePath)
});
result = result.concat(
this._generateBufferURLs(
modulesRelativeURL,
bufferRelativeURL,
{
basePath: basePath,
url: config.url,
urlMaxLength: config.urlMaxLength
}
)
);
bufferRelativeURL.length = 0;
}
if (bufferAbsoluteURL.length) {
result.push({
modules: modulesAbsoluteURL,
url: config.url + bufferAbsoluteURL.join('&')
});
result = result.concat(
this._generateBufferURLs(
modulesAbsoluteURL,
bufferAbsoluteURL,
{
url: config.url,
urlMaxLength: config.urlMaxLength
}
)
);
bufferAbsoluteURL.length = 0;

@@ -119,2 +131,44 @@ }

/**
* Generate the appropriate set of URLs based on the list of
* required modules and the maximum allowed URL length
*
* @param {Array<String>} modules Array of module names
* @param {Array<String>} urls Array of module URLs
* @param {Object} config Configuration object containing URL, basePath and urlMaxLength
* @return {Array<Object>} Resulting array of {modules, url} objects
*/
_generateBufferURLs: function(modules, urls, config) {
var i;
var basePath = config.basePath || '';
var result = [];
var urlMaxLength = config.urlMaxLength || 2000;
var urlResult = {
modules: [modules[0]],
url: config.url + basePath + urls[0]
};
for (i = 1; i < urls.length; i++) {
var module = modules[i];
var path = urls[i];
if ((urlResult.url.length + basePath.length + path.length + 1) < urlMaxLength) {
urlResult.modules.push(module);
urlResult.url += '&' + basePath + path;
} else {
result.push(urlResult);
urlResult = {
modules: [module],
url: config.url + basePath + path
};
}
}
result.push(urlResult);
return result;
},
/**
* Returns the path for a module. If module has property path, it will be returned directly. Otherwise,

@@ -130,11 +184,15 @@ * the name of module will be used and extension .js will be added to module name if omitted.

var paths = this._configParser.getConfig().paths;
var paths = this._configParser.getConfig().paths || {};
for (var key in paths) {
var found = false;
Object.keys(paths).forEach(function(item) {
/* istanbul ignore else */
if (Object.prototype.hasOwnProperty.call(paths, key)) {
if (path === key || path.indexOf(key + '/') === 0) {
path = paths[key] + path.substring(key.length);
}
if (path === item || path.indexOf(item + '/') === 0) {
path = paths[item] + path.substring(item.length);
}
});
/* istanbul ignore else */
if(!found && typeof paths['*'] === 'function') {
path = paths['*'](path);
}

@@ -141,0 +199,0 @@

@@ -531,3 +531,3 @@ 'use strict';

it('should failure after require timeout, but a valid module should still load', function(done) {
it('should fail after a require timeout, but a valid module should still be loaded', function(done) {
global.__CONFIG__.waitTimeout = 1;

@@ -682,2 +682,109 @@ global.__CONFIG__.paths['delay'] = '/modules2/delay';

});
it('should load modules even when same module is requested second time with another module', function(done) {
var failure = sinon.stub();
var success = sinon.stub();
Loader.require(['module3'], success, failure);
Loader.require(['module3', 'module7'], success, failure);
setTimeout(function() {
assert.isTrue(failure.notCalled, 'Failure should be not called');
assert.isTrue(success.calledTwice, 'Success should be called twice');
done();
}, 50);
});
describe('when working with anonymous modules', function() {
beforeEach(function() {
Object.keys(require.cache).forEach(function(cache) {
delete require.cache[cache];
});
global.__CONFIG__ = {
url: __dirname + '/fixture',
basePath: '/modules3'
};
Object.keys(require.cache).forEach(function(cache) {
delete require.cache[cache];
});
require('../umd/config-parser.js');
require('../umd/event-emitter.js');
require('../umd/script-loader.js');
});
it('should load multiple anonymous modules', function(done) {
var failure = sinon.stub();
var success = sinon.stub();
Loader.require(['a', 'b', 'c'], success, failure);
setTimeout(function() {
assert.isTrue(failure.notCalled, 'Failure should be not called');
assert.isTrue(success.calledOnce, 'Success should be called once');
done();
}, 50);
});
it('should load anonymous modules with anonymous dependencies', function(done) {
var failure = sinon.stub();
var success = sinon.stub();
Loader.require(['d'], success, failure);
setTimeout(function() {
assert.isTrue(failure.notCalled, 'Failure should be not called');
assert.isTrue(success.calledOnce, 'Success should be called once');
done();
}, 50);
});
it('should load non-anonymous modules with anonymous dependencies', function(done) {
var failure = sinon.stub();
var success = sinon.stub();
Loader.require(['e'], success, failure);
setTimeout(function() {
assert.isTrue(success.calledOnce, 'Success should be called once');
assert.isTrue(failure.notCalled, 'Failure should not be called');
done();
}, 50);
});
it('should load anonymous modules with non-anonymous dependencies', function(done) {
var failure = sinon.stub();
var success = sinon.stub();
Loader.require(['f'], success, failure);
setTimeout(function() {
assert.isTrue(failure.notCalled, 'Failure should be not called');
assert.isTrue(success.calledOnce, 'Success should be called once');
done();
}, 50);
});
it('should mark anonymous modules', function() {
var moduleName = 'foo';
Loader.define(function(){});
Loader.emit('scriptLoaded', [moduleName]);
var modules = Loader.getModules();
assert.property(modules, moduleName);
var module = modules[moduleName];
assert.isObject(module);
assert.propertyVal(module, 'name', moduleName);
assert.propertyVal(module, 'anonymous', true);
});
});
});

@@ -61,2 +61,32 @@ 'use strict';

it('should map module\'s path via function', function () {
var configParser = new global.ConfigParser({
'modules': {
'b': {
'dependencies': ['a']
},
'a': {
'dependencies': []
}
},
paths: {
'*': function(module) {
return 'https://a.com/' + module + '.js';
}
}
});
var urlBuilder = new global.URLBuilder(configParser);
var modulesURL = urlBuilder.build(['a', 'b']);
assert.strictEqual(modulesURL.length, 2);
assert.strictEqual(modulesURL[0].url, 'https://a.com/a.js');
assert.sameMembers(modulesURL[0].modules, ['a']);
assert.strictEqual(modulesURL[1].url, 'https://a.com/b.js');
assert.sameMembers(modulesURL[1].modules, ['b']);
});
it('should create url for modules with external URLs', function () {

@@ -263,2 +293,94 @@ var configParser = new global.ConfigParser({

});
it('should not combine anonymous modules', function() {
var configParser = new global.ConfigParser({
'url': 'http://localhost:3000/modules?',
'combine': true,
'basePath': '/base',
'modules': {
'foo': {
'dependencies': []
},
'bar': {
'dependencies': []
},
'baz': {
'dependencies': [],
'anonymous': true
}
}
});
var urlBuilder = new global.URLBuilder(configParser);
var modulesURL = urlBuilder.build(['foo', 'bar', 'baz']);
assert.strictEqual(2, modulesURL.length);
assert.strictEqual('http://localhost:3000/modules?/base/baz.js', modulesURL[0].url);
assert.strictEqual('http://localhost:3000/modules?/base/foo.js&/base/bar.js', modulesURL[1].url);
});
it('should create combo URLs up to 2000 characters', function() {
// Create a 640 character suffix
var longModuleNameSuffix = new Array(65).join('1234567890');
var configParser = new global.ConfigParser({
'url': 'http://localhost:3000/modules?',
'combine': true,
'basePath': '/base',
'urlMaxLength': 2000,
'modules': {
'module1': {
'dependencies': [],
'path': 'module1' + longModuleNameSuffix
},
'module2': {
'dependencies': [],
'path': 'module1' + longModuleNameSuffix
},
'module3': {
'dependencies': [],
'path': 'module1' + longModuleNameSuffix
},
'module4': {
'dependencies': [],
'path': 'module1' + longModuleNameSuffix
},
'module5': {
'dependencies': [],
'path': 'module1' + longModuleNameSuffix
},
'module6': {
'dependencies': [],
'path': 'module1' + longModuleNameSuffix
},
'absolute1': {
'dependencies': [],
'path': '/absolute/absolute1' + longModuleNameSuffix
},
'absolute2': {
'dependencies': [],
'path': '/absolute/absolute2' + longModuleNameSuffix
},
'absolute3': {
'dependencies': [],
'path': '/absolute/absolute3' + longModuleNameSuffix
},
'absolute4': {
'dependencies': [],
'path': '/absolute/absolute4' + longModuleNameSuffix
}
},
});
var urlBuilder = new global.URLBuilder(configParser);
var modulesURL = urlBuilder.build(['module1', 'absolute1', 'module2', 'absolute2', 'module3', 'absolute3', 'module4', 'absolute4', 'module5', 'module6']);
assert.strictEqual(5, modulesURL.length);
modulesURL.forEach(function(moduleURL) {
assert.isTrue(moduleURL.url.length < 2000);
});
});
});

@@ -81,13 +81,19 @@ (function (global, factory) {

* </ul>
* @return {Object} The constructed module.
*/
define: function(name, dependencies, implementation, config) {
var self = this;
console.log('DEFINE', name, dependencies);
config = config || {};
var passedArgsCount = arguments.length;
config.anonymous = false;
if (passedArgsCount < 2) {
console.log('DEFINE, module with one param only, returning');
// we don't support modules with implementation only
return;
console.log('DEFINE, module with one param only, this should be anonymous module');
implementation = arguments[0];
dependencies = ['module', 'exports'];
config.anonymous = true;
} else if (passedArgsCount === 2) {

@@ -98,35 +104,32 @@ if (typeof name === 'string') {

// this is a module name
implementation = dependencies;
dependencies = ['module', 'exports'];
implementation = arguments[1];
} else {
// anonymous module, we don't support this
return;
console.log('DEFINE, module with one param only, this should be anonymous module');
dependencies = arguments[0];
implementation = arguments[1];
config.anonymous = true;
}
}
// Create a new module by merging the provided config with the passed name,
// dependencies and implementation.
var module = config || {};
var configParser = this._getConfigParser();
if (config.anonymous) {
// Postpone module's registration till the next scriptLoaded event
var onScriptLoaded = function(loadedModules) {
self.off('scriptLoaded', onScriptLoaded);
var pathResolver = this._getPathResolver();
if (loadedModules.length !== 1) {
throw new Error('Multiple anonymous modules cannot be served via combo service. ' +
'Please set `combine` to `false` or describe the modules in the config ' +
'and mark them as anonymous.', loadedModules);
} else {
var moduleName = loadedModules[0];
self._define(moduleName, dependencies, implementation, config);
}
};
// Resolve the path according to the parent module. Example:
// define('metal/src/component/component', ['../array/array']) will become:
// define('metal/src/component/component', ['metal/src/array/array'])
dependencies = dependencies.map(function(dependency) {
return pathResolver.resolvePath(name, dependency);
});
module.name = name;
module.dependencies = dependencies;
module.pendingImplementation = implementation;
configParser.addModule(module);
if (!this._modulesMap[module.name]) {
this._modulesMap[module.name] = true;
self.on('scriptLoaded', onScriptLoaded);
} else {
// This is not an anonymous module, go directly to module's registration flow
this._define(name, dependencies, implementation, config);
}
this.emit('moduleRegister', name);
},

@@ -320,2 +323,41 @@

/**
* Defines a module in the system and fires {@link Loader#event:moduleRegister} event with the registered module as param.
* Called internally by {@link Loader#define} method once it normalizes the passed arguments.
*
* @memberof! Loader#
* @protected
* @param {string} name The name of the module.
* @param {array} dependencies List of module dependencies.
* @param {function} implementation The implementation of the module.
* @param {object=} config See {@link Loader:define} for more details.
*/
_define: function(name, dependencies, implementation, config) {
// Create a new module by merging the provided config with the passed name,
// dependencies and implementation.
var module = config || {};
var configParser = this._getConfigParser();
var pathResolver = this._getPathResolver();
// Resolve the path according to the parent module. Example:
// define('metal/src/component/component', ['../array/array']) will become:
// define('metal/src/component/component', ['metal/src/array/array'])
dependencies = dependencies.map(function(dependency) {
return pathResolver.resolvePath(name, dependency);
});
module.name = name;
module.dependencies = dependencies;
module.pendingImplementation = implementation;
configParser.addModule(module);
if (!this._modulesMap[module.name]) {
this._modulesMap[module.name] = true;
}
this.emit('moduleRegister', name);
},
/**
* Returns instance of {@link ConfigParser} class.

@@ -483,3 +525,3 @@ *

for (var found, j = 0; j < properties.length; j++) {
for (var found = 0, j = 0; j < properties.length; j++) {
if (registeredModule[properties[j]]) {

@@ -530,14 +572,14 @@ found = true;

Promise.all(pendingScripts).then(function(loadedScripts) {
return self._waitForModules(moduleNames);
})
// As soon as all scripts were loaded and all dependencies have been resolved,
// resolve the main Promise
.then(function(loadedModules) {
resolve(loadedModules);
})
// If any script fails to load or other error happens,
// reject the main Promise
.catch(function(error) {
reject(error);
});
return self._waitForModules(moduleNames);
})
// As soon as all scripts were loaded and all dependencies have been resolved,
// resolve the main Promise
.then(function(loadedModules) {
resolve(loadedModules);
})
// If any script fails to load or other error happens,
// reject the main Promise
.catch(function(error) {
reject(error);
});
} else {

@@ -547,9 +589,9 @@ // If there are no any missing modules, just wait for modules dependencies

self._waitForModules(moduleNames).then(function(loadedModules) {
resolve(loadedModules);
})
// If some error happens, for example if some module implementation
// throws error, reject the main Promise
.catch(function(error) {
reject(error);
});
resolve(loadedModules);
})
// If some error happens, for example if some module implementation
// throws error, reject the main Promise
.catch(function(error) {
reject(error);
});
}

@@ -660,3 +702,3 @@ });

} else if (dependency === 'module') {
exportsImpl = {exports: {}};
exportsImpl = { exports: {} };

@@ -748,3 +790,3 @@ dependencyImplementations.push(exportsImpl);

var defineModules = function () {
var defineModules = function() {
var definedModules = [];

@@ -785,3 +827,4 @@

return Loader;
}));

@@ -25,2 +25,3 @@ (function (global, factory) {

/**

@@ -32,3 +33,2 @@ * Creates an instance of URLBuilder class.

*/
function URLBuilder(configParser) {

@@ -52,3 +52,2 @@ this._configParser = configParser;

var modulesRelativeURL = [];
var result = [];

@@ -87,5 +86,6 @@

// If combine is disabled, create individual URL based on config URL and module path.
// If the module path starts with "/", do not include basePath in the URL.
} else if (!config.combine) {
// If combine is disabled, or the module is an anonymous one,
// create an individual URL based on the config URL and module's path.
// If the module's path starts with "/", do not include basePath in the URL.
} else if (!config.combine || module.anonymous) {
result.push({

@@ -97,5 +97,5 @@ modules: [module.name],

} else {
// If combine is true and module does not have full path, it will be collected
// in a buffer to be loaded among with other modules from combo loader.
// We will put the path in different buffer depending on the fact if it is absolute URL or not.
// If combine is true, this is not an anonymous module and the module does not have full path.
// The module will be collected in a buffer to be loaded among with other modules from combo loader.
// The path will be stored in different buffer depending on the fact if it is absolute URL or not.
if (absolutePath) {

@@ -116,15 +116,27 @@ bufferAbsoluteURL.push(path);

if (bufferRelativeURL.length) {
result.push({
modules: modulesRelativeURL,
url: config.url + basePath + bufferRelativeURL.join('&' + basePath)
});
result = result.concat(
this._generateBufferURLs(
modulesRelativeURL,
bufferRelativeURL,
{
basePath: basePath,
url: config.url,
urlMaxLength: config.urlMaxLength
}
)
);
bufferRelativeURL.length = 0;
}
if (bufferAbsoluteURL.length) {
result.push({
modules: modulesAbsoluteURL,
url: config.url + bufferAbsoluteURL.join('&')
});
result = result.concat(
this._generateBufferURLs(
modulesAbsoluteURL,
bufferAbsoluteURL,
{
url: config.url,
urlMaxLength: config.urlMaxLength
}
)
);
bufferAbsoluteURL.length = 0;

@@ -137,2 +149,44 @@ }

/**
* Generate the appropriate set of URLs based on the list of
* required modules and the maximum allowed URL length
*
* @param {Array<String>} modules Array of module names
* @param {Array<String>} urls Array of module URLs
* @param {Object} config Configuration object containing URL, basePath and urlMaxLength
* @return {Array<Object>} Resulting array of {modules, url} objects
*/
_generateBufferURLs: function(modules, urls, config) {
var i;
var basePath = config.basePath || '';
var result = [];
var urlMaxLength = config.urlMaxLength || 2000;
var urlResult = {
modules: [modules[0]],
url: config.url + basePath + urls[0]
};
for (i = 1; i < urls.length; i++) {
var module = modules[i];
var path = urls[i];
if ((urlResult.url.length + basePath.length + path.length + 1) < urlMaxLength) {
urlResult.modules.push(module);
urlResult.url += '&' + basePath + path;
} else {
result.push(urlResult);
urlResult = {
modules: [module],
url: config.url + basePath + path
};
}
}
result.push(urlResult);
return result;
},
/**
* Returns the path for a module. If module has property path, it will be returned directly. Otherwise,

@@ -148,11 +202,15 @@ * the name of module will be used and extension .js will be added to module name if omitted.

var paths = this._configParser.getConfig().paths;
var paths = this._configParser.getConfig().paths || {};
for (var key in paths) {
var found = false;
Object.keys(paths).forEach(function(item) {
/* istanbul ignore else */
if (Object.prototype.hasOwnProperty.call(paths, key)) {
if (path === key || path.indexOf(key + '/') === 0) {
path = paths[key] + path.substring(key.length);
}
if (path === item || path.indexOf(item + '/') === 0) {
path = paths[item] + path.substring(item.length);
}
});
/* istanbul ignore else */
if(!found && typeof paths['*'] === 'function') {
path = paths['*'](path);
}

@@ -159,0 +217,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc