acha-framework
Version:
is a modular framework on both client (angular.js) and server (node.js) side, it provides security, orm, ioc, obfuscation and ...
253 lines • 12.5 kB
JavaScript
const Q = require('q');
const gulp = require('gulp');
const DEL = require('del');
const runSequence = require('run-sequence');
const concat = require('gulp-concat');
const rename = require('gulp-rename');
const merge = require('merge-stream');
const fix = require('gulp-fixmyjs');
const fsExt = require('fs-extra');
const uglify = require('gulp-uglify');
const javascriptObfuscator = require('gulp-javascript-obfuscator');
gulp.task('default', function (callback) {
return runSequence('fix', 'backend', 'frontend', 'obfuscate', 'assets', 'copy', callback);
});
gulp.task('fix', function () {
var all = gulp.src([
'src/**/*.js',
'!src/**/vendor/**/*.*'
]).pipe(fix()).pipe(gulp.dest('src'));
var glp = gulp.src('gulpfile.js').pipe(fix()).pipe(gulp.dest('.'));
return merge(all, glp);
});
gulp.task('backend', function () {
return gulp.src([
'src/backend/extensions/**/*.js',
'src/backend/index.js',
'src/backend/**/*.js'
]).pipe(concat('index.js')).pipe(uglify()).pipe(gulp.dest('build'));
});
gulp.task('assets', function () {
const locals = gulp.src(['src/locals/**/*.*']).pipe(gulp.dest('build/locals'));
const pub = gulp.src(['src/public/**/*.*']).pipe(gulp.dest('build/public'));
return merge(locals, pub);
});
gulp.task('publish', function (callback) {
const fs = require('fs');
const pack = require('./package.json');
delete pack.devDependencies;
const packagePromise = Q.Promise(function (resolve, reject) {
fs.writeFile('build/package.json', JSON.stringify(pack), function (err) {
if (err) {
reject(err);
return;
}
resolve();
});
});
const readme = Q.Promise(function (resolve, reject) {
gulp.src('./__README.md').pipe(rename('README.md')).pipe(gulp.dest('./build'));
resolve();
});
const del = Q.Promise(function (resolve, reject) {
DEL([
'build/public/framework/scripts/*.js',
'build/public/framework/scripts/**/*.js',
'!build/public/framework/scripts/*.pack.js',
'!build/public/framework/scripts/**/*.pack.js',
'!build/public/framework/scripts/**/*frameworks.min.js',
'!build/public/framework/scripts/**/*plugins.min.js',
'!build/public/framework/scripts/**/*templates.min.js'
], function () {
resolve();
});
});
Q.all([
packagePromise.promise,
readme.promise,
del.promise
]).then(function () {
callback();
});
});
gulp.task('copy', function (callback) {
return gulp.src('build/**/*.*').pipe(gulp.dest('../firoozeh/node_modules/acha-framework')).pipe(gulp.dest('../acha-application/node_modules/acha-framework'));
});
gulp.task('frontend', function (callback) {
return runSequence('frontend:system', 'frontend:core', 'frontend:panel', callback);
});
gulp.task('frontend:system', function () {
return gulp.src([
'src/frontend/core/vendor/script.js',
'src/frontend/system/loader.js'
]).pipe(concat('system.js')).pipe(gulp.dest('./build/public/framework/scripts')).pipe(uglify()).pipe(rename({ suffix: '.min' })).pipe(gulp.dest('./build/public/framework/scripts'));
});
gulp.task('frontend:core', function (callback) {
return runSequence('frontend:core:stylesheets', 'frontend:core:scripts', 'frontend:core:scripts:minify', 'frontend:core:templates', 'frontend:core:assets', callback);
});
gulp.task('frontend:core:stylesheets', function () {
const less = require('gulp-less');
const path = require('path');
const LessAutoprefix = require('less-plugin-autoprefix');
const autoprefix = new LessAutoprefix({ browsers: ['last 20 versions'] });
const minify = require('gulp-cssmin');
const rename = require('gulp-rename');
const foreach = require('gulp-foreach');
return gulp.src([
'src/frontend/core/stylesheets/en.less',
'src/frontend/core/stylesheets/fa.less',
'src/frontend/core/stylesheets/rtl.less',
'src/frontend/core/stylesheets/ltr.less'
]).pipe(less({
plugins: [autoprefix],
paths: [path.join(__dirname, 'src/frontend/core/stylesheets')]
})).pipe(foreach(function (stream, file) {
return stream.pipe(minify()).pipe(rename({ suffix: '.min' }));
})).pipe(gulp.dest('./build/public/framework/stylesheets'));
});
gulp.task('frontend:core:scripts', function () {
const frameworks = gulp.src([
'src/frontend/core/vendor/jquery/jquery.js',
'src/frontend/core/vendor/bootstrap/bootstrap.js',
'src/frontend/core/vendor/angular/angular.js',
'src/frontend/core/vendor/underscore/underscore.js',
'src/frontend/core/vendor/upperscore/upperscore.js'
]).pipe(concat('frameworks.js')).pipe(gulp.dest('./build/public/framework/scripts'));
const plugins = gulp.src([
'src/frontend/core/vendor/modernizr.js',
'src/frontend/core/vendor/angular-cookie/angular-cookie.js',
'src/frontend/core/vendor/angular-route/angular-route.js',
'src/frontend/core/vendor/ng-file-upload/ng-file-upload-all.js',
'src/frontend/core/vendor/toastr/toastr.js',
'src/frontend/core/vendor/slimscroll/jquery.slimscroll.min.js',
'src/frontend/core/vendor/slider/ion.rangeSlider.min.js'
]).pipe(concat('plugins.js')).pipe(gulp.dest('./build/public/framework/scripts'));
const frontend = gulp.src([
'src/frontend/core/scripts/index.js',
'src/frontend/core/scripts/library/**/*.js',
'src/frontend/core/scripts/layout/**/*.js'
]).pipe(concat('frontend.js')).pipe(gulp.dest('./build/public/framework/scripts'));
const directives = gulp.src(['src/frontend/core/scripts/directives/**/*.js']).pipe(concat('directives.js')).pipe(gulp.dest('./build/public/framework/scripts'));
const services = gulp.src([
'src/frontend/core/scripts/services/**/*.js',
'src/frontend/core/scripts/filters/**/*.js'
]).pipe(concat('services.js')).pipe(gulp.dest('./build/public/framework/scripts'));
const vendor = gulp.src([
'src/frontend/core/vendor/font-awesome/*.*',
'!src/frontend/core/vendor/font-awesome/*.less'
]).pipe(gulp.dest('./build/public/framework/vendor/font-awesome'));
return merge(frameworks, plugins, vendor, frontend, directives, services);
});
gulp.task('frontend:core:scripts:minify', function () {
const rename = require('gulp-rename');
const foreach = require('gulp-foreach');
return gulp.src([
'./build/public/framework/scripts/**/*.js',
'!./build/public/framework/scripts/**/*.min.js',
'!./build/public/framework/scripts/**/*.pack.js'
]).pipe(foreach(function (stream, file) {
return stream.pipe(uglify()).pipe(rename({ suffix: '.min' }));
})).pipe(gulp.dest('./build/public/framework/scripts'));
});
gulp.task('frontend:core:templates', function () {
const path = require('path');
const rename = require('gulp-rename');
const foreach = require('gulp-foreach');
const ngTemplate = require('gulp-ng-template');
const minHtml = require('gulp-minify-html');
return gulp.src(['src/frontend/core/scripts/**/*.html']).pipe(minHtml({ collapseWhitespace: true })).pipe(ngTemplate({
filePath: 'templates.js',
moduleName: 'frontend.templates',
prefix: '/templates/framework/',
path: function (path, base) {
return path.replace(base, '');
}
})).pipe(gulp.dest('./build/public/framework/scripts')).pipe(uglify()).pipe(rename({ suffix: '.min' })).pipe(gulp.dest('./build/public/framework/scripts'));
});
gulp.task('frontend:core:assets', function () {
const fonts = gulp.src('src/frontend/core/fonts/**/*.*').pipe(gulp.dest('./build/public/framework/fonts'));
const images = gulp.src('src/frontend/core/images/**/*.*').pipe(gulp.dest('./build/public/framework/images'));
const ckEditor = gulp.src('src/frontend/core/vendor/ckeditor/**/*.*').pipe(gulp.dest('./build/public/framework/vendor/ckeditor'));
return merge(fonts, images, ckEditor);
});
gulp.task('frontend:panel', function (callback) {
return runSequence('frontend:panel:stylesheets', 'frontend:panel:scripts', 'frontend:panel:templates', 'frontend:panel:assets', callback);
});
gulp.task('frontend:panel:stylesheets', function () {
const less = require('gulp-less');
const path = require('path');
const LessAutoprefix = require('less-plugin-autoprefix');
const autoprefix = new LessAutoprefix({ browsers: ['last 20 versions'] });
const minify = require('gulp-cssmin');
const rename = require('gulp-rename');
const foreach = require('gulp-foreach');
return gulp.src([
'src/frontend/panel/stylesheets/en.less',
'src/frontend/panel/stylesheets/fa.less',
'src/frontend/panel/stylesheets/rtl.less',
'src/frontend/panel/stylesheets/ltr.less'
]).pipe(less({
plugins: [autoprefix],
paths: [path.join(__dirname, 'src/frontend/panel/stylesheets')]
})).pipe(foreach(function (stream, file) {
return stream.pipe(minify()).pipe(rename({ suffix: '.min' }));
})).pipe(gulp.dest('./build/public/framework/stylesheets/panel'));
});
gulp.task('frontend:panel:scripts', function () {
const rename = require('gulp-rename');
const foreach = require('gulp-foreach');
const destination = './build/public/framework/scripts/panel';
const frameworks = gulp.src(['src/frontend/panel/vendor/keep.js']).pipe(concat('frameworks.js')).pipe(gulp.dest(destination)).pipe(uglify()).pipe(rename({ suffix: '.min' })).pipe(gulp.dest(destination));
const plugins = gulp.src(['src/frontend/panel/vendor/keep.js']).pipe(concat('plugins.js')).pipe(gulp.dest(destination)).pipe(uglify()).pipe(rename({ suffix: '.min' })).pipe(gulp.dest(destination));
const frontend = gulp.src([
'src/frontend/panel/scripts/index.js',
'src/frontend/panel/scripts/library/**/*.js',
'src/frontend/panel/scripts/layout/**/*.js'
]).pipe(concat('frontend.js')).pipe(gulp.dest(destination)).pipe(uglify()).pipe(rename({ suffix: '.min' })).pipe(gulp.dest(destination));
const directives = gulp.src(['src/frontend/panel/scripts/directives/**/*.js']).pipe(concat('directives.js')).pipe(gulp.dest(destination)).pipe(uglify()).pipe(rename({ suffix: '.min' })).pipe(gulp.dest(destination));
const services = gulp.src([
'src/frontend/panel/scripts/services/**/*.js',
'src/frontend/panel/scripts/filters/**/*.js'
]).pipe(concat('services.js')).pipe(gulp.dest(destination)).pipe(uglify()).pipe(rename({ suffix: '.min' })).pipe(gulp.dest(destination));
const vendor = gulp.src(['src/frontend/panel/vendor/*.*']).pipe(gulp.dest('./build/public/framework/vendor/panel'));
return merge(frameworks, plugins, vendor, frontend, directives, services);
});
gulp.task('frontend:panel:templates', function () {
const path = require('path');
const rename = require('gulp-rename');
const foreach = require('gulp-foreach');
const ngTemplate = require('gulp-ng-template');
const minHtml = require('gulp-minify-html');
return gulp.src(['src/frontend/panel/scripts/**/*.html']).pipe(minHtml({ collapseWhitespace: true })).pipe(ngTemplate({
filePath: 'templates.js',
moduleName: 'frontend.templates',
prefix: '/templates/framework/panel/',
path: function (path, base) {
return path.replace(base, '');
}
})).pipe(gulp.dest('./build/public/framework/scripts/panel')).pipe(uglify()).pipe(rename({ suffix: '.min' })).pipe(gulp.dest('./build/public/framework/scripts/panel'));
});
gulp.task('frontend:panel:assets', function () {
const fonts = gulp.src('src/frontend/panel/fonts/**/*.*').pipe(gulp.dest('./build/public/framework/fonts/panel'));
const images = gulp.src('src/frontend/panel/images/**/*.*').pipe(gulp.dest('./build/public/framework/images/panel'));
return merge(fonts, images);
});
gulp.task('obfuscate', function () {
const framework = gulp.src([
'build/public/framework/scripts/*.js',
'!build/public/framework/scripts/*.min.js',
'!build/public/framework/scripts/*.pack.js',
'!build/public/framework/scripts/*frameworks.js',
'!build/public/framework/scripts/*plugins.js',
'!build/public/framework/scripts/*templates.js'
]).pipe(javascriptObfuscator()).pipe(rename({ suffix: '.pack' })).pipe(gulp.dest('build/public/framework/scripts'));
const panel = gulp.src([
'build/public/framework/scripts/panel/*.js',
'!build/public/framework/scripts/panel/*.min.js',
'!build/public/framework/scripts/panel/*.pack.js',
'!build/public/framework/scripts/panel/*frameworks.js',
'!build/public/framework/scripts/panel/*plugins.js',
'!build/public/framework/scripts/panel/*templates.js'
]).pipe(javascriptObfuscator()).pipe(rename({ suffix: '.pack' })).pipe(gulp.dest('build/public/framework/scripts/panel'));
return merge(framework, panel);
});