1
+ "use strict" ;
2
+
3
+ //******************************************************************************
4
+ //* DEPENDENCIES
5
+ //******************************************************************************
6
+ var gulp = require ( "gulp" ) ,
7
+ browserify = require ( "browserify" ) ,
8
+ sass = require ( 'gulp-sass' ) ,
9
+ source = require ( "vinyl-source-stream" ) ,
10
+ buffer = require ( "vinyl-buffer" ) ,
11
+ tslint = require ( "gulp-tslint" ) ,
12
+ tsc = require ( "gulp-typescript" ) ,
13
+ sourcemaps = require ( "gulp-sourcemaps" ) ,
14
+ uglify = require ( "gulp-uglify" ) ,
15
+ runSequence = require ( "run-sequence" ) ,
16
+ mocha = require ( "gulp-mocha" ) ,
17
+ istanbul = require ( "gulp-istanbul" ) ,
18
+ browserSync = require ( 'browser-sync' ) . create ( ) ;
19
+
20
+ //******************************************************************************
21
+ //* LINT
22
+ //******************************************************************************
23
+ gulp . task ( "lint" , function ( ) {
24
+ return gulp . src ( [
25
+ "source/**/**.ts" ,
26
+ "test/**/**.test.ts"
27
+ ] )
28
+ . pipe ( tslint ( { } ) )
29
+ . pipe ( tslint . report ( "verbose" ) ) ;
30
+ } ) ;
31
+
32
+ //******************************************************************************
33
+ //* BUILD
34
+ //******************************************************************************
35
+ var tsProject = tsc . createProject ( "tsconfig.json" ) ;
36
+
37
+ gulp . task ( "build-app" , function ( ) {
38
+ return gulp . src ( [
39
+ "source/**/**.ts" ,
40
+ "typings/main.d.ts/" ,
41
+ "source/interfaces/interfaces.d.ts"
42
+ ] )
43
+ . pipe ( tsc ( tsProject ) )
44
+ . js . pipe ( gulp . dest ( "source/" ) ) ;
45
+ } ) ;
46
+
47
+ var tsTestProject = tsc . createProject ( "tsconfig.json" ) ;
48
+
49
+ gulp . task ( "build-test" , function ( ) {
50
+ return gulp . src ( [
51
+ "test/**/*.ts" ,
52
+ "typings/main.d.ts/" ,
53
+ "source/interfaces/interfaces.d.ts"
54
+ ] )
55
+ . pipe ( tsc ( tsTestProject ) )
56
+ . js . pipe ( gulp . dest ( "test/" ) ) ;
57
+ } ) ;
58
+
59
+ gulp . task ( 'build-sass' , function ( ) {
60
+ return gulp . src ( [
61
+ "source/assets/sass/**/*.scss"
62
+ ] )
63
+ . pipe ( sass ( ) . on ( 'error' , sass . logError ) )
64
+ . pipe ( gulp . dest ( 'dist/assets/css' ) ) ;
65
+ } ) ;
66
+
67
+ gulp . task ( "build" , function ( cb ) {
68
+ runSequence ( [ "build-app" , "build-test" , "build-sass" ] , cb ) ;
69
+ } ) ;
70
+
71
+
72
+ //******************************************************************************
73
+ //* TEST
74
+ //******************************************************************************
75
+ gulp . task ( "istanbul:hook" , function ( ) {
76
+ return gulp . src ( [ 'source/**/*.js' ] )
77
+ // Covering files
78
+ . pipe ( istanbul ( ) )
79
+ // Force `require` to return covered files
80
+ . pipe ( istanbul . hookRequire ( ) ) ;
81
+ } ) ;
82
+
83
+ gulp . task ( "test" , [ "istanbul:hook" ] , function ( ) {
84
+ return gulp . src ( 'test/**/*.test.js' )
85
+ . pipe ( mocha ( { ui : 'bdd' } ) )
86
+ . pipe ( istanbul . writeReports ( ) ) ;
87
+ } ) ;
88
+
89
+ //******************************************************************************
90
+ //* BUNDLE
91
+ //******************************************************************************
92
+ gulp . task ( "bundle" , function ( ) {
93
+
94
+ var libraryName = "app" ;
95
+ var mainTsFilePath = "source/app.js" ;
96
+ var outputFolder = "dist/" ;
97
+ var outputFileName = libraryName + ".min.js" ;
98
+
99
+ var bundler = browserify ( {
100
+ debug : true ,
101
+ standalone : libraryName
102
+ } ) ;
103
+
104
+ return bundler . add ( mainTsFilePath )
105
+ . bundle ( )
106
+ . pipe ( source ( outputFileName ) )
107
+ . pipe ( buffer ( ) )
108
+ . pipe ( sourcemaps . init ( { loadMaps : true } ) )
109
+ . pipe ( uglify ( ) )
110
+ . pipe ( sourcemaps . write ( './' ) )
111
+ . pipe ( gulp . dest ( outputFolder ) ) ;
112
+ } ) ;
113
+
114
+ //******************************************************************************
115
+ //* DEV SERVER
116
+ //******************************************************************************
117
+ gulp . task ( "watch" , [ "default" ] , function ( ) {
118
+
119
+ browserSync . init ( {
120
+ server : "./"
121
+ } ) ;
122
+
123
+ gulp . watch ( [ "source/**/**.ts" , "test/**/*.ts" ] , [ "default" ] ) ;
124
+ gulp . watch ( "dist/*.js" ) . on ( 'change' , browserSync . reload ) ;
125
+ } ) ;
126
+
127
+ //******************************************************************************
128
+ //* DEFAULT
129
+ //******************************************************************************
130
+ gulp . task ( "default" , function ( cb ) {
131
+ runSequence ( "lint" , "build" , "test" , "bundle" , cb ) ;
132
+ } ) ;
0 commit comments