1 | var assert = require('assert');
|
2 | var activeLoaders = {};
|
3 | var activeCompiler = null;
|
4 |
|
5 | var HappyRPCHandler = exports;
|
6 |
|
7 | HappyRPCHandler.registerActiveCompiler = function(compiler) {
|
8 | activeCompiler = compiler;
|
9 | };
|
10 |
|
11 | HappyRPCHandler.registerActiveLoader = function(id, instance) {
|
12 | activeLoaders[id] = instance;
|
13 | };
|
14 |
|
15 | HappyRPCHandler.unregisterActiveLoader = function(id) {
|
16 | delete activeLoaders[id];
|
17 | };
|
18 |
|
19 | HappyRPCHandler.execute = function(type, payload, done) {
|
20 | var loader;
|
21 |
|
22 | if (type === 'resolve') {
|
23 | assertCompilerIsActive();
|
24 |
|
25 | activeCompiler.resolvers.normal.resolve(payload.context, payload.resource, done);
|
26 | }
|
27 | else {
|
28 | assertLoaderIsActive(payload.remoteLoaderId);
|
29 | loader = activeLoaders[payload.remoteLoaderId];
|
30 |
|
31 | if (type === 'emitWarning') {
|
32 | loader.emitWarning(payload.message);
|
33 | }
|
34 | else if (type === 'emitError') {
|
35 | loader.emitError(payload.message);
|
36 | }
|
37 | else if (type === 'emitFile') {
|
38 | loader.emitFile(payload.name, payload.contents, JSON.parse(payload.sourceMap));
|
39 | }
|
40 | else if (type === 'addDependency') {
|
41 | loader.addDependency(payload.file);
|
42 | }
|
43 | else if (type === 'addContextDependency') {
|
44 | loader.addContextDependency(payload.file);
|
45 | }
|
46 | else if (type === 'clearDependencies') {
|
47 | loader.clearDependencies();
|
48 | }
|
49 | else {
|
50 | assert(false, "Unrecognized RPC '" + type + '"');
|
51 | }
|
52 |
|
53 | }
|
54 | };
|
55 |
|
56 | function assertCompilerIsActive() {
|
57 | assert(!!activeCompiler,
|
58 | "A compiler RPC was dispatched, but no compiler instance was registered!"
|
59 | );
|
60 | }
|
61 |
|
62 | function assertLoaderIsActive(id) {
|
63 | assert(activeLoaders.hasOwnProperty(id),
|
64 | "A loader RPC was dispatched to HappyLoader[" + id + "] but no such loader is active!"
|
65 | );
|
66 | }
|
67 |
|
68 | module.exports = HappyRPCHandler;
|