var fs = require('fs'); var rollup = require('rollup'); var uglify = require('uglify-js'); var babel = require('rollup-plugin-babel'); var execSync = require('child_process').execSync; bundle({ minified: 'dist/jspdf.min.js', debug: 'dist/jspdf.debug.js' }); // Monkey patching adler32 and filesaver function monkeyPatch() { return { transform: function (code, id) { var file = id.split('/').pop(); if (file === 'adler32cs.js') { code = code.replace(/this, function/g, 'jsPDF, function'); code = code.replace(/require\('buffer'\)/g, '{}'); } return code; } } } // Rollup removes local variables unless used within a module. // This plugin makes sure specified local variables are preserved // and kept local. This plugin wouldn't be necessary if es2015 // modules would be used. function rawjs(opts) { opts = opts || {}; return { transform: function (code, id) { var variable = opts[id.split('/').pop()]; if (!variable) return code; var keepStr = '/*rollup-keeper-start*/window.tmp=' + variable + ';/*rollup-keeper-end*/'; return code + keepStr; }, transformBundle: function (code) { for (var file in opts) { var r = new RegExp(opts[file] + '\\$\\d+', 'g'); code = code.replace(r, opts[file]); } var re = /\/\*rollup-keeper-start\*\/.*\/\*rollup-keeper-end\*\//g; return code.replace(re, ''); } } } function bundle(paths) { rollup.rollup({ entry: './main.js', plugins: [ monkeyPatch(), rawjs({ 'jspdf.js': 'jsPDF', 'filesaver.tmp.js': 'saveAs', 'deflate.js': 'Deflater', 'zlib.js': 'FlateStream', 'css_colors.js': 'CssColors', 'html2pdf.js': 'html2pdf' }), babel({ presets: ['es2015-rollup'], exclude: ['node_modules/**', 'libs/**'] }) ] }).then(function (bundle) { var code = bundle.generate({format: 'umd', moduleName: 'jspdf'}).code; code = code.replace(/Permission\s+is\s+hereby\s+granted[\S\s]+?IN\s+THE\s+SOFTWARE\./, 'Licensed under the MIT License'); code = code.replace(/Permission\s+is\s+hereby\s+granted[\S\s]+?IN\s+THE\s+SOFTWARE\./g, ''); fs.writeFileSync(paths.debug, renew(code)); var minified = uglify.minify(code, {fromString: true, output: {comments: /@preserve|@license|copyright/i}}); fs.writeFileSync(paths.minified, renew(minified.code)); }).catch(function (err) { console.error(err); }); } function renew(code) { var date = new Date().toISOString(); var version = require('./package.json').version; var whoami = execSync('whoami').toString().trim(); var commit = execSync('git rev-parse --short=10 HEAD').toString().trim(); code = code.replace('${versionID}', version + ' Built on ' + date); code = code.replace('${commitID}', commit); code = code.replace(/1\.0\.0-trunk/, version + ' ' + date + ':' + whoami); return code; }