123 lines
3.2 KiB
JavaScript
123 lines
3.2 KiB
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;
|