{"_id":"@ariesclark/unplugin-macros","name":"@ariesclark/unplugin-macros","dist-tags":{"latest":"0.20.3"},"versions":{"0.20.3":{"name":"@ariesclark/unplugin-macros","type":"module","version":"0.20.3","packageManager":"pnpm@11.13.0","description":"Macros for bundlers.","author":{"name":"Kevin Deng","email":"sxzz@sxzz.moe"},"license":"MIT","funding":"https://github.com/sponsors/sxzz","homepage":"https://github.com/ariesclark/unplugin-macros#readme","repository":{"type":"git","url":"git+https://github.com/ariesclark/unplugin-macros.git"},"bugs":{"url":"https://github.com/ariesclark/unplugin-macros/issues"},"keywords":["unplugin","rollup","vite","esbuild","webpack"],"exports":{".":"./dist/index.mjs","./api":"./dist/api.mjs","./esbuild":"./dist/esbuild.mjs","./rolldown":"./dist/rolldown.mjs","./rollup":"./dist/rollup.mjs","./rspack":"./dist/rspack.mjs","./vite":"./dist/vite.mjs","./webpack":"./dist/webpack.mjs","./package.json":"./package.json"},"publishConfig":{"access":"public"},"engines":{"node":"^22.18.0 || >=24.11.0"},"scripts":{"lint":"eslint .","lint:fix":"pnpm run lint --fix","build":"tsdown","dev":"tsdown --watch","test":"vitest","typecheck":"tsgo --noEmit","format":"prettier --cache --write .","release":"bumpp","prepublishOnly":"pnpm run build"},"dependencies":{"@babel/types":"^8.0.0","ast-kit":"^3.0.0","magic-string-ast":"^2.0.0","rolldown-string":"^0.3.0","unplugin":"^3.0.0","vite":"^8.0.12","vite-node":"^6.0.0"},"devDependencies":{"@babel/eslint-parser":"^8.0.0","@sxzz/eslint-config":"^8.2.1","@sxzz/prettier-config":"^2.3.1","@sxzz/test-utils":"^0.5.18","@types/dedent":"^0.7.2","@types/node":"^25.9.3","@typescript/native-preview":"7.0.0-dev.20260707.2","bumpp":"^11.1.0","dedent":"^1.7.2","eslint":"^10.5.0","prettier":"^3.8.4","rollup":"^4.62.0","tsdown":"^0.22.2","tsdown-preset-sxzz":"^0.6.0","typescript":"^6.0.3","vitest":"^4.1.9","vue":"^3.5.38"},"prettier":"@sxzz/prettier-config","gitHead":"1395b5545c23ec12e96cd84d898170214c4ad2e5","_id":"@ariesclark/unplugin-macros@0.20.3","_nodeVersion":"24.18.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-DyoqTASSKuR1lRtev+X0bIrtJ6TApoxJ4t5tCqpavugU9l62TbNbdYNWaUT+YBODEW06K5L/uFi8ZuuZPJmeBA==","shasum":"c42a8ae76ede1c5c6c3dce5f22f64651ac7ea1e2","tarball":"https://registry.npmjs.org/@ariesclark/unplugin-macros/-/unplugin-macros-0.20.3.tgz","fileCount":21,"unpackedSize":29661,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGCUsXrkOc+6qDSpgkGOSOS0QfF+WtJBqyTBo//mj3MKAiEAs4YK9onS2eqGD5SNzvbrPbSvb7AfMRzTSeaFcDoyrEQ="}]},"_npmUser":{"name":"ariesclark","email":"me@ariesclark.com"},"directories":{},"maintainers":[{"name":"ariesclark","email":"me@ariesclark.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/unplugin-macros_0.20.3_1784517343380_0.861612479671646"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-20T03:15:43.274Z","0.20.3":"2026-07-20T03:15:43.553Z","modified":"2026-07-20T03:15:43.745Z"},"maintainers":[{"name":"ariesclark","email":"me@ariesclark.com"}],"description":"Macros for bundlers.","homepage":"https://github.com/ariesclark/unplugin-macros#readme","keywords":["unplugin","rollup","vite","esbuild","webpack"],"repository":{"type":"git","url":"git+https://github.com/ariesclark/unplugin-macros.git"},"author":{"name":"Kevin Deng","email":"sxzz@sxzz.moe"},"bugs":{"url":"https://github.com/ariesclark/unplugin-macros/issues"},"license":"MIT","readme":"# unplugin-macros\n\n[![npm version][npm-version-src]][npm-version-href]\n[![npm downloads][npm-downloads-src]][npm-downloads-href]\n[![JSR][jsr-src]][jsr-href]\n[![Unit Test][unit-test-src]][unit-test-href]\n\n> Macros are a mechanism for running JavaScript functions at bundle-time.\n> The value returned from these functions or variables are directly inlined into your bundle.\n\n## Installation\n\n```bash\n# npm\nnpm i -D unplugin-macros\n\n# jsr\nnpx jsr add -D @unplugin/macros\n```\n\n<details>\n<summary>Vite</summary><br>\n\n```ts\n// vite.config.ts\nimport Macros from 'unplugin-macros/vite'\n\nexport default defineConfig({\n  plugins: [Macros()],\n})\n```\n\n<br></details>\n\n<details>\n<summary>Rollup</summary><br>\n\n```ts\n// rollup.config.js\nimport Macros from 'unplugin-macros/rollup'\n\nexport default {\n  plugins: [Macros()],\n}\n```\n\n<br></details>\n\n<details>\n<summary>esbuild</summary><br>\n\nRequires esbuild >= 0.15\n\n```ts\n// esbuild.config.js\nimport { build } from 'esbuild'\n\nbuild({\n  plugins: [require('unplugin-macros/esbuild')()],\n})\n```\n\n<br></details>\n\n<details>\n<summary>Webpack</summary><br>\n\n```ts\n// webpack.config.js\nmodule.exports = {\n  /* ... */\n  plugins: [require('unplugin-macros/webpack')()],\n}\n```\n\n<br></details>\n\n## Usage\n\n```js\n// main.js\nimport { buildTime, getRandom } from './macros' with { type: 'macro' }\n\ngetRandom() // Will be replaced with a random number at build time\nbuildTime // Will be replaced with the timestamp at the build time\n```\n\n```js\n// macros.js\nexport function getRandom() {\n  return Math.random()\n}\nexport const buildTime = Date.now()\n```\n\n### Function Arguments\n\nYou can pass function values as arguments to macros. Functions must be isolated (no references to outside identifiers):\n\n```js\n// main.js\nimport { transform } from './macros' with { type: 'macro' }\n\ntransform(() => 42)\ntransform(async () => await Promise.resolve(42))\n```\n\nSee more in [Bun Macros](https://bun.sh/blog/bun-macros).\n\n### MacroContext\n\nEvery macro is invoked with a `MacroContext` as its `this`. The most useful fields are:\n\n| Field             | Description                                                                       |\n| ----------------- | --------------------------------------------------------------------------------- |\n| `id`              | Absolute path of the file being transformed.                                      |\n| `source`          | Full source code of the file.                                                     |\n| `ast.call`        | `CallExpression` AST node of this macro invocation (`await` / tagged template are unwrapped). |\n| `ast.program`     | `Program` AST of the whole file.                                                  |\n| `emitFile`        | Emit additional bundle assets.                                                    |\n| `unpluginContext` | The underlying unplugin build context — experimental, may change.                 |\n\n`ast.call` carries the standard Babel location info (`loc`, `start`, `end`), which is enough to build callsite-aware macros without paying for a runtime stack walk:\n\n```ts\n// macros.ts\nimport path from 'node:path'\nimport type { MacroContext } from 'unplugin-macros'\n\nexport function $callsite(this: MacroContext): string {\n  const { line, column } = this.ast.call.loc!.start\n  return `${path.basename(this.id)}:${line}:${column}`\n}\n```\n\n```ts\n// main.ts\nimport { $callsite } from './macros.ts' with { type: 'macro' }\n\nconsole.log($callsite()) // → 'main.ts:3:12'\n```\n\n### TypeScript\n\nImport Attributes syntax is supported in TypeScript 5.3 and above.\n\n### ESLint\n\nImport Attributes syntax is supported in ESLint v9.14.0.\n\n## Options\n\nRefer to [docs](https://jsr.io/@unplugin/macros/doc/api/~/Options).\n\n## Thanks\n\nThanks to [Bun Macros](https://bun.sh/blog/bun-macros).\n\n## Sponsors\n\n<p align=\"center\">\n  <a href=\"https://cdn.jsdelivr.net/gh/sxzz/sponsors/sponsors.svg\">\n    <img src='https://cdn.jsdelivr.net/gh/sxzz/sponsors/sponsors.svg'/>\n  </a>\n</p>\n\n## License\n\n[MIT](./LICENSE) License © 2023-PRESENT [Kevin Deng](https://github.com/sxzz)\n\n<!-- Badges -->\n\n[npm-version-src]: https://img.shields.io/npm/v/unplugin-macros.svg\n[npm-version-href]: https://npmjs.com/package/unplugin-macros\n[npm-downloads-src]: https://img.shields.io/npm/dm/unplugin-macros\n[npm-downloads-href]: https://www.npmcharts.com/compare/unplugin-macros?interval=30\n[jsr-src]: https://jsr.io/badges/@unplugin/macros\n[jsr-href]: https://jsr.io/@unplugin/macros\n[unit-test-src]: https://github.com/unplugin/unplugin-macros/actions/workflows/unit-test.yml/badge.svg\n[unit-test-href]: https://github.com/unplugin/unplugin-macros/actions/workflows/unit-test.yml\n","readmeFilename":"README.md","_rev":"1-9646a63e80e5afad149d7a787b495cee"}