1+ var proxyquire = require ( 'proxyquireify' ) ;
2+
13module . exports = function ( grunt ) {
24 "use strict" ;
35
46 var _ = require ( 'lodash' ) ;
57 var path = require ( 'path' ) ;
6-
7- var coreFiles = [
8- 'template/_header.js' ,
9- 'vendor/**/*.js' ,
10- 'src/**/*.js' ,
11- 'template/_footer.js'
12- ] ;
8+ var through = require ( 'through2' ) ;
139
1410 var excludedPlugins = [
1511 'react-native'
@@ -26,6 +22,21 @@ module.exports = function(grunt) {
2622 return path ;
2723 } ) ;
2824
25+ // custom browserify transformer to re-write plugins to
26+ // self-register with Raven via addPlugin
27+ function AddPluginBrowserifyTransformer ( ) {
28+ return function ( file ) {
29+ return through ( function ( buf , enc , next ) {
30+ buf = buf . toString ( 'utf8' ) ;
31+ if ( / p l u g i n s / . test ( file ) ) {
32+ buf += "\nrequire('../src/singleton').addPlugin(module.exports);" ;
33+ }
34+ this . push ( buf ) ;
35+ next ( ) ;
36+ } ) ;
37+ } ;
38+ }
39+
2940 // Taken from http://dzone.com/snippets/calculate-all-combinations
3041 var combine = function ( a ) {
3142 var fn = function ( n , src , got , all ) {
@@ -65,7 +76,7 @@ module.exports = function(grunt) {
6576 key . sort ( ) ;
6677
6778 var dest = path . join ( 'build/' , key . join ( ',' ) , '/raven.js' ) ;
68- dict [ dest ] = coreFiles . concat ( comb ) ;
79+ dict [ dest ] = [ 'src/singleton.js' ] . concat ( comb ) ;
6980
7081 return dict ;
7182 } , { } ) ;
@@ -75,18 +86,35 @@ module.exports = function(grunt) {
7586 aws : grunt . file . exists ( 'aws.json' ) ? grunt . file . readJSON ( 'aws.json' ) : { } ,
7687
7788 clean : [ 'build' ] ,
78- concat : {
89+
90+ browserify : {
7991 options : {
80- separator : '\n' ,
81- banner : grunt . file . read ( 'template/_copyright.js' ) ,
82- process : true
92+ browserifyOptions : {
93+ banner : grunt . file . read ( 'template/_copyright.js' ) ,
94+ standalone : 'Raven' // umd
95+ }
8396 } ,
8497 core : {
85- src : coreFiles . concat ( plugins ) ,
98+ src : 'src/singleton.js' ,
8699 dest : 'build/raven.js'
87100 } ,
88- all : {
89- files : pluginConcatFiles
101+ plugins : {
102+ files : pluginConcatFiles ,
103+ options : {
104+ transform : [
105+ [ new AddPluginBrowserifyTransformer ( ) ]
106+ ]
107+ }
108+ } ,
109+ test : {
110+ src : 'test/**/*.test.js' ,
111+ dest : 'build/raven.test.js' ,
112+ options : {
113+ browserifyOptions : {
114+ debug : true // source maps
115+ } ,
116+ plugin : [ proxyquire . plugin ]
117+ }
90118 }
91119 } ,
92120
@@ -100,7 +128,13 @@ module.exports = function(grunt) {
100128 sourceMappingURL : function ( dest ) {
101129 return path . basename ( dest , '.js' ) + '.map' ;
102130 } ,
103- preserveComments : 'some'
131+ preserveComments : 'some' ,
132+ compress : {
133+ dead_code : true ,
134+ global_defs : {
135+ "TEST" : false
136+ }
137+ }
104138 } ,
105139 dist : {
106140 src : [ 'build/**/*.js' ] ,
@@ -251,13 +285,13 @@ module.exports = function(grunt) {
251285
252286 // Grunt contrib tasks
253287 grunt . loadNpmTasks ( 'grunt-contrib-uglify' ) ;
254- grunt . loadNpmTasks ( 'grunt-contrib-concat' ) ;
255288 grunt . loadNpmTasks ( 'grunt-contrib-clean' ) ;
256289 grunt . loadNpmTasks ( 'grunt-contrib-jshint' ) ;
257290 grunt . loadNpmTasks ( 'grunt-contrib-connect' ) ;
258291 grunt . loadNpmTasks ( 'grunt-contrib-copy' ) ;
259292
260293 // 3rd party Grunt tasks
294+ grunt . loadNpmTasks ( 'grunt-browserify' ) ;
261295 grunt . loadNpmTasks ( 'grunt-mocha' ) ;
262296 grunt . loadNpmTasks ( 'grunt-release' ) ;
263297 grunt . loadNpmTasks ( 'grunt-s3' ) ;
@@ -266,15 +300,16 @@ module.exports = function(grunt) {
266300
267301 // Build tasks
268302 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' ] ) ;
303+ grunt . registerTask ( 'browserify.core' , [ '_prep' , 'browserify:core' ] ) ;
304+ grunt . registerTask ( 'browserify.plugins' , [ '_prep' , 'browserify:plugins' ] ) ;
305+ grunt . registerTask ( 'build.test' , [ '_prep' , 'browserify:test' ] ) ;
306+ grunt . registerTask ( 'build.core' , [ 'browserify.core' , 'uglify' , 'fixSourceMaps' , 'sri:dist' ] ) ;
307+ grunt . registerTask ( 'build.all' , [ 'browserify.plugins' , 'uglify' , 'fixSourceMaps' , 'sri:dist' , 'sri:build' ] ) ;
273308 grunt . registerTask ( 'build' , [ 'build.all' ] ) ;
274309 grunt . registerTask ( 'dist' , [ 'build.core' , 'copy:dist' ] ) ;
275310
276311 // Test task
277- grunt . registerTask ( 'test' , [ 'jshint' , 'mocha' ] ) ;
312+ grunt . registerTask ( 'test' , [ 'jshint' , 'browserify.core' , 'browserify:test' , ' mocha'] ) ;
278313
279314 // Webserver tasks
280315 grunt . registerTask ( 'run:test' , [ 'connect:test' ] ) ;
0 commit comments