n8n/packages/nodes-base/gulpfile.js

128 lines
2.9 KiB
JavaScript
Raw Normal View History

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'));
}
task('build:translations', writeHeaders);
2021-11-18 02:32:13 -08:00
/**
* Write all node translation headers at `/dist/nodes/headers.js`.
2021-11-18 02:32:13 -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();
};
2021-11-18 02:32:13 -08:00
const paths = getTranslationPaths();
const headers = getHeaders(paths);
2021-11-18 02:32:13 -08:00
const headersDestinationPath = path.join(__dirname, 'dist', 'nodes', 'headers.js');
writeDestinationFile(headersDestinationPath, headers);
log('Headers translation file written to:');
log(headersDestinationPath, { bulletpoint: true });
done();
}
function getTranslationPaths() {
const destinationPaths = require('./package.json').n8n.nodes;
const { N8N_DEFAULT_LOCALE: locale } = process.env;
const seen = {};
return destinationPaths.reduce((acc, cur) => {
const sourcePath = path.join(
__dirname,
cur.split('/').slice(1, -1).join('/'),
'translations',
`${locale}.json`,
2021-11-18 02:32:13 -08:00
);
if (existsSync(sourcePath) && !seen[sourcePath]) {
seen[sourcePath] = true;
const destinationPath = path.join(
__dirname,
cur.split('/').slice(0, -1).join('/'),
'translations',
`${locale}.json`,
2021-11-18 02:32:13 -08:00
);
acc.push({
source: sourcePath,
destination: destinationPath,
});
};
:sparkles: Update credentials modal (#2154) * :zap: Generalize unique entity name generation * :zap: Standardize variable names * redo credentials * revert some changes, replace got with was * fix v-if order * fix v-if order * update linting * update gulpfile * update ssh display name * update height * update params * update info tip sizes * address design comments * update google button disabled * update icon size to 28px * update design issues * update info tab design * address design comments * update tab size * update run data spacing * address comments, update logo design * fix spacing issues * clean up store * fix create new bug * add loading state * rename prop * remove unused prop * fix select bug * remove label tag * update word break * build * address design comments * update font family of button * update menu opacity * update text * update title * address more comments * update oauth messages * add oauth validation * hide disabled state * update warning modal * show button on text input * clean up cred details * add validation errors * fix bug when deleting cred * Frontend hack to display test button * Created interfaces for testing and endpoint * Testing slack node credentials working * Adding test with node to endpoint for credential testing * Fixed linting and test detectability * Adding required for slack token * Added google sheets credential testing * update message * Adding suggestions by Ivan and Mutasem * Address comments * keep blurred when focused * update font weight of errors * add oauth banner * remove toast * Fixed code bug and added telegram credential testing * scroll to top on success * clean up duplication * Fixed telegram trigger node and added tests to typeform * refactor modal * add more validation support * refactor info tab * scroll to bottom on save, handle cred saving * refactor save button * save cred on valid * save cred on valid * scroll to top if has error * add targets on input labels * delete credentails input * revert fe changes * update validation logic * clean interface * test credentials * update banner design * show testing state * update x position * fix issues * fix focus issues * clean up validation behavior * make error relative * update banner component * update error spacing * don't close dialog * rename button * update how banners behave * if has unsaved changes first * move confirm message * add success banner * update time state * disable transitions * test on open * clean up banner behavior * update banner styling * capitalize * update error banner styling to handle long texts * avoid unnessary content jostling * add loading label * show validation warnings when opening modal * retest cred if not all props req * update scroll to auto * add error warning * update color saturation * set overflow to auto * fix bug to get credentials when connected * round down to minutes * change tab name * update casing oauth * disable credential testing if it has expressions * label same as title * add more space between close and save * remove check on making any changes * hide close on confirm modals * don't accept clicks outside dialog * fix build issues * undo test changes * fix table scrollbar logs * rename modals * fix bug with same name * refactor modal * fix tslint issue * refactor name * update name behavior * update monospace font * remove comment * refactor inputs * refactor error handling * reduce spacing changes * fix doc url oauth1 oauth2 * build * hide infotip if no inputs * address most comments * rename file * fix menu alignment * gst * update types Co-authored-by: Iván Ovejero <[email protected]> Co-authored-by: Omar Ajoue <[email protected]>
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
}
function getHeaders(paths) {
2021-11-18 02:32:13 -08:00
return paths.reduce((acc, cur) => {
const translation = require(cur.source);
const nodeTypes = Object.keys(translation);
2021-11-18 02:32:13 -08:00
for (const nodeType of nodeTypes) {
const { header } = translation[nodeType];
if (isValidHeader(header, ALLOWED_HEADER_KEYS)) {
acc[nodeType] = header;
}
}
2021-11-18 02:32:13 -08:00
return acc;
}, {});
2021-11-18 02:32:13 -08:00
}
// ----------------------------------
// helpers
// ----------------------------------
function isValidHeader(header, allowedHeaderKeys) {
if (!header) return false;
const headerKeys = Object.keys(header);
return headerKeys.length > 0 &&
headerKeys.every(key => allowedHeaderKeys.includes(key));
}
function writeDestinationFile(destinationPath, data) {
writeFile(
destinationPath,
`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('');