Skip to content

Commit

Permalink
feat: add rsdoctor native plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
LingyuCoder committed Jan 9, 2025
1 parent 8454d2a commit 0952f55
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 0 deletions.
70 changes: 70 additions & 0 deletions packages/rspack/src/builtin-plugin/RsdoctorPlugin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import { BuiltinPluginName, JsRsdoctorAsset, JsRsdoctorChunkGraph, JsRsdoctorModuleGraph, JsRsdoctorModuleSource, RawRsdoctorPluginOptions } from "@rspack/binding";
import { z } from "zod";
import { create } from "./base";
import { validate } from "../util/validate";
import { Compiler } from "../Compiler";
import * as liteTapable from "@rspack/lite-tapable";
import { Compilation } from "../Compilation";

export type RsdoctorRspackPluginOptions = {};
const rsdoctorPluginSchema = z.strictObject({}) satisfies z.ZodType<RsdoctorRspackPluginOptions>;

const RsdoctorRspackPluginImpl = create(
BuiltinPluginName.HtmlRspackPlugin,
function (
this: Compiler,
c: RsdoctorRspackPluginOptions = {}
): RawRsdoctorPluginOptions {
validate(c, rsdoctorPluginSchema);
return {};
}
);

export type RsdoctorRspackPluginHooks = {
moduleGraph: liteTapable.AsyncSeriesBailHook<
[JsRsdoctorModuleGraph], false | void
>;
chunkGraph: liteTapable.AsyncSeriesBailHook<
[JsRsdoctorChunkGraph], false | void
>;
moduleSources: liteTapable.AsyncSeriesBailHook<
[JsRsdoctorModuleSource[]], false | void
>;
assets: liteTapable.AsyncSeriesBailHook<
[JsRsdoctorAsset[]], false | void
>;
};

const compilationHooksMap: WeakMap<Compilation, RsdoctorRspackPluginHooks> =
new WeakMap();

const RsdoctorRspackPlugin = RsdoctorRspackPluginImpl as typeof RsdoctorRspackPluginImpl & {
/**
* @deprecated Use `getCompilationHooks` instead.
*/
getHooks: (compilation: Compilation) => RsdoctorRspackPluginHooks;
getCompilationHooks: (compilation: Compilation) => RsdoctorRspackPluginHooks;
};

RsdoctorRspackPlugin.getHooks = RsdoctorRspackPlugin.getCompilationHooks = (
compilation: Compilation
) => {
if (!(compilation instanceof Compilation)) {
throw new TypeError(
"The 'compilation' argument must be an instance of Compilation"
);
}
let hooks = compilationHooksMap.get(compilation);
if (hooks === undefined) {
hooks = {
moduleGraph: new liteTapable.AsyncSeriesBailHook<[JsRsdoctorModuleGraph], false | void>(["moduleGraph"]),
chunkGraph: new liteTapable.AsyncSeriesBailHook<[JsRsdoctorChunkGraph], false | void>(["chunkGraph"]),
moduleSources: new liteTapable.AsyncSeriesBailHook<[JsRsdoctorModuleSource[]], false | void>(["moduleSources"]),
assets: new liteTapable.AsyncSeriesBailHook<[JsRsdoctorAsset[]], false | void>(["assets"]),
};
compilationHooksMap.set(compilation, hooks);
}
return hooks;
};

export { RsdoctorRspackPlugin };
1 change: 1 addition & 0 deletions packages/rspack/src/builtin-plugin/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,4 @@ export * from "./ContextReplacementPlugin";
export * from "./LibManifestPlugin";
export * from "./DllEntryPlugin";
export * from "./DllReferenceAgencyPlugin";
export * from "./RsdoctorPlugin";

0 comments on commit 0952f55

Please sign in to comment.