-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.js
132 lines (103 loc) · 3.15 KB
/
gulpfile.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
128
129
130
131
132
const extensionsToCopy = [".js", ".json", ".handlebars", ".css"];
const tsEntrypoints =
[ ['main','/source/public/js/SPA/main.tsx']
];
const tsOutputDir ='/build/public/js/SPA';
const extensionsToWatch = 'js jsx ts tsx json handlebars css';
const locationsToWatch = ["source", "package.json"]
//--------------------------------------------------------------------------------
const gulp = require('gulp');
const react = require('gulp-react');
const del = require('del')
const merge = require('merge2');
const sqlite3 = require('sqlite3').verbose();
const fs = require('fs');
const tsPipeline = require('gulp-webpack-typescript-pipeline');
const buildLocation = __dirname + "/build/";
const anyFile = 'source/**/*'
const anyJsx = anyFile + '.jsx';
const anyTs = anyFile + '.ts';
const anyTsx = anyFile + '.tsx';
const tsEntrypointsParsed = {}
for(let index in tsEntrypoints)
tsEntrypointsParsed[tsEntrypoints[index][0]] = __dirname + tsEntrypoints[index][1];
tsPipeline.registerBuildGulpTasks(
gulp
, { entryPoints: tsEntrypointsParsed
, outputDir: __dirname + tsOutputDir
}
);
const TASK =
{ CLEAN: 'remove previous build'
, TS: 'transpile typescript (inc tsx)'
, JSX: 'transpile react'
, COPY: 'copying rest'
, DB: 'manage db'
, RUN: 'run and watch for changes'
};
const build = [TASK.CLEAN, TASK.TS, TASK.JSX, TASK.COPY, TASK.DB];
const devRun = [TASK.RUN];
gulp.task('default', build);
gulp.task('build', build);
gulp.task('dev', devRun);
function NOT(exp){ return "!"+exp; }
gulp.task(TASK.CLEAN, function()
{
return del(['build/**/*']);
});
gulp.task(TASK.TS, [TASK.CLEAN], function ()
{
return gulp.start('tsPipeline:build:dev');
});
gulp.task(TASK.JSX, [TASK.CLEAN], function ()
{
return gulp.src(anyJsx)
.pipe(react())
.pipe(gulp.dest(buildLocation));
});
gulp.task(TASK.COPY, [TASK.CLEAN], function()
{
let files = [];
for(let index in extensionsToCopy)
files.push(anyFile + extensionsToCopy[index]);
return gulp.src(files).pipe(gulp.dest(buildLocation))
});
gulp.task(TASK.DB, [], function()
{
var dir = './databases';
if (!fs.existsSync(dir))
fs.mkdirSync(dir);
const db = new sqlite3.Database('databases/database.sqlite3');
db.get("SELECT COUNT(*) AS count FROM sqlite_master where type='table' AND name='users'",
function(error, result)
{
if(result.count === 0)
db.run("CREATE TABLE users (username TEXT, password TEXT,cars TEXT)");
});
db.get("SELECT COUNT(*) AS count FROM sqlite_master where type='table' AND name='unconfirmedUsers'",
function(error, result)
{
if(result.count === 0)
db.run("CREATE TABLE unconfirmedUsers (username TEXT, password TEXT,verificationCode TEXT)");
});
});
gulp.task(TASK.RUN, build, function ()
{
//late require, so that build can be performed without devDependencies
const nodemon = require('gulp-nodemon');
const stream = nodemon(
{ script: buildLocation + 'bin/www.js'
, tasks: build
, env: { 'NODE_ENV': 'development' }
, watch: locationsToWatch
, ext: extensionsToWatch
});
stream
.on('restart', function () {
console.log('restarted!');
})
.on('crash', function() {
console.error('Application has crashed!\n');
stream.emit('restart', 10);//seconds
});
});