Skip to content

Commit 0686162

Browse files
committed
build(): Refactor Gulpfile to TS
1 parent 202a572 commit 0686162

File tree

16 files changed

+338
-173
lines changed

16 files changed

+338
-173
lines changed

gulpfile.js

Lines changed: 11 additions & 162 deletions
Original file line numberDiff line numberDiff line change
@@ -1,167 +1,16 @@
1-
const fs = require('fs');
2-
const path = require('path');
3-
const gulp = require('gulp');
4-
const ts = require('gulp-typescript');
5-
const sourcemaps = require('gulp-sourcemaps');
6-
const clean = require('gulp-clean');
7-
const deleteEmpty = require('delete-empty');
8-
const childProcess = require('child_process');
9-
const log = require('fancy-log');
10-
const clc = require('cli-color');
11-
const promiseSeries = require('promise.series');
12-
13-
const { promisify } = require('util');
14-
15-
const exec = promisify(childProcess.exec);
16-
17-
const SAMPLE = path.join(__dirname, 'sample');
1+
'use strict';
2+
/**
3+
* Load the TypeScript compiler, then load the TypeScript gulpfile which simply loads all
4+
* the tasks. The tasks are really inside tools/gulp/tasks.
5+
*/
186

19-
const packages = {
20-
common: ts.createProject('packages/common/tsconfig.json'),
21-
core: ts.createProject('packages/core/tsconfig.json'),
22-
microservices: ts.createProject('packages/microservices/tsconfig.json'),
23-
websockets: ts.createProject('packages/websockets/tsconfig.json'),
24-
testing: ts.createProject('packages/testing/tsconfig.json'),
25-
'platform-express': ts.createProject(
26-
'packages/platform-express/tsconfig.json',
27-
),
28-
'platform-fastify': ts.createProject(
29-
'packages/platform-fastify/tsconfig.json',
30-
),
31-
'platform-socket.io': ts.createProject(
32-
'packages/platform-socket.io/tsconfig.json',
33-
),
34-
'platform-ws': ts.createProject('packages/platform-ws/tsconfig.json'),
35-
};
36-
const modules = Object.keys(packages);
37-
const source = 'packages';
38-
const distId = process.argv.indexOf('--dist');
39-
const dist = distId < 0 ? source : process.argv[distId + 1];
40-
41-
gulp.task('default', function() {
42-
modules.forEach(module => {
43-
gulp.watch(
44-
[`${source}/${module}/**/*.ts`, `${source}/${module}/*.ts`],
45-
[module],
46-
);
47-
});
48-
});
49-
50-
gulp.task('copy-misc', function() {
51-
return gulp
52-
.src(['Readme.md', 'LICENSE', '.npmignore'])
53-
.pipe(gulp.dest(`${source}/common`))
54-
.pipe(gulp.dest(`${source}/core`))
55-
.pipe(gulp.dest(`${source}/microservices`))
56-
.pipe(gulp.dest(`${source}/websockets`))
57-
.pipe(gulp.dest(`${source}/testing`))
58-
.pipe(gulp.dest(`${source}/platform-fastify`))
59-
.pipe(gulp.dest(`${source}/platform-express`))
60-
.pipe(gulp.dest(`${source}/platform-ws`))
61-
.pipe(gulp.dest(`${source}/platform-socket.io`));
62-
});
63-
64-
gulp.task('clean:output', function() {
65-
return gulp
66-
.src(
67-
[`${source}/**/*.js`, `${source}/**/*.d.ts`, `${source}/**/*.js.map`],
68-
{
69-
read: false,
70-
},
71-
)
72-
.pipe(clean());
73-
});
74-
75-
gulp.task('clean:dirs', function(done) {
76-
deleteEmpty.sync(`${source}/`);
77-
done();
78-
});
79-
80-
gulp.task('clean:bundle', gulp.series('clean:output', 'clean:dirs'));
81-
82-
modules.forEach(module => {
83-
gulp.task(module, () => {
84-
return packages[module]
85-
.src()
86-
.pipe(packages[module]())
87-
.pipe(gulp.dest(`${dist}/${module}`));
88-
});
89-
});
90-
91-
modules.forEach(module => {
92-
gulp.task(module + ':dev', () => {
93-
return packages[module]
94-
.src()
95-
.pipe(sourcemaps.init())
96-
.pipe(packages[module]())
97-
.pipe(
98-
sourcemaps.mapSources(sourcePath => './' + sourcePath.split('/').pop()),
99-
)
100-
.pipe(sourcemaps.write('.'))
101-
.pipe(gulp.dest(`${dist}/${module}`));
102-
});
103-
});
104-
105-
gulp.task('common:dev', gulp.series(modules.map(module => module + ':dev')));
106-
gulp.task('build', gulp.series(modules));
107-
gulp.task('build:dev', gulp.series('common:dev'));
108-
109-
function getFolders(dir) {
110-
return fs.readdirSync(dir).filter(function(file) {
111-
return fs.statSync(path.join(dir, file)).isDirectory();
112-
});
113-
}
114-
115-
const getDirs = base => getFolders(base).map(path => `${base}/${path}`);
116-
117-
gulp.task('install:samples', async () => {
118-
const directories = getDirs(SAMPLE);
119-
120-
const promises = directories.map(async dir => {
121-
const dirName = dir.replace(__dirname, '');
122-
log.info(`Installing dependencies of ${clc.magenta(dirName)}`);
123-
try {
124-
await exec(`npm install --no-shrinkwrap --prefix ${dir}`);
125-
log.info(`Finished installing ${clc.magenta(dirName)}`);
126-
} catch (err) {
127-
log.error(`Failed installing dependencies of ${dirName}`);
128-
throw err;
129-
}
130-
});
131-
132-
return await promiseSeries(promises);
133-
});
134-
135-
gulp.task('build:samples', async () => {
136-
const directories = getDirs(SAMPLE);
7+
const path = require('path');
1378

138-
const promises = directories.map(async dir => {
139-
const dirName = dir.replace(__dirname, '');
140-
log.info(`Building ${clc.magenta(dirName)}`);
141-
try {
142-
await exec(`npm run build --prefix ${dir}`);
143-
log.info(`Finished building ${clc.magenta(dirName)}`);
144-
} catch (err) {
145-
log.error(`Failed building ${clc.magenta(dirName)}:`);
146-
if (err.stdout) {
147-
log.error(err.stdout);
148-
}
149-
throw err;
150-
}
151-
});
9+
const projectDir = __dirname;
10+
const tsconfigPath = path.join(projectDir, 'tools/gulp/tsconfig.json');
15211

153-
return await promiseSeries(promises);
12+
require('ts-node').register({
13+
project: tsconfigPath
15414
});
15515

156-
gulp.task('move', function() {
157-
const examplesDirs = getDirs('sample');
158-
const integrationDirs = getDirs('integration');
159-
const directories = examplesDirs.concat(integrationDirs);
160-
161-
let stream = gulp.src(['node_modules/@nestjs/**/*']);
162-
163-
directories.forEach(dir => {
164-
stream = stream.pipe(gulp.dest(dir + '/node_modules/@nestjs'));
165-
});
166-
return stream;
167-
});
16+
require('./tools/gulp/gulpfile');

package-lock.json

Lines changed: 56 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
"@types/cors": "2.8.5",
8585
"@types/express": "4.17.0",
8686
"@types/fastify-cors": "2.1.0",
87+
"@types/gulp": "^4.0.6",
8788
"@types/kafka-node": "2.0.8",
8889
"@types/mocha": "5.2.7",
8990
"@types/node": "10.14.13",
@@ -121,7 +122,6 @@
121122
"nodemon": "1.19.1",
122123
"nyc": "14.1.1",
123124
"prettier": "1.18.2",
124-
"promise.series": "0.2.0",
125125
"sinon": "7.3.2",
126126
"sinon-chai": "3.3.0",
127127
"socket.io-client": "2.2.0",

sample/02-gateways/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"target": "es6",
1212
"sourceMap": true,
1313
"outDir": "./dist",
14-
"baseUrl": "./"
14+
"baseUrl": "./",
15+
"skipLibCheck": true
1516
},
1617
"exclude": ["node_modules"]
1718
}

