UNPKG

7.05 kBJavaScriptView Raw
1module.exports = function(grunt) {
2
3 var compileType = function() {
4 var type = this.data.type;
5 var template = grunt.file.read('templates/types.js');
6 var anon = grunt.file.read('templates/anon.js');
7 var files = grunt.file.expand([
8 'src/' + type + '/*.js'
9 ]);
10 var regexp = /\}\(this, function \(numeral\) \{\s([\s\S]+)(?:\s\}\)\);)/;
11 var content = '';
12 var file;
13 var i;
14
15 for (i = 0; i < files.length; i++) {
16 file = grunt.file.read(files[i]);
17
18 content += '\n' + grunt.template.process(anon, {
19 data: {
20 content: file.match(regexp)[1]
21 }
22 }) + '\n';
23 }
24
25 grunt.file.write('temp/' + type + '.js', content);
26
27 if (type === 'locales') {
28 grunt.file.write('locales.js', grunt.template.process(template, {
29 data: {
30 type: type,
31 content: content
32 }
33 }));
34 }
35 },
36 compileNumeral = function() {
37 var regexp = /([\s])return numeral;(?:\s\}\)\);)/;
38 var numeral = grunt.file.read('src/numeral.js');
39 var formats = grunt.file.read('temp/formats.js');
40 var index = numeral.indexOf('return numeral;');
41
42 numeral = numeral.substr(0, index) + '\n' + formats + numeral.substr(index);
43
44 grunt.file.write('numeral.js', numeral);
45 };
46
47 require('load-grunt-tasks')(grunt);
48
49 grunt.initConfig({
50 mochaTest : {
51 all: [
52 'tests/numeral.js',
53 'tests/formats/*.js',
54 'tests/locales/*.js'
55 ]
56 },
57 karma: {
58 options: {
59 files: [
60 'numeral.js',
61 'locales.js',
62 'tests/numeral.js',
63 'tests/formats/*.js',
64 'tests/locales/*.js'
65 ],
66 frameworks: [
67 'mocha',
68 'chai'
69 ],
70 singleRun: true,
71 autoWatch: false
72 },
73 local: {
74 browsers: [
75 'Chrome',
76 'Firefox'
77 ]
78 },
79 ci: {
80 configFile: 'karma-ci.conf.js'
81 }
82 },
83 copy: {
84 locales: {
85 files: [
86 {
87 expand: true,
88 cwd: 'src/',
89 src: [
90 'locales/*.js'
91 ],
92 dest: './'
93 }
94 ]
95 }
96 },
97 compile: {
98 locales: {
99 type: 'locales'
100 },
101 formats: {
102 type: 'formats'
103 }
104 },
105 uglify: {
106 min: {
107 files: [
108 {
109 expand: true,
110 cwd: 'src/',
111 src: [
112 'locales/*.js'
113 ],
114 dest: 'min/',
115 ext: '.min.js'
116 },
117 {
118 expand: true,
119 src: [
120 'numeral.js',
121 'locales.js'
122 ],
123 dest: 'min/',
124 ext: '.min.js'
125 }
126 ]
127 },
128 options: {
129 preserveComments: 'some'
130 }
131 },
132 jshint: {
133 all: [
134 'Gruntfile.js',
135 'src/**/*.js'
136 ],
137 options: {
138 'node': true,
139 'browser': true,
140 'curly': true,
141 'devel': false,
142 'eqeqeq': true,
143 'eqnull': true,
144 'newcap': true,
145 'noarg': true,
146 'undef': true,
147 'sub': true,
148 'strict': false,
149 'quotmark': 'single',
150 'globals': {
151 'define': true
152 }
153 }
154 }
155 });
156
157 grunt.registerTask('default', [
158 'test'
159 ]);
160
161 grunt.registerMultiTask('compile', compileType);
162
163 grunt.registerTask('compile:numeral', compileNumeral);
164
165 grunt.registerTask('build', [
166 'jshint',
167 'compile',
168 'compile:numeral',
169 'copy'
170 ]);
171
172 grunt.registerTask('test', [
173 'build',
174 'mochaTest',
175 'karma:local'
176 ]);
177
178 grunt.registerTask('test:npm', [
179 'build',
180 'mochaTest'
181 ]);
182
183 grunt.registerTask('test:browser', [
184 'build',
185 'karma:local'
186 ]);
187
188 grunt.registerTask('dist', [
189 'build',
190 'uglify'
191 ]);
192
193 grunt.registerTask('version', function (version) {
194 if (!version || version.split('.').length !== 3) {
195 grunt.fail.fatal('malformed version. Use\n\n grunt version:1.2.3');
196 }
197
198 grunt.config('string-replace.json', {
199 files: {
200 'package.json': 'package.json',
201 'component.json': 'component.json',
202 'bower.json': 'bower.json'
203 },
204 options: {
205 replacements: [
206 {
207 pattern: /"version": .*/,
208 replacement: '"version": "' + version + '",'
209 }
210 ]
211 }
212 });
213
214 grunt.config('string-replace.numeral', {
215 files: {
216 'src/numeral.js': 'src/numeral.js'
217 },
218 options: {
219 replacements: [
220 {
221 pattern: /version : .*/,
222 replacement: 'version : ' + version
223 },
224 {
225 pattern: /VERSION = .*/,
226 replacement: 'VERSION = \'' + version + '\','
227 }
228 ]
229 }
230 });
231
232 grunt.config('string-replace.templates', {
233 files: {
234 'templates/types.js': 'templates/types.js'
235 },
236 options: {
237 replacements: [
238 {
239 pattern: /: .*/,
240 replacement: ': ' + version
241 }
242 ]
243 }
244 });
245
246 grunt.task.run([
247 'string-replace:json',
248 'string-replace:templates',
249 'string-replace:numeral'
250 ]);
251 });
252
253 // Travis CI task.
254 grunt.registerTask('travis', [
255 'build',
256 'mochaTest',
257 'karma:ci'
258 ]);
259};