-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrollup.config.js
124 lines (116 loc) · 3.5 KB
/
rollup.config.js
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import path from 'node:path'
import { readFile } from 'fs/promises'
import { createRequire } from 'node:module'
import { nodeExternals } from 'rollup-plugin-node-externals'
import { nodeResolve } from '@rollup/plugin-node-resolve'
import _commonsJs from '@rollup/plugin-commonjs'
import _replace from '@rollup/plugin-replace'
import { sucrase } from 'rollup-plugin-fast-typescript'
import _terser from '@rollup/plugin-terser'
import { defineConfig } from 'rollup'
/**
* @template T
* @param {{ default: T }} f
* @see {@link https://github.com/rollup/plugins/issues/1541#issuecomment-1837153165}
*/
const fix = (f) => /** @type {T} */(f)
const commonJs = fix(_commonsJs)
const replace = fix(_replace)
const terser = fix(_terser)
/** @type {import('#package.json')} */
const { name, version } = createRequire(import.meta.url)('#package.json')
/** @type {import('@rollup/plugin-replace').RollupReplaceOptions} */
const replacements = {
include: [ '**/index.js', '**/register.js' ],
preventAssignment: true,
sourceMap: true,
delimiters: [ '', '' ],
values: {
__TSRUN_NAME__: name.split('/')[1],
__TSRUN_VERSION__: version
}
}
export default defineConfig([
// bin/index.js
{
input: 'source/bin/index.ts',
output: {
file: 'bin/index.js',
format: 'esm',
sourcemap: true,
sourcemapExcludeSources: true,
},
plugins: [
nodeExternals(),
sucrase(),
replace(replacements)
],
external: /\/register.js$/
},
// lib/register.js, lib/esm-hooks.js
{
input: [
'source/lib/register.ts',
'source/lib/esm-hooks.ts'
],
output: {
dir: 'lib',
format: 'esm',
sourcemap: true,
sourcemapExcludeSources: true
},
plugins: [
nodeExternals(),
sucrase(),
replace(replacements),
{
name: 'emit-dst',
async generateBundle() {
this.emitFile({
type: 'asset',
fileName: 'register.d.ts',
source: await readFile('./source/lib/register.d.ts')
})
}
}
],
external: /\/transform.cjs$/
},
// lib/transform.cjs
{
input: 'source/lib/transform.cts',
output: {
file: 'lib/transform.cjs',
format: 'commonjs',
generatedCode: {
preset: 'es2015',
symbols: false
},
esModule: false,
sourcemap: false,
},
plugins: [
nodeExternals(),
nodeResolve(),
commonJs(),
sucrase(),
terser(),
// This plugin fixes https://github.com/alangpierce/sucrase/issues/825
// by replacing Sucrase's computeSourceMap.js with our own.
{
name: 'fix-sucrase',
async load(id) {
return id.endsWith('computeSourceMap.js')
? readFile(path.resolve('./source/lib/fix-sucrase/computeSourceMap.js'), 'utf-8')
: null
}
}
],
// Sucrase has MANY circular dependencies :/
onLog(level, log, handler) {
if (log.code === 'CIRCULAR_DEPENDENCY')
return
handler(level, log)
}
}
])