forked from parallax/jsPDF
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.js
93 lines (84 loc) · 3.18 KB
/
build.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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;
}