UNPKG

5.26 kBJavaScriptView Raw
1module.exports = function(grunt) {
2 require('load-grunt-tasks')(grunt);
3 var browsers = require('./grunt/browsers');
4
5 grunt.initConfig({
6 pkg: grunt.file.readJSON('package.json'),
7 concat: {
8 options: {
9 separator: ';',
10 },
11 dist: {
12 src: ['node_modules/babel-polyfill/dist/polyfill.js', 'dist/scxml.js'],
13 dest: 'dist/scxml.js'
14 },
15 },
16 uglify: {
17 options: {
18 banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
19 },
20 build: {
21 src: 'dist/scxml.js',
22 dest: 'dist/scxml.min.js'
23 }
24 },
25 babel: {
26 options: {
27 sourceMap: true,
28 presets: ['es2015'],
29 plugins : ['transform-es2015-modules-umd']
30 },
31 dist: {
32 files: {
33 'dist/scxml.js' : 'dist/scxml.js'
34 }
35 }
36 },
37 nodeunit: {
38 platform : ['test/platform-tests/node/*/runner.js']
39 },
40 karma: require('./grunt/config/karma/index.js')(grunt),
41 browserify : {
42 dev : {
43 options: {
44 browserifyOptions : {
45 debug : true,
46 standalone: 'scxml'
47 }
48 },
49 src: ['lib/runtime/facade.js'],
50 dest: 'dist/scxml.js'
51 }
52 },
53 express: {
54 dev: {
55 options: {
56 node_env: 'development',
57 livereload: true,
58 script: 'grunt/server.js',
59 port: 3000
60 }
61 },
62 prod: {
63 options: {
64 node_env: 'production',
65 script: 'grunt/server.js',
66 port: 3000
67 }
68 },
69 "prod-require": {
70 options: {
71 node_env: 'production-require',
72 script: 'grunt/server.js',
73 port: 3000
74 }
75 },
76 "scxml" : {
77 options: {
78 port : 42000,
79 script: 'test/node-test-server.js'
80 }
81 }
82 },
83 'saucelabs-custom': {
84 all: {
85 options: {
86 urls: [
87 'http://127.0.0.1:3000/'
88 ],
89 browsers: browsers,
90 build: process.env.TRAVIS_JOB_ID,
91 testname: 'custom tests',
92 throttled: 5,
93 statusCheckAttempts : -1,
94 sauceConfig: {
95 'video-upload-on-pass': false
96 }
97 }
98 }
99 },
100 gitcommit: {
101 dist: {
102 options: {
103 message: 'Updated dist files',
104 },
105 files: {
106 src: [
107 'dist/scxml.js',
108 'dist/scxml.js.map',
109 'dist/scxml.min.js'
110 ]
111 }
112 }
113 },
114 release: {
115 options: {
116 beforeRelease : ['build', 'gitcommit:dist'],
117 additionalFiles: ['bower.json'],
118 github: {
119 repo: 'jbeard4/SCION', //put your user/repo here
120 accessTokenVar: 'GITHUB_ACCESS_TOKEN', //ENVIRONMENT VARIABLE that contains GitHub Access Token
121 }
122 }
123 },
124 watch: {
125 options: {
126 livereload: false
127 },
128 express: {
129 files: [ 'lib/**/*.js' ],
130 tasks : ['browserify:dev'],
131 options: {
132 spawn: false
133 }
134 },
135 browserify: {
136 files: ["lib/**/*.js"],
137 tasks: ["browserify:dev"]
138 },
139 public: {
140 files: [""]
141 }
142 }
143
144 });
145
146 grunt.registerTask('mywatch',['express:dev:start','watch:express']);
147 grunt.registerTask('mywatch-prod',['build','express:prod:start','watch:express']);
148
149 grunt.registerTask('replace-reserved-words', 'String replace reserved words in built JavaScript.', function() {
150 var fs = require('fs');
151 var fileContents = fs.readFileSync('dist/scxml.js','utf8');
152 ['return','delete'].forEach(function(s){
153 fileContents = fileContents.replace(new RegExp('\\.\\b' + s + '\\b','g'), '["' + s + '"]');
154 });
155 fs.writeFileSync('dist/scxml.js', fileContents);
156 });
157
158 grunt.registerTask('scxml-test-client', 'Run scxml tests in node. ', function(){
159 var done = this.async();
160 //TODO: convert to submodule.
161 var startTests = require('scxml-test-framework');
162 startTests({
163 verbose : true,
164 report : console,
165 scxmlTestFiles : grunt.file.expand(require('./grunt/scxml-tests.json'))
166 }, done);
167 });
168
169 //TODO: copy babel-polyfill and nodeunit-browser into test/harness/browser/lib. I wish these were published via bower.
170 grunt.task.registerTask('test-semantics', ['express:scxml', 'scxml-test-client', 'express:scxml:stop']);
171 grunt.registerTask('build', [ 'browserify:dev', 'babel', 'replace-reserved-words', 'concat', 'uglify']);
172 grunt.registerTask('default', ['build']);
173 grunt.registerTask('test-node', ['nodeunit:platform', 'test-semantics']);
174 grunt.registerTask('test', [
175 'test-node'
176 ]);
177 grunt.registerTask('run-browser-tests-dev', ['express:dev', 'saucelabs-custom', 'express:dev:stop' ]);
178 grunt.registerTask('run-browser-tests-prod', ['express:prod', 'saucelabs-custom', 'express:prod:stop' ]);
179};
180