UNPKG

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
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); });