You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.7 KiB
JavaScript
63 lines
1.7 KiB
JavaScript
|
6 years ago
|
const path = require("path");
|
||
|
|
const fs = require("fs");
|
||
|
|
const { hackWrapLoaders } = require("./utils");
|
||
|
|
|
||
|
|
let id = 0;
|
||
|
|
|
||
|
|
const NS = path.dirname(fs.realpathSync(__filename));
|
||
|
|
|
||
|
|
const getLoaderName = path => {
|
||
|
|
const nodeModuleName = /\/node_modules\/([^\/]+)/.exec(path);
|
||
|
|
return (nodeModuleName && nodeModuleName[1]) || "";
|
||
|
|
};
|
||
|
|
|
||
|
|
module.exports.pitch = function() {
|
||
|
|
const callback = this[NS];
|
||
|
|
const module = this.resourcePath;
|
||
|
|
const loaderPaths = this.loaders
|
||
|
|
.map(l => l.path)
|
||
|
|
.filter(l => !l.includes("speed-measure-webpack-plugin"));
|
||
|
|
|
||
|
|
// Hack ourselves to overwrite the `require` method so we can override the
|
||
|
|
// loadLoaders
|
||
|
|
hackWrapLoaders(loaderPaths, (loader, path) => {
|
||
|
|
const loaderName = getLoaderName(path);
|
||
|
|
const wrapFunc = func =>
|
||
|
|
function() {
|
||
|
|
const loaderId = id++;
|
||
|
|
const almostThis = Object.assign({}, this, {
|
||
|
|
async: function() {
|
||
|
|
const asyncCallback = this.async.apply(this, arguments);
|
||
|
|
|
||
|
|
return function() {
|
||
|
|
callback({
|
||
|
|
id: loaderId,
|
||
|
|
type: "end",
|
||
|
|
});
|
||
|
|
return asyncCallback.apply(this, arguments);
|
||
|
|
};
|
||
|
|
}.bind(this)
|
||
|
|
});
|
||
|
|
|
||
|
|
callback({
|
||
|
|
module,
|
||
|
|
loaderName,
|
||
|
|
id: loaderId,
|
||
|
|
type: "start",
|
||
|
|
});
|
||
|
|
const ret = func.apply(almostThis, arguments);
|
||
|
|
callback({
|
||
|
|
id: loaderId,
|
||
|
|
type: "end",
|
||
|
|
});
|
||
|
|
return ret;
|
||
|
|
};
|
||
|
|
|
||
|
|
if (loader.normal) loader.normal = wrapFunc(loader.normal);
|
||
|
|
if (loader.default) loader.default = wrapFunc(loader.default);
|
||
|
|
if (loader.pitch) loader.pitch = wrapFunc(loader.pitch);
|
||
|
|
if (typeof loader === "function") return wrapFunc(loader);
|
||
|
|
return loader;
|
||
|
|
});
|
||
|
|
};
|