sample/05-sql-typeorm/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"target": "es6",
1212
"sourceMap": true,
1313
"outDir": "./dist",
14-
"baseUrl": "./"
14+
"baseUrl": "./",
15+
"skipLibCheck": true
1516
},
1617
"exclude": ["node_modules"]
1718
}

sample/15-mvc/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"target": "es6",
1212
"sourceMap": true,
1313
"outDir": "./dist",
14-
"baseUrl": "./"
14+
"baseUrl": "./",
15+
"skipLibCheck": true
1516
},
1617
"exclude": ["node_modules"]
1718
}

sample/17-mvc-fastify/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"target": "es6",
1212
"sourceMap": true,
1313
"outDir": "./dist",
14-
"baseUrl": "./"
14+
"baseUrl": "./",
15+
"skipLibCheck": true
1516
},
1617
"exclude": ["node_modules"]
1718
}

tools/gulp/config.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { getDirs } from './util/task-helpers';
2+
3+
// All paths are related to the base dir
4+
export const source = 'packages';
5+
export const integrationPath = 'integration';
6+
export const samplePath = 'sample';
7+
8+
export const packagePaths = getDirs(source);

tools/gulp/gulpfile.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import './tasks/copy-misc';
2+
import './tasks/clean';
3+
import './tasks/packages';
4+
import './tasks/move';
5+
import './tasks/samples';

tools/gulp/tasks/clean.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { task, src, series } from 'gulp';
2+
import { source } from '../config';
3+
import * as clean from 'gulp-clean';
4+
import * as deleteEmpty from 'delete-empty';
5+
6+
/**
7+
* Cleans the build output assets from the packages folders
8+
*/
9+
function cleanOutput() {
10+
return src(
11+
[
12+
`${source}/**/*.js`,
13+
`${source}/**/*.d.ts`,
14+
`${source}/**/*.js.map`,
15+
`${source}/**/*.d.ts.map`,
16+
],
17+
{
18+
read: false,
19+
},
20+
).pipe(clean());
21+
}
22+
23+
/**
24+
* Cleans empty dirs
25+
*/
26+
function cleanDirs(done: () => void) {
27+
deleteEmpty.sync(`${source}/`);
28+
done();
29+
}
30+
31+
task('clean:output', cleanOutput);
32+
task('clean:dirs', cleanDirs);
33+
task('clean:bundle', series('clean:output', 'clean:dirs'));

0 commit comments

Comments
 (0)