mirror of
https://github.com/xuthus83/pigallery2.git
synced 2025-01-14 14:43:17 +08:00
165 lines
6.6 KiB
JavaScript
165 lines
6.6 KiB
JavaScript
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
var gulp = require("gulp");
|
||
|
var fs = require("fs");
|
||
|
var zip = require("gulp-zip");
|
||
|
var ts = require("gulp-typescript");
|
||
|
// @ts-ignore
|
||
|
var jsonModify = require("gulp-json-modify");
|
||
|
var exec = require('child_process').exec;
|
||
|
var translationFolder = 'translate';
|
||
|
var tsBackendProject = ts.createProject('tsconfig.json');
|
||
|
gulp.task('build-backend', function () {
|
||
|
return gulp.src([
|
||
|
'common/**/*.ts',
|
||
|
'backend/**/*.ts'
|
||
|
], { base: '.' })
|
||
|
.pipe(tsBackendProject())
|
||
|
.js
|
||
|
.pipe(gulp.dest('./release'));
|
||
|
});
|
||
|
var handleError = function (cb) {
|
||
|
return function (err, stdout, stderr) {
|
||
|
console.log(stdout);
|
||
|
console.log(stderr);
|
||
|
cb(err);
|
||
|
};
|
||
|
};
|
||
|
var createFrontendTask = function (type, script) {
|
||
|
gulp.task(type, function (cb) {
|
||
|
exec(script, handleError(cb));
|
||
|
});
|
||
|
};
|
||
|
var getLanguages = function () {
|
||
|
if (!fs.existsSync('./frontend/' + translationFolder)) {
|
||
|
return [];
|
||
|
}
|
||
|
var dirCont = fs.readdirSync('./frontend/' + translationFolder);
|
||
|
var files = dirCont.filter(function (elm) {
|
||
|
return elm.match(/.*\.[a-zA-Z]+\.(xlf)/ig);
|
||
|
});
|
||
|
return files.map(function (f) {
|
||
|
return f.split('.')[1];
|
||
|
});
|
||
|
};
|
||
|
gulp.task('build-frontend', (function () {
|
||
|
var languages = getLanguages().filter(function (l) {
|
||
|
return l !== 'en';
|
||
|
});
|
||
|
var tasks = [];
|
||
|
createFrontendTask('build-frontend-release default', 'ng build --aot --prod --output-path=./release/dist --no-progress --i18n-locale=en' +
|
||
|
' --i18n-format xlf --i18n-file frontend/' + translationFolder + '/messages.en.xlf' +
|
||
|
' --i18n-missing-translation warning');
|
||
|
tasks.push('build-frontend-release default');
|
||
|
for (var i = 0; i < languages.length; i++) {
|
||
|
createFrontendTask('build-frontend-release ' + languages[i], 'ng build --aot --prod --output-path=./release/dist/' + languages[i] +
|
||
|
' --no-progress --i18n-locale=' + languages[i] +
|
||
|
' --i18n-format xlf --i18n-file frontend/' + translationFolder + '/messages.' + languages[i] + '.xlf' +
|
||
|
' --i18n-missing-translation warning');
|
||
|
tasks.push('build-frontend-release ' + languages[i]);
|
||
|
}
|
||
|
return gulp.series.apply(gulp, tasks);
|
||
|
})());
|
||
|
gulp.task('copy-static', function () {
|
||
|
return gulp.src([
|
||
|
'backend/model/diagnostics/blank.jpg',
|
||
|
'README.md',
|
||
|
'LICENSE'
|
||
|
], { base: '.' })
|
||
|
.pipe(gulp.dest('./release'));
|
||
|
});
|
||
|
gulp.task('copy-package', function () {
|
||
|
return gulp.src([
|
||
|
'package.json'
|
||
|
], { base: '.' })
|
||
|
.pipe(jsonModify({
|
||
|
key: 'devDependencies',
|
||
|
value: {}
|
||
|
}))
|
||
|
.pipe(jsonModify({
|
||
|
key: 'scripts',
|
||
|
value: { 'start': 'node ./backend/index.js' }
|
||
|
}))
|
||
|
.pipe(gulp.dest('./release'));
|
||
|
});
|
||
|
gulp.task('zip-release', function () {
|
||
|
return gulp.src(['release/**/*'], { base: './release' })
|
||
|
.pipe(zip('pigallery2.zip'))
|
||
|
.pipe(gulp.dest('.'));
|
||
|
});
|
||
|
gulp.task('build-release', gulp.series('build-frontend', 'build-backend', 'copy-static', 'copy-package', 'zip-release'));
|
||
|
var simpleBuild = function (isProd) {
|
||
|
var languages = getLanguages().filter(function (l) {
|
||
|
return l !== 'en';
|
||
|
});
|
||
|
var tasks = [];
|
||
|
var cmd = 'ng build --aot ';
|
||
|
if (isProd) {
|
||
|
cmd += ' --prod --no-extract-licenses ';
|
||
|
}
|
||
|
createFrontendTask('build-frontend default', cmd + '--output-path=./dist --no-progress --no-progress --i18n-locale en' +
|
||
|
' --i18n-format=xlf --i18n-file=frontend/' + translationFolder + '/messages.en.xlf' + ' --i18n-missing-translation warning');
|
||
|
tasks.push('build-frontend default');
|
||
|
if (!process.env.CI) { // don't build languages if running in CI
|
||
|
for (var i = 0; i < languages.length; i++) {
|
||
|
createFrontendTask('build-frontend ' + languages[i], cmd +
|
||
|
'--output-path=./dist/' + languages[i] +
|
||
|
' --no-progress --i18n-locale ' + languages[i] +
|
||
|
' --i18n-format=xlf --i18n-file=frontend/' + translationFolder +
|
||
|
'/messages.' + languages[i] + '.xlf' + ' --i18n-missing-translation warning');
|
||
|
tasks.push('build-frontend ' + languages[i]);
|
||
|
}
|
||
|
}
|
||
|
return gulp.series.apply(gulp, tasks);
|
||
|
};
|
||
|
gulp.task('extract-locale', function (cb) {
|
||
|
console.log('creating source translation file: locale.source.xlf');
|
||
|
exec('ng xi18n --out-file=./../locale.source.xlf --i18n-format=xlf --i18n-locale=en', { maxBuffer: 1024 * 1024 }, function (error, stdOut, stdErr) {
|
||
|
console.log(stdOut);
|
||
|
console.log(stdErr);
|
||
|
if (error) {
|
||
|
return cb(error);
|
||
|
}
|
||
|
exec('ngx-extractor -i frontend/**/*.ts -f xlf --out-file locale.source.xlf', handleError(cb));
|
||
|
});
|
||
|
});
|
||
|
var translate = function (list, cb) {
|
||
|
var localsStr = '"[\\"' + list.join('\\",\\"') + '\\"]"';
|
||
|
exec('xlf-google-translate --source-lang="en" --source-file="./locale.source.xlf" --destination-folder="./frontend/"' +
|
||
|
translationFolder + ' --destination-languages=' + localsStr, handleError(cb));
|
||
|
};
|
||
|
var merge = function (list, cb) {
|
||
|
var localsStr = '"[\\"' + list.join('\\",\\"') + '\\"]"';
|
||
|
exec('xlf-google-translate --method="extend-only" --source-lang="en" --source-file="./locale.source.xlf" --destination-folder="./frontend/"' +
|
||
|
translationFolder + ' --destination-languages=' + localsStr, handleError(cb));
|
||
|
};
|
||
|
gulp.task('update-translation-only', function (cb) {
|
||
|
translate(getLanguages(), cb);
|
||
|
});
|
||
|
gulp.task('merge-translation-only', function (cb) {
|
||
|
merge(getLanguages(), cb);
|
||
|
});
|
||
|
gulp.task('update-translation', gulp.series('extract-locale', 'update-translation-only'));
|
||
|
gulp.task('merge-new-translation', gulp.series('extract-locale', 'merge-translation-only'));
|
||
|
gulp.task('add-translation-only', function (cb) {
|
||
|
var languages = getLanguages();
|
||
|
var lng = null;
|
||
|
for (var i = 0; i < process.argv.length - 1; i++) {
|
||
|
if (process.argv[i] === 'add-translation') {
|
||
|
lng = process.argv[i + 1].replace('--', '');
|
||
|
}
|
||
|
}
|
||
|
if (lng == null) {
|
||
|
console.error('Error: set language with \'--\' e.g: npm run add-translation -- --en');
|
||
|
return cb();
|
||
|
}
|
||
|
if (languages.indexOf(lng) !== -1) {
|
||
|
console.error('Error: language already exists, can\'t add. These language(s) already exist(s): ' + languages);
|
||
|
return cb();
|
||
|
}
|
||
|
translate([lng], cb);
|
||
|
});
|
||
|
gulp.task('add-translation', gulp.series('extract-locale', 'add-translation-only'));
|
||
|
gulp.task('build-dev', simpleBuild(false));
|
||
|
gulp.task('build-prod', simpleBuild(true));
|
||
|
//# sourceMappingURL=gulpfile.js.map
|