|
1 |
| -module.exports = function (grunt) { |
2 |
| - require('matchdep').filter('grunt-*').forEach(grunt.loadNpmTasks); |
| 1 | +const extensionManifest = require('./manifest.json'); |
| 2 | + |
| 3 | +module.exports = grunt => { |
| 4 | + grunt.loadNpmTasks('grunt-contrib-copy'); |
| 5 | + grunt.loadNpmTasks('grunt-contrib-stylus'); |
| 6 | + grunt.loadNpmTasks('grunt-contrib-pug'); |
| 7 | + grunt.loadNpmTasks('grunt-webpack'); |
| 8 | + grunt.loadNpmTasks('grunt-contrib-watch'); |
| 9 | + grunt.loadNpmTasks('grunt-contrib-clean'); |
| 10 | + grunt.loadNpmTasks('grunt-mocha-test'); |
| 11 | + grunt.loadNpmTasks('grunt-contrib-connect'); |
| 12 | + grunt.loadNpmTasks('grunt-exec'); |
| 13 | + grunt.loadNpmTasks('grunt-crx'); |
3 | 14 |
|
4 | 15 | grunt.initConfig({
|
5 |
| - // clean: [ |
6 |
| - // 'dist/' |
7 |
| - // ], |
8 |
| - watch: { |
9 |
| - min: { |
10 |
| - options: { |
11 |
| - livereload: true |
12 |
| - }, |
13 |
| - files: ['Gruntfile.js', 'js/**/*.js', 'stylus/**/*.styl', 'views/**/*.jade', 'views/**/*.md'], |
14 |
| - tasks: ['build'] |
| 16 | + clean: { |
| 17 | + website: [ 'dist/website' ], |
| 18 | + extension: ['dist/extension'] |
| 19 | + }, |
| 20 | + |
| 21 | + copy: { |
| 22 | + website: { |
| 23 | + files: [{ |
| 24 | + expand: true, |
| 25 | + cwd: 'img/website', |
| 26 | + src: ['**'], |
| 27 | + dest: 'dist/website/img' |
| 28 | + }, { |
| 29 | + expand: true, |
| 30 | + src: ['fonts/**', 'opensearch.xml'], |
| 31 | + dest: 'dist/website' |
| 32 | + }, { |
| 33 | + expand: true, |
| 34 | + flatten: true, |
| 35 | + src: [ |
| 36 | + 'node_modules/bootstrap/dist/css/bootstrap.min.css', |
| 37 | + 'node_modules/codemirror/lib/codemirror.css', |
| 38 | + 'node_modules/codemirror/addon/lint/lint.css', |
| 39 | + 'css/budicon.css', |
| 40 | + 'css/google-roboto-mono.css' |
| 41 | + ], |
| 42 | + dest: 'dist/website/css/' |
| 43 | + }] |
| 44 | + }, |
| 45 | + extension: { |
| 46 | + files: [{ |
| 47 | + expand: true, |
| 48 | + flatten: true, |
| 49 | + src: ['manifest.json', 'html/extension/bg.html'], |
| 50 | + dest: 'dist/extension' |
| 51 | + }, { |
| 52 | + expand: true, |
| 53 | + cwd: 'img/extension', |
| 54 | + src: ['**'], |
| 55 | + dest: 'dist/extension/img' |
| 56 | + }, { |
| 57 | + expand: true, |
| 58 | + src: ['fonts/**'], |
| 59 | + dest: 'dist/extension' |
| 60 | + }, { |
| 61 | + expand: true, |
| 62 | + flatten: true, |
| 63 | + src: [ |
| 64 | + 'node_modules/bootstrap/dist/css/bootstrap.min.css', |
| 65 | + 'node_modules/codemirror/lib/codemirror.css', |
| 66 | + 'node_modules/codemirror/addon/lint/lint.css', |
| 67 | + 'css/budicon.css', |
| 68 | + 'css/google-roboto-mono.css' |
| 69 | + ], |
| 70 | + dest: 'dist/extension/css/' |
| 71 | + }] |
| 72 | + } |
| 73 | + }, |
| 74 | + |
| 75 | + crx: { |
| 76 | + pack: { |
| 77 | + src: "dist/extension/**/*", |
| 78 | + dest: 'dist/chrome-jwt-debugger-extension-v' + |
| 79 | + `${extensionManifest.version}.zip` |
15 | 80 | }
|
16 | 81 | },
|
17 |
| - connect: { |
18 |
| - dev: { |
19 |
| - options: { |
20 |
| - hostname: '0.0.0.0', |
21 |
| - livereload: true, |
22 |
| - protocol: 'http', |
23 |
| - passphrase: '' |
24 |
| - } |
| 82 | + |
| 83 | + exec: { |
| 84 | + firefoxExtensionPack: { |
| 85 | + command: 'node_modules/web-ext/bin/web-ext build ' + |
| 86 | + '--source-dir=dist/extension --artifacts-dir=dist ' + |
| 87 | + '--overwrite-dest' |
25 | 88 | },
|
| 89 | + renameFirefoxExtension: { |
| 90 | + command: `mv dist/jwt_debugger-${extensionManifest.version}.zip ` + |
| 91 | + 'dist/firefox-jwt-debugger-extension-' + |
| 92 | + `v${extensionManifest.version}.zip` |
| 93 | + } |
26 | 94 | },
|
| 95 | + |
27 | 96 | stylus: {
|
28 |
| - compile: { |
| 97 | + website: { |
| 98 | + files: { |
| 99 | + 'dist/website/css/index.css': 'stylus/website/index.styl' |
| 100 | + } |
| 101 | + }, |
| 102 | + extension: { |
29 | 103 | files: {
|
30 |
| - 'css/app.css': 'stylus/app.styl' |
| 104 | + 'dist/extension/css/index.css': 'stylus/extension/index.styl' |
31 | 105 | }
|
32 | 106 | }
|
33 | 107 | },
|
34 |
| - jade: { |
35 |
| - compile: { |
| 108 | + |
| 109 | + pug: { |
| 110 | + website: { |
36 | 111 | files: {
|
37 |
| - 'index.html': 'views/index.jade', |
38 |
| - 'introduction/index.html': 'views/introduction.jade' |
| 112 | + 'dist/website/index.html': 'views/website/index.pug', |
| 113 | + 'dist/website/introduction/index.html': |
| 114 | + 'views/website/introduction.pug' |
| 115 | + } |
| 116 | + }, |
| 117 | + extension: { |
| 118 | + files: { |
| 119 | + 'dist/extension/index.html': 'views/extension/index.pug' |
| 120 | + } |
| 121 | + } |
| 122 | + }, |
| 123 | + |
| 124 | + webpack: { |
| 125 | + websiteProd: require('./webpack.website-prod.js'), |
| 126 | + websiteDev: require('./webpack.website-dev.js'), |
| 127 | + extensionProd: require('./webpack.extension-prod.js'), |
| 128 | + extensionDev: require('./webpack.extension-dev.js'), |
| 129 | + unitTests: require('./webpack.website-unit-tests.js') |
| 130 | + }, |
| 131 | + |
| 132 | + watch: { |
| 133 | + websiteSrc: { |
| 134 | + files: ['src/*.js', 'src/website/**', 'src/editor/**'], |
| 135 | + tasks: 'webpack:websiteDev' |
| 136 | + }, |
| 137 | + extensionSrc: { |
| 138 | + files: ['src/*.js', 'src/extension/**', 'src/editor/**'], |
| 139 | + tasks: 'webpack:extensionDev' |
| 140 | + }, |
| 141 | + websiteImg: { |
| 142 | + files: [ 'img/website/**' ], |
| 143 | + tasks: 'copy:website' |
| 144 | + }, |
| 145 | + extensionImg: { |
| 146 | + files: [ 'img/extension/**' ], |
| 147 | + tasks: 'copy:extension' |
| 148 | + }, |
| 149 | + opensearch: { |
| 150 | + files: 'opensearch.xml', |
| 151 | + tasks: 'copy:website' |
| 152 | + }, |
| 153 | + assets: { |
| 154 | + files: [ |
| 155 | + 'fonts/**', |
| 156 | + 'node_modules/bootstrap/dist/css/bootstrap.min.css', |
| 157 | + 'node_modules/codemirror/lib/codemirror.css', |
| 158 | + 'node_modules/codemirror/addon/lint/lint.css', |
| 159 | + 'css/budicon.css' |
| 160 | + ], |
| 161 | + tasks: 'copy' |
| 162 | + }, |
| 163 | + websiteViews: { |
| 164 | + files: [ |
| 165 | + 'stylus/*.styl', |
| 166 | + 'stylus/website/**', |
| 167 | + 'views/*.pug', |
| 168 | + 'views/website/**' |
| 169 | + ], |
| 170 | + tasks: ['build-website-views'] |
| 171 | + }, |
| 172 | + extensionViews: { |
| 173 | + files: [ |
| 174 | + 'stylus/*.styl', |
| 175 | + 'stylus/extension/**', |
| 176 | + 'views/*.pug', |
| 177 | + 'views/extension/**' |
| 178 | + ], |
| 179 | + tasks: ['build-extension-views'] |
| 180 | + } |
| 181 | + }, |
| 182 | + |
| 183 | + mochaTest: { |
| 184 | + unit: { |
| 185 | + options: {}, |
| 186 | + src: ['dist/test/unit-tests.js'] |
| 187 | + }, |
| 188 | + functional: { |
| 189 | + options: { |
| 190 | + // Higher default timeout to account for some animations |
| 191 | + timeout: 10000 |
| 192 | + }, |
| 193 | + src: ['test/functional/**.js'] |
| 194 | + } |
| 195 | + }, |
| 196 | + |
| 197 | + connect: { |
| 198 | + functionalTests: { |
| 199 | + options: { |
| 200 | + hostname: '127.0.0.1', |
| 201 | + base: 'dist/website', |
39 | 202 | }
|
40 | 203 | }
|
41 | 204 | },
|
42 |
| - // useminPrepare: { |
43 |
| - // html: 'html/index.html', |
44 |
| - // options: { |
45 |
| - // root: '.', |
46 |
| - // dest: '.' |
47 |
| - // } |
48 |
| - // }, |
49 |
| - // usemin: { |
50 |
| - // html: 'index.html', |
51 |
| - // options: { |
52 |
| - // assetsDir: ['dist/'] |
53 |
| - // } |
54 |
| - // }, |
55 |
| - // htmlmin: { |
56 |
| - // dist: { |
57 |
| - // files: { 'index.html': 'html/index.html' } |
58 |
| - // } |
59 |
| - // }, |
60 |
| - mocha_phantomjs: { |
61 |
| - all: ['test/**/*.html'] |
62 |
| - } |
63 | 205 | });
|
64 | 206 |
|
65 |
| - grunt.registerTask('build', ['stylus', 'jade']); |
66 |
| - // grunt.registerTask('build', ['clean', 'stylus', 'jade', 'useminPrepare', 'concat', 'uglify', 'cssmin', 'htmlmin', 'usemin']); |
67 |
| - grunt.registerTask('test', ['build', 'mocha_phantomjs']); |
68 |
| - grunt.registerTask('default', ['build', 'connect', 'watch']); |
| 207 | + grunt.registerTask('build-website-views', [ |
| 208 | + 'stylus:website', |
| 209 | + 'pug:website' |
| 210 | + ]); |
| 211 | + |
| 212 | + grunt.registerTask('build-extension-views', [ |
| 213 | + 'stylus:extension', |
| 214 | + 'pug:extension' |
| 215 | + ]); |
| 216 | + |
| 217 | + grunt.registerTask('build-website', [ |
| 218 | + 'clean:website', |
| 219 | + 'copy:website', |
| 220 | + 'build-website-views', |
| 221 | + 'webpack:websiteProd' |
| 222 | + ]); |
| 223 | + |
| 224 | + grunt.registerTask('build-website-dev', [ |
| 225 | + 'clean:website', |
| 226 | + 'copy:website', |
| 227 | + 'build-website-views', |
| 228 | + 'webpack:websiteDev' |
| 229 | + ]); |
| 230 | + |
| 231 | + grunt.registerTask('build-extension', [ |
| 232 | + 'clean:extension', |
| 233 | + 'copy:extension', |
| 234 | + 'build-extension-views', |
| 235 | + 'webpack:extensionProd', |
| 236 | + 'crx:pack', |
| 237 | + 'exec:firefoxExtensionPack', |
| 238 | + 'exec:renameFirefoxExtension' |
| 239 | + ]); |
| 240 | + |
| 241 | + grunt.registerTask('build-extension-dev', [ |
| 242 | + 'clean:extension', |
| 243 | + 'copy:extension', |
| 244 | + 'build-extension-views', |
| 245 | + 'webpack:extensionDev' |
| 246 | + ]); |
| 247 | + |
| 248 | + grunt.registerTask('build', ['build-website', 'build-extension']); |
| 249 | + |
| 250 | + grunt.registerTask('build-dev', [ |
| 251 | + 'build-website-dev', |
| 252 | + 'build-extension-dev' |
| 253 | + ]); |
| 254 | + |
| 255 | + grunt.registerTask('unit-tests', ['webpack:unitTests', 'mochaTest:unit']); |
| 256 | + |
| 257 | + grunt.registerTask('functional-tests', [ |
| 258 | + 'build-website-dev', |
| 259 | + 'connect:functionalTests', |
| 260 | + 'mochaTest:functional' |
| 261 | + ]); |
| 262 | + |
| 263 | + grunt.registerTask('test', ['unit-tests', 'functional-tests']); |
| 264 | + |
| 265 | + grunt.registerTask('default', ['build-dev', 'watch']); |
69 | 266 | };
|
0 commit comments