gtx-cli 2.6.31 → 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 +4 -1261
- package/README.md +12 -3
- package/dist/bin/bin-entry.js +2 -1
- package/dist/config/generateSettings.d.ts +1 -9
- package/dist/config/generateSettings.js +1 -214
- package/dist/config/resolveConfig.d.ts +1 -4
- package/dist/config/resolveConfig.js +1 -33
- package/dist/fs/config/setupConfig.d.ts +1 -17
- package/dist/fs/config/setupConfig.js +1 -50
- package/dist/fs/matchFiles.d.ts +1 -1
- package/dist/fs/matchFiles.js +1 -8
- package/dist/functions.d.ts +1 -7
- package/dist/functions.js +1 -6
- package/dist/index.d.ts +1 -4
- package/dist/index.js +1 -27
- package/dist/main.js +2 -2
- package/dist/next/parse/handleInitGT.d.ts +1 -7
- package/dist/next/parse/handleInitGT.js +1 -157
- package/dist/next/parse/wrapContent.d.ts +1 -12
- package/dist/next/parse/wrapContent.js +1 -164
- package/dist/react/parse/wrapContent.d.ts +1 -12
- package/dist/react/parse/wrapContent.js +1 -162
- package/dist/types/index.d.ts +1 -243
- package/dist/types/index.js +1 -1
- package/dist/utils/installPackage.d.ts +1 -3
- package/dist/utils/installPackage.js +1 -77
- package/dist/utils/packageInfo.d.ts +1 -3
- package/dist/utils/packageInfo.js +1 -17
- package/dist/utils/packageJson.d.ts +1 -6
- package/dist/utils/packageJson.js +1 -68
- package/dist/utils/packageManager.d.ts +1 -28
- package/dist/utils/packageManager.js +1 -269
- package/package.json +11 -97
- package/dist/api/collectUserEditDiffs.d.ts +0 -9
- package/dist/api/collectUserEditDiffs.js +0 -159
- package/dist/api/downloadFileBatch.d.ts +0 -23
- package/dist/api/downloadFileBatch.js +0 -190
- package/dist/api/saveLocalEdits.d.ts +0 -6
- package/dist/api/saveLocalEdits.js +0 -38
- package/dist/cli/base.d.ts +0 -59
- package/dist/cli/base.js +0 -529
- package/dist/cli/commands/download.d.ts +0 -8
- package/dist/cli/commands/download.js +0 -51
- package/dist/cli/commands/enqueue.d.ts +0 -9
- package/dist/cli/commands/enqueue.js +0 -27
- package/dist/cli/commands/setupProject.d.ts +0 -7
- package/dist/cli/commands/setupProject.js +0 -37
- package/dist/cli/commands/stage.d.ts +0 -9
- package/dist/cli/commands/stage.js +0 -59
- package/dist/cli/commands/translate.d.ts +0 -7
- package/dist/cli/commands/translate.js +0 -70
- package/dist/cli/commands/upload.d.ts +0 -13
- package/dist/cli/commands/upload.js +0 -142
- package/dist/cli/commands/utils/validation.d.ts +0 -13
- package/dist/cli/commands/utils/validation.js +0 -38
- package/dist/cli/flags.d.ts +0 -15
- package/dist/cli/flags.js +0 -70
- package/dist/cli/inline.d.ts +0 -17
- package/dist/cli/inline.js +0 -135
- package/dist/cli/next.d.ts +0 -10
- package/dist/cli/next.js +0 -12
- package/dist/cli/node.d.ts +0 -10
- package/dist/cli/node.js +0 -9
- package/dist/cli/react.d.ts +0 -12
- package/dist/cli/react.js +0 -72
- package/dist/config/optionPresets.d.ts +0 -3
- package/dist/config/optionPresets.js +0 -65
- package/dist/config/utils.d.ts +0 -2
- package/dist/config/utils.js +0 -4
- package/dist/config/validateSettings.d.ts +0 -3
- package/dist/config/validateSettings.js +0 -32
- package/dist/console/colors.d.ts +0 -6
- package/dist/console/colors.js +0 -19
- package/dist/console/displayTranslateSummary.d.ts +0 -1
- package/dist/console/displayTranslateSummary.js +0 -42
- package/dist/console/formatting.d.ts +0 -1
- package/dist/console/formatting.js +0 -7
- package/dist/console/index.d.ts +0 -34
- package/dist/console/index.js +0 -46
- package/dist/console/logger.d.ts +0 -35
- package/dist/console/logger.js +0 -250
- package/dist/console/logging.d.ts +0 -52
- package/dist/console/logging.js +0 -175
- package/dist/formats/files/aggregateFiles.d.ts +0 -4
- package/dist/formats/files/aggregateFiles.js +0 -156
- package/dist/formats/files/collectFiles.d.ts +0 -6
- package/dist/formats/files/collectFiles.js +0 -49
- package/dist/formats/files/convertToFileTranslationData.d.ts +0 -15
- package/dist/formats/files/convertToFileTranslationData.js +0 -21
- package/dist/formats/files/fileMapping.d.ts +0 -11
- package/dist/formats/files/fileMapping.js +0 -115
- package/dist/formats/files/preprocess/mdx.d.ts +0 -6
- package/dist/formats/files/preprocess/mdx.js +0 -14
- package/dist/formats/files/preprocess/mintlify.d.ts +0 -5
- package/dist/formats/files/preprocess/mintlify.js +0 -15
- package/dist/formats/files/preprocessContent.d.ts +0 -8
- package/dist/formats/files/preprocessContent.js +0 -23
- package/dist/formats/files/save.d.ts +0 -5
- package/dist/formats/files/save.js +0 -17
- package/dist/formats/files/supportedFiles.d.ts +0 -11
- package/dist/formats/files/supportedFiles.js +0 -20
- package/dist/formats/json/extractJson.d.ts +0 -15
- package/dist/formats/json/extractJson.js +0 -101
- package/dist/formats/json/flattenJson.d.ts +0 -14
- package/dist/formats/json/flattenJson.js +0 -64
- package/dist/formats/json/mergeJson.d.ts +0 -13
- package/dist/formats/json/mergeJson.js +0 -367
- package/dist/formats/json/parseJson.d.ts +0 -2
- package/dist/formats/json/parseJson.js +0 -109
- package/dist/formats/json/utils.d.ts +0 -47
- package/dist/formats/json/utils.js +0 -150
- package/dist/formats/utils.d.ts +0 -2
- package/dist/formats/utils.js +0 -24
- package/dist/formats/yaml/mergeYaml.d.ts +0 -5
- package/dist/formats/yaml/mergeYaml.js +0 -61
- package/dist/formats/yaml/parseYaml.d.ts +0 -5
- package/dist/formats/yaml/parseYaml.js +0 -24
- package/dist/formats/yaml/utils.d.ts +0 -2
- package/dist/formats/yaml/utils.js +0 -23
- package/dist/fs/clearLocaleDirs.d.ts +0 -8
- package/dist/fs/clearLocaleDirs.js +0 -126
- package/dist/fs/config/downloadedVersions.d.ts +0 -21
- package/dist/fs/config/downloadedVersions.js +0 -50
- package/dist/fs/config/loadConfig.d.ts +0 -1
- package/dist/fs/config/loadConfig.js +0 -9
- package/dist/fs/config/parseFilesConfig.d.ts +0 -27
- package/dist/fs/config/parseFilesConfig.js +0 -150
- package/dist/fs/config/updateConfig.d.ts +0 -21
- package/dist/fs/config/updateConfig.js +0 -57
- package/dist/fs/config/updateVersions.d.ts +0 -11
- package/dist/fs/config/updateVersions.js +0 -30
- package/dist/fs/copyFile.d.ts +0 -7
- package/dist/fs/copyFile.js +0 -39
- package/dist/fs/createLoadTranslationsFile.d.ts +0 -1
- package/dist/fs/createLoadTranslationsFile.js +0 -49
- package/dist/fs/determineFramework.d.ts +0 -5
- package/dist/fs/determineFramework.js +0 -53
- package/dist/fs/findFilepath.d.ts +0 -36
- package/dist/fs/findFilepath.js +0 -90
- package/dist/fs/index.d.ts +0 -1
- package/dist/fs/index.js +0 -1
- package/dist/fs/loadJSON.d.ts +0 -6
- package/dist/fs/loadJSON.js +0 -17
- package/dist/fs/saveJSON.d.ts +0 -1
- package/dist/fs/saveJSON.js +0 -7
- package/dist/fs/utils.d.ts +0 -1
- package/dist/fs/utils.js +0 -16
- package/dist/generated/version.d.ts +0 -1
- package/dist/generated/version.js +0 -2
- package/dist/git/branches.d.ts +0 -7
- package/dist/git/branches.js +0 -88
- package/dist/hooks/postProcess.d.ts +0 -4
- package/dist/hooks/postProcess.js +0 -110
- package/dist/locadex/setupFlow.d.ts +0 -2
- package/dist/locadex/setupFlow.js +0 -9
- package/dist/next/config/parseNextConfig.d.ts +0 -10
- package/dist/next/config/parseNextConfig.js +0 -53
- package/dist/next/jsx/utils.d.ts +0 -7
- package/dist/next/jsx/utils.js +0 -42
- package/dist/react/config/createESBuildConfig.d.ts +0 -2
- package/dist/react/config/createESBuildConfig.js +0 -119
- package/dist/react/jsx/evaluateJsx.d.ts +0 -24
- package/dist/react/jsx/evaluateJsx.js +0 -123
- package/dist/react/jsx/utils/buildImportMap.d.ts +0 -9
- package/dist/react/jsx/utils/buildImportMap.js +0 -30
- package/dist/react/jsx/utils/constants.d.ts +0 -15
- package/dist/react/jsx/utils/constants.js +0 -49
- package/dist/react/jsx/utils/getCalleeNameFromExpression.d.ts +0 -9
- package/dist/react/jsx/utils/getCalleeNameFromExpression.js +0 -32
- package/dist/react/jsx/utils/getPathsAndAliases.d.ts +0 -21
- package/dist/react/jsx/utils/getPathsAndAliases.js +0 -91
- package/dist/react/jsx/utils/isNumberLiteral.d.ts +0 -7
- package/dist/react/jsx/utils/isNumberLiteral.js +0 -13
- package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.d.ts +0 -9
- package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +0 -138
- package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.d.ts +0 -6
- package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +0 -197
- package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.d.ts +0 -13
- package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +0 -42
- package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.d.ts +0 -5
- package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +0 -69
- package/dist/react/jsx/utils/jsxParsing/parseJsx.d.ts +0 -33
- package/dist/react/jsx/utils/jsxParsing/parseJsx.js +0 -918
- package/dist/react/jsx/utils/jsxParsing/parseTProps.d.ts +0 -8
- package/dist/react/jsx/utils/jsxParsing/parseTProps.js +0 -65
- package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.d.ts +0 -2
- package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +0 -61
- package/dist/react/jsx/utils/jsxParsing/types.d.ts +0 -48
- package/dist/react/jsx/utils/jsxParsing/types.js +0 -34
- package/dist/react/jsx/utils/mapAttributeName.d.ts +0 -11
- package/dist/react/jsx/utils/mapAttributeName.js +0 -12
- package/dist/react/jsx/utils/parseAst.d.ts +0 -31
- package/dist/react/jsx/utils/parseAst.js +0 -278
- package/dist/react/jsx/utils/parseDeclareStatic.d.ts +0 -15
- package/dist/react/jsx/utils/parseDeclareStatic.js +0 -540
- package/dist/react/jsx/utils/parseString.d.ts +0 -25
- package/dist/react/jsx/utils/parseString.js +0 -540
- package/dist/react/jsx/utils/parseStringFunction.d.ts +0 -30
- package/dist/react/jsx/utils/parseStringFunction.js +0 -348
- package/dist/react/jsx/utils/resolveImportPath.d.ts +0 -11
- package/dist/react/jsx/utils/resolveImportPath.js +0 -111
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.d.ts +0 -29
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +0 -86
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.d.ts +0 -14
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +0 -24
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.d.ts +0 -19
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +0 -31
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.d.ts +0 -22
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.js +0 -51
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.d.ts +0 -18
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +0 -39
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.d.ts +0 -24
- package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +0 -68
- package/dist/react/jsx/utils/stringParsing/types.d.ts +0 -41
- package/dist/react/jsx/utils/stringParsing/types.js +0 -1
- package/dist/react/jsx/utils/types.d.ts +0 -14
- package/dist/react/jsx/utils/types.js +0 -1
- package/dist/react/jsx/utils/validateStringFunction.d.ts +0 -7
- package/dist/react/jsx/utils/validateStringFunction.js +0 -31
- package/dist/react/jsx/wrapJsx.d.ts +0 -51
- package/dist/react/jsx/wrapJsx.js +0 -387
- package/dist/react/parse/addVitePlugin/index.d.ts +0 -22
- package/dist/react/parse/addVitePlugin/index.js +0 -41
- package/dist/react/parse/addVitePlugin/installCompiler.d.ts +0 -8
- package/dist/react/parse/addVitePlugin/installCompiler.js +0 -22
- package/dist/react/parse/addVitePlugin/updateViteConfig.d.ts +0 -19
- package/dist/react/parse/addVitePlugin/updateViteConfig.js +0 -120
- package/dist/react/parse/addVitePlugin/utils/addCompilerImport.d.ts +0 -9
- package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +0 -34
- package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.d.ts +0 -11
- package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +0 -48
- package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.d.ts +0 -15
- package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +0 -113
- package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.d.ts +0 -12
- package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +0 -32
- package/dist/react/parse/createDictionaryUpdates.d.ts +0 -3
- package/dist/react/parse/createDictionaryUpdates.js +0 -187
- package/dist/react/parse/createInlineUpdates.d.ts +0 -13
- package/dist/react/parse/createInlineUpdates.js +0 -161
- package/dist/react/utils/flattenDictionary.d.ts +0 -20
- package/dist/react/utils/flattenDictionary.js +0 -75
- package/dist/react/utils/getEntryAndMetadata.d.ts +0 -5
- package/dist/react/utils/getEntryAndMetadata.js +0 -11
- package/dist/react/utils/getVariableName.d.ts +0 -25
- package/dist/react/utils/getVariableName.js +0 -37
- package/dist/setup/agentInstructions.d.ts +0 -24
- package/dist/setup/agentInstructions.js +0 -138
- package/dist/setup/detectFramework.d.ts +0 -31
- package/dist/setup/detectFramework.js +0 -106
- package/dist/setup/frameworkUtils.d.ts +0 -3
- package/dist/setup/frameworkUtils.js +0 -30
- package/dist/setup/instructions/base.md +0 -29
- package/dist/setup/instructions/gt-next.md +0 -107
- package/dist/setup/instructions/gt-react.md +0 -98
- package/dist/setup/userInput.d.ts +0 -4
- package/dist/setup/userInput.js +0 -32
- package/dist/setup/wizard.d.ts +0 -3
- package/dist/setup/wizard.js +0 -147
- package/dist/state/recentDownloads.d.ts +0 -12
- package/dist/state/recentDownloads.js +0 -18
- package/dist/state/translateWarnings.d.ts +0 -10
- package/dist/state/translateWarnings.js +0 -13
- package/dist/translation/parse.d.ts +0 -17
- package/dist/translation/parse.js +0 -77
- package/dist/translation/stage.d.ts +0 -3
- package/dist/translation/stage.js +0 -44
- package/dist/translation/validate.d.ts +0 -14
- package/dist/translation/validate.js +0 -100
- package/dist/types/branch.d.ts +0 -14
- package/dist/types/branch.js +0 -1
- package/dist/types/data/json.d.ts +0 -6
- package/dist/types/data/json.js +0 -1
- package/dist/types/data.d.ts +0 -37
- package/dist/types/data.js +0 -1
- package/dist/types/files.d.ts +0 -8
- package/dist/types/files.js +0 -1
- package/dist/types/libraries.d.ts +0 -31
- package/dist/types/libraries.js +0 -72
- package/dist/types/parsing.d.ts +0 -3
- package/dist/types/parsing.js +0 -1
- package/dist/utils/addExplicitAnchorIds.d.ts +0 -24
- package/dist/utils/addExplicitAnchorIds.js +0 -416
- package/dist/utils/constants.d.ts +0 -5
- package/dist/utils/constants.js +0 -6
- package/dist/utils/credentials.d.ts +0 -12
- package/dist/utils/credentials.js +0 -120
- package/dist/utils/flattenJsonFiles.d.ts +0 -2
- package/dist/utils/flattenJsonFiles.js +0 -36
- package/dist/utils/gitDiff.d.ts +0 -8
- package/dist/utils/gitDiff.js +0 -34
- package/dist/utils/gt.d.ts +0 -2
- package/dist/utils/gt.js +0 -2
- package/dist/utils/hash.d.ts +0 -6
- package/dist/utils/hash.js +0 -11
- package/dist/utils/headers.d.ts +0 -1
- package/dist/utils/headers.js +0 -14
- package/dist/utils/localizeRelativeAssets.d.ts +0 -8
- package/dist/utils/localizeRelativeAssets.js +0 -166
- package/dist/utils/localizeStaticImports.d.ts +0 -15
- package/dist/utils/localizeStaticImports.js +0 -397
- package/dist/utils/localizeStaticUrls.d.ts +0 -19
- package/dist/utils/localizeStaticUrls.js +0 -450
- package/dist/utils/mintlifyTitleFallback.d.ts +0 -6
- package/dist/utils/mintlifyTitleFallback.js +0 -80
- package/dist/utils/parse/needsCJS.d.ts +0 -20
- package/dist/utils/parse/needsCJS.js +0 -72
- package/dist/utils/persistPostprocessHashes.d.ts +0 -12
- package/dist/utils/persistPostprocessHashes.js +0 -39
- package/dist/utils/processAnchorIds.d.ts +0 -6
- package/dist/utils/processAnchorIds.js +0 -56
- package/dist/utils/processOpenApi.d.ts +0 -8
- package/dist/utils/processOpenApi.js +0 -651
- package/dist/utils/sanitizeFileContent.d.ts +0 -6
- package/dist/utils/sanitizeFileContent.js +0 -29
- package/dist/utils/sharedStaticAssets.d.ts +0 -9
- package/dist/utils/sharedStaticAssets.js +0 -384
- package/dist/utils/validateMdx.d.ts +0 -10
- package/dist/utils/validateMdx.js +0 -25
- package/dist/utils/wrapPlainUrls.d.ts +0 -8
- package/dist/utils/wrapPlainUrls.js +0 -72
- package/dist/workflows/download.d.ts +0 -32
- package/dist/workflows/download.js +0 -131
- package/dist/workflows/enqueue.d.ts +0 -17
- package/dist/workflows/enqueue.js +0 -59
- package/dist/workflows/setupProject.d.ts +0 -13
- package/dist/workflows/setupProject.js +0 -48
- package/dist/workflows/stage.d.ts +0 -18
- package/dist/workflows/stage.js +0 -59
- package/dist/workflows/steps/BranchStep.d.ts +0 -13
- package/dist/workflows/steps/BranchStep.js +0 -161
- package/dist/workflows/steps/DownloadStep.d.ts +0 -19
- package/dist/workflows/steps/DownloadStep.js +0 -131
- package/dist/workflows/steps/EnqueueStep.d.ts +0 -15
- package/dist/workflows/steps/EnqueueStep.js +0 -33
- package/dist/workflows/steps/PollJobsStep.d.ts +0 -31
- package/dist/workflows/steps/PollJobsStep.js +0 -288
- package/dist/workflows/steps/SetupStep.d.ts +0 -16
- package/dist/workflows/steps/SetupStep.js +0 -72
- package/dist/workflows/steps/UploadSourcesStep.d.ts +0 -27
- package/dist/workflows/steps/UploadSourcesStep.js +0 -131
- package/dist/workflows/steps/UploadTranslationsStep.d.ts +0 -22
- package/dist/workflows/steps/UploadTranslationsStep.js +0 -71
- package/dist/workflows/steps/UserEditDiffsStep.d.ts +0 -11
- package/dist/workflows/steps/UserEditDiffsStep.js +0 -30
- package/dist/workflows/steps/WorkflowStep.d.ts +0 -4
- package/dist/workflows/steps/WorkflowStep.js +0 -2
- package/dist/workflows/upload.d.ts +0 -15
- package/dist/workflows/upload.js +0 -47
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import * as t from '@babel/types';
|
|
2
|
-
import traverseModule from '@babel/traverse';
|
|
3
|
-
// Handle CommonJS/ESM interop
|
|
4
|
-
const traverse = traverseModule.default || traverseModule;
|
|
5
|
-
/**
|
|
6
|
-
* Adds the plugin invocation to the vite config file
|
|
7
|
-
* Naive solution: look for an object with a plugins property only inside of a defineConfig call
|
|
8
|
-
*/
|
|
9
|
-
export function addPluginInvocation({ ast, alias, namespaces, }) {
|
|
10
|
-
let addedPlugin = false;
|
|
11
|
-
if (namespaces.length === 0 && !alias) {
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
const pluginInvocation = alias
|
|
15
|
-
? t.callExpression(t.identifier(alias), [])
|
|
16
|
-
: t.callExpression(t.memberExpression(t.identifier(namespaces[0]), t.identifier('vite')), []);
|
|
17
|
-
traverse(ast, {
|
|
18
|
-
CallExpression(path) {
|
|
19
|
-
if (!t.isIdentifier(path.node.callee, { name: 'defineConfig' }) ||
|
|
20
|
-
!path.node.arguments.length ||
|
|
21
|
-
!t.isObjectExpression(path.node.arguments[0])) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
for (const property of path.node.arguments[0].properties) {
|
|
25
|
-
if (!t.isObjectProperty(property) || !isPluginsProperty(property))
|
|
26
|
-
continue;
|
|
27
|
-
if (t.isArrayExpression(property.value)) {
|
|
28
|
-
// Add to array: [react()] -> [react(), gtCompiler()]
|
|
29
|
-
property.value.elements.push(pluginInvocation);
|
|
30
|
-
addedPlugin = true;
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
// Spread the array: someList -> [...someList, gtCompiler()]
|
|
34
|
-
property.value = t.arrayExpression([
|
|
35
|
-
t.spreadElement(property.value),
|
|
36
|
-
pluginInvocation,
|
|
37
|
-
]);
|
|
38
|
-
addedPlugin = true;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
});
|
|
43
|
-
return addedPlugin;
|
|
44
|
-
}
|
|
45
|
-
function isPluginsProperty(node) {
|
|
46
|
-
return (t.isIdentifier(node.key, { name: 'plugins' }) ||
|
|
47
|
-
t.isStringLiteral(node.key, { value: 'plugins' }));
|
|
48
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { ParseResult } from '@babel/parser';
|
|
2
|
-
import * as t from '@babel/types';
|
|
3
|
-
export interface CheckCompilerImportResult {
|
|
4
|
-
hasCompilerImport: boolean;
|
|
5
|
-
alias: string | null;
|
|
6
|
-
namespaces: string[];
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Given the vite config file ast, checks if the @generaltranslation/compiler package is imported.
|
|
10
|
-
* If it is imported, capture any aliases or namespace.
|
|
11
|
-
*
|
|
12
|
-
* Does not handle:
|
|
13
|
-
* - Nested expressions
|
|
14
|
-
*/
|
|
15
|
-
export declare function checkCompilerImport(ast: ParseResult<t.File>): CheckCompilerImportResult;
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import * as t from '@babel/types';
|
|
2
|
-
import traverseModule from '@babel/traverse';
|
|
3
|
-
// Handle CommonJS/ESM interop
|
|
4
|
-
const traverse = traverseModule.default || traverseModule;
|
|
5
|
-
/**
|
|
6
|
-
* Given the vite config file ast, checks if the @generaltranslation/compiler package is imported.
|
|
7
|
-
* If it is imported, capture any aliases or namespace.
|
|
8
|
-
*
|
|
9
|
-
* Does not handle:
|
|
10
|
-
* - Nested expressions
|
|
11
|
-
*/
|
|
12
|
-
export function checkCompilerImport(ast) {
|
|
13
|
-
const result = {
|
|
14
|
-
hasCompilerImport: false,
|
|
15
|
-
alias: null,
|
|
16
|
-
namespaces: [],
|
|
17
|
-
};
|
|
18
|
-
traverse(ast, {
|
|
19
|
-
ImportDeclaration(path) {
|
|
20
|
-
handleImportDeclaration(path, result);
|
|
21
|
-
},
|
|
22
|
-
VariableDeclaration(path) {
|
|
23
|
-
handleVariableDeclaration(path, result);
|
|
24
|
-
},
|
|
25
|
-
});
|
|
26
|
-
return result;
|
|
27
|
-
}
|
|
28
|
-
/* =============================== */
|
|
29
|
-
/* Parsing Functions */
|
|
30
|
-
/* =============================== */
|
|
31
|
-
/**
|
|
32
|
-
* Checks an import declaration for a compiler import
|
|
33
|
-
* @param path - The import declaration path
|
|
34
|
-
* @param result - The result object
|
|
35
|
-
*/
|
|
36
|
-
function handleImportDeclaration(path, result) {
|
|
37
|
-
if (path.node.source.value !== '@generaltranslation/compiler')
|
|
38
|
-
return;
|
|
39
|
-
for (const spec of path.node.specifiers) {
|
|
40
|
-
if (t.isImportSpecifier(spec)) {
|
|
41
|
-
// Handle named import: import { vite as gtCompiler } from '@generaltranslation/compiler'
|
|
42
|
-
if (t.isIdentifier(spec.imported) && spec.imported.name === 'vite') {
|
|
43
|
-
result.hasCompilerImport = true;
|
|
44
|
-
result.alias = spec.local.name;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
// Handle default import: import gtCompiler from '@generaltranslation/compiler'
|
|
49
|
-
// Handle namespace import: import * as gtCompiler from '@generaltranslation/compiler'
|
|
50
|
-
result.hasCompilerImport = true;
|
|
51
|
-
result.namespaces.push(spec.local.name);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Handles a variable declaration for a compiler import
|
|
57
|
-
* @param path - The variable declaration path
|
|
58
|
-
* @param result - The result object
|
|
59
|
-
*/
|
|
60
|
-
function handleVariableDeclaration(path, result) {
|
|
61
|
-
path.node.declarations.forEach((dec) => {
|
|
62
|
-
// Handle destructuring: const { withGTConfig } = require('@generaltranslation/compiler')
|
|
63
|
-
if (t.isCallExpression(dec.init) &&
|
|
64
|
-
t.isIdentifier(dec.init.callee, { name: 'require' }) &&
|
|
65
|
-
t.isStringLiteral(dec.init.arguments[0], {
|
|
66
|
-
value: '@generaltranslation/compiler',
|
|
67
|
-
})) {
|
|
68
|
-
if (t.isIdentifier(dec.id)) {
|
|
69
|
-
// Handle namespace assignment: const gtCompiler = require('@generaltranslation/compiler')
|
|
70
|
-
result.hasCompilerImport = true;
|
|
71
|
-
result.namespaces.push(dec.id.name);
|
|
72
|
-
}
|
|
73
|
-
else if (t.isObjectPattern(dec.id)) {
|
|
74
|
-
// Handle destructuring: const { vite: gtCompiler } = require('@generaltranslation/compiler')
|
|
75
|
-
let foundVite = false;
|
|
76
|
-
const restElements = [];
|
|
77
|
-
for (const prop of dec.id.properties) {
|
|
78
|
-
if (t.isObjectProperty(prop) &&
|
|
79
|
-
t.isIdentifier(prop.key) &&
|
|
80
|
-
t.isIdentifier(prop.value) &&
|
|
81
|
-
prop.key.name === 'vite') {
|
|
82
|
-
// Handle destructing alias assignment: const { vite: gtCompiler } = require('@generaltranslation/compiler')
|
|
83
|
-
result.hasCompilerImport = true;
|
|
84
|
-
result.alias = prop.value.name;
|
|
85
|
-
foundVite = true;
|
|
86
|
-
break;
|
|
87
|
-
}
|
|
88
|
-
else if (t.isRestElement(prop) && t.isIdentifier(prop.argument)) {
|
|
89
|
-
// Track list of rest elements
|
|
90
|
-
restElements.push(prop.argument.name);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
// Handle destructuring rest elements: const { ...some, b, ...others, d } = require('@generaltranslation/compiler')
|
|
94
|
-
if (!foundVite && restElements.length > 0) {
|
|
95
|
-
result.hasCompilerImport = true;
|
|
96
|
-
result.namespaces.push(...restElements);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
else if (t.isMemberExpression(dec.init) &&
|
|
101
|
-
t.isCallExpression(dec.init.object) &&
|
|
102
|
-
t.isIdentifier(dec.init.object.callee, { name: 'require' }) &&
|
|
103
|
-
t.isStringLiteral(dec.init.object.arguments[0], {
|
|
104
|
-
value: '@generaltranslation/compiler',
|
|
105
|
-
}) &&
|
|
106
|
-
t.isIdentifier(dec.init.property, { name: 'vite' }) &&
|
|
107
|
-
t.isIdentifier(dec.id)) {
|
|
108
|
-
// Handle member access: const gtCompiler = require('@generaltranslation/compiler').vite
|
|
109
|
-
result.hasCompilerImport = true;
|
|
110
|
-
result.alias = dec.id.name;
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { ParseResult } from '@babel/parser';
|
|
2
|
-
import * as t from '@babel/types';
|
|
3
|
-
/**
|
|
4
|
-
* Checks if the given AST is exporting the gtCompiler plugin
|
|
5
|
-
*
|
|
6
|
-
* Naive check: see if the plugin has been invoked anywhere in the file
|
|
7
|
-
*/
|
|
8
|
-
export declare function checkPluginInvocation({ ast, alias, namespaces, }: {
|
|
9
|
-
ast: ParseResult<t.File>;
|
|
10
|
-
alias: string | null;
|
|
11
|
-
namespaces: string[];
|
|
12
|
-
}): boolean;
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import * as t from '@babel/types';
|
|
2
|
-
import traverseModule from '@babel/traverse';
|
|
3
|
-
// Handle CommonJS/ESM interop
|
|
4
|
-
const traverse = traverseModule.default || traverseModule;
|
|
5
|
-
/**
|
|
6
|
-
* Checks if the given AST is exporting the gtCompiler plugin
|
|
7
|
-
*
|
|
8
|
-
* Naive check: see if the plugin has been invoked anywhere in the file
|
|
9
|
-
*/
|
|
10
|
-
export function checkPluginInvocation({ ast, alias, namespaces, }) {
|
|
11
|
-
let result = false;
|
|
12
|
-
traverse(ast, {
|
|
13
|
-
CallExpression(path) {
|
|
14
|
-
// Handle: gtCompiler()
|
|
15
|
-
if (!alias)
|
|
16
|
-
return;
|
|
17
|
-
if (t.isIdentifier(path.node.callee, { name: alias })) {
|
|
18
|
-
result = true;
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
MemberExpression(path) {
|
|
22
|
-
// Handle: gtCompiler.vite()
|
|
23
|
-
if (t.isIdentifier(path.node.object) &&
|
|
24
|
-
namespaces.includes(path.node.object.name) &&
|
|
25
|
-
t.isCallExpression(path.parent) &&
|
|
26
|
-
t.isIdentifier(path.node.property, { name: 'vite' })) {
|
|
27
|
-
result = true;
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
return result;
|
|
32
|
-
}
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import os from 'os';
|
|
4
|
-
import { build } from 'esbuild';
|
|
5
|
-
import flattenDictionary from '../utils/flattenDictionary.js';
|
|
6
|
-
import loadJSON from '../../fs/loadJSON.js';
|
|
7
|
-
import { hashSource } from 'generaltranslation/id';
|
|
8
|
-
import getEntryAndMetadata from '../utils/getEntryAndMetadata.js';
|
|
9
|
-
import { logger } from '../../console/logger.js';
|
|
10
|
-
import { randomUUID } from 'node:crypto';
|
|
11
|
-
import { isValidIcu } from '../jsx/evaluateJsx.js';
|
|
12
|
-
import { warnInvalidIcuSync, warnInvalidMaxCharsSync, } from '../../console/index.js';
|
|
13
|
-
import { exitSync } from '../../console/logging.js';
|
|
14
|
-
export async function createDictionaryUpdates(dictionaryPath, errors, warnings, esbuildConfig) {
|
|
15
|
-
let dictionary;
|
|
16
|
-
// ---- HANDLE JSON STRING DICTIONARY ----- //
|
|
17
|
-
if (dictionaryPath.endsWith('.json')) {
|
|
18
|
-
dictionary = flattenDictionary(loadJSON(dictionaryPath) || {});
|
|
19
|
-
}
|
|
20
|
-
// ----- HANDLE REACT DICTIONARY ---- //
|
|
21
|
-
else {
|
|
22
|
-
const result = await build({
|
|
23
|
-
...esbuildConfig,
|
|
24
|
-
entryPoints: [dictionaryPath],
|
|
25
|
-
write: false,
|
|
26
|
-
});
|
|
27
|
-
const bundledCode = result.outputFiles[0].text;
|
|
28
|
-
const tempFilePath = path.join(os.tmpdir(), `bundled-dictionary-${randomUUID()}.js`);
|
|
29
|
-
await fs.promises.writeFile(tempFilePath, bundledCode);
|
|
30
|
-
// Load the module using dynamic import
|
|
31
|
-
let dictionaryModule;
|
|
32
|
-
try {
|
|
33
|
-
dictionaryModule = await import(tempFilePath);
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
logger.error(`Failed to load the bundled dictionary code: ${error}`);
|
|
37
|
-
exitSync(1);
|
|
38
|
-
}
|
|
39
|
-
finally {
|
|
40
|
-
// Clean up the temporary file
|
|
41
|
-
await fs.promises.unlink(tempFilePath);
|
|
42
|
-
}
|
|
43
|
-
const unwrappedDictionary = unwrapDictionaryModule(dictionaryModule);
|
|
44
|
-
dictionary = flattenDictionary(unwrappedDictionary);
|
|
45
|
-
}
|
|
46
|
-
// ----- CREATE PARTIAL UPDATES ----- //
|
|
47
|
-
const updates = [];
|
|
48
|
-
for (const id of Object.keys(dictionary)) {
|
|
49
|
-
const { entry, metadata: props, // context, etc.
|
|
50
|
-
} = getEntryAndMetadata(dictionary[id]);
|
|
51
|
-
// Validate ICU
|
|
52
|
-
const { isValid, error } = isValidIcu(entry);
|
|
53
|
-
if (!isValid) {
|
|
54
|
-
warnings.push(warnInvalidIcuSync(dictionaryPath, entry, error ?? 'Unknown error'));
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
// Validate maxChars
|
|
58
|
-
if (props?.$maxChars &&
|
|
59
|
-
(isNaN(props.$maxChars) || !Number.isInteger(props.$maxChars))) {
|
|
60
|
-
errors.push(warnInvalidMaxCharsSync(dictionaryPath, String(props.$maxChars), id));
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
// Map $context to context
|
|
64
|
-
const context = props?.$context;
|
|
65
|
-
const maxChars = props?.$maxChars;
|
|
66
|
-
const metadata = {
|
|
67
|
-
id,
|
|
68
|
-
...(context && { context }),
|
|
69
|
-
...(maxChars != null && { maxChars: Math.abs(maxChars) }),
|
|
70
|
-
// This hash isn't actually used by the GT API, just for consistency sake
|
|
71
|
-
hash: hashSource({
|
|
72
|
-
source: entry,
|
|
73
|
-
...(context && { context }),
|
|
74
|
-
...(id && { id }),
|
|
75
|
-
...(maxChars != null && { maxChars: Math.abs(maxChars) }),
|
|
76
|
-
dataFormat: 'ICU',
|
|
77
|
-
}),
|
|
78
|
-
};
|
|
79
|
-
updates.push({
|
|
80
|
-
dataFormat: 'ICU',
|
|
81
|
-
source: entry,
|
|
82
|
-
metadata,
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
return updates;
|
|
86
|
-
}
|
|
87
|
-
function unwrapDictionaryModule(mod) {
|
|
88
|
-
let current = mod;
|
|
89
|
-
// Keep unwrapping until we get to the actual dictionary
|
|
90
|
-
while (current && typeof current === 'object') {
|
|
91
|
-
const keys = Object.keys(current);
|
|
92
|
-
// Check if this looks like a module namespace object (has only module-related keys)
|
|
93
|
-
const isModuleNamespace = keys.every((key) => key === 'default' || key === 'module.exports' || key === '__esModule');
|
|
94
|
-
// Check if this is a module with named exports (has 'dictionary' export)
|
|
95
|
-
// Only check for named exports if it's NOT a pure module namespace
|
|
96
|
-
const hasNamedDictionary = !isModuleNamespace &&
|
|
97
|
-
'dictionary' in current &&
|
|
98
|
-
current.dictionary &&
|
|
99
|
-
typeof current.dictionary === 'object' &&
|
|
100
|
-
!Array.isArray(current.dictionary);
|
|
101
|
-
if (hasNamedDictionary) {
|
|
102
|
-
// If there's a named 'dictionary' export, use that
|
|
103
|
-
return current.dictionary;
|
|
104
|
-
}
|
|
105
|
-
else if (isModuleNamespace) {
|
|
106
|
-
// Try to get the default export
|
|
107
|
-
if ('default' in current) {
|
|
108
|
-
let result = current.default;
|
|
109
|
-
// If the default export is a function (getter), call it
|
|
110
|
-
if (typeof result === 'function') {
|
|
111
|
-
try {
|
|
112
|
-
result = result();
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
// If calling fails, break the loop
|
|
116
|
-
break;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// If we have a valid object, check if we should continue unwrapping
|
|
120
|
-
if (result && typeof result === 'object' && !Array.isArray(result)) {
|
|
121
|
-
const resultKeys = Object.keys(result);
|
|
122
|
-
// Only continue unwrapping if this looks like a getter-based module layer
|
|
123
|
-
// We should NOT continue if this is just a user dictionary with a 'default' property
|
|
124
|
-
const hasGetterProperties = resultKeys.some((key) => {
|
|
125
|
-
try {
|
|
126
|
-
const descriptor = Object.getOwnPropertyDescriptor(result, key);
|
|
127
|
-
return descriptor && typeof descriptor.get === 'function';
|
|
128
|
-
}
|
|
129
|
-
catch {
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
if (hasGetterProperties) {
|
|
134
|
-
current = result;
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
// This is the actual dictionary, return it
|
|
139
|
-
return result;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
// Try module.exports as fallback
|
|
144
|
-
if ('module.exports' in current) {
|
|
145
|
-
let result = current['module.exports'];
|
|
146
|
-
if (typeof result === 'function') {
|
|
147
|
-
try {
|
|
148
|
-
result = result();
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
151
|
-
// If calling fails, break the loop
|
|
152
|
-
break;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
if (result && typeof result === 'object' && !Array.isArray(result)) {
|
|
156
|
-
const resultKeys = Object.keys(result);
|
|
157
|
-
// Only continue unwrapping if this looks like a getter-based module layer
|
|
158
|
-
// We should NOT continue if this is just a user dictionary with a 'default' property
|
|
159
|
-
const hasGetterProperties = resultKeys.some((key) => {
|
|
160
|
-
try {
|
|
161
|
-
const descriptor = Object.getOwnPropertyDescriptor(result, key);
|
|
162
|
-
return descriptor && typeof descriptor.get === 'function';
|
|
163
|
-
}
|
|
164
|
-
catch {
|
|
165
|
-
return false;
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
if (hasGetterProperties) {
|
|
169
|
-
current = result;
|
|
170
|
-
continue;
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
// This is the actual dictionary, return it
|
|
174
|
-
return result;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
// If we can't unwrap further, break
|
|
179
|
-
break;
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
// This appears to be the actual dictionary object, not a module wrapper
|
|
183
|
-
break;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
return current || {};
|
|
187
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Updates } from '../../types/index.js';
|
|
2
|
-
import type { ParsingConfigOptions } from '../../types/parsing.js';
|
|
3
|
-
import { GTLibrary } from '../../types/libraries.js';
|
|
4
|
-
export declare function createInlineUpdates(pkg: GTLibrary, validate: boolean, filePatterns: string[] | undefined, parsingOptions: ParsingConfigOptions): Promise<{
|
|
5
|
-
updates: Updates;
|
|
6
|
-
errors: string[];
|
|
7
|
-
warnings: string[];
|
|
8
|
-
}>;
|
|
9
|
-
/**
|
|
10
|
-
* Dedupe entries
|
|
11
|
-
*/
|
|
12
|
-
declare function dedupeUpdates(updates: Updates): void;
|
|
13
|
-
export { dedupeUpdates as _test_dedupeUpdates };
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import { parse } from '@babel/parser';
|
|
3
|
-
import { hashSource, hashString } from 'generaltranslation/id';
|
|
4
|
-
import { parseTranslationComponent } from '../jsx/utils/jsxParsing/parseJsx.js';
|
|
5
|
-
import { parseStrings } from '../jsx/utils/parseStringFunction.js';
|
|
6
|
-
import { logger } from '../../console/logger.js';
|
|
7
|
-
import { matchFiles } from '../../fs/matchFiles.js';
|
|
8
|
-
import { DEFAULT_SRC_PATTERNS } from '../../config/generateSettings.js';
|
|
9
|
-
import { getPathsAndAliases } from '../jsx/utils/getPathsAndAliases.js';
|
|
10
|
-
import { GT_LIBRARIES_UPSTREAM, REACT_LIBRARIES, } from '../../types/libraries.js';
|
|
11
|
-
export async function createInlineUpdates(pkg, validate, filePatterns, parsingOptions) {
|
|
12
|
-
const updates = [];
|
|
13
|
-
const errors = [];
|
|
14
|
-
const warnings = new Set();
|
|
15
|
-
const pkgs = getUpstreamPackages(pkg);
|
|
16
|
-
// Use the provided app directory or default to the current directory
|
|
17
|
-
const files = matchFiles(process.cwd(), filePatterns || DEFAULT_SRC_PATTERNS);
|
|
18
|
-
for (const file of files) {
|
|
19
|
-
const code = await fs.promises.readFile(file, 'utf8');
|
|
20
|
-
let ast;
|
|
21
|
-
try {
|
|
22
|
-
ast = parse(code, {
|
|
23
|
-
sourceType: 'module',
|
|
24
|
-
plugins: ['jsx', 'typescript'],
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
catch (error) {
|
|
28
|
-
logger.error(`Error parsing file ${file}: ${error}`);
|
|
29
|
-
continue;
|
|
30
|
-
}
|
|
31
|
-
// First pass: collect imports and process translation functions
|
|
32
|
-
const { importAliases, inlineTranslationPaths, translationComponentPaths } = getPathsAndAliases(ast, pkgs);
|
|
33
|
-
// Process translation functions asynchronously
|
|
34
|
-
for (const { localName: name, originalName, path, } of inlineTranslationPaths) {
|
|
35
|
-
parseStrings(name, originalName, path, {
|
|
36
|
-
parsingOptions,
|
|
37
|
-
file,
|
|
38
|
-
ignoreInlineMetadata: false,
|
|
39
|
-
ignoreDynamicContent: false,
|
|
40
|
-
ignoreInvalidIcu: false,
|
|
41
|
-
ignoreInlineListContent: false,
|
|
42
|
-
}, { updates, errors, warnings });
|
|
43
|
-
}
|
|
44
|
-
// Parse <T> components
|
|
45
|
-
if (REACT_LIBRARIES.includes(pkg)) {
|
|
46
|
-
for (const { localName, path } of translationComponentPaths) {
|
|
47
|
-
parseTranslationComponent({
|
|
48
|
-
originalName: localName,
|
|
49
|
-
localName,
|
|
50
|
-
path,
|
|
51
|
-
updates,
|
|
52
|
-
config: {
|
|
53
|
-
importAliases,
|
|
54
|
-
parsingOptions,
|
|
55
|
-
pkgs,
|
|
56
|
-
file,
|
|
57
|
-
},
|
|
58
|
-
output: {
|
|
59
|
-
errors,
|
|
60
|
-
warnings,
|
|
61
|
-
unwrappedExpressions: [],
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
// Post processing steps:
|
|
68
|
-
await calculateHashes(updates);
|
|
69
|
-
dedupeUpdates(updates);
|
|
70
|
-
linkStaticUpdates(updates);
|
|
71
|
-
return { updates, errors, warnings: [...warnings] };
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Given a package name, return the upstream packages that it depends on
|
|
75
|
-
* @param pkg - The package name
|
|
76
|
-
* @returns The upstream packages that the package depends on
|
|
77
|
-
*/
|
|
78
|
-
function getUpstreamPackages(pkg) {
|
|
79
|
-
return GT_LIBRARIES_UPSTREAM[pkg];
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Calculate hashes
|
|
83
|
-
*/
|
|
84
|
-
async function calculateHashes(updates) {
|
|
85
|
-
// parallel calculation of hashes
|
|
86
|
-
await Promise.all(updates.map(async (update) => {
|
|
87
|
-
const hash = hashSource({
|
|
88
|
-
source: update.source,
|
|
89
|
-
...(update.metadata.context && { context: update.metadata.context }),
|
|
90
|
-
...(update.metadata.id && { id: update.metadata.id }),
|
|
91
|
-
...(update.metadata.maxChars != null && {
|
|
92
|
-
maxChars: update.metadata.maxChars,
|
|
93
|
-
}),
|
|
94
|
-
dataFormat: update.dataFormat,
|
|
95
|
-
});
|
|
96
|
-
update.metadata.hash = hash;
|
|
97
|
-
}));
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Dedupe entries
|
|
101
|
-
*/
|
|
102
|
-
function dedupeUpdates(updates) {
|
|
103
|
-
const mergedByHash = new Map();
|
|
104
|
-
const noHashUpdates = [];
|
|
105
|
-
for (const update of updates) {
|
|
106
|
-
const hash = update.metadata.hash;
|
|
107
|
-
if (!hash) {
|
|
108
|
-
noHashUpdates.push(update);
|
|
109
|
-
continue;
|
|
110
|
-
}
|
|
111
|
-
const existing = mergedByHash.get(hash);
|
|
112
|
-
if (!existing) {
|
|
113
|
-
mergedByHash.set(hash, update);
|
|
114
|
-
continue;
|
|
115
|
-
}
|
|
116
|
-
const existingPaths = Array.isArray(existing.metadata.filePaths)
|
|
117
|
-
? existing.metadata.filePaths.slice()
|
|
118
|
-
: [];
|
|
119
|
-
const newPaths = Array.isArray(update.metadata.filePaths)
|
|
120
|
-
? update.metadata.filePaths
|
|
121
|
-
: [];
|
|
122
|
-
for (const p of newPaths) {
|
|
123
|
-
if (!existingPaths.includes(p)) {
|
|
124
|
-
existingPaths.push(p);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
if (existingPaths.length) {
|
|
128
|
-
existing.metadata.filePaths = existingPaths;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
const mergedUpdates = [...mergedByHash.values(), ...noHashUpdates];
|
|
132
|
-
updates.splice(0, updates.length, ...mergedUpdates);
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Mark static updates as the related by attaching a shared id to static content
|
|
136
|
-
* Id is calculated as the hash of the static children's combined hashes
|
|
137
|
-
*/
|
|
138
|
-
function linkStaticUpdates(updates) {
|
|
139
|
-
// construct map of temporary static ids to updates
|
|
140
|
-
const temporaryStaticIdToUpdates = updates.reduce((acc, update) => {
|
|
141
|
-
if (update.metadata.staticId) {
|
|
142
|
-
if (!acc[update.metadata.staticId]) {
|
|
143
|
-
acc[update.metadata.staticId] = [];
|
|
144
|
-
}
|
|
145
|
-
acc[update.metadata.staticId].push(update);
|
|
146
|
-
}
|
|
147
|
-
return acc;
|
|
148
|
-
}, {});
|
|
149
|
-
// Calculate shared static ids
|
|
150
|
-
Object.values(temporaryStaticIdToUpdates).forEach((staticUpdates) => {
|
|
151
|
-
const hashes = staticUpdates
|
|
152
|
-
.map((update) => update.metadata.hash)
|
|
153
|
-
.sort()
|
|
154
|
-
.join('-');
|
|
155
|
-
const sharedStaticId = hashString(hashes);
|
|
156
|
-
staticUpdates.forEach((update) => {
|
|
157
|
-
update.metadata.staticId = sharedStaticId;
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
export { dedupeUpdates as _test_dedupeUpdates };
|
|
@@ -1,20 +0,0 @@
|
|
|
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;
|