85 lines
2.8 KiB
JavaScript
85 lines
2.8 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
import fs from "fs";
|
||
|
import path from "path";
|
||
|
|
||
|
import commonjs from '@rollup/plugin-commonjs';
|
||
|
import resolveNode from "@rollup/plugin-node-resolve";
|
||
|
import replace from "@rollup/plugin-replace";
|
||
|
|
||
|
// We only need this for its version (we inject it into a require)
|
||
|
import elliptic from "elliptic";
|
||
|
|
||
|
function getSigningKeyConfig() {
|
||
|
|
||
|
const plugins = [ ];
|
||
|
|
||
|
// Remove the buffer check from BN.js
|
||
|
plugins.push(replace({
|
||
|
"require('buffer')": "/*RicMoo:ethers*/(null)",
|
||
|
include: "**/lib/bn.js",
|
||
|
delimiters: [ '', '' ]
|
||
|
}));
|
||
|
|
||
|
// Replace the package.json in elliptic
|
||
|
plugins.push(replace({
|
||
|
"require('../package.json')": `/*RicMoo:ethers*/{ version: "${ elliptic.version }" }`,
|
||
|
include: "**/lib/elliptic.js",
|
||
|
delimiters: [ '', '' ]
|
||
|
}));
|
||
|
|
||
|
// Nuke a bunch of requires we don't need in elliptic
|
||
|
const thrower = "(function() { throw new Error('unsupported'); })";
|
||
|
const crash = "(null).crash()";
|
||
|
[
|
||
|
{ name: "./edwards", filename: "curve/index.js" },
|
||
|
{ name: "./mont", filename: "curve/index.js" },
|
||
|
{ name: "./elliptic/eddsa", filename: "lib/elliptic.js" },
|
||
|
{ name: "brorand", filename: "ec/index.js", text: thrower },
|
||
|
{ name: "brorand", filename: "lib/elliptic.js", text: thrower },
|
||
|
{ name: "./precomputed/secp256k1", filename: "elliptic/curves.js", text: crash },
|
||
|
].forEach(({ name, filename, text }) => {
|
||
|
if (text == null) { text = "(null)"; }
|
||
|
const replacement = {
|
||
|
include: `**/${ filename }`,
|
||
|
delimiters: [ '', '' ]
|
||
|
};
|
||
|
replacement[`require('${ name }')`] = `/*RicMoo:ethers:require(${ name })*/${ text }`,
|
||
|
plugins.push(replace(replacement));
|
||
|
});
|
||
|
|
||
|
// Keep @ethersproject imports, merge anything else
|
||
|
plugins.push(resolveNode({
|
||
|
//resolveOnly: ((name === "ethers") ? []: [ /^(?!(@ethersproject|ethers))/ ]),
|
||
|
resolveOnly: [ /^(?!(@ethersproject|ethers|bn\.js|hash\.js))/ ],
|
||
|
mainFields: [ "module", "browser", "main" ],
|
||
|
preferBuiltins: false
|
||
|
}));
|
||
|
|
||
|
// Our CommonJS dependencies that are not rollup-friendly
|
||
|
plugins.push(commonjs({ }));
|
||
|
|
||
|
// Write out a dummy TypeScript definition
|
||
|
const typeDef = "//This file generated by rollup-pre-alias.config.js; do NOT modify\ndeclare const EC: any;\nexport { EC };"
|
||
|
fs.writeFileSync(path.resolve(__dirname, "packages/signing-key/lib._esm/browser-elliptic.d.ts"), typeDef);
|
||
|
|
||
|
return {
|
||
|
input: `packages/signing-key/lib._esm/elliptic.js`,
|
||
|
output: {
|
||
|
file: `packages/signing-key/lib._esm/browser-elliptic.js`,
|
||
|
format: "esm",
|
||
|
sourcemap: true,
|
||
|
exports: "named"
|
||
|
},
|
||
|
context: "window",
|
||
|
treeshake: false,
|
||
|
plugins
|
||
|
};
|
||
|
}
|
||
|
|
||
|
const configs = [
|
||
|
getSigningKeyConfig()
|
||
|
];
|
||
|
|
||
|
export default configs;
|