gt 0.10.0 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1275 -0
- package/LICENSE.md +105 -0
- package/README.md +26 -198
- package/dist/api/collectUserEditDiffs.d.ts +9 -0
- package/dist/api/collectUserEditDiffs.js +159 -0
- package/dist/api/downloadFileBatch.d.ts +23 -0
- package/dist/api/downloadFileBatch.js +190 -0
- package/dist/api/saveLocalEdits.d.ts +6 -0
- package/dist/api/saveLocalEdits.js +38 -0
- package/dist/bin/bin-entry.d.ts +1 -0
- package/dist/bin/bin-entry.js +9 -0
- package/dist/bin/bin-main.d.ts +2 -0
- package/dist/bin/bin-main.js +67 -0
- package/dist/cli/base.d.ts +59 -0
- package/dist/cli/base.js +529 -0
- package/dist/cli/commands/download.d.ts +8 -0
- package/dist/cli/commands/download.js +51 -0
- package/dist/cli/commands/enqueue.d.ts +9 -0
- package/dist/cli/commands/enqueue.js +27 -0
- package/dist/cli/commands/setupProject.d.ts +7 -0
- package/dist/cli/commands/setupProject.js +37 -0
- package/dist/cli/commands/stage.d.ts +9 -0
- package/dist/cli/commands/stage.js +59 -0
- package/dist/cli/commands/translate.d.ts +7 -0
- package/dist/cli/commands/translate.js +70 -0
- package/dist/cli/commands/upload.d.ts +13 -0
- package/dist/cli/commands/upload.js +142 -0
- package/dist/cli/commands/utils/validation.d.ts +13 -0
- package/dist/cli/commands/utils/validation.js +38 -0
- package/dist/cli/flags.d.ts +15 -0
- package/dist/cli/flags.js +70 -0
- package/dist/cli/inline.d.ts +17 -0
- package/dist/cli/inline.js +135 -0
- package/dist/cli/next.d.ts +10 -0
- package/dist/cli/next.js +12 -0
- package/dist/cli/node.d.ts +10 -0
- package/dist/cli/node.js +9 -0
- package/dist/cli/react.d.ts +12 -0
- package/dist/cli/react.js +72 -0
- package/dist/config/generateSettings.d.ts +9 -0
- package/dist/config/generateSettings.js +214 -0
- package/dist/config/optionPresets.d.ts +3 -0
- package/dist/config/optionPresets.js +65 -0
- package/dist/config/resolveConfig.d.ts +4 -0
- package/dist/config/resolveConfig.js +33 -0
- package/dist/config/utils.d.ts +2 -0
- package/dist/config/utils.js +4 -0
- package/dist/config/validateSettings.d.ts +3 -0
- package/dist/config/validateSettings.js +32 -0
- package/dist/console/colors.d.ts +6 -0
- package/dist/console/colors.js +19 -0
- package/dist/console/displayTranslateSummary.d.ts +1 -0
- package/dist/console/displayTranslateSummary.js +42 -0
- package/dist/console/formatting.d.ts +1 -0
- package/dist/console/formatting.js +7 -0
- package/dist/console/index.d.ts +34 -0
- package/dist/console/index.js +46 -0
- package/dist/console/logger.d.ts +35 -0
- package/dist/console/logger.js +250 -0
- package/dist/console/logging.d.ts +52 -0
- package/dist/console/logging.js +175 -0
- package/dist/formats/files/aggregateFiles.d.ts +4 -0
- package/dist/formats/files/aggregateFiles.js +156 -0
- package/dist/formats/files/collectFiles.d.ts +6 -0
- package/dist/formats/files/collectFiles.js +49 -0
- package/dist/formats/files/convertToFileTranslationData.d.ts +15 -0
- package/dist/formats/files/convertToFileTranslationData.js +21 -0
- package/dist/formats/files/fileMapping.d.ts +11 -0
- package/dist/formats/files/fileMapping.js +115 -0
- package/dist/formats/files/preprocess/mdx.d.ts +6 -0
- package/dist/formats/files/preprocess/mdx.js +14 -0
- package/dist/formats/files/preprocess/mintlify.d.ts +5 -0
- package/dist/formats/files/preprocess/mintlify.js +15 -0
- package/dist/formats/files/preprocessContent.d.ts +8 -0
- package/dist/formats/files/preprocessContent.js +23 -0
- package/dist/formats/files/save.d.ts +5 -0
- package/dist/formats/files/save.js +17 -0
- package/dist/formats/files/supportedFiles.d.ts +11 -0
- package/dist/formats/files/supportedFiles.js +20 -0
- package/dist/formats/json/extractJson.d.ts +15 -0
- package/dist/formats/json/extractJson.js +101 -0
- package/dist/formats/json/flattenJson.d.ts +14 -0
- package/dist/formats/json/flattenJson.js +64 -0
- package/dist/formats/json/mergeJson.d.ts +13 -0
- package/dist/formats/json/mergeJson.js +367 -0
- package/dist/formats/json/parseJson.d.ts +2 -0
- package/dist/formats/json/parseJson.js +109 -0
- package/dist/formats/json/utils.d.ts +47 -0
- package/dist/formats/json/utils.js +150 -0
- package/dist/formats/utils.d.ts +2 -0
- package/dist/formats/utils.js +24 -0
- package/dist/formats/yaml/mergeYaml.d.ts +5 -0
- package/dist/formats/yaml/mergeYaml.js +61 -0
- package/dist/formats/yaml/parseYaml.d.ts +5 -0
- package/dist/formats/yaml/parseYaml.js +24 -0
- package/dist/formats/yaml/utils.d.ts +2 -0
- package/dist/formats/yaml/utils.js +23 -0
- package/dist/fs/clearLocaleDirs.d.ts +8 -0
- package/dist/fs/clearLocaleDirs.js +126 -0
- package/dist/fs/config/downloadedVersions.d.ts +21 -0
- package/dist/fs/config/downloadedVersions.js +50 -0
- package/dist/fs/config/loadConfig.d.ts +1 -0
- package/dist/fs/config/loadConfig.js +9 -0
- package/dist/fs/config/parseFilesConfig.d.ts +27 -0
- package/dist/fs/config/parseFilesConfig.js +150 -0
- package/dist/fs/config/setupConfig.d.ts +17 -0
- package/dist/fs/config/setupConfig.js +50 -0
- package/dist/fs/config/updateConfig.d.ts +21 -0
- package/dist/fs/config/updateConfig.js +57 -0
- package/dist/fs/config/updateVersions.d.ts +11 -0
- package/dist/fs/config/updateVersions.js +30 -0
- package/dist/fs/copyFile.d.ts +7 -0
- package/dist/fs/copyFile.js +39 -0
- package/dist/fs/createLoadTranslationsFile.d.ts +1 -0
- package/dist/fs/createLoadTranslationsFile.js +49 -0
- package/dist/fs/determineFramework.d.ts +5 -0
- package/dist/fs/determineFramework.js +53 -0
- package/dist/fs/findFilepath.d.ts +36 -0
- package/dist/fs/findFilepath.js +90 -0
- package/dist/fs/index.d.ts +1 -0
- package/dist/fs/index.js +1 -0
- package/dist/fs/loadJSON.d.ts +6 -0
- package/dist/fs/loadJSON.js +17 -0
- package/dist/fs/matchFiles.d.ts +1 -0
- package/dist/fs/matchFiles.js +8 -0
- package/dist/fs/saveJSON.d.ts +1 -0
- package/dist/fs/saveJSON.js +7 -0
- package/dist/fs/utils.d.ts +1 -0
- package/dist/fs/utils.js +16 -0
- package/dist/functions.d.ts +7 -0
- package/dist/functions.js +6 -0
- package/dist/generated/version.d.ts +1 -0
- package/dist/generated/version.js +2 -0
- package/dist/git/branches.d.ts +7 -0
- package/dist/git/branches.js +88 -0
- package/dist/hooks/postProcess.d.ts +4 -0
- package/dist/hooks/postProcess.js +110 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +27 -0
- package/dist/locadex/setupFlow.d.ts +2 -0
- package/dist/locadex/setupFlow.js +9 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +10 -0
- package/dist/next/config/parseNextConfig.d.ts +10 -0
- package/dist/next/config/parseNextConfig.js +53 -0
- package/dist/next/jsx/utils.d.ts +7 -0
- package/dist/next/jsx/utils.js +42 -0
- package/dist/next/parse/handleInitGT.d.ts +7 -0
- package/dist/next/parse/handleInitGT.js +157 -0
- package/dist/next/parse/wrapContent.d.ts +12 -0
- package/dist/next/parse/wrapContent.js +164 -0
- package/dist/react/config/createESBuildConfig.d.ts +2 -0
- package/dist/react/config/createESBuildConfig.js +119 -0
- package/dist/react/jsx/evaluateJsx.d.ts +24 -0
- package/dist/react/jsx/evaluateJsx.js +123 -0
- package/dist/react/jsx/utils/buildImportMap.d.ts +9 -0
- package/dist/react/jsx/utils/buildImportMap.js +30 -0
- package/dist/react/jsx/utils/constants.d.ts +15 -0
- package/dist/react/jsx/utils/constants.js +49 -0
- package/dist/react/jsx/utils/getCalleeNameFromExpression.d.ts +9 -0
- package/dist/react/jsx/utils/getCalleeNameFromExpression.js +32 -0
- package/dist/react/jsx/utils/getPathsAndAliases.d.ts +21 -0
- package/dist/react/jsx/utils/getPathsAndAliases.js +91 -0
- package/dist/react/jsx/utils/isNumberLiteral.d.ts +7 -0
- package/dist/react/jsx/utils/isNumberLiteral.js +13 -0
- package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.d.ts +9 -0
- package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +138 -0
- package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.d.ts +6 -0
- package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +197 -0
- package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.d.ts +13 -0
- package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +42 -0
- package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.d.ts +5 -0
- package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +69 -0
- package/dist/react/jsx/utils/jsxParsing/parseJsx.d.ts +33 -0
- package/dist/react/jsx/utils/jsxParsing/parseJsx.js +918 -0
- package/dist/react/jsx/utils/jsxParsing/parseTProps.d.ts +8 -0
- package/dist/react/jsx/utils/jsxParsing/parseTProps.js +65 -0
- package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.d.ts +2 -0
- package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +61 -0
- package/dist/react/jsx/utils/jsxParsing/types.d.ts +48 -0
- package/dist/react/jsx/utils/jsxParsing/types.js +34 -0
- package/dist/react/jsx/utils/mapAttributeName.d.ts +11 -0
- package/dist/react/jsx/utils/mapAttributeName.js +12 -0
- package/dist/react/jsx/utils/parseAst.d.ts +31 -0
- package/dist/react/jsx/utils/parseAst.js +278 -0
- package/dist/react/jsx/utils/parseDeclareStatic.d.ts +15 -0
- package/dist/react/jsx/utils/parseDeclareStatic.js +540 -0
- package/dist/react/jsx/utils/parseString.d.ts +25 -0
- package/dist/react/jsx/utils/parseString.js +540 -0
- package/dist/react/jsx/utils/parseStringFunction.d.ts +30 -0
- package/dist/react/jsx/utils/parseStringFunction.js +348 -0
- package/dist/react/jsx/utils/resolveImportPath.d.ts +11 -0
- package/dist/react/jsx/utils/resolveImportPath.js +111 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.d.ts +29 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +86 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.d.ts +14 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +24 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.d.ts +19 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +31 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.d.ts +22 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.js +51 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.d.ts +18 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +39 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.d.ts +24 -0
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +68 -0
- package/dist/react/jsx/utils/stringParsing/types.d.ts +41 -0
- package/dist/react/jsx/utils/stringParsing/types.js +1 -0
- package/dist/react/jsx/utils/types.d.ts +14 -0
- package/dist/react/jsx/utils/types.js +1 -0
- package/dist/react/jsx/utils/validateStringFunction.d.ts +7 -0
- package/dist/react/jsx/utils/validateStringFunction.js +31 -0
- package/dist/react/jsx/wrapJsx.d.ts +51 -0
- package/dist/react/jsx/wrapJsx.js +387 -0
- package/dist/react/parse/addVitePlugin/index.d.ts +22 -0
- package/dist/react/parse/addVitePlugin/index.js +41 -0
- package/dist/react/parse/addVitePlugin/installCompiler.d.ts +8 -0
- package/dist/react/parse/addVitePlugin/installCompiler.js +22 -0
- package/dist/react/parse/addVitePlugin/updateViteConfig.d.ts +19 -0
- package/dist/react/parse/addVitePlugin/updateViteConfig.js +120 -0
- package/dist/react/parse/addVitePlugin/utils/addCompilerImport.d.ts +9 -0
- package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +34 -0
- package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.d.ts +11 -0
- package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +48 -0
- package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.d.ts +15 -0
- package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +113 -0
- package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.d.ts +12 -0
- package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +32 -0
- package/dist/react/parse/createDictionaryUpdates.d.ts +3 -0
- package/dist/react/parse/createDictionaryUpdates.js +187 -0
- package/dist/react/parse/createInlineUpdates.d.ts +13 -0
- package/dist/react/parse/createInlineUpdates.js +161 -0
- package/dist/react/parse/wrapContent.d.ts +12 -0
- package/dist/react/parse/wrapContent.js +162 -0
- package/dist/react/utils/flattenDictionary.d.ts +20 -0
- package/dist/react/utils/flattenDictionary.js +75 -0
- package/dist/react/utils/getEntryAndMetadata.d.ts +5 -0
- package/dist/react/utils/getEntryAndMetadata.js +11 -0
- package/dist/react/utils/getVariableName.d.ts +25 -0
- package/dist/react/utils/getVariableName.js +37 -0
- package/dist/setup/agentInstructions.d.ts +24 -0
- package/dist/setup/agentInstructions.js +138 -0
- package/dist/setup/detectFramework.d.ts +31 -0
- package/dist/setup/detectFramework.js +106 -0
- package/dist/setup/frameworkUtils.d.ts +3 -0
- package/dist/setup/frameworkUtils.js +30 -0
- package/dist/setup/instructions/base.md +29 -0
- package/dist/setup/instructions/gt-next.md +107 -0
- package/dist/setup/instructions/gt-react.md +98 -0
- package/dist/setup/userInput.d.ts +4 -0
- package/dist/setup/userInput.js +32 -0
- package/dist/setup/wizard.d.ts +3 -0
- package/dist/setup/wizard.js +147 -0
- package/dist/state/recentDownloads.d.ts +12 -0
- package/dist/state/recentDownloads.js +18 -0
- package/dist/state/translateWarnings.d.ts +10 -0
- package/dist/state/translateWarnings.js +13 -0
- package/dist/translation/parse.d.ts +17 -0
- package/dist/translation/parse.js +77 -0
- package/dist/translation/stage.d.ts +3 -0
- package/dist/translation/stage.js +44 -0
- package/dist/translation/validate.d.ts +14 -0
- package/dist/translation/validate.js +100 -0
- package/dist/types/branch.d.ts +14 -0
- package/dist/types/branch.js +1 -0
- package/dist/types/data/json.d.ts +6 -0
- package/dist/types/data/json.js +1 -0
- package/dist/types/data.d.ts +37 -0
- package/dist/types/data.js +1 -0
- package/dist/types/files.d.ts +8 -0
- package/dist/types/files.js +1 -0
- package/dist/types/index.d.ts +243 -0
- package/dist/types/index.js +1 -0
- package/dist/types/libraries.d.ts +31 -0
- package/dist/types/libraries.js +72 -0
- package/dist/types/parsing.d.ts +3 -0
- package/dist/types/parsing.js +1 -0
- package/dist/utils/addExplicitAnchorIds.d.ts +24 -0
- package/dist/utils/addExplicitAnchorIds.js +416 -0
- package/dist/utils/constants.d.ts +5 -0
- package/dist/utils/constants.js +6 -0
- package/dist/utils/credentials.d.ts +12 -0
- package/dist/utils/credentials.js +120 -0
- package/dist/utils/flattenJsonFiles.d.ts +2 -0
- package/dist/utils/flattenJsonFiles.js +36 -0
- package/dist/utils/gitDiff.d.ts +8 -0
- package/dist/utils/gitDiff.js +34 -0
- package/dist/utils/gt.d.ts +2 -0
- package/dist/utils/gt.js +2 -0
- package/dist/utils/hash.d.ts +6 -0
- package/dist/utils/hash.js +11 -0
- package/dist/utils/headers.d.ts +1 -0
- package/dist/utils/headers.js +14 -0
- package/dist/utils/installPackage.d.ts +3 -0
- package/dist/utils/installPackage.js +77 -0
- package/dist/utils/localizeRelativeAssets.d.ts +8 -0
- package/dist/utils/localizeRelativeAssets.js +166 -0
- package/dist/utils/localizeStaticImports.d.ts +15 -0
- package/dist/utils/localizeStaticImports.js +397 -0
- package/dist/utils/localizeStaticUrls.d.ts +19 -0
- package/dist/utils/localizeStaticUrls.js +450 -0
- package/dist/utils/mintlifyTitleFallback.d.ts +6 -0
- package/dist/utils/mintlifyTitleFallback.js +80 -0
- package/dist/utils/packageInfo.d.ts +3 -0
- package/dist/utils/packageInfo.js +17 -0
- package/dist/utils/packageJson.d.ts +6 -0
- package/dist/utils/packageJson.js +68 -0
- package/dist/utils/packageManager.d.ts +28 -0
- package/dist/utils/packageManager.js +269 -0
- package/dist/utils/parse/needsCJS.d.ts +20 -0
- package/dist/utils/parse/needsCJS.js +72 -0
- package/dist/utils/persistPostprocessHashes.d.ts +12 -0
- package/dist/utils/persistPostprocessHashes.js +39 -0
- package/dist/utils/processAnchorIds.d.ts +6 -0
- package/dist/utils/processAnchorIds.js +56 -0
- package/dist/utils/processOpenApi.d.ts +8 -0
- package/dist/utils/processOpenApi.js +651 -0
- package/dist/utils/sanitizeFileContent.d.ts +6 -0
- package/dist/utils/sanitizeFileContent.js +29 -0
- package/dist/utils/sharedStaticAssets.d.ts +9 -0
- package/dist/utils/sharedStaticAssets.js +384 -0
- package/dist/utils/validateMdx.d.ts +10 -0
- package/dist/utils/validateMdx.js +25 -0
- package/dist/utils/wrapPlainUrls.d.ts +8 -0
- package/dist/utils/wrapPlainUrls.js +72 -0
- package/dist/workflows/download.d.ts +32 -0
- package/dist/workflows/download.js +131 -0
- package/dist/workflows/enqueue.d.ts +17 -0
- package/dist/workflows/enqueue.js +59 -0
- package/dist/workflows/setupProject.d.ts +13 -0
- package/dist/workflows/setupProject.js +48 -0
- package/dist/workflows/stage.d.ts +18 -0
- package/dist/workflows/stage.js +59 -0
- package/dist/workflows/steps/BranchStep.d.ts +13 -0
- package/dist/workflows/steps/BranchStep.js +161 -0
- package/dist/workflows/steps/DownloadStep.d.ts +19 -0
- package/dist/workflows/steps/DownloadStep.js +131 -0
- package/dist/workflows/steps/EnqueueStep.d.ts +15 -0
- package/dist/workflows/steps/EnqueueStep.js +33 -0
- package/dist/workflows/steps/PollJobsStep.d.ts +31 -0
- package/dist/workflows/steps/PollJobsStep.js +288 -0
- package/dist/workflows/steps/SetupStep.d.ts +16 -0
- package/dist/workflows/steps/SetupStep.js +72 -0
- package/dist/workflows/steps/UploadSourcesStep.d.ts +27 -0
- package/dist/workflows/steps/UploadSourcesStep.js +131 -0
- package/dist/workflows/steps/UploadTranslationsStep.d.ts +22 -0
- package/dist/workflows/steps/UploadTranslationsStep.js +71 -0
- package/dist/workflows/steps/UserEditDiffsStep.d.ts +11 -0
- package/dist/workflows/steps/UserEditDiffsStep.js +30 -0
- package/dist/workflows/steps/WorkflowStep.d.ts +4 -0
- package/dist/workflows/steps/WorkflowStep.js +2 -0
- package/dist/workflows/upload.d.ts +15 -0
- package/dist/workflows/upload.js +47 -0
- package/package.json +149 -112
- package/.dont-break +0 -6
- package/.jshintrc +0 -76
- package/.npmignore +0 -9
- package/.travis.yml +0 -21
- package/Gruntfile.js +0 -65
- package/History.md +0 -90
- package/MIT-License.txt +0 -21
- package/bin/gt.js +0 -58
- package/complexity.json +0 -17
- package/doc/RequireJsExample.md +0 -10
- package/examples/all.js +0 -72
- package/examples/altAsserrionSyntax/tests.js +0 -32
- package/examples/amd/bar.js +0 -4
- package/examples/amd/foo.js +0 -15
- package/examples/amd/fooTests.js +0 -8
- package/examples/arrays/test.js +0 -15
- package/examples/assert/test-assert-object.js +0 -15
- package/examples/assert/test-assert-require.js +0 -17
- package/examples/async/asyncAll.js +0 -37
- package/examples/async/asyncSetup.js +0 -29
- package/examples/async/asyncSetupOnce.js +0 -25
- package/examples/async/asyncTeardown.js +0 -27
- package/examples/async/stopStart.js +0 -22
- package/examples/async/test.js +0 -43
- package/examples/async/timeoutTests.js +0 -19
- package/examples/basic/code.js +0 -50
- package/examples/basic/code2.js +0 -9
- package/examples/basic/default.js +0 -26
- package/examples/basic/definedUndefined.js +0 -28
- package/examples/basic/empty.js +0 -24
- package/examples/basic/exceptionTests.js +0 -55
- package/examples/basic/fullMessage.js +0 -28
- package/examples/basic/functions.js +0 -18
- package/examples/basic/incomplete.js +0 -16
- package/examples/basic/null.js +0 -17
- package/examples/basic/optional.js +0 -45
- package/examples/basic/tests.js +0 -147
- package/examples/bdd/spec.js +0 -67
- package/examples/browser/code_coverage_report.json +0 -1
- package/examples/browser/index.html +0 -50
- package/examples/browser/packages.js +0 -12
- package/examples/browser/packagesDefault.js +0 -12
- package/examples/browser/qunit/qunit-1.10.0.css +0 -235
- package/examples/browser/qunit/qunit-1.10.0.js +0 -1977
- package/examples/browser/runTestsWithCoverage.bat +0 -19
- package/examples/browser/runner.js +0 -178
- package/examples/browser/src/Foo.js +0 -14
- package/examples/browser/srcInstrumented/Foo.js +0 -6
- package/examples/browser/test/FooTest.js +0 -31
- package/examples/browser/testDojo.js +0 -63
- package/examples/browser/testInstrumented/FooTest.js +0 -6
- package/examples/coffee/coffeeTestsCoffee/foo.coffee +0 -4
- package/examples/coffee/coffeeTestsCoffee/tests.coffee +0 -7
- package/examples/coffee/coffeeTestsJs/foo.js +0 -9
- package/examples/coffee/coffeeTestsJs/tests.coffee +0 -9
- package/examples/coffee/jsTestsCoffee/foo.coffee +0 -4
- package/examples/coffee/jsTestsCoffee/tests.js +0 -8
- package/examples/coverage.png +0 -0
- package/examples/crash/foo.js +0 -8
- package/examples/crashOnLoading/foo.js +0 -3
- package/examples/crashStackSize/foo.js +0 -8
- package/examples/crashStackSize/test.js +0 -7
- package/examples/doh/foo.js +0 -15
- package/examples/doh/fooTests.js +0 -28
- package/examples/dohDefine/foo.js +0 -14
- package/examples/dohDefine/fooTests.js +0 -24
- package/examples/dojo/src/Foo.js +0 -12
- package/examples/dojo/test/FooTest.js +0 -9
- package/examples/dojo/testDojo.js +0 -69
- package/examples/equiv/equiv.js +0 -22
- package/examples/example.png +0 -0
- package/examples/exec/foo.js +0 -5
- package/examples/exec/tests.js +0 -50
- package/examples/expect/test.js +0 -53
- package/examples/extend/extend-through-api.js +0 -40
- package/examples/extend/test.js +0 -18
- package/examples/faster/fibonacci.js +0 -18
- package/examples/faster/test.js +0 -89
- package/examples/fluent/foo.js +0 -38
- package/examples/funcAndArity/test.js +0 -15
- package/examples/gtAndQUnit/gtTests.js +0 -6
- package/examples/gtAndQUnit/qunitTests.js +0 -5
- package/examples/jsUnity/foo.js +0 -10
- package/examples/jsUnity/fooTests.js +0 -19
- package/examples/lodash/totalLength.js +0 -19
- package/examples/longStrings/test.js +0 -27
- package/examples/moduleSetupTeardown/test.js +0 -115
- package/examples/namedTest/foo.js +0 -9
- package/examples/overrideGt/test.js +0 -11
- package/examples/quickFail/test.js +0 -22
- package/examples/qunit/foo.js +0 -13
- package/examples/reporting/tests.coffee +0 -9
- package/examples/requirejs/lib/Foo.js +0 -11
- package/examples/requirejs/lib/Rectangle.js +0 -13
- package/examples/requirejs/runTests.js +0 -5
- package/examples/requirejs/test/RectangleTest.js +0 -22
- package/examples/silent/foo.js +0 -7
- package/examples/silent/fooTest.js +0 -18
- package/examples/skipTest/tests.js +0 -15
- package/examples/testsFromOtherTests/parentTests.js +0 -7
- package/examples/testsFromOtherTests/tests.js +0 -5
- package/examples/throws/test.js +0 -17
- package/examples/use-gt-as-module/fooTest.js +0 -8
- package/examples/use-gt-as-module/test-code.js +0 -7
- package/gt.js +0 -11
- package/lib/coverage.js +0 -234
- package/src/JUnitReporter.js +0 -30
- package/src/QUnitBrowserAdapter.js +0 -15
- package/src/Reporter.js +0 -127
- package/src/TestRunInfo.js +0 -25
- package/src/TestRunner.js +0 -223
- package/src/UnitTest/CollectionMethods.js +0 -97
- package/src/UnitTest/ModuleTests.js +0 -104
- package/src/UnitTest/Test.js +0 -85
- package/src/UnitTest/TestAsync.js +0 -78
- package/src/UnitTest/TestBaseInfo.js +0 -21
- package/src/UnitTest/TestCollection.js +0 -206
- package/src/UnitTest/TestInfo.js +0 -30
- package/src/UnitTest/TestReport.js +0 -27
- package/src/assertions/PrimaryAssertions.js +0 -163
- package/src/assertions/SecondaryAssertions.js +0 -262
- package/src/assertions/TertiaryAssertions.js +0 -99
- package/src/bddInterface.js +0 -39
- package/src/covered.js +0 -156
- package/src/dohAdapter.js +0 -79
- package/src/dohInterface.js +0 -20
- package/src/equiv.js +0 -11
- package/src/jsunityAdapter.js +0 -66
- package/src/jsunityInterface.js +0 -13
- package/src/options.js +0 -116
- package/src/shiv.js +0 -16
- package/src/sure.js +0 -226
- package/src/test/ConsoleHider.js +0 -26
- package/src/test/JUnitReporter.js +0 -12
- package/src/test/ModuleTests.js +0 -37
- package/src/test/Test.js +0 -18
- package/src/test/TestCollection.js +0 -21
- package/src/test/TestRunInfo.js +0 -15
- package/src/test/TestRunner.js +0 -9
- package/src/test/utils.js +0 -43
- package/src/utils/ConsoleHider.js +0 -27
- package/src/utils/WatchFiles.js +0 -13
- package/src/utils/discoverFiles.js +0 -18
- package/src/utils/joinArguments.js +0 -13
- package/src/utils/not.js +0 -14
- package/src/utils/pluckFunction.js +0 -15
- package/src/utils/test/joinArgumentsTest.js +0 -24
- package/src/utils/test/not.js +0 -70
- package/src/utils/test/pluckFunctionLoDashTest.js +0 -51
- package/src/utils/test/pluckFunctionTest.js +0 -41
- package/src/utils/test/pluckObjects.js +0 -20
- package/src/utils/utils.js +0 -146
- package/tests/all.js +0 -24
- package/tests/large/bddTest.js +0 -9
- package/tests/large/expectedCrash.js +0 -3
- package/tests/large/expectedCrashTest.js +0 -9
- package/tests/large/filterCLI.js +0 -10
- package/tests/large/filterCLITest.js +0 -18
- package/tests/large/loadingCrash.js +0 -1
- package/tests/large/loadingCrashTest.js +0 -9
- package/tests/large/skip.js +0 -11
- package/tests/large/skipTest.js +0 -9
- package/tests/large/twoFailing.js +0 -9
- package/tests/large/twoFailingTest.js +0 -9
- package/tests/mocha/.npmignore +0 -1
- package/tests/mocha/basic.js +0 -12
- package/tests/mocha/gt-as-module.js +0 -65
- package/tests/mocha/test-collection.js +0 -67
- package/tests/small/errorInAsync.js +0 -6
- package/tests/small/errorInAsyncTest.js +0 -14
- package/tests/small/oneFails.js +0 -7
- package/tests/small/oneFailsTest.js +0 -18
- package/tests/small/pluckObjects.js +0 -20
- package/tests/small/pluckTest.js +0 -51
- package/tests/small/setupException.js +0 -8
- package/tests/small/setupExceptionTest.js +0 -9
- package/tests/small/teardownException.js +0 -8
- package/tests/small/teardownExceptionTest.js +0 -9
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import * as t from '@babel/types';
|
|
4
|
+
import { parse } from '@babel/parser';
|
|
5
|
+
import traverseModule from '@babel/traverse';
|
|
6
|
+
import generateModule from '@babel/generator';
|
|
7
|
+
// Handle CommonJS/ESM interop
|
|
8
|
+
const traverse = traverseModule.default || traverseModule;
|
|
9
|
+
const generate = generateModule.default || generateModule;
|
|
10
|
+
import { isMeaningful } from '../jsx/evaluateJsx.js';
|
|
11
|
+
import { handleJsxElement } from '../jsx/wrapJsx.js';
|
|
12
|
+
import { getRelativePath } from '../../fs/findFilepath.js';
|
|
13
|
+
import { generateImportMap, createImports, } from '../jsx/utils/parseAst.js';
|
|
14
|
+
import { DEFAULT_SRC_PATTERNS } from '../../config/generateSettings.js';
|
|
15
|
+
import { matchFiles } from '../../fs/matchFiles.js';
|
|
16
|
+
import { Libraries } from '../../types/libraries.js';
|
|
17
|
+
const IMPORT_MAP = {
|
|
18
|
+
T: { name: 'T', source: Libraries.GT_REACT },
|
|
19
|
+
Var: { name: 'Var', source: Libraries.GT_REACT },
|
|
20
|
+
GTT: { name: 'T', source: Libraries.GT_REACT },
|
|
21
|
+
GTVar: { name: 'Var', source: Libraries.GT_REACT },
|
|
22
|
+
GTProvider: { name: 'GTProvider', source: Libraries.GT_REACT },
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Wraps all JSX elements in the src directory with a <T> tag, with unique ids.
|
|
26
|
+
* - Ignores pure strings
|
|
27
|
+
*
|
|
28
|
+
* @param options - The options object
|
|
29
|
+
* @returns An object containing the updates and errors
|
|
30
|
+
*/
|
|
31
|
+
export async function wrapContentReact(options, pkg, framework, errors, warnings) {
|
|
32
|
+
const filePatterns = options.src || DEFAULT_SRC_PATTERNS;
|
|
33
|
+
const files = matchFiles(process.cwd(), filePatterns);
|
|
34
|
+
const filesUpdated = [];
|
|
35
|
+
for (const file of files) {
|
|
36
|
+
const baseFileName = path.basename(file);
|
|
37
|
+
const configPath = path.relative(path.dirname(file), path.resolve(process.cwd(), options.config));
|
|
38
|
+
// Ensure the path starts with ./ or ../
|
|
39
|
+
const normalizedConfigPath = configPath.startsWith('.')
|
|
40
|
+
? configPath
|
|
41
|
+
: './' + configPath;
|
|
42
|
+
const code = await fs.promises.readFile(file, 'utf8');
|
|
43
|
+
// Create relative path from src directory and remove extension
|
|
44
|
+
const relativePath = getRelativePath(file, process.cwd());
|
|
45
|
+
let ast;
|
|
46
|
+
try {
|
|
47
|
+
ast = parse(code, {
|
|
48
|
+
sourceType: 'module',
|
|
49
|
+
plugins: ['jsx', 'typescript'],
|
|
50
|
+
tokens: true,
|
|
51
|
+
createParenthesizedExpressions: true,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
errors.push(`Error:Failed to parse ${file}: ${error}`);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
let modified = false;
|
|
59
|
+
const usedImports = [];
|
|
60
|
+
const { importAlias, initialImports } = generateImportMap(ast, pkg);
|
|
61
|
+
// If the file already has a T import, skip processing it
|
|
62
|
+
if (initialImports.includes(IMPORT_MAP.T.name)) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
let globalId = 0;
|
|
66
|
+
traverse(ast, {
|
|
67
|
+
JSXElement(path) {
|
|
68
|
+
if (framework === 'next-pages' &&
|
|
69
|
+
options.addGTProvider &&
|
|
70
|
+
(baseFileName === '_app.tsx' || baseFileName === '_app.jsx')) {
|
|
71
|
+
// Check if this is the Component element with pageProps
|
|
72
|
+
const isComponentWithPageProps = t.isJSXElement(path.node) &&
|
|
73
|
+
t.isJSXIdentifier(path.node.openingElement.name) &&
|
|
74
|
+
path.node.openingElement.name.name === 'Component' &&
|
|
75
|
+
path.node.openingElement.attributes.some((attr) => t.isJSXSpreadAttribute(attr) &&
|
|
76
|
+
t.isIdentifier(attr.argument) &&
|
|
77
|
+
attr.argument.name === 'pageProps');
|
|
78
|
+
if (!isComponentWithPageProps) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// Check if GTProvider already exists in the ancestors
|
|
82
|
+
let hasGTProvider = false;
|
|
83
|
+
let currentPath = path;
|
|
84
|
+
while (currentPath.parentPath) {
|
|
85
|
+
if (t.isJSXElement(currentPath.node) &&
|
|
86
|
+
t.isJSXIdentifier(currentPath.node.openingElement.name) &&
|
|
87
|
+
currentPath.node.openingElement.name.name === 'GTProvider') {
|
|
88
|
+
hasGTProvider = true;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
currentPath = currentPath.parentPath;
|
|
92
|
+
}
|
|
93
|
+
if (!hasGTProvider) {
|
|
94
|
+
// Wrap the Component element with GTProvider
|
|
95
|
+
const gtProviderJsx = t.jsxElement(t.jsxOpeningElement(t.jsxIdentifier('GTProvider'), [t.jsxSpreadAttribute(t.identifier('gtConfig'))], false), t.jsxClosingElement(t.jsxIdentifier('GTProvider')), [path.node]);
|
|
96
|
+
path.replaceWith(gtProviderJsx);
|
|
97
|
+
usedImports.push('GTProvider');
|
|
98
|
+
usedImports.push({
|
|
99
|
+
local: 'gtConfig',
|
|
100
|
+
imported: 'default',
|
|
101
|
+
source: normalizedConfigPath,
|
|
102
|
+
});
|
|
103
|
+
modified = true;
|
|
104
|
+
path.skip();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Check if this JSX element has any JSX element ancestors
|
|
109
|
+
if (t.isJSXElement(path.parentPath?.node) ||
|
|
110
|
+
t.isJSXExpressionContainer(path.parentPath?.node)) {
|
|
111
|
+
// If we're nested inside JSX, skip processing this node
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// At this point, we're only processing top-level JSX elements
|
|
115
|
+
const opts = {
|
|
116
|
+
...importAlias,
|
|
117
|
+
idPrefix: relativePath,
|
|
118
|
+
idCount: globalId,
|
|
119
|
+
usedImports,
|
|
120
|
+
modified: false,
|
|
121
|
+
createIds: !options.disableIds,
|
|
122
|
+
warnings,
|
|
123
|
+
file,
|
|
124
|
+
};
|
|
125
|
+
const wrapped = handleJsxElement(path.node, opts, isMeaningful);
|
|
126
|
+
path.replaceWith(wrapped.node);
|
|
127
|
+
// Update global counters
|
|
128
|
+
modified = modified || opts.modified;
|
|
129
|
+
globalId = opts.idCount;
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
if (!modified)
|
|
133
|
+
continue;
|
|
134
|
+
const needsImport = usedImports.filter((imp) => typeof imp === 'string'
|
|
135
|
+
? !initialImports.includes(imp)
|
|
136
|
+
: !initialImports.includes(imp.local));
|
|
137
|
+
if (needsImport.length > 0) {
|
|
138
|
+
createImports(ast, needsImport, IMPORT_MAP);
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
const output = generate(ast, {
|
|
142
|
+
retainLines: true,
|
|
143
|
+
retainFunctionParens: true,
|
|
144
|
+
comments: true,
|
|
145
|
+
compact: 'auto',
|
|
146
|
+
}, code);
|
|
147
|
+
// Post-process the output to fix import spacing
|
|
148
|
+
let processedCode = output.code;
|
|
149
|
+
if (needsImport.length > 0) {
|
|
150
|
+
// Add newline after the comment only
|
|
151
|
+
processedCode = processedCode.replace(/((?:import\s*{\s*(?:T|GTT|Var|GTVar|GTProvider|getLocale)(?:\s*,\s*(?:T|GTT|Var|GTVar|GTProvider|getLocale))*\s*}\s*from|const\s*{\s*(?:T|GTT|Var|GTVar|GTProvider|getLocale)(?:\s*,\s*(?:T|GTT|Var|GTVar|GTProvider|getLocale))*\s*}\s*=\s*require)\s*['"]gt-(?:next|react)(?:\/server)?['"];?)/, '\n$1\n');
|
|
152
|
+
}
|
|
153
|
+
// Write the modified code back to the file
|
|
154
|
+
await fs.promises.writeFile(file, processedCode);
|
|
155
|
+
filesUpdated.push(file);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
errors.push(`Error: Failed to write ${file}: ${error}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return { filesUpdated };
|
|
162
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Dictionary, FlattenedDictionary, FlattenedJSONDictionary, JSONDictionary } from '../../types/data.js';
|
|
2
|
+
/**
|
|
3
|
+
* Flattens a nested dictionary by concatenating nested keys.
|
|
4
|
+
* Throws an error if two keys result in the same flattened key.
|
|
5
|
+
* @param {Record<string, any>} dictionary - The dictionary to flatten.
|
|
6
|
+
* @param {string} [prefix=''] - The prefix for nested keys.
|
|
7
|
+
* @returns {Record<string, React.ReactNode>} The flattened dictionary object.
|
|
8
|
+
* @throws {Error} If two keys result in the same flattened key.
|
|
9
|
+
*/
|
|
10
|
+
export default function flattenDictionary(dictionary: Dictionary, prefix?: string): FlattenedDictionary;
|
|
11
|
+
/**
|
|
12
|
+
* Flattens a nested dictionary containing only string values
|
|
13
|
+
* Throws an error if two keys result in the same flattened key.
|
|
14
|
+
* @param {JSONDictionary} dictionary - The dictionary to flatten.
|
|
15
|
+
* @param {string} [prefix=''] - The prefix for nested keys.
|
|
16
|
+
* @returns {FlattenedJSONDictionary} The flattened dictionary with string values.
|
|
17
|
+
* @throws {Error} If two keys result in the same flattened key.
|
|
18
|
+
* @throws {Error} If a value is an array.
|
|
19
|
+
*/
|
|
20
|
+
export declare function flattenJsonDictionary(dictionary: JSONDictionary, prefix?: string): FlattenedJSONDictionary;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { logErrorAndExit } from '../../console/logging.js';
|
|
2
|
+
const createDuplicateKeyError = (key) => `Duplicate key found in dictionary: "${key}"`;
|
|
3
|
+
/**
|
|
4
|
+
* Flattens a nested dictionary by concatenating nested keys.
|
|
5
|
+
* Throws an error if two keys result in the same flattened key.
|
|
6
|
+
* @param {Record<string, any>} dictionary - The dictionary to flatten.
|
|
7
|
+
* @param {string} [prefix=''] - The prefix for nested keys.
|
|
8
|
+
* @returns {Record<string, React.ReactNode>} The flattened dictionary object.
|
|
9
|
+
* @throws {Error} If two keys result in the same flattened key.
|
|
10
|
+
*/
|
|
11
|
+
export default function flattenDictionary(dictionary, prefix = '') {
|
|
12
|
+
const flattened = {};
|
|
13
|
+
for (const key in dictionary) {
|
|
14
|
+
if (dictionary.hasOwnProperty(key)) {
|
|
15
|
+
const newKey = prefix ? `${prefix}.${key}` : key;
|
|
16
|
+
if (typeof dictionary[key] === 'object' &&
|
|
17
|
+
dictionary[key] !== null &&
|
|
18
|
+
!Array.isArray(dictionary[key])) {
|
|
19
|
+
const nestedFlattened = flattenDictionary(dictionary[key], newKey);
|
|
20
|
+
for (const flatKey in nestedFlattened) {
|
|
21
|
+
if (flattened.hasOwnProperty(flatKey)) {
|
|
22
|
+
logErrorAndExit(createDuplicateKeyError(flatKey));
|
|
23
|
+
}
|
|
24
|
+
flattened[flatKey] = nestedFlattened[flatKey];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
if (flattened.hasOwnProperty(newKey)) {
|
|
29
|
+
logErrorAndExit(createDuplicateKeyError(newKey));
|
|
30
|
+
}
|
|
31
|
+
flattened[newKey] = dictionary[key];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return flattened;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Flattens a nested dictionary containing only string values
|
|
39
|
+
* Throws an error if two keys result in the same flattened key.
|
|
40
|
+
* @param {JSONDictionary} dictionary - The dictionary to flatten.
|
|
41
|
+
* @param {string} [prefix=''] - The prefix for nested keys.
|
|
42
|
+
* @returns {FlattenedJSONDictionary} The flattened dictionary with string values.
|
|
43
|
+
* @throws {Error} If two keys result in the same flattened key.
|
|
44
|
+
* @throws {Error} If a value is an array.
|
|
45
|
+
*/
|
|
46
|
+
export function flattenJsonDictionary(dictionary, prefix = '') {
|
|
47
|
+
const flattened = {};
|
|
48
|
+
for (const key in dictionary) {
|
|
49
|
+
if (dictionary.hasOwnProperty(key)) {
|
|
50
|
+
const newKey = prefix ? `${prefix}.${key}` : key;
|
|
51
|
+
const value = dictionary[key];
|
|
52
|
+
if (Array.isArray(value)) {
|
|
53
|
+
logErrorAndExit(`Arrays are not supported in JSON dictionary at key: "${newKey}"`);
|
|
54
|
+
}
|
|
55
|
+
else if (typeof value === 'object' && value !== null) {
|
|
56
|
+
// Recursively flatten nested objects
|
|
57
|
+
const nestedFlattened = flattenJsonDictionary(value, newKey);
|
|
58
|
+
for (const flatKey in nestedFlattened) {
|
|
59
|
+
if (flattened.hasOwnProperty(flatKey)) {
|
|
60
|
+
logErrorAndExit(createDuplicateKeyError(flatKey));
|
|
61
|
+
}
|
|
62
|
+
flattened[flatKey] = nestedFlattened[flatKey];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (typeof value === 'string') {
|
|
66
|
+
// Handle string values
|
|
67
|
+
if (flattened.hasOwnProperty(newKey)) {
|
|
68
|
+
logErrorAndExit(createDuplicateKeyError(newKey));
|
|
69
|
+
}
|
|
70
|
+
flattened[newKey] = value;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return flattened;
|
|
75
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export default function getEntryAndMetadata(value) {
|
|
2
|
+
if (Array.isArray(value)) {
|
|
3
|
+
if (value.length === 1) {
|
|
4
|
+
return { entry: value[0] };
|
|
5
|
+
}
|
|
6
|
+
if (value.length === 2) {
|
|
7
|
+
return { entry: value[0], metadata: value[1] };
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
return { entry: value };
|
|
11
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { VariableType } from 'generaltranslation/types';
|
|
2
|
+
/**
|
|
3
|
+
* These are the names of the variable components as they appear in gt-next and gt-react
|
|
4
|
+
*/
|
|
5
|
+
export declare const defaultVariableNames: {
|
|
6
|
+
readonly Var: "value";
|
|
7
|
+
readonly Num: "n";
|
|
8
|
+
readonly DateTime: "date";
|
|
9
|
+
readonly Currency: "cost";
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Minify the variable type from the name of the variable component (from gt-next and gt-react)
|
|
13
|
+
* @param variableType - The type of the variable (Var, Num, DateTime, Currency)
|
|
14
|
+
* @returns The minified variable type
|
|
15
|
+
*/
|
|
16
|
+
export declare const minifyVariableType: (variableType: keyof typeof defaultVariableNames) => VariableType;
|
|
17
|
+
export declare const baseVariablePrefix = "_gt_";
|
|
18
|
+
/**
|
|
19
|
+
* Get the name of a variable
|
|
20
|
+
* @param props - The props of the variable
|
|
21
|
+
* @param variableType - The type of the variable (Var, Num, DateTime, Currency)
|
|
22
|
+
* @param id - The id of the variable
|
|
23
|
+
* @returns The name of the variable
|
|
24
|
+
*/
|
|
25
|
+
export declare function getVariableName(props: Record<string, any> | undefined, variableType: keyof typeof defaultVariableNames, id: number): string;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* These are the names of the variable components as they appear in gt-next and gt-react
|
|
3
|
+
*/
|
|
4
|
+
export const defaultVariableNames = {
|
|
5
|
+
Var: 'value',
|
|
6
|
+
Num: 'n',
|
|
7
|
+
DateTime: 'date',
|
|
8
|
+
Currency: 'cost',
|
|
9
|
+
};
|
|
10
|
+
const minifyVariableTypeMap = {
|
|
11
|
+
Var: 'v',
|
|
12
|
+
Num: 'n',
|
|
13
|
+
DateTime: 'd',
|
|
14
|
+
Currency: 'c',
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Minify the variable type from the name of the variable component (from gt-next and gt-react)
|
|
18
|
+
* @param variableType - The type of the variable (Var, Num, DateTime, Currency)
|
|
19
|
+
* @returns The minified variable type
|
|
20
|
+
*/
|
|
21
|
+
export const minifyVariableType = (variableType) => {
|
|
22
|
+
return minifyVariableTypeMap[variableType];
|
|
23
|
+
};
|
|
24
|
+
export const baseVariablePrefix = '_gt_';
|
|
25
|
+
/**
|
|
26
|
+
* Get the name of a variable
|
|
27
|
+
* @param props - The props of the variable
|
|
28
|
+
* @param variableType - The type of the variable (Var, Num, DateTime, Currency)
|
|
29
|
+
* @param id - The id of the variable
|
|
30
|
+
* @returns The name of the variable
|
|
31
|
+
*/
|
|
32
|
+
export function getVariableName(props = {}, variableType, id) {
|
|
33
|
+
if (props.name)
|
|
34
|
+
return props.name;
|
|
35
|
+
const baseVariableName = defaultVariableNames[variableType] || 'value';
|
|
36
|
+
return `${baseVariablePrefix}${baseVariableName}_${id}`;
|
|
37
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SupportedLibraries } from '../types/index.js';
|
|
2
|
+
export declare const CURSOR_GT_RULES_FILE = ".cursor/rules/gt-i18n.mdc";
|
|
3
|
+
/**
|
|
4
|
+
* Detect existing AI agent instruction files in the project.
|
|
5
|
+
*/
|
|
6
|
+
export declare function findAgentFiles(): string[];
|
|
7
|
+
/**
|
|
8
|
+
* Find agent files that already contain GT instructions.
|
|
9
|
+
*/
|
|
10
|
+
export declare function findAgentFilesWithInstructions(): string[];
|
|
11
|
+
/**
|
|
12
|
+
* Check if the .cursor/rules/ directory exists (for offering to create gt-i18n.mdc).
|
|
13
|
+
*/
|
|
14
|
+
export declare function hasCursorRulesDir(): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Generate GT agent instructions content based on the detected library.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getAgentInstructions(library: SupportedLibraries): string;
|
|
19
|
+
/**
|
|
20
|
+
* Append or replace GT instructions in an agent file.
|
|
21
|
+
* Skips writing if the file already contains identical instructions.
|
|
22
|
+
* For .cursor/rules/gt.md, writes the file fresh (dedicated GT rules file).
|
|
23
|
+
*/
|
|
24
|
+
export declare function appendAgentInstructions(filePath: string, instructions: string): boolean;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { getCLIVersion, getPackageVersion } from '../utils/packageJson.js';
|
|
5
|
+
import { Libraries } from '../types/libraries.js';
|
|
6
|
+
const INSTRUCTIONS_DIR = path.resolve(path.dirname(fileURLToPath(import.meta.url)), 'instructions');
|
|
7
|
+
const AGENT_FILE_PATHS = [
|
|
8
|
+
'CLAUDE.md',
|
|
9
|
+
'AGENTS.md',
|
|
10
|
+
'GPT.md',
|
|
11
|
+
'CHATGPT.md',
|
|
12
|
+
'.cursorrules',
|
|
13
|
+
];
|
|
14
|
+
const CURSOR_RULES_DIR = '.cursor/rules';
|
|
15
|
+
export const CURSOR_GT_RULES_FILE = '.cursor/rules/gt-i18n.mdc';
|
|
16
|
+
const GT_SECTION_START = '<!-- GT I18N RULES START -->';
|
|
17
|
+
const GT_SECTION_END = '<!-- GT I18N RULES END -->';
|
|
18
|
+
function getLibraryVersion(library) {
|
|
19
|
+
const packageJsonPath = path.resolve(process.cwd(), 'package.json');
|
|
20
|
+
if (!fs.existsSync(packageJsonPath))
|
|
21
|
+
return undefined;
|
|
22
|
+
try {
|
|
23
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
24
|
+
return getPackageVersion(library, packageJson);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Detect existing AI agent instruction files in the project.
|
|
32
|
+
*/
|
|
33
|
+
export function findAgentFiles() {
|
|
34
|
+
const cwd = process.cwd();
|
|
35
|
+
const found = [];
|
|
36
|
+
for (const filePath of [...AGENT_FILE_PATHS, CURSOR_GT_RULES_FILE]) {
|
|
37
|
+
const fullPath = path.resolve(cwd, filePath);
|
|
38
|
+
if (fs.existsSync(fullPath)) {
|
|
39
|
+
found.push(filePath);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return found;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Find agent files that already contain GT instructions.
|
|
46
|
+
*/
|
|
47
|
+
export function findAgentFilesWithInstructions() {
|
|
48
|
+
const cwd = process.cwd();
|
|
49
|
+
const found = [];
|
|
50
|
+
for (const filePath of [...AGENT_FILE_PATHS, CURSOR_GT_RULES_FILE]) {
|
|
51
|
+
const fullPath = path.resolve(cwd, filePath);
|
|
52
|
+
if (fs.existsSync(fullPath)) {
|
|
53
|
+
const content = fs.readFileSync(fullPath, 'utf8');
|
|
54
|
+
if (content.includes(GT_SECTION_START)) {
|
|
55
|
+
found.push(filePath);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return found;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check if the .cursor/rules/ directory exists (for offering to create gt-i18n.mdc).
|
|
63
|
+
*/
|
|
64
|
+
export function hasCursorRulesDir() {
|
|
65
|
+
const cursorRulesDir = path.resolve(process.cwd(), CURSOR_RULES_DIR);
|
|
66
|
+
return (fs.existsSync(cursorRulesDir) && fs.statSync(cursorRulesDir).isDirectory());
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Generate GT agent instructions content based on the detected library.
|
|
70
|
+
*/
|
|
71
|
+
export function getAgentInstructions(library) {
|
|
72
|
+
const libraryVersion = getLibraryVersion(library);
|
|
73
|
+
const versionLine = libraryVersion
|
|
74
|
+
? `- **${library}**: ${libraryVersion}\n- **gt**: v${getCLIVersion()}`
|
|
75
|
+
: `- **gt**: v${getCLIVersion()}`;
|
|
76
|
+
const base = fs.readFileSync(path.join(INSTRUCTIONS_DIR, 'base.md'), 'utf8');
|
|
77
|
+
let body = '';
|
|
78
|
+
const libToFile = {
|
|
79
|
+
[Libraries.GT_NEXT]: 'gt-next.md',
|
|
80
|
+
[Libraries.GT_REACT]: 'gt-react.md',
|
|
81
|
+
// TODO: add gt-react-native.md
|
|
82
|
+
[Libraries.GT_REACT_NATIVE]: 'gt-react.md',
|
|
83
|
+
};
|
|
84
|
+
const instructionFile = libToFile[library];
|
|
85
|
+
if (instructionFile) {
|
|
86
|
+
body += '\n\n'; // add two newlines between the base and the specific instructions
|
|
87
|
+
body += fs.readFileSync(path.join(INSTRUCTIONS_DIR, instructionFile), 'utf8');
|
|
88
|
+
}
|
|
89
|
+
return `${GT_SECTION_START}
|
|
90
|
+
|
|
91
|
+
${versionLine}
|
|
92
|
+
|
|
93
|
+
${base}${body}
|
|
94
|
+
${GT_SECTION_END}`;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Append or replace GT instructions in an agent file.
|
|
98
|
+
* Skips writing if the file already contains identical instructions.
|
|
99
|
+
* For .cursor/rules/gt.md, writes the file fresh (dedicated GT rules file).
|
|
100
|
+
*/
|
|
101
|
+
export function appendAgentInstructions(filePath, instructions) {
|
|
102
|
+
const fullPath = path.resolve(process.cwd(), filePath);
|
|
103
|
+
// For .cursor/rules/gt.md, write as a standalone file with frontmatter
|
|
104
|
+
if (filePath === CURSOR_GT_RULES_FILE) {
|
|
105
|
+
const cursorContent = `---\ndescription: GT internationalization instructions\nalwaysApply: true\n---\n${instructions}\n`;
|
|
106
|
+
fs.mkdirSync(path.dirname(fullPath), { recursive: true });
|
|
107
|
+
if (fs.existsSync(fullPath)) {
|
|
108
|
+
const existing = fs.readFileSync(fullPath, 'utf8');
|
|
109
|
+
if (existing === cursorContent)
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
fs.writeFileSync(fullPath, cursorContent, 'utf8');
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
// For other files, read existing content and append/replace
|
|
116
|
+
let content = '';
|
|
117
|
+
if (fs.existsSync(fullPath)) {
|
|
118
|
+
content = fs.readFileSync(fullPath, 'utf8');
|
|
119
|
+
}
|
|
120
|
+
// Already has identical instructions — skip
|
|
121
|
+
if (content.includes(instructions))
|
|
122
|
+
return false;
|
|
123
|
+
const startIdx = content.indexOf(GT_SECTION_START);
|
|
124
|
+
const endIdx = startIdx !== -1 ? content.indexOf(GT_SECTION_END, startIdx) : -1;
|
|
125
|
+
if (startIdx !== -1 && endIdx !== -1) {
|
|
126
|
+
// Replace existing section
|
|
127
|
+
const before = content.substring(0, startIdx);
|
|
128
|
+
const after = content.substring(endIdx + GT_SECTION_END.length);
|
|
129
|
+
content = before + instructions + after;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
// Append to end
|
|
133
|
+
const separator = content.length > 0 && !content.endsWith('\n') ? '\n' : '';
|
|
134
|
+
content = content + separator + '\n' + instructions + '\n';
|
|
135
|
+
}
|
|
136
|
+
fs.writeFileSync(fullPath, content, 'utf8');
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { FrameworkObject } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Detects the frontend framework used in the current project.
|
|
4
|
+
*
|
|
5
|
+
* Analyzes the project structure and dependencies to identify the framework.
|
|
6
|
+
* Detection order: Mintlify → Next.js (App/Pages Router) → Gatsby → RedwoodJS → Vite → React.
|
|
7
|
+
*
|
|
8
|
+
* For Next.js projects, further determines whether it uses App Router or Pages Router
|
|
9
|
+
* by checking for the presence of `app/` or `pages/` directories.
|
|
10
|
+
*
|
|
11
|
+
* @returns A promise resolving to a FrameworkObject containing:
|
|
12
|
+
* - `name`: The detected framework identifier (e.g., 'next-app', 'gatsby', 'react')
|
|
13
|
+
* or undefined if no framework is detected
|
|
14
|
+
* - `type`: The framework category (currently only 'react' for React-based frameworks)
|
|
15
|
+
*/
|
|
16
|
+
export declare function detectFramework(): Promise<FrameworkObject | {
|
|
17
|
+
name: undefined;
|
|
18
|
+
type?: undefined;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Detects if the current project is a Mintlify documentation project.
|
|
22
|
+
*
|
|
23
|
+
* Checks for the presence of docs.json (preferred) or mint.json (legacy) files.
|
|
24
|
+
* For docs.json, validates that the $schema field contains "mintlify.com/docs.json".
|
|
25
|
+
* Rejects projects with Next.js config files to avoid misclassification.
|
|
26
|
+
*
|
|
27
|
+
* @param _packageJson - The parsed package.json object (not used for Mintlify detection,
|
|
28
|
+
* but kept for API consistency with other detection functions)
|
|
29
|
+
* @returns True if the project is identified as a Mintlify project, false otherwise
|
|
30
|
+
*/
|
|
31
|
+
export declare function isMintlifyProject(_packageJson: Record<string, any> | null): boolean;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { isPackageInstalled } from '../utils/packageJson.js';
|
|
2
|
+
import { searchForPackageJson } from '../utils/packageJson.js';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
/* ----- MAIN ----- */
|
|
6
|
+
/**
|
|
7
|
+
* Detects the frontend framework used in the current project.
|
|
8
|
+
*
|
|
9
|
+
* Analyzes the project structure and dependencies to identify the framework.
|
|
10
|
+
* Detection order: Mintlify → Next.js (App/Pages Router) → Gatsby → RedwoodJS → Vite → React.
|
|
11
|
+
*
|
|
12
|
+
* For Next.js projects, further determines whether it uses App Router or Pages Router
|
|
13
|
+
* by checking for the presence of `app/` or `pages/` directories.
|
|
14
|
+
*
|
|
15
|
+
* @returns A promise resolving to a FrameworkObject containing:
|
|
16
|
+
* - `name`: The detected framework identifier (e.g., 'next-app', 'gatsby', 'react')
|
|
17
|
+
* or undefined if no framework is detected
|
|
18
|
+
* - `type`: The framework category (currently only 'react' for React-based frameworks)
|
|
19
|
+
*/
|
|
20
|
+
export async function detectFramework() {
|
|
21
|
+
const packageJson = await searchForPackageJson();
|
|
22
|
+
if (isMintlifyProject(packageJson)) {
|
|
23
|
+
return { name: 'mintlify' };
|
|
24
|
+
}
|
|
25
|
+
if (!packageJson) {
|
|
26
|
+
return { name: undefined };
|
|
27
|
+
}
|
|
28
|
+
// Check for Next.js first
|
|
29
|
+
if (isPackageInstalled('next', packageJson, false, true)) {
|
|
30
|
+
// Determine if it's App Router or Pages Router
|
|
31
|
+
const cwd = process.cwd();
|
|
32
|
+
const hasAppDir = fs.existsSync(path.join(cwd, 'app')) ||
|
|
33
|
+
fs.existsSync(path.join(cwd, 'src', 'app'));
|
|
34
|
+
const hasPagesDir = fs.existsSync(path.join(cwd, 'pages')) ||
|
|
35
|
+
fs.existsSync(path.join(cwd, 'src', 'pages'));
|
|
36
|
+
// App Router takes precedence if both exist
|
|
37
|
+
if (hasAppDir) {
|
|
38
|
+
return { name: 'next-app', type: 'react' };
|
|
39
|
+
}
|
|
40
|
+
if (hasPagesDir) {
|
|
41
|
+
return { name: 'next-pages', type: 'react' };
|
|
42
|
+
}
|
|
43
|
+
// Default to app router for new Next.js projects
|
|
44
|
+
return { name: 'next-app', type: 'react' };
|
|
45
|
+
}
|
|
46
|
+
// Check for Gatsby
|
|
47
|
+
if (isPackageInstalled('gatsby', packageJson, false, true)) {
|
|
48
|
+
return { name: 'gatsby', type: 'react' };
|
|
49
|
+
}
|
|
50
|
+
// Check for RedwoodJS
|
|
51
|
+
if (isPackageInstalled('@redwoodjs/core', packageJson, false, true)) {
|
|
52
|
+
return { name: 'redwood', type: 'react' };
|
|
53
|
+
}
|
|
54
|
+
// Check for Vite
|
|
55
|
+
if (isPackageInstalled('vite', packageJson, false, true)) {
|
|
56
|
+
return { name: 'vite', type: 'react' };
|
|
57
|
+
}
|
|
58
|
+
// Check for React (generic)
|
|
59
|
+
if (isPackageInstalled('react', packageJson, false, true)) {
|
|
60
|
+
return { name: 'react', type: 'react' };
|
|
61
|
+
}
|
|
62
|
+
return { name: undefined };
|
|
63
|
+
}
|
|
64
|
+
// ----- HELPER FUNCTIONS ----- //
|
|
65
|
+
/**
|
|
66
|
+
* Detects if the current project is a Mintlify documentation project.
|
|
67
|
+
*
|
|
68
|
+
* Checks for the presence of docs.json (preferred) or mint.json (legacy) files.
|
|
69
|
+
* For docs.json, validates that the $schema field contains "mintlify.com/docs.json".
|
|
70
|
+
* Rejects projects with Next.js config files to avoid misclassification.
|
|
71
|
+
*
|
|
72
|
+
* @param _packageJson - The parsed package.json object (not used for Mintlify detection,
|
|
73
|
+
* but kept for API consistency with other detection functions)
|
|
74
|
+
* @returns True if the project is identified as a Mintlify project, false otherwise
|
|
75
|
+
*/
|
|
76
|
+
export function isMintlifyProject(_packageJson) {
|
|
77
|
+
const cwd = process.cwd();
|
|
78
|
+
// Check for Next.js config files - if present, this is not a Mintlify project
|
|
79
|
+
const nextConfigFiles = [
|
|
80
|
+
'next.config.js',
|
|
81
|
+
'next.config.ts',
|
|
82
|
+
'next.config.mjs',
|
|
83
|
+
'next.config.cjs',
|
|
84
|
+
];
|
|
85
|
+
for (const configFile of nextConfigFiles) {
|
|
86
|
+
if (fs.existsSync(path.join(cwd, configFile))) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Check for docs.json (preferred format)
|
|
91
|
+
const docsJsonPath = path.join(cwd, 'docs.json');
|
|
92
|
+
if (fs.existsSync(docsJsonPath)) {
|
|
93
|
+
try {
|
|
94
|
+
const docsJson = JSON.parse(fs.readFileSync(docsJsonPath, 'utf-8'));
|
|
95
|
+
// Validate the $schema field contains mintlify.com/docs.json
|
|
96
|
+
if (docsJson.$schema &&
|
|
97
|
+
docsJson.$schema.includes('mintlify.com/docs.json')) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
}
|