-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
rollup.config.mjs
100 lines (92 loc) · 2.43 KB
/
rollup.config.mjs
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
// @ts-check
import alias from '@rollup/plugin-alias'
import json from '@rollup/plugin-json'
import builtinModules from 'builtin-modules'
import ts from 'rollup-plugin-ts'
import pkg from './SonarJS/package.json' with { type: 'json' }
const EXTERNALS = [...builtinModules, ...Object.keys(pkg.dependencies)]
/**
* @param {string} source source file
* @returns {boolean} should source file be externalized
*/
const external = source =>
EXTERNALS.some(external => new RegExp(`^${external}(\\/?|$)`).test(source))
/**
* @param {string} content file content
* @param {import('rollup').ModuleFormat} format output format
* @param {string[]} deps dependency name list
* @returns {string} replaced content
*/
const removeUnusedDeps = (content, format, ...deps) => {
for (const dep of deps) {
content = content.replace(
format === 'cjs' ? `require('${dep}');\n` : `import '${dep}';\n`,
'',
)
}
return content
}
/**
*
* @param { import('rollup').ModuleFormat } format
* @returns {string} filename
*/
const getFilename = format => `index.${format === 'cjs' ? 'cjs' : 'js'}`
/**
* @type { import('rollup').RollupOptions[] }
*/
const configs = /** @type {const} */ (['cjs', 'esm']).map(format => ({
input: 'eslint-plugin-sonar/src/index.ts',
plugins: [
alias({
entries: [
{
find: /\b(css|postcss|stylelint|yaml)\b/,
replacement: '',
},
],
}),
json(),
ts({
transpileOnly: true,
tsconfig(resolvedConfig) {
const declaration = format === 'esm'
return {
...resolvedConfig,
declaration,
declarationMap: false,
}
},
}),
{
name: 'change-bundle-code',
generateBundle(_options, bundle) {
const chunk = bundle[getFilename(format)]
if (chunk && 'code' in chunk) {
chunk.code = removeUnusedDeps(
chunk.code,
format,
'fs/promises',
'errors',
'eslint-plugin-import',
'lodash.clone',
'process',
'util',
'vue-eslint-parser',
'@typescript-eslint/parser',
).replaceAll(
/(["'])(eslint-plugin-(?:jsx-a11y|sonarjs)\/[^"']+)\1/g,
'$1$2.js$1',
)
}
},
},
],
output: {
format,
sourcemap: true,
file: `eslint-plugin-sonar/lib/${getFilename(format)}`,
},
external,
}))
export default configs