[react-packager] Introduce buildPackage API

This commit is contained in:
Amjad Masad
2015-05-22 17:12:10 -07:00
parent c6ed85afcc
commit 82a082a794
5 changed files with 111 additions and 28 deletions

View File

@@ -18,14 +18,17 @@ exports.middleware = function(options) {
return server.processRequest.bind(server);
};
exports.buildPackageFromUrl = function(options, reqUrl) {
Activity.disable();
// Don't start the filewatcher or the cache.
if (options.nonPersistent == null) {
options.nonPersistent = true;
}
exports.buildPackage = function(options, packageOptions) {
var server = createServer(options);
return server.buildPackage(packageOptions)
.then(function(p) {
server.end();
return p;
});
};
var server = new Server(options);
exports.buildPackageFromUrl = function(options, reqUrl) {
var server = createServer(options);
return server.buildPackageFromUrl(reqUrl)
.then(function(p) {
server.end();
@@ -34,13 +37,7 @@ exports.buildPackageFromUrl = function(options, reqUrl) {
};
exports.getDependencies = function(options, main) {
Activity.disable();
// Don't start the filewatcher or the cache.
if (options.nonPersistent == null) {
options.nonPersistent = true;
}
var server = new Server(options);
var server = createServer(options);
return server.getDependencies(main)
.then(function(r) {
server.end();
@@ -60,3 +57,13 @@ function useGracefulFs() {
}
});
}
function createServer(options) {
Activity.disable();
// Don't start the filewatcher or the cache.
if (options.nonPersistent == null) {
options.nonPersistent = true;
}
return new Server(options);
}

View File

@@ -15,6 +15,8 @@ var ModuleTransport = require('../lib/ModuleTransport');
module.exports = Package;
var SOURCEMAPPING_URL = '\n\/\/@ sourceMappingURL=';
function Package(sourceMapUrl) {
this._finalized = false;
this._modules = [];
@@ -96,12 +98,11 @@ Package.prototype.getSource = function(options) {
}
var source = this._getSource();
source += '\n\/\/@ sourceMappingURL=';
if (options.inlineSourceMap) {
source += this._getInlineSourceMap();
} else {
source += this._sourceMapUrl;
source += SOURCEMAPPING_URL + this._getInlineSourceMap();
} else if (this._sourceMapUrl) {
source += SOURCEMAPPING_URL + this._sourceMapUrl;
}
return source;

View File

@@ -47,6 +47,26 @@ describe('Package', function() {
].join('\n'));
});
it('should be ok to leave out the source map url', function() {
var p = new Package();
p.addModule(new ModuleTransport({
code: 'transformed foo;',
sourceCode: 'source foo',
sourcePath: 'foo path',
}));
p.addModule(new ModuleTransport({
code: 'transformed bar;',
sourceCode: 'source bar',
sourcePath: 'bar path',
}));
p.finalize({});
expect(p.getSource()).toBe([
'transformed foo;',
'transformed bar;',
].join('\n'));
});
it('should create a package and add run module code', function() {
ppackage.addModule(new ModuleTransport({
code: 'transformed foo;',

View File

@@ -230,7 +230,7 @@ describe('processRequest', function() {
});
});
describe.only('/assets endpoint', function() {
describe('/assets endpoint', function() {
var AssetServer;
beforeEach(function() {
AssetServer = require('../../AssetServer');
@@ -257,4 +257,30 @@ describe('processRequest', function() {
});
});
describe('buildPackage(options)', function() {
it('Calls the packager with the correct args', function() {
server.buildPackage({
entryFile: 'foo file'
});
expect(Packager.prototype.package).toBeCalledWith(
'foo file',
true,
undefined,
true
);
});
});
describe('buildPackageFromUrl(options)', function() {
it('Calls the packager with the correct args', function() {
server.buildPackageFromUrl('/path/to/foo.bundle?dev=false&runModule=false');
expect(Packager.prototype.package).toBeCalledWith(
'path/to/foo.js',
false,
'/path/to/foo.map',
false
);
});
});
});

View File

@@ -129,7 +129,7 @@ Server.prototype._onFileChange = function(type, filepath, root) {
};
Server.prototype._rebuildPackages = function() {
var buildPackage = this._buildPackage.bind(this);
var buildPackage = this.buildPackage.bind(this);
var packages = this._packages;
Object.keys(packages).forEach(function(key) {
var options = getOptionsFromUrl(key);
@@ -171,18 +171,47 @@ Server.prototype.end = function() {
]);
};
Server.prototype._buildPackage = function(options) {
var packageOpts = declareOpts({
sourceMapUrl: {
type: 'string',
required: false,
},
entryFile: {
type: 'string',
required: true,
},
dev: {
type: 'boolean',
default: true,
},
minify: {
type: 'boolean',
default: false,
},
runModule: {
type: 'boolean',
default: true,
},
inlineSourceMap: {
type: 'boolean',
default: false,
},
});
Server.prototype.buildPackage = function(options) {
var opts = packageOpts(options);
return this._packager.package(
options.main,
options.runModule,
options.sourceMapUrl,
options.dev
opts.entryFile,
opts.runModule,
opts.sourceMapUrl,
opts.dev
);
};
Server.prototype.buildPackageFromUrl = function(reqUrl) {
var options = getOptionsFromUrl(reqUrl);
return this._buildPackage(options);
return this.buildPackage(options);
};
Server.prototype.getDependencies = function(main) {
@@ -321,7 +350,7 @@ Server.prototype.processRequest = function(req, res, next) {
var startReqEventId = Activity.startEvent('request:' + req.url);
var options = getOptionsFromUrl(req.url);
var building = this._packages[req.url] || this._buildPackage(options);
var building = this._packages[req.url] || this.buildPackage(options);
this._packages[req.url] = building;
building.then(
@@ -363,7 +392,7 @@ function getOptionsFromUrl(reqUrl) {
return {
sourceMapUrl: pathname.replace(/\.bundle$/, '.map'),
main: entryFile,
entryFile: entryFile,
dev: getBoolOptionFromQuery(urlObj.query, 'dev', true),
minify: getBoolOptionFromQuery(urlObj.query, 'minify'),
runModule: getBoolOptionFromQuery(urlObj.query, 'runModule', true),