1
1
var path = require ( 'path' ) ;
2
+ var minimist = require ( 'minimist' ) ;
2
3
var runSeries = require ( 'run-series' ) ;
3
4
var prependFile = require ( 'prepend-file' ) ;
4
5
@@ -7,39 +8,90 @@ var common = require('./util/common');
7
8
var _bundle = require ( './util/browserify_wrapper' ) ;
8
9
9
10
var header = constants . licenseDist + '\n' ;
11
+ var allTransforms = constants . allTransforms ;
10
12
var allTraces = constants . allTraces ;
11
13
var mainIndex = constants . mainIndex ;
12
14
13
- var argv = process . argv ;
15
+ function isFalse ( a ) {
16
+ return (
17
+ ! a ||
18
+ a === 'none' ||
19
+ a === 'false'
20
+ ) ;
21
+ }
22
+
23
+ function inputArray ( a , allOptions ) {
24
+ return isFalse ( a ) ? [ ] : (
25
+ a === 'all' || typeof a !== 'string'
26
+ ) ? allOptions . slice ( ) : a . split ( ',' ) ;
27
+ }
14
28
15
- if ( argv . length > 2 ) {
29
+ if ( process . argv . length > 2 ) {
16
30
// command line
17
31
18
- var traceList = [ 'scatter' ] ; // added by default
19
- var name ;
20
- for ( var i = 2 ; i < argv . length ; i ++ ) {
21
- var a = argv [ i ] ;
32
+ var args = minimist ( process . argv . slice ( 2 ) , { } ) ;
33
+
34
+ // parse arguments
35
+ var out = args . out ? args . out : 'custom' ;
36
+ var traces = inputArray ( args . traces , allTraces ) ;
37
+ var transforms = inputArray ( args . transforms , allTransforms ) ;
38
+ var calendars = isFalse ( args . calendars ) ? false : true ;
39
+ var sourcemaps = ! isFalse ( args . sourcemaps ) ? true : false ;
40
+ var minified = isFalse ( args . minified ) ? false : true ;
41
+ var keepindex = isFalse ( args . keepindex ) ? false : true ;
42
+
43
+ var i , t ;
22
44
45
+ var traceList = [ 'scatter' ] ; // added by default
46
+ for ( i = 0 ; i < traces . length ; i ++ ) {
47
+ t = traces [ i ] ;
23
48
if (
24
- allTraces . indexOf ( a ) !== - 1 && // requested
25
- traceList . indexOf ( a ) === - 1 // not added before
49
+ traceList . indexOf ( t ) === - 1 // not added before
26
50
) {
27
- traceList . push ( a ) ;
51
+ if ( allTraces . indexOf ( t ) === - 1 ) {
52
+ console . error ( t , 'is not a valid trace!' , 'Valid traces are:' , allTraces ) ;
53
+ } else {
54
+ traceList . push ( t ) ;
55
+ }
28
56
}
29
- if ( a . indexOf ( '--name=' ) === 0 ) name = a . replace ( '--name=' , '' ) ;
30
57
}
31
- if ( ! name ) name = 'custom' ;
32
58
traceList = traceList . sort ( ) ;
33
59
60
+ var transformList = [ ] ;
61
+ for ( i = 0 ; i < transforms . length ; i ++ ) {
62
+ t = transforms [ i ] ;
63
+ if (
64
+ transformList . indexOf ( t ) === - 1 // not added before
65
+ ) {
66
+ if ( allTransforms . indexOf ( t ) === - 1 ) {
67
+ console . error ( t , 'is not a valid transform!' , 'Valid transforms are:' , allTransforms ) ;
68
+ } else {
69
+ transformList . push ( t ) ;
70
+ }
71
+ }
72
+ }
73
+ transformList = transformList . sort ( ) ;
74
+
34
75
var opts = {
35
76
traceList : traceList ,
36
- name : name ,
77
+ transformList : transformList ,
78
+ calendars : calendars ,
79
+ sourcemaps : sourcemaps ,
37
80
38
- index : path . join ( constants . pathToBuild , 'index-' + name + '.js' ) ,
39
- dist : path . join ( constants . pathToDist , 'plotly-' + name + '.js' ) ,
40
- distMin : path . join ( constants . pathToDist , 'plotly-' + name + '.min.js' )
81
+ name : out ,
82
+ index : path . join ( constants . pathToLib , 'index-' + out + '.js' )
41
83
} ;
42
84
85
+ if ( minified ) {
86
+ opts . distMin = path . join ( constants . pathToDist , 'plotly-' + out + '.min.js' ) ;
87
+ } else {
88
+ opts . dist = path . join ( constants . pathToDist , 'plotly-' + out + '.js' ) ;
89
+ }
90
+
91
+ if ( ! keepindex ) {
92
+ opts . deleteIndex = true ;
93
+ }
94
+
43
95
console . log ( opts ) ;
44
96
45
97
var tasks = [ ] ;
@@ -58,40 +110,55 @@ function partialBundle(tasks, opts) {
58
110
var dist = opts . dist ;
59
111
var distMin = opts . distMin ;
60
112
var traceList = opts . traceList ;
113
+ var transformList = opts . transformList ;
114
+ var calendars = opts . calendars ;
115
+ var sourcemaps = opts . sourcemaps ;
116
+ var deleteIndex = opts . deleteIndex ;
61
117
62
118
tasks . push ( function ( done ) {
63
119
var partialIndex = mainIndex ;
64
- allTraces . forEach ( function ( trace ) {
65
- if ( traceList . indexOf ( trace ) === - 1 ) {
66
- var WHITESPACE_BEFORE = '\\s*' ;
67
- // remove require
68
- var newCode = partialIndex . replace (
69
- new RegExp (
70
- WHITESPACE_BEFORE +
71
- 'require\\(\'\\./' + trace + '\'\\),' ,
72
- 'g' ) , ''
73
- ) ;
74
-
75
- // test removal
76
- if ( newCode === partialIndex ) throw 'Unable to find and drop require for trace: "' + trace + '"' ;
77
-
78
- partialIndex = newCode ;
120
+
121
+ var all = [ 'calendars' ] . concat ( allTransforms ) . concat ( allTraces ) ;
122
+ var includes = ( calendars ? [ 'calendars' ] : [ ] ) . concat ( transformList ) . concat ( traceList ) ;
123
+ var excludes = all . filter ( function ( e ) { return includes . indexOf ( e ) === - 1 ; } ) ;
124
+
125
+ excludes . forEach ( function ( t ) {
126
+ var WHITESPACE_BEFORE = '\\s*' ;
127
+ // remove require
128
+ var newCode = partialIndex . replace (
129
+ new RegExp (
130
+ WHITESPACE_BEFORE +
131
+ 'require\\(\'\\./' + t + '\'\\)' +
132
+ ( t === 'calendars' ? '' : ',' ) , // there is no comma after calendars require
133
+ 'g' ) , ''
134
+ ) ;
135
+
136
+ // test removal
137
+ if ( newCode === partialIndex ) {
138
+ console . error ( 'Unable to find and drop require for ' + t ) ;
139
+ throw 'Error generating index for partial bundle!' ;
79
140
}
141
+
142
+ partialIndex = newCode ;
80
143
} ) ;
81
144
82
145
common . writeFile ( index , partialIndex , done ) ;
83
146
} ) ;
84
147
85
148
tasks . push ( function ( done ) {
86
- _bundle ( index , dist , {
149
+ var bundleOpts = {
150
+ debug : sourcemaps ,
151
+ deleteIndex : deleteIndex ,
87
152
standalone : 'Plotly' ,
88
153
pathToMinBundle : distMin
89
- } , function ( ) {
154
+ } ;
155
+
156
+ _bundle ( index , dist , bundleOpts , function ( ) {
90
157
var headerDist = header . replace ( 'plotly.js' , 'plotly.js (' + name + ')' ) ;
91
158
var headerDistMin = header . replace ( 'plotly.js' , 'plotly.js (' + name + ' - minified)' ) ;
92
159
93
- prependFile ( dist , headerDist , common . throwOnError ) ;
94
- prependFile ( distMin , headerDistMin , common . throwOnError ) ;
160
+ if ( dist ) prependFile ( dist , headerDist , common . throwOnError ) ;
161
+ if ( distMin ) prependFile ( distMin , headerDistMin , common . throwOnError ) ;
95
162
96
163
done ( ) ;
97
164
} ) ;
0 commit comments