2021-02-02 10:53:24 +08:00
|
|
|
import babel from '@rollup/plugin-babel';
|
|
|
|
import commonjs from '@rollup/plugin-commonjs';
|
|
|
|
import json from '@rollup/plugin-json';
|
|
|
|
import nodeResolve from '@rollup/plugin-node-resolve';
|
|
|
|
import replace from '@rollup/plugin-replace';
|
2019-02-17 16:24:46 -08:00
|
|
|
import {terser} from 'rollup-plugin-terser';
|
2018-08-22 13:30:04 -07:00
|
|
|
|
|
|
|
const env = process.env.NODE_ENV;
|
2021-03-15 11:00:43 +08:00
|
|
|
const extensions = ['.js', '.ts'];
|
2018-08-22 13:30:04 -07:00
|
|
|
|
2021-02-02 10:53:24 +08:00
|
|
|
function generateConfig(configType, format) {
|
|
|
|
const browser = configType === 'browser';
|
|
|
|
const bundle = format === 'iife';
|
|
|
|
|
2018-08-22 21:43:32 -07:00
|
|
|
const config = {
|
2021-03-15 11:00:43 +08:00
|
|
|
input: 'src/index.ts',
|
2018-08-22 21:43:32 -07:00
|
|
|
plugins: [
|
2021-02-02 10:53:24 +08:00
|
|
|
commonjs(),
|
2021-02-06 10:59:00 +08:00
|
|
|
nodeResolve({
|
|
|
|
browser,
|
|
|
|
dedupe: ['bn.js', 'buffer'],
|
2021-03-15 11:00:43 +08:00
|
|
|
extensions,
|
|
|
|
preferBuiltins: !browser,
|
2021-02-06 10:59:00 +08:00
|
|
|
}),
|
2018-08-22 21:43:32 -07:00
|
|
|
babel({
|
|
|
|
exclude: '**/node_modules/**',
|
2021-03-15 11:00:43 +08:00
|
|
|
extensions,
|
2021-02-02 10:53:24 +08:00
|
|
|
babelHelpers: bundle ? 'bundled' : 'runtime',
|
|
|
|
plugins: bundle ? [] : ['@babel/plugin-transform-runtime'],
|
2018-08-22 21:43:32 -07:00
|
|
|
}),
|
|
|
|
replace({
|
2021-05-05 17:50:55 +08:00
|
|
|
preventAssignment: true,
|
|
|
|
values: {
|
|
|
|
'process.env.NODE_ENV': JSON.stringify(env),
|
|
|
|
'process.env.BROWSER': JSON.stringify(browser),
|
|
|
|
},
|
2018-08-22 21:43:32 -07:00
|
|
|
}),
|
|
|
|
],
|
2021-02-02 10:53:24 +08: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 13:30:04 -07:00
|
|
|
|
2021-03-15 11:00:43 +08:00
|
|
|
if (configType !== 'browser') {
|
|
|
|
// Prevent dependencies from being bundled
|
|
|
|
config.external = [
|
|
|
|
/@babel\/runtime/,
|
2021-07-08 20:01:11 -05:00
|
|
|
'@solana/buffer-layout',
|
2021-03-15 11:00:43 +08:00
|
|
|
'bn.js',
|
2021-05-18 19:33:06 +02:00
|
|
|
'borsh',
|
2021-03-15 11:00:43 +08:00
|
|
|
'bs58',
|
2021-07-08 20:01:11 -05:00
|
|
|
'buffer',
|
2021-03-15 11:00:43 +08:00
|
|
|
'crypto-hash',
|
|
|
|
'jayson/lib/client/browser',
|
|
|
|
'js-sha3',
|
2021-09-07 17:09:13 -05:00
|
|
|
'cross-fetch',
|
2021-03-15 11:00:43 +08:00
|
|
|
'rpc-websockets',
|
|
|
|
'secp256k1',
|
|
|
|
'superstruct',
|
|
|
|
'tweetnacl',
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
2018-08-22 21:43:32 -07:00
|
|
|
switch (configType) {
|
2018-11-04 11:41:21 -08:00
|
|
|
case 'browser':
|
2021-02-02 10:53:24 +08:00
|
|
|
switch (format) {
|
2022-03-11 14:35:15 -07:00
|
|
|
case 'iife': {
|
|
|
|
config.external = ['http', 'https'];
|
|
|
|
|
2021-02-02 10:53:24 +08:00
|
|
|
config.output = [
|
2022-03-11 14:35:15 -07:00
|
|
|
{
|
|
|
|
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: {
|
|
|
|
config.output = [
|
|
|
|
{
|
|
|
|
file: 'lib/index.browser.cjs.js',
|
|
|
|
format: 'cjs',
|
|
|
|
sourcemap: true,
|
|
|
|
},
|
2021-02-02 10:53:24 +08:00
|
|
|
{
|
|
|
|
file: 'lib/index.browser.esm.js',
|
|
|
|
format: 'es',
|
|
|
|
sourcemap: true,
|
|
|
|
},
|
|
|
|
];
|
2019-02-17 16:24:46 -08:00
|
|
|
|
2021-02-02 10:53:24 +08:00
|
|
|
// Prevent dependencies from being bundled
|
|
|
|
config.external = [
|
|
|
|
/@babel\/runtime/,
|
2021-07-08 20:01:11 -05:00
|
|
|
'@solana/buffer-layout',
|
2021-02-02 10:53:24 +08:00
|
|
|
'bn.js',
|
2021-05-18 19:33:06 +02:00
|
|
|
'borsh',
|
2021-03-31 17:51:27 +08:00
|
|
|
'bs58',
|
|
|
|
'buffer',
|
2021-02-02 10:53:24 +08:00
|
|
|
'crypto-hash',
|
2021-09-07 17:09:13 -05:00
|
|
|
'http',
|
|
|
|
'https',
|
2021-02-02 10:53:24 +08:00
|
|
|
'jayson/lib/client/browser',
|
|
|
|
'js-sha3',
|
|
|
|
'rpc-websockets',
|
|
|
|
'secp256k1',
|
|
|
|
'superstruct',
|
|
|
|
'tweetnacl',
|
|
|
|
];
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
2019-02-17 16:24:46 -08:00
|
|
|
}
|
|
|
|
|
2021-02-02 10:53:24 +08:00
|
|
|
// TODO: Find a workaround to avoid resolving the following JSON file:
|
|
|
|
// `node_modules/secp256k1/node_modules/elliptic/package.json`
|
|
|
|
config.plugins.push(json());
|
|
|
|
|
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
|
|
|
},
|
|
|
|
];
|
2021-03-15 11:00:43 +08:00
|
|
|
break;
|
2018-11-04 11:41:21 -08:00
|
|
|
default:
|
|
|
|
throw new Error(`Unknown configType: ${configType}`);
|
2018-08-22 21:43:32 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
return config;
|
2018-08-22 13:30:04 -07:00
|
|
|
}
|
|
|
|
|
2021-02-02 10:53:24 +08:00
|
|
|
export default [
|
|
|
|
generateConfig('node'),
|
2022-03-11 14:35:15 -07:00
|
|
|
generateConfig('browser'),
|
2021-02-02 10:53:24 +08:00
|
|
|
generateConfig('browser', 'iife'),
|
|
|
|
];
|