Skip to content

Commit 00e8d92

Browse files
Replace build.sh with node build script
1 parent b09fd63 commit 00e8d92

File tree

2 files changed

+83
-1
lines changed

2 files changed

+83
-1
lines changed

build.js

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
var fs = require('fs');
2+
var uglify = require('uglify-js');
3+
var execSync = require('child_process').execSync;
4+
5+
var paths = {
6+
adler: 'node_modules/adler32cs/adler32cs.js',
7+
fileSaver: 'node_modules/filesaver.js/FileSaver.js',
8+
adlerTmp: 'adler.tmp.js',
9+
fileSaverTmp: 'filesaver.tmp.js',
10+
minified: 'dist/jspdf.min.js',
11+
debug: 'dist/jspdf.debug.js'
12+
};
13+
14+
var libs = [
15+
'node_modules/cf-blob.js/Blob.js',
16+
paths.fileSaverTmp,
17+
paths.adlerTmp,
18+
'libs/css_colors.js',
19+
'libs/deflate.js',
20+
'libs/html2canvas/dist/html2canvas.js',
21+
'libs/png_support/png.js',
22+
'libs/png_support/zlib.js',
23+
'libs/polyfill.js'
24+
];
25+
var files = execSync('find plugins/*.js').toString().trim().split(/\n/);
26+
files.unshift('jspdf.js');
27+
28+
monkeyPatch();
29+
bundle();
30+
31+
fs.unlink(paths.adlerTmp);
32+
fs.unlink(paths.fileSaverTmp);
33+
34+
// Monkey patching adler32 and filesaver
35+
function monkeyPatch() {
36+
var adler = fs.readFileSync(paths.adler).toString();
37+
adler = adler.replace(/this, function/g, 'jsPDF, function');
38+
adler = adler.replace(/typeof define/g, '0');
39+
fs.writeFileSync(paths.adlerTmp, adler);
40+
41+
var fileSaverCode = fs.readFileSync(paths.fileSaver).toString();
42+
fileSaverCode = fileSaverCode.replace(/define !== null\) && \(define.amd != null/g, '0');
43+
fs.writeFileSync(paths.fileSaverTmp, fileSaverCode);
44+
}
45+
46+
function bundle() {
47+
var debug = execSync('cat ' + files.join(' ') + ' ' + libs.join(' ')).toString().trim();
48+
fs.writeFileSync(paths.debug, renew(debug));
49+
50+
var licences = extractLicences();
51+
var minifed = uglify.minify(files.concat(libs), {wrap: 'jspdf-exports'});
52+
fs.writeFileSync(paths.minified, renew('' + licences + minifed.code));
53+
}
54+
55+
function renew(code) {
56+
var date = new Date().toISOString();
57+
var version = require('./package.json').version;
58+
var whoami = execSync('whoami').toString().trim();
59+
var commit = execSync('git rev-parse --short=10 HEAD').toString().trim();
60+
61+
code = code.replace('${versionID}', version + ' Built on ' + date);
62+
code = code.replace('${commitID}', commit);
63+
code = code.replace(/1\.0\.0-trunk/, version + ' ' + date + ':' + whoami);
64+
65+
return code;
66+
}
67+
68+
function extractLicences() {
69+
var licences = '';
70+
71+
files.concat(libs).forEach(function(file) {
72+
var commentFilter = " | sed -n -e '1,/\\*\\//p' | sed -e 's/\\s*@preserve/ /' | grep -v *global";
73+
if (file !== 'jspdf.js') {
74+
commentFilter += " | sed -e '/Permission/,/SOFTWARE\\./c \\'";
75+
}
76+
77+
var lic = execSync("awk '/^\\/\\*/,/\\*\\//' " + file + commentFilter).toString();
78+
licences += lic.replace(/^\s*\n/gm, '');
79+
});
80+
81+
return licences;
82+
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
},
2727
"scripts": {
2828
"start": "ws",
29-
"build": "npm install && bower install && ./build.sh",
29+
"build": "npm install && bower install && node build.js",
3030
"version": "npm run build && git add -A dist"
3131
}
3232
}

0 commit comments

Comments
 (0)