build(): Refactor Gulpfile to TS

This commit is contained in:
Livio
2019-08-07 22:08:01 +02:00
parent 202a572ea4
commit 06861628eb
16 changed files with 338 additions and 173 deletions

View File

@@ -0,0 +1,78 @@
import { source, packagePaths } from '../config';
import { task, watch, series, dest } from 'gulp';
import { createProject } from 'gulp-typescript';
import * as sourcemaps from 'gulp-sourcemaps';
import * as log from 'fancy-log';
// Has to be a hardcoded object due to build order
const packages = {
'common': createProject('packages/common/tsconfig.json'),
'core': createProject('packages/core/tsconfig.json'),
'microservices': createProject('packages/microservices/tsconfig.json'),
'websockets': createProject('packages/websockets/tsconfig.json'),
'testing': createProject('packages/testing/tsconfig.json'),
'platform-express': createProject('packages/platform-express/tsconfig.json'),
'platform-fastify': createProject('packages/platform-fastify/tsconfig.json'),
'platform-socket.io': createProject(
'packages/platform-socket.io/tsconfig.json',
),
'platform-ws': createProject('packages/platform-ws/tsconfig.json'),
};
const modules = Object.keys(packages);
const distId = process.argv.indexOf('--dist');
const dist = distId < 0 ? source : process.argv[distId + 1];
/**
* Watches the packages/* folder and
* builds the package on file change
*/
function defaultTask() {
log.info('Watching files..');
modules.forEach(packageName => {
watch(
[`${source}/${packageName}/**/*.ts`, `${source}/${packageName}/*.ts`],
series(packageName),
);
});
}
/**
* Builds the given package
* @param packageName The name of the package
*/
function buildPackage(packageName: string) {
return packages[packageName]
.src()
.pipe(packages[packageName]())
.pipe(dest(`${dist}/${packageName}`));
}
/**
* Builds the given package and adds sourcemaps
* @param packageName The name of the package
*/
function buildPackageDev(packageName: string) {
return packages[packageName]
.src()
.pipe(sourcemaps.init())
.pipe(packages[packageName]())
.pipe(
sourcemaps.mapSources(
(sourcePath: string) => './' + sourcePath.split('/').pop(),
),
)
.pipe(sourcemaps.write('.', {}))
.pipe(dest(`${dist}/${packageName}`));
}
modules.forEach(packageName => {
task(packageName, () => buildPackage(packageName));
task(`${packageName}:dev`, () => buildPackageDev(packageName));
});
task('common:dev', series(modules.map(packageName => `${packageName}:dev`)));
task('build', series(modules));
task('build:dev', series('common:dev'));
task('default', defaultTask);