WXL
4 天以前 2cc85c64f1c64a2dbaeae276a3e2ca8420de76b7
node_modules/webpack/lib/debug/ProfilingPlugin.js
@@ -11,7 +11,6 @@
   JSON_MODULE_TYPE,
   WEBASSEMBLY_MODULES
} = require("../ModuleTypeConstants");
const createSchemaValidation = require("../util/create-schema-validation");
const { dirname, mkdirpSync } = require("../util/fs");
/** @typedef {import("inspector").Session} Session */
@@ -24,33 +23,28 @@
/** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
/**
 * Defines the hook type used by this module.
 * @template T, R
 * @typedef {import("tapable").Hook<T, R>} Hook
 */
/**
 * Defines the fake hook type used by this module.
 * @template T
 * @typedef {import("../util/deprecation").FakeHook<T>} FakeHook
 */
/**
 * Defines the hook map type used by this module.
 * @template T
 * @typedef {import("tapable").HookMap<T>} HookMap
 */
/**
 * Defines the hook interceptor type used by this module.
 * @template T, R
 * @typedef {import("tapable").HookInterceptor<T, R>} HookInterceptor
 */
const validate = createSchemaValidation(
   require("../../schemas/plugins/debug/ProfilingPlugin.check"),
   () => require("../../schemas/plugins/debug/ProfilingPlugin.json"),
   {
      name: "Profiling Plugin",
      baseDataPath: "options"
   }
);
/** @typedef {{ Session: typeof import("inspector").Session }} Inspector */
@@ -67,6 +61,7 @@
class Profiler {
   /**
    * Creates an instance of Profiler.
    * @param {Inspector} inspector inspector
    */
   constructor(inspector) {
@@ -107,6 +102,7 @@
   }
   /**
    * Returns promise for the result.
    * @param {string} method method name
    * @param {EXPECTED_OBJECT=} params params
    * @returns {Promise<EXPECTED_ANY | void>} Promise for the result
@@ -137,6 +133,7 @@
   }
   /**
    * Returns }>} profile result.
    * @returns {Promise<{ profile: { startTime: number, endTime: number } }>} profile result
    */
   stopProfiling() {
@@ -171,6 +168,7 @@
 */
/**
 * Creates a trace from the provided f.
 * @param {IntermediateFileSystem} fs filesystem used for output
 * @param {string} outputPath The location where to write the log.
 * @returns {Trace} The trace object
@@ -239,23 +237,37 @@
class ProfilingPlugin {
   /**
    * Creates an instance of ProfilingPlugin.
    * @param {ProfilingPluginOptions=} options options object
    */
   constructor(options = {}) {
      validate(options);
      this.outputPath = options.outputPath || "events.json";
      /** @type {ProfilingPluginOptions} */
      this.options = options;
   }
   /**
    * Apply the plugin
    * Applies the plugin by registering its hooks on the compiler.
    * @param {Compiler} compiler the compiler instance
    * @returns {void}
    */
   apply(compiler) {
      compiler.hooks.validate.tap(PLUGIN_NAME, () => {
         compiler.validate(
            () => require("../../schemas/plugins/debug/ProfilingPlugin.json"),
            this.options,
            {
               name: "Profiling Plugin",
               baseDataPath: "options"
            },
            (options) =>
               require("../../schemas/plugins/debug/ProfilingPlugin.check")(options)
         );
      });
      const tracer = createTrace(
         /** @type {IntermediateFileSystem} */
         (compiler.intermediateFileSystem),
         this.outputPath
         this.options.outputPath || "events.json"
      );
      tracer.profiler.startProfiling();
@@ -373,6 +385,7 @@
/** @typedef {Record<string, Hook<EXPECTED_ANY, EXPECTED_ANY> | FakeHook<EXPECTED_ANY> | HookMap<EXPECTED_ANY>>} Hooks */
/**
 * Intercept all hooks for.
 * @param {EXPECTED_OBJECT & { hooks?: Hooks }} instance instance
 * @param {Trace} tracer tracer
 * @param {string} logLabel log label
@@ -390,6 +403,7 @@
};
/**
 * Intercept all parser hooks.
 * @param {NormalModuleFactory} moduleFactory normal module factory
 * @param {Trace} tracer tracer
 */
@@ -411,6 +425,7 @@
};
/**
 * Intercept all generator hooks.
 * @param {NormalModuleFactory} moduleFactory normal module factory
 * @param {Trace} tracer tracer
 */
@@ -432,6 +447,7 @@
};
/**
 * Intercept all javascript modules plugin hooks.
 * @param {Compilation} compilation compilation
 * @param {Trace} tracer tracer
 */
@@ -449,6 +465,7 @@
};
/**
 * Intercept all css modules plugin hooks.
 * @param {Compilation} compilation compilation
 * @param {Trace} tracer tracer
 */
@@ -465,6 +482,7 @@
/** @typedef {(...args: EXPECTED_ANY[]) => EXPECTED_ANY | Promise<(...args: EXPECTED_ANY[]) => EXPECTED_ANY>} PluginFunction */
/**
 * Creates interceptor for.
 * @template T
 * @param {string} instance instance
 * @param {Trace} tracer tracer
@@ -472,6 +490,7 @@
 */
const makeInterceptorFor = (instance, tracer) => (hookName) => ({
   /**
    * Returns modified full tap.
    * @param {FullTap} tapInfo tap info
    * @returns {FullTap} modified full tap
    */
@@ -491,6 +510,7 @@
});
/**
 * Creates new profiled tap fn.
 * @param {string} hookName Name of the hook to profile.
 * @param {Trace} tracer The trace object.
 * @param {object} options Options for the profiled fn.
@@ -535,6 +555,7 @@
            fn(
               ...args,
               /**
                * Handles the cat callback for this hook.
                * @param {...EXPECTED_ANY[]} r result
                */
               (...r) => {
@@ -561,6 +582,7 @@
               id,
               cat: defaultCategory
            });
            /** @type {PluginFunction} */
            let r;
            try {
               r = fn(...args);