gt 2.14.35 → 2.14.37
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 +22 -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.d.ts +1 -1
- package/dist/react/jsx/utils/resolveImportPath.js +125 -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":"autoInsertion.js","names":[],"sources":["../../../../../src/react/jsx/utils/jsxParsing/autoInsertion.ts"],"sourcesContent":["/**\n * Auto JSX Insertion for CLI extraction.\n *\n * Inserts <T> and <Var> JSX elements into the AST so the extraction pipeline\n * can process them as if the user wrote them. This operates on raw JSX syntax\n * (JSXElement, JSXText, JSXExpressionContainer) — NOT compiled jsx() calls.\n *\n * Rules follow JSX_INSERTION_RULES.md from the compiler package.\n */\nimport * as t from '@babel/types';\nimport traverseModule, { NodePath } from '@babel/traverse';\n\nconst traverse: typeof traverseModule.default =\n traverseModule.default || traverseModule;\nimport { isStaticExpression } from '../../evaluateJsx.js';\nimport {\n TRANSLATION_COMPONENT,\n INTERNAL_TRANSLATION_COMPONENT,\n INTERNAL_VAR_COMPONENT,\n VARIABLE_COMPONENTS,\n BRANCH_COMPONENT,\n PLURAL_COMPONENT,\n DEFAULT_GT_IMPORT_SOURCE,\n DERIVE_COMPONENT,\n STATIC_COMPONENT,\n BRANCH_CONTROL_PROPS,\n PLURAL_CONTROL_PROPS,\n} from '../constants.js';\n\n/** Tracks which AST nodes were auto-inserted by this module */\nconst autoInsertedNodes = new WeakSet<t.Node>();\n\n/** Check if a node was auto-inserted */\nexport function isAutoInserted(node: t.Node): boolean {\n return autoInsertedNodes.has(node);\n}\n\n// ===== Public API ===== //\n\n/**\n * Ensure GtInternalTranslateJsx and GtInternalVar are imported in the AST.\n * Always adds: import { GtInternalTranslateJsx, GtInternalVar } from 'gt-react/browser';\n * These are distinct from user T/Var so there's no ambiguity.\n *\n * Updates importAliases in-place.\n */\nexport function ensureTAndVarImported(\n ast: t.File,\n importAliases: Record<string, string>\n): void {\n // Check if internal components are already imported\n const hasInternalT = Object.values(importAliases).includes(\n INTERNAL_TRANSLATION_COMPONENT\n );\n const hasInternalVar = Object.values(importAliases).includes(\n INTERNAL_VAR_COMPONENT\n );\n\n if (hasInternalT && hasInternalVar) return;\n\n const specifiers: t.ImportSpecifier[] = [];\n if (!hasInternalT) {\n specifiers.push(\n t.importSpecifier(\n t.identifier(INTERNAL_TRANSLATION_COMPONENT),\n t.identifier(INTERNAL_TRANSLATION_COMPONENT)\n )\n );\n importAliases[INTERNAL_TRANSLATION_COMPONENT] =\n INTERNAL_TRANSLATION_COMPONENT;\n }\n if (!hasInternalVar) {\n specifiers.push(\n t.importSpecifier(\n t.identifier(INTERNAL_VAR_COMPONENT),\n t.identifier(INTERNAL_VAR_COMPONENT)\n )\n );\n importAliases[INTERNAL_VAR_COMPONENT] = INTERNAL_VAR_COMPONENT;\n }\n\n const importDecl = t.importDeclaration(\n specifiers,\n t.stringLiteral(DEFAULT_GT_IMPORT_SOURCE)\n );\n\n traverse(ast, {\n Program(path) {\n path.unshiftContainer('body', importDecl);\n path.stop();\n },\n });\n}\n\n/**\n * Traverse the AST and insert GtInternalTranslateJsx and GtInternalVar JSX elements following\n * the insertion rules. Uses deliberate children traversal.\n *\n * Every inserted node gets node._autoInserted = true.\n */\nexport function autoInsertJsxComponents(\n ast: t.File,\n importAliases: Record<string, string>\n): void {\n const processedNodes = new WeakSet<t.Node>();\n const tLocalName = getLocalName(\n importAliases,\n INTERNAL_TRANSLATION_COMPONENT\n );\n const varLocalName = getLocalName(importAliases, INTERNAL_VAR_COMPONENT);\n\n traverse(ast, {\n JSXElement(path) {\n if (processedNodes.has(path.node)) return;\n processJsxElement({\n path,\n insideAutoT: false,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n });\n },\n JSXFragment(path) {\n if (processedNodes.has(path.node)) return;\n processJsxFragment({\n path,\n insideAutoT: false,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n });\n },\n });\n}\n\n// ===== Core recursive functions ===== //\n\ninterface InsertionContext {\n insideAutoT: boolean;\n importAliases: Record<string, string>;\n processedNodes: WeakSet<t.Node>;\n tLocalName: string;\n varLocalName: string;\n}\n\nfunction processJsxElement({\n path,\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n}: { path: NodePath<t.JSXElement> } & InsertionContext): void {\n processedNodes.add(path.node);\n\n // Get component type\n const typeName = getElementTypeName(path.node);\n const canonicalName = typeName ? importAliases[typeName] : undefined;\n\n // User T → mark all descendants, hands off\n if (canonicalName === TRANSLATION_COMPONENT) {\n markDescendantJsx(path, processedNodes);\n return;\n }\n\n // Branch/Plural/Derive/Static → opaque, process props for dynamic Var\n // Must be checked BEFORE user variable check because Derive/Static are in VARIABLE_COMPONENTS\n if (\n canonicalName === BRANCH_COMPONENT ||\n canonicalName === PLURAL_COMPONENT ||\n canonicalName === DERIVE_COMPONENT ||\n canonicalName === STATIC_COMPONENT\n ) {\n if (!insideAutoT) {\n // Root-level opaque component — wrap in _T\n const tWrapper = createTWrapper([path.node], tLocalName);\n processedNodes.add(tWrapper);\n path.replaceWith(tWrapper);\n }\n processOpaqueComponentProps({\n path,\n insideAutoT: true,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n canonicalName,\n });\n return;\n }\n\n // User Var/Num/Currency/DateTime → mark descendants, hands off\n if (canonicalName && VARIABLE_COMPONENTS.includes(canonicalName)) {\n markDescendantJsx(path, processedNodes);\n return;\n }\n\n // Process children\n processElementChildren({\n path,\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n });\n}\n\nfunction processJsxFragment({\n path,\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n}: { path: NodePath<t.JSXFragment> } & InsertionContext): void {\n processedNodes.add(path.node);\n\n // Fragments are treated like regular elements\n processFragmentChildren({\n path,\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n });\n}\n\n// ===== Children processing ===== //\n\nfunction processElementChildren({\n path,\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n}: { path: NodePath<t.JSXElement> } & InsertionContext): void {\n const children = path.node.children;\n const ctx: InsertionContext = {\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n };\n\n const hasText = hasTranslatableText(children);\n const hasOpaque = hasOpaqueGTChild(children, importAliases);\n const shouldClaimT = !insideAutoT && (hasText || hasOpaque);\n\n if (shouldClaimT) {\n // Process children: wrap dynamic expressions in Var, recurse into child elements\n const childPaths = path.get('children');\n for (const childPath of childPaths) {\n processChild(childPath, { ...ctx, insideAutoT: true });\n }\n // Wrap all children in <T>\n wrapChildrenInT(path, tLocalName, processedNodes);\n } else if (insideAutoT) {\n // Inside a T region: wrap dynamic expressions, recurse\n const childPaths = path.get('children');\n for (const childPath of childPaths) {\n processChild(childPath, ctx);\n }\n } else {\n // No text, no opaque, not inside T: just recurse into child elements\n const childPaths = path.get('children');\n for (const childPath of childPaths) {\n if (childPath.isJSXElement() && !processedNodes.has(childPath.node)) {\n processJsxElement({ path: childPath, ...ctx });\n } else if (\n childPath.isJSXFragment() &&\n !processedNodes.has(childPath.node)\n ) {\n processJsxFragment({ path: childPath, ...ctx });\n }\n }\n }\n}\n\nfunction processFragmentChildren({\n path,\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n}: { path: NodePath<t.JSXFragment> } & InsertionContext): void {\n const children = path.node.children;\n const ctx: InsertionContext = {\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n };\n\n const hasText = hasTranslatableText(children);\n const hasOpaque = hasOpaqueGTChild(children, importAliases);\n const shouldClaimT = !insideAutoT && (hasText || hasOpaque);\n\n if (shouldClaimT) {\n const childPaths = path.get('children');\n for (const childPath of childPaths) {\n processChild(childPath, { ...ctx, insideAutoT: true });\n }\n wrapFragmentChildrenInT(path, tLocalName, processedNodes);\n } else if (insideAutoT) {\n const childPaths = path.get('children');\n for (const childPath of childPaths) {\n processChild(childPath, ctx);\n }\n } else {\n const childPaths = path.get('children');\n for (const childPath of childPaths) {\n if (childPath.isJSXElement() && !processedNodes.has(childPath.node)) {\n processJsxElement({ path: childPath, ...ctx });\n } else if (\n childPath.isJSXFragment() &&\n !processedNodes.has(childPath.node)\n ) {\n processJsxFragment({ path: childPath, ...ctx });\n }\n }\n }\n}\n\nfunction processChild(childPath: NodePath, ctx: InsertionContext): void {\n if (childPath.isJSXElement() && !ctx.processedNodes.has(childPath.node)) {\n processJsxElement({ path: childPath, ...ctx });\n } else if (\n childPath.isJSXFragment() &&\n !ctx.processedNodes.has(childPath.node)\n ) {\n processJsxFragment({ path: childPath, ...ctx });\n } else if (\n childPath.isJSXExpressionContainer() &&\n ctx.insideAutoT &&\n needsVarWrapping(childPath.node)\n ) {\n // Wrap dynamic expression in <Var>\n const varWrapper = createVarWrapper(\n childPath.node,\n ctx.varLocalName,\n ctx.processedNodes\n );\n childPath.replaceWith(varWrapper);\n ctx.processedNodes.add(varWrapper);\n }\n}\n\n// ===== Opaque component props ===== //\n\nfunction processOpaqueComponentProps({\n path,\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n canonicalName,\n}: {\n path: NodePath<t.JSXElement>;\n canonicalName: string | undefined;\n} & InsertionContext): void {\n // Branch/Plural children (fallback content) — process element-by-element before marking\n if (\n insideAutoT &&\n (canonicalName === BRANCH_COMPONENT || canonicalName === PLURAL_COMPONENT)\n ) {\n const childPaths = path.get('children');\n for (const childPath of childPaths) {\n processChild(childPath, {\n insideAutoT: true,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n });\n }\n }\n\n if (!insideAutoT) {\n markDescendantJsx(path, processedNodes);\n return;\n }\n\n const ctx: InsertionContext = {\n insideAutoT: true,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n };\n\n // Wrap dynamic prop values in <Var>, skipping control props.\n // This must happen BEFORE markDescendantJsx so that JSX inside auto-inserted\n // _Var wrappers stays unmarked for the top-level visitor to process independently.\n const attrs = path.get('openingElement').get('attributes');\n for (const attrPath of attrs) {\n if (!attrPath.isJSXAttribute()) continue;\n\n // Determine prop name and skip control props\n const nameNode = attrPath.node.name;\n const propName = t.isJSXIdentifier(nameNode) ? nameNode.name : null;\n if (isControlProp(canonicalName, propName)) continue;\n\n const valuePath = attrPath.get('value');\n if (!valuePath.isJSXExpressionContainer()) continue;\n\n const expr = valuePath.node.expression;\n\n // Content prop with JSX value — recurse into children for Var-wrapping\n if (t.isJSXElement(expr) || t.isJSXFragment(expr)) {\n const exprPath = (valuePath as NodePath<t.JSXExpressionContainer>).get(\n 'expression'\n );\n if (exprPath.isJSXElement() || exprPath.isJSXFragment()) {\n const childPaths = (\n exprPath as NodePath<t.JSXElement | t.JSXFragment>\n ).get('children');\n for (const childPath of childPaths) {\n processChild(childPath, ctx);\n }\n }\n continue;\n }\n\n // Non-JSX dynamic value — wrap in Var\n if (needsVarWrapping(valuePath.node)) {\n const varWrapper = createVarWrapper(\n valuePath.node,\n varLocalName,\n processedNodes\n );\n valuePath.replaceWith(varWrapper);\n processedNodes.add(varWrapper);\n }\n }\n\n // Mark remaining descendant JSX as processed, but skip auto-inserted nodes\n // so the top-level visitor can still discover JSX inside _Var wrappers.\n // For Derive/Static, only mark props — leave children unmarked so the\n // top-level visitor can independently process them (e.g. Branch/Plural\n // inside Derive should get their own _T, matching compiler behavior).\n if (\n canonicalName === DERIVE_COMPONENT ||\n canonicalName === STATIC_COMPONENT\n ) {\n for (const attrPath of path.get('openingElement').get('attributes')) {\n attrPath.traverse({\n JSXElement(childPath) {\n processedNodes.add(childPath.node);\n },\n JSXFragment(childPath) {\n processedNodes.add(childPath.node);\n },\n });\n }\n } else {\n markDescendantJsx(path, processedNodes);\n }\n}\n\nfunction isControlProp(\n canonicalName: string | undefined,\n propName: string | null\n): boolean {\n if (!propName) return false;\n if (canonicalName === BRANCH_COMPONENT) {\n return BRANCH_CONTROL_PROPS.has(propName) || propName.startsWith('data-');\n }\n if (canonicalName === PLURAL_COMPONENT) {\n return PLURAL_CONTROL_PROPS.has(propName);\n }\n return false;\n}\n\n// ===== Helper functions ===== //\n\nfunction getElementTypeName(element: t.JSXElement): string | null {\n const name = element.openingElement.name;\n if (t.isJSXIdentifier(name)) return name.name;\n return null;\n}\n\nfunction getLocalName(\n importAliases: Record<string, string>,\n canonicalName: string\n): string {\n const entry = Object.entries(importAliases).find(\n ([, v]) => v === canonicalName\n );\n return entry ? entry[0] : canonicalName;\n}\n\nfunction hasTranslatableText(children: t.Node[]): boolean {\n return children.some(\n (child) => t.isJSXText(child) && child.value.trim().length > 0\n );\n}\n\nfunction hasOpaqueGTChild(\n children: t.Node[],\n importAliases: Record<string, string>\n): boolean {\n return children.some((child) => {\n if (!t.isJSXElement(child)) return false;\n const typeName = getElementTypeName(child);\n if (!typeName) return false;\n const canonical = importAliases[typeName];\n return (\n canonical === BRANCH_COMPONENT ||\n canonical === PLURAL_COMPONENT ||\n canonical === DERIVE_COMPONENT ||\n canonical === STATIC_COMPONENT\n );\n });\n}\n\nfunction needsVarWrapping(container: t.JSXExpressionContainer): boolean {\n const expr = container.expression;\n if (t.isJSXEmptyExpression(expr)) return false;\n\n // Use isStaticExpression to check — if static, no wrapping needed\n const analysis = isStaticExpression(expr, true);\n if (analysis.isStatic) return false;\n\n // JSX elements/fragments inside expressions are not dynamic — they're valid children\n if (t.isJSXElement(expr) || t.isJSXFragment(expr)) return false;\n\n return true;\n}\n\n// ===== AST construction ===== //\n\nfunction createTWrapper(\n children: t.JSXElement['children'],\n tName: string\n): t.JSXElement {\n const element = t.jsxElement(\n t.jsxOpeningElement(t.jsxIdentifier(tName), []),\n t.jsxClosingElement(t.jsxIdentifier(tName)),\n children\n );\n autoInsertedNodes.add(element);\n return element;\n}\n\nfunction createVarWrapper(\n child: t.JSXExpressionContainer,\n varName: string,\n processedNodes: WeakSet<t.Node>\n): t.JSXExpressionContainer {\n const varElement = t.jsxElement(\n t.jsxOpeningElement(t.jsxIdentifier(varName), []),\n t.jsxClosingElement(t.jsxIdentifier(varName)),\n [child]\n );\n autoInsertedNodes.add(varElement);\n processedNodes.add(varElement);\n return t.jsxExpressionContainer(varElement);\n}\n\nfunction wrapChildrenInT(\n elementPath: NodePath<t.JSXElement>,\n tName: string,\n processedNodes: WeakSet<t.Node>\n): void {\n const children = [...elementPath.node.children];\n const tWrapper = createTWrapper(children, tName);\n processedNodes.add(tWrapper);\n elementPath.node.children = [tWrapper];\n}\n\nfunction wrapFragmentChildrenInT(\n fragmentPath: NodePath<t.JSXFragment>,\n tName: string,\n processedNodes: WeakSet<t.Node>\n): void {\n const children = [...fragmentPath.node.children];\n const tWrapper = createTWrapper(children, tName);\n processedNodes.add(tWrapper);\n fragmentPath.node.children = [tWrapper];\n}\n\n// ===== Marking descendants as processed ===== //\n\nfunction markDescendantJsx(\n path: NodePath<t.JSXElement | t.JSXFragment>,\n processedNodes: WeakSet<t.Node>\n): void {\n path.traverse({\n JSXElement(childPath) {\n // Don't mark JSX inside auto-inserted _Var — the top-level visitor\n // needs to find and process those independently\n if (autoInsertedNodes.has(childPath.node)) {\n childPath.skip();\n return;\n }\n processedNodes.add(childPath.node);\n },\n JSXFragment(childPath) {\n if (autoInsertedNodes.has(childPath.node)) {\n childPath.skip();\n return;\n }\n processedNodes.add(childPath.node);\n },\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,201 +1,130 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
// Does NOT include non-breaking space (U+00A0) which should be preserved
|
|
1
|
+
import { isElementNode, isExpressionNode, isMultiplicationNode } from "./types.js";
|
|
2
|
+
import { isAcceptedPluralForm } from "generaltranslation/internal";
|
|
3
|
+
//#region src/react/jsx/utils/jsxParsing/handleChildrenWhitespace.ts
|
|
5
4
|
const isJsxWhitespace = (char) => {
|
|
6
|
-
|
|
5
|
+
return char === " " || char === " " || char === "\n" || char === "\r";
|
|
7
6
|
};
|
|
8
|
-
const trimJsxWhitespace = (str, side =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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);
|
|
7
|
+
const trimJsxWhitespace = (str, side = "both") => {
|
|
8
|
+
let start = 0;
|
|
9
|
+
let end = str.length;
|
|
10
|
+
if (side === "start" || side === "both") while (start < end && isJsxWhitespace(str[start])) start++;
|
|
11
|
+
if (side === "end" || side === "both") while (end > start && isJsxWhitespace(str[end - 1])) end--;
|
|
12
|
+
return str.slice(start, end);
|
|
22
13
|
};
|
|
23
14
|
const hasNonJsxWhitespace = (str) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
return false;
|
|
15
|
+
for (const char of str) if (!isJsxWhitespace(char)) return true;
|
|
16
|
+
return false;
|
|
29
17
|
};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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;
|
|
18
|
+
function trimJsxStringChild(child) {
|
|
19
|
+
if (!child.includes("\n") && !child.includes("\r")) return child;
|
|
20
|
+
let result = child.replace(/\r\n|\r/g, "\n");
|
|
21
|
+
result = result.replace(/[\t ]+/g, " ");
|
|
22
|
+
let newResult = "";
|
|
23
|
+
let newline = false;
|
|
24
|
+
for (const char of result) {
|
|
25
|
+
if (char === "\n") {
|
|
26
|
+
if (hasNonJsxWhitespace(newResult)) newResult += " ";
|
|
27
|
+
else newResult = "";
|
|
28
|
+
newline = true;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (!newline) {
|
|
32
|
+
newResult += char;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (isJsxWhitespace(char)) continue;
|
|
36
|
+
newResult += char;
|
|
37
|
+
newline = false;
|
|
38
|
+
}
|
|
39
|
+
if (newline) newResult = trimJsxWhitespace(newResult, "end");
|
|
40
|
+
result = newResult;
|
|
41
|
+
result = result.replace(/[\t ]+/g, " ");
|
|
42
|
+
return result;
|
|
64
43
|
}
|
|
65
44
|
/**
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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
|
-
const processChild = handleChildrenWhitespace;
|
|
166
|
-
return [
|
|
167
|
-
key,
|
|
168
|
-
processChild(value),
|
|
169
|
-
];
|
|
170
|
-
}));
|
|
171
|
-
return {
|
|
172
|
-
nodeType: 'element',
|
|
173
|
-
type: currentTree.type,
|
|
174
|
-
...(processedProps ? { props: processedProps } : {}),
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
else if (isExpressionNode(currentTree)) {
|
|
178
|
-
// Strip expression
|
|
179
|
-
const result = currentTree.result;
|
|
180
|
-
if (isMultiplicationNode(result)) {
|
|
181
|
-
return handleChildrenWhitespace(result);
|
|
182
|
-
}
|
|
183
|
-
else if (typeof result === 'string') {
|
|
184
|
-
return result;
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
return result;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
else if (isMultiplicationNode(currentTree)) {
|
|
191
|
-
return {
|
|
192
|
-
nodeType: 'multiplication',
|
|
193
|
-
branches: handleChildrenWhitespace(currentTree.branches, 'multiplication'),
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
else if (typeof currentTree === 'string') {
|
|
197
|
-
return trimJsxStringChild(currentTree);
|
|
198
|
-
}
|
|
199
|
-
// null or number or boolean
|
|
200
|
-
return currentTree;
|
|
45
|
+
* Handles whitespace in children of a JSX element, and strips elements
|
|
46
|
+
* @param currentTree - The current tree to handle
|
|
47
|
+
* @returns The processed tree with whitespace handled
|
|
48
|
+
*
|
|
49
|
+
* For unresolved functions, we just make it so that Derive has no children
|
|
50
|
+
*
|
|
51
|
+
* The typing was so much worse before this. Don't come for me. All I did was enforce the typing.
|
|
52
|
+
*/
|
|
53
|
+
function handleChildrenWhitespace(currentTree, parentNodeType = void 0) {
|
|
54
|
+
if (Array.isArray(currentTree)) {
|
|
55
|
+
const childrenTypes = currentTree.map((child) => {
|
|
56
|
+
if (typeof child === "string") return "text";
|
|
57
|
+
if (isExpressionNode(child)) return "expression";
|
|
58
|
+
if (isElementNode(child)) return "element";
|
|
59
|
+
if (isMultiplicationNode(child)) return "multiplication";
|
|
60
|
+
return "other";
|
|
61
|
+
});
|
|
62
|
+
const newChildren = [];
|
|
63
|
+
currentTree.forEach((child, index) => {
|
|
64
|
+
switch (childrenTypes[index]) {
|
|
65
|
+
case "text":
|
|
66
|
+
const textNode = child;
|
|
67
|
+
if (parentNodeType === "multiplication") {
|
|
68
|
+
const result = handleChildrenWhitespace(textNode);
|
|
69
|
+
if (result) newChildren.push(result);
|
|
70
|
+
} else {
|
|
71
|
+
const string = trimJsxStringChild(textNode);
|
|
72
|
+
if (string) newChildren.push(string);
|
|
73
|
+
}
|
|
74
|
+
break;
|
|
75
|
+
case "expression":
|
|
76
|
+
const result = child.result;
|
|
77
|
+
if (isMultiplicationNode(result)) newChildren.push(handleChildrenWhitespace(result));
|
|
78
|
+
else if (typeof result === "string") newChildren.push(result);
|
|
79
|
+
else newChildren.push(result);
|
|
80
|
+
break;
|
|
81
|
+
case "element":
|
|
82
|
+
const newElement = handleChildrenWhitespace(child);
|
|
83
|
+
newChildren.push(newElement);
|
|
84
|
+
break;
|
|
85
|
+
case "multiplication":
|
|
86
|
+
newChildren.push({
|
|
87
|
+
nodeType: "multiplication",
|
|
88
|
+
branches: handleChildrenWhitespace(child.branches, "multiplication")
|
|
89
|
+
});
|
|
90
|
+
break;
|
|
91
|
+
case "other":
|
|
92
|
+
newChildren.push(child);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
if (parentNodeType === "multiplication") return newChildren;
|
|
97
|
+
return newChildren.length === 1 ? newChildren[0] : newChildren;
|
|
98
|
+
} else if (isElementNode(currentTree)) {
|
|
99
|
+
const elementIsPlural = currentTree.type === "Plural";
|
|
100
|
+
const elementIsBranch = currentTree.type === "Branch";
|
|
101
|
+
const processedProps = !currentTree.props ? void 0 : Object.fromEntries(Object.entries(currentTree.props).map(([key, value]) => {
|
|
102
|
+
let shouldProcess = false;
|
|
103
|
+
if (key === "children") shouldProcess = true;
|
|
104
|
+
if (elementIsPlural && isAcceptedPluralForm(key)) shouldProcess = true;
|
|
105
|
+
if (elementIsBranch && key !== "branch") shouldProcess = true;
|
|
106
|
+
if (typeof value === "string" && key !== "children") shouldProcess = false;
|
|
107
|
+
if (!shouldProcess) return [key, value];
|
|
108
|
+
return [key, handleChildrenWhitespace(value)];
|
|
109
|
+
}));
|
|
110
|
+
return {
|
|
111
|
+
nodeType: "element",
|
|
112
|
+
type: currentTree.type,
|
|
113
|
+
...processedProps ? { props: processedProps } : {}
|
|
114
|
+
};
|
|
115
|
+
} else if (isExpressionNode(currentTree)) {
|
|
116
|
+
const result = currentTree.result;
|
|
117
|
+
if (isMultiplicationNode(result)) return handleChildrenWhitespace(result);
|
|
118
|
+
else if (typeof result === "string") return result;
|
|
119
|
+
else return result;
|
|
120
|
+
} else if (isMultiplicationNode(currentTree)) return {
|
|
121
|
+
nodeType: "multiplication",
|
|
122
|
+
branches: handleChildrenWhitespace(currentTree.branches, "multiplication")
|
|
123
|
+
};
|
|
124
|
+
else if (typeof currentTree === "string") return trimJsxStringChild(currentTree);
|
|
125
|
+
return currentTree;
|
|
201
126
|
}
|
|
127
|
+
//#endregion
|
|
128
|
+
export { handleChildrenWhitespace, trimJsxStringChild };
|
|
129
|
+
|
|
130
|
+
//# sourceMappingURL=handleChildrenWhitespace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleChildrenWhitespace.js","names":["processChild"],"sources":["../../../../../src/react/jsx/utils/jsxParsing/handleChildrenWhitespace.ts"],"sourcesContent":["import { isAcceptedPluralForm } from 'generaltranslation/internal';\nimport {\n ElementNode,\n ExpressionNode,\n isElementNode,\n isExpressionNode,\n isMultiplicationNode,\n JsxTree,\n MultiplicationNode,\n WhitespaceJsxTreeResult,\n WhitespaceMultiplicationNode,\n} from './types.js';\n\n// JSX whitespace characters (space, tab, newline, carriage return)\n// Does NOT include non-breaking space (U+00A0) which should be preserved\nconst isJsxWhitespace = (char: string) => {\n return char === ' ' || char === '\\t' || char === '\\n' || char === '\\r';\n};\n\nconst trimJsxWhitespace = (\n str: string,\n side: 'start' | 'end' | 'both' = 'both'\n) => {\n let start = 0;\n let end = str.length;\n\n if (side === 'start' || side === 'both') {\n while (start < end && isJsxWhitespace(str[start])) {\n start++;\n }\n }\n\n if (side === 'end' || side === 'both') {\n while (end > start && isJsxWhitespace(str[end - 1])) {\n end--;\n }\n }\n\n return str.slice(start, end);\n};\n\nconst hasNonJsxWhitespace = (str: string) => {\n for (const char of str) {\n if (!isJsxWhitespace(char)) return true;\n }\n return false;\n};\n\nexport function trimJsxStringChild(child: string) {\n if (!child.includes('\\n') && !child.includes('\\r')) {\n return child;\n }\n\n // Normalize line endings to \\n for consistency across platforms\n let result = child.replace(/\\r\\n|\\r/g, '\\n');\n\n // Collapse multiple spaces/tabs into a single space (but not nbsp)\n result = result.replace(/[\\t ]+/g, ' ');\n\n let newResult = '';\n let newline = false;\n for (const char of result) {\n if (char === '\\n') {\n if (hasNonJsxWhitespace(newResult)) newResult += ' ';\n else newResult = '';\n newline = true;\n continue;\n }\n if (!newline) {\n newResult += char;\n continue;\n }\n if (isJsxWhitespace(char)) continue;\n newResult += char;\n newline = false;\n }\n if (newline) newResult = trimJsxWhitespace(newResult, 'end');\n result = newResult;\n // Collapse multiple spaces/tabs into a single space (but not nbsp)\n result = result.replace(/[\\t ]+/g, ' ');\n return result;\n}\n\n// Overload for when currentTree is an array\nexport function handleChildrenWhitespace(\n currentTree: MultiplicationNode['branches'],\n parentNodeType: 'multiplication'\n): (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[];\n\n// Overload for when currentTree is an array\nexport function handleChildrenWhitespace(\n currentTree: MultiplicationNode['branches'],\n parentNodeType?: 'element' | 'expression' | undefined\n):\n | WhitespaceJsxTreeResult\n | WhitespaceMultiplicationNode\n | (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[];\n\n// Overload for when currentTree is not an array\nexport function handleChildrenWhitespace(\n currentTree: MultiplicationNode | JsxTree,\n parentNodeType?: 'multiplication' | 'element' | 'expression' | undefined\n): null | WhitespaceJsxTreeResult | WhitespaceMultiplicationNode;\n\n// Overload for entry point\nexport function handleChildrenWhitespace(\n currentTree: JsxTree | JsxTree[]\n): null | WhitespaceJsxTreeResult | WhitespaceJsxTreeResult[];\n/**\n * Handles whitespace in children of a JSX element, and strips elements\n * @param currentTree - The current tree to handle\n * @returns The processed tree with whitespace handled\n *\n * For unresolved functions, we just make it so that Derive has no children\n *\n * The typing was so much worse before this. Don't come for me. All I did was enforce the typing.\n */\nexport function handleChildrenWhitespace(\n currentTree: MultiplicationNode | JsxTree | MultiplicationNode['branches'],\n parentNodeType:\n | 'multiplication'\n | 'element'\n | 'expression'\n | undefined = undefined\n):\n | null\n | WhitespaceJsxTreeResult\n | WhitespaceMultiplicationNode\n | (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[] {\n if (Array.isArray(currentTree)) {\n const childrenTypes: (\n | 'text'\n | 'element'\n | 'expression'\n | 'multiplication'\n | 'other'\n )[] = currentTree.map((child) => {\n if (typeof child === 'string') return 'text';\n if (isExpressionNode(child)) return 'expression';\n if (isElementNode(child)) return 'element';\n if (isMultiplicationNode(child)) return 'multiplication';\n return 'other';\n });\n const newChildren: (\n | WhitespaceJsxTreeResult\n | WhitespaceMultiplicationNode\n )[] = [];\n currentTree.forEach((child, index) => {\n switch (childrenTypes[index]) {\n case 'text':\n const textNode = child as string;\n if (parentNodeType === 'multiplication') {\n // This should be treated like a new tree (no parent here b/c its a new tree)\n const result = handleChildrenWhitespace(textNode);\n if (result) newChildren.push(result);\n } else {\n const string = trimJsxStringChild(textNode);\n if (string) newChildren.push(string);\n }\n break;\n case 'expression':\n // Strip expressions\n const result = (child as ExpressionNode).result;\n if (isMultiplicationNode(result)) {\n newChildren.push(handleChildrenWhitespace(result));\n } else if (typeof result === 'string') {\n newChildren.push(result);\n } else {\n // other case\n newChildren.push(result);\n }\n break;\n case 'element':\n const newElement = handleChildrenWhitespace(\n child as ElementNode | null\n );\n newChildren.push(newElement);\n break;\n case 'multiplication':\n newChildren.push({\n nodeType: 'multiplication',\n branches: handleChildrenWhitespace(\n (child as MultiplicationNode).branches,\n 'multiplication'\n ),\n });\n break;\n case 'other':\n // Return number or boolean or null\n newChildren.push(child as number | boolean | null);\n break;\n }\n });\n if (parentNodeType === 'multiplication') {\n // Return the branches as an array\n return newChildren;\n }\n return newChildren.length === 1 ? newChildren[0] : newChildren;\n } else if (isElementNode(currentTree)) {\n // Process all props recursively\n // What if there is a different component sharing the same name?\n const elementIsPlural = currentTree.type === 'Plural';\n const elementIsBranch = currentTree.type === 'Branch';\n const processedProps = !currentTree.props\n ? undefined\n : Object.fromEntries(\n Object.entries(currentTree.props).map(\n ([key, value]:\n | [string, unknown]\n | [\n 'children',\n (\n | JsxTree\n | MultiplicationNode\n | (JsxTree | MultiplicationNode)[]\n ),\n ]): [string, unknown] => {\n let shouldProcess = false;\n // Process children\n if (key === 'children') shouldProcess = true;\n // Process plural children\n if (elementIsPlural && isAcceptedPluralForm(key as string))\n shouldProcess = true;\n // Process branch children\n if (elementIsBranch && key !== 'branch') shouldProcess = true;\n // Do not process raw strings\n if (typeof value === 'string' && key !== 'children')\n shouldProcess = false;\n // Process props\n if (!shouldProcess) {\n return [key, value];\n }\n const processChild = handleChildrenWhitespace as (\n currentTree:\n | JsxTree\n | MultiplicationNode\n | (JsxTree | MultiplicationNode)[]\n ) => unknown;\n return [\n key,\n processChild(\n value as\n | JsxTree\n | MultiplicationNode\n | (JsxTree | MultiplicationNode)[]\n ),\n ];\n }\n )\n );\n return {\n nodeType: 'element',\n type: currentTree.type,\n ...(processedProps ? { props: processedProps } : {}),\n };\n } else if (isExpressionNode(currentTree)) {\n // Strip expression\n const result = (currentTree as ExpressionNode).result;\n if (isMultiplicationNode(result)) {\n return handleChildrenWhitespace(result);\n } else if (typeof result === 'string') {\n return result;\n } else {\n return result;\n }\n } else if (isMultiplicationNode(currentTree)) {\n return {\n nodeType: 'multiplication',\n branches: handleChildrenWhitespace(\n currentTree.branches,\n 'multiplication'\n ),\n };\n } else if (typeof currentTree === 'string') {\n return trimJsxStringChild(currentTree);\n }\n // null or number or boolean\n return currentTree;\n}\n"],"mappings":"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"}
|
|
@@ -1,66 +1,52 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { BRANCH_COMPONENT, BRANCH_CONTROL_PROPS, PLURAL_COMPONENT } from "../../constants.js";
|
|
2
|
+
import { isWhitespaceJsxTree, isWhitespaceMultiplicationNode } from "../types.js";
|
|
3
|
+
import { isAcceptedPluralForm } from "generaltranslation/internal";
|
|
4
|
+
//#region src/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.ts
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (propKey === 'children')
|
|
48
|
-
continue;
|
|
49
|
-
if (elementIsPlural && !isAcceptedPluralForm(propKey))
|
|
50
|
-
continue;
|
|
51
|
-
if (elementIsBranch && BRANCH_CONTROL_PROPS.has(propKey))
|
|
52
|
-
continue;
|
|
53
|
-
if (propValue && typeof propValue === 'object') {
|
|
54
|
-
const result = handleChildren(propValue, curr.props, propKey);
|
|
55
|
-
if (result)
|
|
56
|
-
return result;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return undefined;
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
return undefined;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
6
|
+
* Finds the immediate multiplication node from the given root (eg no nested multiplication nodes)
|
|
7
|
+
* TODO: I am sure there is some optimization to be done here
|
|
8
|
+
*
|
|
9
|
+
* Maybe there is an optimization here with caching used paths btwn calls
|
|
10
|
+
*/
|
|
11
|
+
function findMultiplicationNode(root) {
|
|
12
|
+
return handleChildren(root, void 0, void 0);
|
|
13
|
+
function handleChildren(curr, parent, key) {
|
|
14
|
+
if (Array.isArray(curr)) {
|
|
15
|
+
for (const [index, child] of Object.entries(curr)) {
|
|
16
|
+
const result = handleChild(child, curr, index);
|
|
17
|
+
if (result) return result;
|
|
18
|
+
}
|
|
19
|
+
return;
|
|
20
|
+
} else return handleChild(curr, parent, key);
|
|
21
|
+
}
|
|
22
|
+
function handleChild(curr, parent, key) {
|
|
23
|
+
if (isWhitespaceMultiplicationNode(curr)) return {
|
|
24
|
+
parent,
|
|
25
|
+
key,
|
|
26
|
+
node: curr
|
|
27
|
+
};
|
|
28
|
+
else if (isWhitespaceJsxTree(curr)) {
|
|
29
|
+
if (!curr.props) return void 0;
|
|
30
|
+
if (curr.props.children) {
|
|
31
|
+
const result = handleChildren(curr.props.children, curr.props, "children");
|
|
32
|
+
if (result) return result;
|
|
33
|
+
}
|
|
34
|
+
const elementIsPlural = curr.type === PLURAL_COMPONENT;
|
|
35
|
+
const elementIsBranch = curr.type === BRANCH_COMPONENT;
|
|
36
|
+
if (elementIsPlural || elementIsBranch) for (const [propKey, propValue] of Object.entries(curr.props)) {
|
|
37
|
+
if (propKey === "children") continue;
|
|
38
|
+
if (elementIsPlural && !isAcceptedPluralForm(propKey)) continue;
|
|
39
|
+
if (elementIsBranch && BRANCH_CONTROL_PROPS.has(propKey)) continue;
|
|
40
|
+
if (propValue && typeof propValue === "object") {
|
|
41
|
+
const result = handleChildren(propValue, curr.props, propKey);
|
|
42
|
+
if (result) return result;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return;
|
|
46
|
+
} else return;
|
|
47
|
+
}
|
|
66
48
|
}
|
|
49
|
+
//#endregion
|
|
50
|
+
export { findMultiplicationNode };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=findMultiplicationNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findMultiplicationNode.js","names":[],"sources":["../../../../../../src/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.ts"],"sourcesContent":["import {\n WhitespaceJsxTreeResult,\n WhitespaceMultiplicationNode,\n isWhitespaceMultiplicationNode,\n isWhitespaceJsxTree,\n} from '../types.js';\nimport { isAcceptedPluralForm } from 'generaltranslation/internal';\nimport {\n PLURAL_COMPONENT,\n BRANCH_COMPONENT,\n BRANCH_CONTROL_PROPS,\n} from '../../constants.js';\n\nexport type MultiplicationNodeResult = {\n parent: Record<string, unknown> | unknown[] | undefined;\n key: string | undefined;\n node: WhitespaceMultiplicationNode;\n};\n\n/**\n * Finds the immediate multiplication node from the given root (eg no nested multiplication nodes)\n * TODO: I am sure there is some optimization to be done here\n *\n * Maybe there is an optimization here with caching used paths btwn calls\n */\nexport function findMultiplicationNode(\n root:\n | WhitespaceJsxTreeResult\n | WhitespaceMultiplicationNode\n | (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[]\n): MultiplicationNodeResult | undefined {\n // Entry point\n return handleChildren(root, undefined, undefined);\n\n // Helper function to handle children\n function handleChildren(\n curr:\n | WhitespaceJsxTreeResult\n | WhitespaceMultiplicationNode\n | (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[],\n parent: MultiplicationNodeResult['parent'],\n key: string | undefined\n ): MultiplicationNodeResult | undefined {\n if (Array.isArray(curr)) {\n for (const [index, child] of Object.entries(curr)) {\n const result = handleChild(child, curr, index);\n if (result) return result;\n }\n return undefined;\n } else {\n return handleChild(curr, parent, key);\n }\n }\n\n // Helper function to handle a single child\n function handleChild(\n curr: WhitespaceJsxTreeResult | WhitespaceMultiplicationNode,\n parent: MultiplicationNodeResult['parent'],\n key: string | undefined\n ): MultiplicationNodeResult | undefined {\n if (isWhitespaceMultiplicationNode(curr)) {\n return { parent, key, node: curr };\n } else if (isWhitespaceJsxTree(curr)) {\n if (!curr.props) return undefined;\n\n // Check children first\n if (curr.props.children) {\n const result = handleChildren(\n curr.props.children,\n curr.props,\n 'children'\n );\n if (result) return result;\n }\n\n // For Plural/Branch, also search translatable content props\n // Mirrors the prop filtering in handleChildrenWhitespace.ts and autoInsertion.ts\n const elementIsPlural = curr.type === PLURAL_COMPONENT;\n const elementIsBranch = curr.type === BRANCH_COMPONENT;\n if (elementIsPlural || elementIsBranch) {\n for (const [propKey, propValue] of Object.entries(curr.props)) {\n if (propKey === 'children') continue;\n if (elementIsPlural && !isAcceptedPluralForm(propKey)) continue;\n if (elementIsBranch && BRANCH_CONTROL_PROPS.has(propKey)) continue;\n if (propValue && typeof propValue === 'object') {\n const result = handleChildren(\n propValue as\n | WhitespaceJsxTreeResult\n | WhitespaceMultiplicationNode\n | (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[],\n curr.props,\n propKey\n );\n if (result) return result;\n }\n }\n }\n\n return undefined;\n } else {\n return undefined;\n }\n }\n}\n"],"mappings":";;;;;;;;;;AAyBA,SAAgB,uBACd,MAIsC;AAEtC,QAAO,eAAe,MAAM,KAAA,GAAW,KAAA,EAAU;CAGjD,SAAS,eACP,MAIA,QACA,KACsC;AACtC,MAAI,MAAM,QAAQ,KAAK,EAAE;AACvB,QAAK,MAAM,CAAC,OAAO,UAAU,OAAO,QAAQ,KAAK,EAAE;IACjD,MAAM,SAAS,YAAY,OAAO,MAAM,MAAM;AAC9C,QAAI,OAAQ,QAAO;;AAErB;QAEA,QAAO,YAAY,MAAM,QAAQ,IAAI;;CAKzC,SAAS,YACP,MACA,QACA,KACsC;AACtC,MAAI,+BAA+B,KAAK,CACtC,QAAO;GAAE;GAAQ;GAAK,MAAM;GAAM;WACzB,oBAAoB,KAAK,EAAE;AACpC,OAAI,CAAC,KAAK,MAAO,QAAO,KAAA;AAGxB,OAAI,KAAK,MAAM,UAAU;IACvB,MAAM,SAAS,eACb,KAAK,MAAM,UACX,KAAK,OACL,WACD;AACD,QAAI,OAAQ,QAAO;;GAKrB,MAAM,kBAAkB,KAAK,SAAS;GACtC,MAAM,kBAAkB,KAAK,SAAS;AACtC,OAAI,mBAAmB,gBACrB,MAAK,MAAM,CAAC,SAAS,cAAc,OAAO,QAAQ,KAAK,MAAM,EAAE;AAC7D,QAAI,YAAY,WAAY;AAC5B,QAAI,mBAAmB,CAAC,qBAAqB,QAAQ,CAAE;AACvD,QAAI,mBAAmB,qBAAqB,IAAI,QAAQ,CAAE;AAC1D,QAAI,aAAa,OAAO,cAAc,UAAU;KAC9C,MAAM,SAAS,eACb,WAIA,KAAK,OACL,QACD;AACD,SAAI,OAAQ,QAAO;;;AAKzB;QAEA"}
|