import * as fs from "fs"; import { watch, dest, src, series } from "gulp"; import * as nodemon from "gulp-nodemon"; import * as ts from "gulp-typescript"; import * as rename from "gulp-rename"; const jest = require("gulp-jest").default; const tsProject = ts.createProject("tsconfig.json"); export function test() { // Unlike the jest CLI tool, gulp-jest does not automatically set process.env.NODE_ENV to be test process.env.NODE_ENV = "test"; if (!fs.existsSync("src/test/.env.test")) { src(".env.example") .pipe(rename(".env.test")) .pipe(dest("src/test")); } return src("src/test").pipe( jest({ detectOpenHandles: true, coverage: true }) ); } function createConf(cb: any) { if (!fs.existsSync("dist/.env")) { return src(".env.example") .pipe(rename(".env")) .pipe(dest("dist")); } cb(); } function copyDocs() { return src("src/docs/**/*.yml").pipe(dest("dist/docs")); } function transpile() { process.env.NODE_ENV = "dev"; return src(["src/**/*.ts", "!src/**/*.test.ts"]) .pipe(tsProject()) .pipe(dest("dist")); } function livereload(cb: any) { process.env.NODE_ENV = "dev"; nodemon({ script: "dist/index.js", ext: "js, yml", delay: 1000, done: cb }); watch(["src/**/*.ts", "!**/*.test.ts"], transpile); watch("src/**/*.test.ts", test); watch("src/docs/**/*.yml", copyDocs); } export default series(createConf, transpile, copyDocs, livereload); export const dev = series(createConf, transpile, copyDocs, livereload); export const build = series(test, transpile, createConf, copyDocs);