blob: 19caf8962e0f62212597c6f8b9555abff6c2289b [file] [log] [blame]
Matteo Scandolo68c2e722015-12-04 10:14:40 -08001'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');
11var del = require('del');
Matteo Scandolo54bc5f72016-05-18 14:06:45 -070012var sass = require('gulp-sass');
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -070013var fs = require('fs');
14var path = require('path');
Matteo Scandolo68c2e722015-12-04 10:14:40 -080015
16const 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 Scandolo68c2e722015-12-04 10:14:40 -080025}
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -070026
27var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
Matteo Scandolo68c2e722015-12-04 10:14:40 -080028
Matteo Scandolo68c2e722015-12-04 10:14:40 -080029var proxy = httpProxy.createProxyServer({
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -070030 target: conf.host
Matteo Scandolo68c2e722015-12-04 10:14:40 -080031});
32
Matteo Scandolo68c2e722015-12-04 10:14:40 -080033proxy.on('error', function(error, req, res) {
34 res.writeHead(500, {
35 'Content-Type': 'text/plain'
36 });
37
38 console.error('[Proxy]', error);
39});
40
41module.exports = function(options){
42
Matteo Scandolo68c2e722015-12-04 10:14:40 -080043 gulp.task('browser', function() {
44 browserSync.init({
Matteo Scandolo68c2e722015-12-04 10:14:40 -080045 startPath: '#/',
46 snippetOptions: {
47 rule: {
48 match: /<!-- browserSync -->/i
49 }
50 },
51 server: {
52 baseDir: options.src,
53 routes: {
Matteo Scandolo54bc5f72016-05-18 14:06:45 -070054 '/xos/core/xoslib/static/js/vendor': options.helpers,
55 '/xos/core/static': options.static + '../../static/'
Matteo Scandolo68c2e722015-12-04 10:14:40 -080056 },
57 middleware: function(req, res, next){
58 if(
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -070059 req.url.indexOf('?no_hyperlinks=1') !== -1 ||
Matteo Scandolo54bc5f72016-05-18 14:06:45 -070060 req.url.indexOf('/api/') !== -1
Matteo Scandolo68c2e722015-12-04 10:14:40 -080061 ){
62 if(conf.xoscsrftoken && conf.xossessionid){
63 req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
64 req.headers['x-csrftoken'] = conf.xoscsrftoken;
65 }
66 proxy.web(req, res);
67 }
68 else{
69 next();
70 }
71 }
72 }
73 });
74
75 gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
Matteo Scandolo68c2e722015-12-04 10:14:40 -080076 gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
Matteo Scandolo68c2e722015-12-04 10:14:40 -080077 browserSync.reload();
78 });
79 gulp.watch(options.src + '**/*.html', function(){
80 browserSync.reload();
81 });
Matteo Scandolo54bc5f72016-05-18 14:06:45 -070082 gulp.watch(options.css + '**/*.css', function(){
83 browserSync.reload();
84 });
85 gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
86 browserSync.reload();
87 });
88
89 gulp.watch([
90 options.helpers + 'ngXosHelpers.js',
91 options.static + '../../static/xosNgLib.css'
92 ], function(){
93 browserSync.reload();
94 });
95 });
96
97 // compile sass
98 gulp.task('sass', function () {
99 return gulp.src(`${options.sass}/**/*.scss`)
100 .pipe(sass().on('error', sass.logError))
101 .pipe(gulp.dest(options.css));
Matteo Scandolo68c2e722015-12-04 10:14:40 -0800102 });
103
104 // transpile js with sourceMaps
105 gulp.task('babel', function(){
Matteo Scandolo54bc5f72016-05-18 14:06:45 -0700106 return gulp.src(options.scripts + '**/*.js')
Matteo Scandolo68c2e722015-12-04 10:14:40 -0800107 .pipe(babel({sourceMaps: true}))
108 .pipe(gulp.dest(options.tmp));
109 });
110
111 // inject scripts
Matteo Scandolo54bc5f72016-05-18 14:06:45 -0700112 gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
113 return gulp.src(options.src + 'index.html')
114 .pipe(
115 inject(
116 gulp.src([
117 options.tmp + '**/*.js',
118 options.helpers + 'ngXosHelpers.js'
119 ])
120 .pipe(angularFilesort()),
121 {
122 ignorePath: [options.src, '/../../ngXosLib']
123 }
124 )
125 )
126 .pipe(gulp.dest(options.src));
Matteo Scandolo68c2e722015-12-04 10:14:40 -0800127 });
128
129 // inject CSS
130 gulp.task('injectCss', function(){
131 return gulp.src(options.src + 'index.html')
132 .pipe(
133 inject(
Matteo Scandolo54bc5f72016-05-18 14:06:45 -0700134 gulp.src([
135 options.src + 'css/*.css',
136 options.static + '../../static/xosNgLib.css'
137 ]),
Matteo Scandolo68c2e722015-12-04 10:14:40 -0800138 {
139 ignorePath: [options.src]
140 }
141 )
142 )
143 .pipe(gulp.dest(options.src));
144 });
145
146 // inject bower dependencies with wiredep
147 gulp.task('bower', function () {
148 return gulp.src(options.src + 'index.html')
149 .pipe(wiredep({devDependencies: true}))
150 .pipe(gulp.dest(options.src));
151 });
152
153 gulp.task('js-watch', ['injectScript'], function(){
154 browserSync.reload();
155 });
156
157 gulp.task('cleanTmp', function(){
158 return del([options.tmp + '**/*']);
159 });
160
161 gulp.task('serve', function() {
162 runSequence(
Matteo Scandolo54bc5f72016-05-18 14:06:45 -0700163 'sass',
Matteo Scandolo68c2e722015-12-04 10:14:40 -0800164 'bower',
165 'injectScript',
166 'injectCss',
167 ['browser']
168 );
169 });
170};