Skip to content

Instantly share code, notes, and snippets.

@pllearns
Last active August 3, 2017 22:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pllearns/5318a8ae69bbf8497c0ef6904bd9ff19 to your computer and use it in GitHub Desktop.
Save pllearns/5318a8ae69bbf8497c0ef6904bd9ff19 to your computer and use it in GitHub Desktop.
Webpack Refactors
const createInnerCallback = require("./createInnerCallback");
const DescriptionFileUtils = require("./DescriptionFileUtils");
class DescriptionFilePlugin {
constructor(source, filenames, target) {
this.source = source;
this.filenames = [].concat(filenames);
this.target = target;
}
apply(resolver) {
const filenames = this.filenames;
const target = this.target;
resolver.plugin(this.source, (request, callback) => {
const directory = request.path;
DescriptionFileUtils.loadDescriptionFile(resolver, directory, filenames, ((err, result) => {
if(err) return callback(err);
if(!result) {
if(callback.missing) {
filenames.forEach((filename) => {
callback.missing.push(resolver.join(directory, filename));
});
}
if(callback.log) callback.log("No description file found");
return callback();
}
const relativePath = "." + request.path.substr(result.directory.length).replace(/\\/g, "/");
const obj = Object.assign({}, request, {
descriptionFilePath: result.path,
descriptionFileData: result.content,
descriptionFileRoot: result.directory,
relativePath: relativePath
});
resolver.doResolve(target, obj, "using description file: " + result.path + " (relative path: " + relativePath + ")", createInnerCallback((err, result) => {
if(err) return callback(err);
if(result) return callback(null, result);
// Don't allow other description files or none at all
callback(null, null);
}, callback));
}));
});
}
}
module.exports = DescriptionFilePlugin;
const createInnerCallback = require("./createInnerCallback")
const assign = require("object-assign")
class FileExistsPlugin {
constructor(source, target) {
this.source = source
this.target = target
}
apply(resolver) {
const target = this.target
resolver.plugin((this.source, (request, callback) => {
const fs = this.fileSystem
const file = request.path
fs.stat((file, (err, stat) => {
if(err || !stat) {
if(callback.missing) callback.missing.push(file)
if(callback.log) callback.log(file + " doesn't exist")
return callback()
}
if(!stat.isFile()) {
if(callback.missing) callback.missing.push(file)
if(callback.log) callback.log(file + " is not a file")
return callback()
}
this.doResolve(target, request, "existing file: " + file, callback, true)
}).bind(this))
}))
}
}
module.exports = FileExistsPlugin
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment