bpmn-js/Gruntfile.js

253 lines
6.2 KiB
JavaScript

module.exports = function(grunt) {
require('load-grunt-tasks')(grunt);
require('time-grunt')(grunt);
/* global Buffer,process*/
// configures browsers to run test against
// any of [ 'PhantomJS', 'Chrome', 'Firefox', 'IE']
var TEST_BROWSERS = ((process.env.TEST_BROWSERS || '').replace(/^\s+|\s+$/, '') || 'PhantomJS').split(/\s*,\s*/g);
// project configuration
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
config: {
sources: 'lib',
tests: 'test',
dist: 'dist',
samples: 'example'
},
jshint: {
src: [
['<%=config.sources %>']
],
gruntfile: [
'Gruntfile.js'
],
options: {
jshintrc: true
}
},
jasmine_node: {
options: {
specNameMatcher: '.*Spec',
jUnit: {
report: true,
savePath : 'tmp/reports/jasmine',
useDotNotation: true,
consolidate: true
}
},
node: [ 'test/spec/node/' ]
},
karma: {
options: {
configFile: '<%= config.tests %>/config/karma.unit.js',
},
single: {
singleRun: true,
autoWatch: false,
browsers: TEST_BROWSERS,
browserify: {
watch: false,
debug: false,
transform: [ 'brfs' ]
}
},
unit: {
browsers: TEST_BROWSERS,
transform: [ 'brfs' ]
}
},
browserify: {
options: {
transform: [ 'brfs' ],
browserifyOptions: {
builtins: [ 'fs' ],
commondir: false
},
bundleOptions: {
detectGlobals: false,
insertGlobalVars: [],
debug: true
}
},
watch: {
options: {
alias: [
'node_modules/jquery:jquery',
'node_modules/lodash:lodash',
'node_modules/bpmn-moddle:bpmn/Model',
'<%= config.sources %>/main.js:bpmn',
'<%= config.sources %>/Viewer.js:bpmn/Viewer',
'<%= config.sources %>/Modeler.js:bpmn/Modeler'
],
watch: true,
keepalive: true
},
files: {
'<%= config.dist %>/bpmn.js': [ '<%= config.sources %>/**/*.js' ],
'<%= config.dist %>/bpmn-viewer.js': [ '<%= config.sources %>/lib/Viewer.js' ]
}
},
modeler: {
files: {
'<%= config.dist %>/bpmn.js': [ '<%= config.sources %>/**/*.js' ]
},
options: {
alias: [
'node_modules/jquery:jquery',
'node_modules/lodash:lodash',
'node_modules/bpmn-moddle:bpmn/Model',
'<%= config.sources %>/main.js:bpmn',
'<%= config.sources %>/Viewer.js:bpmn/Viewer',
'<%= config.sources %>/Modeler.js:bpmn/Modeler'
]
}
},
viewer: {
files: {
'<%= config.dist %>/bpmn-viewer.js': [ '<%= config.sources %>/lib/Viewer.js' ]
},
options: {
alias: [
'node_modules/jquery:jquery',
'node_modules/lodash:lodash',
'node_modules/bpmn-moddle:bpmn/Model',
'<%= config.sources %>/main.js:bpmn',
'<%= config.sources %>/Viewer.js:bpmn/Viewer'
]
}
}
},
copy: {
samples: {
files: [
// copy sample files
{
expand: true,
cwd: '<%= config.samples %>/',
src: ['**/*.*'],
dest: '<%= config.dist %>/<%= config.samples %>'
}
]
}
},
watch: {
samples: {
files: [ '<%= config.samples %>/**/*.*' ],
tasks: [ 'build:samples' ]
},
jasmine_node: {
files: [ '<%= config.sources %>/**/*.js', '<%= config.tests %>/spec/node/**/*.js' ],
tasks: [ 'jasmine_node' ]
}
},
jsdoc: {
dist: {
src: [ '<%= config.sources %>/**/*.js' ],
options: {
destination: 'docs/api',
plugins: [ 'plugins/markdown' ]
}
}
},
concurrent: {
'lib': [ 'build:lib', 'jshint' ],
'build': [ 'jshint', 'build', 'jsdoc' ]
},
connect: {
options: {
port: 9003,
livereload: 35726,
hostname: 'localhost'
},
livereload: {
options: {
open: true,
base: [
'<%= config.dist %>'
]
}
}
},
uglify: {
options: {
banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' +
'<%= grunt.template.today("yyyy-mm-dd") %> - ' +
'https://github.com/bpmn-io/bpmn-js */',
sourceMap: true,
sourceMapIncludeSources: true,
sourceMapIn: function(file) {
var content = grunt.file.read(file, { encoding: 'utf-8' });
var match = /\/\/# sourceMappingURL=data:application\/json;base64,(.*)/.exec(content);
if (match) {
var b = new Buffer(match[1] + '==', 'base64');
var s = b.toString();
grunt.file.write('tmp/sourceMap.json', s, { encoding: 'utf-8' });
return 'tmp/sourceMap.json';
} else {
return null;
}
}
},
modeler: {
files: {
'<%= config.dist %>/bpmn.min.js': [ '<%= config.dist %>/bpmn.js' ]
}
},
viewer: {
files: {
'<%= config.dist %>/bpmn-viewer.min.js': [ '<%= config.dist %>/bpmn-viewer.js' ]
}
}
}
});
// tasks
grunt.registerTask('test', [ 'jasmine_node', 'karma:single' ]);
grunt.registerTask('build', function(target, mode) {
mode = mode || 'prod';
if (target === 'lib') {
var tasks = [];
if (mode !== 'dev') {
tasks.push('uglify:modeler', 'uglify:viewer');
}
return grunt.task.run([ 'browserify:modeler', 'browserify:viewer' ].concat(tasks));
}
if (target === 'samples') {
return grunt.task.run(['copy:samples']);
}
if (!target || target === 'all') {
return grunt.task.run([ 'build:lib:' + mode, 'build:samples:' + mode ]);
}
});
grunt.registerTask('auto-build', [
'browserify:watch',
'connect:livereload',
'watch'
]);
grunt.registerTask('auto-test', [ 'karma:unit' ]);
grunt.registerTask('default', [ 'jshint', 'test', 'build', 'jsdoc' ]);
};