-
Notifications
You must be signed in to change notification settings - Fork 1
/
Gruntfile.js
127 lines (115 loc) · 2.81 KB
/
Gruntfile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
function mixin(destination) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
destination[key] = source[key];
}
}
return destination;
}
module.exports = function (grunt) {
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-ts');
grunt.loadNpmTasks('grunt-tslint');
grunt.loadNpmTasks('grunt-tsconfig');
var tsconfigContent = grunt.file.read('tsconfig.json');
var tsconfigFile = JSON.parse(tsconfigContent);
var tsOptions = mixin({}, tsconfigFile.compilerOptions, {
failOnTypeErrors: true,
fast: 'never'
});
var packageJson = grunt.file.readJSON('package.json');
grunt.initConfig({
name: packageJson.name,
version: packageJson.version,
packageJson: packageJson,
tsconfigFile: tsconfigFile,
all: [
"./app/*.ts",
"./app/**/*.ts",
"./app/**/**/*.ts",
"./app/*.tsx",
"./app/**/*.tsx",
"./app/**/**/*.tsx",
"./typings.d.ts"
],
skipTests: ['<%= all %>', '!tests/**/*.ts'],
staticTestFiles: ['tests/**/*.{html,css,json,xml}'],
devDirectory: '<%= tsconfigFile.compilerOptions.outDir %>',
ts: {
options: tsOptions,
dev: {
src: ['<%= all %>']
},
dist: {
options: {
inlineSourceMap: true,
inlineSources: true
},
outDir: 'dist',
src: ['<%= skipTests %>']
}
},
tslint: {
options: {
configuration: grunt.file.readJSON('tslint.json')
},
src: {
src: [
'<%= all %>',
'!typings/*.ts',
'!typings/**/*.ts',
'!tests/typings/**/*.ts'
]
}
},
tsconfig: {
make: {
options: {
filesGlob: '<%= all %>',
additionalOptions: {
compilerOptions: {
"module": "amd",
"noImplicitAny": true,
"outDir": "app",
"removeComments": false,
"sourceMap": true,
"jsx": "react",
"target": "es5",
"moduleResolution": "node",
"isolatedModules": false,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"declaration": false,
"noLib": false,
"preserveConstEnums": true,
"suppressImplicitAnyIndexErrors": true
},
}
}
}
},
watch: {
grunt: {
options: {
reload: true
},
files: ['Gruntfile.js']
},
src: {
options: {
atBegin: true
},
files: ['<%= all %>', '<%= staticTestFiles %>'],
tasks: [
'dev'
]
}
}
});
grunt.registerTask('dev', [
'tsconfig',
'tslint',
'ts:dev'
]);
};