- fix: ship
dist/multihook.d.ts.dist/interop/tapable-interop.d.tsre-exportsMultiHookfrom../multihook, and 0.2.0 excluded that declaration from the build, so a consumer typechecking withoutskipLibCheckgotTS2307: Cannot find module '../multihook'. The runtime was never affected:Interop.MultiHookhas been in the bundle throughout - fix: the declarations typecheck under TypeScript's
nodenextresolution. Relative imports insrchad no file extension, so every shipped.d.tsfailed with TS2834 and the entry point exported nothing to anodenextconsumer. 0.1.2 was unaffected because its declarations were rolled into one file; 0.2.0 introduced it - test: every relative import in a shipped declaration must carry an extension and resolve to a shipped file
- docs: the readme said
Multihookis not exported. It is, asInterop.MultiHook - docs: say what declines. Only
undefineddoes:bailtreatsnullas an answer, andwaterfalltreatsnulland''as values - task: the author and copyright holder are Steven Spungin, in
package.json,license.txtand the licence header of every shipped file. Thetwelvetonekeyword is removed. The licence is still MIT
- breaking:
bailnow runs in series for async hooks, matching the syncbail, the readme, and tapable'sAsyncSeriesBailHook. It previously raced every tap throughPromise.any - feat: add the
racetopology: every tap starts, the first to resolve wins. This is the behaviour the asyncbailused to have, and it matches tapable'sAsyncParallelBailHook - feat: expose
Interop.AsyncParallelBailHook, which had no equivalent before - fix:
bailreturns the value that caused it to bail. It short-circuited correctly but discarded the value, socallansweredundefinedwhether a tap answered or none did - fix:
waterfallpasses the accumulated value through a tap that returns nothing, matching tapable. A silent tap previously handed the literalundefinedto the next tap - fix:
vite buildcompletes.rollupTypesaborted it on "Unable to follow symbol for Partial", before the UMD pass, sodist/index.umd.cjswas never emitted - test: three tests asserted the old behaviour rather than the contract; corrected, with notes. Verified against tapable 2.3.3 directly
- fix:
raceno longer logs an error when no tap answers.Promise.anyrejects once every tap has rejected, and a tap returningundefinedis rejected internally, so the normal "nobody answered" outcome arrived as an AggregateError and was logged. A real exception in a tap is still reported - fix: the type documentation had the second and third template parameters the wrong way round. The
signature is PARAMS, TAPDATA, CONTEXT; the comment said context was second, and
context.spec.tswas written from the comment. Nothing caught it because the tests were never typechecked - task: bump vite to ^5.4.21 and vitest to ^1.6.1 within their majors, clearing 13 of 17 advisories including one critical. Both are devDependencies; this package has no runtime dependencies at all, so none of them ever reached a consumer. The remaining four need vite 6.4.2+ and vitest 3.2.6+
- task: tests no longer print. Four
vi.spyOn(console, 'error')calls recorded the call but had no mock implementation, so they called through and every deliberately provoked exception was printed - fix:
samples/example.cjsruns. It had top-levelawaitin a CommonJS file, sonode samples/example.cjsthrew a SyntaxError, including in the published 0.1.2. Its test had imported the file through vitest, which transforms it and supports top-level await, so the test environment was not the user's and could not see the defect. The test now runs it under plain node - fix: stop shipping
dist/hookmap.d.tsanddist/multihook.d.ts. Neither module is exported from the entry point and neither is in the bundle, so those declarations described an API with no runtime behind it. The readme's feature table now says so rather than claiming both are available - feat: ship
src,testand sourcemaps. The library build mangles identifiers and strips comments, sodist/index.jswas unreadable (every function a single letter), and a consumer's stack trace pointed into it with no way back. There is nothing in this package worth withholding, and the cost is a tarball of 53 kB instead of 17 kB. The tests ship for the same reason: they are the evidence for what this package claims, including its conformance against tapable 2.3.3 - fix: sourcemaps are excluded from the licence-header step. A
.mapis JSON, and prepending a comment block to it makes it invalid, so every debugger would have silently fallen back to the mangled bundle - feat: add an
exportsmap.requirenow resolves to the UMD build, so CommonJS consumers work on Node below 22.12, whererequireof an ES module fails outright. Deep paths underdist/still resolve, so nothing that reached for the UMD build by hand breaks
- task: Upgrade dependencies
- breaking: Change parameter order of TAPDATA and CONTEXT
- fix: Fix typo in function name
- docs: Update docs
- fix: Fix types
- task: Rollup types
- task: Add dts plugin
- task: Upgrade dependencies
- docs: Update readme
- task: Upgrade dependencies
- docs: Update readme
- fix: restore prepack
- docs: Update readme
- fix: disable prepack
- docs: Update readme
- fix: Update types
- task: Update vitest, vitenode
- fix: Fix interop types
- docs: Update readme
- docs: Update examples
- task: Refactor types
- docs: Update parameter, usage, and error handling
- task: Update docs
- fix: Remove console.log
- docs: Add usage overview
- docs: Add more interop info
- task: Publish initial project
- task: Monkeypatch Tapable unit tests
- feat: Add Tapable interop
- task: Publish initial project shell