1
1
var fs = require ( 'fs' ) ;
2
+ var rollup = require ( 'rollup' ) ;
2
3
var uglify = require ( 'uglify-js' ) ;
3
4
var execSync = require ( 'child_process' ) . execSync ;
4
5
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' ,
6
+ bundle ( {
10
7
minified : 'dist/jspdf.min.js' ,
11
8
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 ) ;
9
+ } ) ;
33
10
34
11
// Monkey patching adler32 and filesaver
35
12
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 ) ;
13
+ return {
14
+ transform : function ( code , id ) {
15
+ var file = id . split ( '/' ) . pop ( ) ;
16
+ if ( file === 'adler32cs.js' ) {
17
+ code = code . replace ( / t h i s , f u n c t i o n / g, 'jsPDF, function' ) ;
18
+ code = code . replace ( / t y p e o f d e f i n e / g, '0' ) ;
19
+ } else if ( file === 'FileSaver.js' ) {
20
+ code = code . 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' ) ;
21
+ }
22
+ return code ;
23
+ }
24
+ }
25
+ }
26
+
27
+ // Rollup removes local variables unless used within a module.
28
+ // This plugin makes sure specified local variables are preserved
29
+ // and kept local. This plugin won't be necessary once es2015
30
+ // modules are used.
31
+ function rawjs ( opts ) {
32
+ opts = opts || { } ;
33
+ return {
34
+ transform : function ( code , id ) {
35
+ var variable = opts [ id . split ( '/' ) . pop ( ) ] ;
36
+ if ( ! variable ) return code ;
40
37
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 ) ;
38
+ var keepStr = '/*rollup-keeper-start*/window.tmp=' + variable + ';/*rollup-keeper-end*/' ;
39
+ return code + keepStr ;
40
+ } ,
41
+ transformBundle : function ( code ) {
42
+ for ( var file in opts ) {
43
+ var r = new RegExp ( opts [ file ] + '\\$\\d+' , 'g' ) ;
44
+ code = code . replace ( r , opts [ file ] ) ;
45
+ }
46
+ var re = / \/ \* r o l l u p - k e e p e r - s t a r t \* \/ .* \/ \* r o l l u p - k e e p e r - e n d \* \/ / g;
47
+ return code . replace ( re , '' ) ;
48
+ }
49
+ }
44
50
}
45
51
46
- function bundle ( ) {
47
- var debug = execSync ( 'cat ' + files . join ( ' ' ) + ' ' + libs . join ( ' ' ) ) . toString ( ) . trim ( ) ;
48
- fs . writeFileSync ( paths . debug , renew ( debug ) ) ;
52
+ function bundle ( paths ) {
53
+ rollup . rollup ( {
54
+ entry : './libs/main.js' ,
55
+ plugins : [
56
+ monkeyPatch ( ) ,
57
+ rawjs ( {
58
+ 'jspdf.js' : 'jsPDF' ,
59
+ 'filesaver.tmp.js' : 'saveAs' ,
60
+ 'deflate.js' : 'Deflater' ,
61
+ 'zlib.js' : 'FlateStream' ,
62
+ 'css_colors.js' : 'CssColors' ,
63
+ 'html2pdf.js' : 'html2pdf'
64
+ } )
65
+ ]
66
+ } ) . then ( function ( bundle ) {
67
+ var code = bundle . generate ( { format : 'umd' } ) . code ;
68
+ code = code . replace ( / ' u s e s t r i c t ' ; / , '' ) ;
69
+ code = code . replace ( / P e r m i s s i o n \s + i s \s + h e r e b y \s + g r a n t e d [ \S \s ] + ?I N \s + T H E \s + S O F T W A R E \. / , 'Licensed under the MIT License' ) ;
70
+ code = code . replace ( / P e r m i s s i o n \s + i s \s + h e r e b y \s + g r a n t e d [ \S \s ] + ?I N \s + T H E \s + S O F T W A R E \. / g, '' ) ;
71
+ fs . writeFileSync ( paths . debug , renew ( code ) ) ;
49
72
50
- var licences = extractLicences ( ) ;
51
- var minifed = uglify . minify ( files . concat ( libs ) , { wrap : 'jspdf-exports' } ) ;
52
- fs . writeFileSync ( paths . minified , renew ( '' + licences + minifed . code ) ) ;
73
+ var minified = uglify . minify ( code , { fromString : true , output : { comments : / @ p r e s e r v e | @ l i c e n s e | c o p y r i g h t / i} } ) ;
74
+ fs . writeFileSync ( paths . minified , renew ( minified . code ) ) ;
75
+ } ) . catch ( function ( err ) {
76
+ console . error ( err ) ;
77
+ } ) ;
53
78
}
54
79
55
80
function renew ( code ) {
@@ -63,20 +88,4 @@ function renew(code) {
63
88
code = code . replace ( / 1 \. 0 \. 0 - t r u n k / , version + ' ' + date + ':' + whoami ) ;
64
89
65
90
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
91
}
0 commit comments