diff --git a/src/WorkerPool.js b/src/WorkerPool.js index f7faacb..d45769f 100644 --- a/src/WorkerPool.js +++ b/src/WorkerPool.js @@ -188,6 +188,29 @@ class PoolWorker { }); break; } + case 'loadModule': { + const { request, questionId } = message; + const { data } = this.jobs[id]; + data.loadModule(request, (error, source, sourceMap, module) => { + this.writeJson({ + type: 'result', + id: questionId, + error: error ? { + message: error.message, + details: error.details, + missing: error.missing, + } : null, + result: [ + source, + sourceMap, + // TODO: Serialize module? + // module, + ], + }); + }); + finalCallback(); + break; + } case 'resolve': { const { context, request, questionId } = message; const { data } = this.jobs[id]; diff --git a/src/index.js b/src/index.js index a4140ed..cecf2c3 100644 --- a/src/index.js +++ b/src/index.js @@ -20,6 +20,7 @@ function pitch() { sourceMap: this.sourceMap, emitError: this.emitError, emitWarning: this.emitWarning, + loadModule: this.loadModule, resolve: this.resolve, target: this.target, minimize: this.minimize, diff --git a/src/worker.js b/src/worker.js index 1ab4934..e8fd3ba 100644 --- a/src/worker.js +++ b/src/worker.js @@ -107,6 +107,17 @@ const queue = asyncQueue(({ id, data }, taskCallback) => { readResource: fs.readFile.bind(fs), context: { version: 2, + fs, + loadModule: (request, callback) => { + callbackMap[nextQuestionId] = (error, result) => callback(error, ...result); + writeJson({ + type: 'loadModule', + id, + questionId: nextQuestionId, + request, + }); + nextQuestionId += 1; + }, resolve: (context, request, callback) => { callbackMap[nextQuestionId] = callback; writeJson({