diff --git a/lib/package.js b/lib/package.js index c3aa63e7..c2d01972 100644 --- a/lib/package.js +++ b/lib/package.js @@ -51,6 +51,12 @@ * import 'jquery' => import 'jquery/index.js' * import 'jquery/module' => import 'jquery/module.js' * + * In addition, the following meta properties will be allowed to be package + * -relative as well in the package meta config: + * + * - plugin + * - alias + * */ (function() { @@ -85,13 +91,6 @@ }; }); - function extend(a, b) { - a = a || {}; - for (var p in b) - a[b] = b[p]; - return a; - } - SystemJSLoader.prototype.packages = function(packages) { var loader = this; for (var p in packages) { @@ -107,12 +106,26 @@ loader.packageDefaultJSExtensions[p] = true; // format - if (pkgCfg.format) - loader.meta[p + '/*'] = extend(loader.meta[p + '/*'], { format: pkgCfg.format }); + if (pkgCfg.format) { + var formatMeta = loader.meta[p + '/*'] || {}; + formatMeta.format = pkgCfg.format; + loader.meta[p + '/*'] = formatMeta; + } // meta - for (var m in pkgCfg.meta) - loader.meta[p + '/' + m] = extend(loader.meta[p + '/' + m], pkgCfg.meta[m]); + for (var m in pkgCfg.meta) { + var meta = loader.meta[p + '/' + m] || {}; + var pkgMeta = pkgCfg.meta[m]; + for (var p in pkgMeta) { + // plugin and alias can be package-relative + if ((p === 'plugin' || p === 'alias') + && pkgMeta[p].substr(0, 2) == './') + meta[p] = p + pkgMeta[p].substr(1); + else + meta[p] = pkgMeta[p]; + } + loader.meta[p + '/' + m] = meta; + } // map for (var m in pkgCfg.map) {