solana/web3.js/rollup.config.js

161 lines
4.0 KiB
JavaScript
Raw Normal View History

import babel from '@rollup/plugin-babel';
import commonjs from '@rollup/plugin-commonjs';
import copy from 'rollup-plugin-copy';
import flowRemoveTypes from 'flow-remove-types';
import json from '@rollup/plugin-json';
import nodeResolve from '@rollup/plugin-node-resolve';
import nodePolyfills from 'rollup-plugin-node-polyfills';
import replace from '@rollup/plugin-replace';
import {terser} from 'rollup-plugin-terser';
const env = process.env.NODE_ENV;
function generateConfig(configType, format) {
const browser = configType === 'browser';
const bundle = format === 'iife';
2018-08-22 21:43:32 -07:00
const config = {
input: 'src/index.js',
plugins: [
flow(),
commonjs(),
nodeResolve({browser, preferBuiltins: !browser, dedupe: ['bn.js']}),
2018-08-22 21:43:32 -07:00
babel({
exclude: '**/node_modules/**',
babelHelpers: bundle ? 'bundled' : 'runtime',
plugins: bundle ? [] : ['@babel/plugin-transform-runtime'],
2018-08-22 21:43:32 -07:00
}),
replace({
'process.env.NODE_ENV': JSON.stringify(env),
'process.env.BROWSER': JSON.stringify(browser),
2018-08-22 21:43:32 -07:00
}),
copy({
targets: [{src: 'module.d.ts', dest: 'lib', rename: 'index.d.ts'}],
}),
2018-08-22 21:43:32 -07:00
],
onwarn: function (warning, rollupWarn) {
if (warning.code !== 'CIRCULAR_DEPENDENCY') {
rollupWarn(warning);
}
},
treeshake: {
moduleSideEffects: false,
},
2018-08-22 21:43:32 -07:00
};
2018-08-22 21:43:32 -07:00
switch (configType) {
2018-11-04 11:41:21 -08:00
case 'browser':
switch (format) {
case 'esm': {
config.output = [
{
file: 'lib/index.browser.esm.js',
format: 'es',
sourcemap: true,
},
];
// Prevent dependencies from being bundled
config.external = [
/@babel\/runtime/,
'bn.js',
// Bundled for `Buffer` consistency
// 'bs58',
// 'buffer',
// 'buffer-layout',
'crypto-hash',
'jayson/lib/client/browser',
'js-sha3',
'node-fetch',
'rpc-websockets',
'secp256k1',
'superstruct',
'tweetnacl',
];
break;
}
case 'iife': {
config.output = [
{
file: 'lib/index.iife.js',
format: 'iife',
name: 'solanaWeb3',
sourcemap: true,
},
{
file: 'lib/index.iife.min.js',
format: 'iife',
name: 'solanaWeb3',
sourcemap: true,
plugins: [terser({mangle: false, compress: false})],
},
];
break;
}
default:
throw new Error(`Unknown format: ${format}`);
}
// TODO: Find a workaround to avoid resolving the following JSON file:
// `node_modules/secp256k1/node_modules/elliptic/package.json`
config.plugins.push(json());
config.plugins.push(nodePolyfills());
2018-11-04 11:41:21 -08:00
break;
case 'node':
config.output = [
{
file: 'lib/index.cjs.js',
format: 'cjs',
2018-12-02 10:17:15 -08:00
sourcemap: true,
2018-11-04 11:41:21 -08:00
},
{
file: 'lib/index.esm.js',
format: 'es',
2018-12-02 10:17:15 -08:00
sourcemap: true,
2018-11-04 11:41:21 -08:00
},
];
2018-08-24 08:22:54 -07:00
// Prevent dependencies from being bundled
2018-11-04 11:41:21 -08:00
config.external = [
/@babel\/runtime/,
2018-11-04 11:41:21 -08:00
'bn.js',
'bs58',
'buffer-layout',
2020-03-16 02:44:12 -07:00
'crypto-hash',
2018-11-04 11:41:21 -08:00
'jayson/lib/client/browser',
'js-sha3',
2018-11-04 11:41:21 -08:00
'node-fetch',
'rpc-websockets',
'secp256k1',
2018-11-04 11:41:21 -08:00
'superstruct',
'tweetnacl',
];
break;
default:
throw new Error(`Unknown configType: ${configType}`);
2018-08-22 21:43:32 -07:00
}
return config;
}
export default [
generateConfig('node'),
generateConfig('browser', 'esm'),
generateConfig('browser', 'iife'),
];
// Using this instead of rollup-plugin-flow due to
// https://github.com/leebyron/rollup-plugin-flow/issues/5
function flow() {
return {
name: 'flow-remove-types',
transform: code => ({
code: flowRemoveTypes(code).toString(),
map: null,
}),
};
}