UNPKG

@v4fire/core

Version:
96 lines 3.71 kB
'use strict'; module.exports = function init(gulp) { const fs = require('fs-extra'); const { src, monic } = require('@config/config'), { resolve } = require('@pzlr/build-core'), { replaceTscAliasPaths } = require('tsc-alias'), { depsRgxpStr } = include('build/const'); const h = include('build/helpers'), $ = require('gulp-load-plugins')({ scope: ['optionalDependencies'] }); gulp.task('clean:server', () => require('del')(src.serverOutput())); gulp.task('clean:standalone', () => require('del')(src.standaloneOutput())); gulp.task('build:server', gulp.series([gulp.parallel(['build:tsconfig', 'clean:server']), build])); gulp.task('build:standalone', gulp.series([gulp.parallel(['build:tsconfig', 'clean:standalone']), buildStandalone, buildDeclStandalone, replaceTscAliases])); gulp.task('build:standalone-decl', gulp.series([buildDeclStandalone, replaceTscAliases])); let filesToBuild; gulp.task('build:server:rebuild', build); gulp.task('build:standalone:rebuild', gulp.series([buildStandalone, replaceTscAliases])); gulp.task('watch:server', gulp.series(['build:server', () => { gulp.watch(filesToBuild, gulp.series(['build:server:rebuild'])); }])); gulp.task('watch:standalone', gulp.series(['build:standalone', () => { gulp.watch(filesToBuild, gulp.series(['build:standalone:rebuild'])); }])); function baseBuild(opts = {}) { opts = { type: 'server', ...opts }; const tsConfig = fs.readJSONSync(src.rel(`./${opts.type}.tsconfig.json`)), enableSourcemaps = process.env.SOURCEMAPS; const requireInitializer = `/* istanbul ignore next */(${h.redefineRequire.toString()})();\n`, insertRequireInitializer = h.prependCode(requireInitializer); return gulp.src(getFilesToBuild(tsConfig), { base: './', since: gulp.lastRun(`build:${opts.type}`) }).pipe($.if(enableSourcemaps, $.sourcemaps.init())).pipe($.plumber()).pipe($.monic(Object.mixin(true, {}, monic().typescript, { flags: { node_js: true }, sourceMaps: true }))).pipe($.babel({ plugins: opts.type === 'server' ? [insertRequireInitializer] : [], comments: false })).pipe($.if(enableSourcemaps, $.sourcemaps.write('.'))).pipe(gulp.dest(file => dest(file, opts))); } function buildStandalone() { return baseBuild({ type: 'standalone' }); } function buildDeclStandalone(opts) { opts = { type: 'standalone', ...opts }; const tsConfig = fs.readJSONSync(src.rel(`./${opts.type}.tsconfig.json`)), tsProject = $.typescript.createProject(`${opts.type}.tsconfig.json`); const tsResult = gulp.src(getFilesToBuild(tsConfig)).pipe($.plumber()).pipe(tsProject()); return tsResult.dts.pipe(gulp.dest('lib')); } function dest(file, opts) { const isPathInside = require('is-path-inside'); const isDep = new RegExp(`(^.*?(?:^|[\\/])(${depsRgxpStr}))(?:$|[\\/])`), depDecl = isDep.exec(file.path); if (depDecl) { file.base = resolve.rootDependencies.find(el => isPathInside(fs.realpathSync(el), fs.realpathSync(depDecl[1]))); return src.lib(depDecl[2]); } file.base = src.src(); return src[`${opts.type}Output`](); } function getFilesToBuild(tsConfig) { filesToBuild = [...(tsConfig.include || []), ...resolve.rootDependencies.map(el => `${el}/**/*.@(ts|js)`), '!src/**/*.spec.js']; return filesToBuild; } function replaceTscAliases() { return replaceTscAliasPaths({ configFile: src.rel('./standalone.tsconfig.json'), outDir: src.rel('standaloneOutput') }); } function build() { return baseBuild(); } };