1
+ var fs = require ( "fs" ) ;
2
+ var tsfmt = require ( "typescript-formatter" ) ;
3
+
1
4
// This file defines grunt tasks used by [Grunt.js](http://gruntjs.com/sample-gruntfile)
2
5
module . exports = function ( grunt ) {
3
6
@@ -25,6 +28,8 @@ module.exports = function ( grunt ) {
25
28
options : { force : true } ,
26
29
dist : [ "dist/" ] ,
27
30
jsdoc : [ "dist/jsdoc/" ] ,
31
+ jsdocjson : [ "dist/doc.json" ] ,
32
+ tsd : [ "dist/gitgraph.d.ts" ] ,
28
33
release : [ "build/" , "docs/" ]
29
34
} ,
30
35
@@ -41,6 +46,10 @@ module.exports = function ( grunt ) {
41
46
release : {
42
47
src : [ "src/gitgraph.js" ] ,
43
48
dest : "build/gitgraph.js"
49
+ } ,
50
+ tsd : {
51
+ src : [ "dist/gitgraph.d.ts" ] ,
52
+ dest : "dist/gitgraph.d.ts"
44
53
}
45
54
} ,
46
55
@@ -91,6 +100,14 @@ module.exports = function ( grunt ) {
91
100
destination : "dist/docs"
92
101
}
93
102
} ,
103
+ json : {
104
+ src : [ "dist/jsdoc/src/*.js" , "README.md" ] ,
105
+ options : {
106
+ configure : ".jsdocrc" ,
107
+ destination : "dist/doc.json" ,
108
+ template : "./node_modules/jsdoc-json"
109
+ }
110
+ } ,
94
111
release : {
95
112
src : [ "dist/jsdoc/src/*.js" , "README.md" ] ,
96
113
options : {
@@ -190,21 +207,56 @@ module.exports = function ( grunt ) {
190
207
// `grunt lint` will check code by running JSHint and unit tests over it.
191
208
grunt . registerTask ( "test" , [ "jshint" , "jasmine" ] ) ;
192
209
193
- // `grunt docs ` will create non-versioned documentation for development use.
210
+ // `grunt doc ` will create non-versioned documentation for development use.
194
211
grunt . registerTask ( "doc" , [
195
212
"string-replace:jsdoc" ,
196
213
"jsdoc:dist" ,
197
214
"clean:jsdoc"
198
215
] ) ;
199
216
217
+ // `grunt doc:json` will create non-versioned documentation for development use.
218
+ grunt . registerTask ( "doc:json" , [
219
+ "string-replace:jsdoc" ,
220
+ "jsdoc:json" ,
221
+ "clean:jsdoc"
222
+ ] ) ;
223
+
224
+ // `grunt parse:tsd` will parse /dist/doc.json to /dist/gitgraph.d.ts
225
+ grunt . registerTask ( "parse:tsd" , function ( dest ) {
226
+ const done = this . async ( ) ;
227
+ const data = JSON . parse ( fs . readFileSync ( "./dist/doc.json" ) ) ;
228
+ const fileContent = require ( "./scripts/json2tsd" ) ( data ) . generate ( ) ;
229
+ fs . writeFile ( `./${ dest } /gitgraph.d.ts` , fileContent , ( ) => {
230
+ tsfmt . processFiles ( [ `./${ dest } /gitgraph.d.ts` ] , {
231
+ replace : true
232
+ } ) . then ( done ) ;
233
+ } ) ;
234
+ } ) ;
235
+
236
+ // `grunt tsd` will generate /dist/gitgraph.d.ts
237
+ grunt . registerTask ( "tsd" , [
238
+ "doc:json" ,
239
+ "parse:tsd:dist" ,
240
+ "concat:tsd" ,
241
+ "clean:jsdocjson"
242
+ ] ) ;
243
+
244
+ // `grunt tsd:release` will generate /build/gitgraph.d.ts
245
+ grunt . registerTask ( "tsd:release" , [
246
+ "doc:json" ,
247
+ "parse:tsd:build" ,
248
+ "clean:jsdocjson"
249
+ ] ) ;
250
+
200
251
// `grunt dist` will create a non-versioned new release for development use.
201
252
grunt . registerTask ( "dist" , [
202
253
"test" ,
203
254
"clean:dist" ,
204
255
"copy:dist" ,
205
256
"concat:dist" ,
206
257
"uglify:dist" ,
207
- "doc"
258
+ "doc" ,
259
+ "tsd"
208
260
] ) ;
209
261
210
262
// `grunt release` will create a new release of the source code.
@@ -216,7 +268,8 @@ module.exports = function ( grunt ) {
216
268
"uglify:release" ,
217
269
"string-replace:jsdoc" ,
218
270
"jsdoc:release" ,
219
- "clean:jsdoc"
271
+ "clean:jsdoc" ,
272
+ "tsd:release"
220
273
] ) ;
221
274
222
275
// `grunt server` will open a live reload server in your favorite browser.
0 commit comments