gt 2.14.35 → 2.14.36
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 +16 -1
- package/dist/api/collectUserEditDiffs.js +112 -155
- package/dist/api/collectUserEditDiffs.js.map +1 -0
- package/dist/api/downloadFileBatch.js +164 -241
- package/dist/api/downloadFileBatch.js.map +1 -0
- package/dist/api/saveLocalEdits.js +37 -41
- package/dist/api/saveLocalEdits.js.map +1 -0
- package/dist/bin/bin-entry.js +17 -7
- package/dist/bin/bin-entry.js.map +1 -0
- package/dist/bin/bin-main.js +43 -61
- package/dist/bin/bin-main.js.map +1 -0
- package/dist/cli/base.js +382 -497
- package/dist/cli/base.js.map +1 -0
- package/dist/cli/commands/download.js +41 -49
- package/dist/cli/commands/download.js.map +1 -0
- package/dist/cli/commands/enqueue.js +26 -25
- package/dist/cli/commands/enqueue.js.map +1 -0
- package/dist/cli/commands/setupProject.js +33 -36
- package/dist/cli/commands/setupProject.js.map +1 -0
- package/dist/cli/commands/stage.js +53 -61
- package/dist/cli/commands/stage.js.map +1 -0
- package/dist/cli/commands/translate.js +75 -112
- package/dist/cli/commands/translate.js.map +1 -0
- package/dist/cli/commands/upload.js +185 -213
- package/dist/cli/commands/upload.js.map +1 -0
- package/dist/cli/commands/utils/validation.js +39 -34
- package/dist/cli/commands/utils/validation.js.map +1 -0
- package/dist/cli/flags.js +35 -62
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/inline.js +112 -137
- package/dist/cli/inline.js.map +1 -0
- package/dist/cli/next.js +17 -12
- package/dist/cli/next.js.map +1 -0
- package/dist/cli/node.js +19 -15
- package/dist/cli/node.js.map +1 -0
- package/dist/cli/python.js +13 -8
- package/dist/cli/python.js.map +1 -0
- package/dist/cli/react.js +61 -78
- package/dist/cli/react.js.map +1 -0
- package/dist/config/defaults.js +16 -11
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/generateSettings.js +167 -269
- package/dist/config/generateSettings.js.map +1 -0
- package/dist/config/optionPresets.js +78 -96
- package/dist/config/optionPresets.js.map +1 -0
- package/dist/config/resolveConfig.js +27 -32
- package/dist/config/resolveConfig.js.map +1 -0
- package/dist/config/utils.js +7 -3
- package/dist/config/utils.js.map +1 -0
- package/dist/config/validateSettings.js +19 -30
- package/dist/config/validateSettings.js.map +1 -0
- package/dist/console/colors.js +18 -13
- package/dist/console/colors.js.map +1 -0
- package/dist/console/displayTranslateSummary.js +40 -37
- package/dist/console/displayTranslateSummary.js.map +1 -0
- package/dist/console/formatting.js +8 -5
- package/dist/console/formatting.js.map +1 -0
- package/dist/console/index.d.ts +11 -9
- package/dist/console/index.js +53 -50
- package/dist/console/index.js.map +1 -0
- package/dist/console/inkFields.d.ts +23 -0
- package/dist/console/inkFields.js +87 -0
- package/dist/console/inkFields.js.map +1 -0
- package/dist/console/inkLayout.d.ts +7 -0
- package/dist/console/inkLayout.js +139 -0
- package/dist/console/inkLayout.js.map +1 -0
- package/dist/console/inkLocaleData.d.ts +4 -0
- package/dist/console/inkLocaleData.js +32 -0
- package/dist/console/inkLocaleData.js.map +1 -0
- package/dist/console/inkPrompts.d.ts +8 -0
- package/dist/console/inkPrompts.js +496 -0
- package/dist/console/inkPrompts.js.map +1 -0
- package/dist/console/inkSession.d.ts +3 -0
- package/dist/console/inkSession.js +42 -0
- package/dist/console/inkSession.js.map +1 -0
- package/dist/console/inkTerminal.d.ts +4 -0
- package/dist/console/inkTerminal.js +15 -0
- package/dist/console/inkTerminal.js.map +1 -0
- package/dist/console/inkTypes.d.ts +66 -0
- package/dist/console/inkTypes.js +1 -0
- package/dist/console/inkUtils.d.ts +24 -0
- package/dist/console/inkUtils.js +87 -0
- package/dist/console/inkUtils.js.map +1 -0
- package/dist/console/logger.js +209 -249
- package/dist/console/logger.js.map +1 -0
- package/dist/console/logging.d.ts +14 -0
- package/dist/console/logging.js +203 -162
- package/dist/console/logging.js.map +1 -0
- package/dist/console/promptParsing.d.ts +5 -0
- package/dist/console/promptParsing.js +28 -0
- package/dist/console/promptParsing.js.map +1 -0
- package/dist/console/terminalSession.d.ts +5 -0
- package/dist/console/terminalSession.js +38 -0
- package/dist/console/terminalSession.js.map +1 -0
- package/dist/extraction/index.js +3 -2
- package/dist/extraction/mapToUpdates.js +19 -18
- package/dist/extraction/mapToUpdates.js.map +1 -0
- package/dist/extraction/postProcess.js +68 -86
- package/dist/extraction/postProcess.js.map +1 -0
- package/dist/formats/files/aggregateFiles.js +223 -304
- package/dist/formats/files/aggregateFiles.js.map +1 -0
- package/dist/formats/files/collectFiles.js +53 -54
- package/dist/formats/files/collectFiles.js.map +1 -0
- package/dist/formats/files/convertToFileTranslationData.js +21 -19
- package/dist/formats/files/convertToFileTranslationData.js.map +1 -0
- package/dist/formats/files/fileMapping.js +82 -119
- package/dist/formats/files/fileMapping.js.map +1 -0
- package/dist/formats/files/preprocess/mdx.js +15 -12
- package/dist/formats/files/preprocess/mdx.js.map +1 -0
- package/dist/formats/files/preprocess/mintlify.js +15 -13
- package/dist/formats/files/preprocess/mintlify.js.map +1 -0
- package/dist/formats/files/preprocessContent.js +20 -21
- package/dist/formats/files/preprocessContent.js.map +1 -0
- package/dist/formats/files/save.js +18 -15
- package/dist/formats/files/save.js.map +1 -0
- package/dist/formats/files/supportedFiles.js +27 -22
- package/dist/formats/files/supportedFiles.js.map +1 -0
- package/dist/formats/files/transformFormat.js +93 -100
- package/dist/formats/files/transformFormat.js.map +1 -0
- package/dist/formats/json/extractJson.js +83 -110
- package/dist/formats/json/extractJson.js.map +1 -0
- package/dist/formats/json/flattenJson.js +41 -48
- package/dist/formats/json/flattenJson.js.map +1 -0
- package/dist/formats/json/jsonPath.js +20 -15
- package/dist/formats/json/jsonPath.js.map +1 -0
- package/dist/formats/json/jsonPointer.js +17 -17
- package/dist/formats/json/jsonPointer.js.map +1 -0
- package/dist/formats/json/mergeJson.js +230 -371
- package/dist/formats/json/mergeJson.js.map +1 -0
- package/dist/formats/json/parseJson.js +74 -111
- package/dist/formats/json/parseJson.js.map +1 -0
- package/dist/formats/json/transformJson.js +53 -61
- package/dist/formats/json/transformJson.js.map +1 -0
- package/dist/formats/json/utils.js +158 -187
- package/dist/formats/json/utils.js.map +1 -0
- package/dist/formats/parseKeyedMetadata.js +85 -106
- package/dist/formats/parseKeyedMetadata.js.map +1 -0
- package/dist/formats/utils.js +13 -23
- package/dist/formats/utils.js.map +1 -0
- package/dist/formats/yaml/extractYaml.js +32 -31
- package/dist/formats/yaml/extractYaml.js.map +1 -0
- package/dist/formats/yaml/mergeYaml.js +43 -60
- package/dist/formats/yaml/mergeYaml.js.map +1 -0
- package/dist/formats/yaml/parseYaml.js +34 -23
- package/dist/formats/yaml/parseYaml.js.map +1 -0
- package/dist/formats/yaml/utils.js +19 -21
- package/dist/formats/yaml/utils.js.map +1 -0
- package/dist/fs/clearLocaleDirs.js +82 -114
- package/dist/fs/clearLocaleDirs.js.map +1 -0
- package/dist/fs/config/downloadedVersions.js +174 -188
- package/dist/fs/config/downloadedVersions.js.map +1 -0
- package/dist/fs/config/loadConfig.js +12 -8
- package/dist/fs/config/loadConfig.js.map +1 -0
- package/dist/fs/config/parseFilesConfig.js +166 -227
- package/dist/fs/config/parseFilesConfig.js.map +1 -0
- package/dist/fs/config/setupConfig.js +43 -52
- package/dist/fs/config/setupConfig.js.map +1 -0
- package/dist/fs/config/updateConfig.js +44 -56
- package/dist/fs/config/updateConfig.js.map +1 -0
- package/dist/fs/config/updateVersions.js +27 -28
- package/dist/fs/config/updateVersions.js.map +1 -0
- package/dist/fs/copyFile.js +33 -37
- package/dist/fs/copyFile.js.map +1 -0
- package/dist/fs/createLoadTranslationsFile.js +32 -48
- package/dist/fs/createLoadTranslationsFile.js.map +1 -0
- package/dist/fs/determineFramework/detectPythonLibrary.js +30 -34
- package/dist/fs/determineFramework/detectPythonLibrary.js.map +1 -0
- package/dist/fs/determineFramework/index.js +46 -64
- package/dist/fs/determineFramework/index.js.map +1 -0
- package/dist/fs/determineFramework/matchPyprojectDependency.js +65 -78
- package/dist/fs/determineFramework/matchPyprojectDependency.js.map +1 -0
- package/dist/fs/determineFramework/matchRequirementsTxtDependency.js +21 -19
- package/dist/fs/determineFramework/matchRequirementsTxtDependency.js.map +1 -0
- package/dist/fs/determineFramework/matchSetupPyDependency.js +60 -81
- package/dist/fs/determineFramework/matchSetupPyDependency.js.map +1 -0
- package/dist/fs/determineFramework/resolveGtDependency.js +15 -15
- package/dist/fs/determineFramework/resolveGtDependency.js.map +1 -0
- package/dist/fs/findFilepath.js +63 -78
- package/dist/fs/findFilepath.js.map +1 -0
- package/dist/fs/loadJSON.js +18 -15
- package/dist/fs/loadJSON.js.map +1 -0
- package/dist/fs/matchFiles.js +12 -7
- package/dist/fs/matchFiles.js.map +1 -0
- package/dist/fs/saveJSON.js +10 -6
- package/dist/fs/saveJSON.js.map +1 -0
- package/dist/fs/utils.js +19 -15
- package/dist/fs/utils.js.map +1 -0
- package/dist/functions.d.ts +2 -1
- package/dist/functions.js +3 -6
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +6 -2
- package/dist/generated/version.js.map +1 -0
- package/dist/git/branches.js +77 -83
- package/dist/git/branches.js.map +1 -0
- package/dist/hooks/postProcess.js +97 -114
- package/dist/hooks/postProcess.js.map +1 -0
- package/dist/index.js +23 -31
- package/dist/index.js.map +1 -0
- package/dist/locadex/setupFlow.js +11 -8
- package/dist/locadex/setupFlow.js.map +1 -0
- package/dist/main.js +17 -7
- package/dist/main.js.map +1 -0
- package/dist/next/config/parseNextConfig.js +32 -51
- package/dist/next/config/parseNextConfig.js.map +1 -0
- package/dist/next/jsx/utils.js +25 -37
- package/dist/next/jsx/utils.js.map +1 -0
- package/dist/next/parse/handleInitGT.js +87 -154
- package/dist/next/parse/handleInitGT.js.map +1 -0
- package/dist/next/parse/wrapContent.js +136 -158
- package/dist/next/parse/wrapContent.js.map +1 -0
- package/dist/python/parse/createPythonInlineUpdates.js +36 -33
- package/dist/python/parse/createPythonInlineUpdates.js.map +1 -0
- package/dist/react/config/createESBuildConfig.js +115 -115
- package/dist/react/config/createESBuildConfig.js.map +1 -0
- package/dist/react/jsx/evaluateJsx.js +90 -124
- package/dist/react/jsx/evaluateJsx.js.map +1 -0
- package/dist/react/jsx/utils/buildImportMap.js +24 -28
- package/dist/react/jsx/utils/buildImportMap.js.map +1 -0
- package/dist/react/jsx/utils/constants.js +79 -87
- package/dist/react/jsx/utils/constants.js.map +1 -0
- package/dist/react/jsx/utils/extractSourceCode.js +36 -37
- package/dist/react/jsx/utils/extractSourceCode.js.map +1 -0
- package/dist/react/jsx/utils/getCalleeNameFromExpression.js +30 -30
- package/dist/react/jsx/utils/getCalleeNameFromExpression.js.map +1 -0
- package/dist/react/jsx/utils/getPathsAndAliases.js +70 -105
- package/dist/react/jsx/utils/getPathsAndAliases.js.map +1 -0
- package/dist/react/jsx/utils/isNumberLiteral.js +13 -11
- package/dist/react/jsx/utils/isNumberLiteral.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +103 -148
- package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/autoInsertion.js +305 -389
- package/dist/react/jsx/utils/jsxParsing/autoInsertion.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +122 -193
- package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +50 -64
- package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +41 -68
- package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/parseJsx.js +760 -1107
- package/dist/react/jsx/utils/jsxParsing/parseJsx.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/parseTProps.js +35 -71
- package/dist/react/jsx/utils/jsxParsing/parseTProps.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +39 -58
- package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/types.js +10 -24
- package/dist/react/jsx/utils/jsxParsing/types.js.map +1 -0
- package/dist/react/jsx/utils/mapAttributeName.js +13 -13
- package/dist/react/jsx/utils/mapAttributeName.js.map +1 -0
- package/dist/react/jsx/utils/parseAst.js +142 -272
- package/dist/react/jsx/utils/parseAst.js.map +1 -0
- package/dist/react/jsx/utils/parseString.js +726 -1090
- package/dist/react/jsx/utils/parseString.js.map +1 -0
- package/dist/react/jsx/utils/parseStringFunction.js +274 -401
- package/dist/react/jsx/utils/parseStringFunction.js.map +1 -0
- package/dist/react/jsx/utils/resolveImportPath.js +104 -108
- package/dist/react/jsx/utils/resolveImportPath.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js +18 -24
- package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js +412 -579
- package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/derivation/index.js +57 -67
- package/dist/react/jsx/utils/stringParsing/derivation/index.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js +26 -36
- package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js +29 -24
- package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js +34 -32
- package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +80 -117
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js +24 -19
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +18 -21
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +45 -50
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +54 -59
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +56 -69
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js.map +1 -0
- package/dist/react/jsx/utils/validateStringFunction.js +21 -29
- package/dist/react/jsx/utils/validateStringFunction.js.map +1 -0
- package/dist/react/jsx/wrapJsx.js +192 -375
- package/dist/react/jsx/wrapJsx.js.map +1 -0
- package/dist/react/parse/addVitePlugin/index.js +40 -34
- package/dist/react/parse/addVitePlugin/index.js.map +1 -0
- package/dist/react/parse/addVitePlugin/installCompiler.js +18 -20
- package/dist/react/parse/addVitePlugin/installCompiler.js.map +1 -0
- package/dist/react/parse/addVitePlugin/updateViteConfig.js +107 -111
- package/dist/react/parse/addVitePlugin/updateViteConfig.js.map +1 -0
- package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +23 -26
- package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js.map +1 -0
- package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +29 -43
- package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js.map +1 -0
- package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +70 -104
- package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js.map +1 -0
- package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +23 -29
- package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js.map +1 -0
- package/dist/react/parse/createDictionaryUpdates.js +121 -185
- package/dist/react/parse/createDictionaryUpdates.js.map +1 -0
- package/dist/react/parse/createInlineUpdates.js +123 -139
- package/dist/react/parse/createInlineUpdates.js.map +1 -0
- package/dist/react/parse/wrapContent.js +131 -156
- package/dist/react/parse/wrapContent.js.map +1 -0
- package/dist/react/utils/flattenDictionary.js +55 -70
- package/dist/react/utils/flattenDictionary.js.map +1 -0
- package/dist/react/utils/getEntryAndMetadata.js +14 -10
- package/dist/react/utils/getEntryAndMetadata.js.map +1 -0
- package/dist/react/utils/getVariableName.js +36 -33
- package/dist/react/utils/getVariableName.js.map +1 -0
- package/dist/setup/detectFramework.js +85 -102
- package/dist/setup/detectFramework.js.map +1 -0
- package/dist/setup/frameworkUtils.js +17 -28
- package/dist/setup/frameworkUtils.js.map +1 -0
- package/dist/setup/userInput.js +24 -31
- package/dist/setup/userInput.js.map +1 -0
- package/dist/setup/wizard.js +141 -143
- package/dist/setup/wizard.js.map +1 -0
- package/dist/state/mintlifyRefMap.js +12 -9
- package/dist/state/mintlifyRefMap.js.map +1 -0
- package/dist/state/recentDownloads.js +26 -23
- package/dist/state/recentDownloads.js.map +1 -0
- package/dist/state/translateWarnings.js +17 -8
- package/dist/state/translateWarnings.js.map +1 -0
- package/dist/translation/parse.js +77 -98
- package/dist/translation/parse.js.map +1 -0
- package/dist/translation/stage.js +28 -43
- package/dist/translation/stage.js.map +1 -0
- package/dist/translation/validate.js +68 -91
- package/dist/translation/validate.js.map +1 -0
- package/dist/types/libraries.js +93 -91
- package/dist/types/libraries.js.map +1 -0
- package/dist/types/parsing.js +19 -10
- package/dist/types/parsing.js.map +1 -0
- package/dist/utils/addExplicitAnchorIds.js +270 -389
- package/dist/utils/addExplicitAnchorIds.js.map +1 -0
- package/dist/utils/calculateTimeoutMs.js +11 -6
- package/dist/utils/calculateTimeoutMs.js.map +1 -0
- package/dist/utils/constants.js +15 -12
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/credentials.js +67 -114
- package/dist/utils/credentials.js.map +1 -0
- package/dist/utils/fetch.js +22 -20
- package/dist/utils/fetch.js.map +1 -0
- package/dist/utils/flattenJsonFiles.js +27 -34
- package/dist/utils/flattenJsonFiles.js.map +1 -0
- package/dist/utils/gitDiff.js +30 -32
- package/dist/utils/gitDiff.js.map +1 -0
- package/dist/utils/gt.js +7 -2
- package/dist/utils/gt.js.map +1 -0
- package/dist/utils/hash.js +14 -9
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/headers.js +10 -13
- package/dist/utils/headers.js.map +1 -0
- package/dist/utils/installPackage.js +70 -75
- package/dist/utils/installPackage.js.map +1 -0
- package/dist/utils/localizeRelativeAssets.js +114 -157
- package/dist/utils/localizeRelativeAssets.js.map +1 -0
- package/dist/utils/localizeStaticImports.js +229 -371
- package/dist/utils/localizeStaticImports.js.map +1 -0
- package/dist/utils/localizeStaticUrls.js +241 -424
- package/dist/utils/localizeStaticUrls.js.map +1 -0
- package/dist/utils/mintlifyTitleFallback.js +64 -72
- package/dist/utils/mintlifyTitleFallback.js.map +1 -0
- package/dist/utils/monorepoVersionCheck.js +177 -215
- package/dist/utils/monorepoVersionCheck.js.map +1 -0
- package/dist/utils/packageInfo.js +17 -16
- package/dist/utils/packageInfo.js.map +1 -0
- package/dist/utils/packageJson.js +51 -66
- package/dist/utils/packageJson.js.map +1 -0
- package/dist/utils/packageManager.js +237 -260
- package/dist/utils/packageManager.js.map +1 -0
- package/dist/utils/parse/needsCJS.js +36 -69
- package/dist/utils/parse/needsCJS.js.map +1 -0
- package/dist/utils/persistPostprocessHashes.js +30 -32
- package/dist/utils/persistPostprocessHashes.js.map +1 -0
- package/dist/utils/processAnchorIds.js +32 -54
- package/dist/utils/processAnchorIds.js.map +1 -0
- package/dist/utils/processOpenApi.js +469 -578
- package/dist/utils/processOpenApi.js.map +1 -0
- package/dist/utils/resolveMintlifyRefs.js +89 -105
- package/dist/utils/resolveMintlifyRefs.js.map +1 -0
- package/dist/utils/resolvePublish.js +46 -54
- package/dist/utils/resolvePublish.js.map +1 -0
- package/dist/utils/sanitizeFileContent.js +20 -27
- package/dist/utils/sanitizeFileContent.js.map +1 -0
- package/dist/utils/sharedStaticAssets.js +248 -366
- package/dist/utils/sharedStaticAssets.js.map +1 -0
- package/dist/utils/splitMintlifyLanguageRefs.js +208 -282
- package/dist/utils/splitMintlifyLanguageRefs.js.map +1 -0
- package/dist/utils/validateMdx.js +26 -23
- package/dist/utils/validateMdx.js.map +1 -0
- package/dist/utils/wrapPlainUrls.js +58 -70
- package/dist/utils/wrapPlainUrls.js.map +1 -0
- package/dist/workflows/download.js +92 -126
- package/dist/workflows/download.js.map +1 -0
- package/dist/workflows/enqueue.js +47 -54
- package/dist/workflows/enqueue.js.map +1 -0
- package/dist/workflows/publish.js +29 -29
- package/dist/workflows/publish.js.map +1 -0
- package/dist/workflows/setupProject.js +39 -40
- package/dist/workflows/setupProject.js.map +1 -0
- package/dist/workflows/stage.js +61 -65
- package/dist/workflows/stage.js.map +1 -0
- package/dist/workflows/steps/BranchStep.js +118 -163
- package/dist/workflows/steps/BranchStep.js.map +1 -0
- package/dist/workflows/steps/DownloadStep.js +107 -137
- package/dist/workflows/steps/DownloadStep.js.map +1 -0
- package/dist/workflows/steps/EnqueueStep.js +32 -32
- package/dist/workflows/steps/EnqueueStep.js.map +1 -0
- package/dist/workflows/steps/PollJobsStep.js +208 -292
- package/dist/workflows/steps/PollJobsStep.js.map +1 -0
- package/dist/workflows/steps/PublishStep.js +33 -38
- package/dist/workflows/steps/PublishStep.js.map +1 -0
- package/dist/workflows/steps/SetupStep.js +71 -72
- package/dist/workflows/steps/SetupStep.js.map +1 -0
- package/dist/workflows/steps/TagStep.js +39 -44
- package/dist/workflows/steps/TagStep.js.map +1 -0
- package/dist/workflows/steps/UploadSourcesStep.js +108 -140
- package/dist/workflows/steps/UploadSourcesStep.js.map +1 -0
- package/dist/workflows/steps/UploadTranslationsStep.js +61 -71
- package/dist/workflows/steps/UploadTranslationsStep.js.map +1 -0
- package/dist/workflows/steps/UserEditDiffsStep.js +32 -34
- package/dist/workflows/steps/UserEditDiffsStep.js.map +1 -0
- package/dist/workflows/steps/WorkflowStep.js +6 -2
- package/dist/workflows/steps/WorkflowStep.js.map +1 -0
- package/dist/workflows/upload.js +45 -46
- package/dist/workflows/upload.js.map +1 -0
- package/package.json +14 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addExplicitAnchorIds.js","names":[],"sources":["../../src/utils/addExplicitAnchorIds.ts"],"sourcesContent":["import { unified } from 'unified';\nimport remarkParse from 'remark-parse';\nimport remarkMdx from 'remark-mdx';\nimport remarkFrontmatter from 'remark-frontmatter';\nimport remarkStringify from 'remark-stringify';\nimport { visit } from 'unist-util-visit';\nimport type { Root, Heading, Literal, Node } from 'mdast';\nimport { logger } from '../console/logger.js';\nimport { escapeHtmlInTextNodes, normalizeCJKCharacters } from 'gt-remark';\nimport { decode } from 'html-entities';\nimport type { AdditionalOptions } from '../types/index.js';\n\ntype AnchorIdSettings = {\n options?: Pick<AdditionalOptions, 'experimentalAddHeaderAnchorIds'>;\n};\n\n/**\n * Generates a slug from heading text\n */\nfunction generateSlug(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^\\w\\s-]/g, '') // Remove special chars except spaces and hyphens\n .trim()\n .replace(/\\s+/g, '-') // Replace spaces with hyphens\n .replace(/-+/g, '-') // Replace multiple hyphens with single hyphen\n .replace(/^-|-$/g, ''); // Remove leading/trailing hyphens\n}\n\n/**\n * Extracts text content from heading nodes\n */\nfunction extractHeadingText(heading: Heading): string {\n let text = '';\n\n visit(heading, ['text', 'inlineCode'], (node: Node) => {\n if ('value' in node && typeof node.value === 'string') {\n text += node.value;\n }\n });\n\n return text;\n}\n\n/**\n * Simple line-by-line heading extractor that skips fenced code blocks.\n * Used as a fallback when MDX parsing fails.\n */\nfunction extractHeadingsWithFallback(mdxContent: string): HeadingInfo[] {\n const headings: HeadingInfo[] = [];\n const lines = mdxContent.split('\\n');\n\n let position = 0;\n let inFence = false;\n let fenceChar: string | null = null;\n\n for (const line of lines) {\n const fenceMatch = line.match(/^(\\s*)(`{3,}|~{3,})/);\n if (fenceMatch) {\n const fenceString = fenceMatch[2];\n if (!inFence) {\n inFence = true;\n fenceChar = fenceString;\n } else if (\n fenceChar &&\n fenceString[0] === fenceChar[0] &&\n fenceString.length >= fenceChar.length\n ) {\n inFence = false;\n fenceChar = null;\n }\n continue;\n }\n\n if (inFence) {\n continue;\n }\n\n const headingMatch = line.match(/^(#{1,6})\\s+(.*)$/);\n if (!headingMatch) {\n continue;\n }\n\n const hashes = headingMatch[1];\n const rawText = headingMatch[2];\n const { cleanedText, explicitId } = parseHeadingContent(rawText);\n\n if (cleanedText || explicitId) {\n headings.push({\n text: cleanedText,\n level: hashes.length,\n slug: explicitId ?? generateSlug(cleanedText),\n position: position++,\n });\n }\n }\n\n return headings;\n}\n\nfunction parseHeadingContent(text: string): {\n cleanedText: string;\n explicitId?: string;\n} {\n // Support both {#id} and escaped \\{#id\\} forms\n const anchorMatch = text.match(/(\\\\\\{#([^}]+)\\\\\\}|\\{#([^}]+)\\})\\s*$/);\n\n if (!anchorMatch) {\n return { cleanedText: text };\n }\n\n const explicitId = anchorMatch[2] || anchorMatch[3];\n const cleanedText = text.replace(anchorMatch[0], '').trimEnd();\n\n return { cleanedText, explicitId };\n}\n\n/**\n * Checks if a heading is already wrapped in a div with id\n */\nfunction hasExplicitId(heading: Heading, _ast: Root): boolean {\n const lastChild = heading.children[heading.children.length - 1];\n if (lastChild?.type === 'text') {\n return /(\\{#[^}]+\\}|\\\\\\{#[^}]+\\\\\\}|\\[[^\\]]+\\])\\s*$/.test(lastChild.value);\n }\n return false;\n}\n\n/**\n * Represents a heading with its position and metadata\n */\nexport interface HeadingInfo {\n text: string;\n level: number;\n slug: string;\n position: number;\n}\n\n/**\n * Extracts heading information from content (read-only, no modifications)\n */\nexport function extractHeadingInfo(mdxContent: string): HeadingInfo[] {\n const headings: HeadingInfo[] = [];\n\n // Parse the MDX content into an AST\n let processedAst: Root;\n try {\n const parseProcessor = unified()\n .use(remarkParse)\n .use(remarkFrontmatter, ['yaml', 'toml'])\n .use(remarkMdx);\n\n const ast = parseProcessor.parse(mdxContent);\n processedAst = parseProcessor.runSync(ast) as Root;\n } catch {\n // Fallback: line-by-line extraction skipping fenced code blocks\n return extractHeadingsWithFallback(mdxContent);\n }\n\n let position = 0;\n visit(processedAst, 'heading', (heading: Heading) => {\n const headingText = extractHeadingText(heading);\n const { cleanedText, explicitId } = parseHeadingContent(headingText);\n if (cleanedText || explicitId) {\n const slug = explicitId ?? generateSlug(cleanedText);\n headings.push({\n text: cleanedText,\n level: heading.depth,\n slug,\n position: position++,\n });\n }\n });\n\n return headings;\n}\n\n/**\n * Applies anchor IDs to translated content based on source heading mapping\n */\nexport function addExplicitAnchorIds(\n translatedContent: string,\n sourceHeadingMap: HeadingInfo[],\n settings?: AnchorIdSettings,\n sourcePath?: string,\n translatedPath?: string,\n fileTypeHint?: 'md' | 'mdx'\n): {\n content: string;\n hasChanges: boolean;\n addedIds: Array<{ heading: string; id: string }>;\n} {\n const addedIds: Array<{ heading: string; id: string }> = [];\n const useDivWrapping =\n settings?.options?.experimentalAddHeaderAnchorIds === 'mintlify';\n\n // Extract headings from translated content\n const translatedHeadings = extractHeadingInfo(translatedContent);\n\n // Pre-processing validation: check if header counts match\n if (sourceHeadingMap.length !== translatedHeadings.length) {\n const sourceFile = sourcePath\n ? `Source file: ${sourcePath}`\n : 'Source file';\n const translatedFile = translatedPath\n ? `translated file: ${translatedPath}`\n : 'translated file';\n\n logger.warn(\n `Header count mismatch detected! ${sourceFile} has ${sourceHeadingMap.length} headers but ${translatedFile} has ${translatedHeadings.length} headers. ` +\n `This likely means your source file was edited after translation was requested, causing a mismatch between ` +\n `the number of headers in your source file vs the translated file. Re-translate this file to resolve the issue.`\n );\n }\n\n // Create ID mapping based on positional matching\n const idMappings = new Map<number, string>();\n sourceHeadingMap.forEach((sourceHeading, index) => {\n const translatedHeading = translatedHeadings[index];\n // Match by position and level for safety\n if (translatedHeading && translatedHeading.level === sourceHeading.level) {\n idMappings.set(index, sourceHeading.slug);\n addedIds.push({\n heading: translatedHeading.text,\n id: sourceHeading.slug,\n });\n }\n });\n\n if (idMappings.size === 0) {\n return {\n content: translatedContent,\n hasChanges: false,\n addedIds: [],\n };\n }\n\n const translatedIsMdx = translatedPath\n ? translatedPath.toLowerCase().endsWith('.mdx')\n : true; // default to mdx-style escaping when unknown\n const shouldEscapeAnchors =\n fileTypeHint === 'mdx'\n ? true\n : fileTypeHint === 'md'\n ? false\n : translatedIsMdx;\n\n // Apply IDs to translated content\n let content: string;\n if (useDivWrapping) {\n content = applyDivWrappedIds(\n translatedContent,\n translatedHeadings,\n idMappings\n );\n } else {\n content = applyInlineIds(\n translatedContent,\n idMappings,\n shouldEscapeAnchors\n );\n }\n\n return {\n content,\n hasChanges: content !== translatedContent,\n addedIds,\n };\n}\n\n/**\n * Adds inline {#id} syntax to headings (standard markdown approach)\n */\nfunction applyInlineIds(\n translatedContent: string,\n idMappings: Map<number, string>,\n escapeAnchors: boolean\n): string {\n const escapeInlineAnchors = (content: string): string => {\n if (!escapeAnchors) return content;\n return content.replace(\n /\\{#([A-Za-z0-9-_]+)\\}/g,\n (match, id, offset, str) => {\n if (offset > 0 && str[offset - 1] === '\\\\') {\n return match;\n }\n return `\\\\{#${id}\\\\}`;\n }\n );\n };\n\n // Parse the translated content\n let processedAst: Root;\n try {\n const parseProcessor = unified()\n .use(remarkParse)\n .use(remarkFrontmatter, ['yaml', 'toml'])\n .use(remarkMdx);\n\n const ast = parseProcessor.parse(translatedContent);\n processedAst = parseProcessor.runSync(ast) as Root;\n } catch {\n return applyInlineIdsStringFallback(\n translatedContent,\n idMappings,\n escapeAnchors\n );\n }\n\n // Apply IDs to headings based on position\n let headingIndex = 0;\n let actuallyModifiedContent = false;\n\n visit(processedAst, 'heading', (heading: Heading) => {\n const id = idMappings.get(headingIndex);\n if (id) {\n // Skip if heading already has explicit ID\n if (hasExplicitId(heading, processedAst)) {\n if (escapeAnchors) {\n // Normalize existing inline IDs to escaped form\n const lastChild = heading.children[heading.children.length - 1];\n if (lastChild?.type === 'text') {\n const match = lastChild.value.match(/\\{#([^}]+)\\}\\s*$/);\n const alreadyEscaped = lastChild.value.match(/\\\\\\{#[^}]+\\\\\\}\\s*$/);\n if (match && !alreadyEscaped) {\n const anchorId = match[1];\n const base = lastChild.value.replace(/\\s*\\{#[^}]+\\}\\s*$/, '');\n lastChild.value = `${base} \\\\{#${anchorId}\\\\}`;\n actuallyModifiedContent = true;\n }\n }\n }\n headingIndex++;\n return;\n }\n\n // Add the ID to the heading\n const lastChild = heading.children[heading.children.length - 1];\n if (lastChild?.type === 'text') {\n lastChild.value += escapeAnchors ? ` \\\\{#${id}\\\\}` : ` {#${id}}`;\n } else {\n // If last child is not text, add a new text node\n heading.children.push({\n type: 'text',\n value: escapeAnchors ? ` \\\\{#${id}\\\\}` : ` {#${id}}`,\n });\n }\n actuallyModifiedContent = true;\n }\n headingIndex++;\n });\n\n // If we didn't modify any headings, return original content\n if (!actuallyModifiedContent) {\n const escaped = escapeInlineAnchors(translatedContent);\n return escaped;\n }\n\n // Convert the modified AST back to MDX string\n try {\n const stringifyProcessor = unified()\n .use(remarkFrontmatter, ['yaml', 'toml'])\n .use(remarkMdx)\n .use(normalizeCJKCharacters)\n .use(escapeHtmlInTextNodes)\n .use(remarkStringify, {\n handlers: {\n // Custom handler to prevent escaping of {#id} syntax\n text(node: Literal) {\n return node.value;\n },\n },\n });\n\n const outTree = stringifyProcessor.runSync(processedAst) as Root;\n let content = stringifyProcessor.stringify(outTree);\n\n // Handle newline formatting to match original input\n if (content.endsWith('\\n') && !translatedContent.endsWith('\\n')) {\n content = content.slice(0, -1);\n }\n\n // Preserve leading newlines from original content\n if (translatedContent.startsWith('\\n') && !content.startsWith('\\n')) {\n content = '\\n' + content;\n }\n\n return content;\n } catch {\n return translatedContent;\n }\n}\n\n/**\n * Fallback string-based inline ID application when AST parsing fails\n */\nfunction applyInlineIdsStringFallback(\n translatedContent: string,\n idMappings: Map<number, string>,\n escapeAnchors: boolean\n): string {\n let headingIndex = 0;\n let inFence = false;\n let fenceChar: string | null = null;\n\n const processedLines = translatedContent.split('\\n').map((line) => {\n const fenceMatch = line.match(/^(\\s*)(`{3,}|~{3,})/);\n if (fenceMatch) {\n const fenceString = fenceMatch[2];\n if (!inFence) {\n inFence = true;\n fenceChar = fenceString;\n } else if (\n fenceChar &&\n fenceString[0] === fenceChar[0] &&\n fenceString.length >= fenceChar.length\n ) {\n inFence = false;\n fenceChar = null;\n }\n return line;\n }\n\n if (inFence) {\n return line;\n }\n\n const headingMatch = line.match(/^(#{1,6}\\s+)(.*)$/);\n if (!headingMatch) {\n return line;\n }\n\n const prefix = headingMatch[1];\n const text = headingMatch[2];\n const id = idMappings.get(headingIndex++);\n\n if (!id) {\n return line;\n }\n\n const hasEscaped = /\\\\\\{#[^}]+\\\\\\}\\s*$/.test(text);\n const hasUnescaped = /\\{#[^}]+\\}\\s*$/.test(text);\n\n if (hasEscaped) {\n return line;\n }\n\n if (hasUnescaped) {\n if (!escapeAnchors) {\n return line;\n }\n return `${prefix}${text.replace(/\\{#([^}]+)\\}\\s*$/, '\\\\{#$1\\\\}')}`;\n }\n\n const suffix = escapeAnchors ? ` \\\\{#${id}\\\\}` : ` {#${id}}`;\n return `${prefix}${text}${suffix}`;\n });\n\n return processedLines.join('\\n');\n}\n\n/**\n * Wraps headings in divs with IDs (Mintlify approach)\n */\nfunction applyDivWrappedIds(\n translatedContent: string,\n translatedHeadings: HeadingInfo[],\n idMappings: Map<number, string>\n): string {\n // Extract all heading lines from the translated markdown\n const lines = translatedContent.split('\\n');\n const headingLines: Array<{ line: string; level: number; index: number }> =\n [];\n\n lines.forEach((line, index) => {\n const headingMatch = line.match(/^(#{1,6})\\s+(.+)$/);\n if (headingMatch) {\n const level = headingMatch[1].length;\n headingLines.push({ line, level, index });\n }\n });\n\n // Use string-based approach to wrap headings in divs\n let content = translatedContent;\n const headingsToWrap: Array<{\n originalLine: string;\n id: string;\n }> = [];\n\n // Match translated headings with their corresponding lines by position and level\n translatedHeadings.forEach((heading, position) => {\n const id = idMappings.get(position);\n if (id) {\n // Find the corresponding original line for this heading\n const matchingLine = headingLines.find((hl) => {\n // Extract clean text from the original line for comparison\n const lineCleanText = hl.line.replace(/^#{1,6}\\s+/, '').trim();\n // Create a version without markdown formatting for comparison\n const cleanLineText = lineCleanText\n .replace(/\\*\\*(.*?)\\*\\*/g, '$1') // Remove bold\n .replace(/\\*(.*?)\\*/g, '$1') // Remove italic\n .replace(/`(.*?)`/g, '$1') // Remove inline code\n .replace(/\\[(.*?)\\]\\(.*?\\)/g, '$1') // Remove links, keep text\n .trim();\n\n const normalizedLineText = decode(cleanLineText).trim();\n const normalizedHeadingText = decode(heading.text).trim();\n\n return (\n normalizedLineText === normalizedHeadingText &&\n hl.level === heading.level\n );\n });\n\n if (matchingLine) {\n headingsToWrap.push({\n originalLine: matchingLine.line,\n id,\n });\n }\n }\n });\n\n if (headingsToWrap.length > 0) {\n // Process headings from longest to shortest original line to avoid partial matches\n const sortedHeadings = headingsToWrap.sort(\n (a, b) => b.originalLine.length - a.originalLine.length\n );\n\n for (const heading of sortedHeadings) {\n // If already wrapped with this id, skip (idempotent)\n if (content.includes(`<div id=\"${heading.id}\">`)) {\n continue;\n }\n // Escape the original line for use in regex\n const escapedLine = heading.originalLine.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&'\n );\n const headingPattern = new RegExp(`^${escapedLine}\\\\s*$`, 'gm');\n\n content = content.replace(headingPattern, (match) => {\n return `<div id=\"${heading.id}\">\\n ${match.trim()}\\n</div>\\n`;\n });\n }\n }\n\n return content;\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "./constants.js";
|
|
2
|
+
//#region src/utils/calculateTimeoutMs.ts
|
|
2
3
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
* Calculate timeout in ms with validation
|
|
5
|
+
*/
|
|
6
|
+
function calculateTimeoutMs(timeout) {
|
|
7
|
+
const value = timeout !== void 0 ? Number(timeout) : 900;
|
|
8
|
+
return (Number.isFinite(value) ? value : 900) * 1e3;
|
|
8
9
|
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { calculateTimeoutMs };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=calculateTimeoutMs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculateTimeoutMs.js","names":[],"sources":["../../src/utils/calculateTimeoutMs.ts"],"sourcesContent":["import { DEFAULT_TIMEOUT_SECONDS } from './constants.js';\n\n/**\n * Calculate timeout in ms with validation\n */\nexport function calculateTimeoutMs(\n timeout: string | number | undefined\n): number {\n const value =\n timeout !== undefined ? Number(timeout) : DEFAULT_TIMEOUT_SECONDS;\n return (Number.isFinite(value) ? value : DEFAULT_TIMEOUT_SECONDS) * 1000;\n}\n"],"mappings":";;;;;AAKA,SAAgB,mBACd,SACQ;CACR,MAAM,QACJ,YAAY,KAAA,IAAY,OAAO,QAAQ,GAAA;AACzC,SAAQ,OAAO,SAAS,MAAM,GAAG,QAAA,OAAmC"}
|
package/dist/utils/constants.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import { hashStringSync } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import { hashStringSync } from "./hash.js";
|
|
2
|
+
//#region src/utils/constants.ts
|
|
3
|
+
const GT_DASHBOARD_URL = "https://dash.generaltranslation.com";
|
|
4
|
+
const GT_CONFIG_SCHEMA_URL = "https://assets.gtx.dev/config-schema.json";
|
|
5
|
+
const TEMPLATE_FILE_NAME = "__INTERNAL_GT_TEMPLATE_NAME__";
|
|
6
|
+
const TEMPLATE_FILE_ID = hashStringSync(TEMPLATE_FILE_NAME);
|
|
7
|
+
const DEFAULT_GIT_REMOTE_NAME = "origin";
|
|
8
|
+
const DEFAULT_TIMEOUT_SECONDS = 900;
|
|
9
|
+
const SURROUNDING_LINE_COUNT = 5;
|
|
10
|
+
const DEFAULT_TRANSLATIONS_DIR = "./public/_gt";
|
|
11
|
+
const DEFAULT_VITE_TRANSLATIONS_DIR = "./src/_gt";
|
|
12
|
+
//#endregion
|
|
13
|
+
export { DEFAULT_GIT_REMOTE_NAME, DEFAULT_TIMEOUT_SECONDS, DEFAULT_TRANSLATIONS_DIR, DEFAULT_VITE_TRANSLATIONS_DIR, GT_CONFIG_SCHEMA_URL, GT_DASHBOARD_URL, SURROUNDING_LINE_COUNT, TEMPLATE_FILE_ID, TEMPLATE_FILE_NAME };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","names":[],"sources":["../../src/utils/constants.ts"],"sourcesContent":["import { hashStringSync } from './hash.js';\n\nexport const GT_DASHBOARD_URL = 'https://dash.generaltranslation.com';\n\nexport const GT_CONFIG_SCHEMA_URL = 'https://assets.gtx.dev/config-schema.json';\n\nexport const TEMPLATE_FILE_NAME = '__INTERNAL_GT_TEMPLATE_NAME__';\nexport const TEMPLATE_FILE_ID = hashStringSync(TEMPLATE_FILE_NAME);\n\nexport const DEFAULT_GIT_REMOTE_NAME = 'origin';\n\nexport const DEFAULT_TIMEOUT_SECONDS = 900;\n\n// Number of source code lines to capture above and below a translation site\nexport const SURROUNDING_LINE_COUNT = 5;\n\n// Default translations directory paths\nexport const DEFAULT_TRANSLATIONS_DIR = './public/_gt';\nexport const DEFAULT_VITE_TRANSLATIONS_DIR = './src/_gt';\n"],"mappings":";;AAEA,MAAa,mBAAmB;AAEhC,MAAa,uBAAuB;AAEpC,MAAa,qBAAqB;AAClC,MAAa,mBAAmB,eAAe,mBAAmB;AAElE,MAAa,0BAA0B;AAEvC,MAAa,0BAA0B;AAGvC,MAAa,yBAAyB;AAGtC,MAAa,2BAA2B;AACxC,MAAa,gCAAgC"}
|
|
@@ -1,118 +1,71 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
}, 2000);
|
|
39
|
-
// timeout after 1 hour
|
|
40
|
-
const timeout = setTimeout(() => {
|
|
41
|
-
spinner.stop('Timed out');
|
|
42
|
-
clearInterval(interval);
|
|
43
|
-
logErrorAndExit('Timed out waiting for response from dashboard');
|
|
44
|
-
}, 1000 * 60 * 60);
|
|
45
|
-
});
|
|
46
|
-
spinner.stop('Received credentials');
|
|
47
|
-
return credentials;
|
|
1
|
+
import { logger } from "../console/logger.js";
|
|
2
|
+
import { logErrorAndExit } from "../console/logging.js";
|
|
3
|
+
import apiRequest from "./fetch.js";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import fs from "node:fs";
|
|
7
|
+
//#region src/utils/credentials.ts
|
|
8
|
+
async function retrieveCredentials(settings, keyType) {
|
|
9
|
+
const { sessionId } = await generateCredentialsSession(settings.baseUrl, keyType);
|
|
10
|
+
const urlToOpen = `${settings.dashboardUrl}/cli/wizard/${sessionId}`;
|
|
11
|
+
await import("open").then((open) => open.default(urlToOpen, { wait: false }));
|
|
12
|
+
logger.message(`${chalk.dim(`If the browser window didn't open automatically, please open the following link:`)}\n\n${chalk.cyan(urlToOpen)}`);
|
|
13
|
+
const spinner = logger.createSpinner("dots");
|
|
14
|
+
spinner.start("Waiting for response from dashboard...");
|
|
15
|
+
const credentials = await new Promise((resolve) => {
|
|
16
|
+
const interval = setInterval(async () => {
|
|
17
|
+
try {
|
|
18
|
+
const res = await apiRequest(settings.baseUrl, `/cli/wizard/${sessionId}`, { method: "GET" });
|
|
19
|
+
if (res.status === 200) {
|
|
20
|
+
resolve(await res.json());
|
|
21
|
+
clearInterval(interval);
|
|
22
|
+
clearTimeout(timeout);
|
|
23
|
+
apiRequest(settings.baseUrl, `/cli/wizard/${sessionId}`, { method: "DELETE" });
|
|
24
|
+
}
|
|
25
|
+
} catch (err) {
|
|
26
|
+
console.error(err);
|
|
27
|
+
}
|
|
28
|
+
}, 2e3);
|
|
29
|
+
const timeout = setTimeout(() => {
|
|
30
|
+
spinner.stop("Timed out");
|
|
31
|
+
clearInterval(interval);
|
|
32
|
+
logErrorAndExit("Timed out waiting for response from dashboard");
|
|
33
|
+
}, 1e3 * 60 * 60);
|
|
34
|
+
});
|
|
35
|
+
spinner.stop("Received credentials");
|
|
36
|
+
return credentials;
|
|
48
37
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (!res.ok) {
|
|
54
|
-
logErrorAndExit('Failed to generate credentials session');
|
|
55
|
-
}
|
|
56
|
-
return await res.json();
|
|
38
|
+
async function generateCredentialsSession(url, keyType) {
|
|
39
|
+
const res = await apiRequest(url, "/cli/wizard/session", { body: { keyType } });
|
|
40
|
+
if (!res.ok) logErrorAndExit("Failed to generate credentials session");
|
|
41
|
+
return await res.json();
|
|
57
42
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return (process.env.GT_PROJECT_ID &&
|
|
61
|
-
(process.env.GT_API_KEY || process.env.GT_DEV_API_KEY));
|
|
43
|
+
function areCredentialsSet() {
|
|
44
|
+
return process.env.GT_PROJECT_ID && (process.env.GT_API_KEY || process.env.GT_DEV_API_KEY);
|
|
62
45
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
else {
|
|
85
|
-
// Read existing content
|
|
86
|
-
envContent = await fs.promises.readFile(envFile, 'utf8');
|
|
87
|
-
}
|
|
88
|
-
// Always append the credentials to the file
|
|
89
|
-
let prefix = '';
|
|
90
|
-
if (framework === 'next-pages') {
|
|
91
|
-
prefix = 'NEXT_PUBLIC_';
|
|
92
|
-
}
|
|
93
|
-
else if (framework === 'vite') {
|
|
94
|
-
prefix = 'VITE_';
|
|
95
|
-
}
|
|
96
|
-
else if (framework === 'gatsby') {
|
|
97
|
-
prefix = 'GATSBY_';
|
|
98
|
-
}
|
|
99
|
-
else if (framework === 'react') {
|
|
100
|
-
prefix = 'REACT_APP_';
|
|
101
|
-
}
|
|
102
|
-
else if (framework === 'redwood') {
|
|
103
|
-
prefix = 'REDWOOD_ENV_';
|
|
104
|
-
}
|
|
105
|
-
envContent += `\n${prefix}GT_PROJECT_ID=${credentials.projectId}\n`;
|
|
106
|
-
for (const apiKey of credentials.apiKeys) {
|
|
107
|
-
if (apiKey.type === 'development') {
|
|
108
|
-
envContent += `${prefix || ''}GT_DEV_API_KEY=${apiKey.key}\n`;
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
envContent += `GT_API_KEY=${apiKey.key}\n`;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
// Ensure we don't have excessive newlines
|
|
115
|
-
envContent = envContent.replace(/\n{3,}/g, '\n\n').trim() + '\n';
|
|
116
|
-
// Write the updated content back to the file
|
|
117
|
-
await fs.promises.writeFile(envFile, envContent, 'utf8');
|
|
46
|
+
async function setCredentials(credentials, framework, cwd = process.cwd()) {
|
|
47
|
+
const envFile = path.join(cwd, ".env.local");
|
|
48
|
+
let envContent = "";
|
|
49
|
+
if (!fs.existsSync(envFile)) {
|
|
50
|
+
await fs.promises.writeFile(envFile, "", "utf8");
|
|
51
|
+
const gitignoreFile = path.join(cwd, ".gitignore");
|
|
52
|
+
if (fs.existsSync(gitignoreFile)) {
|
|
53
|
+
if (!(await fs.promises.readFile(gitignoreFile, "utf8")).includes(".env.local")) await fs.promises.appendFile(gitignoreFile, "\n.env.local\n", "utf8");
|
|
54
|
+
} else await fs.promises.writeFile(gitignoreFile, ".env.local\n", "utf8");
|
|
55
|
+
} else envContent = await fs.promises.readFile(envFile, "utf8");
|
|
56
|
+
let prefix = "";
|
|
57
|
+
if (framework === "next-pages") prefix = "NEXT_PUBLIC_";
|
|
58
|
+
else if (framework === "vite") prefix = "VITE_";
|
|
59
|
+
else if (framework === "gatsby") prefix = "GATSBY_";
|
|
60
|
+
else if (framework === "react") prefix = "REACT_APP_";
|
|
61
|
+
else if (framework === "redwood") prefix = "REDWOOD_ENV_";
|
|
62
|
+
envContent += `\n${prefix}GT_PROJECT_ID=${credentials.projectId}\n`;
|
|
63
|
+
for (const apiKey of credentials.apiKeys) if (apiKey.type === "development") envContent += `${prefix || ""}GT_DEV_API_KEY=${apiKey.key}\n`;
|
|
64
|
+
else envContent += `GT_API_KEY=${apiKey.key}\n`;
|
|
65
|
+
envContent = envContent.replace(/\n{3,}/g, "\n\n").trim() + "\n";
|
|
66
|
+
await fs.promises.writeFile(envFile, envContent, "utf8");
|
|
118
67
|
}
|
|
68
|
+
//#endregion
|
|
69
|
+
export { areCredentialsSet, generateCredentialsSession, retrieveCredentials, setCredentials };
|
|
70
|
+
|
|
71
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","names":[],"sources":["../../src/utils/credentials.ts"],"sourcesContent":["import { logErrorAndExit } from '../console/logging.js';\nimport { logger } from '../console/logger.js';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport { Settings, SupportedFrameworks } from '../types/index.js';\nimport chalk from 'chalk';\nimport apiRequest from './fetch.js';\n// Type for credentials returned from the dashboard\ntype Credentials = {\n apiKeys: ApiKey[];\n projectId: string;\n};\n\ntype ApiKey = {\n key: string;\n type: 'development' | 'production';\n};\n\n// Fetches project ID and API key by opening the dashboard in the browser\nexport async function retrieveCredentials(\n settings: Settings,\n keyType: 'development' | 'production' | 'all'\n): Promise<Credentials> {\n // Generate a session ID\n const { sessionId } = await generateCredentialsSession(\n settings.baseUrl,\n keyType\n );\n\n const urlToOpen = `${settings.dashboardUrl}/cli/wizard/${sessionId}`;\n await import('open').then((open) =>\n open.default(urlToOpen, {\n wait: false,\n })\n );\n\n logger.message(\n `${chalk.dim(\n `If the browser window didn't open automatically, please open the following link:`\n )}\\n\\n${chalk.cyan(urlToOpen)}`\n );\n\n const spinner = logger.createSpinner('dots');\n spinner.start('Waiting for response from dashboard...');\n\n const credentials = await new Promise<Credentials>((resolve) => {\n const interval = setInterval(async () => {\n // Ping the dashboard to see if the credentials are set\n try {\n const res = await apiRequest(\n settings.baseUrl,\n `/cli/wizard/${sessionId}`,\n {\n method: 'GET',\n }\n );\n if (res.status === 200) {\n const data = await res.json();\n resolve(data as Credentials);\n clearInterval(interval);\n clearTimeout(timeout);\n apiRequest(settings.baseUrl, `/cli/wizard/${sessionId}`, {\n method: 'DELETE',\n });\n }\n } catch (err) {\n console.error(err);\n }\n }, 2000);\n // timeout after 1 hour\n const timeout = setTimeout(\n () => {\n spinner.stop('Timed out');\n clearInterval(interval);\n logErrorAndExit('Timed out waiting for response from dashboard');\n },\n 1000 * 60 * 60\n );\n });\n spinner.stop('Received credentials');\n return credentials;\n}\n\nexport async function generateCredentialsSession(\n url: string,\n keyType: 'development' | 'production' | 'all'\n): Promise<{\n sessionId: string;\n}> {\n const res = await apiRequest(url, '/cli/wizard/session', {\n body: { keyType },\n });\n if (!res.ok) {\n logErrorAndExit('Failed to generate credentials session');\n }\n return await res.json();\n}\n\n// Checks if the credentials are set in the environment variables\nexport function areCredentialsSet() {\n return (\n process.env.GT_PROJECT_ID &&\n (process.env.GT_API_KEY || process.env.GT_DEV_API_KEY)\n );\n}\n\n// Sets the credentials in .env.local file\nexport async function setCredentials(\n credentials: Credentials,\n framework?: SupportedFrameworks,\n cwd: string = process.cwd()\n) {\n const envFile = path.join(cwd, '.env.local');\n let envContent = '';\n\n // Check if .env.local exists, create it if it doesn't\n if (!fs.existsSync(envFile)) {\n // File doesn't exist, create it\n await fs.promises.writeFile(envFile, '', 'utf8');\n\n // Add .env.local to .gitignore if it exists\n const gitignoreFile = path.join(cwd, '.gitignore');\n if (fs.existsSync(gitignoreFile)) {\n const gitignoreContent = await fs.promises.readFile(\n gitignoreFile,\n 'utf8'\n );\n if (!gitignoreContent.includes('.env.local')) {\n await fs.promises.appendFile(gitignoreFile, '\\n.env.local\\n', 'utf8');\n }\n } else {\n // Create .gitignore file with .env.local\n await fs.promises.writeFile(gitignoreFile, '.env.local\\n', 'utf8');\n }\n } else {\n // Read existing content\n envContent = await fs.promises.readFile(envFile, 'utf8');\n }\n\n // Always append the credentials to the file\n let prefix = '';\n if (framework === 'next-pages') {\n prefix = 'NEXT_PUBLIC_';\n } else if (framework === 'vite') {\n prefix = 'VITE_';\n } else if (framework === 'gatsby') {\n prefix = 'GATSBY_';\n } else if (framework === 'react') {\n prefix = 'REACT_APP_';\n } else if (framework === 'redwood') {\n prefix = 'REDWOOD_ENV_';\n }\n\n envContent += `\\n${prefix}GT_PROJECT_ID=${credentials.projectId}\\n`;\n\n for (const apiKey of credentials.apiKeys) {\n if (apiKey.type === 'development') {\n envContent += `${prefix || ''}GT_DEV_API_KEY=${apiKey.key}\\n`;\n } else {\n envContent += `GT_API_KEY=${apiKey.key}\\n`;\n }\n }\n\n // Ensure we don't have excessive newlines\n envContent = envContent.replace(/\\n{3,}/g, '\\n\\n').trim() + '\\n';\n\n // Write the updated content back to the file\n await fs.promises.writeFile(envFile, envContent, 'utf8');\n}\n"],"mappings":";;;;;;;AAmBA,eAAsB,oBACpB,UACA,SACsB;CAEtB,MAAM,EAAE,cAAc,MAAM,2BAC1B,SAAS,SACT,QACD;CAED,MAAM,YAAY,GAAG,SAAS,aAAa,cAAc;AACzD,OAAM,OAAO,QAAQ,MAAM,SACzB,KAAK,QAAQ,WAAW,EACtB,MAAM,OACP,CAAC,CACH;AAED,QAAO,QACL,GAAG,MAAM,IACP,mFACD,CAAC,MAAM,MAAM,KAAK,UAAU,GAC9B;CAED,MAAM,UAAU,OAAO,cAAc,OAAO;AAC5C,SAAQ,MAAM,yCAAyC;CAEvD,MAAM,cAAc,MAAM,IAAI,SAAsB,YAAY;EAC9D,MAAM,WAAW,YAAY,YAAY;AAEvC,OAAI;IACF,MAAM,MAAM,MAAM,WAChB,SAAS,SACT,eAAe,aACf,EACE,QAAQ,OACT,CACF;AACD,QAAI,IAAI,WAAW,KAAK;AAEtB,aAAQ,MADW,IAAI,MAAM,CACD;AAC5B,mBAAc,SAAS;AACvB,kBAAa,QAAQ;AACrB,gBAAW,SAAS,SAAS,eAAe,aAAa,EACvD,QAAQ,UACT,CAAC;;YAEG,KAAK;AACZ,YAAQ,MAAM,IAAI;;KAEnB,IAAK;EAER,MAAM,UAAU,iBACR;AACJ,WAAQ,KAAK,YAAY;AACzB,iBAAc,SAAS;AACvB,mBAAgB,gDAAgD;KAElE,MAAO,KAAK,GACb;GACD;AACF,SAAQ,KAAK,uBAAuB;AACpC,QAAO;;AAGT,eAAsB,2BACpB,KACA,SAGC;CACD,MAAM,MAAM,MAAM,WAAW,KAAK,uBAAuB,EACvD,MAAM,EAAE,SAAS,EAClB,CAAC;AACF,KAAI,CAAC,IAAI,GACP,iBAAgB,yCAAyC;AAE3D,QAAO,MAAM,IAAI,MAAM;;AAIzB,SAAgB,oBAAoB;AAClC,QACE,QAAQ,IAAI,kBACX,QAAQ,IAAI,cAAc,QAAQ,IAAI;;AAK3C,eAAsB,eACpB,aACA,WACA,MAAc,QAAQ,KAAK,EAC3B;CACA,MAAM,UAAU,KAAK,KAAK,KAAK,aAAa;CAC5C,IAAI,aAAa;AAGjB,KAAI,CAAC,GAAG,WAAW,QAAQ,EAAE;AAE3B,QAAM,GAAG,SAAS,UAAU,SAAS,IAAI,OAAO;EAGhD,MAAM,gBAAgB,KAAK,KAAK,KAAK,aAAa;AAClD,MAAI,GAAG,WAAW,cAAc;OAK1B,EAAC,MAJ0B,GAAG,SAAS,SACzC,eACA,OACD,EACqB,SAAS,aAAa,CAC1C,OAAM,GAAG,SAAS,WAAW,eAAe,kBAAkB,OAAO;QAIvE,OAAM,GAAG,SAAS,UAAU,eAAe,gBAAgB,OAAO;OAIpE,cAAa,MAAM,GAAG,SAAS,SAAS,SAAS,OAAO;CAI1D,IAAI,SAAS;AACb,KAAI,cAAc,aAChB,UAAS;UACA,cAAc,OACvB,UAAS;UACA,cAAc,SACvB,UAAS;UACA,cAAc,QACvB,UAAS;UACA,cAAc,UACvB,UAAS;AAGX,eAAc,KAAK,OAAO,gBAAgB,YAAY,UAAU;AAEhE,MAAK,MAAM,UAAU,YAAY,QAC/B,KAAI,OAAO,SAAS,cAClB,eAAc,GAAG,UAAU,GAAG,iBAAiB,OAAO,IAAI;KAE1D,eAAc,cAAc,OAAO,IAAI;AAK3C,cAAa,WAAW,QAAQ,WAAW,OAAO,CAAC,MAAM,GAAG;AAG5D,OAAM,GAAG,SAAS,UAAU,SAAS,YAAY,OAAO"}
|
package/dist/utils/fetch.js
CHANGED
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
import { API_VERSION } from
|
|
1
|
+
import { API_VERSION } from "generaltranslation";
|
|
2
|
+
//#region src/utils/fetch.ts
|
|
2
3
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
requestInit.body = JSON.stringify(options.body);
|
|
20
|
-
}
|
|
21
|
-
return fetch(`${baseUrl}${endpoint}`, requestInit);
|
|
4
|
+
* @internal
|
|
5
|
+
*
|
|
6
|
+
* Makes an API request to the General Translation API.
|
|
7
|
+
*
|
|
8
|
+
* Encapsulates URL construction, headers, and JSON parsing.
|
|
9
|
+
*/
|
|
10
|
+
async function apiRequest(baseUrl, endpoint, options) {
|
|
11
|
+
const requestInit = {
|
|
12
|
+
method: options?.method ?? "POST",
|
|
13
|
+
headers: {
|
|
14
|
+
"Content-Type": "application/json",
|
|
15
|
+
"gt-api-version": API_VERSION
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
if (options?.body !== void 0) requestInit.body = JSON.stringify(options.body);
|
|
19
|
+
return fetch(`${baseUrl}${endpoint}`, requestInit);
|
|
22
20
|
}
|
|
21
|
+
//#endregion
|
|
22
|
+
export { apiRequest as default };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","names":[],"sources":["../../src/utils/fetch.ts"],"sourcesContent":["import { API_VERSION } from 'generaltranslation';\n\n/**\n * @internal\n *\n * Makes an API request to the General Translation API.\n *\n * Encapsulates URL construction, headers, and JSON parsing.\n */\nexport default async function apiRequest(\n baseUrl: string,\n endpoint: string,\n options?: {\n body?: unknown;\n method?: 'GET' | 'POST' | 'DELETE';\n }\n): Promise<Response> {\n const method = options?.method ?? 'POST';\n\n const requestInit: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n 'gt-api-version': API_VERSION,\n },\n };\n\n if (options?.body !== undefined) {\n requestInit.body = JSON.stringify(options.body);\n }\n\n return fetch(`${baseUrl}${endpoint}`, requestInit);\n}\n"],"mappings":";;;;;;;;;AASA,eAA8B,WAC5B,SACA,UACA,SAImB;CAGnB,MAAM,cAA2B;EAC/B,QAHa,SAAS,UAAU;EAIhC,SAAS;GACP,gBAAgB;GAChB,kBAAkB;GACnB;EACF;AAED,KAAI,SAAS,SAAS,KAAA,EACpB,aAAY,OAAO,KAAK,UAAU,QAAQ,KAAK;AAGjD,QAAO,MAAM,GAAG,UAAU,YAAY,YAAY"}
|
|
@@ -1,36 +1,29 @@
|
|
|
1
|
-
import { createFileMapping } from
|
|
2
|
-
import fs from
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
// Flatten the json
|
|
17
|
-
const flattenedJson = flattenJson(json);
|
|
18
|
-
// Write the flattened json to the target file
|
|
19
|
-
await fs.promises.writeFile(file, JSON.stringify(flattenedJson, null, 2));
|
|
20
|
-
return flattenedJson;
|
|
21
|
-
}));
|
|
22
|
-
}));
|
|
1
|
+
import { createFileMapping } from "../formats/files/fileMapping.js";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
//#region src/utils/flattenJsonFiles.ts
|
|
4
|
+
async function flattenJsonFiles(settings, includeFiles) {
|
|
5
|
+
if (!settings.files || Object.keys(settings.files.placeholderPaths).length === 1 && settings.files.placeholderPaths.gt) return;
|
|
6
|
+
const { resolvedPaths: sourceFiles } = settings.files;
|
|
7
|
+
const fileMapping = createFileMapping(sourceFiles, settings.files.placeholderPaths, settings.files.transformPaths, settings.files.transformFormats, settings.locales, settings.defaultLocale);
|
|
8
|
+
await Promise.all(Object.values(fileMapping).map(async (filesMap) => {
|
|
9
|
+
const targetFiles = Object.values(filesMap).filter((p) => p.endsWith(".json") && (!includeFiles || includeFiles.has(p)));
|
|
10
|
+
await Promise.all(targetFiles.map(async (file) => {
|
|
11
|
+
const flattenedJson = flattenJson(JSON.parse(fs.readFileSync(file, "utf8")));
|
|
12
|
+
await fs.promises.writeFile(file, JSON.stringify(flattenedJson, null, 2));
|
|
13
|
+
return flattenedJson;
|
|
14
|
+
}));
|
|
15
|
+
}));
|
|
23
16
|
}
|
|
24
|
-
function flattenJson(json, prefix =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
result[newKey] = value;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return result;
|
|
17
|
+
function flattenJson(json, prefix = "") {
|
|
18
|
+
const result = {};
|
|
19
|
+
for (const [key, value] of Object.entries(json)) {
|
|
20
|
+
const newKey = prefix ? `${prefix}.${key}` : key;
|
|
21
|
+
if (value !== null && typeof value === "object" && !Array.isArray(value)) Object.assign(result, flattenJson(value, newKey));
|
|
22
|
+
else result[newKey] = value;
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
36
25
|
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { flattenJsonFiles as default };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=flattenJsonFiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flattenJsonFiles.js","names":[],"sources":["../../src/utils/flattenJsonFiles.ts"],"sourcesContent":["import { createFileMapping } from '../formats/files/fileMapping.js';\nimport fs from 'node:fs';\nimport { Settings } from '../types/index.js';\n\nexport default async function flattenJsonFiles(\n settings: Settings,\n includeFiles?: Set<string>\n) {\n if (\n !settings.files ||\n (Object.keys(settings.files.placeholderPaths).length === 1 &&\n settings.files.placeholderPaths.gt)\n ) {\n return;\n }\n const { resolvedPaths: sourceFiles } = settings.files;\n\n const fileMapping = createFileMapping(\n sourceFiles,\n settings.files.placeholderPaths,\n settings.files.transformPaths,\n settings.files.transformFormats,\n settings.locales,\n settings.defaultLocale\n );\n\n await Promise.all(\n Object.values(fileMapping).map(async (filesMap) => {\n const targetFiles = Object.values(filesMap).filter(\n (p) => p.endsWith('.json') && (!includeFiles || includeFiles.has(p))\n );\n\n await Promise.all(\n targetFiles.map(async (file) => {\n // Read each json file\n const json = JSON.parse(fs.readFileSync(file, 'utf8'));\n // Flatten the json\n const flattenedJson = flattenJson(json);\n\n // Write the flattened json to the target file\n await fs.promises.writeFile(\n file,\n JSON.stringify(flattenedJson, null, 2)\n );\n return flattenedJson;\n })\n );\n })\n );\n}\n\nfunction flattenJson(json: unknown, prefix = ''): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(json as Record<string, unknown>)) {\n const newKey = prefix ? `${prefix}.${key}` : key;\n\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n Object.assign(result, flattenJson(value, newKey));\n } else {\n result[newKey] = value;\n }\n }\n\n return result;\n}\n"],"mappings":";;;AAIA,eAA8B,iBAC5B,UACA,cACA;AACA,KACE,CAAC,SAAS,SACT,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC,WAAW,KACvD,SAAS,MAAM,iBAAiB,GAElC;CAEF,MAAM,EAAE,eAAe,gBAAgB,SAAS;CAEhD,MAAM,cAAc,kBAClB,aACA,SAAS,MAAM,kBACf,SAAS,MAAM,gBACf,SAAS,MAAM,kBACf,SAAS,SACT,SAAS,cACV;AAED,OAAM,QAAQ,IACZ,OAAO,OAAO,YAAY,CAAC,IAAI,OAAO,aAAa;EACjD,MAAM,cAAc,OAAO,OAAO,SAAS,CAAC,QACzC,MAAM,EAAE,SAAS,QAAQ,KAAK,CAAC,gBAAgB,aAAa,IAAI,EAAE,EACpE;AAED,QAAM,QAAQ,IACZ,YAAY,IAAI,OAAO,SAAS;GAI9B,MAAM,gBAAgB,YAFT,KAAK,MAAM,GAAG,aAAa,MAAM,OAAO,CAEf,CAAC;AAGvC,SAAM,GAAG,SAAS,UAChB,MACA,KAAK,UAAU,eAAe,MAAM,EAAE,CACvC;AACD,UAAO;IACP,CACH;GACD,CACH;;AAGH,SAAS,YAAY,MAAe,SAAS,IAA6B;CACxE,MAAM,SAAkC,EAAE;AAE1C,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAgC,EAAE;EAC1E,MAAM,SAAS,SAAS,GAAG,OAAO,GAAG,QAAQ;AAE7C,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,CACtE,QAAO,OAAO,QAAQ,YAAY,OAAO,OAAO,CAAC;MAEjD,QAAO,UAAU;;AAIrB,QAAO"}
|
package/dist/utils/gitDiff.js
CHANGED
|
@@ -1,35 +1,33 @@
|
|
|
1
|
-
import { execFile } from
|
|
2
|
-
import { promisify } from
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
//#region src/utils/gitDiff.ts
|
|
3
4
|
const execFileAsync = promisify(execFile);
|
|
4
5
|
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
// Exit code 1 means differences found; stdout contains the diff
|
|
29
|
-
const execError = error;
|
|
30
|
-
if (execError.code === 1 && typeof execError.stdout === 'string') {
|
|
31
|
-
return execError.stdout;
|
|
32
|
-
}
|
|
33
|
-
throw error;
|
|
34
|
-
}
|
|
6
|
+
* Returns a unified diff using the system's git, comparing two paths even if not in a repo.
|
|
7
|
+
* Uses `git diff --no-index` so neither path needs to be tracked by git.
|
|
8
|
+
*
|
|
9
|
+
* Exit codes: 0 (no changes), 1 (changes), >1 (error). We treat 0/1 as success.
|
|
10
|
+
* Throws if git is unavailable or another error occurs.
|
|
11
|
+
*/
|
|
12
|
+
async function getGitUnifiedDiff(oldPath, newPath) {
|
|
13
|
+
try {
|
|
14
|
+
return (await execFileAsync("git", [
|
|
15
|
+
"diff",
|
|
16
|
+
"--no-index",
|
|
17
|
+
"--text",
|
|
18
|
+
"--unified=3",
|
|
19
|
+
"--no-color",
|
|
20
|
+
"--",
|
|
21
|
+
oldPath,
|
|
22
|
+
newPath
|
|
23
|
+
], { windowsHide: true })).stdout || "";
|
|
24
|
+
} catch (error) {
|
|
25
|
+
const execError = error;
|
|
26
|
+
if (execError.code === 1 && typeof execError.stdout === "string") return execError.stdout;
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
35
29
|
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { getGitUnifiedDiff };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=gitDiff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitDiff.js","names":[],"sources":["../../src/utils/gitDiff.ts"],"sourcesContent":["import { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execFileAsync = promisify(execFile);\n\ntype ExecFileError = Error & {\n code?: number;\n stdout?: string;\n};\n\n/**\n * Returns a unified diff using the system's git, comparing two paths even if not in a repo.\n * Uses `git diff --no-index` so neither path needs to be tracked by git.\n *\n * Exit codes: 0 (no changes), 1 (changes), >1 (error). We treat 0/1 as success.\n * Throws if git is unavailable or another error occurs.\n */\nexport async function getGitUnifiedDiff(\n oldPath: string,\n newPath: string\n): Promise<string> {\n try {\n const res = await execFileAsync(\n 'git',\n [\n 'diff',\n '--no-index',\n '--text',\n '--unified=3',\n '--no-color',\n '--',\n oldPath,\n newPath,\n ],\n {\n windowsHide: true,\n }\n );\n return res.stdout || '';\n } catch (error: unknown) {\n // Exit code 1 means differences found; stdout contains the diff\n const execError = error as ExecFileError;\n if (execError.code === 1 && typeof execError.stdout === 'string') {\n return execError.stdout;\n }\n throw error;\n }\n}\n"],"mappings":";;;AAGA,MAAM,gBAAgB,UAAU,SAAS;;;;;;;;AAczC,eAAsB,kBACpB,SACA,SACiB;AACjB,KAAI;AAiBF,UAAO,MAhBW,cAChB,OACA;GACE;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,EACD,EACE,aAAa,MACd,CACF,EACU,UAAU;UACd,OAAgB;EAEvB,MAAM,YAAY;AAClB,MAAI,UAAU,SAAS,KAAK,OAAO,UAAU,WAAW,SACtD,QAAO,UAAU;AAEnB,QAAM"}
|
package/dist/utils/gt.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gt.js","names":[],"sources":["../../src/utils/gt.ts"],"sourcesContent":["import { GT } from 'generaltranslation';\n\nexport const gt = new GT();\n"],"mappings":";;AAEA,MAAa,KAAK,IAAI,IAAI"}
|
package/dist/utils/hash.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import crypto from
|
|
1
|
+
import crypto from "crypto";
|
|
2
|
+
//#region src/utils/hash.ts
|
|
2
3
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
* Hashes a string using SHA-256 algorithm.
|
|
5
|
+
* @param {string} string - The string to be hashed.
|
|
6
|
+
* @returns {string} The hashed string.
|
|
7
|
+
*/
|
|
8
|
+
function hashStringSync(string) {
|
|
9
|
+
const hash = crypto.createHash("sha256");
|
|
10
|
+
hash.update(string);
|
|
11
|
+
return hash.digest("hex");
|
|
11
12
|
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { hashStringSync };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","names":[],"sources":["../../src/utils/hash.ts"],"sourcesContent":["import crypto from 'crypto';\n\n/**\n * Hashes a string using SHA-256 algorithm.\n * @param {string} string - The string to be hashed.\n * @returns {string} The hashed string.\n */\nexport function hashStringSync(string: string): string {\n const hash = crypto.createHash('sha256');\n hash.update(string);\n return hash.digest('hex');\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,eAAe,QAAwB;CACrD,MAAM,OAAO,OAAO,WAAW,SAAS;AACxC,MAAK,OAAO,OAAO;AACnB,QAAO,KAAK,OAAO,MAAM"}
|
package/dist/utils/headers.js
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
authHeaders['x-gt-internal-api-key'] = apiKey;
|
|
8
|
-
}
|
|
9
|
-
else {
|
|
10
|
-
authHeaders['x-gt-api-key'] = apiKey;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
return authHeaders;
|
|
1
|
+
//#region src/utils/headers.ts
|
|
2
|
+
function getAuthHeaders(projectId, apiKey) {
|
|
3
|
+
const authHeaders = { "x-gt-project-id": projectId };
|
|
4
|
+
if (apiKey) if (apiKey.startsWith("gtx-internal-")) authHeaders["x-gt-internal-api-key"] = apiKey;
|
|
5
|
+
else authHeaders["x-gt-api-key"] = apiKey;
|
|
6
|
+
return authHeaders;
|
|
14
7
|
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { getAuthHeaders };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.js","names":[],"sources":["../../src/utils/headers.ts"],"sourcesContent":["export function getAuthHeaders(projectId: string, apiKey: string) {\n const authHeaders: Record<string, string> = {\n 'x-gt-project-id': projectId,\n };\n if (apiKey) {\n if (apiKey.startsWith('gtx-internal-')) {\n authHeaders['x-gt-internal-api-key'] = apiKey;\n } else {\n authHeaders['x-gt-api-key'] = apiKey;\n }\n }\n return authHeaders;\n}\n"],"mappings":";AAAA,SAAgB,eAAe,WAAmB,QAAgB;CAChE,MAAM,cAAsC,EAC1C,mBAAmB,WACpB;AACD,KAAI,OACF,KAAI,OAAO,WAAW,gBAAgB,CACpC,aAAY,2BAA2B;KAEvC,aAAY,kBAAkB;AAGlC,QAAO"}
|