| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- 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;
- });
- };
|