happypack
Version:
webpack speed booster, makes you happy!
123 lines (97 loc) • 3.31 kB
JavaScript
var ErrorSerializer = require('./ErrorSerializer');
var resolveSyncNotSupported = NotSupported('this.resolveSync()');
var execNotSupported = NotSupported('this.exec()');
function HappyFakeLoaderContext(initialValues) {
var loader = {};
// for compiler RPCs, like this.resolve()
loader._compiler = null;
// for loader RPCs, like this.emitWarning()
loader._remoteLoaderId = null;
loader.version = 1; // https://webpack.github.io/docs/loaders.html#version
loader.webpack = false;
loader.request = null;
loader.query = null;
loader.context = null;
loader.resource = null;
loader.resourcePath = null;
loader.resourceQuery = null;
loader.data = {};
loader.loaders = [{}];
loader.loaderIndex = 0;
loader.options = null; // TODO: we should read this from compiler options
loader.result = null;
loader.sourceMap = false;
loader.fs = null;
loader.target = 'web';
loader.minimize = undefined; // keep it as undefined by default just like without happypack, to make sure there is no accident...
// TODO
loader.cacheable = function() {};
loader.callback = null; // will be defined at runtime
loader.async = null; // will be defined at runtime
loader.exec = execNotSupported;
loader.emitWarning = function(message) {
loader._compiler._sendMessage('emitWarning', {
remoteLoaderId: loader._remoteLoaderId,
message: ErrorSerializer.serialize(message)
});
};
loader.emitError = function(message) {
loader._compiler._sendMessage('emitError', {
remoteLoaderId: loader._remoteLoaderId,
message: ErrorSerializer.serialize(message)
});
};
loader.resolve = function(context, resource, done) {
loader._compiler.resolve(context, resource, done);
};
loader.resolveSync = resolveSyncNotSupported;
loader.addDependency = function(file) {
loader._compiler._sendMessage('addDependency', {
remoteLoaderId: loader._remoteLoaderId,
file: file
});
};
loader.addContextDependency = function(file) {
loader._compiler._sendMessage('addContextDependency', {
remoteLoaderId: loader._remoteLoaderId,
file: file
});
};
loader.clearDependencies = function() {
loader._compiler._sendMessage('clearDependencies', {
remoteLoaderId: loader._remoteLoaderId
});
};
loader.getDependencies = function() {
return initialValues._dependencies;
};
loader.getContextDependencies = function() {
return initialValues._contextDependencies;
};
loader.emitFile = function(name, contents, sourceMap) {
loader._compiler._sendMessage('emitFile', {
remoteLoaderId: loader._remoteLoaderId,
name: name,
contents: contents,
sourceMap: JSON.stringify(sourceMap || {})
});
};
loader.loadModule = function(resource, done) {
loader._compiler._sendMessage('loadModule', {
remoteLoaderId: loader._remoteLoaderId,
file: resource,
}, done);
};
// alias
loader.dependency = loader.addDependency;
Object.keys(initialValues || {}).forEach(function(key) {
loader[key] = initialValues[key];
});
return loader;
}
function NotSupported(fnName) {
return function() {
throw new Error('HappyPack: ' + fnName + ' is not supported for happy loaders.');
};
}
module.exports = HappyFakeLoaderContext;