2021-11-18 02:32:13 -08:00
|
|
|
const { existsSync, promises: { writeFile } } = require('fs');
|
|
|
|
const path = require('path');
|
|
|
|
const { task, src, dest } = require('gulp');
|
|
|
|
|
|
|
|
const ALLOWED_HEADER_KEYS = ['displayName', 'description'];
|
|
|
|
const PURPLE_ANSI_COLOR_CODE = 35;
|
|
|
|
|
|
|
|
task('build:icons', copyIcons);
|
2019-06-23 03:35:23 -07:00
|
|
|
|
|
|
|
function copyIcons() {
|
2021-11-18 02:32:13 -08:00
|
|
|
src('nodes/**/*.{png,svg}').pipe(dest('dist/nodes'))
|
|
|
|
|
|
|
|
return src('credentials/**/*.{png,svg}').pipe(dest('dist/credentials'));
|
|
|
|
}
|
|
|
|
|
2021-11-23 03:24:55 -08:00
|
|
|
task('build:translations', writeHeaders);
|
2021-11-18 02:32:13 -08:00
|
|
|
|
|
|
|
/**
|
2022-01-07 13:02:21 -08:00
|
|
|
* Write node translation headers to single file at `/dist/nodes/headers.js`.
|
2021-11-18 02:32:13 -08:00
|
|
|
*/
|
2021-11-23 03:24:55 -08:00
|
|
|
function writeHeaders(done) {
|
2021-11-19 07:08:43 -08:00
|
|
|
const { N8N_DEFAULT_LOCALE: locale } = process.env;
|
|
|
|
|
|
|
|
log(`Default locale set to: ${colorize(PURPLE_ANSI_COLOR_CODE, locale || 'en')}`);
|
|
|
|
|
|
|
|
if (!locale || locale === 'en') {
|
|
|
|
log('No translation required - Skipping translations build...');
|
|
|
|
return done();
|
2022-01-07 13:02:21 -08:00
|
|
|
}
|
2021-11-18 02:32:13 -08:00
|
|
|
|
2022-01-07 13:02:21 -08:00
|
|
|
const nodeTranslationPaths = getNodeTranslationPaths();
|
|
|
|
const headers = getHeaders(nodeTranslationPaths);
|
|
|
|
const headersDistPath = path.join(__dirname, 'dist', 'nodes', 'headers.js');
|
2021-11-18 02:32:13 -08:00
|
|
|
|
2022-01-07 13:02:21 -08:00
|
|
|
writeDistFile(headers, headersDistPath);
|
2021-11-18 02:32:13 -08:00
|
|
|
|
2022-01-07 13:02:21 -08:00
|
|
|
log('Headers file written to:');
|
|
|
|
log(headersDistPath, { bulletpoint: true });
|
2021-11-18 02:32:13 -08:00
|
|
|
|
|
|
|
done();
|
|
|
|
}
|
|
|
|
|
2022-01-07 13:02:21 -08:00
|
|
|
function getNodeTranslationPaths() {
|
|
|
|
const nodeDistPaths = require('./package.json').n8n.nodes;
|
2021-11-18 02:32:13 -08:00
|
|
|
const { N8N_DEFAULT_LOCALE: locale } = process.env;
|
|
|
|
|
2022-01-07 13:02:21 -08:00
|
|
|
return nodeDistPaths.reduce((acc, cur) => {
|
|
|
|
const nodeTranslationPath = path.join(
|
2021-11-18 02:32:13 -08:00
|
|
|
__dirname,
|
|
|
|
cur.split('/').slice(1, -1).join('/'),
|
|
|
|
'translations',
|
2022-01-07 13:02:21 -08:00
|
|
|
locale,
|
|
|
|
toTranslationFile(cur),
|
2021-11-18 02:32:13 -08:00
|
|
|
);
|
|
|
|
|
2022-01-07 13:02:21 -08:00
|
|
|
if (existsSync(nodeTranslationPath)) {
|
|
|
|
acc.push(nodeTranslationPath);
|
2021-11-18 02:32:13 -08:00
|
|
|
};
|
2021-09-11 01:15:36 -07:00
|
|
|
|
2021-11-18 02:32:13 -08:00
|
|
|
return acc;
|
|
|
|
}, []);
|
2019-06-23 03:35:23 -07:00
|
|
|
}
|
|
|
|
|
2022-01-07 13:02:21 -08:00
|
|
|
function getHeaders(nodeTranslationPaths) {
|
|
|
|
return nodeTranslationPaths.reduce((acc, cur) => {
|
|
|
|
const { header } = require(cur);
|
|
|
|
const nodeType = cur.split('/').pop().replace('.json', '');
|
2021-11-18 02:32:13 -08:00
|
|
|
|
2022-01-07 13:02:21 -08:00
|
|
|
if (isValidHeader(header, ALLOWED_HEADER_KEYS)) {
|
|
|
|
acc[nodeType] = header;
|
2021-11-23 03:14:13 -08:00
|
|
|
}
|
2021-11-18 02:32:13 -08:00
|
|
|
|
|
|
|
return acc;
|
2021-11-23 03:24:55 -08:00
|
|
|
}, {});
|
2021-11-18 02:32:13 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ----------------------------------
|
|
|
|
// helpers
|
|
|
|
// ----------------------------------
|
|
|
|
|
2022-01-07 13:02:21 -08:00
|
|
|
function toTranslationFile(distPath) {
|
|
|
|
const raw = distPath.split('/').pop().replace('.node', '') + 'on';
|
|
|
|
return raw.charAt(0).toLowerCase() + raw.slice(1);
|
|
|
|
}
|
|
|
|
|
2021-11-18 02:32:13 -08:00
|
|
|
function isValidHeader(header, allowedHeaderKeys) {
|
|
|
|
if (!header) return false;
|
|
|
|
|
|
|
|
const headerKeys = Object.keys(header);
|
|
|
|
|
|
|
|
return headerKeys.length > 0 &&
|
|
|
|
headerKeys.every(key => allowedHeaderKeys.includes(key));
|
|
|
|
}
|
|
|
|
|
2022-01-07 13:02:21 -08:00
|
|
|
function writeDistFile(data, distPath) {
|
2021-11-18 02:32:13 -08:00
|
|
|
writeFile(
|
2022-01-07 13:02:21 -08:00
|
|
|
distPath,
|
2021-11-18 02:32:13 -08:00
|
|
|
`module.exports = ${JSON.stringify(data, null, 2)}`,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
const log = (string, { bulletpoint } = { bulletpoint: false }) => {
|
|
|
|
if (bulletpoint) {
|
|
|
|
process.stdout.write(
|
|
|
|
colorize(PURPLE_ANSI_COLOR_CODE, `- ${string}\n`),
|
|
|
|
);
|
|
|
|
return;
|
|
|
|
};
|
|
|
|
|
|
|
|
process.stdout.write(`${string}\n`);
|
|
|
|
};
|
|
|
|
|
|
|
|
const colorize = (ansiColorCode, string) =>
|
2021-11-19 07:08:43 -08:00
|
|
|
['\033[', ansiColorCode, 'm', string, '\033[0m'].join('');
|