gt 2.14.35 → 2.14.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -1
- package/dist/api/collectUserEditDiffs.js +112 -155
- package/dist/api/collectUserEditDiffs.js.map +1 -0
- package/dist/api/downloadFileBatch.js +164 -241
- package/dist/api/downloadFileBatch.js.map +1 -0
- package/dist/api/saveLocalEdits.js +37 -41
- package/dist/api/saveLocalEdits.js.map +1 -0
- package/dist/bin/bin-entry.js +17 -7
- package/dist/bin/bin-entry.js.map +1 -0
- package/dist/bin/bin-main.js +43 -61
- package/dist/bin/bin-main.js.map +1 -0
- package/dist/cli/base.js +382 -497
- package/dist/cli/base.js.map +1 -0
- package/dist/cli/commands/download.js +41 -49
- package/dist/cli/commands/download.js.map +1 -0
- package/dist/cli/commands/enqueue.js +26 -25
- package/dist/cli/commands/enqueue.js.map +1 -0
- package/dist/cli/commands/setupProject.js +33 -36
- package/dist/cli/commands/setupProject.js.map +1 -0
- package/dist/cli/commands/stage.js +53 -61
- package/dist/cli/commands/stage.js.map +1 -0
- package/dist/cli/commands/translate.js +75 -112
- package/dist/cli/commands/translate.js.map +1 -0
- package/dist/cli/commands/upload.js +185 -213
- package/dist/cli/commands/upload.js.map +1 -0
- package/dist/cli/commands/utils/validation.js +39 -34
- package/dist/cli/commands/utils/validation.js.map +1 -0
- package/dist/cli/flags.js +35 -62
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/inline.js +112 -137
- package/dist/cli/inline.js.map +1 -0
- package/dist/cli/next.js +17 -12
- package/dist/cli/next.js.map +1 -0
- package/dist/cli/node.js +19 -15
- package/dist/cli/node.js.map +1 -0
- package/dist/cli/python.js +13 -8
- package/dist/cli/python.js.map +1 -0
- package/dist/cli/react.js +61 -78
- package/dist/cli/react.js.map +1 -0
- package/dist/config/defaults.js +16 -11
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/generateSettings.js +167 -269
- package/dist/config/generateSettings.js.map +1 -0
- package/dist/config/optionPresets.js +78 -96
- package/dist/config/optionPresets.js.map +1 -0
- package/dist/config/resolveConfig.js +27 -32
- package/dist/config/resolveConfig.js.map +1 -0
- package/dist/config/utils.js +7 -3
- package/dist/config/utils.js.map +1 -0
- package/dist/config/validateSettings.js +19 -30
- package/dist/config/validateSettings.js.map +1 -0
- package/dist/console/colors.js +18 -13
- package/dist/console/colors.js.map +1 -0
- package/dist/console/displayTranslateSummary.js +40 -37
- package/dist/console/displayTranslateSummary.js.map +1 -0
- package/dist/console/formatting.js +8 -5
- package/dist/console/formatting.js.map +1 -0
- package/dist/console/index.d.ts +11 -9
- package/dist/console/index.js +53 -50
- package/dist/console/index.js.map +1 -0
- package/dist/console/inkFields.d.ts +23 -0
- package/dist/console/inkFields.js +87 -0
- package/dist/console/inkFields.js.map +1 -0
- package/dist/console/inkLayout.d.ts +7 -0
- package/dist/console/inkLayout.js +139 -0
- package/dist/console/inkLayout.js.map +1 -0
- package/dist/console/inkLocaleData.d.ts +4 -0
- package/dist/console/inkLocaleData.js +32 -0
- package/dist/console/inkLocaleData.js.map +1 -0
- package/dist/console/inkPrompts.d.ts +8 -0
- package/dist/console/inkPrompts.js +496 -0
- package/dist/console/inkPrompts.js.map +1 -0
- package/dist/console/inkSession.d.ts +3 -0
- package/dist/console/inkSession.js +42 -0
- package/dist/console/inkSession.js.map +1 -0
- package/dist/console/inkTerminal.d.ts +4 -0
- package/dist/console/inkTerminal.js +15 -0
- package/dist/console/inkTerminal.js.map +1 -0
- package/dist/console/inkTypes.d.ts +66 -0
- package/dist/console/inkTypes.js +1 -0
- package/dist/console/inkUtils.d.ts +24 -0
- package/dist/console/inkUtils.js +87 -0
- package/dist/console/inkUtils.js.map +1 -0
- package/dist/console/logger.js +209 -249
- package/dist/console/logger.js.map +1 -0
- package/dist/console/logging.d.ts +14 -0
- package/dist/console/logging.js +203 -162
- package/dist/console/logging.js.map +1 -0
- package/dist/console/promptParsing.d.ts +5 -0
- package/dist/console/promptParsing.js +28 -0
- package/dist/console/promptParsing.js.map +1 -0
- package/dist/console/terminalSession.d.ts +5 -0
- package/dist/console/terminalSession.js +38 -0
- package/dist/console/terminalSession.js.map +1 -0
- package/dist/extraction/index.js +3 -2
- package/dist/extraction/mapToUpdates.js +19 -18
- package/dist/extraction/mapToUpdates.js.map +1 -0
- package/dist/extraction/postProcess.js +68 -86
- package/dist/extraction/postProcess.js.map +1 -0
- package/dist/formats/files/aggregateFiles.js +223 -304
- package/dist/formats/files/aggregateFiles.js.map +1 -0
- package/dist/formats/files/collectFiles.js +53 -54
- package/dist/formats/files/collectFiles.js.map +1 -0
- package/dist/formats/files/convertToFileTranslationData.js +21 -19
- package/dist/formats/files/convertToFileTranslationData.js.map +1 -0
- package/dist/formats/files/fileMapping.js +82 -119
- package/dist/formats/files/fileMapping.js.map +1 -0
- package/dist/formats/files/preprocess/mdx.js +15 -12
- package/dist/formats/files/preprocess/mdx.js.map +1 -0
- package/dist/formats/files/preprocess/mintlify.js +15 -13
- package/dist/formats/files/preprocess/mintlify.js.map +1 -0
- package/dist/formats/files/preprocessContent.js +20 -21
- package/dist/formats/files/preprocessContent.js.map +1 -0
- package/dist/formats/files/save.js +18 -15
- package/dist/formats/files/save.js.map +1 -0
- package/dist/formats/files/supportedFiles.js +27 -22
- package/dist/formats/files/supportedFiles.js.map +1 -0
- package/dist/formats/files/transformFormat.js +93 -100
- package/dist/formats/files/transformFormat.js.map +1 -0
- package/dist/formats/json/extractJson.js +83 -110
- package/dist/formats/json/extractJson.js.map +1 -0
- package/dist/formats/json/flattenJson.js +41 -48
- package/dist/formats/json/flattenJson.js.map +1 -0
- package/dist/formats/json/jsonPath.js +20 -15
- package/dist/formats/json/jsonPath.js.map +1 -0
- package/dist/formats/json/jsonPointer.js +17 -17
- package/dist/formats/json/jsonPointer.js.map +1 -0
- package/dist/formats/json/mergeJson.js +230 -371
- package/dist/formats/json/mergeJson.js.map +1 -0
- package/dist/formats/json/parseJson.js +74 -111
- package/dist/formats/json/parseJson.js.map +1 -0
- package/dist/formats/json/transformJson.js +53 -61
- package/dist/formats/json/transformJson.js.map +1 -0
- package/dist/formats/json/utils.js +158 -187
- package/dist/formats/json/utils.js.map +1 -0
- package/dist/formats/parseKeyedMetadata.js +85 -106
- package/dist/formats/parseKeyedMetadata.js.map +1 -0
- package/dist/formats/utils.js +13 -23
- package/dist/formats/utils.js.map +1 -0
- package/dist/formats/yaml/extractYaml.js +32 -31
- package/dist/formats/yaml/extractYaml.js.map +1 -0
- package/dist/formats/yaml/mergeYaml.js +43 -60
- package/dist/formats/yaml/mergeYaml.js.map +1 -0
- package/dist/formats/yaml/parseYaml.js +34 -23
- package/dist/formats/yaml/parseYaml.js.map +1 -0
- package/dist/formats/yaml/utils.js +19 -21
- package/dist/formats/yaml/utils.js.map +1 -0
- package/dist/fs/clearLocaleDirs.js +82 -114
- package/dist/fs/clearLocaleDirs.js.map +1 -0
- package/dist/fs/config/downloadedVersions.js +174 -188
- package/dist/fs/config/downloadedVersions.js.map +1 -0
- package/dist/fs/config/loadConfig.js +12 -8
- package/dist/fs/config/loadConfig.js.map +1 -0
- package/dist/fs/config/parseFilesConfig.js +166 -227
- package/dist/fs/config/parseFilesConfig.js.map +1 -0
- package/dist/fs/config/setupConfig.js +43 -52
- package/dist/fs/config/setupConfig.js.map +1 -0
- package/dist/fs/config/updateConfig.js +44 -56
- package/dist/fs/config/updateConfig.js.map +1 -0
- package/dist/fs/config/updateVersions.js +27 -28
- package/dist/fs/config/updateVersions.js.map +1 -0
- package/dist/fs/copyFile.js +33 -37
- package/dist/fs/copyFile.js.map +1 -0
- package/dist/fs/createLoadTranslationsFile.js +32 -48
- package/dist/fs/createLoadTranslationsFile.js.map +1 -0
- package/dist/fs/determineFramework/detectPythonLibrary.js +30 -34
- package/dist/fs/determineFramework/detectPythonLibrary.js.map +1 -0
- package/dist/fs/determineFramework/index.js +46 -64
- package/dist/fs/determineFramework/index.js.map +1 -0
- package/dist/fs/determineFramework/matchPyprojectDependency.js +65 -78
- package/dist/fs/determineFramework/matchPyprojectDependency.js.map +1 -0
- package/dist/fs/determineFramework/matchRequirementsTxtDependency.js +21 -19
- package/dist/fs/determineFramework/matchRequirementsTxtDependency.js.map +1 -0
- package/dist/fs/determineFramework/matchSetupPyDependency.js +60 -81
- package/dist/fs/determineFramework/matchSetupPyDependency.js.map +1 -0
- package/dist/fs/determineFramework/resolveGtDependency.js +15 -15
- package/dist/fs/determineFramework/resolveGtDependency.js.map +1 -0
- package/dist/fs/findFilepath.js +63 -78
- package/dist/fs/findFilepath.js.map +1 -0
- package/dist/fs/loadJSON.js +18 -15
- package/dist/fs/loadJSON.js.map +1 -0
- package/dist/fs/matchFiles.js +12 -7
- package/dist/fs/matchFiles.js.map +1 -0
- package/dist/fs/saveJSON.js +10 -6
- package/dist/fs/saveJSON.js.map +1 -0
- package/dist/fs/utils.js +19 -15
- package/dist/fs/utils.js.map +1 -0
- package/dist/functions.d.ts +2 -1
- package/dist/functions.js +3 -6
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +6 -2
- package/dist/generated/version.js.map +1 -0
- package/dist/git/branches.js +77 -83
- package/dist/git/branches.js.map +1 -0
- package/dist/hooks/postProcess.js +97 -114
- package/dist/hooks/postProcess.js.map +1 -0
- package/dist/index.js +23 -31
- package/dist/index.js.map +1 -0
- package/dist/locadex/setupFlow.js +11 -8
- package/dist/locadex/setupFlow.js.map +1 -0
- package/dist/main.js +17 -7
- package/dist/main.js.map +1 -0
- package/dist/next/config/parseNextConfig.js +32 -51
- package/dist/next/config/parseNextConfig.js.map +1 -0
- package/dist/next/jsx/utils.js +25 -37
- package/dist/next/jsx/utils.js.map +1 -0
- package/dist/next/parse/handleInitGT.js +87 -154
- package/dist/next/parse/handleInitGT.js.map +1 -0
- package/dist/next/parse/wrapContent.js +136 -158
- package/dist/next/parse/wrapContent.js.map +1 -0
- package/dist/python/parse/createPythonInlineUpdates.js +36 -33
- package/dist/python/parse/createPythonInlineUpdates.js.map +1 -0
- package/dist/react/config/createESBuildConfig.js +115 -115
- package/dist/react/config/createESBuildConfig.js.map +1 -0
- package/dist/react/jsx/evaluateJsx.js +90 -124
- package/dist/react/jsx/evaluateJsx.js.map +1 -0
- package/dist/react/jsx/utils/buildImportMap.js +24 -28
- package/dist/react/jsx/utils/buildImportMap.js.map +1 -0
- package/dist/react/jsx/utils/constants.js +79 -87
- package/dist/react/jsx/utils/constants.js.map +1 -0
- package/dist/react/jsx/utils/extractSourceCode.js +36 -37
- package/dist/react/jsx/utils/extractSourceCode.js.map +1 -0
- package/dist/react/jsx/utils/getCalleeNameFromExpression.js +30 -30
- package/dist/react/jsx/utils/getCalleeNameFromExpression.js.map +1 -0
- package/dist/react/jsx/utils/getPathsAndAliases.js +70 -105
- package/dist/react/jsx/utils/getPathsAndAliases.js.map +1 -0
- package/dist/react/jsx/utils/isNumberLiteral.js +13 -11
- package/dist/react/jsx/utils/isNumberLiteral.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +103 -148
- package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/autoInsertion.js +305 -389
- package/dist/react/jsx/utils/jsxParsing/autoInsertion.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +122 -193
- package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +50 -64
- package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +41 -68
- package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/parseJsx.js +760 -1107
- package/dist/react/jsx/utils/jsxParsing/parseJsx.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/parseTProps.js +35 -71
- package/dist/react/jsx/utils/jsxParsing/parseTProps.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +39 -58
- package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js.map +1 -0
- package/dist/react/jsx/utils/jsxParsing/types.js +10 -24
- package/dist/react/jsx/utils/jsxParsing/types.js.map +1 -0
- package/dist/react/jsx/utils/mapAttributeName.js +13 -13
- package/dist/react/jsx/utils/mapAttributeName.js.map +1 -0
- package/dist/react/jsx/utils/parseAst.js +142 -272
- package/dist/react/jsx/utils/parseAst.js.map +1 -0
- package/dist/react/jsx/utils/parseString.js +726 -1090
- package/dist/react/jsx/utils/parseString.js.map +1 -0
- package/dist/react/jsx/utils/parseStringFunction.js +274 -401
- package/dist/react/jsx/utils/parseStringFunction.js.map +1 -0
- package/dist/react/jsx/utils/resolveImportPath.js +104 -108
- package/dist/react/jsx/utils/resolveImportPath.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js +18 -24
- package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js +412 -579
- package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/derivation/index.js +57 -67
- package/dist/react/jsx/utils/stringParsing/derivation/index.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js +26 -36
- package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js +29 -24
- package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js +34 -32
- package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +80 -117
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js +24 -19
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +18 -21
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +45 -50
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +54 -59
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js.map +1 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +56 -69
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js.map +1 -0
- package/dist/react/jsx/utils/validateStringFunction.js +21 -29
- package/dist/react/jsx/utils/validateStringFunction.js.map +1 -0
- package/dist/react/jsx/wrapJsx.js +192 -375
- package/dist/react/jsx/wrapJsx.js.map +1 -0
- package/dist/react/parse/addVitePlugin/index.js +40 -34
- package/dist/react/parse/addVitePlugin/index.js.map +1 -0
- package/dist/react/parse/addVitePlugin/installCompiler.js +18 -20
- package/dist/react/parse/addVitePlugin/installCompiler.js.map +1 -0
- package/dist/react/parse/addVitePlugin/updateViteConfig.js +107 -111
- package/dist/react/parse/addVitePlugin/updateViteConfig.js.map +1 -0
- package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +23 -26
- package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js.map +1 -0
- package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +29 -43
- package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js.map +1 -0
- package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +70 -104
- package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js.map +1 -0
- package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +23 -29
- package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js.map +1 -0
- package/dist/react/parse/createDictionaryUpdates.js +121 -185
- package/dist/react/parse/createDictionaryUpdates.js.map +1 -0
- package/dist/react/parse/createInlineUpdates.js +123 -139
- package/dist/react/parse/createInlineUpdates.js.map +1 -0
- package/dist/react/parse/wrapContent.js +131 -156
- package/dist/react/parse/wrapContent.js.map +1 -0
- package/dist/react/utils/flattenDictionary.js +55 -70
- package/dist/react/utils/flattenDictionary.js.map +1 -0
- package/dist/react/utils/getEntryAndMetadata.js +14 -10
- package/dist/react/utils/getEntryAndMetadata.js.map +1 -0
- package/dist/react/utils/getVariableName.js +36 -33
- package/dist/react/utils/getVariableName.js.map +1 -0
- package/dist/setup/detectFramework.js +85 -102
- package/dist/setup/detectFramework.js.map +1 -0
- package/dist/setup/frameworkUtils.js +17 -28
- package/dist/setup/frameworkUtils.js.map +1 -0
- package/dist/setup/userInput.js +24 -31
- package/dist/setup/userInput.js.map +1 -0
- package/dist/setup/wizard.js +141 -143
- package/dist/setup/wizard.js.map +1 -0
- package/dist/state/mintlifyRefMap.js +12 -9
- package/dist/state/mintlifyRefMap.js.map +1 -0
- package/dist/state/recentDownloads.js +26 -23
- package/dist/state/recentDownloads.js.map +1 -0
- package/dist/state/translateWarnings.js +17 -8
- package/dist/state/translateWarnings.js.map +1 -0
- package/dist/translation/parse.js +77 -98
- package/dist/translation/parse.js.map +1 -0
- package/dist/translation/stage.js +28 -43
- package/dist/translation/stage.js.map +1 -0
- package/dist/translation/validate.js +68 -91
- package/dist/translation/validate.js.map +1 -0
- package/dist/types/libraries.js +93 -91
- package/dist/types/libraries.js.map +1 -0
- package/dist/types/parsing.js +19 -10
- package/dist/types/parsing.js.map +1 -0
- package/dist/utils/addExplicitAnchorIds.js +270 -389
- package/dist/utils/addExplicitAnchorIds.js.map +1 -0
- package/dist/utils/calculateTimeoutMs.js +11 -6
- package/dist/utils/calculateTimeoutMs.js.map +1 -0
- package/dist/utils/constants.js +15 -12
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/credentials.js +67 -114
- package/dist/utils/credentials.js.map +1 -0
- package/dist/utils/fetch.js +22 -20
- package/dist/utils/fetch.js.map +1 -0
- package/dist/utils/flattenJsonFiles.js +27 -34
- package/dist/utils/flattenJsonFiles.js.map +1 -0
- package/dist/utils/gitDiff.js +30 -32
- package/dist/utils/gitDiff.js.map +1 -0
- package/dist/utils/gt.js +7 -2
- package/dist/utils/gt.js.map +1 -0
- package/dist/utils/hash.js +14 -9
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/headers.js +10 -13
- package/dist/utils/headers.js.map +1 -0
- package/dist/utils/installPackage.js +70 -75
- package/dist/utils/installPackage.js.map +1 -0
- package/dist/utils/localizeRelativeAssets.js +114 -157
- package/dist/utils/localizeRelativeAssets.js.map +1 -0
- package/dist/utils/localizeStaticImports.js +229 -371
- package/dist/utils/localizeStaticImports.js.map +1 -0
- package/dist/utils/localizeStaticUrls.js +241 -424
- package/dist/utils/localizeStaticUrls.js.map +1 -0
- package/dist/utils/mintlifyTitleFallback.js +64 -72
- package/dist/utils/mintlifyTitleFallback.js.map +1 -0
- package/dist/utils/monorepoVersionCheck.js +177 -215
- package/dist/utils/monorepoVersionCheck.js.map +1 -0
- package/dist/utils/packageInfo.js +17 -16
- package/dist/utils/packageInfo.js.map +1 -0
- package/dist/utils/packageJson.js +51 -66
- package/dist/utils/packageJson.js.map +1 -0
- package/dist/utils/packageManager.js +237 -260
- package/dist/utils/packageManager.js.map +1 -0
- package/dist/utils/parse/needsCJS.js +36 -69
- package/dist/utils/parse/needsCJS.js.map +1 -0
- package/dist/utils/persistPostprocessHashes.js +30 -32
- package/dist/utils/persistPostprocessHashes.js.map +1 -0
- package/dist/utils/processAnchorIds.js +32 -54
- package/dist/utils/processAnchorIds.js.map +1 -0
- package/dist/utils/processOpenApi.js +469 -578
- package/dist/utils/processOpenApi.js.map +1 -0
- package/dist/utils/resolveMintlifyRefs.js +89 -105
- package/dist/utils/resolveMintlifyRefs.js.map +1 -0
- package/dist/utils/resolvePublish.js +46 -54
- package/dist/utils/resolvePublish.js.map +1 -0
- package/dist/utils/sanitizeFileContent.js +20 -27
- package/dist/utils/sanitizeFileContent.js.map +1 -0
- package/dist/utils/sharedStaticAssets.js +248 -366
- package/dist/utils/sharedStaticAssets.js.map +1 -0
- package/dist/utils/splitMintlifyLanguageRefs.js +208 -282
- package/dist/utils/splitMintlifyLanguageRefs.js.map +1 -0
- package/dist/utils/validateMdx.js +26 -23
- package/dist/utils/validateMdx.js.map +1 -0
- package/dist/utils/wrapPlainUrls.js +58 -70
- package/dist/utils/wrapPlainUrls.js.map +1 -0
- package/dist/workflows/download.js +92 -126
- package/dist/workflows/download.js.map +1 -0
- package/dist/workflows/enqueue.js +47 -54
- package/dist/workflows/enqueue.js.map +1 -0
- package/dist/workflows/publish.js +29 -29
- package/dist/workflows/publish.js.map +1 -0
- package/dist/workflows/setupProject.js +39 -40
- package/dist/workflows/setupProject.js.map +1 -0
- package/dist/workflows/stage.js +61 -65
- package/dist/workflows/stage.js.map +1 -0
- package/dist/workflows/steps/BranchStep.js +118 -163
- package/dist/workflows/steps/BranchStep.js.map +1 -0
- package/dist/workflows/steps/DownloadStep.js +107 -137
- package/dist/workflows/steps/DownloadStep.js.map +1 -0
- package/dist/workflows/steps/EnqueueStep.js +32 -32
- package/dist/workflows/steps/EnqueueStep.js.map +1 -0
- package/dist/workflows/steps/PollJobsStep.js +208 -292
- package/dist/workflows/steps/PollJobsStep.js.map +1 -0
- package/dist/workflows/steps/PublishStep.js +33 -38
- package/dist/workflows/steps/PublishStep.js.map +1 -0
- package/dist/workflows/steps/SetupStep.js +71 -72
- package/dist/workflows/steps/SetupStep.js.map +1 -0
- package/dist/workflows/steps/TagStep.js +39 -44
- package/dist/workflows/steps/TagStep.js.map +1 -0
- package/dist/workflows/steps/UploadSourcesStep.js +108 -140
- package/dist/workflows/steps/UploadSourcesStep.js.map +1 -0
- package/dist/workflows/steps/UploadTranslationsStep.js +61 -71
- package/dist/workflows/steps/UploadTranslationsStep.js.map +1 -0
- package/dist/workflows/steps/UserEditDiffsStep.js +32 -34
- package/dist/workflows/steps/UserEditDiffsStep.js.map +1 -0
- package/dist/workflows/steps/WorkflowStep.js +6 -2
- package/dist/workflows/steps/WorkflowStep.js.map +1 -0
- package/dist/workflows/upload.js +45 -46
- package/dist/workflows/upload.js.map +1 -0
- package/package.json +14 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleDerivation.js","names":[],"sources":["../../../../../../src/react/jsx/utils/stringParsing/derivation/handleDerivation.ts"],"sourcesContent":["import * as t from '@babel/types';\nimport { NodePath } from '@babel/traverse';\nimport { ParsingConfigOptions } from '../../../../../types/parsing.js';\nimport { parseStringExpression, nodeToStrings } from '../../parseString.js';\nimport { StringNode } from '../../types.js';\nimport { buildImportMap } from '../../buildImportMap.js';\nimport { resolveImportPath } from '../../resolveImportPath.js';\nimport { parse } from '@babel/parser';\nimport fs from 'node:fs';\nimport {\n warnFunctionNotFoundSync,\n warnDeriveFunctionNoResultsSync,\n warnDeriveFunctionNotWrappedSync,\n warnAutoderiveNoResultsSync,\n} from '../../../../../console/index.js';\n\nimport traverseModule from '@babel/traverse';\nimport generateModule from '@babel/generator';\nimport { isDeriveCall } from './isDeriveCall.js';\n// Handle CommonJS/ESM interop\nconst traverse = traverseModule.default || traverseModule;\nconst generate = generateModule.default || generateModule;\n\n// Nested arrays of strings (deprecated - kept for backwards compatibility)\nexport type StringTree = (string | StringTree)[];\n\n/**\n * Cache for resolved import paths to avoid redundant I/O operations.\n * Key: `${currentFile}::${importPath}`\n * Value: resolved absolute path or null\n */\nconst resolveImportPathCache = new Map<string, string | null>();\n\n/**\n * Cache for processed functions to avoid re-parsing the same files.\n * Key: `${filePath}::${functionName}`\n * Value: Node result or null\n */\nconst processFunctionCache = new Map<string, StringNode | null>();\n\n/**\n * Extracts content if an expression is derivable (statically analyzable) or uses derive()\n * Returns a Node representing the parsed expression\n * @param expr - The expression to check\n * @param tPath - NodePath for scope resolution\n * @param file - Current file path\n * @param parsingOptions - Parsing configuration\n * @param errors - Errors to add to\n * @param runtimeInterpolationState - When provided, non-derive dynamic expressions become {n} placeholders instead of errors. Pass { index: 0 } at the entry point for template macros.\n * @param skipDeriveInvocation - If true, skip derive invocation check\n * @returns Node | null - The parsed node, or null if invalid\n *\n * @note runtimeInterpolationState\n * - Only provide at entry for template macros, otherwise omit\n * - t`Hello {nonDerivableValue}` -> t`Hello {0}`\n *\n */\nexport function handleDerivation({\n expr,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n runtimeInterpolationState,\n skipDeriveInvocation,\n}: {\n expr: t.Expression;\n tPath: NodePath;\n file: string;\n parsingOptions: ParsingConfigOptions;\n errors: string[];\n warnings: Set<string>;\n runtimeInterpolationState?: { index: number };\n skipDeriveInvocation?: boolean;\n}): StringNode | null {\n if (!expr) {\n return null;\n }\n\n // Handle expressions\n if (t.isCallExpression(expr)) {\n if (isDeriveCall({ expr, tPath })) {\n const variants = getDeriveVariants({\n call: expr,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n });\n if (variants) {\n return {\n type: 'choice',\n nodes: variants.map((v) => ({ type: 'text', text: v })),\n };\n }\n // derive() had no resolvable results\n const code =\n expr.arguments.length > 0\n ? generate(expr.arguments[0]).code\n : 'no arguments';\n errors.push(\n warnDeriveFunctionNoResultsSync(\n file,\n code,\n `${expr.loc?.start?.line}:${expr.loc?.start?.column}`\n )\n );\n return null;\n }\n // Non-derive call\n if (runtimeInterpolationState) {\n return { type: 'text', text: `{${runtimeInterpolationState.index++}}` };\n }\n const calleeName = t.isIdentifier(expr.callee)\n ? expr.callee.name\n : generate(expr.callee).code;\n errors.push(\n warnDeriveFunctionNotWrappedSync(\n file,\n calleeName,\n `${expr.callee.loc?.start?.line}:${expr.callee.loc?.start?.column}`\n )\n );\n return null;\n }\n\n // Handle direct string literals\n if (t.isStringLiteral(expr)) {\n return { type: 'text', text: expr.value };\n }\n\n // Handle template literals\n if (t.isTemplateLiteral(expr)) {\n const parts: StringNode[] = [];\n for (let index = 0; index < expr.quasis.length; index++) {\n const quasi = expr.quasis[index];\n const text = quasi.value.cooked ?? quasi.value.raw ?? '';\n if (text) {\n parts.push({ type: 'text', text });\n }\n const exprNode = expr.expressions[index];\n if (exprNode && t.isExpression(exprNode)) {\n if (isDeriveCall({ expr: exprNode, tPath })) {\n // Derive — resolve fully (no runtime interpolation forwarding)\n const result = handleDerivation({\n expr: exprNode,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n });\n if (result === null) return null;\n parts.push(result);\n } else {\n // Non-derive — recurse with runtime interpolation forwarded\n const result = handleDerivation({\n expr: exprNode,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n runtimeInterpolationState,\n skipDeriveInvocation,\n });\n if (result === null) return null;\n parts.push(result);\n }\n }\n }\n\n if (parts.length === 0) {\n return { type: 'text', text: '' };\n }\n if (parts.length === 1) {\n return parts[0];\n }\n return { type: 'sequence', nodes: parts };\n }\n\n // Handle binary expressions\n if (t.isBinaryExpression(expr) && expr.operator === '+') {\n if (!t.isExpression(expr.left) || !t.isExpression(expr.right)) {\n return null;\n }\n const leftResult = handleDerivation({\n expr: expr.left,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n runtimeInterpolationState,\n skipDeriveInvocation,\n });\n const rightResult = handleDerivation({\n expr: expr.right,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n runtimeInterpolationState,\n skipDeriveInvocation,\n });\n\n if (leftResult === null || rightResult === null) {\n return null;\n }\n\n return { type: 'sequence', nodes: [leftResult, rightResult] };\n }\n\n // Handle parenthesized expressions\n if (t.isParenthesizedExpression(expr)) {\n return handleDerivation({\n expr: expr.expression,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n runtimeInterpolationState,\n skipDeriveInvocation,\n });\n }\n\n // Handle numeric literals by converting them to strings\n if (t.isNumericLiteral(expr)) {\n return { type: 'text', text: String(expr.value) };\n }\n\n // Handle unary expressions by converting them to strings\n if (t.isUnaryExpression(expr)) {\n let operator = '';\n if (expr.operator === '-') {\n operator = expr.operator;\n }\n if (t.isNumericLiteral(expr.argument)) {\n if (expr.argument.value === 0) {\n return { type: 'text', text: '0' };\n } else {\n return {\n type: 'text',\n text: operator + expr.argument.value.toString(),\n };\n }\n } else {\n // invalid\n return null;\n }\n }\n\n // Handle boolean literals by converting them to strings\n if (t.isBooleanLiteral(expr)) {\n return { type: 'text', text: String(expr.value) };\n }\n\n // Handle null literal\n if (t.isNullLiteral(expr)) {\n return { type: 'text', text: 'null' };\n }\n\n // Non-static expression\n if (skipDeriveInvocation) {\n // Skip pass a `derive()` invocation to do derivation\n const variants = resolveCallStringVariants(\n expr,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings\n );\n if (variants) {\n return {\n type: 'choice',\n nodes: variants.map((v) => ({ type: 'text', text: v })),\n };\n }\n // Autoderive had no resolvable results\n const code = generate(expr).code;\n errors.push(\n warnAutoderiveNoResultsSync(\n file,\n code,\n `${expr.loc?.start?.line}:${expr.loc?.start?.column}`\n )\n );\n return null;\n }\n\n // Not a derivable expression\n if (runtimeInterpolationState) {\n return { type: 'text', text: `{${runtimeInterpolationState.index++}}` };\n }\n return null;\n}\n\n/**\n * Given a CallExpression, if it is derive(<call>) or derive(await <call>),\n * return all possible string outcomes of that argument call as an array of strings.\n *\n * Examples:\n * derive(time()) -> [\"day\", \"night\"]\n * derive(await time()) -> [\"day\", \"night\"]\n *\n * Returns null if it can't be resolved.\n */\nfunction getDeriveVariants<T extends t.CallExpression = t.CallExpression>({\n call,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n}: {\n call: T;\n tPath: NodePath;\n file: string;\n parsingOptions: ParsingConfigOptions;\n errors: string[];\n warnings: Set<string>;\n}): string[] | null {\n // --- Validate Callee --- //\n\n // Must be a derive(...) call or an alias of it\n if (!isDeriveCall({ expr: call, tPath })) {\n const calleeName = t.isIdentifier(call.callee)\n ? call.callee.name\n : generate(call.callee).code;\n errors.push(\n warnDeriveFunctionNotWrappedSync(\n file,\n calleeName,\n `${call.callee.loc?.start?.line}:${call.callee.loc?.start?.column}`\n )\n );\n return null;\n }\n\n // --- Validate Arguments --- //\n\n if (call.arguments.length !== 1) return null;\n\n const arg = call.arguments[0];\n if (!t.isExpression(arg)) return null;\n\n // Handle await expression: derive(await time())\n if (t.isAwaitExpression(arg)) {\n // Resolve the inner call's possible string outcomes\n return resolveCallStringVariants(\n arg.argument,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings\n );\n }\n // Handle call expression: derive(time())\n if (t.isCallExpression(arg)) {\n return resolveCallStringVariants(\n arg,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings\n );\n }\n // Handle other expressions (ternary, string literal, etc.) by recursing into handleDerivation\n const node = handleDerivation({\n expr: arg,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n skipDeriveInvocation: true,\n });\n if (node) {\n return nodeToStrings(node);\n }\n return null;\n}\n\nfunction resolveCallStringVariants(\n expression: t.Expression,\n tPath: NodePath,\n file: string,\n parsingOptions: ParsingConfigOptions,\n errors: string[],\n warnings: Set<string>\n): string[] | null {\n // Handle function identifier calls: derive(time())\n if (t.isCallExpression(expression) && t.isIdentifier(expression.callee)) {\n const functionName = expression.callee.name;\n\n // Use Binding to resolve the function\n const calleeBinding = tPath.scope.getBinding(functionName);\n\n if (calleeBinding) {\n // Check if the binding itself is an import (not just if the name exists in imports)\n const isImportBinding =\n calleeBinding.path.isImportSpecifier() ||\n calleeBinding.path.isImportDefaultSpecifier() ||\n calleeBinding.path.isImportNamespaceSpecifier();\n\n if (isImportBinding) {\n // Function is imported - resolve cross-file\n const importedFunctionsMap = buildImportMap(\n tPath.scope.getProgramParent().path\n );\n\n let originalName: string | undefined;\n if (calleeBinding.path.isImportSpecifier()) {\n originalName = t.isIdentifier(calleeBinding.path.node.imported)\n ? calleeBinding.path.node.imported.name\n : calleeBinding.path.node.imported.value;\n } else if (calleeBinding.path.isImportDefaultSpecifier()) {\n originalName = calleeBinding.path.node.local.name;\n } else if (calleeBinding.path.isImportNamespaceSpecifier()) {\n originalName = calleeBinding.path.node.local.name;\n }\n\n const importPath = importedFunctionsMap.get(functionName);\n if (importPath) {\n const filePath = resolveImportPath(\n file,\n importPath,\n parsingOptions,\n resolveImportPathCache\n );\n\n if (filePath && originalName) {\n const node = resolveFunctionInFile(\n filePath,\n originalName,\n parsingOptions,\n errors,\n warnings\n );\n if (node) {\n return nodeToStrings(node);\n }\n }\n }\n } else {\n // Function is local - use parseStringExpression with resolveFunctionCall\n const node = resolveFunctionCallFromBinding(\n calleeBinding,\n tPath,\n file,\n parsingOptions,\n warnings,\n errors\n );\n if (node) {\n return nodeToStrings(node);\n }\n }\n } else {\n // Function not found in scope\n errors.push(\n warnFunctionNotFoundSync(\n file,\n functionName,\n `${expression.callee.loc?.start?.line}:${expression.callee.loc?.start?.column}`\n )\n );\n return null;\n }\n }\n\n // If we get here: analyze this call as derivable (statically analyzable)\n const node = parseStringExpression(\n expression,\n tPath,\n file,\n parsingOptions,\n warnings,\n errors\n );\n if (node) {\n return nodeToStrings(node);\n }\n return null;\n}\n\n/**\n * Resolves a function from a binding (local function) using parseStringExpression logic\n */\nfunction resolveFunctionCallFromBinding(\n calleeBinding: ReturnType<NodePath['scope']['getBinding']>,\n tPath: NodePath,\n file: string,\n parsingOptions: ParsingConfigOptions,\n warnings: Set<string>,\n errors: string[]\n): StringNode | null {\n if (!calleeBinding) {\n return null;\n }\n\n const bindingPath = calleeBinding.path;\n const branches: StringNode[] = [];\n\n // Handle function declarations: function time() { return \"day\"; }\n if (bindingPath.isFunctionDeclaration()) {\n bindingPath.traverse({\n ReturnStatement(returnPath) {\n // Only process return statements that are direct children of this function\n const parentFunction = returnPath.getFunctionParent();\n if (parentFunction?.node !== bindingPath.node) {\n return;\n }\n\n const returnArg = returnPath.node.argument;\n if (!returnArg || !t.isExpression(returnArg)) {\n return;\n }\n const returnResult = parseStringExpression(\n returnArg,\n returnPath,\n file,\n parsingOptions,\n warnings,\n errors\n );\n if (returnResult !== null) {\n branches.push(returnResult);\n }\n },\n });\n }\n // Handle arrow functions: const time = () => \"day\"\n else if (bindingPath.isVariableDeclarator()) {\n const init = bindingPath.get('init');\n if (!init.isArrowFunctionExpression()) {\n return null;\n }\n\n const body = init.get('body');\n\n // Handle expression body: () => \"day\"\n if (body.isExpression()) {\n const bodyResult = parseStringExpression(\n body.node,\n body,\n file,\n parsingOptions,\n warnings,\n errors\n );\n if (bodyResult !== null) {\n branches.push(bodyResult);\n }\n }\n // Handle block body: () => { return \"day\"; }\n else if (body.isBlockStatement()) {\n const arrowFunction = init.node;\n body.traverse({\n ReturnStatement(returnPath) {\n // Only process return statements that are direct children of this function\n const parentFunction = returnPath.getFunctionParent();\n if (parentFunction?.node !== arrowFunction) {\n return;\n }\n\n const returnArg = returnPath.node.argument;\n if (!returnArg || !t.isExpression(returnArg)) {\n return;\n }\n const returnResult = parseStringExpression(\n returnArg,\n returnPath,\n file,\n parsingOptions,\n warnings,\n errors\n );\n if (returnResult !== null) {\n branches.push(returnResult);\n }\n },\n });\n }\n }\n\n if (branches.length === 0) {\n return null;\n }\n\n if (branches.length === 1) {\n return branches[0];\n }\n\n return { type: 'choice', nodes: branches };\n}\n\n/**\n * Resolves a function definition in an external file\n */\nfunction resolveFunctionInFile(\n filePath: string,\n functionName: string,\n parsingOptions: ParsingConfigOptions,\n errors: string[],\n warnings: Set<string>\n): StringNode | null {\n // Check cache first\n const cacheKey = `${filePath}::${functionName}`;\n if (processFunctionCache.has(cacheKey)) {\n return processFunctionCache.get(cacheKey) ?? null;\n }\n\n let result: StringNode | null = null;\n\n try {\n const code = fs.readFileSync(filePath, 'utf8');\n const ast = parse(code, {\n sourceType: 'module',\n plugins: ['jsx', 'typescript'],\n });\n\n traverse(ast, {\n // Handle re-exports: export * from './utils'\n ExportAllDeclaration(path) {\n // Only follow re-exports if we haven't found the function yet\n if (result !== null) return;\n\n if (t.isStringLiteral(path.node.source)) {\n const reexportPath = path.node.source.value;\n const resolvedPath = resolveImportPath(\n filePath,\n reexportPath,\n parsingOptions,\n resolveImportPathCache\n );\n\n if (resolvedPath) {\n // Recursively resolve in the re-exported file\n const reexportResult = resolveFunctionInFile(\n resolvedPath,\n functionName,\n parsingOptions,\n errors,\n warnings\n );\n if (reexportResult) {\n result = reexportResult;\n }\n }\n }\n },\n // Handle named re-exports: export { fn1 } from './utils'\n ExportNamedDeclaration(path) {\n // Only follow re-exports if we haven't found the function yet\n if (result !== null) return;\n\n // Check if this is a re-export with a source\n if (path.node.source && t.isStringLiteral(path.node.source)) {\n // Check if any of the exported specifiers match our function name\n const hasMatchingExport = path.node.specifiers.some((spec) => {\n if (t.isExportSpecifier(spec)) {\n const exportedName = t.isIdentifier(spec.exported)\n ? spec.exported.name\n : spec.exported.value;\n return exportedName === functionName;\n }\n return false;\n });\n\n if (hasMatchingExport) {\n const reexportPath = path.node.source.value;\n const resolvedPath = resolveImportPath(\n filePath,\n reexportPath,\n parsingOptions,\n resolveImportPathCache\n );\n\n if (resolvedPath) {\n // Find the original name in case it was renamed\n const specifier = path.node.specifiers.find((spec) => {\n if (t.isExportSpecifier(spec)) {\n const exportedName = t.isIdentifier(spec.exported)\n ? spec.exported.name\n : spec.exported.value;\n return exportedName === functionName;\n }\n return false;\n });\n\n let originalName = functionName;\n if (\n specifier &&\n t.isExportSpecifier(specifier) &&\n t.isIdentifier(specifier.local)\n ) {\n originalName = specifier.local.name;\n }\n\n // Recursively resolve in the re-exported file\n const reexportResult = resolveFunctionInFile(\n resolvedPath,\n originalName,\n parsingOptions,\n errors,\n warnings\n );\n if (reexportResult) {\n result = reexportResult;\n }\n }\n }\n }\n },\n // Handle function declarations: function woah() { ... }\n FunctionDeclaration(path) {\n if (path.node.id?.name === functionName && result === null) {\n const branches: StringNode[] = [];\n path.traverse({\n Function(innerPath) {\n // Skip nested functions\n innerPath.skip();\n },\n ReturnStatement(returnPath: NodePath) {\n if (!t.isReturnStatement(returnPath.node)) {\n return;\n }\n const returnArg = returnPath.node.argument;\n if (!returnArg || !t.isExpression(returnArg)) {\n return;\n }\n const returnResult = parseStringExpression(\n returnArg,\n returnPath,\n filePath,\n parsingOptions,\n warnings,\n errors\n );\n if (returnResult !== null) {\n branches.push(returnResult);\n }\n },\n });\n\n if (branches.length === 1) {\n result = branches[0];\n } else if (branches.length > 1) {\n result = { type: 'choice', nodes: branches };\n }\n }\n },\n // Handle variable declarations: const woah = () => { ... }\n VariableDeclarator(path) {\n if (\n t.isIdentifier(path.node.id) &&\n path.node.id.name === functionName &&\n path.node.init &&\n (t.isArrowFunctionExpression(path.node.init) ||\n t.isFunctionExpression(path.node.init)) &&\n result === null\n ) {\n const init = path.get('init');\n if (\n !init.isArrowFunctionExpression() &&\n !init.isFunctionExpression()\n ) {\n return;\n }\n\n const bodyPath = init.get('body');\n const branches: StringNode[] = [];\n\n // Handle expression body: () => \"day\"\n if (!Array.isArray(bodyPath) && t.isExpression(bodyPath.node)) {\n const bodyResult = parseStringExpression(\n bodyPath.node,\n bodyPath,\n filePath,\n parsingOptions,\n warnings,\n errors\n );\n if (bodyResult !== null) {\n branches.push(bodyResult);\n }\n }\n // Handle block body: () => { return \"day\"; }\n else if (\n !Array.isArray(bodyPath) &&\n t.isBlockStatement(bodyPath.node)\n ) {\n const arrowFunction = init.node;\n bodyPath.traverse({\n Function(innerPath: NodePath) {\n // Skip nested functions\n innerPath.skip();\n },\n ReturnStatement(returnPath: NodePath) {\n // Only process return statements that are direct children of this function\n const parentFunction = returnPath.getFunctionParent();\n if (parentFunction?.node !== arrowFunction) {\n return;\n }\n\n if (!t.isReturnStatement(returnPath.node)) {\n return;\n }\n const returnArg = returnPath.node.argument;\n if (!returnArg || !t.isExpression(returnArg)) {\n return;\n }\n const returnResult = parseStringExpression(\n returnArg,\n returnPath,\n filePath,\n parsingOptions,\n warnings,\n errors\n );\n if (returnResult !== null) {\n branches.push(returnResult);\n }\n },\n });\n }\n\n if (branches.length === 1) {\n result = branches[0];\n } else if (branches.length > 1) {\n result = { type: 'choice', nodes: branches };\n }\n }\n },\n });\n } catch (error) {\n // File read or parse error - return null\n errors.push(\n warnDeriveFunctionNoResultsSync(\n filePath,\n functionName,\n 'file read/parse error: ' + error\n )\n );\n result = null;\n }\n\n // Cache the result\n processFunctionCache.set(cacheKey, result);\n return result;\n}\n"],"mappings":"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"}
|
|
@@ -1,70 +1,60 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { warnNonStringSync } from
|
|
3
|
-
import { nodeToStrings } from
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
// Handle CommonJS/ESM interop
|
|
1
|
+
import { isValidIcu } from "../../../evaluateJsx.js";
|
|
2
|
+
import { warnInvalidIcuSync, warnNonStringSync } from "../../../../../console/index.js";
|
|
3
|
+
import { nodeToStrings } from "../../parseString.js";
|
|
4
|
+
import { handleDerivation } from "./handleDerivation.js";
|
|
5
|
+
import { randomUUID } from "node:crypto";
|
|
6
|
+
import generateModule from "@babel/generator";
|
|
7
|
+
import { indexVars } from "generaltranslation/internal";
|
|
8
|
+
//#region src/react/jsx/utils/stringParsing/derivation/index.ts
|
|
10
9
|
const generate = generateModule.default || generateModule;
|
|
11
10
|
/**
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
dataFormat: (metadata.format || 'ICU'),
|
|
58
|
-
source: string,
|
|
59
|
-
metadata: {
|
|
60
|
-
...metadata,
|
|
61
|
-
...(context != null && { context }),
|
|
62
|
-
// Add the index if an id and index is provided (for handling when registering an array of strings)
|
|
63
|
-
...(metadata.id &&
|
|
64
|
-
index != null && { id: `${metadata.id}.${index}` }),
|
|
65
|
-
staticId: temporaryDeriveId,
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
}
|
|
11
|
+
* Registers an expression with support for derive
|
|
12
|
+
* Entry point for string derivation
|
|
13
|
+
*
|
|
14
|
+
* @param tPath - The path to the tag identifier
|
|
15
|
+
* @param expr - The expression to parse
|
|
16
|
+
* @param metadata - Extracted metadata (empty for tagged templates)
|
|
17
|
+
* @param config - Parsing configuration
|
|
18
|
+
* @param output - Parsing output collectors
|
|
19
|
+
* @param enableRuntimeInterpolation - For template macros, enables runtime interpolation for non-derive calls
|
|
20
|
+
*/
|
|
21
|
+
function deriveExpression({ tPath, expr, metadata, config, output, index, enableRuntimeInterpolation = false, contextVariants }) {
|
|
22
|
+
const stringNode = handleDerivation({
|
|
23
|
+
expr,
|
|
24
|
+
tPath,
|
|
25
|
+
file: config.file,
|
|
26
|
+
parsingOptions: config.parsingOptions,
|
|
27
|
+
errors: output.errors,
|
|
28
|
+
warnings: output.warnings,
|
|
29
|
+
runtimeInterpolationState: enableRuntimeInterpolation ? { index: 0 } : void 0,
|
|
30
|
+
skipDeriveInvocation: config.autoderiveMethod === "ENABLED"
|
|
31
|
+
});
|
|
32
|
+
if (!stringNode) {
|
|
33
|
+
output.errors.push(warnNonStringSync(config.file, generate(expr).code, `${expr.loc?.start?.line}:${expr.loc?.start?.column}`));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const strings = nodeToStrings(stringNode).map(indexVars);
|
|
37
|
+
if (!config.ignoreInvalidIcu) for (const string of strings) {
|
|
38
|
+
const { isValid, error } = isValidIcu(string);
|
|
39
|
+
if (!isValid) {
|
|
40
|
+
output.warnings.add(warnInvalidIcuSync(config.file, string, error ?? "Unknown error", `${expr.loc?.start?.line}:${expr.loc?.start?.column}`));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const temporaryDeriveId = `derive-temp-id-${randomUUID()}`;
|
|
45
|
+
const contexts = contextVariants ?? [metadata.context];
|
|
46
|
+
for (const string of strings) for (const context of contexts) output.updates.push({
|
|
47
|
+
dataFormat: metadata.format || "ICU",
|
|
48
|
+
source: string,
|
|
49
|
+
metadata: {
|
|
50
|
+
...metadata,
|
|
51
|
+
...context != null && { context },
|
|
52
|
+
...metadata.id && index != null && { id: `${metadata.id}.${index}` },
|
|
53
|
+
staticId: temporaryDeriveId
|
|
54
|
+
}
|
|
55
|
+
});
|
|
70
56
|
}
|
|
57
|
+
//#endregion
|
|
58
|
+
export { deriveExpression };
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../../src/react/jsx/utils/stringParsing/derivation/index.ts"],"sourcesContent":["import { NodePath } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport type { DataFormat } from '@generaltranslation/format/types';\nimport { InlineMetadata } from '../processTranslationCall/extractStringEntryMetadata.js';\nimport { ParsingConfig } from '../types.js';\nimport { ParsingOutput } from '../types.js';\nimport { handleDerivation } from './handleDerivation.js';\nimport { warnNonStringSync } from '../../../../../console/index.js';\nimport { nodeToStrings } from '../../parseString.js';\nimport generateModule from '@babel/generator';\nimport { indexVars } from 'generaltranslation/internal';\nimport { randomUUID } from 'node:crypto';\nimport { isValidIcu } from '../../../evaluateJsx.js';\nimport { warnInvalidIcuSync } from '../../../../../console/index.js';\n\n// Handle CommonJS/ESM interop\nconst generate = generateModule.default || generateModule;\n\n/**\n * Registers an expression with support for derive\n * Entry point for string derivation\n *\n * @param tPath - The path to the tag identifier\n * @param expr - The expression to parse\n * @param metadata - Extracted metadata (empty for tagged templates)\n * @param config - Parsing configuration\n * @param output - Parsing output collectors\n * @param enableRuntimeInterpolation - For template macros, enables runtime interpolation for non-derive calls\n */\nexport function deriveExpression({\n tPath,\n expr,\n metadata,\n config,\n output,\n index,\n enableRuntimeInterpolation = false,\n contextVariants,\n}: {\n tPath: NodePath;\n expr: t.Expression;\n metadata: InlineMetadata;\n config: ParsingConfig;\n output: ParsingOutput;\n index?: number;\n enableRuntimeInterpolation?: boolean;\n contextVariants?: string[];\n}) {\n // parse derivable expression\n const stringNode = handleDerivation({\n expr,\n tPath,\n file: config.file,\n parsingOptions: config.parsingOptions,\n errors: output.errors,\n warnings: output.warnings,\n runtimeInterpolationState: enableRuntimeInterpolation\n ? { index: 0 }\n : undefined,\n skipDeriveInvocation: config.autoderiveMethod === 'ENABLED',\n });\n\n // Nothing returned, push error\n if (!stringNode) {\n output.errors.push(\n warnNonStringSync(\n config.file,\n generate(expr).code,\n `${expr.loc?.start?.line}:${expr.loc?.start?.column}`\n )\n );\n return;\n }\n\n // validate ICU\n const strings = nodeToStrings(stringNode).map(indexVars);\n if (!config.ignoreInvalidIcu) {\n for (const string of strings) {\n const { isValid, error } = isValidIcu(string);\n if (!isValid) {\n output.warnings.add(\n warnInvalidIcuSync(\n config.file,\n string,\n error ?? 'Unknown error',\n `${expr.loc?.start?.line}:${expr.loc?.start?.column}`\n )\n );\n return;\n }\n }\n }\n\n const temporaryDeriveId = `derive-temp-id-${randomUUID()}`;\n const contexts = contextVariants ?? [metadata.context];\n for (const string of strings) {\n for (const context of contexts) {\n output.updates.push({\n dataFormat: (metadata.format || 'ICU') as DataFormat,\n source: string,\n metadata: {\n ...metadata,\n ...(context != null && { context }),\n // Add the index if an id and index is provided (for handling when registering an array of strings)\n ...(metadata.id &&\n index != null && { id: `${metadata.id}.${index}` }),\n staticId: temporaryDeriveId,\n },\n });\n }\n }\n}\n"],"mappings":";;;;;;;;AAgBA,MAAM,WAAW,eAAe,WAAW;;;;;;;;;;;;AAa3C,SAAgB,iBAAiB,EAC/B,OACA,MACA,UACA,QACA,QACA,OACA,6BAA6B,OAC7B,mBAUC;CAED,MAAM,aAAa,iBAAiB;EAClC;EACA;EACA,MAAM,OAAO;EACb,gBAAgB,OAAO;EACvB,QAAQ,OAAO;EACf,UAAU,OAAO;EACjB,2BAA2B,6BACvB,EAAE,OAAO,GAAG,GACZ,KAAA;EACJ,sBAAsB,OAAO,qBAAqB;EACnD,CAAC;AAGF,KAAI,CAAC,YAAY;AACf,SAAO,OAAO,KACZ,kBACE,OAAO,MACP,SAAS,KAAK,CAAC,MACf,GAAG,KAAK,KAAK,OAAO,KAAK,GAAG,KAAK,KAAK,OAAO,SAC9C,CACF;AACD;;CAIF,MAAM,UAAU,cAAc,WAAW,CAAC,IAAI,UAAU;AACxD,KAAI,CAAC,OAAO,iBACV,MAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,EAAE,SAAS,UAAU,WAAW,OAAO;AAC7C,MAAI,CAAC,SAAS;AACZ,UAAO,SAAS,IACd,mBACE,OAAO,MACP,QACA,SAAS,iBACT,GAAG,KAAK,KAAK,OAAO,KAAK,GAAG,KAAK,KAAK,OAAO,SAC9C,CACF;AACD;;;CAKN,MAAM,oBAAoB,kBAAkB,YAAY;CACxD,MAAM,WAAW,mBAAmB,CAAC,SAAS,QAAQ;AACtD,MAAK,MAAM,UAAU,QACnB,MAAK,MAAM,WAAW,SACpB,QAAO,QAAQ,KAAK;EAClB,YAAa,SAAS,UAAU;EAChC,QAAQ;EACR,UAAU;GACR,GAAG;GACH,GAAI,WAAW,QAAQ,EAAE,SAAS;GAElC,GAAI,SAAS,MACX,SAAS,QAAQ,EAAE,IAAI,GAAG,SAAS,GAAG,GAAG,SAAS;GACpD,UAAU;GACX;EACF,CAAC"}
|
|
@@ -1,38 +1,28 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
import { GT_DERIVE_STRING_FUNCTIONS } from "../../constants.js";
|
|
2
|
+
import { GT_LIBRARIES } from "../../../../../types/libraries.js";
|
|
3
|
+
import * as t from "@babel/types";
|
|
4
|
+
//#region src/react/jsx/utils/stringParsing/derivation/isDeriveCall.ts
|
|
4
5
|
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return false;
|
|
24
|
-
const source = binding.path.parentPath?.isImportDeclaration()
|
|
25
|
-
? binding.path.parentPath?.node.source.value
|
|
26
|
-
: undefined;
|
|
27
|
-
if (!GT_LIBRARIES.includes(source))
|
|
28
|
-
return false;
|
|
29
|
-
// Fail if the original name is not 'derive' (or the deprecated 'declareStatic')
|
|
30
|
-
const imported = binding.path.node.imported;
|
|
31
|
-
const originalName = t.isIdentifier(imported)
|
|
32
|
-
? imported.name
|
|
33
|
-
: imported.value;
|
|
34
|
-
if (!GT_DERIVE_STRING_FUNCTIONS.includes(originalName)) {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
return true;
|
|
6
|
+
* Given an expression, determine if it is a derive call
|
|
7
|
+
* @param expr - The expression to check
|
|
8
|
+
* @returns True if the expression is a derive call, false otherwise
|
|
9
|
+
*/
|
|
10
|
+
function isDeriveCall({ expr, tPath }) {
|
|
11
|
+
if (!t.isCallExpression(expr)) return false;
|
|
12
|
+
const callee = expr.callee;
|
|
13
|
+
if (!t.isIdentifier(callee)) return false;
|
|
14
|
+
const calleeName = callee.name;
|
|
15
|
+
const binding = tPath.scope.getBinding(calleeName);
|
|
16
|
+
if (!binding) return false;
|
|
17
|
+
if (!binding.path.isImportSpecifier()) return false;
|
|
18
|
+
const source = binding.path.parentPath?.isImportDeclaration() ? binding.path.parentPath?.node.source.value : void 0;
|
|
19
|
+
if (!GT_LIBRARIES.includes(source)) return false;
|
|
20
|
+
const imported = binding.path.node.imported;
|
|
21
|
+
const originalName = t.isIdentifier(imported) ? imported.name : imported.value;
|
|
22
|
+
if (!GT_DERIVE_STRING_FUNCTIONS.includes(originalName)) return false;
|
|
23
|
+
return true;
|
|
38
24
|
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { isDeriveCall };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=isDeriveCall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isDeriveCall.js","names":[],"sources":["../../../../../../src/react/jsx/utils/stringParsing/derivation/isDeriveCall.ts"],"sourcesContent":["import * as t from '@babel/types';\nimport { NodePath } from '@babel/traverse';\nimport { GT_DERIVE_STRING_FUNCTIONS } from '../../constants.js';\nimport { GT_LIBRARIES, GTLibrary } from '../../../../../types/libraries.js';\n\n/**\n * Given an expression, determine if it is a derive call\n * @param expr - The expression to check\n * @returns True if the expression is a derive call, false otherwise\n */\nexport function isDeriveCall({\n expr,\n tPath,\n}: {\n expr: t.Expression;\n tPath: NodePath;\n}): boolean {\n // Check if the expression is a call expression\n if (!t.isCallExpression(expr)) return false;\n const callee = expr.callee;\n if (!t.isIdentifier(callee)) return false;\n\n // Fail if no binding\n const calleeName = callee.name;\n const binding = tPath.scope.getBinding(calleeName);\n if (!binding) return false;\n\n // Check if the callee is imported from GT\n if (!binding.path.isImportSpecifier()) return false;\n const source = binding.path.parentPath?.isImportDeclaration()\n ? binding.path.parentPath?.node.source.value\n : undefined;\n if (!GT_LIBRARIES.includes(source as GTLibrary)) return false;\n\n // Fail if the original name is not 'derive' (or the deprecated 'declareStatic')\n const imported = binding.path.node.imported;\n const originalName = t.isIdentifier(imported)\n ? imported.name\n : imported.value;\n if (\n !GT_DERIVE_STRING_FUNCTIONS.includes(\n originalName as (typeof GT_DERIVE_STRING_FUNCTIONS)[number]\n )\n ) {\n return false;\n }\n\n return true;\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,aAAa,EAC3B,MACA,SAIU;AAEV,KAAI,CAAC,EAAE,iBAAiB,KAAK,CAAE,QAAO;CACtC,MAAM,SAAS,KAAK;AACpB,KAAI,CAAC,EAAE,aAAa,OAAO,CAAE,QAAO;CAGpC,MAAM,aAAa,OAAO;CAC1B,MAAM,UAAU,MAAM,MAAM,WAAW,WAAW;AAClD,KAAI,CAAC,QAAS,QAAO;AAGrB,KAAI,CAAC,QAAQ,KAAK,mBAAmB,CAAE,QAAO;CAC9C,MAAM,SAAS,QAAQ,KAAK,YAAY,qBAAqB,GACzD,QAAQ,KAAK,YAAY,KAAK,OAAO,QACrC,KAAA;AACJ,KAAI,CAAC,aAAa,SAAS,OAAoB,CAAE,QAAO;CAGxD,MAAM,WAAW,QAAQ,KAAK,KAAK;CACnC,MAAM,eAAe,EAAE,aAAa,SAAS,GACzC,SAAS,OACT,SAAS;AACb,KACE,CAAC,2BAA2B,SAC1B,aACD,CAED,QAAO;AAGT,QAAO"}
|
|
@@ -1,26 +1,31 @@
|
|
|
1
|
-
import { deriveExpression } from
|
|
1
|
+
import { deriveExpression } from "../derivation/index.js";
|
|
2
|
+
//#region src/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.ts
|
|
2
3
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
4
|
+
* Extracts a translatable message from a TaggedTemplateExpression.
|
|
5
|
+
*
|
|
6
|
+
* Follows the same extraction pattern as `extractInterpolatableValues` in
|
|
7
|
+
* `packages/react/src/i18n-context/functions/translation/t.ts`:
|
|
8
|
+
* - Iterates through quasis and expressions interleaved
|
|
9
|
+
* - Creates numeric placeholders ({0}, {1}, etc.) for each expression
|
|
10
|
+
* - Joins all parts into the final source string
|
|
11
|
+
*
|
|
12
|
+
* @param tPath - The path to the tag identifier
|
|
13
|
+
* @param quasi - The TemplateLiteral from the TaggedTemplateExpression
|
|
14
|
+
* @param metadata - Extracted metadata (empty for tagged templates)
|
|
15
|
+
* @param config - Parsing configuration
|
|
16
|
+
* @param output - Parsing output collectors
|
|
17
|
+
*/
|
|
18
|
+
function handleTaggedTemplateTranslationCall({ tPath, quasi, metadata, config, output }) {
|
|
19
|
+
deriveExpression({
|
|
20
|
+
tPath,
|
|
21
|
+
expr: quasi,
|
|
22
|
+
metadata,
|
|
23
|
+
config,
|
|
24
|
+
output,
|
|
25
|
+
enableRuntimeInterpolation: true
|
|
26
|
+
});
|
|
26
27
|
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { handleTaggedTemplateTranslationCall };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=handleTaggedTemplateTranslationCall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleTaggedTemplateTranslationCall.js","names":[],"sources":["../../../../../../src/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.ts"],"sourcesContent":["import * as t from '@babel/types';\nimport { ParsingConfig, ParsingOutput } from '../types.js';\nimport { InlineMetadata } from '../processTranslationCall/extractStringEntryMetadata.js';\nimport { NodePath } from '@babel/traverse';\nimport { deriveExpression } from '../derivation/index.js';\n\n/**\n * Extracts a translatable message from a TaggedTemplateExpression.\n *\n * Follows the same extraction pattern as `extractInterpolatableValues` in\n * `packages/react/src/i18n-context/functions/translation/t.ts`:\n * - Iterates through quasis and expressions interleaved\n * - Creates numeric placeholders ({0}, {1}, etc.) for each expression\n * - Joins all parts into the final source string\n *\n * @param tPath - The path to the tag identifier\n * @param quasi - The TemplateLiteral from the TaggedTemplateExpression\n * @param metadata - Extracted metadata (empty for tagged templates)\n * @param config - Parsing configuration\n * @param output - Parsing output collectors\n */\nexport function handleTaggedTemplateTranslationCall({\n tPath,\n quasi,\n metadata,\n config,\n output,\n}: {\n tPath: NodePath;\n quasi: t.TemplateLiteral;\n metadata: InlineMetadata;\n config: ParsingConfig;\n output: ParsingOutput;\n}): void {\n deriveExpression({\n tPath,\n expr: quasi,\n metadata,\n config,\n output,\n enableRuntimeInterpolation: true,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAqBA,SAAgB,oCAAoC,EAClD,OACA,OACA,UACA,QACA,UAOO;AACP,kBAAiB;EACf;EACA,MAAM;EACN;EACA;EACA;EACA,4BAA4B;EAC7B,CAAC"}
|
|
@@ -1,34 +1,36 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
1
|
+
import "../../../../../utils/constants.js";
|
|
2
|
+
import { extractStringEntryMetadata } from "../processTranslationCall/extractStringEntryMetadata.js";
|
|
3
|
+
import { handleTaggedTemplateTranslationCall } from "./handleTaggedTemplateTranslationCall.js";
|
|
4
|
+
import * as t from "@babel/types";
|
|
5
|
+
//#region src/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.ts
|
|
5
6
|
/**
|
|
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
|
-
config,
|
|
32
|
-
output,
|
|
33
|
-
});
|
|
7
|
+
* Processes a tagged template expression (e.g., t`hello ${name}`).
|
|
8
|
+
* Extracts the translatable string with numeric placeholders for expressions.
|
|
9
|
+
*
|
|
10
|
+
* Tagged templates don't support an options argument, but still carry
|
|
11
|
+
* source metadata for dashboard grouping and source context.
|
|
12
|
+
*
|
|
13
|
+
* @param tPath - The path to the tag identifier
|
|
14
|
+
* @param config - Parsing configuration
|
|
15
|
+
* @param output - Parsing output collectors
|
|
16
|
+
*/
|
|
17
|
+
function processTaggedTemplateCall(tPath, config, output) {
|
|
18
|
+
if (!t.isTaggedTemplateExpression(tPath.parent) || tPath.parent.tag !== tPath.node) return;
|
|
19
|
+
const metadata = extractStringEntryMetadata({
|
|
20
|
+
output,
|
|
21
|
+
config,
|
|
22
|
+
nodeLoc: tPath.parent.loc,
|
|
23
|
+
surroundingLineCount: 5
|
|
24
|
+
});
|
|
25
|
+
handleTaggedTemplateTranslationCall({
|
|
26
|
+
tPath,
|
|
27
|
+
quasi: tPath.parent.quasi,
|
|
28
|
+
metadata,
|
|
29
|
+
config,
|
|
30
|
+
output
|
|
31
|
+
});
|
|
34
32
|
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { processTaggedTemplateCall };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../../src/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.ts"],"sourcesContent":["import { NodePath } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { ParsingConfig, ParsingOutput } from '../types.js';\nimport { handleTaggedTemplateTranslationCall } from './handleTaggedTemplateTranslationCall.js';\nimport { extractStringEntryMetadata } from '../processTranslationCall/extractStringEntryMetadata.js';\nimport { SURROUNDING_LINE_COUNT } from '../../../../../utils/constants.js';\n\n/**\n * Processes a tagged template expression (e.g., t`hello ${name}`).\n * Extracts the translatable string with numeric placeholders for expressions.\n *\n * Tagged templates don't support an options argument, but still carry\n * source metadata for dashboard grouping and source context.\n *\n * @param tPath - The path to the tag identifier\n * @param config - Parsing configuration\n * @param output - Parsing output collectors\n */\nexport function processTaggedTemplateCall(\n tPath: NodePath,\n config: ParsingConfig,\n output: ParsingOutput\n): void {\n if (\n !t.isTaggedTemplateExpression(tPath.parent) ||\n tPath.parent.tag !== tPath.node\n ) {\n return;\n }\n\n const metadata = extractStringEntryMetadata({\n output,\n config,\n nodeLoc: tPath.parent.loc,\n surroundingLineCount: SURROUNDING_LINE_COUNT,\n });\n\n handleTaggedTemplateTranslationCall({\n tPath,\n quasi: tPath.parent.quasi,\n metadata,\n config,\n output,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAkBA,SAAgB,0BACd,OACA,QACA,QACM;AACN,KACE,CAAC,EAAE,2BAA2B,MAAM,OAAO,IAC3C,MAAM,OAAO,QAAQ,MAAM,KAE3B;CAGF,MAAM,WAAW,2BAA2B;EAC1C;EACA;EACA,SAAS,MAAM,OAAO;EACtB,sBAAA;EACD,CAAC;AAEF,qCAAoC;EAClC;EACA,OAAO,MAAM,OAAO;EACpB;EACA;EACA;EACD,CAAC"}
|