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 ( / t h i s , f u n c t i o n / g, 'jsPDF, function' ) ;
38+ adler = adler . replace ( / t y p e o f d e f i n e / g, '0' ) ;
39+ fs . writeFileSync ( paths . adlerTmp , adler ) ;
40+
41+ var fileSaverCode = fs . readFileSync ( paths . fileSaver ) . toString ( ) ;
42+ fileSaverCode = fileSaverCode . replace ( / d e f i n e ! = = n u l l \) & & \( d e f i n e .a m d ! = n u l l / 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 - t r u n k / , 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+ }
0 commit comments