This Gulp script is a build script for an Angular project that automates tasks such as code replacement, file copying, and dependency resolution using various modules and functions. The script defines several Gulp tasks, including project relatives and server module, and uses the gulp-replace
module to replace specific code patterns in JavaScript files.
var fs = require('fs');
var path = require('path');
var replace = require('gulp-replace');
var gulp = require('gulp');
// add automock to project for callback services
var client, renderer, server, core;
function applyUniversal(project) {
// gulp.task('theme',
// gulp.src('./some/dir/**/*.js', {cwd: 'path/to/project'})
// .src('./specific-file.ts')) // already within cwd in chain?
// TODO: copy auth, resolve dependencies using file system script, generate code below
// replace package.json
gulp.task(
'project relatives',
gulp.series(projectRelatives(project)))
// in *.js Can't resolve 'socket.io-client/package'
// in *.ts Cannot find name 'JwtHelper' -> trace back to import statements?
gulp.task('server module', function () {
return gulp.src(['**/server/app/app.server.module.js'], {cwd: project})
// add mock socket server to server/render-server or app.server.module
.pipe(replace('import { AppComponent } from \'./app.component\'', `
import { AppComponent } from './app.component';
import { AuthService } from '../../client/app/auth/auth.service';
import { LogService } from '../../imports/log.service';
import { AuthManager } from '../../client/app/auth/auth.manager';
import { JwtHelper } from 'angular2-jwt/angular2-jwt';
import { MailgunValidatorService } from '../../client/app/auth/mailgun-validate.service';
`))
// TODO: pipe server.ts to add log provider for log service
.pipe(replace(
/\)\],\s*AppModule\s*,providers\s*:\s*\[/ig,
`)],
AppModule
],
providers: [
{
provide: AuthService,
useValue: require('./sockify-server').sockifyRequire(AuthService, 'AuthService')
},
{
provide: PlatformLocation,
useValue: require('./sockify-server').sockifyRequire(PlatformLocation, 'PlatformLocation')
},
{
provide: LogService,
useValue: require('./sockify-server').sockifyRequire(LogService, 'LogService')
},
{
provide: AuthGuard,
useValue: require('./sockify-server').sockifyRequire(AuthGuard, 'AuthGuard')
},
AuthManager, JwtHelper, MailgunValidatorService,
`))
.pipe(gulp.dest(project))
});
// add socket-client provider for auth module to app.browser.module
gulp.task('browser module', function () {
return gulp.src(['**/client/app/app.browser.module.ts'], {cwd: project})
.pipe(replace('import { AppComponent } from \'./app.component\'', `
import { AppComponent } from './app.component';
import { AuthService } from './auth/auth.service';
import { PlatformLocation } from '@angular/common';
import { LogService } from '../../imports/log.service';
import { AuthManager } from './auth/auth.manager';
import { JwtHelper } from 'angular2-jwt/angular2-jwt';
import { MailgunValidatorService } from './auth/mailgun-validate.service';
`))
.pipe(replace(
/\)\],\s*AppModule/ig,
`)],
AppModule,
],
providers: [ AuthManager, JwtHelper, MailgunValidatorService,
{
provide: AuthService,
useValue: require('./sockify-client').sockifyClient(AuthService, 'AuthService'),
},
{
provide: PlatformLocation,
useValue: require('./sockify-client').sockifyClient(PlatformLocation, 'PlatformLocation'),
},
`))
.pipe(gulp.dest(project))
});
// replace routes with lazy modules from other projects
gulp.task('app router', function () {
return gulp.src(['**/client/app/app.routes.ts'], {cwd: project})
.pipe(replace(
/children: \[/ig,
`children: [
{
path: 'auth',
loadChildren: './auth/auth.module#AuthModule'
},
`))
.pipe(gulp.dest(project))
});
// TODO: try new versions of packages to act like greenkeeper.io
// gulp apply everything
gulp.task('apply universal',
gulp.series('server module', 'browser module''app router'));
return tasksToPromise(['apply universal'], []);
};
applyUniversal;
const fs = require('fs');
const path = require('path');
const glob = require('glob');
const { src, dest, series, watch, parallel, task } = require('gulp');
const replace = require('gulp-replace');
const { applyMock } = require('./utils');
function getRelativePath(project) {
return (relativePath) => {
return path.join(project, relativePath);
};
}
function applyUniversal(project) {
const projectRelative = getRelativePath(project);
const authFile = projectRelative('client/app/auth/auth.service.ts');
const browserModuleFile = projectRelative('client/app/app.browser.module.ts');
const serverModuleFile = projectRelative('server/app/app.server.module.ts');
task('replace package.json', () => {
return src('package.json', { cwd: project })
.pipe(replace('name', 'New App Name'))
.pipe(replace('version', '1.0.0'))
.pipe(dest(project));
});
task('apply auth', () => {
return src(authFile, { cwd: project })
.pipe(replace(/import { AuthService } from '/, `import { AuthService } from '${projectRelative('client/app/auth/auth.service.ts')}';`))
.pipe(gulp.dest(project));
});
task('apply server module', () => {
return src(serverModuleFile, { cwd: project })
.pipe(replace(/import { AppComponent } from '\.\/app\.component/', `import { AppComponent } from '${projectRelative('client/app/app.component.ts')}';`))
.pipe(replace(/providers:\s*\[/, `
providers: [
AuthService,
LogService,
AuthManager,
JwtHelper,
MailgunValidatorService,
],`))
.pipe(replace(/MockSocketProvider,/, `MockSocketProvider, ${applyMock(AuthService, 'AuthService')}, ${applyMock(LogService, 'LogService')}, ${applyMock(AuthManager, 'AuthManager')}, ${applyMock(JwtHelper, 'JwtHelper')}, ${applyMock(MailgunValidatorService, 'MailgunValidatorService')} `))
.pipe(gulp.dest(project));
});
task('apply browser module', () => {
return src(browserModuleFile, { cwd: project })
.pipe(replace(/import { AppComponent } from '\.\/app\.component/', `import { AppComponent } from '${projectRelative('client/app/app.component.ts')}';`))
.pipe(replace(/providers:\s*\[/, `
providers: [
AuthService,
LogService,
AuthManager,
JwtHelper,
MailgunValidatorService,
],`))
.pipe(replace(/MockSocketProvider,/, `MockSocketProvider, ${applyMock(AuthService, 'AuthService')}, ${applyMock(LogService, 'LogService')}, ${applyMock(AuthManager, 'AuthManager')}, ${applyMock(JwtHelper, 'JwtHelper')}, ${applyMock(MailgunValidatorService, 'MailgunValidatorService')} `))
.pipe(gulp.dest(project));
});
task('apply app router', () => {
return src(projectRelative('client/app/app.routes.ts'), { cwd: project })
.pipe(replace(/children: \[/, `children: [
{
path: 'auth',
loadChildren: './auth/auth.module#AuthModule'
},`))
.pipe(gulp.dest(project));
});
task('apply universal', series('apply auth', 'apply server module', 'apply browser module', 'apply app router'));
return series('apply universal');
}
module.exports = applyUniversal;
Overview of the Code
This code is a Gulp script written in JavaScript. It appears to be a build script for an Angular project that uses the Gulp task runner. The script has several tasks that perform various operations such as:
Key Components
fs
(file system), path
, gulp
, and gulp-replace
.applyUniversal
function is the main entry point of the script.project relatives
: replaces code in JavaScript files.server module
: copies and modifies JavaScript files related to the server module.gulp-replace
module to replace specific code patterns in JavaScript files.Code Snippets
gulp.src
function is used to specify the files to be processed by the Gulp tasks.pipe
function is used to chain together multiple processing steps for each file.gulp.series
function is used to define a series of tasks to be executed in sequence.require
function is used to import external modules and files.Context