{"id":26947,"library":"esbuild-plugin-transform-hook","title":"esbuild-plugin-transform-hook","description":"Esbuild plugin (v0.2.3, 2024) that allows applying custom transformation hooks to build outputs or dependencies, not just sources. Solves gaps in esbuild's native support for polyfill injection, dynamic banners, and importable helpers. Compared to alternatives (e.g., onEnd hooks or manual post-processing), it provides a declarative hook-based API with pattern matching and rename support. Requires esbuild >=0.19.0. Ships TypeScript types. Note: still in PoC status; API may change.","status":"active","version":"0.2.3","language":"javascript","source_language":"en","source_url":"https://github.com/antongolub/misc","tags":["javascript","esbuild","plugin","transform","hook","typescript"],"install":[{"cmd":"npm install esbuild-plugin-transform-hook","lang":"bash","label":"npm"},{"cmd":"yarn add esbuild-plugin-transform-hook","lang":"bash","label":"yarn"},{"cmd":"pnpm add esbuild-plugin-transform-hook","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"peer dependency: plugin works as an esbuild plugin and requires esbuild >=0.19.0","package":"esbuild","optional":false}],"imports":[{"note":"ESM-only; CJS require() will not work if package is ESM-only.","wrong":"const { transformHookPlugin } = require('esbuild-plugin-transform-hook')","symbol":"transformHookPlugin","correct":"import { transformHookPlugin } from 'esbuild-plugin-transform-hook'"},{"note":"Default export also available; prefer named import for clarity.","wrong":"const transformHookPlugin = require('esbuild-plugin-transform-hook')","symbol":"default","correct":"import transformHookPlugin from 'esbuild-plugin-transform-hook'"},{"note":"This is a TypeScript type; use `import type` to avoid runtime issues.","wrong":"import { TransformHookOptions } from 'esbuild-plugin-transform-hook'","symbol":"TransformHookOptions","correct":"import type { TransformHookOptions } from 'esbuild-plugin-transform-hook'"}],"quickstart":{"code":"import { build } from 'esbuild'\nimport { transformHookPlugin } from 'esbuild-plugin-transform-hook'\n\nconst plugin = transformHookPlugin({\n  hooks: [\n    {\n      on: 'load',\n      pattern: /\\.ts$/,\n      transform: (source) => {\n        return source.replace(/console\\.log/g, 'console.error')\n      },\n      rename: (path) => {\n        return path.replace(/\\.ts$/, '.js')\n      }\n    }\n  ],\n  pattern: /^(?!.*\\.html$)/,\n})\n\nawait build({\n  entryPoints: ['index.ts'],\n  outdir: 'dist',\n  plugins: [plugin],\n  format: 'esm',\n})\nconsole.log('Build complete')","lang":"typescript","description":"Shows how to use the plugin to replace console.log with console.error in TypeScript files during the load phase."},"warnings":[{"fix":"Pin to exact version in package.json and test upgrades carefully.","message":"The plugin is marked as PoC (Proof of Concept). API may change in future versions without major semver bump.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Upgrade esbuild to >=0.19.0.","message":"Requires esbuild >=0.19.0. Older esbuild versions (pre-0.19) are not supported and will cause runtime errors.","severity":"breaking","affected_versions":">=0.2.0"},{"fix":"Stick to 'load' or 'end' until documentation states otherwise.","message":"The 'on' property currently only accepts 'load' or 'end'. Other values may be silently ignored or cause errors in future versions.","severity":"deprecated","affected_versions":"<=0.2.3"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Install with `npm install esbuild-plugin-transform-hook` and use `import` instead of `require`.","cause":"Package not installed or used with require() in an ESM-only environment.","error":"Error: Cannot find module 'esbuild-plugin-transform-hook'"},{"fix":"Use `import { transformHookPlugin } from 'esbuild-plugin-transform-hook'` and ensure your project is configured for ESM.","cause":"Importing the wrong export (e.g., default vs named) or using a bundler that doesn't support ESM.","error":"TypeError: transformHookPlugin is not a function"},{"fix":"Run `npm install esbuild@latest` to upgrade esbuild to >=0.19.0.","cause":"Installed esbuild version is too old (<0.19.0).","error":"error: [plugin] Error: esbuild version must be >=0.19.0"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}