n8n/packages/cli/src/TranslationHelpers.ts

65 lines
1.7 KiB
TypeScript
Raw Normal View History

2021-11-15 02:19:43 -08:00
import { join, dirname } from 'path';
2021-11-19 03:22:01 -08:00
import { readdir } from 'fs/promises';
import { Dirent } from 'fs';
import { NODES_BASE_DIR } from '@/constants';
2021-11-15 02:19:43 -08:00
:zap: i18n feedback refactorings (#2597) * :zap: Create endpoint for node credential translation * :zap: Add API helper method in FE * :hammer: Add creds JSON files to tsconfig * :zap: Refactor credentials loading * :zap: Refactor calls in CredentialConfig * :pencil2: Add dummy translations * :zap: Split translations per node * :fire: Remove deprecated method * :zap: Refactor nesting in collections * :truck: Rename topParameter methods for accuracy * :pencil2: Fill out GitHub dummy cred * :truck: Clarify naming for collection utils * :pencil2: Fill out dummy translation * :fire: Remove surplus colons * :fire: Remove logging * :zap: Restore missing space * :fire: Remove lingering colon * :zap: Add path to InputLabel calls * :pencil2: Fill out dummy translations * :bug: Fix multipleValuesButtonText logic * :zap: Add sample properties to be deleted * :zap: Render deeply nested params * :package: Update package-lock.json * :fire: remove logging * :pencil2: Add dummy value to Slack translation * :pencil2: Add placeholder to dummy translation * :zap: Fix placeholder rendering for button text * :shirt: Fix lint * :fire: Remove outdated comment * :bug: Pass in missing arg for placeholder * :pencil2: Fill out Slack translation * :zap: Add explanatory comment * :pencil2: Fill out dummy translation * :pencil2: Update documentation * :fire: Remove broken link * :pencil2: Add pending functionality * :pencil2: Fix indentation * :bug: Fix method call in CredentialEdit * :zap: Implement eventTriggerDescription * :bug: Fix table-json-binary radio buttons * :pencil2: Clarify usage of eventTriggerDescription * :fire: Remove unneeded arg * :bug: Fix display in CodeEdit and TextEdit * :fire: Remove logging * :pencil2: Add translation for test cred options * :pencil2: Add test for separate file in same dir * :pencil2: Add test for versioned node * :pencil2: Add test for node in grouped dir * :pencil2: Add minor clarifications * :pencil2: Add nested collection test * :pencil2: Add pending functionality * :zap: Generalize collections handling * :truck: Rename helper to remove redundancy * :truck: Improve naming in helpers * :pencil2: Improve helpers documentation * :pencil2: Improve i18n methods documentation * :truck: Make endpoint naming consistent * :pencil2: Add final newlines * :pencil2: Clean up JSON examples * :zap: Reuse i18n method * :zap: Improve utils readability * :zap: Return early if cred translation exists * :fire: Remove dummy translations
2022-01-07 13:02:21 -08:00
const ALLOWED_VERSIONED_DIRNAME_LENGTH = [2, 3]; // e.g. v1, v10
2021-11-19 03:22:01 -08:00
function isVersionedDirname(dirent: Dirent) {
if (!dirent.isDirectory()) return false;
return (
ALLOWED_VERSIONED_DIRNAME_LENGTH.includes(dirent.name.length) &&
dirent.name.toLowerCase().startsWith('v')
);
}
async function getMaxVersion(from: string) {
const entries = await readdir(from, { withFileTypes: true });
const dirnames = entries.reduce<string[]>((acc, cur) => {
if (isVersionedDirname(cur)) acc.push(cur.name);
return acc;
}, []);
if (!dirnames.length) return null;
return Math.max(...dirnames.map((d) => parseInt(d.charAt(1), 10)));
}
:zap: i18n feedback refactorings (#2597) * :zap: Create endpoint for node credential translation * :zap: Add API helper method in FE * :hammer: Add creds JSON files to tsconfig * :zap: Refactor credentials loading * :zap: Refactor calls in CredentialConfig * :pencil2: Add dummy translations * :zap: Split translations per node * :fire: Remove deprecated method * :zap: Refactor nesting in collections * :truck: Rename topParameter methods for accuracy * :pencil2: Fill out GitHub dummy cred * :truck: Clarify naming for collection utils * :pencil2: Fill out dummy translation * :fire: Remove surplus colons * :fire: Remove logging * :zap: Restore missing space * :fire: Remove lingering colon * :zap: Add path to InputLabel calls * :pencil2: Fill out dummy translations * :bug: Fix multipleValuesButtonText logic * :zap: Add sample properties to be deleted * :zap: Render deeply nested params * :package: Update package-lock.json * :fire: remove logging * :pencil2: Add dummy value to Slack translation * :pencil2: Add placeholder to dummy translation * :zap: Fix placeholder rendering for button text * :shirt: Fix lint * :fire: Remove outdated comment * :bug: Pass in missing arg for placeholder * :pencil2: Fill out Slack translation * :zap: Add explanatory comment * :pencil2: Fill out dummy translation * :pencil2: Update documentation * :fire: Remove broken link * :pencil2: Add pending functionality * :pencil2: Fix indentation * :bug: Fix method call in CredentialEdit * :zap: Implement eventTriggerDescription * :bug: Fix table-json-binary radio buttons * :pencil2: Clarify usage of eventTriggerDescription * :fire: Remove unneeded arg * :bug: Fix display in CodeEdit and TextEdit * :fire: Remove logging * :pencil2: Add translation for test cred options * :pencil2: Add test for separate file in same dir * :pencil2: Add test for versioned node * :pencil2: Add test for node in grouped dir * :pencil2: Add minor clarifications * :pencil2: Add nested collection test * :pencil2: Add pending functionality * :zap: Generalize collections handling * :truck: Rename helper to remove redundancy * :truck: Improve naming in helpers * :pencil2: Improve helpers documentation * :pencil2: Improve i18n methods documentation * :truck: Make endpoint naming consistent * :pencil2: Add final newlines * :pencil2: Clean up JSON examples * :zap: Reuse i18n method * :zap: Improve utils readability * :zap: Return early if cred translation exists * :fire: Remove dummy translations
2022-01-07 13:02:21 -08:00
/**
* Get the full path to a node translation file in `/dist`.
*/
export async function getNodeTranslationPath({
nodeSourcePath,
longNodeType,
locale,
}: {
nodeSourcePath: string;
longNodeType: string;
locale: string;
}): Promise<string> {
2021-11-19 03:22:01 -08:00
const nodeDir = dirname(nodeSourcePath);
const maxVersion = await getMaxVersion(nodeDir);
:zap: i18n feedback refactorings (#2597) * :zap: Create endpoint for node credential translation * :zap: Add API helper method in FE * :hammer: Add creds JSON files to tsconfig * :zap: Refactor credentials loading * :zap: Refactor calls in CredentialConfig * :pencil2: Add dummy translations * :zap: Split translations per node * :fire: Remove deprecated method * :zap: Refactor nesting in collections * :truck: Rename topParameter methods for accuracy * :pencil2: Fill out GitHub dummy cred * :truck: Clarify naming for collection utils * :pencil2: Fill out dummy translation * :fire: Remove surplus colons * :fire: Remove logging * :zap: Restore missing space * :fire: Remove lingering colon * :zap: Add path to InputLabel calls * :pencil2: Fill out dummy translations * :bug: Fix multipleValuesButtonText logic * :zap: Add sample properties to be deleted * :zap: Render deeply nested params * :package: Update package-lock.json * :fire: remove logging * :pencil2: Add dummy value to Slack translation * :pencil2: Add placeholder to dummy translation * :zap: Fix placeholder rendering for button text * :shirt: Fix lint * :fire: Remove outdated comment * :bug: Pass in missing arg for placeholder * :pencil2: Fill out Slack translation * :zap: Add explanatory comment * :pencil2: Fill out dummy translation * :pencil2: Update documentation * :fire: Remove broken link * :pencil2: Add pending functionality * :pencil2: Fix indentation * :bug: Fix method call in CredentialEdit * :zap: Implement eventTriggerDescription * :bug: Fix table-json-binary radio buttons * :pencil2: Clarify usage of eventTriggerDescription * :fire: Remove unneeded arg * :bug: Fix display in CodeEdit and TextEdit * :fire: Remove logging * :pencil2: Add translation for test cred options * :pencil2: Add test for separate file in same dir * :pencil2: Add test for versioned node * :pencil2: Add test for node in grouped dir * :pencil2: Add minor clarifications * :pencil2: Add nested collection test * :pencil2: Add pending functionality * :zap: Generalize collections handling * :truck: Rename helper to remove redundancy * :truck: Improve naming in helpers * :pencil2: Improve helpers documentation * :pencil2: Improve i18n methods documentation * :truck: Make endpoint naming consistent * :pencil2: Add final newlines * :pencil2: Clean up JSON examples * :zap: Reuse i18n method * :zap: Improve utils readability * :zap: Return early if cred translation exists * :fire: Remove dummy translations
2022-01-07 13:02:21 -08:00
const nodeType = longNodeType.replace('n8n-nodes-base.', '');
2021-11-19 03:22:01 -08:00
return maxVersion
:zap: i18n feedback refactorings (#2597) * :zap: Create endpoint for node credential translation * :zap: Add API helper method in FE * :hammer: Add creds JSON files to tsconfig * :zap: Refactor credentials loading * :zap: Refactor calls in CredentialConfig * :pencil2: Add dummy translations * :zap: Split translations per node * :fire: Remove deprecated method * :zap: Refactor nesting in collections * :truck: Rename topParameter methods for accuracy * :pencil2: Fill out GitHub dummy cred * :truck: Clarify naming for collection utils * :pencil2: Fill out dummy translation * :fire: Remove surplus colons * :fire: Remove logging * :zap: Restore missing space * :fire: Remove lingering colon * :zap: Add path to InputLabel calls * :pencil2: Fill out dummy translations * :bug: Fix multipleValuesButtonText logic * :zap: Add sample properties to be deleted * :zap: Render deeply nested params * :package: Update package-lock.json * :fire: remove logging * :pencil2: Add dummy value to Slack translation * :pencil2: Add placeholder to dummy translation * :zap: Fix placeholder rendering for button text * :shirt: Fix lint * :fire: Remove outdated comment * :bug: Pass in missing arg for placeholder * :pencil2: Fill out Slack translation * :zap: Add explanatory comment * :pencil2: Fill out dummy translation * :pencil2: Update documentation * :fire: Remove broken link * :pencil2: Add pending functionality * :pencil2: Fix indentation * :bug: Fix method call in CredentialEdit * :zap: Implement eventTriggerDescription * :bug: Fix table-json-binary radio buttons * :pencil2: Clarify usage of eventTriggerDescription * :fire: Remove unneeded arg * :bug: Fix display in CodeEdit and TextEdit * :fire: Remove logging * :pencil2: Add translation for test cred options * :pencil2: Add test for separate file in same dir * :pencil2: Add test for versioned node * :pencil2: Add test for node in grouped dir * :pencil2: Add minor clarifications * :pencil2: Add nested collection test * :pencil2: Add pending functionality * :zap: Generalize collections handling * :truck: Rename helper to remove redundancy * :truck: Improve naming in helpers * :pencil2: Improve helpers documentation * :pencil2: Improve i18n methods documentation * :truck: Make endpoint naming consistent * :pencil2: Add final newlines * :pencil2: Clean up JSON examples * :zap: Reuse i18n method * :zap: Improve utils readability * :zap: Return early if cred translation exists * :fire: Remove dummy translations
2022-01-07 13:02:21 -08:00
? join(nodeDir, `v${maxVersion}`, 'translations', locale, `${nodeType}.json`)
: join(nodeDir, 'translations', locale, `${nodeType}.json`);
}
/**
* Get the full path to a credential translation file in `/dist`.
*/
export function getCredentialTranslationPath({
locale,
credentialType,
}: {
locale: string;
credentialType: string;
}): string {
const credsPath = join(NODES_BASE_DIR, 'dist', 'credentials');
:zap: i18n feedback refactorings (#2597) * :zap: Create endpoint for node credential translation * :zap: Add API helper method in FE * :hammer: Add creds JSON files to tsconfig * :zap: Refactor credentials loading * :zap: Refactor calls in CredentialConfig * :pencil2: Add dummy translations * :zap: Split translations per node * :fire: Remove deprecated method * :zap: Refactor nesting in collections * :truck: Rename topParameter methods for accuracy * :pencil2: Fill out GitHub dummy cred * :truck: Clarify naming for collection utils * :pencil2: Fill out dummy translation * :fire: Remove surplus colons * :fire: Remove logging * :zap: Restore missing space * :fire: Remove lingering colon * :zap: Add path to InputLabel calls * :pencil2: Fill out dummy translations * :bug: Fix multipleValuesButtonText logic * :zap: Add sample properties to be deleted * :zap: Render deeply nested params * :package: Update package-lock.json * :fire: remove logging * :pencil2: Add dummy value to Slack translation * :pencil2: Add placeholder to dummy translation * :zap: Fix placeholder rendering for button text * :shirt: Fix lint * :fire: Remove outdated comment * :bug: Pass in missing arg for placeholder * :pencil2: Fill out Slack translation * :zap: Add explanatory comment * :pencil2: Fill out dummy translation * :pencil2: Update documentation * :fire: Remove broken link * :pencil2: Add pending functionality * :pencil2: Fix indentation * :bug: Fix method call in CredentialEdit * :zap: Implement eventTriggerDescription * :bug: Fix table-json-binary radio buttons * :pencil2: Clarify usage of eventTriggerDescription * :fire: Remove unneeded arg * :bug: Fix display in CodeEdit and TextEdit * :fire: Remove logging * :pencil2: Add translation for test cred options * :pencil2: Add test for separate file in same dir * :pencil2: Add test for versioned node * :pencil2: Add test for node in grouped dir * :pencil2: Add minor clarifications * :pencil2: Add nested collection test * :pencil2: Add pending functionality * :zap: Generalize collections handling * :truck: Rename helper to remove redundancy * :truck: Improve naming in helpers * :pencil2: Improve helpers documentation * :pencil2: Improve i18n methods documentation * :truck: Make endpoint naming consistent * :pencil2: Add final newlines * :pencil2: Clean up JSON examples * :zap: Reuse i18n method * :zap: Improve utils readability * :zap: Return early if cred translation exists * :fire: Remove dummy translations
2022-01-07 13:02:21 -08:00
return join(credsPath, 'translations', locale, `${credentialType}.json`);
2021-11-15 02:19:43 -08:00
}