gtx-cli 2.6.29 → 2.6.30-alpha.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/README.md +12 -3
- package/dist/bin/bin-entry.js +2 -1
- 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/package.json +9 -60
- package/CHANGELOG.md +0 -1255
- 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/generateSettings.d.ts +0 -9
- package/dist/config/generateSettings.js +0 -214
- package/dist/config/optionPresets.d.ts +0 -3
- package/dist/config/optionPresets.js +0 -65
- package/dist/config/resolveConfig.d.ts +0 -4
- package/dist/config/resolveConfig.js +0 -33
- 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 -33
- package/dist/console/index.js +0 -44
- 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 -173
- 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/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/setupConfig.d.ts +0 -17
- package/dist/fs/config/setupConfig.js +0 -50
- 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/matchFiles.d.ts +0 -1
- package/dist/fs/matchFiles.js +0 -8
- 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/next/parse/handleInitGT.d.ts +0 -7
- package/dist/next/parse/handleInitGT.js +0 -157
- package/dist/next/parse/wrapContent.d.ts +0 -12
- package/dist/next/parse/wrapContent.js +0 -164
- 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 -13
- package/dist/react/jsx/utils/constants.js +0 -46
- 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 -135
- 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 -912
- 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/parse/wrapContent.d.ts +0 -12
- package/dist/react/parse/wrapContent.js +0 -162
- 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/index.d.ts +0 -243
- package/dist/types/index.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/installPackage.d.ts +0 -3
- package/dist/utils/installPackage.js +0 -77
- 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/packageInfo.d.ts +0 -3
- package/dist/utils/packageInfo.js +0 -17
- package/dist/utils/packageJson.d.ts +0 -6
- package/dist/utils/packageJson.js +0 -68
- package/dist/utils/packageManager.d.ts +0 -28
- package/dist/utils/packageManager.js +0 -269
- 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/workflows/download.d.ts +0 -32
- package/dist/workflows/download.js +0 -127
- 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,91 +0,0 @@
|
|
|
1
|
-
import traverseModule from '@babel/traverse';
|
|
2
|
-
import { GT_TRANSLATION_FUNCS, INLINE_TRANSLATION_HOOK, INLINE_TRANSLATION_HOOK_ASYNC, INLINE_MESSAGE_HOOK, INLINE_MESSAGE_HOOK_ASYNC, MSG_REGISTRATION_FUNCTION, TRANSLATION_COMPONENT, } from '../../jsx/utils/constants.js';
|
|
3
|
-
import { extractImportName } from './parseAst.js';
|
|
4
|
-
// Handle CommonJS/ESM interop
|
|
5
|
-
const traverse = traverseModule.default || traverseModule;
|
|
6
|
-
/**
|
|
7
|
-
* Constructs tracking for gt related variables of interest
|
|
8
|
-
* inlineTranslationPaths: these are string-related translation functions
|
|
9
|
-
* translationComponentPaths: these are just <T> components
|
|
10
|
-
* importAliases: any other GT related imports
|
|
11
|
-
*/
|
|
12
|
-
export function getPathsAndAliases(ast, pkgs) {
|
|
13
|
-
// First pass: collect imports and process translation functions
|
|
14
|
-
const importAliases = {};
|
|
15
|
-
const inlineTranslationPaths = [];
|
|
16
|
-
const translationComponentPaths = [];
|
|
17
|
-
traverse(ast, {
|
|
18
|
-
ImportDeclaration(path) {
|
|
19
|
-
if (pkgs.some((pkg) => path.node.source.value.startsWith(pkg))) {
|
|
20
|
-
const importName = extractImportName(path.node, pkgs, GT_TRANSLATION_FUNCS);
|
|
21
|
-
for (const name of importName) {
|
|
22
|
-
if (name.original === INLINE_TRANSLATION_HOOK ||
|
|
23
|
-
name.original === INLINE_TRANSLATION_HOOK_ASYNC ||
|
|
24
|
-
name.original === INLINE_MESSAGE_HOOK ||
|
|
25
|
-
name.original === INLINE_MESSAGE_HOOK_ASYNC ||
|
|
26
|
-
name.original === MSG_REGISTRATION_FUNCTION) {
|
|
27
|
-
inlineTranslationPaths.push({
|
|
28
|
-
localName: name.local,
|
|
29
|
-
path,
|
|
30
|
-
originalName: name.original,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
else if (name.original === TRANSLATION_COMPONENT) {
|
|
34
|
-
translationComponentPaths.push({
|
|
35
|
-
localName: name.local,
|
|
36
|
-
path,
|
|
37
|
-
originalName: name.original,
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
importAliases[name.local] = name.original;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
VariableDeclarator(path) {
|
|
47
|
-
// Check if the init is a require call
|
|
48
|
-
if (path.node.init?.type === 'CallExpression' &&
|
|
49
|
-
path.node.init.callee.type === 'Identifier' &&
|
|
50
|
-
path.node.init.callee.name === 'require') {
|
|
51
|
-
// Check if it's requiring our package
|
|
52
|
-
const args = path.node.init.arguments;
|
|
53
|
-
if (args.length === 1 &&
|
|
54
|
-
args[0].type === 'StringLiteral' &&
|
|
55
|
-
pkgs.some((pkg) => args[0].value.startsWith(pkg))) {
|
|
56
|
-
const parentPath = path.parentPath;
|
|
57
|
-
if (parentPath.isVariableDeclaration()) {
|
|
58
|
-
const importName = extractImportName(parentPath.node, pkgs, GT_TRANSLATION_FUNCS);
|
|
59
|
-
for (const name of importName) {
|
|
60
|
-
if (name.original === INLINE_TRANSLATION_HOOK ||
|
|
61
|
-
name.original === INLINE_TRANSLATION_HOOK_ASYNC ||
|
|
62
|
-
name.original === INLINE_MESSAGE_HOOK ||
|
|
63
|
-
name.original === INLINE_MESSAGE_HOOK_ASYNC) {
|
|
64
|
-
inlineTranslationPaths.push({
|
|
65
|
-
localName: name.local,
|
|
66
|
-
path: parentPath,
|
|
67
|
-
originalName: name.original,
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
else if (name.original === TRANSLATION_COMPONENT) {
|
|
71
|
-
translationComponentPaths.push({
|
|
72
|
-
localName: name.local,
|
|
73
|
-
path: parentPath,
|
|
74
|
-
originalName: name.original,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
importAliases[name.local] = name.original;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
},
|
|
85
|
-
});
|
|
86
|
-
return {
|
|
87
|
-
importAliases,
|
|
88
|
-
inlineTranslationPaths,
|
|
89
|
-
translationComponentPaths,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import * as t from '@babel/types';
|
|
2
|
-
/**
|
|
3
|
-
* Given an expression, return true if it is a number literal
|
|
4
|
-
* @param expr - The expression to check
|
|
5
|
-
* @returns True if the expression is a number literal, false otherwise
|
|
6
|
-
*/
|
|
7
|
-
export declare function isNumberLiteral(expr: t.Expression): boolean;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import * as t from '@babel/types';
|
|
2
|
-
/**
|
|
3
|
-
* Given an expression, return true if it is a number literal
|
|
4
|
-
* @param expr - The expression to check
|
|
5
|
-
* @returns True if the expression is a number literal, false otherwise
|
|
6
|
-
*/
|
|
7
|
-
export function isNumberLiteral(expr) {
|
|
8
|
-
if (t.isUnaryExpression(expr)) {
|
|
9
|
-
return (isNumberLiteral(expr.argument) &&
|
|
10
|
-
(expr.operator === '-' || expr.operator === '+'));
|
|
11
|
-
}
|
|
12
|
-
return t.isNumericLiteral(expr);
|
|
13
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { JsxChildren } from 'generaltranslation/types';
|
|
2
|
-
import { MultipliedTreeNode } from './types.js';
|
|
3
|
-
/**
|
|
4
|
-
* Add GT Identifier and minify the tree (recreates addGTIdentifier and writeChildrenAsObjects)
|
|
5
|
-
* @param tree - The tree to add GT identifiers to
|
|
6
|
-
* @param startingIndex - The starting index for GT IDs
|
|
7
|
-
* @returns The tree with GT identifiers added
|
|
8
|
-
*/
|
|
9
|
-
export default function addGTIdentifierToSyntaxTree(tree: MultipliedTreeNode, startingIndex?: number): JsxChildren;
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import { HTML_CONTENT_PROPS, } from 'generaltranslation/types';
|
|
2
|
-
import { defaultVariableNames, getVariableName, minifyVariableType, } from '../../../utils/getVariableName.js';
|
|
3
|
-
import { isAcceptedPluralForm } from 'generaltranslation/internal';
|
|
4
|
-
/**
|
|
5
|
-
* Construct the data-_gt prop
|
|
6
|
-
* @param type - The type of the element
|
|
7
|
-
* @param props - The props of the element
|
|
8
|
-
* @param id - The id of the element
|
|
9
|
-
* @returns The data-_gt prop
|
|
10
|
-
*/
|
|
11
|
-
function constructGTProp(type, props, id) {
|
|
12
|
-
// Add translatable HTML content props
|
|
13
|
-
const generaltranslation = Object.entries(HTML_CONTENT_PROPS).reduce((acc, [minifiedName, fullName]) => {
|
|
14
|
-
if (props[fullName]) {
|
|
15
|
-
acc[minifiedName] = props[fullName];
|
|
16
|
-
}
|
|
17
|
-
return acc;
|
|
18
|
-
}, {});
|
|
19
|
-
// Plural
|
|
20
|
-
if (type === 'Plural') {
|
|
21
|
-
const pluralBranches = Object.entries(props).reduce((acc, [branchName, branch]) => {
|
|
22
|
-
if (isAcceptedPluralForm(branchName)) {
|
|
23
|
-
acc[branchName] = addGTIdentifierToSyntaxTree(branch, id);
|
|
24
|
-
}
|
|
25
|
-
return acc;
|
|
26
|
-
}, {});
|
|
27
|
-
// Add plural branches to the generaltranslation
|
|
28
|
-
if (Object.keys(pluralBranches).length) {
|
|
29
|
-
generaltranslation.t = 'p';
|
|
30
|
-
generaltranslation.b = pluralBranches;
|
|
31
|
-
}
|
|
32
|
-
// Branch
|
|
33
|
-
}
|
|
34
|
-
else if (type === 'Branch') {
|
|
35
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars
|
|
36
|
-
const { children, branch, ...branches } = props;
|
|
37
|
-
const resultBranches = Object.entries(branches).reduce((acc, [branchName, branch]) => {
|
|
38
|
-
acc[branchName] = addGTIdentifierToSyntaxTree(branch, id);
|
|
39
|
-
return acc;
|
|
40
|
-
}, {});
|
|
41
|
-
// Add branches to the generaltranslation
|
|
42
|
-
if (Object.keys(resultBranches).length) {
|
|
43
|
-
generaltranslation.t = 'b';
|
|
44
|
-
generaltranslation.b = resultBranches;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return Object.keys(generaltranslation).length
|
|
48
|
-
? generaltranslation
|
|
49
|
-
: undefined;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Add GT Identifier and minify the tree (recreates addGTIdentifier and writeChildrenAsObjects)
|
|
53
|
-
* @param tree - The tree to add GT identifiers to
|
|
54
|
-
* @param startingIndex - The starting index for GT IDs
|
|
55
|
-
* @returns The tree with GT identifiers added
|
|
56
|
-
*/
|
|
57
|
-
export default function addGTIdentifierToSyntaxTree(tree, startingIndex = 0) {
|
|
58
|
-
// Edge case: boolean or null, just return the tree
|
|
59
|
-
if (typeof tree === 'boolean' || tree === null) {
|
|
60
|
-
return tree;
|
|
61
|
-
}
|
|
62
|
-
// Object to keep track of the current index for GT IDs
|
|
63
|
-
const indexObject = { index: startingIndex };
|
|
64
|
-
/**
|
|
65
|
-
* Handle a single child
|
|
66
|
-
* @param child - The child to handle
|
|
67
|
-
* @returns The handled child
|
|
68
|
-
*/
|
|
69
|
-
const handleSingleChild = (child) => {
|
|
70
|
-
// Handle JSX elements
|
|
71
|
-
if (child && typeof child === 'object') {
|
|
72
|
-
let { type } = child;
|
|
73
|
-
const { props } = child;
|
|
74
|
-
indexObject.index += 1;
|
|
75
|
-
// Handle fragments
|
|
76
|
-
if (type === 'React.Fragment') {
|
|
77
|
-
type = '';
|
|
78
|
-
}
|
|
79
|
-
// Variables
|
|
80
|
-
if (Object.keys(defaultVariableNames).includes(type)) {
|
|
81
|
-
const variableType = minifyVariableType(type);
|
|
82
|
-
const variableName = getVariableName(props, type, indexObject.index);
|
|
83
|
-
return {
|
|
84
|
-
i: indexObject.index,
|
|
85
|
-
k: variableName,
|
|
86
|
-
v: variableType,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
// Construct the data-_gt prop
|
|
90
|
-
const generaltranslation = constructGTProp(type, (props || {}), indexObject.index);
|
|
91
|
-
// Save current index and recurse
|
|
92
|
-
const currentIndex = indexObject.index;
|
|
93
|
-
const children = handleChildren(props?.children === undefined ? null : props?.children);
|
|
94
|
-
// Enforce boolean rendering behavior
|
|
95
|
-
// <T>{true}</T> -> true <- this is a boolean value, not a string
|
|
96
|
-
// <T>{false}</T> -> nothing
|
|
97
|
-
let includeChildren = true;
|
|
98
|
-
if (typeof children === 'boolean') {
|
|
99
|
-
// So, technically JsxChildren do include boolean values, but the type is incorrect
|
|
100
|
-
includeChildren = children !== false;
|
|
101
|
-
}
|
|
102
|
-
// Return the result
|
|
103
|
-
return {
|
|
104
|
-
t: type || `C${currentIndex}`,
|
|
105
|
-
i: currentIndex,
|
|
106
|
-
...(includeChildren && { c: children }),
|
|
107
|
-
...(generaltranslation && { d: generaltranslation }),
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
if (typeof child === 'number') {
|
|
111
|
-
return child.toString();
|
|
112
|
-
}
|
|
113
|
-
return child;
|
|
114
|
-
};
|
|
115
|
-
/**
|
|
116
|
-
* Handle children
|
|
117
|
-
* @param children - The children to handle
|
|
118
|
-
* @returns The handled children
|
|
119
|
-
*/
|
|
120
|
-
const handleChildren = (children) => {
|
|
121
|
-
return Array.isArray(children)
|
|
122
|
-
? children.map(handleSingleChild).filter((child) => {
|
|
123
|
-
// Enforce boolean rendering behavior
|
|
124
|
-
// <T>{true}{false}{null}</T> -> []
|
|
125
|
-
if (typeof child === 'boolean' ||
|
|
126
|
-
child === null ||
|
|
127
|
-
child === undefined) {
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
return true;
|
|
131
|
-
})
|
|
132
|
-
: handleSingleChild(children);
|
|
133
|
-
};
|
|
134
|
-
return handleChildren(tree);
|
|
135
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { JsxTree, MultiplicationNode, WhitespaceJsxTreeResult, WhitespaceMultiplicationNode } from './types.js';
|
|
2
|
-
export declare function trimJsxStringChild(child: string): string;
|
|
3
|
-
export declare function handleChildrenWhitespace(currentTree: MultiplicationNode['branches'], parentNodeType: 'multiplication'): (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[];
|
|
4
|
-
export declare function handleChildrenWhitespace(currentTree: MultiplicationNode['branches'], parentNodeType?: 'element' | 'expression' | undefined): WhitespaceJsxTreeResult | WhitespaceMultiplicationNode | (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[];
|
|
5
|
-
export declare function handleChildrenWhitespace(currentTree: MultiplicationNode | JsxTree, parentNodeType?: 'multiplication' | 'element' | 'expression' | undefined): null | WhitespaceJsxTreeResult | WhitespaceMultiplicationNode;
|
|
6
|
-
export declare function handleChildrenWhitespace(currentTree: JsxTree | JsxTree[]): null | WhitespaceJsxTreeResult | WhitespaceJsxTreeResult[];
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import { isAcceptedPluralForm } from 'generaltranslation/internal';
|
|
2
|
-
import { isElementNode, isExpressionNode, isMultiplicationNode, } from './types.js';
|
|
3
|
-
// JSX whitespace characters (space, tab, newline, carriage return)
|
|
4
|
-
// Does NOT include non-breaking space (U+00A0) which should be preserved
|
|
5
|
-
const isJsxWhitespace = (char) => {
|
|
6
|
-
return char === ' ' || char === '\t' || char === '\n' || char === '\r';
|
|
7
|
-
};
|
|
8
|
-
const trimJsxWhitespace = (str, side = 'both') => {
|
|
9
|
-
let start = 0;
|
|
10
|
-
let end = str.length;
|
|
11
|
-
if (side === 'start' || side === 'both') {
|
|
12
|
-
while (start < end && isJsxWhitespace(str[start])) {
|
|
13
|
-
start++;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
if (side === 'end' || side === 'both') {
|
|
17
|
-
while (end > start && isJsxWhitespace(str[end - 1])) {
|
|
18
|
-
end--;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return str.slice(start, end);
|
|
22
|
-
};
|
|
23
|
-
const hasNonJsxWhitespace = (str) => {
|
|
24
|
-
for (const char of str) {
|
|
25
|
-
if (!isJsxWhitespace(char))
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
return false;
|
|
29
|
-
};
|
|
30
|
-
export function trimJsxStringChild(child) {
|
|
31
|
-
if (!child.includes('\n') && !child.includes('\r')) {
|
|
32
|
-
return child;
|
|
33
|
-
}
|
|
34
|
-
// Normalize line endings to \n for consistency across platforms
|
|
35
|
-
let result = child.replace(/\r\n|\r/g, '\n');
|
|
36
|
-
// Collapse multiple spaces/tabs into a single space (but not nbsp)
|
|
37
|
-
result = result.replace(/[\t ]+/g, ' ');
|
|
38
|
-
let newResult = '';
|
|
39
|
-
let newline = false;
|
|
40
|
-
for (const char of result) {
|
|
41
|
-
if (char === '\n') {
|
|
42
|
-
if (hasNonJsxWhitespace(newResult))
|
|
43
|
-
newResult += ' ';
|
|
44
|
-
else
|
|
45
|
-
newResult = '';
|
|
46
|
-
newline = true;
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
if (!newline) {
|
|
50
|
-
newResult += char;
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
if (isJsxWhitespace(char))
|
|
54
|
-
continue;
|
|
55
|
-
newResult += char;
|
|
56
|
-
newline = false;
|
|
57
|
-
}
|
|
58
|
-
if (newline)
|
|
59
|
-
newResult = trimJsxWhitespace(newResult, 'end');
|
|
60
|
-
result = newResult;
|
|
61
|
-
// Collapse multiple spaces/tabs into a single space (but not nbsp)
|
|
62
|
-
result = result.replace(/[\t ]+/g, ' ');
|
|
63
|
-
return result;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Handles whitespace in children of a JSX element, and strips elements
|
|
67
|
-
* @param currentTree - The current tree to handle
|
|
68
|
-
* @returns The processed tree with whitespace handled
|
|
69
|
-
*
|
|
70
|
-
* For unresolved functions, we just make it so that Static has no children
|
|
71
|
-
*
|
|
72
|
-
* The typing was so much worse before this. Don't come for me. All I did was enforce the typing.
|
|
73
|
-
*/
|
|
74
|
-
export function handleChildrenWhitespace(currentTree, parentNodeType = undefined) {
|
|
75
|
-
if (Array.isArray(currentTree)) {
|
|
76
|
-
const childrenTypes = currentTree.map((child) => {
|
|
77
|
-
if (typeof child === 'string')
|
|
78
|
-
return 'text';
|
|
79
|
-
if (isExpressionNode(child))
|
|
80
|
-
return 'expression';
|
|
81
|
-
if (isElementNode(child))
|
|
82
|
-
return 'element';
|
|
83
|
-
if (isMultiplicationNode(child))
|
|
84
|
-
return 'multiplication';
|
|
85
|
-
return 'other';
|
|
86
|
-
});
|
|
87
|
-
const newChildren = [];
|
|
88
|
-
currentTree.forEach((child, index) => {
|
|
89
|
-
switch (childrenTypes[index]) {
|
|
90
|
-
case 'text':
|
|
91
|
-
const textNode = child;
|
|
92
|
-
if (parentNodeType === 'multiplication') {
|
|
93
|
-
// This should be treated like a new tree (no parent here b/c its a new tree)
|
|
94
|
-
const result = handleChildrenWhitespace(textNode);
|
|
95
|
-
if (result)
|
|
96
|
-
newChildren.push(result);
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
const string = trimJsxStringChild(textNode);
|
|
100
|
-
if (string)
|
|
101
|
-
newChildren.push(string);
|
|
102
|
-
}
|
|
103
|
-
break;
|
|
104
|
-
case 'expression':
|
|
105
|
-
// Strip expressions
|
|
106
|
-
const result = child.result;
|
|
107
|
-
if (isMultiplicationNode(result)) {
|
|
108
|
-
newChildren.push(handleChildrenWhitespace(result));
|
|
109
|
-
}
|
|
110
|
-
else if (typeof result === 'string') {
|
|
111
|
-
newChildren.push(result);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
// other case
|
|
115
|
-
newChildren.push(result);
|
|
116
|
-
}
|
|
117
|
-
break;
|
|
118
|
-
case 'element':
|
|
119
|
-
const newElement = handleChildrenWhitespace(child);
|
|
120
|
-
newChildren.push(newElement);
|
|
121
|
-
break;
|
|
122
|
-
case 'multiplication':
|
|
123
|
-
newChildren.push({
|
|
124
|
-
nodeType: 'multiplication',
|
|
125
|
-
branches: handleChildrenWhitespace(child.branches, 'multiplication'),
|
|
126
|
-
});
|
|
127
|
-
break;
|
|
128
|
-
case 'other':
|
|
129
|
-
// Return number or boolean or null
|
|
130
|
-
newChildren.push(child);
|
|
131
|
-
break;
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
if (parentNodeType === 'multiplication') {
|
|
135
|
-
// Return the branches as an array
|
|
136
|
-
return newChildren;
|
|
137
|
-
}
|
|
138
|
-
return newChildren.length === 1 ? newChildren[0] : newChildren;
|
|
139
|
-
}
|
|
140
|
-
else if (isElementNode(currentTree)) {
|
|
141
|
-
// Process all props recursively
|
|
142
|
-
// What if there is a different component sharing the same name?
|
|
143
|
-
const elementIsPlural = currentTree.type === 'Plural';
|
|
144
|
-
const elementIsBranch = currentTree.type === 'Branch';
|
|
145
|
-
const processedProps = !currentTree.props
|
|
146
|
-
? undefined
|
|
147
|
-
: Object.fromEntries(Object.entries(currentTree.props).map(([key, value]) => {
|
|
148
|
-
let shouldProcess = false;
|
|
149
|
-
// Process children
|
|
150
|
-
if (key === 'children')
|
|
151
|
-
shouldProcess = true;
|
|
152
|
-
// Process plural children
|
|
153
|
-
if (elementIsPlural && isAcceptedPluralForm(key))
|
|
154
|
-
shouldProcess = true;
|
|
155
|
-
// Process branch children
|
|
156
|
-
if (elementIsBranch && key !== 'branch')
|
|
157
|
-
shouldProcess = true;
|
|
158
|
-
// Do not process raw strings
|
|
159
|
-
if (typeof value === 'string' && key !== 'children')
|
|
160
|
-
shouldProcess = false;
|
|
161
|
-
// Process props
|
|
162
|
-
if (!shouldProcess) {
|
|
163
|
-
return [key, value];
|
|
164
|
-
}
|
|
165
|
-
return [key, handleChildrenWhitespace(value)];
|
|
166
|
-
}));
|
|
167
|
-
return {
|
|
168
|
-
nodeType: 'element',
|
|
169
|
-
type: currentTree.type,
|
|
170
|
-
...(processedProps ? { props: processedProps } : {}),
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
else if (isExpressionNode(currentTree)) {
|
|
174
|
-
// Strip expression
|
|
175
|
-
const result = currentTree.result;
|
|
176
|
-
if (isMultiplicationNode(result)) {
|
|
177
|
-
return handleChildrenWhitespace(result);
|
|
178
|
-
}
|
|
179
|
-
else if (typeof result === 'string') {
|
|
180
|
-
return result;
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
return result;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
else if (isMultiplicationNode(currentTree)) {
|
|
187
|
-
return {
|
|
188
|
-
nodeType: 'multiplication',
|
|
189
|
-
branches: handleChildrenWhitespace(currentTree.branches, 'multiplication'),
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
else if (typeof currentTree === 'string') {
|
|
193
|
-
return trimJsxStringChild(currentTree);
|
|
194
|
-
}
|
|
195
|
-
// null or number or boolean
|
|
196
|
-
return currentTree;
|
|
197
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { WhitespaceJsxTreeResult, WhitespaceMultiplicationNode } from '../types.js';
|
|
2
|
-
export type MultiplicationNodeResult = {
|
|
3
|
-
parent: any | undefined;
|
|
4
|
-
key: string | undefined;
|
|
5
|
-
node: WhitespaceMultiplicationNode;
|
|
6
|
-
};
|
|
7
|
-
/**
|
|
8
|
-
* Finds the immediate multiplication node from the given root (eg no nested multiplication nodes)
|
|
9
|
-
* TODO: I am sure there is some optimization to be done here
|
|
10
|
-
*
|
|
11
|
-
* Maybe there is an optimization here with caching used paths btwn calls
|
|
12
|
-
*/
|
|
13
|
-
export declare function findMultiplicationNode(root: WhitespaceJsxTreeResult | WhitespaceMultiplicationNode | (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[]): MultiplicationNodeResult | undefined;
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { isWhitespaceMultiplicationNode, isWhitespaceJsxTree, } from '../types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Finds the immediate multiplication node from the given root (eg no nested multiplication nodes)
|
|
4
|
-
* TODO: I am sure there is some optimization to be done here
|
|
5
|
-
*
|
|
6
|
-
* Maybe there is an optimization here with caching used paths btwn calls
|
|
7
|
-
*/
|
|
8
|
-
export function findMultiplicationNode(root) {
|
|
9
|
-
// Entry point
|
|
10
|
-
return handleChildren(root, undefined, undefined);
|
|
11
|
-
// Helper function to handle children
|
|
12
|
-
function handleChildren(curr, parent, key) {
|
|
13
|
-
if (Array.isArray(curr)) {
|
|
14
|
-
for (const [index, child] of Object.entries(curr)) {
|
|
15
|
-
const result = handleChild(child, curr, index);
|
|
16
|
-
if (result)
|
|
17
|
-
return result;
|
|
18
|
-
}
|
|
19
|
-
return undefined;
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
return handleChild(curr, parent, key);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
// Helper function to handle a single child
|
|
26
|
-
function handleChild(curr, parent, key) {
|
|
27
|
-
if (isWhitespaceMultiplicationNode(curr)) {
|
|
28
|
-
return { parent, key, node: curr };
|
|
29
|
-
}
|
|
30
|
-
else if (isWhitespaceJsxTree(curr)) {
|
|
31
|
-
if (curr.props?.children) {
|
|
32
|
-
return handleChildren(curr.props.children, curr.props, 'children');
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
return undefined;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
return undefined;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { findMultiplicationNode } from './findMultiplicationNode.js';
|
|
2
|
-
/**
|
|
3
|
-
* Given a JSX tree, multiply the static function nodes
|
|
4
|
-
*/
|
|
5
|
-
export function multiplyJsxTree(tree) {
|
|
6
|
-
if (!Array.isArray(tree)) {
|
|
7
|
-
return multiplyBranches([tree]);
|
|
8
|
-
}
|
|
9
|
-
else {
|
|
10
|
-
// when tree is an array, this is just sibbling elements within the <T>, so we need to treat them as a single branch
|
|
11
|
-
const wrapperElement = {
|
|
12
|
-
nodeType: 'element',
|
|
13
|
-
type: 'T',
|
|
14
|
-
props: {
|
|
15
|
-
children: tree,
|
|
16
|
-
},
|
|
17
|
-
};
|
|
18
|
-
// Multiply the wrapper element
|
|
19
|
-
const multipliedBranches = multiplyBranches([
|
|
20
|
-
wrapperElement,
|
|
21
|
-
]);
|
|
22
|
-
// Unwrap the branches
|
|
23
|
-
return multipliedBranches.map((branch) => branch.props.children);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Given a list of branches, multiply recursively (DFS)
|
|
28
|
-
* @param branches
|
|
29
|
-
*/
|
|
30
|
-
function multiplyBranches(branches) {
|
|
31
|
-
// Queue of branches to process
|
|
32
|
-
const branchQueue = branches;
|
|
33
|
-
// Finalized branches
|
|
34
|
-
const newBranches = [];
|
|
35
|
-
// Process branches until exhausted
|
|
36
|
-
while (branchQueue.length) {
|
|
37
|
-
// Pop the next branch
|
|
38
|
-
const branch = branchQueue.shift();
|
|
39
|
-
// Get closest multiplication node
|
|
40
|
-
const currentNode = findMultiplicationNode(branch);
|
|
41
|
-
// No multiplication nodes, just add the branch to the final list
|
|
42
|
-
if (!currentNode) {
|
|
43
|
-
newBranches.push(branch);
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
const { node, parent, key } = currentNode;
|
|
47
|
-
// Recursive call
|
|
48
|
-
const subBranches = multiplyBranches(node.branches);
|
|
49
|
-
// For every sub branch, create a new cloned branch
|
|
50
|
-
for (const subBranch of subBranches) {
|
|
51
|
-
// Placeholder for the new branch
|
|
52
|
-
let newBranch = undefined;
|
|
53
|
-
// Create a clone of the original with the sub branch swapped in
|
|
54
|
-
if (parent === undefined || key === undefined) {
|
|
55
|
-
// This means the subBranch directly replaces the branch itself
|
|
56
|
-
newBranches.push(subBranch);
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
// Replace the multiplication node with the sub branch
|
|
60
|
-
parent[key] = subBranch;
|
|
61
|
-
// eslint-disable-next-line no-undef
|
|
62
|
-
newBranch = structuredClone(branch);
|
|
63
|
-
// Add the new branch to the list
|
|
64
|
-
branchQueue.push(newBranch);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return newBranches;
|
|
69
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { Updates } from '../../../../types/index.js';
|
|
2
|
-
import { ParsingConfigOptions } from '../../../../types/parsing.js';
|
|
3
|
-
import traverseModule from '@babel/traverse';
|
|
4
|
-
import { GTLibrary } from '../../../../types/libraries.js';
|
|
5
|
-
/**
|
|
6
|
-
* Immutable configuration options for parsing.
|
|
7
|
-
*/
|
|
8
|
-
type ConfigOptions = {
|
|
9
|
-
parsingOptions: ParsingConfigOptions;
|
|
10
|
-
importAliases: Record<string, string>;
|
|
11
|
-
pkgs: GTLibrary[];
|
|
12
|
-
file: string;
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Collectors for errors, warnings, and unwrapped expressions.
|
|
16
|
-
*/
|
|
17
|
-
type OutputCollector = {
|
|
18
|
-
errors: string[];
|
|
19
|
-
warnings: Set<string>;
|
|
20
|
-
unwrappedExpressions: string[];
|
|
21
|
-
};
|
|
22
|
-
/**
|
|
23
|
-
* Entry point for JSX parsing
|
|
24
|
-
*/
|
|
25
|
-
export declare function parseTranslationComponent({ originalName, localName, path, updates, config, output, }: {
|
|
26
|
-
originalName: string;
|
|
27
|
-
localName: string;
|
|
28
|
-
path: traverseModule.NodePath<traverseModule.Node>;
|
|
29
|
-
updates: Updates;
|
|
30
|
-
config: ConfigOptions;
|
|
31
|
-
output: OutputCollector;
|
|
32
|
-
}): void;
|
|
33
|
-
export {};
|