bigint-crypto-utils/build/rollup.config.js

200 lines
5.3 KiB
JavaScript
Raw Normal View History

'use strict'
import inject from '@rollup/plugin-inject'
import { nodeResolve as resolve } from '@rollup/plugin-node-resolve'
import replace from '@rollup/plugin-replace'
import terser from '@rollup/plugin-terser'
import typescriptPlugin from '@rollup/plugin-typescript'
import commonjs from '@rollup/plugin-commonjs'
2022-08-01 02:19:48 +00:00
import json from '@rollup/plugin-json'
2022-08-01 17:10:00 +00:00
import { dirname, join } from 'path'
import { existsSync, readFileSync } from 'fs'
// import { browser, name as _name, exports } from '../package.json' assert { type: 'json' }
2022-08-01 02:19:48 +00:00
import { compile } from './rollup-plugin-dts.js'
import * as url from 'url'
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
const rootDir = join(__dirname, '..')
const pkgJson = JSON.parse(readFileSync(join(rootDir, 'package.json')))
// const dstDir = join(rootDir, directories.dist)
const srcDir = join(rootDir, 'src', 'ts')
function camelise (str) {
return str.replace(/-([a-z])/g,
function (m, w) {
return w.toUpperCase()
})
}
2021-03-25 12:40:04 +00:00
const regex = /^(?:(?<scope>@.*?)\/)?(?<name>.*)/ // We are going to take only the package name part if there is a scope, e.g. @my-org/package-name
const { name } = pkgJson.name.match(regex).groups
2021-03-25 12:40:04 +00:00
const pkgCamelisedName = camelise(name)
const input = join(srcDir, 'index.ts')
if (existsSync(input) !== true) throw new Error('The entry point should be index.ts')
2021-03-25 12:40:04 +00:00
const tsBundleOptions = {
tsconfig: join(rootDir, 'tsconfig.json'),
2021-08-06 08:10:32 +00:00
outDir: undefined, // ignore outDir in tsconfig.json
2022-08-01 02:19:48 +00:00
include: ['src/ts/**/*', 'build/typings/is-browser.d.ts'],
exclude: ['src/**/*.spec.ts']
2021-03-25 12:40:04 +00:00
}
const sourcemapOutputOptions = {
sourcemap: 'inline',
sourcemapExcludeSources: true
}
2022-08-01 02:19:48 +00:00
function compileDts () {
return {
2022-08-01 02:19:48 +00:00
name: 'compile-dts',
2021-08-06 15:29:23 +00:00
closeBundle () {
2022-08-01 02:19:48 +00:00
compile()
}
}
}
export default [
2022-10-03 17:57:08 +00:00
{ // Browser ESM bundle
input,
2021-08-06 08:10:32 +00:00
output: [
{
file: join(rootDir, pkgJson.browser),
2021-08-06 08:10:32 +00:00
...sourcemapOutputOptions,
format: 'es'
}
],
plugins: [
replace({
IS_BROWSER: true,
_MODULE_TYPE: "'ESM'",
preventAssignment: true
}),
typescriptPlugin(tsBundleOptions),
resolve({
browser: true,
exportConditions: ['browser', 'default'],
mainFields: ['browser', 'module', 'main']
2022-08-01 02:19:48 +00:00
}),
commonjs({ extensions: ['.js', '.cjs', '.ts', '.jsx', '.cjsx', '.tsx'] }), // the ".ts" extension is required
json()
]
},
2022-08-01 02:19:48 +00:00
{ // Browser bundles
input,
output: [
2020-04-07 17:29:23 +00:00
{
file: join(rootDir, pkgJson.exports['./esm-browser-bundle-nomin']),
format: 'es'
},
{
file: join(rootDir, pkgJson.exports['./esm-browser-bundle']),
format: 'es',
plugins: [terser()]
},
{
file: join(rootDir, pkgJson.exports['./iife-browser-bundle']),
2020-04-07 22:21:02 +00:00
format: 'iife',
2022-08-01 02:19:48 +00:00
name: pkgCamelisedName,
plugins: [terser()]
2021-03-25 12:40:04 +00:00
},
{
file: join(rootDir, pkgJson.exports['./umd-browser-bundle']),
2021-03-25 12:40:04 +00:00
format: 'umd',
2022-08-01 02:19:48 +00:00
name: pkgCamelisedName,
plugins: [terser()]
}
],
plugins: [
replace({
2021-03-25 12:40:04 +00:00
IS_BROWSER: true,
_MODULE_TYPE: "'BUNDLE'",
2021-03-25 12:40:04 +00:00
preventAssignment: true
}),
typescriptPlugin({
...tsBundleOptions,
sourceMap: false
}),
resolve({
2021-03-25 12:40:04 +00:00
browser: true,
2022-08-01 02:19:48 +00:00
exportConditions: ['browser', 'default'],
mainFields: ['browser', 'module', 'main']
2020-04-07 22:21:02 +00:00
}),
2022-08-01 02:19:48 +00:00
commonjs({ extensions: ['.js', '.cjs', '.ts', '.jsx', '.cjsx', '.tsx'] }), // the ".ts" extension is required
json()
]
},
2022-08-01 02:19:48 +00:00
{ // Node CJS
input,
2022-08-01 02:19:48 +00:00
output: [
{
file: join(rootDir, pkgJson.exports['.'].node.require.default),
2022-08-01 02:19:48 +00:00
...sourcemapOutputOptions,
format: 'cjs',
exports: 'auto',
plugins: [
terser()
]
2022-08-01 02:19:48 +00:00
}
],
2020-04-07 22:21:02 +00:00
plugins: [
replace({
2022-08-01 02:19:48 +00:00
'await import(': 'require(',
delimiters: ['', ''],
2021-03-25 12:40:04 +00:00
preventAssignment: true
}),
2022-08-01 02:19:48 +00:00
replace({
IS_BROWSER: false,
_MODULE_TYPE: "'CJS'",
2022-08-01 02:19:48 +00:00
preventAssignment: true
2021-03-25 12:40:04 +00:00
}),
inject({
crypto: ['crypto', 'webcrypto']
}),
2022-08-01 02:19:48 +00:00
typescriptPlugin(tsBundleOptions),
resolve({
browser: false,
exportConditions: ['require', 'node', 'module']
}),
2022-08-01 02:19:48 +00:00
commonjs({ extensions: ['.js', '.cjs', '.ts', '.jsx', '.cjsx', '.tsx'] }), // the ".ts" extension is required
json()
]
2021-03-25 12:40:04 +00:00
},
2022-10-03 17:57:08 +00:00
{ // Node ESM and type declarations
input,
2021-08-04 10:50:36 +00:00
output: [
{
file: join(rootDir, pkgJson.exports['.'].node.import.default),
2021-08-04 10:50:36 +00:00
...sourcemapOutputOptions,
format: 'es',
plugins: [
terser()
]
2021-08-04 10:50:36 +00:00
}
],
2021-03-25 12:40:04 +00:00
plugins: [
replace({
IS_BROWSER: false,
_MODULE_TYPE: "'ESM'",
__filename: `'${pkgJson.exports['.'].node.import.default}'`,
__dirname: `'${dirname(pkgJson.exports['.'].node.import.default)}'`,
2021-03-25 12:40:04 +00:00
preventAssignment: true
}),
inject({
crypto: ['crypto', 'webcrypto']
}),
2021-03-25 12:40:04 +00:00
typescriptPlugin(tsBundleOptions),
resolve({
browser: false,
exportConditions: ['node', 'import']
}),
2022-08-01 19:53:46 +00:00
compileDts(),
2022-08-01 02:19:48 +00:00
commonjs({ extensions: ['.js', '.cjs', '.ts', '.jsx', '.cjsx', '.tsx'] }), // the ".ts" extension is required
json()
2021-08-06 08:10:32 +00:00
]
}
]