1
+ var proxyquire = require ( 'proxyquireify' ) ;
2
+ var versionify = require ( 'browserify-versionify' ) ;
3
+
1
4
module . exports = function ( grunt ) {
2
5
"use strict" ;
3
6
4
7
var _ = require ( 'lodash' ) ;
5
8
var path = require ( 'path' ) ;
6
-
7
- var coreFiles = [
8
- 'template/_header.js' ,
9
- 'vendor/**/*.js' ,
10
- 'src/**/*.js' ,
11
- 'template/_footer.js'
12
- ] ;
9
+ var through = require ( 'through2' ) ;
13
10
14
11
var excludedPlugins = [
15
12
'react-native'
@@ -26,6 +23,21 @@ module.exports = function(grunt) {
26
23
return path ;
27
24
} ) ;
28
25
26
+ // custom browserify transformer to re-write plugins to
27
+ // self-register with Raven via addPlugin
28
+ function AddPluginBrowserifyTransformer ( ) {
29
+ return function ( file ) {
30
+ return through ( function ( buf , enc , next ) {
31
+ buf = buf . toString ( 'utf8' ) ;
32
+ if ( / p l u g i n s / . test ( file ) ) {
33
+ buf += "\nrequire('../src/singleton').addPlugin(module.exports);" ;
34
+ }
35
+ this . push ( buf ) ;
36
+ next ( ) ;
37
+ } ) ;
38
+ } ;
39
+ }
40
+
29
41
// Taken from http://dzone.com/snippets/calculate-all-combinations
30
42
var combine = function ( a ) {
31
43
var fn = function ( n , src , got , all ) {
@@ -65,7 +77,7 @@ module.exports = function(grunt) {
65
77
key . sort ( ) ;
66
78
67
79
var dest = path . join ( 'build/' , key . join ( ',' ) , '/raven.js' ) ;
68
- dict [ dest ] = coreFiles . concat ( comb ) ;
80
+ dict [ dest ] = [ 'src/singleton.js' ] . concat ( comb ) ;
69
81
70
82
return dict ;
71
83
} , { } ) ;
@@ -75,18 +87,38 @@ module.exports = function(grunt) {
75
87
aws : grunt . file . exists ( 'aws.json' ) ? grunt . file . readJSON ( 'aws.json' ) : { } ,
76
88
77
89
clean : [ 'build' ] ,
78
- concat : {
90
+
91
+ browserify : {
79
92
options : {
80
- separator : '\n' ,
81
- banner : grunt . file . read ( 'template/_copyright.js' ) ,
82
- process : true
93
+ browserifyOptions : {
94
+ banner : grunt . file . read ( 'template/_copyright.js' ) ,
95
+ standalone : 'Raven' // umd
96
+
97
+ } ,
98
+ transform : [ versionify ]
83
99
} ,
84
100
core : {
85
- src : coreFiles . concat ( plugins ) ,
101
+ src : 'src/singleton.js' ,
86
102
dest : 'build/raven.js'
87
103
} ,
88
- all : {
89
- files : pluginConcatFiles
104
+ plugins : {
105
+ files : pluginConcatFiles ,
106
+ options : {
107
+ transform : [
108
+ [ versionify ] ,
109
+ [ new AddPluginBrowserifyTransformer ( ) ]
110
+ ]
111
+ }
112
+ } ,
113
+ test : {
114
+ src : 'test/**/*.test.js' ,
115
+ dest : 'build/raven.test.js' ,
116
+ options : {
117
+ browserifyOptions : {
118
+ debug : true // source maps
119
+ } ,
120
+ plugin : [ proxyquire . plugin ]
121
+ }
90
122
}
91
123
} ,
92
124
@@ -100,7 +132,13 @@ module.exports = function(grunt) {
100
132
sourceMappingURL : function ( dest ) {
101
133
return path . basename ( dest , '.js' ) + '.map' ;
102
134
} ,
103
- preserveComments : 'some'
135
+ preserveComments : 'some' ,
136
+ compress : {
137
+ dead_code : true ,
138
+ global_defs : {
139
+ "TEST" : false
140
+ }
141
+ }
104
142
} ,
105
143
dist : {
106
144
src : [ 'build/**/*.js' ] ,
@@ -121,18 +159,22 @@ module.exports = function(grunt) {
121
159
} ,
122
160
123
161
mocha : {
124
- all : {
125
- options : {
126
- mocha : {
127
- ignoreLeaks : true ,
128
- grep : grunt . option ( 'grep' )
129
- } ,
130
- log : true ,
131
- reporter : 'Dot' ,
132
- run : true
162
+ options : {
163
+ mocha : {
164
+ ignoreLeaks : true ,
165
+ grep : grunt . option ( 'grep' )
133
166
} ,
167
+ log : true ,
168
+ reporter : 'Dot' ,
169
+ run : true
170
+ } ,
171
+ unit : {
134
172
src : [ 'test/index.html' ] ,
135
173
nonull : true
174
+ } ,
175
+ integration : {
176
+ src : [ 'test/integration/index.html' ] ,
177
+ nonull : true
136
178
}
137
179
} ,
138
180
@@ -251,13 +293,13 @@ module.exports = function(grunt) {
251
293
252
294
// Grunt contrib tasks
253
295
grunt . loadNpmTasks ( 'grunt-contrib-uglify' ) ;
254
- grunt . loadNpmTasks ( 'grunt-contrib-concat' ) ;
255
296
grunt . loadNpmTasks ( 'grunt-contrib-clean' ) ;
256
297
grunt . loadNpmTasks ( 'grunt-contrib-jshint' ) ;
257
298
grunt . loadNpmTasks ( 'grunt-contrib-connect' ) ;
258
299
grunt . loadNpmTasks ( 'grunt-contrib-copy' ) ;
259
300
260
301
// 3rd party Grunt tasks
302
+ grunt . loadNpmTasks ( 'grunt-browserify' ) ;
261
303
grunt . loadNpmTasks ( 'grunt-mocha' ) ;
262
304
grunt . loadNpmTasks ( 'grunt-release' ) ;
263
305
grunt . loadNpmTasks ( 'grunt-s3' ) ;
@@ -266,15 +308,16 @@ module.exports = function(grunt) {
266
308
267
309
// Build tasks
268
310
grunt . registerTask ( '_prep' , [ 'clean' , 'gitinfo' , 'version' ] ) ;
269
- grunt . registerTask ( 'concat.core' , [ '_prep' , 'concat:core' ] ) ;
270
- grunt . registerTask ( 'concat.all' , [ '_prep' , 'concat:all' ] ) ;
271
- grunt . registerTask ( 'build.core' , [ 'concat.core' , 'uglify' , 'fixSourceMaps' , 'sri:dist' ] ) ;
272
- grunt . registerTask ( 'build.all' , [ 'concat.all' , 'uglify' , 'fixSourceMaps' , 'sri:dist' , 'sri:build' ] ) ;
311
+ grunt . registerTask ( 'browserify.core' , [ '_prep' , 'browserify:core' ] ) ;
312
+ grunt . registerTask ( 'browserify.plugins' , [ '_prep' , 'browserify:plugins' ] ) ;
313
+ grunt . registerTask ( 'build.test' , [ '_prep' , 'browserify:test' ] ) ;
314
+ grunt . registerTask ( 'build.core' , [ 'browserify.core' , 'uglify' , 'fixSourceMaps' , 'sri:dist' ] ) ;
315
+ grunt . registerTask ( 'build.all' , [ 'browserify.plugins' , 'uglify' , 'fixSourceMaps' , 'sri:dist' , 'sri:build' ] ) ;
273
316
grunt . registerTask ( 'build' , [ 'build.all' ] ) ;
274
317
grunt . registerTask ( 'dist' , [ 'build.core' , 'copy:dist' ] ) ;
275
318
276
319
// Test task
277
- grunt . registerTask ( 'test' , [ 'jshint' , 'mocha' ] ) ;
320
+ grunt . registerTask ( 'test' , [ 'jshint' , 'browserify.core' , 'browserify:test' , ' mocha'] ) ;
278
321
279
322
// Webserver tasks
280
323
grunt . registerTask ( 'run:test' , [ 'connect:test' ] ) ;
0 commit comments