-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathtsup.config.ts
68 lines (61 loc) · 1.76 KB
/
tsup.config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import { readFile } from 'node:fs/promises'
import {
defaultBundleFormatConfig,
getBundleBanner,
getBundleExtension,
} from '@bassist/node-utils'
import { type Options, defineConfig } from 'tsup'
import pkg from './package.json'
type ESBuildPlugin = NonNullable<Options['esbuildPlugins']>[number]
const externalMapping = {
react: 'React',
'react-dom': 'ReactDOM',
} as const
const external = Object.keys(externalMapping)
const externalPlugin: ESBuildPlugin = {
name: 'external-plugin',
setup(build) {
build.onResolve(
{ filter: new RegExp(`^(${external.join('|')})$`) },
(args) => ({
path: args.path,
namespace: 'external',
}),
)
build.onLoad({ filter: /.*/, namespace: 'external' }, (args) => {
const globalVar = externalMapping[args.path]
return { contents: `module.exports=window.${globalVar};` }
})
},
}
const removePropertiesPlugin: ESBuildPlugin = {
name: 'remove-properties-plugin',
setup(build) {
build.onLoad({ filter: /\.tsx?$/ }, async (args) => {
const source = await readFile(args.path, 'utf8')
const regex = /\s*(data-testid)\s*=\s*["'][^"']*["']/g
const modifiedSource = source.replace(regex, '')
return { contents: modifiedSource, loader: 'tsx' }
})
},
}
export default defineConfig({
entry: ['src/index.ts'],
target: ['es2020'],
format: defaultBundleFormatConfig,
globalName: 'ReactTruncate',
outExtension: (ctx) => getBundleExtension(ctx),
outDir: 'dist',
dts: true,
banner: {
js: getBundleBanner(pkg),
},
bundle: true,
minify: true,
clean: true,
esbuildOptions(options) {
options.external = external
},
// https://esbuild.github.io/plugins/#using-plugins
esbuildPlugins: [externalPlugin, removePropertiesPlugin],
})