Move process.exit outside of DependencyResolver

Summary:
node-haste shouldn't ever call process.exit and should leave it up to clients to shut down properly. This change just moves it out into the `Resolver` class – I'll leave it up to David and Martin to improve error handling for the rn packager :)

public

Reviewed By: davidaurelio

Differential Revision: D2889908

fb-gh-sync-id: 6f03162c44d89e268891ef71c8db784a6f2e081d
This commit is contained in:
Christoph Pojer 2016-02-02 18:09:45 -08:00 committed by facebook-github-bot-4
parent f2cb2355b2
commit 6d8ccc318b
4 changed files with 21 additions and 18 deletions

View File

@ -1189,22 +1189,14 @@ describe('DependencyGraph', function() {
},
});
const _exit = process.exit;
const _error = console.error;
process.exit = jest.genMockFn();
console.error = jest.genMockFn();
var dgraph = new DependencyGraph({
...defaults,
roots: [root],
});
return dgraph.load().catch(() => {
expect(process.exit).toBeCalledWith(1);
expect(console.error).toBeCalled();
process.exit = _exit;
console.error = _error;
return dgraph.load().catch(err => {
expect(err.message).toEqual('Failed to build DependencyGraph: Naming collision detected: /root/b.js collides with /root/index.js');
expect(err.type).toEqual('DependencyGraphError');
});
});

View File

@ -22,6 +22,8 @@ const ResolutionResponse = require('./ResolutionResponse');
const HasteMap = require('./HasteMap');
const DeprecatedAssetMap = require('./DeprecatedAssetMap');
const ERROR_BUILDING_DEP_GRAPH = 'DependencyGraphError';
const defaultActivity = {
startEvent: () => {},
endEvent: () => {},
@ -63,11 +65,7 @@ class DependencyGraph {
};
this._cache = cache;
this._helpers = new DependencyGraphHelpers(this._opts);
this.load().catch((err) => {
// This only happens at initialization. Live errors are easier to recover from.
console.error('Error building DependencyGraph:\n', err.stack);
process.exit(1);
});
this.load();
}
load() {
@ -134,7 +132,14 @@ class DependencyGraph {
this._deprecatedAssetMap.build(),
]).then(() =>
activity.endEvent(depGraphActivity)
);
).catch(err => {
const error = new Error(
`Failed to build DependencyGraph: ${err.message}`
);
error.type = ERROR_BUILDING_DEP_GRAPH;
error.stack = err.stack;
throw error;
});
return this._loading;
}

View File

@ -10,7 +10,6 @@
jest.dontMock('../')
.dontMock('underscore')
.dontMock('PixelRatio')
.dontMock('../../DependencyResolver/lib/extractRequires')
.dontMock('../../DependencyResolver/lib/replacePatterns');
@ -33,6 +32,8 @@ describe('Resolver', function() {
path.join.mockImpl(function(a, b) {
return b;
});
DependencyGraph.prototype.load.mockImpl(() => Promise.resolve());
});
class ResolutionResponseMock {

View File

@ -103,6 +103,11 @@ class Resolver {
});
this._polyfillModuleNames = opts.polyfillModuleNames || [];
this._depGraph.load().catch(err => {
console.error(err.message + '\n' + err.stack);
process.exit(1);
});
}
getShallowDependencies(entryFile) {