lasso
Version:
Lasso.js is a build tool and runtime library for building and bundling all of the resources needed by a web application
158 lines (120 loc) • 4.11 kB
JavaScript
var extend = require('raptor-util').extend;
var DependencyList = require('./DependencyList');
var ok = require('assert').ok;
var nodePath = require('path');
var FlagSet = require('./FlagSet');
var nextId = 0;
var condition = require('./condition');
var lassoResolveFrom = require('lasso-resolve-from');
var logger = require('raptor-logging').logger(module);
function resolveBrowserPath(dir, path) {
var resolved;
if (path.charAt(0) === '.') {
resolved = lassoResolveFrom(dir, path);
} else {
resolved = lassoResolveFrom(dir, './' + path);
if (!resolved) {
resolved = lassoResolveFrom(dir, path);
}
}
return resolved ? resolved.path : undefined;
}
function LassoManifest(options) {
var dependencyRegistry = options.dependencyRegistry;
var async;
if (options.manifest) {
// save off the async property value
async = options.manifest.async;
extend(this, options.manifest);
}
ok(dependencyRegistry, '"dependencyRegistry" is required');
this._uniqueId = nextId++;
if (options.dirname) {
this.dirname = options.dirname;
}
if (options.filename) {
this.filename = options.filename;
}
var dirname = this.dirname;
var filename = this.filename;
ok(dirname, '"dirname" is required');
ok(typeof dirname === 'string', '"dirname" must be a string');
this.dependencies = new DependencyList(
this.dependencies || [],
dependencyRegistry,
dirname,
filename);
this.async = null;
if (async) {
if (typeof async !== 'object') {
throw new Error('async should be an object. (dirname=' + dirname + ', filename=' + filename + ')');
}
this.async = {};
for (var asyncPackageName in async) {
if (async.hasOwnProperty(asyncPackageName)) {
var asyncDependencies = async[asyncPackageName];
this.async[asyncPackageName] = new DependencyList(
asyncDependencies,
dependencyRegistry,
dirname,
filename);
}
}
}
var requireRemap = this.requireRemap;
if (requireRemap && Array.isArray(requireRemap)) {
this.requireRemap = requireRemap.map((requireRemap) => {
var from = resolveBrowserPath(dirname, requireRemap.from);
var to = resolveBrowserPath(dirname, requireRemap.to);
return {
from: from,
to: to,
condition: condition.fromObject(requireRemap)
};
});
}
}
LassoManifest.prototype = {
__LassoManifest: true,
getUniqueId: function() {
return this._uniqueId;
},
resolve: function(relPath) {
return nodePath.resolve(this.dirname, relPath);
},
/**
*
* @param options
* @returns
*/
async getDependencies (options) {
logger.debug('getDependencies()');
var flags = options && options.flags;
if (!flags || !flags.__FlagSet) {
flags = new FlagSet(flags);
}
logger.debug('getDependencies() Normalizing dependencies BEGIN: ', this.dependencies);
const dependencies = await this.dependencies.normalize();
logger.debug('getDependencies() Normalizing dependencies DONE: ', this.dependencies);
return dependencies;
},
getRequireRemap: function(lassoContext) {
if (this.requireRemap && Array.isArray(this.requireRemap)) {
var filteredRemaps = {};
var flags = lassoContext.flags;
this.requireRemap.forEach(function(remap) {
if (remap.condition && !remap.condition(flags)) {
return;
}
filteredRemaps[remap.from] = remap.to;
});
return filteredRemaps;
} else {
return {};
}
}
};
LassoManifest.isLassoManifest = function(o) {
return o && o.__LassoManifest;
};
module.exports = LassoManifest;