can-util
Version:
Common utilities for CanJS projects
52 lines (48 loc) • 1.53 kB
JavaScript
var isFunction = require('../is-function/is-function');
var global = require('can-globals/global/global')();
var namespace = require("can-namespace");
/**
* @module {function} can-util/js/import/import import
* @parent can-util/js
* @signature `importModule(moduleName, parentName)`
*
* ```js
* var importModule = require("can-util/js/import/import");
*
* importModule("foo.stache").then(function(){
* // module was imported
* });
* ```
*
* @param {String} moduleName The module to be imported.
* @param {String} [parentName] A parent module that will be used as a reference for resolving relative module imports.
* @return {Promise} A Promise that will resolve when the module has been imported.
*/
module.exports = namespace.import = function(moduleName, parentName) {
return new Promise(function(resolve, reject) {
try {
if(typeof global.System === "object" && isFunction(global.System["import"])) {
global.System["import"](moduleName, {
name: parentName
}).then(resolve, reject);
} else if(global.define && global.define.amd){
global.require([moduleName], function(value){
resolve(value);
});
} else if(global.require){
resolve(global.require(moduleName));
} else {
// steal optimized build
if (typeof stealRequire !== "undefined") {
steal.import(moduleName, { name: parentName }).then(resolve, reject);
} else {
// ideally this will use can.getObject
resolve();
}
}
} catch(err) {
reject(err);
}
});
};
;