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