blob: 36fdded65b9648303506e310a9ea44258d2e1305 [file] [log] [blame]
Matteo Scandoloe53ee052015-11-03 14:32:00 +01001'use strict';
2
3var gulp = require('gulp');
4var browserSync = require('browser-sync').create();
5var inject = require('gulp-inject');
6var runSequence = require('run-sequence');
7var angularFilesort = require('gulp-angular-filesort');
8var babel = require('gulp-babel');
9var wiredep = require('wiredep').stream;
10var httpProxy = require('http-proxy');
Matteo Scandoloce954e52015-11-04 11:31:05 +010011var del = require('del');
Matteo Scandolob7c91cf2016-03-29 14:23:20 -070012var sass = require('gulp-sass');
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -070013var fs = require('fs');
14var path = require('path');
Matteo Scandoloe53ee052015-11-03 14:32:00 +010015
Matteo Scandolo7ed6c762015-11-30 17:25:39 -080016const environment = process.env.NODE_ENV;
17
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -070018if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
19 if(!environment){
20 throw new Error('You should define a default.js config in /views/env folder.');
21 }
22 else{
23 throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
24 }
Matteo Scandolo9323b1b2015-11-25 12:08:41 -080025}
26
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -070027var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
28
Matteo Scandoloe53ee052015-11-03 14:32:00 +010029var proxy = httpProxy.createProxyServer({
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -070030 target: conf.host
Matteo Scandoloe53ee052015-11-03 14:32:00 +010031});
32
33
34proxy.on('error', function(error, req, res) {
35 res.writeHead(500, {
36 'Content-Type': 'text/plain'
37 });
38
39 console.error('[Proxy]', error);
40});
41
42module.exports = function(options){
43
Matteo Scandoloe53ee052015-11-03 14:32:00 +010044 gulp.task('browser', function() {
45 browserSync.init({
Matteo Scandolof1072ed2015-11-09 11:25:40 +010046 startPath: '#/',
Matteo Scandoloce954e52015-11-04 11:31:05 +010047 snippetOptions: {
48 rule: {
49 match: /<!-- browserSync -->/i
50 }
51 },
Matteo Scandoloe53ee052015-11-03 14:32:00 +010052 server: {
53 baseDir: options.src,
54 routes: {
Matteo Scandoloa3839e32016-04-28 16:20:53 -070055 '/xos/core/static': options.static + '../../static/'
Matteo Scandoloe53ee052015-11-03 14:32:00 +010056 },
57 middleware: function(req, res, next){
Matteo Scandolo07760222015-11-06 09:34:03 +010058 if(
Matteo Scandolo8cc22e42016-04-12 09:00:04 -070059 req.url.indexOf('/api/') !== -1
Matteo Scandolo07760222015-11-06 09:34:03 +010060 ){
Matteo Scandolo9323b1b2015-11-25 12:08:41 -080061 if(conf.xoscsrftoken && conf.xossessionid){
62 req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
63 req.headers['x-csrftoken'] = conf.xoscsrftoken;
64 }
Matteo Scandoloe53ee052015-11-03 14:32:00 +010065 proxy.web(req, res);
66 }
67 else{
68 next();
69 }
70 }
71 }
72 });
73
Matteo Scandolo0a0f5f32015-11-04 15:15:17 +010074 gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
75 gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
76 browserSync.reload();
77 });
Matteo Scandolo73a3c2b2015-11-04 11:34:44 +010078 gulp.watch(options.src + '**/*.html', function(){
79 browserSync.reload();
80 });
Matteo Scandolob7c91cf2016-03-29 14:23:20 -070081 gulp.watch(options.css + '**/*.css', function(){
82 browserSync.reload();
83 });
84 gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
85 browserSync.reload();
86 });
Matteo Scandoloa3839e32016-04-28 16:20:53 -070087
88 gulp.watch([
89 options.helpers + 'ngXosHelpers.js',
90 options.static + '../../static/xosNgLib.css'
91 ], function(){
92 browserSync.reload();
93 });
Matteo Scandolob7c91cf2016-03-29 14:23:20 -070094 });
95
96 // compile sass
97 gulp.task('sass', function () {
98 return gulp.src(`${options.sass}/**/*.scss`)
99 .pipe(sass().on('error', sass.logError))
100 .pipe(gulp.dest(options.css));
Matteo Scandoloe53ee052015-11-03 14:32:00 +0100101 });
102
103 // transpile js with sourceMaps
104 gulp.task('babel', function(){
105 return gulp.src(options.scripts + '**/*.js')
106 .pipe(babel({sourceMaps: true}))
107 .pipe(gulp.dest(options.tmp));
108 });
109
110 // inject scripts
Matteo Scandoloba2af3d2015-11-06 10:35:20 +0100111 gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
Matteo Scandoloe53ee052015-11-03 14:32:00 +0100112 return gulp.src(options.src + 'index.html')
113 .pipe(
114 inject(
115 gulp.src([
116 options.tmp + '**/*.js',
Matteo Scandolo195dde92016-07-25 16:43:16 -0700117 options.helpers + 'ngXosHelpers.min.js'
Matteo Scandoloe53ee052015-11-03 14:32:00 +0100118 ])
119 .pipe(angularFilesort()),
120 {
121 ignorePath: [options.src, '/../../ngXosLib']
122 }
123 )
124 )
125 .pipe(gulp.dest(options.src));
126 });
127
Matteo Scandoloba2af3d2015-11-06 10:35:20 +0100128 // inject CSS
129 gulp.task('injectCss', function(){
130 return gulp.src(options.src + 'index.html')
131 .pipe(
132 inject(
Matteo Scandoloa3839e32016-04-28 16:20:53 -0700133 gulp.src([
134 options.src + 'css/*.css',
135 options.static + '../../static/xosNgLib.css'
136 ]),
Matteo Scandoloba2af3d2015-11-06 10:35:20 +0100137 {
138 ignorePath: [options.src]
139 }
140 )
141 )
142 .pipe(gulp.dest(options.src));
143 });
144
Matteo Scandoloe53ee052015-11-03 14:32:00 +0100145 // inject bower dependencies with wiredep
146 gulp.task('bower', function () {
Matteo Scandolocb7ea1e2015-11-04 15:07:36 +0100147 return gulp.src(options.src + 'index.html')
Matteo Scandoloe53ee052015-11-03 14:32:00 +0100148 .pipe(wiredep({devDependencies: true}))
149 .pipe(gulp.dest(options.src));
150 });
151
Matteo Scandoloba5e19d2015-11-06 18:25:52 +0100152 gulp.task('js-watch', ['injectScript'], function(){
Matteo Scandoloce954e52015-11-04 11:31:05 +0100153 browserSync.reload();
154 });
155
156 gulp.task('cleanTmp', function(){
157 return del([options.tmp + '**/*']);
158 });
Matteo Scandoloe53ee052015-11-03 14:32:00 +0100159
160 gulp.task('serve', function() {
161 runSequence(
Matteo Scandolob7c91cf2016-03-29 14:23:20 -0700162 'sass',
Matteo Scandoloe53ee052015-11-03 14:32:00 +0100163 'bower',
Matteo Scandoloba2af3d2015-11-06 10:35:20 +0100164 'injectScript',
165 'injectCss',
Matteo Scandoloe53ee052015-11-03 14:32:00 +0100166 ['browser']
167 );
168 });
Matteo Scandolo9323b1b2015-11-25 12:08:41 -0800169};