diff --git a/lib/index.mjs b/lib/index.mjs new file mode 100644 index 0000000..74e7082 --- /dev/null +++ b/lib/index.mjs @@ -0,0 +1,12 @@ +export { default as AsyncParallelBailHook } from "./AsyncParallelBailHook.js"; +export { default as AsyncParallelHook } from "./AsyncParallelHook.js"; +export { default as AsyncSeriesBailHook } from "./AsyncSeriesBailHook.js"; +export { default as AsyncSeriesHook } from "./AsyncSeriesHook.js"; +export { default as AsyncSeriesLoopHook } from "./AsyncSeriesLoopHook.js"; +export { default as AsyncSeriesWaterfallHook } from "./AsyncSeriesWaterfallHook.js"; +export { default as HookMap } from "./HookMap.js"; +export { default as MultiHook } from "./MultiHook.js"; +export { default as SyncBailHook } from "./SyncBailHook.js"; +export { default as SyncHook } from "./SyncHook.js"; +export { default as SyncLoopHook } from "./SyncLoopHook.js"; +export { default as SyncWaterfallHook } from "./SyncWaterfallHook.js"; diff --git a/package.json b/package.json index 2945b89..a5101e0 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,13 @@ "license": "MIT", "author": "Tobias Koppers @sokra", "main": "lib/index.js", + "exports": { + ".": { + "import": "./lib/index.mjs", + "require": "./lib/index.js", + "types": "./tapable.d.ts" + } + }, "browser": { "util": "./lib/util-browser.js" }, diff --git a/test/DualPackage.test.js b/test/DualPackage.test.js new file mode 100644 index 0000000..f52634d --- /dev/null +++ b/test/DualPackage.test.js @@ -0,0 +1,28 @@ +const { SyncHook } = require("../lib/index.js"); + +describe("Dual Module Package", () => { + it("should support ESM import via .mjs entry", () => { + const hook = new SyncHook(["value"]); + const calls = []; + hook.tap("A", (v) => calls.push(v)); + hook.call(42); + expect(calls).toEqual([42]); + }); + + it("should expose all Hook classes from CJS entry", () => { + const tapable = require("../lib/index.js"); + expect(tapable.SyncHook).toBeDefined(); + expect(tapable.SyncBailHook).toBeDefined(); + expect(tapable.SyncWaterfallHook).toBeDefined(); + expect(tapable.SyncLoopHook).toBeDefined(); + expect(tapable.AsyncParallelHook).toBeDefined(); + expect(tapable.AsyncParallelBailHook).toBeDefined(); + expect(tapable.AsyncSeriesHook).toBeDefined(); + expect(tapable.AsyncSeriesBailHook).toBeDefined(); + expect(tapable.AsyncSeriesWaterfallHook).toBeDefined(); + expect(tapable.AsyncSeriesLoopHook).toBeDefined(); + expect(tapable.HookMap).toBeDefined(); + expect(tapable.MultiHook).toBeDefined(); + expect(tapable.__esModule).toBe(true); + }); +});