Manipulate the AST to transform your code.
npm i unplugin-ast
// vite.config.ts import AST from 'unplugin-ast/vite' export default defineConfig({ plugins: [AST()], })
// rollup.config.js import AST from 'unplugin-ast/rollup' export default { plugins: [AST()], }
// esbuild.config.js import { build } from 'esbuild' build({ plugins: [require('unplugin-ast/esbuild')()], })
// webpack.config.js module.exports = { /* ... */ plugins: [require('unplugin-ast/webpack')()], }
The following show the default values of the configuration
AST({ // filters for transforming targets include: [/\.[jt]sx?$/], exclude: undefined, // Rollup and esbuild do not support using enforce to control the order of plugins. Users need to maintain the order manually. enforce: undefined, // https://babeljs.io/docs/en/babel-parser#options parserOptions: {}, // Refer to Custom Transformers belows transformer: [], })
import { RemoveWrapperFunction } from 'unplugin-ast/transformers' /** * Removes wrapper function. e.g `defineComponent`, `defineConfig`... * @param functionNames - function names to remove * * @example defineComponent() * @example tw`text-red-500 ${expr}` */ declare const RemoveWrapperFunction: ( functionNames: Arrayable<string>, ) => Transformer<CallExpression>
Transforms:
export default defineConfig(config)
To:
export default config
import type { CallExpression } from '@babel/types' import type { Transformer } from 'unplugin-ast' export const RemoveWrapperFunction = ( functionNames: string[], ): Transformer<CallExpression> => ({ onNode: (node) => node.type === 'CallExpression' && node.callee.type === 'Identifier' && functionNames.includes(node.callee.name), transform(node) { return node.arguments[0] }, })