gtx-cli 2.6.31 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -1261
- package/README.md +12 -3
- package/dist/bin/bin-entry.js +2 -1
- package/dist/config/generateSettings.d.ts +1 -9
- package/dist/config/generateSettings.js +1 -214
- package/dist/config/resolveConfig.d.ts +1 -4
- package/dist/config/resolveConfig.js +1 -33
- package/dist/fs/config/setupConfig.d.ts +1 -17
- package/dist/fs/config/setupConfig.js +1 -50
- package/dist/fs/matchFiles.d.ts +1 -1
- package/dist/fs/matchFiles.js +1 -8
- package/dist/functions.d.ts +1 -7
- package/dist/functions.js +1 -6
- package/dist/index.d.ts +1 -4
- package/dist/index.js +1 -27
- package/dist/main.js +2 -2
- package/dist/next/parse/handleInitGT.d.ts +1 -7
- package/dist/next/parse/handleInitGT.js +1 -157
- package/dist/next/parse/wrapContent.d.ts +1 -12
- package/dist/next/parse/wrapContent.js +1 -164
- package/dist/react/parse/wrapContent.d.ts +1 -12
- package/dist/react/parse/wrapContent.js +1 -162
- package/dist/types/index.d.ts +1 -243
- package/dist/types/index.js +1 -1
- package/dist/utils/installPackage.d.ts +1 -3
- package/dist/utils/installPackage.js +1 -77
- package/dist/utils/packageInfo.d.ts +1 -3
- package/dist/utils/packageInfo.js +1 -17
- package/dist/utils/packageJson.d.ts +1 -6
- package/dist/utils/packageJson.js +1 -68
- package/dist/utils/packageManager.d.ts +1 -28
- package/dist/utils/packageManager.js +1 -269
- package/package.json +11 -97
- package/dist/api/collectUserEditDiffs.d.ts +0 -9
- package/dist/api/collectUserEditDiffs.js +0 -159
- package/dist/api/downloadFileBatch.d.ts +0 -23
- package/dist/api/downloadFileBatch.js +0 -190
- package/dist/api/saveLocalEdits.d.ts +0 -6
- package/dist/api/saveLocalEdits.js +0 -38
- package/dist/cli/base.d.ts +0 -59
- package/dist/cli/base.js +0 -529
- package/dist/cli/commands/download.d.ts +0 -8
- package/dist/cli/commands/download.js +0 -51
- package/dist/cli/commands/enqueue.d.ts +0 -9
- package/dist/cli/commands/enqueue.js +0 -27
- package/dist/cli/commands/setupProject.d.ts +0 -7
- package/dist/cli/commands/setupProject.js +0 -37
- package/dist/cli/commands/stage.d.ts +0 -9
- package/dist/cli/commands/stage.js +0 -59
- package/dist/cli/commands/translate.d.ts +0 -7
- package/dist/cli/commands/translate.js +0 -70
- package/dist/cli/commands/upload.d.ts +0 -13
- package/dist/cli/commands/upload.js +0 -142
- package/dist/cli/commands/utils/validation.d.ts +0 -13
- package/dist/cli/commands/utils/validation.js +0 -38
- package/dist/cli/flags.d.ts +0 -15
- package/dist/cli/flags.js +0 -70
- package/dist/cli/inline.d.ts +0 -17
- package/dist/cli/inline.js +0 -135
- package/dist/cli/next.d.ts +0 -10
- package/dist/cli/next.js +0 -12
- package/dist/cli/node.d.ts +0 -10
- package/dist/cli/node.js +0 -9
- package/dist/cli/react.d.ts +0 -12
- package/dist/cli/react.js +0 -72
- package/dist/config/optionPresets.d.ts +0 -3
- package/dist/config/optionPresets.js +0 -65
- package/dist/config/utils.d.ts +0 -2
- package/dist/config/utils.js +0 -4
- package/dist/config/validateSettings.d.ts +0 -3
- package/dist/config/validateSettings.js +0 -32
- package/dist/console/colors.d.ts +0 -6
- package/dist/console/colors.js +0 -19
- package/dist/console/displayTranslateSummary.d.ts +0 -1
- package/dist/console/displayTranslateSummary.js +0 -42
- package/dist/console/formatting.d.ts +0 -1
- package/dist/console/formatting.js +0 -7
- package/dist/console/index.d.ts +0 -34
- package/dist/console/index.js +0 -46
- package/dist/console/logger.d.ts +0 -35
- package/dist/console/logger.js +0 -250
- package/dist/console/logging.d.ts +0 -52
- package/dist/console/logging.js +0 -175
- package/dist/formats/files/aggregateFiles.d.ts +0 -4
- package/dist/formats/files/aggregateFiles.js +0 -156
- package/dist/formats/files/collectFiles.d.ts +0 -6
- package/dist/formats/files/collectFiles.js +0 -49
- package/dist/formats/files/convertToFileTranslationData.d.ts +0 -15
- package/dist/formats/files/convertToFileTranslationData.js +0 -21
- package/dist/formats/files/fileMapping.d.ts +0 -11
- package/dist/formats/files/fileMapping.js +0 -115
- package/dist/formats/files/preprocess/mdx.d.ts +0 -6
- package/dist/formats/files/preprocess/mdx.js +0 -14
- package/dist/formats/files/preprocess/mintlify.d.ts +0 -5
- package/dist/formats/files/preprocess/mintlify.js +0 -15
- package/dist/formats/files/preprocessContent.d.ts +0 -8
- package/dist/formats/files/preprocessContent.js +0 -23
- package/dist/formats/files/save.d.ts +0 -5
- package/dist/formats/files/save.js +0 -17
- package/dist/formats/files/supportedFiles.d.ts +0 -11
- package/dist/formats/files/supportedFiles.js +0 -20
- package/dist/formats/json/extractJson.d.ts +0 -15
- package/dist/formats/json/extractJson.js +0 -101
- package/dist/formats/json/flattenJson.d.ts +0 -14
- package/dist/formats/json/flattenJson.js +0 -64
- package/dist/formats/json/mergeJson.d.ts +0 -13
- package/dist/formats/json/mergeJson.js +0 -367
- package/dist/formats/json/parseJson.d.ts +0 -2
- package/dist/formats/json/parseJson.js +0 -109
- package/dist/formats/json/utils.d.ts +0 -47
- package/dist/formats/json/utils.js +0 -150
- package/dist/formats/utils.d.ts +0 -2
- package/dist/formats/utils.js +0 -24
- package/dist/formats/yaml/mergeYaml.d.ts +0 -5
- package/dist/formats/yaml/mergeYaml.js +0 -61
- package/dist/formats/yaml/parseYaml.d.ts +0 -5
- package/dist/formats/yaml/parseYaml.js +0 -24
- package/dist/formats/yaml/utils.d.ts +0 -2
- package/dist/formats/yaml/utils.js +0 -23
- package/dist/fs/clearLocaleDirs.d.ts +0 -8
- package/dist/fs/clearLocaleDirs.js +0 -126
- package/dist/fs/config/downloadedVersions.d.ts +0 -21
- package/dist/fs/config/downloadedVersions.js +0 -50
- package/dist/fs/config/loadConfig.d.ts +0 -1
- package/dist/fs/config/loadConfig.js +0 -9
- package/dist/fs/config/parseFilesConfig.d.ts +0 -27
- package/dist/fs/config/parseFilesConfig.js +0 -150
- package/dist/fs/config/updateConfig.d.ts +0 -21
- package/dist/fs/config/updateConfig.js +0 -57
- package/dist/fs/config/updateVersions.d.ts +0 -11
- package/dist/fs/config/updateVersions.js +0 -30
- package/dist/fs/copyFile.d.ts +0 -7
- package/dist/fs/copyFile.js +0 -39
- package/dist/fs/createLoadTranslationsFile.d.ts +0 -1
- package/dist/fs/createLoadTranslationsFile.js +0 -49
- package/dist/fs/determineFramework.d.ts +0 -5
- package/dist/fs/determineFramework.js +0 -53
- package/dist/fs/findFilepath.d.ts +0 -36
- package/dist/fs/findFilepath.js +0 -90
- package/dist/fs/index.d.ts +0 -1
- package/dist/fs/index.js +0 -1
- package/dist/fs/loadJSON.d.ts +0 -6
- package/dist/fs/loadJSON.js +0 -17
- package/dist/fs/saveJSON.d.ts +0 -1
- package/dist/fs/saveJSON.js +0 -7
- package/dist/fs/utils.d.ts +0 -1
- package/dist/fs/utils.js +0 -16
- package/dist/generated/version.d.ts +0 -1
- package/dist/generated/version.js +0 -2
- package/dist/git/branches.d.ts +0 -7
- package/dist/git/branches.js +0 -88
- package/dist/hooks/postProcess.d.ts +0 -4
- package/dist/hooks/postProcess.js +0 -110
- package/dist/locadex/setupFlow.d.ts +0 -2
- package/dist/locadex/setupFlow.js +0 -9
- package/dist/next/config/parseNextConfig.d.ts +0 -10
- package/dist/next/config/parseNextConfig.js +0 -53
- package/dist/next/jsx/utils.d.ts +0 -7
- package/dist/next/jsx/utils.js +0 -42
- package/dist/react/config/createESBuildConfig.d.ts +0 -2
- package/dist/react/config/createESBuildConfig.js +0 -119
- package/dist/react/jsx/evaluateJsx.d.ts +0 -24
- package/dist/react/jsx/evaluateJsx.js +0 -123
- package/dist/react/jsx/utils/buildImportMap.d.ts +0 -9
- package/dist/react/jsx/utils/buildImportMap.js +0 -30
- package/dist/react/jsx/utils/constants.d.ts +0 -15
- package/dist/react/jsx/utils/constants.js +0 -49
- package/dist/react/jsx/utils/getCalleeNameFromExpression.d.ts +0 -9
- package/dist/react/jsx/utils/getCalleeNameFromExpression.js +0 -32
- package/dist/react/jsx/utils/getPathsAndAliases.d.ts +0 -21
- package/dist/react/jsx/utils/getPathsAndAliases.js +0 -91
- package/dist/react/jsx/utils/isNumberLiteral.d.ts +0 -7
- package/dist/react/jsx/utils/isNumberLiteral.js +0 -13
- package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.d.ts +0 -9
- package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +0 -138
- package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.d.ts +0 -6
- package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +0 -197
- package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.d.ts +0 -13
- package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +0 -42
- package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.d.ts +0 -5
- package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +0 -69
- package/dist/react/jsx/utils/jsxParsing/parseJsx.d.ts +0 -33
- package/dist/react/jsx/utils/jsxParsing/parseJsx.js +0 -918
- package/dist/react/jsx/utils/jsxParsing/parseTProps.d.ts +0 -8
- package/dist/react/jsx/utils/jsxParsing/parseTProps.js +0 -65
- package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.d.ts +0 -2
- package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +0 -61
- package/dist/react/jsx/utils/jsxParsing/types.d.ts +0 -48
- package/dist/react/jsx/utils/jsxParsing/types.js +0 -34
- package/dist/react/jsx/utils/mapAttributeName.d.ts +0 -11
- package/dist/react/jsx/utils/mapAttributeName.js +0 -12
- package/dist/react/jsx/utils/parseAst.d.ts +0 -31
- package/dist/react/jsx/utils/parseAst.js +0 -278
- package/dist/react/jsx/utils/parseDeclareStatic.d.ts +0 -15
- package/dist/react/jsx/utils/parseDeclareStatic.js +0 -540
- package/dist/react/jsx/utils/parseString.d.ts +0 -25
- package/dist/react/jsx/utils/parseString.js +0 -540
- package/dist/react/jsx/utils/parseStringFunction.d.ts +0 -30
- package/dist/react/jsx/utils/parseStringFunction.js +0 -348
- package/dist/react/jsx/utils/resolveImportPath.d.ts +0 -11
- package/dist/react/jsx/utils/resolveImportPath.js +0 -111
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.d.ts +0 -29
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +0 -86
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.d.ts +0 -14
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +0 -24
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.d.ts +0 -19
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +0 -31
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.d.ts +0 -22
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.js +0 -51
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.d.ts +0 -18
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +0 -39
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.d.ts +0 -24
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +0 -68
- package/dist/react/jsx/utils/stringParsing/types.d.ts +0 -41
- package/dist/react/jsx/utils/stringParsing/types.js +0 -1
- package/dist/react/jsx/utils/types.d.ts +0 -14
- package/dist/react/jsx/utils/types.js +0 -1
- package/dist/react/jsx/utils/validateStringFunction.d.ts +0 -7
- package/dist/react/jsx/utils/validateStringFunction.js +0 -31
- package/dist/react/jsx/wrapJsx.d.ts +0 -51
- package/dist/react/jsx/wrapJsx.js +0 -387
- package/dist/react/parse/addVitePlugin/index.d.ts +0 -22
- package/dist/react/parse/addVitePlugin/index.js +0 -41
- package/dist/react/parse/addVitePlugin/installCompiler.d.ts +0 -8
- package/dist/react/parse/addVitePlugin/installCompiler.js +0 -22
- package/dist/react/parse/addVitePlugin/updateViteConfig.d.ts +0 -19
- package/dist/react/parse/addVitePlugin/updateViteConfig.js +0 -120
- package/dist/react/parse/addVitePlugin/utils/addCompilerImport.d.ts +0 -9
- package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +0 -34
- package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.d.ts +0 -11
- package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +0 -48
- package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.d.ts +0 -15
- package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +0 -113
- package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.d.ts +0 -12
- package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +0 -32
- package/dist/react/parse/createDictionaryUpdates.d.ts +0 -3
- package/dist/react/parse/createDictionaryUpdates.js +0 -187
- package/dist/react/parse/createInlineUpdates.d.ts +0 -13
- package/dist/react/parse/createInlineUpdates.js +0 -161
- package/dist/react/utils/flattenDictionary.d.ts +0 -20
- package/dist/react/utils/flattenDictionary.js +0 -75
- package/dist/react/utils/getEntryAndMetadata.d.ts +0 -5
- package/dist/react/utils/getEntryAndMetadata.js +0 -11
- package/dist/react/utils/getVariableName.d.ts +0 -25
- package/dist/react/utils/getVariableName.js +0 -37
- package/dist/setup/agentInstructions.d.ts +0 -24
- package/dist/setup/agentInstructions.js +0 -138
- package/dist/setup/detectFramework.d.ts +0 -31
- package/dist/setup/detectFramework.js +0 -106
- package/dist/setup/frameworkUtils.d.ts +0 -3
- package/dist/setup/frameworkUtils.js +0 -30
- package/dist/setup/instructions/base.md +0 -29
- package/dist/setup/instructions/gt-next.md +0 -107
- package/dist/setup/instructions/gt-react.md +0 -98
- package/dist/setup/userInput.d.ts +0 -4
- package/dist/setup/userInput.js +0 -32
- package/dist/setup/wizard.d.ts +0 -3
- package/dist/setup/wizard.js +0 -147
- package/dist/state/recentDownloads.d.ts +0 -12
- package/dist/state/recentDownloads.js +0 -18
- package/dist/state/translateWarnings.d.ts +0 -10
- package/dist/state/translateWarnings.js +0 -13
- package/dist/translation/parse.d.ts +0 -17
- package/dist/translation/parse.js +0 -77
- package/dist/translation/stage.d.ts +0 -3
- package/dist/translation/stage.js +0 -44
- package/dist/translation/validate.d.ts +0 -14
- package/dist/translation/validate.js +0 -100
- package/dist/types/branch.d.ts +0 -14
- package/dist/types/branch.js +0 -1
- package/dist/types/data/json.d.ts +0 -6
- package/dist/types/data/json.js +0 -1
- package/dist/types/data.d.ts +0 -37
- package/dist/types/data.js +0 -1
- package/dist/types/files.d.ts +0 -8
- package/dist/types/files.js +0 -1
- package/dist/types/libraries.d.ts +0 -31
- package/dist/types/libraries.js +0 -72
- package/dist/types/parsing.d.ts +0 -3
- package/dist/types/parsing.js +0 -1
- package/dist/utils/addExplicitAnchorIds.d.ts +0 -24
- package/dist/utils/addExplicitAnchorIds.js +0 -416
- package/dist/utils/constants.d.ts +0 -5
- package/dist/utils/constants.js +0 -6
- package/dist/utils/credentials.d.ts +0 -12
- package/dist/utils/credentials.js +0 -120
- package/dist/utils/flattenJsonFiles.d.ts +0 -2
- package/dist/utils/flattenJsonFiles.js +0 -36
- package/dist/utils/gitDiff.d.ts +0 -8
- package/dist/utils/gitDiff.js +0 -34
- package/dist/utils/gt.d.ts +0 -2
- package/dist/utils/gt.js +0 -2
- package/dist/utils/hash.d.ts +0 -6
- package/dist/utils/hash.js +0 -11
- package/dist/utils/headers.d.ts +0 -1
- package/dist/utils/headers.js +0 -14
- package/dist/utils/localizeRelativeAssets.d.ts +0 -8
- package/dist/utils/localizeRelativeAssets.js +0 -166
- package/dist/utils/localizeStaticImports.d.ts +0 -15
- package/dist/utils/localizeStaticImports.js +0 -397
- package/dist/utils/localizeStaticUrls.d.ts +0 -19
- package/dist/utils/localizeStaticUrls.js +0 -450
- package/dist/utils/mintlifyTitleFallback.d.ts +0 -6
- package/dist/utils/mintlifyTitleFallback.js +0 -80
- package/dist/utils/parse/needsCJS.d.ts +0 -20
- package/dist/utils/parse/needsCJS.js +0 -72
- package/dist/utils/persistPostprocessHashes.d.ts +0 -12
- package/dist/utils/persistPostprocessHashes.js +0 -39
- package/dist/utils/processAnchorIds.d.ts +0 -6
- package/dist/utils/processAnchorIds.js +0 -56
- package/dist/utils/processOpenApi.d.ts +0 -8
- package/dist/utils/processOpenApi.js +0 -651
- package/dist/utils/sanitizeFileContent.d.ts +0 -6
- package/dist/utils/sanitizeFileContent.js +0 -29
- package/dist/utils/sharedStaticAssets.d.ts +0 -9
- package/dist/utils/sharedStaticAssets.js +0 -384
- package/dist/utils/validateMdx.d.ts +0 -10
- package/dist/utils/validateMdx.js +0 -25
- package/dist/utils/wrapPlainUrls.d.ts +0 -8
- package/dist/utils/wrapPlainUrls.js +0 -72
- package/dist/workflows/download.d.ts +0 -32
- package/dist/workflows/download.js +0 -131
- package/dist/workflows/enqueue.d.ts +0 -17
- package/dist/workflows/enqueue.js +0 -59
- package/dist/workflows/setupProject.d.ts +0 -13
- package/dist/workflows/setupProject.js +0 -48
- package/dist/workflows/stage.d.ts +0 -18
- package/dist/workflows/stage.js +0 -59
- package/dist/workflows/steps/BranchStep.d.ts +0 -13
- package/dist/workflows/steps/BranchStep.js +0 -161
- package/dist/workflows/steps/DownloadStep.d.ts +0 -19
- package/dist/workflows/steps/DownloadStep.js +0 -131
- package/dist/workflows/steps/EnqueueStep.d.ts +0 -15
- package/dist/workflows/steps/EnqueueStep.js +0 -33
- package/dist/workflows/steps/PollJobsStep.d.ts +0 -31
- package/dist/workflows/steps/PollJobsStep.js +0 -288
- package/dist/workflows/steps/SetupStep.d.ts +0 -16
- package/dist/workflows/steps/SetupStep.js +0 -72
- package/dist/workflows/steps/UploadSourcesStep.d.ts +0 -27
- package/dist/workflows/steps/UploadSourcesStep.js +0 -131
- package/dist/workflows/steps/UploadTranslationsStep.d.ts +0 -22
- package/dist/workflows/steps/UploadTranslationsStep.js +0 -71
- package/dist/workflows/steps/UserEditDiffsStep.d.ts +0 -11
- package/dist/workflows/steps/UserEditDiffsStep.js +0 -30
- package/dist/workflows/steps/WorkflowStep.d.ts +0 -4
- package/dist/workflows/steps/WorkflowStep.js +0 -2
- package/dist/workflows/upload.d.ts +0 -15
- package/dist/workflows/upload.js +0 -47
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Settings, TranslateFlags } from '../types/index.js';
|
|
2
|
-
import { EnqueueFilesResult, FileToUpload } from 'generaltranslation/types';
|
|
3
|
-
/**
|
|
4
|
-
* Enqueues translations for a given set of files
|
|
5
|
-
* - Only enqueues uploaded files
|
|
6
|
-
* - Don't have to worry about double enqueuing files because dedupe on API side
|
|
7
|
-
*
|
|
8
|
-
* @param {FileTranslationData} fileVersionData - The file version data
|
|
9
|
-
* @param {TranslateFlags} options - The options for the enqueue operation
|
|
10
|
-
* @param {Settings} settings - The settings for the enqueue operation
|
|
11
|
-
* @returns {Promise<EnqueueFilesResult>} The enqueue result
|
|
12
|
-
*/
|
|
13
|
-
export declare function runEnqueueWorkflow({ files, options, settings, }: {
|
|
14
|
-
files: FileToUpload[];
|
|
15
|
-
options: TranslateFlags;
|
|
16
|
-
settings: Settings;
|
|
17
|
-
}): Promise<EnqueueFilesResult>;
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { logCollectedFiles, logErrorAndExit } from '../console/logging.js';
|
|
2
|
-
import { gt } from '../utils/gt.js';
|
|
3
|
-
import { EnqueueStep } from './steps/EnqueueStep.js';
|
|
4
|
-
import { BranchStep } from './steps/BranchStep.js';
|
|
5
|
-
import { logger } from '../console/logger.js';
|
|
6
|
-
/**
|
|
7
|
-
* Enqueues translations for a given set of files
|
|
8
|
-
* - Only enqueues uploaded files
|
|
9
|
-
* - Don't have to worry about double enqueuing files because dedupe on API side
|
|
10
|
-
*
|
|
11
|
-
* @param {FileTranslationData} fileVersionData - The file version data
|
|
12
|
-
* @param {TranslateFlags} options - The options for the enqueue operation
|
|
13
|
-
* @param {Settings} settings - The settings for the enqueue operation
|
|
14
|
-
* @returns {Promise<EnqueueFilesResult>} The enqueue result
|
|
15
|
-
*/
|
|
16
|
-
export async function runEnqueueWorkflow({ files, options, settings, }) {
|
|
17
|
-
try {
|
|
18
|
-
// Log files to be enqueued
|
|
19
|
-
logCollectedFiles(files);
|
|
20
|
-
logger.debug('Files: ' + JSON.stringify(files, null, 2));
|
|
21
|
-
// Create workflow with steps
|
|
22
|
-
const branchStep = new BranchStep(gt, settings);
|
|
23
|
-
// const queryFileDataStep = new QueryFileDataStep(gt);
|
|
24
|
-
const enqueueStep = new EnqueueStep(gt, settings, options.force);
|
|
25
|
-
// (1) run the branch step
|
|
26
|
-
const branchData = await branchStep.run();
|
|
27
|
-
await branchStep.wait();
|
|
28
|
-
if (!branchData) {
|
|
29
|
-
return logErrorAndExit('Failed to resolve git branch information.');
|
|
30
|
-
}
|
|
31
|
-
logger.debug('Branch data: ' + JSON.stringify(branchData, null, 2));
|
|
32
|
-
// (2) Enqueue the files
|
|
33
|
-
const enqueueResult = await enqueueStep.run(files.map((files) => ({
|
|
34
|
-
branchId: branchData.currentBranch.id,
|
|
35
|
-
...files,
|
|
36
|
-
})));
|
|
37
|
-
await enqueueStep.wait();
|
|
38
|
-
logger.debug('Enqueue result: ' + JSON.stringify(enqueueResult, null, 2));
|
|
39
|
-
logEnqueueResult(enqueueResult, files);
|
|
40
|
-
return enqueueResult;
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
return logErrorAndExit('Failed to enqueue translations. ' + error);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
// ----- Helper functions ----- //
|
|
47
|
-
/**
|
|
48
|
-
* Logs the enqueue result
|
|
49
|
-
* @param enqueueResult - The enqueue result
|
|
50
|
-
* @returns void
|
|
51
|
-
*/
|
|
52
|
-
function logEnqueueResult(enqueueResult, files) {
|
|
53
|
-
if (Object.keys(enqueueResult.jobData).length === 0) {
|
|
54
|
-
logger.success(`All ${files.length} files already translated. 0 files enqueued.`);
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
logger.success(enqueueResult.message);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Settings, TranslateFlags } from '../types/index.js';
|
|
2
|
-
import { FileToUpload } from 'generaltranslation/types';
|
|
3
|
-
import { BranchData } from '../types/branch.js';
|
|
4
|
-
/**
|
|
5
|
-
* Sets up a project by uploading files running the setup step
|
|
6
|
-
* @param files - Array of file objects to upload
|
|
7
|
-
* @param options - The options for the API call
|
|
8
|
-
* @param settings - Settings configuration
|
|
9
|
-
* @returns The branch data
|
|
10
|
-
*/
|
|
11
|
-
export declare function runSetupProjectWorkflow(files: FileToUpload[], options: TranslateFlags, settings: Settings): Promise<{
|
|
12
|
-
branchData: BranchData;
|
|
13
|
-
}>;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { logErrorAndExit } from '../console/logging.js';
|
|
2
|
-
import { gt } from '../utils/gt.js';
|
|
3
|
-
import { UploadSourcesStep } from './steps/UploadSourcesStep.js';
|
|
4
|
-
import { SetupStep } from './steps/SetupStep.js';
|
|
5
|
-
import { BranchStep } from './steps/BranchStep.js';
|
|
6
|
-
import { logCollectedFiles } from '../console/logging.js';
|
|
7
|
-
/**
|
|
8
|
-
* Helper: Calculate timeout with validation
|
|
9
|
-
*/
|
|
10
|
-
function calculateTimeout(timeout) {
|
|
11
|
-
const value = timeout !== undefined ? Number(timeout) : 600;
|
|
12
|
-
return (Number.isFinite(value) ? value : 600) * 1000;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Sets up a project by uploading files running the setup step
|
|
16
|
-
* @param files - Array of file objects to upload
|
|
17
|
-
* @param options - The options for the API call
|
|
18
|
-
* @param settings - Settings configuration
|
|
19
|
-
* @returns The branch data
|
|
20
|
-
*/
|
|
21
|
-
export async function runSetupProjectWorkflow(files, options, settings) {
|
|
22
|
-
try {
|
|
23
|
-
// Log files to be translated
|
|
24
|
-
logCollectedFiles(files);
|
|
25
|
-
// Calculate timeout for setup step
|
|
26
|
-
const timeoutMs = calculateTimeout(options.timeout);
|
|
27
|
-
// Create workflow with steps
|
|
28
|
-
const branchStep = new BranchStep(gt, settings);
|
|
29
|
-
const uploadStep = new UploadSourcesStep(gt, settings);
|
|
30
|
-
const setupStep = new SetupStep(gt, settings, timeoutMs);
|
|
31
|
-
// first run the branch step
|
|
32
|
-
const branchData = await branchStep.run();
|
|
33
|
-
await branchStep.wait();
|
|
34
|
-
if (!branchData) {
|
|
35
|
-
return logErrorAndExit('Failed to resolve git branch information.');
|
|
36
|
-
}
|
|
37
|
-
// then run the upload step
|
|
38
|
-
const uploadedFiles = await uploadStep.run({ files, branchData });
|
|
39
|
-
await uploadStep.wait();
|
|
40
|
-
// then run the setup step
|
|
41
|
-
await setupStep.run(uploadedFiles, options.force ?? false);
|
|
42
|
-
await setupStep.wait();
|
|
43
|
-
return { branchData };
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
return logErrorAndExit('Failed to run project setup. ' + error);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Settings, TranslateFlags } from '../types/index.js';
|
|
2
|
-
import { EnqueueFilesResult, FileToUpload } from 'generaltranslation/types';
|
|
3
|
-
import { BranchData } from '../types/branch.js';
|
|
4
|
-
/**
|
|
5
|
-
* Sends multiple files for translation to the API using a workflow pattern
|
|
6
|
-
* @param files - Array of file objects to translate
|
|
7
|
-
* @param options - The options for the API call
|
|
8
|
-
* @param settings - Settings configuration
|
|
9
|
-
* @returns The translated content or version ID
|
|
10
|
-
*/
|
|
11
|
-
export declare function runStageFilesWorkflow({ files, options, settings, }: {
|
|
12
|
-
files: FileToUpload[];
|
|
13
|
-
options: TranslateFlags;
|
|
14
|
-
settings: Settings;
|
|
15
|
-
}): Promise<{
|
|
16
|
-
branchData: BranchData;
|
|
17
|
-
enqueueResult: EnqueueFilesResult;
|
|
18
|
-
}>;
|
package/dist/workflows/stage.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { logCollectedFiles, logErrorAndExit } from '../console/logging.js';
|
|
2
|
-
import { gt } from '../utils/gt.js';
|
|
3
|
-
import { UploadSourcesStep } from './steps/UploadSourcesStep.js';
|
|
4
|
-
import { SetupStep } from './steps/SetupStep.js';
|
|
5
|
-
import { EnqueueStep } from './steps/EnqueueStep.js';
|
|
6
|
-
import { BranchStep } from './steps/BranchStep.js';
|
|
7
|
-
import { UserEditDiffsStep } from './steps/UserEditDiffsStep.js';
|
|
8
|
-
/**
|
|
9
|
-
* Helper: Calculate timeout with validation
|
|
10
|
-
*/
|
|
11
|
-
function calculateTimeout(timeout) {
|
|
12
|
-
const value = timeout !== undefined ? Number(timeout) : 600;
|
|
13
|
-
return (Number.isFinite(value) ? value : 600) * 1000;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Sends multiple files for translation to the API using a workflow pattern
|
|
17
|
-
* @param files - Array of file objects to translate
|
|
18
|
-
* @param options - The options for the API call
|
|
19
|
-
* @param settings - Settings configuration
|
|
20
|
-
* @returns The translated content or version ID
|
|
21
|
-
*/
|
|
22
|
-
export async function runStageFilesWorkflow({ files, options, settings, }) {
|
|
23
|
-
try {
|
|
24
|
-
// Log files to be translated
|
|
25
|
-
logCollectedFiles(files);
|
|
26
|
-
// Calculate timeout for setup step
|
|
27
|
-
const timeoutMs = calculateTimeout(options.timeout);
|
|
28
|
-
// Create workflow with steps
|
|
29
|
-
const branchStep = new BranchStep(gt, settings);
|
|
30
|
-
const uploadStep = new UploadSourcesStep(gt, settings);
|
|
31
|
-
const userEditDiffsStep = new UserEditDiffsStep(settings);
|
|
32
|
-
const setupStep = new SetupStep(gt, settings, timeoutMs);
|
|
33
|
-
const enqueueStep = new EnqueueStep(gt, settings, options.force);
|
|
34
|
-
// first run the branch step
|
|
35
|
-
const branchData = await branchStep.run();
|
|
36
|
-
await branchStep.wait();
|
|
37
|
-
if (!branchData) {
|
|
38
|
-
return logErrorAndExit('Failed to resolve git branch information.');
|
|
39
|
-
}
|
|
40
|
-
// then run the upload step
|
|
41
|
-
const uploadedFiles = await uploadStep.run({ files, branchData });
|
|
42
|
-
await uploadStep.wait();
|
|
43
|
-
// optionally run the user edit diffs step
|
|
44
|
-
if (options?.saveLocal) {
|
|
45
|
-
await userEditDiffsStep.run(uploadedFiles);
|
|
46
|
-
await userEditDiffsStep.wait();
|
|
47
|
-
}
|
|
48
|
-
// then run the setup step
|
|
49
|
-
await setupStep.run(uploadedFiles);
|
|
50
|
-
await setupStep.wait();
|
|
51
|
-
// then run the enqueue step
|
|
52
|
-
const enqueueResult = await enqueueStep.run(uploadedFiles);
|
|
53
|
-
await enqueueStep.wait();
|
|
54
|
-
return { branchData, enqueueResult };
|
|
55
|
-
}
|
|
56
|
-
catch (error) {
|
|
57
|
-
return logErrorAndExit('Failed to send files for translation. ' + error);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { WorkflowStep } from './WorkflowStep.js';
|
|
2
|
-
import { GT } from 'generaltranslation';
|
|
3
|
-
import { Settings } from '../../types/index.js';
|
|
4
|
-
import { BranchData } from '../../types/branch.js';
|
|
5
|
-
export declare class BranchStep extends WorkflowStep<null, BranchData | null> {
|
|
6
|
-
private spinner;
|
|
7
|
-
private branchData;
|
|
8
|
-
private settings;
|
|
9
|
-
private gt;
|
|
10
|
-
constructor(gt: GT, settings: Settings);
|
|
11
|
-
run(): Promise<BranchData | null>;
|
|
12
|
-
wait(): Promise<void>;
|
|
13
|
-
}
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { WorkflowStep } from './WorkflowStep.js';
|
|
2
|
-
import { logErrorAndExit } from '../../console/logging.js';
|
|
3
|
-
import { logger } from '../../console/logger.js';
|
|
4
|
-
import chalk from 'chalk';
|
|
5
|
-
import { getCurrentBranch, getIncomingBranches, getCheckedOutBranches, } from '../../git/branches.js';
|
|
6
|
-
import { ApiError } from 'generaltranslation/errors';
|
|
7
|
-
// Step 1: Resolve the current branch id & update API with branch information
|
|
8
|
-
export class BranchStep extends WorkflowStep {
|
|
9
|
-
spinner = logger.createSpinner('dots');
|
|
10
|
-
branchData;
|
|
11
|
-
settings;
|
|
12
|
-
gt;
|
|
13
|
-
constructor(gt, settings) {
|
|
14
|
-
super();
|
|
15
|
-
this.gt = gt;
|
|
16
|
-
this.settings = settings;
|
|
17
|
-
this.branchData = {
|
|
18
|
-
currentBranch: {
|
|
19
|
-
id: '',
|
|
20
|
-
name: '',
|
|
21
|
-
},
|
|
22
|
-
incomingBranch: null,
|
|
23
|
-
checkedOutBranch: null,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
async run() {
|
|
27
|
-
this.spinner.start(`Resolving branch information...`);
|
|
28
|
-
// First get some info about the branches we're working with
|
|
29
|
-
let current = null;
|
|
30
|
-
let incoming = [];
|
|
31
|
-
let checkedOut = [];
|
|
32
|
-
let useDefaultBranch = true;
|
|
33
|
-
let detectedDefaultBranchName = 'main';
|
|
34
|
-
let autoDetectFailed = !this.settings.branchOptions.autoDetectBranches;
|
|
35
|
-
if (this.settings.branchOptions.enabled &&
|
|
36
|
-
this.settings.branchOptions.autoDetectBranches) {
|
|
37
|
-
const [currentResult, incomingResult, checkedOutResult] = await Promise.all([
|
|
38
|
-
getCurrentBranch(this.settings.branchOptions.remoteName),
|
|
39
|
-
getIncomingBranches(this.settings.branchOptions.remoteName),
|
|
40
|
-
getCheckedOutBranches(this.settings.branchOptions.remoteName),
|
|
41
|
-
]);
|
|
42
|
-
current = currentResult;
|
|
43
|
-
incoming = incomingResult;
|
|
44
|
-
checkedOut = checkedOutResult;
|
|
45
|
-
if (currentResult) {
|
|
46
|
-
detectedDefaultBranchName = currentResult.defaultBranchName;
|
|
47
|
-
}
|
|
48
|
-
// Try env var detection if git commands failed (e.g. Vercel)
|
|
49
|
-
if (!currentResult) {
|
|
50
|
-
autoDetectFailed = true;
|
|
51
|
-
const vercelBranch = process.env.VERCEL_GIT_COMMIT_REF;
|
|
52
|
-
if (vercelBranch) {
|
|
53
|
-
current = { currentBranchName: vercelBranch, defaultBranch: false };
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
// If detection succeeded, use the detected branch; otherwise fall back to default
|
|
57
|
-
if (current) {
|
|
58
|
-
useDefaultBranch = false;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
if (this.settings.branchOptions.enabled &&
|
|
62
|
-
this.settings.branchOptions.currentBranch) {
|
|
63
|
-
current = {
|
|
64
|
-
currentBranchName: this.settings.branchOptions.currentBranch,
|
|
65
|
-
defaultBranch: current?.defaultBranch ?? false, // we have no way of knowing if this is the default branch without using the auto-detection logic
|
|
66
|
-
};
|
|
67
|
-
useDefaultBranch = false;
|
|
68
|
-
}
|
|
69
|
-
const branchData = await this.gt.queryBranchData({
|
|
70
|
-
branchNames: [
|
|
71
|
-
...(current ? [current.currentBranchName] : []),
|
|
72
|
-
...incoming,
|
|
73
|
-
...checkedOut,
|
|
74
|
-
],
|
|
75
|
-
});
|
|
76
|
-
if (useDefaultBranch) {
|
|
77
|
-
if (autoDetectFailed) {
|
|
78
|
-
logger.warn('Branch auto-detection failed. Falling back to the default branch. Use --branch to specify a branch manually.');
|
|
79
|
-
}
|
|
80
|
-
if (!branchData.defaultBranch) {
|
|
81
|
-
const createBranchResult = await this.gt.createBranch({
|
|
82
|
-
branchName: detectedDefaultBranchName,
|
|
83
|
-
defaultBranch: true,
|
|
84
|
-
});
|
|
85
|
-
this.branchData.currentBranch = createBranchResult.branch;
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
this.branchData.currentBranch = branchData.defaultBranch;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
if (!current) {
|
|
93
|
-
return logErrorAndExit('Failed to determine the current branch. Please specify a custom branch or enable automatic branch detection.');
|
|
94
|
-
}
|
|
95
|
-
const currentBranch = branchData.branches.find((b) => b.name === current.currentBranchName);
|
|
96
|
-
if (!currentBranch) {
|
|
97
|
-
try {
|
|
98
|
-
const createBranchResult = await this.gt.createBranch({
|
|
99
|
-
branchName: current.currentBranchName,
|
|
100
|
-
defaultBranch: current.defaultBranch,
|
|
101
|
-
});
|
|
102
|
-
this.branchData.currentBranch = createBranchResult.branch;
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
if (error instanceof ApiError && error.code === 403) {
|
|
106
|
-
logger.warn('To enable translation branching, please upgrade your plan. Falling back to default branch.');
|
|
107
|
-
// retry with default branch
|
|
108
|
-
try {
|
|
109
|
-
const createBranchResult = await this.gt.createBranch({
|
|
110
|
-
branchName: detectedDefaultBranchName,
|
|
111
|
-
defaultBranch: true,
|
|
112
|
-
});
|
|
113
|
-
this.branchData.currentBranch = createBranchResult.branch;
|
|
114
|
-
}
|
|
115
|
-
catch { }
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
this.branchData.currentBranch = currentBranch;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
if (this.branchData.currentBranch.id === '') {
|
|
124
|
-
return logErrorAndExit('Something went wrong while resolving branch information. Please try again.');
|
|
125
|
-
}
|
|
126
|
-
// Now set the incoming and checked out branches (first one that exists)
|
|
127
|
-
this.branchData.incomingBranch =
|
|
128
|
-
incoming
|
|
129
|
-
.map((b) => {
|
|
130
|
-
const branch = branchData.branches.find((bb) => bb.name === b);
|
|
131
|
-
if (branch) {
|
|
132
|
-
return branch;
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
return null;
|
|
136
|
-
}
|
|
137
|
-
})
|
|
138
|
-
.filter((b) => b !== null)[0] ?? null;
|
|
139
|
-
this.branchData.checkedOutBranch =
|
|
140
|
-
checkedOut
|
|
141
|
-
.map((b) => {
|
|
142
|
-
const branch = branchData.branches.find((bb) => bb.name === b);
|
|
143
|
-
if (branch) {
|
|
144
|
-
return branch;
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
return null;
|
|
148
|
-
}
|
|
149
|
-
})
|
|
150
|
-
.filter((b) => b !== null)[0] ?? null;
|
|
151
|
-
// ALWAYS fallback to default branch for checked out branch (to avoid retranslation)
|
|
152
|
-
if (!this.branchData.checkedOutBranch && branchData.defaultBranch) {
|
|
153
|
-
this.branchData.checkedOutBranch = branchData.defaultBranch;
|
|
154
|
-
}
|
|
155
|
-
this.spinner.stop(chalk.green('Branch information resolved successfully'));
|
|
156
|
-
return this.branchData;
|
|
157
|
-
}
|
|
158
|
-
async wait() {
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { WorkflowStep } from './WorkflowStep.js';
|
|
2
|
-
import { GT } from 'generaltranslation';
|
|
3
|
-
import { Settings } from '../../types/index.js';
|
|
4
|
-
import { FileStatusTracker } from './PollJobsStep.js';
|
|
5
|
-
export type DownloadTranslationsInput = {
|
|
6
|
-
fileTracker: FileStatusTracker;
|
|
7
|
-
resolveOutputPath: (sourcePath: string, locale: string) => string | null;
|
|
8
|
-
forceDownload?: boolean;
|
|
9
|
-
};
|
|
10
|
-
export declare class DownloadTranslationsStep extends WorkflowStep<DownloadTranslationsInput, boolean> {
|
|
11
|
-
private gt;
|
|
12
|
-
private settings;
|
|
13
|
-
private spinner;
|
|
14
|
-
constructor(gt: GT, settings: Settings);
|
|
15
|
-
run({ fileTracker, resolveOutputPath, forceDownload, }: DownloadTranslationsInput): Promise<boolean>;
|
|
16
|
-
private downloadFiles;
|
|
17
|
-
private downloadFilesWithRetry;
|
|
18
|
-
wait(): Promise<void>;
|
|
19
|
-
}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { WorkflowStep } from './WorkflowStep.js';
|
|
3
|
-
import { logger } from '../../console/logger.js';
|
|
4
|
-
import { downloadFileBatch, } from '../../api/downloadFileBatch.js';
|
|
5
|
-
import { recordWarning } from '../../state/translateWarnings.js';
|
|
6
|
-
export class DownloadTranslationsStep extends WorkflowStep {
|
|
7
|
-
gt;
|
|
8
|
-
settings;
|
|
9
|
-
spinner = null;
|
|
10
|
-
constructor(gt, settings) {
|
|
11
|
-
super();
|
|
12
|
-
this.gt = gt;
|
|
13
|
-
this.settings = settings;
|
|
14
|
-
}
|
|
15
|
-
async run({ fileTracker, resolveOutputPath, forceDownload, }) {
|
|
16
|
-
this.spinner = logger.createProgressBar(fileTracker.completed.size);
|
|
17
|
-
this.spinner.start('Downloading files...');
|
|
18
|
-
// Download ready files
|
|
19
|
-
const success = await this.downloadFiles(fileTracker, resolveOutputPath, forceDownload);
|
|
20
|
-
if (success) {
|
|
21
|
-
this.spinner.stop(chalk.green('Downloaded files successfully'));
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
this.spinner.stop(chalk.red('Failed to download files'));
|
|
25
|
-
}
|
|
26
|
-
return success;
|
|
27
|
-
}
|
|
28
|
-
async downloadFiles(fileTracker, resolveOutputPath, forceDownload) {
|
|
29
|
-
try {
|
|
30
|
-
// Only download files that are marked as completed
|
|
31
|
-
const currentQueryData = Array.from(fileTracker.completed.values());
|
|
32
|
-
// If no files to download, we're done
|
|
33
|
-
if (currentQueryData.length === 0) {
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
// Check for translations
|
|
37
|
-
const responseData = await this.gt.queryFileData({
|
|
38
|
-
translatedFiles: currentQueryData.map((item) => ({
|
|
39
|
-
fileId: item.fileId,
|
|
40
|
-
versionId: item.versionId,
|
|
41
|
-
branchId: item.branchId,
|
|
42
|
-
locale: item.locale,
|
|
43
|
-
})),
|
|
44
|
-
});
|
|
45
|
-
const translatedFiles = responseData.translatedFiles || [];
|
|
46
|
-
// Filter for ready translations
|
|
47
|
-
const readyTranslations = translatedFiles.filter((file) => file.completedAt !== null);
|
|
48
|
-
// Prepare batch download data
|
|
49
|
-
const batchFiles = readyTranslations
|
|
50
|
-
.map((translation) => {
|
|
51
|
-
const fileKey = `${translation.branchId}:${translation.fileId}:${translation.versionId}:${translation.locale}`;
|
|
52
|
-
const fileProperties = fileTracker.completed.get(fileKey);
|
|
53
|
-
if (!fileProperties) {
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
const outputPath = resolveOutputPath(fileProperties.fileName, translation.locale);
|
|
57
|
-
// Skip downloading GTJSON files that are not in the files configuration
|
|
58
|
-
if (outputPath === null) {
|
|
59
|
-
fileTracker.completed.delete(fileKey);
|
|
60
|
-
fileTracker.skipped.set(fileKey, fileProperties);
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
return {
|
|
64
|
-
branchId: translation.branchId,
|
|
65
|
-
fileId: translation.fileId,
|
|
66
|
-
versionId: translation.versionId,
|
|
67
|
-
locale: translation.locale,
|
|
68
|
-
inputPath: fileProperties.fileName,
|
|
69
|
-
outputPath,
|
|
70
|
-
};
|
|
71
|
-
})
|
|
72
|
-
.filter((file) => file !== null);
|
|
73
|
-
if (batchFiles.length > 0) {
|
|
74
|
-
const batchResult = await this.downloadFilesWithRetry(fileTracker, batchFiles, forceDownload);
|
|
75
|
-
this.spinner?.stop(chalk.green(`Downloaded ${batchResult.successful.length} files${batchResult.skipped.length > 0 ? `, skipped ${batchResult.skipped.length} files` : ''}`));
|
|
76
|
-
if (batchResult.failed.length > 0) {
|
|
77
|
-
logger.warn(`Failed to download ${batchResult.failed.length} files: ${batchResult.failed.map((f) => f.inputPath).join('\n')}`);
|
|
78
|
-
for (const f of batchResult.failed) {
|
|
79
|
-
recordWarning('failed_download', f.inputPath, `Failed to download for locale ${f.locale}`);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
this.spinner?.stop(chalk.green('No files to download'));
|
|
85
|
-
}
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
catch (error) {
|
|
89
|
-
this.spinner?.stop(chalk.red('An error occurred while downloading translations'));
|
|
90
|
-
logger.error(chalk.red('Error: ') + error);
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
async downloadFilesWithRetry(fileTracker, files, forceDownload, maxRetries = 3, initialDelay = 1000) {
|
|
95
|
-
let remainingFiles = files;
|
|
96
|
-
let allSuccessful = [];
|
|
97
|
-
let retryCount = 0;
|
|
98
|
-
let allSkipped = [];
|
|
99
|
-
while (remainingFiles.length > 0 && retryCount <= maxRetries) {
|
|
100
|
-
const batchResult = await downloadFileBatch(fileTracker, remainingFiles, this.settings, forceDownload);
|
|
101
|
-
allSuccessful = [...allSuccessful, ...batchResult.successful];
|
|
102
|
-
allSkipped = [...allSkipped, ...batchResult.skipped];
|
|
103
|
-
this.spinner?.advance(batchResult.successful.length +
|
|
104
|
-
batchResult.skipped.length +
|
|
105
|
-
batchResult.failed.length);
|
|
106
|
-
// If no failures or we've exhausted retries, we're done
|
|
107
|
-
if (batchResult.failed.length === 0 || retryCount === maxRetries) {
|
|
108
|
-
return {
|
|
109
|
-
successful: allSuccessful,
|
|
110
|
-
failed: batchResult.failed,
|
|
111
|
-
skipped: allSkipped,
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
// Calculate exponential backoff delay
|
|
115
|
-
const delay = initialDelay * Math.pow(2, retryCount);
|
|
116
|
-
logger.error(chalk.yellow(`Retrying ${batchResult.failed.length} failed file(s) in ${delay}ms (attempt ${retryCount + 1}/${maxRetries})...`));
|
|
117
|
-
// Wait before retrying
|
|
118
|
-
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
119
|
-
remainingFiles = batchResult.failed;
|
|
120
|
-
retryCount++;
|
|
121
|
-
}
|
|
122
|
-
return {
|
|
123
|
-
successful: allSuccessful,
|
|
124
|
-
failed: remainingFiles,
|
|
125
|
-
skipped: allSkipped,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
async wait() {
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { EnqueueFilesResult } from 'generaltranslation/types';
|
|
2
|
-
import { WorkflowStep } from './WorkflowStep.js';
|
|
3
|
-
import { GT } from 'generaltranslation';
|
|
4
|
-
import { Settings } from '../../types/index.js';
|
|
5
|
-
import type { FileReference } from 'generaltranslation/types';
|
|
6
|
-
export declare class EnqueueStep extends WorkflowStep<FileReference[], EnqueueFilesResult> {
|
|
7
|
-
private gt;
|
|
8
|
-
private settings;
|
|
9
|
-
private force?;
|
|
10
|
-
private spinner;
|
|
11
|
-
private result;
|
|
12
|
-
constructor(gt: GT, settings: Settings, force?: boolean | undefined);
|
|
13
|
-
run(files: FileReference[]): Promise<EnqueueFilesResult>;
|
|
14
|
-
wait(): Promise<void>;
|
|
15
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { WorkflowStep } from './WorkflowStep.js';
|
|
2
|
-
import { logger } from '../../console/logger.js';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
|
-
export class EnqueueStep extends WorkflowStep {
|
|
5
|
-
gt;
|
|
6
|
-
settings;
|
|
7
|
-
force;
|
|
8
|
-
spinner = logger.createSpinner('dots');
|
|
9
|
-
result = null;
|
|
10
|
-
constructor(gt, settings, force) {
|
|
11
|
-
super();
|
|
12
|
-
this.gt = gt;
|
|
13
|
-
this.settings = settings;
|
|
14
|
-
this.force = force;
|
|
15
|
-
}
|
|
16
|
-
async run(files) {
|
|
17
|
-
this.spinner.start('Enqueuing translations...');
|
|
18
|
-
this.result = await this.gt.enqueueFiles(files, {
|
|
19
|
-
sourceLocale: this.settings.defaultLocale,
|
|
20
|
-
targetLocales: this.settings.locales,
|
|
21
|
-
publish: this.settings.publish,
|
|
22
|
-
requireApproval: this.settings.stageTranslations,
|
|
23
|
-
modelProvider: this.settings.modelProvider,
|
|
24
|
-
force: this.force,
|
|
25
|
-
});
|
|
26
|
-
return this.result;
|
|
27
|
-
}
|
|
28
|
-
async wait() {
|
|
29
|
-
if (this.result) {
|
|
30
|
-
this.spinner.stop(chalk.green('Translations enqueued successfully'));
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { WorkflowStep } from './WorkflowStep.js';
|
|
2
|
-
import { GT } from 'generaltranslation';
|
|
3
|
-
import { EnqueueFilesResult } from 'generaltranslation/types';
|
|
4
|
-
import type { FileProperties } from '../../types/files.js';
|
|
5
|
-
export type PollJobsInput = {
|
|
6
|
-
fileTracker: FileStatusTracker;
|
|
7
|
-
fileQueryData: FileProperties[];
|
|
8
|
-
jobData: EnqueueFilesResult;
|
|
9
|
-
timeoutDuration: number;
|
|
10
|
-
forceRetranslation?: boolean;
|
|
11
|
-
};
|
|
12
|
-
export type FileStatusTracker = {
|
|
13
|
-
completed: Map<string, FileProperties>;
|
|
14
|
-
inProgress: Map<string, FileProperties>;
|
|
15
|
-
failed: Map<string, FileProperties>;
|
|
16
|
-
skipped: Map<string, FileProperties>;
|
|
17
|
-
};
|
|
18
|
-
export type PollJobsOutput = {
|
|
19
|
-
success: boolean;
|
|
20
|
-
fileTracker: FileStatusTracker;
|
|
21
|
-
};
|
|
22
|
-
export declare class PollTranslationJobsStep extends WorkflowStep<PollJobsInput, PollJobsOutput> {
|
|
23
|
-
private gt;
|
|
24
|
-
private spinner;
|
|
25
|
-
private previousProgress;
|
|
26
|
-
constructor(gt: GT);
|
|
27
|
-
run({ fileTracker, fileQueryData, jobData, timeoutDuration, forceRetranslation, }: PollJobsInput): Promise<PollJobsOutput>;
|
|
28
|
-
private updateSpinner;
|
|
29
|
-
private generateStatusSuffixText;
|
|
30
|
-
wait(): Promise<void>;
|
|
31
|
-
}
|