@nfps.dev/rollup-plugin-microweb
Version:
Rollup plugin for bundling and minifying NFP TypeScript projects
95 lines (94 loc) • 3.9 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.microWeb = void 0;
const plugin_node_resolve_1 = __importDefault(require("@rollup/plugin-node-resolve"));
const plugin_terser_1 = __importDefault(require("@rollup/plugin-terser"));
const plugin_typescript_1 = __importDefault(require("@rollup/plugin-typescript"));
const rollup_plugin_filesize_1 = __importDefault(require("rollup-plugin-filesize"));
const uglify_js_1 = __importDefault(require("uglify-js"));
function microWeb(gc_microweb = {}) {
return [
// node-style resolution
(0, plugin_node_resolve_1.default)({
browser: true,
}),
// enable typescript
(0, plugin_typescript_1.default)({
sourceMap: true,
include: gc_microweb.include || ['src/**/*.ts'],
...gc_microweb.exclude ? { exclude: gc_microweb.exclude } : {},
...gc_microweb.tsconfig ? { tsconfig: gc_microweb.tsconfig } : {},
...gc_microweb.typescript ? { typescript: gc_microweb.typescript } : {},
...gc_microweb.compilerOptions ? { compilerOptions: gc_microweb.compilerOptions } : {},
}),
// minify using terser
...'development' !== process.env['NODE_ENV'] ? [
(0, plugin_terser_1.default)({
compress: {
passes: 3,
ecma: 2020,
// toplevel: true,
keep_fargs: false,
unsafe_arrows: true,
// unsafe_comps: true,
unsafe_methods: true,
unsafe_proto: true,
unsafe_regexp: true,
// this can cause an error when web crypto API expects a boolean
// booleans_as_integers: true,
pure_funcs: [
'buffer',
'sha256',
'sha256d',
'sha384',
'sha512',
'hmac',
'text_to_buffer',
'buffer_to_text',
'base64_to_text',
'text_to_base64',
'json_to_buffer',
'buffer_to_json',
'buffer_to_hex',
'hex_to_buffer',
'buffer_to_base64',
'base64_to_buffer',
'string8_to_buffer',
'buffer_to_string8',
'buffer_to_base93',
'base93_to_buffer',
'buffer_to_base58',
'base58_to_buffer',
'concat',
'concat2',
],
},
mangle: {
toplevel: true,
},
format: {
wrap_func_args: false,
},
}),
// terser is not perfect on its own, use uglify to clean up remainder
{
name: 'uglify',
generateBundle: {
handler(gc_bundle, h_bundle, b_write) {
for (const [, g_bundle] of Object.entries(h_bundle)) {
if ('chunk' === g_bundle.type) {
g_bundle.code = uglify_js_1.default.minify(g_bundle.code).code;
}
}
},
},
},
// display the bundled sizes
(0, rollup_plugin_filesize_1.default)(),
] : [],
];
}
exports.microWeb = microWeb;