happypack
Version:
webpack speed booster, makes you happy!
113 lines (89 loc) • 2.9 kB
JavaScript
var assert = require('assert');
var SourceMapSerializer = require('./SourceMapSerializer');
var SharedPtrMap = require('./SharedPtrMap');
var COMPILER_RPCs, LOADER_RPCS;
function HappyRPCHandler() {
this.activeLoaders = new SharedPtrMap();
this.activeCompilers = new SharedPtrMap();
}
HappyRPCHandler.prototype.registerActiveCompiler = function(id, compiler) {
this.activeCompilers.set(id || 'default', compiler);
};
HappyRPCHandler.prototype.isActive = function() {
return this.activeCompilers.getSize() > 0;
};
HappyRPCHandler.prototype.unregisterActiveCompiler = function(id) {
this.activeCompilers.delete(id || 'default');
};
HappyRPCHandler.prototype.registerActiveLoader = function(id, instance) {
this.activeLoaders.set(id || '1', instance);
};
HappyRPCHandler.prototype.unregisterActiveLoader = function(id) {
this.activeLoaders.delete(id || '1');
};
HappyRPCHandler.prototype.execute = function(type, payload, done) {
var compiler, loader;
if (COMPILER_RPCs.hasOwnProperty(type)) {
if (payload.compilerId) {
compiler = this.activeCompilers.get(payload.compilerId);
}
else {
compiler = this.activeCompilers.get('default');
}
assert(!!compiler,
"A compiler RPC was dispatched, but no compiler instance was registered!"
);
COMPILER_RPCs[type](compiler, payload, done);
}
else if (LOADER_RPCS.hasOwnProperty(type)) {
loader = this.activeLoaders.get(payload.remoteLoaderId);
assert(!!loader,
"A loader RPC was dispatched to HappyLoader[" + payload.remoteLoaderId +
"] but no such loader is active!"
);
LOADER_RPCS[type](loader, payload, done);
}
else {
assert(false, "Unrecognized loader RPC '" + type + '"');
}
};
COMPILER_RPCs = {
resolve: function(compiler, payload, done) {
var resolver = compiler.resolvers.normal;
var resolve = compiler.resolvers.normal.resolve;
if (resolve.length === 4) {
resolve.call(resolver, payload.context, payload.context, payload.resource, done);
}
else {
resolve.call(resolver, payload.context, payload.resource, done);
}
},
};
LOADER_RPCS = {
emitWarning: function(loader, payload) {
loader.emitWarning(payload.message);
},
emitError: function(loader, payload) {
loader.emitError(payload.message);
},
emitFile: function(loader, payload) {
loader.emitFile(
payload.name,
payload.contents,
SourceMapSerializer.deserialize(payload.sourceMap)
);
},
addDependency: function(loader, payload) {
loader.addDependency(payload.file);
},
addContextDependency: function(loader, payload) {
loader.addContextDependency(payload.file);
},
clearDependencies: function(loader) {
loader.clearDependencies();
},
loadModule: function(loader, payload, done) {
loader.loadModule(payload.file, done);
},
};
module.exports = HappyRPCHandler;