@generaltranslation/compiler 1.3.27 → 1.3.30

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.
Files changed (99) hide show
  1. package/dist/config.d.ts +12 -7
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js.map +1 -1
  4. package/dist/index.d.ts +2 -2
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +61 -6
  7. package/dist/index.js.map +1 -1
  8. package/dist/passes/basePass.d.ts.map +1 -1
  9. package/dist/passes/basePass.js +9 -10
  10. package/dist/passes/basePass.js.map +1 -1
  11. package/dist/processing/collection/processCallExpression.js +8 -6
  12. package/dist/processing/collection/processCallExpression.js.map +1 -1
  13. package/dist/processing/collection/processTaggedTemplateExpression.d.ts +1 -1
  14. package/dist/processing/collection/processTaggedTemplateExpression.js +1 -1
  15. package/dist/processing/collection/processTaggedTemplateExpression.js.map +1 -1
  16. package/dist/processing/jsx-insertion/processCallExpression.js.map +1 -1
  17. package/dist/processing/jsx-insertion/processProgram.d.ts.map +1 -1
  18. package/dist/processing/jsx-insertion/processProgram.js +1 -1
  19. package/dist/processing/jsx-insertion/processProgram.js.map +1 -1
  20. package/dist/processing/macro-expansion/processProgram.js +1 -1
  21. package/dist/processing/macro-expansion/processProgram.js.map +1 -1
  22. package/dist/processing/macro-expansion/processTaggedTemplateExpression.d.ts +1 -1
  23. package/dist/processing/macro-expansion/processTaggedTemplateExpression.js +1 -1
  24. package/dist/processing/macro-expansion/processTaggedTemplateExpression.js.map +1 -1
  25. package/dist/processing/processFunctionDeclaration.js +1 -1
  26. package/dist/processing/processFunctionExpression.js +1 -1
  27. package/dist/processing/runtime-translate/processProgram.d.ts.map +1 -1
  28. package/dist/processing/runtime-translate/processProgram.js +2 -1
  29. package/dist/processing/runtime-translate/processProgram.js.map +1 -1
  30. package/dist/state/StringCollector.d.ts +3 -3
  31. package/dist/state/StringCollector.d.ts.map +1 -1
  32. package/dist/state/StringCollector.js.map +1 -1
  33. package/dist/state/utils/initializeState.d.ts.map +1 -1
  34. package/dist/state/utils/initializeState.js +8 -5
  35. package/dist/state/utils/initializeState.js.map +1 -1
  36. package/dist/transform/injection/injectCallbackDeclaratorFunctionParameters.d.ts +1 -1
  37. package/dist/transform/injection/injectCallbackDeclaratorFunctionParameters.js +6 -5
  38. package/dist/transform/injection/injectCallbackDeclaratorFunctionParameters.js.map +1 -1
  39. package/dist/transform/injection/injectHashIntoTranslationOptions.d.ts.map +1 -1
  40. package/dist/transform/injection/injectHashIntoTranslationOptions.js +1 -0
  41. package/dist/transform/injection/injectHashIntoTranslationOptions.js.map +1 -1
  42. package/dist/transform/injection/injectTComponentParameters.d.ts.map +1 -1
  43. package/dist/transform/injection/injectTComponentParameters.js +2 -1
  44. package/dist/transform/injection/injectTComponentParameters.js.map +1 -1
  45. package/dist/transform/jsx-children/constructJsxChildren.d.ts +1 -0
  46. package/dist/transform/jsx-children/constructJsxChildren.d.ts.map +1 -1
  47. package/dist/transform/jsx-children/constructJsxChildren.js +17 -5
  48. package/dist/transform/jsx-children/constructJsxChildren.js.map +1 -1
  49. package/dist/transform/jsx-insertion/injectJsxInsertionImport.d.ts +2 -2
  50. package/dist/transform/jsx-insertion/injectJsxInsertionImport.d.ts.map +1 -1
  51. package/dist/transform/jsx-insertion/injectJsxInsertionImport.js +4 -3
  52. package/dist/transform/jsx-insertion/injectJsxInsertionImport.js.map +1 -1
  53. package/dist/transform/macro-expansion/injectMacroImport.d.ts +2 -2
  54. package/dist/transform/macro-expansion/injectMacroImport.d.ts.map +1 -1
  55. package/dist/transform/macro-expansion/injectMacroImport.js +4 -3
  56. package/dist/transform/macro-expansion/injectMacroImport.js.map +1 -1
  57. package/dist/transform/registration/callbacks/registerUseGTCallback.d.ts.map +1 -1
  58. package/dist/transform/registration/callbacks/registerUseGTCallback.js +0 -1
  59. package/dist/transform/registration/callbacks/registerUseGTCallback.js.map +1 -1
  60. package/dist/transform/registration/registerStandaloneTranslation.d.ts.map +1 -1
  61. package/dist/transform/registration/registerStandaloneTranslation.js +0 -1
  62. package/dist/transform/registration/registerStandaloneTranslation.js.map +1 -1
  63. package/dist/transform/runtime-translate/injectRuntimeTranslateImport.d.ts +3 -2
  64. package/dist/transform/runtime-translate/injectRuntimeTranslateImport.d.ts.map +1 -1
  65. package/dist/transform/runtime-translate/injectRuntimeTranslateImport.js +4 -3
  66. package/dist/transform/runtime-translate/injectRuntimeTranslateImport.js.map +1 -1
  67. package/dist/transform/validation/validateTranslationComponentArgs.d.ts +2 -0
  68. package/dist/transform/validation/validateTranslationComponentArgs.d.ts.map +1 -1
  69. package/dist/transform/validation/validateTranslationComponentArgs.js +4 -3
  70. package/dist/transform/validation/validateTranslationComponentArgs.js.map +1 -1
  71. package/dist/transform/validation/validateTranslationFunction.d.ts.map +1 -1
  72. package/dist/transform/validation/validateTranslationFunction.js +3 -3
  73. package/dist/transform/validation/validateTranslationFunction.js.map +1 -1
  74. package/dist/utils/calculateHash.d.ts +1 -2
  75. package/dist/utils/calculateHash.d.ts.map +1 -1
  76. package/dist/utils/calculateHash.js +1 -3
  77. package/dist/utils/calculateHash.js.map +1 -1
  78. package/dist/utils/constants/gt/constants.d.ts +1 -5
  79. package/dist/utils/constants/gt/constants.d.ts.map +1 -1
  80. package/dist/utils/constants/gt/constants.js +1 -5
  81. package/dist/utils/constants/gt/constants.js.map +1 -1
  82. package/dist/utils/constants/gt/helpers.d.ts +2 -1
  83. package/dist/utils/constants/gt/helpers.d.ts.map +1 -1
  84. package/dist/utils/constants/gt/helpers.js +15 -5
  85. package/dist/utils/constants/gt/helpers.js.map +1 -1
  86. package/dist/utils/constants/resolveIdentifier/isGTComponent.d.ts +1 -1
  87. package/dist/utils/constants/resolveIdentifier/isGTComponent.d.ts.map +1 -1
  88. package/dist/utils/constants/resolveIdentifier/isGTComponent.js +2 -3
  89. package/dist/utils/constants/resolveIdentifier/isGTComponent.js.map +1 -1
  90. package/dist/utils/parsing/isStringTranslationTaggedTemplate.d.ts +1 -1
  91. package/dist/utils/parsing/isStringTranslationTaggedTemplate.js +3 -3
  92. package/dist/utils/parsing/isStringTranslationTaggedTemplate.js.map +1 -1
  93. package/package.json +3 -3
  94. package/dist/processing/index.d.ts +0 -15
  95. package/dist/processing/index.d.ts.map +0 -1
  96. package/dist/processing/index.js +0 -29
  97. package/dist/transform/jsx-children/index.d.ts +0 -2
  98. package/dist/transform/jsx-children/index.d.ts.map +0 -1
  99. package/dist/transform/jsx-children/index.js +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"validateTranslationComponentArgs.js","names":["t","validateChildrenPropertyFromObjectExpression","constructJsxChildren","getObjectPropertyFromObjectExpression","validateExpressionIsStringLiteral","validateExpressionIsNumericLiteral","validateExpressionIsBooleanLiteral"],"sources":["../../../src/transform/validation/validateTranslationComponentArgs.ts"],"sourcesContent":["import { TransformState } from '../../state/types';\nimport { GT_COMPONENT_TYPES } from '../../utils/constants/gt/constants';\nimport * as t from '@babel/types';\nimport type { NodePath } from '@babel/traverse';\nimport { getObjectPropertyFromObjectExpression } from '../../utils/parsing/getObjectPropertyFromObjectExpression';\nimport { validateExpressionIsStringLiteral } from '../../utils/validation/validateExpressionIsStringLiteral';\nimport type { JsxChildren } from '@generaltranslation/format/types';\nimport { constructJsxChildren } from '../jsx-children';\nimport { validateChildrenPropertyFromObjectExpression } from '../../utils/validation/validateChildrenFromObjectExpression';\nimport { validateExpressionIsNumericLiteral } from '../../utils/validation/validateExpressionIsNumericLiteral';\nimport { validateExpressionIsBooleanLiteral } from '../../utils/validation/validateExpressionIsBooleanLiteral';\nimport { validateDerive } from './validateTranslationFunction';\nimport { JsxValidationError } from '../jsx-children/errors';\n/**\n * Given a translation component, validate the arguments\n */\nexport function validateTranslationComponentArgs(\n callExprPath: NodePath<t.CallExpression>,\n canonicalName: string,\n state: TransformState\n): {\n errors: string[];\n _hash?: string;\n id?: string;\n context?: string;\n maxChars?: number;\n requiresReview?: boolean;\n children?: JsxChildren;\n hasDeriveContext?: boolean;\n} {\n const callExpr = callExprPath.node;\n // Check that there are at least 2 arguments (identifier, args)\n if (callExpr.arguments.length < 2) {\n const errors = [\n 'Translation component must have at least 2 arguments (identifier, args)',\n ];\n return { errors };\n }\n\n // Get the component args\n const args = callExpr.arguments[1];\n if (!t.isObjectExpression(args)) {\n const errors = [\n 'Translation component must have an object expression as the second argument',\n ];\n return { errors };\n }\n const argsPath = callExprPath.get('arguments')[1];\n if (!argsPath?.isObjectExpression()) {\n const errors = [\n 'Translation component must have an object expression as the second argument',\n ];\n return { errors };\n }\n\n // Map to appropriate validation function\n switch (canonicalName) {\n case GT_COMPONENT_TYPES.T:\n case GT_COMPONENT_TYPES.GtInternalTranslateJsx:\n return validateTComponentArgs(\n argsPath as NodePath<t.ObjectExpression>,\n state\n );\n default:\n const errors = [\n `Invalid translation component: ${canonicalName}. You likely passed a non-translation component to validateTranslationComponentArgs`,\n ];\n return { errors };\n }\n}\n\n/* =============================== */\n/* Helper Functions */\n/* =============================== */\n\nfunction validateTComponentArgs(\n argsPath: NodePath<t.ObjectExpression>,\n state: TransformState\n): {\n errors: string[];\n _hash?: string;\n id?: string;\n context?: string;\n maxChars?: number;\n requiresReview?: boolean;\n children?: JsxChildren;\n hasDeriveContext?: boolean;\n} {\n const errors: string[] = [];\n const args = argsPath.node;\n\n // Validate id\n const idValidation = validateStringProperty(args, 'id');\n errors.push(...idValidation.errors);\n const id = idValidation.value;\n\n // Validate context (with derive fallback)\n const contextValidation = validateStringProperty(args, 'context', state);\n errors.push(...contextValidation.errors);\n const context = contextValidation.value;\n // Validate maxChars\n const maxCharsValidation = validateNumberProperty(args, 'maxChars');\n errors.push(...maxCharsValidation.errors);\n const maxChars = maxCharsValidation.value;\n\n // Validate requiresReview\n const requiresReviewValidation = validateBooleanProperty(\n args,\n 'requiresReview'\n );\n errors.push(...requiresReviewValidation.errors);\n const requiresReview = requiresReviewValidation.value;\n\n // Validate hash\n const hashValidation = validateStringProperty(args, '_hash');\n errors.push(...hashValidation.errors);\n const _hash = hashValidation.value;\n\n // Validate children\n const childrenValidation = validateChildrenProperty(argsPath, state);\n errors.push(...childrenValidation.errors);\n const children = childrenValidation.value;\n\n const hasDeriveContext =\n contextValidation.hasDeriveExpression || childrenValidation.hasAutoderive;\n\n return {\n errors,\n id,\n context,\n _hash,\n maxChars,\n requiresReview,\n children,\n hasDeriveContext,\n };\n}\n\n/**\n * Validate that the children property is a string literal\n */\nexport function validateChildrenProperty(\n argsPath: NodePath<t.ObjectExpression>,\n state: TransformState\n): {\n errors: string[];\n value?: JsxChildren;\n hasAutoderive?: boolean;\n} {\n const errors: string[] = [];\n\n // Get the children property\n const childrenValidation =\n validateChildrenPropertyFromObjectExpression(argsPath);\n if (childrenValidation.errors.length > 0) {\n errors.push(...childrenValidation.errors);\n return { errors };\n }\n const children = childrenValidation.value;\n if (children === undefined) {\n errors.push(`The <${GT_COMPONENT_TYPES.T}> component must have children`);\n return { errors };\n }\n\n // constructJsxChildren now returns JsxValidationError[]\n const validation = constructJsxChildren(children, state);\n\n // Autoderive: filter out dynamic-content errors\n let hasAutoderive = false;\n let filteredErrors: JsxValidationError[] = validation.errors;\n if (state.settings.autoderive.jsx) {\n filteredErrors = validation.errors.filter(\n (e) => e.type !== 'dynamic-content'\n );\n hasAutoderive = filteredErrors.length < validation.errors.length;\n }\n\n // Convert structured errors back to strings\n errors.push(...filteredErrors.map((e) => e.message));\n const value = validation.value;\n\n return { errors, value, hasAutoderive };\n}\n\n// String Literal Functions\n\n/**\n * Will validate and retrieve property from object expression and also try prefixing with a $\n *\n */\nfunction validateStringProperty(\n args: t.ObjectExpression,\n name: string,\n state?: TransformState\n): {\n errors: string[];\n value?: string;\n hasDeriveExpression?: boolean;\n} {\n const errors: string[] = [];\n\n // Get the property\n const property =\n getObjectPropertyFromObjectExpression(args, name) ||\n getObjectPropertyFromObjectExpression(args, '$' + name);\n if (!property) {\n return { errors };\n }\n\n // Validate property\n const validation = validateObjectPropertyIsStringLiteral(property, name);\n if (validation.errors.length === 0) {\n return { errors, value: validation.value };\n }\n\n // String validation failed — check if it's a valid derive() expression\n if (state && t.isObjectProperty(property) && t.isExpression(property.value)) {\n const deriveErrors: string[] = [];\n validateDerive(property.value, state, deriveErrors);\n if (deriveErrors.length === 0) {\n return { errors, hasDeriveExpression: true };\n }\n }\n\n // Neither string nor derive — return original errors\n errors.push(...validation.errors);\n return { errors };\n}\n\n/**\n * Validate that an object property is a string literal\n */\nfunction validateObjectPropertyIsStringLiteral(\n arg: t.SpreadElement | t.ObjectMethod | t.ObjectProperty,\n name: string\n): {\n errors: string[];\n value?: string;\n} {\n const errors: string[] = [];\n\n // Validate the property is a string literal from an expression\n if (\n !t.isObjectProperty(arg) ||\n !t.isExpression(arg.value) ||\n !validateExpressionIsStringLiteral(arg.value)\n ) {\n errors.push(\n `The <${GT_COMPONENT_TYPES.T}> component must have a string literal in its ${name} field`\n );\n return { errors };\n }\n\n // Get the string literal\n const value = getStringLiteralFromExpression(arg.value);\n return { errors, value };\n}\n\n/**\n * Given an expression, return the string literal (throws an error if not a string literal)\n */\nfunction getStringLiteralFromExpression(\n expr: t.Expression\n): string | undefined {\n if (t.isStringLiteral(expr)) {\n return expr.value;\n }\n if (t.isTemplateLiteral(expr)) {\n if (expr.expressions.length === 0) {\n return expr.quasis[0]?.value.cooked || '';\n }\n }\n}\n\n// Number Literal Functions\n\n/**\n * Will validate and retrieve property from object expression and also try prefixing with a $\n */\nfunction validateNumberProperty(\n args: t.ObjectExpression,\n name: string\n): {\n errors: string[];\n value?: number;\n} {\n const errors: string[] = [];\n\n // Get the property\n const property =\n getObjectPropertyFromObjectExpression(args, name) ||\n getObjectPropertyFromObjectExpression(args, '$' + name);\n if (!property) {\n return { errors };\n }\n\n // Validate property\n const validation = validateObjectPropertyIsNumberLiteral(property, name);\n errors.push(...validation.errors);\n const value = validation.value;\n\n return { errors, value };\n}\n\n/**\n * Validate that an object property is a number literal\n */\nfunction validateObjectPropertyIsNumberLiteral(\n arg: t.SpreadElement | t.ObjectMethod | t.ObjectProperty,\n name: string\n): {\n errors: string[];\n value?: number;\n} {\n const errors: string[] = [];\n\n // Validate the property is a string literal from an expression\n if (\n !t.isObjectProperty(arg) ||\n !t.isExpression(arg.value) ||\n !validateExpressionIsNumericLiteral(arg.value)\n ) {\n errors.push(\n `The <${GT_COMPONENT_TYPES.T}> component must have a number literal in its ${name} field`\n );\n return { errors };\n }\n\n // Get the number literal\n const value = getNumberLiteralFromExpression(arg.value);\n\n // Validate it is an integer\n if (value !== undefined && !validateNumberLiteralIsInteger(value)) {\n errors.push(\n `The <${GT_COMPONENT_TYPES.T}> component must have an integer in its ${name} field`\n );\n return { errors };\n }\n\n return { errors, value };\n}\n\n/**\n * Given an expression, return the number literal (throws an error if not a number literal)\n */\nfunction getNumberLiteralFromExpression(\n expr: t.Expression\n): number | undefined {\n if (t.isNumericLiteral(expr)) {\n return expr.value;\n }\n // handle numbers with unary operators\n if (t.isUnaryExpression(expr) && t.isNumericLiteral(expr.argument)) {\n // On purpose, we are taking the absolute value of the number literal\n return expr.argument.value;\n }\n}\n\n/**\n * Validate that a number literal is an integer\n */\nfunction validateNumberLiteralIsInteger(value: number): boolean {\n return Number.isInteger(value);\n}\n\n// Boolean Literal Functions\n\n/**\n * Will validate and retrieve property from object expression and also try prefixing with a $.\n * Only boolean literals are accepted — string \"true\"/\"false\" and dynamic\n * expressions are rejected because the value is hash-changing.\n */\nfunction validateBooleanProperty(\n args: t.ObjectExpression,\n name: string\n): {\n errors: string[];\n value?: boolean;\n} {\n const errors: string[] = [];\n\n // Get the property\n const property =\n getObjectPropertyFromObjectExpression(args, name) ||\n getObjectPropertyFromObjectExpression(args, '$' + name);\n if (!property) {\n return { errors };\n }\n\n if (\n !t.isObjectProperty(property) ||\n !t.isExpression(property.value) ||\n !validateExpressionIsBooleanLiteral(property.value)\n ) {\n errors.push(\n `The <${GT_COMPONENT_TYPES.T}> component must have a boolean literal (true or false) in its ${name} field`\n );\n return { errors };\n }\n\n return { errors, value: (property.value as t.BooleanLiteral).value };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"validateTranslationComponentArgs.js","names":["t","validateChildrenPropertyFromObjectExpression","constructJsxChildren","getObjectPropertyFromObjectExpression","validateExpressionIsStringLiteral","validateExpressionIsNumericLiteral","validateExpressionIsBooleanLiteral"],"sources":["../../../src/transform/validation/validateTranslationComponentArgs.ts"],"sourcesContent":["import { TransformState } from '../../state/types';\nimport { GT_COMPONENT_TYPES } from '../../utils/constants/gt/constants';\nimport * as t from '@babel/types';\nimport type { NodePath } from '@babel/traverse';\nimport { getObjectPropertyFromObjectExpression } from '../../utils/parsing/getObjectPropertyFromObjectExpression';\nimport { validateExpressionIsStringLiteral } from '../../utils/validation/validateExpressionIsStringLiteral';\nimport type { JsxChildren } from '@generaltranslation/format/types';\nimport { constructJsxChildren } from '../jsx-children/constructJsxChildren';\nimport { validateChildrenPropertyFromObjectExpression } from '../../utils/validation/validateChildrenFromObjectExpression';\nimport { validateExpressionIsNumericLiteral } from '../../utils/validation/validateExpressionIsNumericLiteral';\nimport { validateExpressionIsBooleanLiteral } from '../../utils/validation/validateExpressionIsBooleanLiteral';\nimport { validateDerive } from './validateTranslationFunction';\nimport { JsxValidationError } from '../jsx-children/errors';\n/**\n * Given a translation component, validate the arguments\n */\nexport function validateTranslationComponentArgs(\n callExprPath: NodePath<t.CallExpression>,\n canonicalName: string,\n state: TransformState\n): {\n errors: string[];\n _hash?: string;\n id?: string;\n context?: string;\n maxChars?: number;\n requiresReview?: boolean;\n children?: JsxChildren;\n hasDeriveContext?: boolean;\n hasDeriveChildren?: boolean;\n} {\n const callExpr = callExprPath.node;\n // Check that there are at least 2 arguments (identifier, args)\n if (callExpr.arguments.length < 2) {\n const errors = [\n 'Translation component must have at least 2 arguments (identifier, args)',\n ];\n return { errors };\n }\n\n // Get the component args\n const args = callExpr.arguments[1];\n if (!t.isObjectExpression(args)) {\n const errors = [\n 'Translation component must have an object expression as the second argument',\n ];\n return { errors };\n }\n const argsPath = callExprPath.get('arguments')[1];\n if (!argsPath?.isObjectExpression()) {\n const errors = [\n 'Translation component must have an object expression as the second argument',\n ];\n return { errors };\n }\n\n // Map to appropriate validation function\n switch (canonicalName) {\n case GT_COMPONENT_TYPES.T:\n case GT_COMPONENT_TYPES.GtInternalTranslateJsx:\n return validateTComponentArgs(\n argsPath as NodePath<t.ObjectExpression>,\n state\n );\n default:\n const errors = [\n `Invalid translation component: ${canonicalName}. You likely passed a non-translation component to validateTranslationComponentArgs`,\n ];\n return { errors };\n }\n}\n\n/* =============================== */\n/* Helper Functions */\n/* =============================== */\n\nfunction validateTComponentArgs(\n argsPath: NodePath<t.ObjectExpression>,\n state: TransformState\n): {\n errors: string[];\n _hash?: string;\n id?: string;\n context?: string;\n maxChars?: number;\n requiresReview?: boolean;\n children?: JsxChildren;\n hasDeriveContext?: boolean;\n hasDeriveChildren?: boolean;\n} {\n const errors: string[] = [];\n const args = argsPath.node;\n\n // Validate id\n const idValidation = validateStringProperty(args, 'id');\n errors.push(...idValidation.errors);\n const id = idValidation.value;\n\n // Validate context (with derive fallback)\n const contextValidation = validateStringProperty(args, 'context', state);\n errors.push(...contextValidation.errors);\n const context = contextValidation.value;\n // Validate maxChars\n const maxCharsValidation = validateNumberProperty(args, 'maxChars');\n errors.push(...maxCharsValidation.errors);\n const maxChars = maxCharsValidation.value;\n\n // Validate requiresReview\n const requiresReviewValidation = validateBooleanProperty(\n args,\n 'requiresReview'\n );\n errors.push(...requiresReviewValidation.errors);\n const requiresReview = requiresReviewValidation.value;\n\n // Validate hash\n const hashValidation = validateStringProperty(args, '_hash');\n errors.push(...hashValidation.errors);\n const _hash = hashValidation.value;\n\n // Validate children\n const childrenValidation = validateChildrenProperty(argsPath, state);\n errors.push(...childrenValidation.errors);\n const children = childrenValidation.value;\n\n const hasDeriveContext =\n contextValidation.hasDeriveExpression || childrenValidation.hasAutoderive;\n\n return {\n errors,\n id,\n context,\n _hash,\n maxChars,\n requiresReview,\n children,\n hasDeriveContext,\n hasDeriveChildren: childrenValidation.containsDerive,\n };\n}\n\n/**\n * Validate that the children property is a string literal\n */\nexport function validateChildrenProperty(\n argsPath: NodePath<t.ObjectExpression>,\n state: TransformState\n): {\n errors: string[];\n value?: JsxChildren;\n hasAutoderive?: boolean;\n containsDerive?: boolean;\n} {\n const errors: string[] = [];\n\n // Get the children property\n const childrenValidation =\n validateChildrenPropertyFromObjectExpression(argsPath);\n if (childrenValidation.errors.length > 0) {\n errors.push(...childrenValidation.errors);\n return { errors };\n }\n const children = childrenValidation.value;\n if (children === undefined) {\n errors.push(`The <${GT_COMPONENT_TYPES.T}> component must have children`);\n return { errors };\n }\n\n // constructJsxChildren now returns JsxValidationError[]\n const validation = constructJsxChildren(children, state);\n\n // Autoderive: filter out dynamic-content errors\n let hasAutoderive = false;\n let filteredErrors: JsxValidationError[] = validation.errors;\n if (state.settings.autoderive.jsx) {\n filteredErrors = validation.errors.filter(\n (e) => e.type !== 'dynamic-content'\n );\n hasAutoderive = filteredErrors.length < validation.errors.length;\n }\n\n // Convert structured errors back to strings\n errors.push(...filteredErrors.map((e) => e.message));\n const value = validation.value;\n\n return {\n errors,\n value,\n hasAutoderive,\n containsDerive: validation.containsDerive,\n };\n}\n\n// String Literal Functions\n\n/**\n * Will validate and retrieve property from object expression and also try prefixing with a $\n *\n */\nfunction validateStringProperty(\n args: t.ObjectExpression,\n name: string,\n state?: TransformState\n): {\n errors: string[];\n value?: string;\n hasDeriveExpression?: boolean;\n} {\n const errors: string[] = [];\n\n // Get the property\n const property =\n getObjectPropertyFromObjectExpression(args, name) ||\n getObjectPropertyFromObjectExpression(args, '$' + name);\n if (!property) {\n return { errors };\n }\n\n // Validate property\n const validation = validateObjectPropertyIsStringLiteral(property, name);\n if (validation.errors.length === 0) {\n return { errors, value: validation.value };\n }\n\n // String validation failed — check if it's a valid derive() expression\n if (state && t.isObjectProperty(property) && t.isExpression(property.value)) {\n const deriveErrors: string[] = [];\n validateDerive(property.value, state, deriveErrors);\n if (deriveErrors.length === 0) {\n return { errors, hasDeriveExpression: true };\n }\n }\n\n // Neither string nor derive — return original errors\n errors.push(...validation.errors);\n return { errors };\n}\n\n/**\n * Validate that an object property is a string literal\n */\nfunction validateObjectPropertyIsStringLiteral(\n arg: t.SpreadElement | t.ObjectMethod | t.ObjectProperty,\n name: string\n): {\n errors: string[];\n value?: string;\n} {\n const errors: string[] = [];\n\n // Validate the property is a string literal from an expression\n if (\n !t.isObjectProperty(arg) ||\n !t.isExpression(arg.value) ||\n !validateExpressionIsStringLiteral(arg.value)\n ) {\n errors.push(\n `The <${GT_COMPONENT_TYPES.T}> component must have a string literal in its ${name} field`\n );\n return { errors };\n }\n\n // Get the string literal\n const value = getStringLiteralFromExpression(arg.value);\n return { errors, value };\n}\n\n/**\n * Given an expression, return the string literal (throws an error if not a string literal)\n */\nfunction getStringLiteralFromExpression(\n expr: t.Expression\n): string | undefined {\n if (t.isStringLiteral(expr)) {\n return expr.value;\n }\n if (t.isTemplateLiteral(expr)) {\n if (expr.expressions.length === 0) {\n return expr.quasis[0]?.value.cooked || '';\n }\n }\n}\n\n// Number Literal Functions\n\n/**\n * Will validate and retrieve property from object expression and also try prefixing with a $\n */\nfunction validateNumberProperty(\n args: t.ObjectExpression,\n name: string\n): {\n errors: string[];\n value?: number;\n} {\n const errors: string[] = [];\n\n // Get the property\n const property =\n getObjectPropertyFromObjectExpression(args, name) ||\n getObjectPropertyFromObjectExpression(args, '$' + name);\n if (!property) {\n return { errors };\n }\n\n // Validate property\n const validation = validateObjectPropertyIsNumberLiteral(property, name);\n errors.push(...validation.errors);\n const value = validation.value;\n\n return { errors, value };\n}\n\n/**\n * Validate that an object property is a number literal\n */\nfunction validateObjectPropertyIsNumberLiteral(\n arg: t.SpreadElement | t.ObjectMethod | t.ObjectProperty,\n name: string\n): {\n errors: string[];\n value?: number;\n} {\n const errors: string[] = [];\n\n // Validate the property is a string literal from an expression\n if (\n !t.isObjectProperty(arg) ||\n !t.isExpression(arg.value) ||\n !validateExpressionIsNumericLiteral(arg.value)\n ) {\n errors.push(\n `The <${GT_COMPONENT_TYPES.T}> component must have a number literal in its ${name} field`\n );\n return { errors };\n }\n\n // Get the number literal\n const value = getNumberLiteralFromExpression(arg.value);\n\n // Validate it is an integer\n if (value !== undefined && !validateNumberLiteralIsInteger(value)) {\n errors.push(\n `The <${GT_COMPONENT_TYPES.T}> component must have an integer in its ${name} field`\n );\n return { errors };\n }\n\n return { errors, value };\n}\n\n/**\n * Given an expression, return the number literal (throws an error if not a number literal)\n */\nfunction getNumberLiteralFromExpression(\n expr: t.Expression\n): number | undefined {\n if (t.isNumericLiteral(expr)) {\n return expr.value;\n }\n // handle numbers with unary operators\n if (t.isUnaryExpression(expr) && t.isNumericLiteral(expr.argument)) {\n // On purpose, we are taking the absolute value of the number literal\n return expr.argument.value;\n }\n}\n\n/**\n * Validate that a number literal is an integer\n */\nfunction validateNumberLiteralIsInteger(value: number): boolean {\n return Number.isInteger(value);\n}\n\n// Boolean Literal Functions\n\n/**\n * Will validate and retrieve property from object expression and also try prefixing with a $.\n * Only boolean literals are accepted — string \"true\"/\"false\" and dynamic\n * expressions are rejected because the value is hash-changing.\n */\nfunction validateBooleanProperty(\n args: t.ObjectExpression,\n name: string\n): {\n errors: string[];\n value?: boolean;\n} {\n const errors: string[] = [];\n\n // Get the property\n const property =\n getObjectPropertyFromObjectExpression(args, name) ||\n getObjectPropertyFromObjectExpression(args, '$' + name);\n if (!property) {\n return { errors };\n }\n\n if (\n !t.isObjectProperty(property) ||\n !t.isExpression(property.value) ||\n !validateExpressionIsBooleanLiteral(property.value)\n ) {\n errors.push(\n `The <${GT_COMPONENT_TYPES.T}> component must have a boolean literal (true or false) in its ${name} field`\n );\n return { errors };\n }\n\n return { errors, value: (property.value as t.BooleanLiteral).value };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateTranslationFunction.d.ts","sourceRoot":"","sources":["../../../src/transform/validation/validateTranslationFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAKlC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOnD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,EACxC,KAAK,EAAE,cAAc,GACpB;IACD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAmIA;AAED;;;GAGG;AAEH,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,CAAC,CAAC,cAAc,GAAG;IAC5E,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAGA;AAED;;;GAGG;AAEH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,CAAC,CAAC,cAAc,GAAG;IACxE,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAGA;AAgJD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,CAAC,CAAC,UAAU,EAClB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,MAAM,EAAE,GACf;IAAE,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAoFtB"}
1
+ {"version":3,"file":"validateTranslationFunction.d.ts","sourceRoot":"","sources":["../../../src/transform/validation/validateTranslationFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAKlC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOnD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,EACxC,KAAK,EAAE,cAAc,GACpB;IACD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAmIA;AAED;;;GAGG;AAEH,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,CAAC,CAAC,cAAc,GAAG;IAC5E,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAGA;AAED;;;GAGG;AAEH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,CAAC,CAAC,cAAc,GAAG;IACxE,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAGA;AAgJD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,CAAC,CAAC,UAAU,EAClB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,MAAM,EAAE,GACf;IAAE,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAmFtB"}
@@ -173,11 +173,11 @@ function validateDerive(expr, state, errors) {
173
173
  errors.push("Expression does not use an allowed call expression");
174
174
  return { errors };
175
175
  }
176
- if (type !== "generaltranslation" || canonicalName !== "declareStatic" && canonicalName !== "derive") {
176
+ if (type !== "generaltranslation" || canonicalName !== "derive") {
177
177
  errors.push("Expression does not use an allowed call expression");
178
178
  return { errors };
179
179
  }
180
- validateDeclareStaticExpression(expr, errors);
180
+ validateDeriveCallExpression(expr, errors);
181
181
  return { errors };
182
182
  }
183
183
  if (_babel_types.isBinaryExpression(expr) && expr.operator === "+") {
@@ -207,7 +207,7 @@ function validateDerive(expr, state, errors) {
207
207
  * - the argument is a call expression
208
208
  * Example: derive(getName())
209
209
  */
210
- function validateDeclareStaticExpression(expr, errors) {
210
+ function validateDeriveCallExpression(expr, errors) {
211
211
  if (expr.arguments.length !== 1) {
212
212
  errors.push("derive() must have one argument");
213
213
  return { errors };
@@ -1 +1 @@
1
- {"version":3,"file":"validateTranslationFunction.js","names":["t","resolveStaticExpression","getCalleeNameFromExpression","getTrackedVariable"],"sources":["../../../src/transform/validation/validateTranslationFunction.ts"],"sourcesContent":["import * as t from '@babel/types';\nimport {\n GT_OTHER_FUNCTIONS,\n USEGT_CALLBACK_OPTIONS,\n} from '../../utils/constants/gt/constants';\nimport { TransformState } from '../../state/types';\nimport { getCalleeNameFromExpression } from '../../utils/parsing/getCalleeNameFromExpression';\nimport {\n resolveStaticExpression,\n type ResolveStaticExpressionError,\n} from '../../utils/string-expressions/resolveStaticExpression';\nimport { getTrackedVariable } from '../getTrackedVariable';\nimport { NodePath } from '@babel/traverse';\n\n/**\n * Validate useGT_callback / getGT_callback / msg() / t()\n * - first argument must be a statically resolvable string expression\n * (string literal, template literal, binary '+' concatenation, or derive() call)\n * - second argument, if present, $id field + $context field must be a string literal\n */\nexport function validateTranslationFunction(\n callExprPath: NodePath<t.CallExpression>,\n state: TransformState\n): {\n errors: string[];\n content?: string;\n context?: string;\n hash?: string;\n id?: string;\n maxChars?: number;\n format?: string;\n requiresReview?: boolean;\n hasDeriveContext?: boolean;\n} {\n const callExpr = callExprPath.node;\n const errors: string[] = [];\n\n // Validate that the function has at least 1 argument\n if (callExpr.arguments.length < 1) {\n errors.push('registration function must have at least 1 argument');\n return { errors };\n }\n\n // Validate first argument\n if (!t.isExpression(callExpr.arguments[0])) {\n errors.push(\n 'registration function must use a string literal or derive() call as the first argument. Variable content is not allowed.'\n );\n return { errors };\n }\n\n // Try to resolve the expression to a static string (handles concat, nested templates, etc.)\n const resolvedStaticExpression = resolveStaticExpression(\n callExprPath.get('arguments')[0] as NodePath<t.Expression>\n );\n // TODO: until we implement derivation, we will only need to check the first value\n const content = resolvedStaticExpression.values?.[0];\n const resolutionErrors = getResolutionErrorMessages(\n resolvedStaticExpression.errors,\n false\n );\n\n if (resolutionErrors.length > 0) {\n return { errors: resolutionErrors };\n }\n\n if (content === undefined && !state.settings.autoderive.strings) {\n // Not a static expression — check if it contains a derive() function invocation\n validateDerive(callExpr.arguments[0], state, errors);\n if (errors.length > 0) {\n errors.push(\n ...getResolutionErrorMessages(resolvedStaticExpression.errors)\n );\n errors.push(\n 'registration function must use a string literal or derive() call as the first argument. Variable content is not allowed.'\n );\n return { errors };\n }\n }\n\n // TODO: hasDeriveContext should be refactored to enforce no hash generated HERE in this function\n // instead of passing that information outside of this function.\n // We skip hash gen with autoderive, derive in content, and derive in $context. This flag is being\n // reused for all 3 cases.\n const contentHasAutoderive =\n state.settings.autoderive.strings && content === undefined;\n\n // Validate second argument\n let context: string | undefined;\n let id: string | undefined;\n let hash: string | undefined;\n let maxChars: number | undefined;\n let format: string | undefined;\n let requiresReview: boolean | undefined;\n let hasDeriveContext: boolean | undefined;\n if (callExpr.arguments.length === 1) {\n return {\n errors,\n content,\n hasDeriveContext: contentHasAutoderive || undefined,\n };\n }\n if (t.isObjectExpression(callExpr.arguments[1])) {\n const objExprPath = callExprPath.get(\n 'arguments'\n )[1] as NodePath<t.ObjectExpression>;\n const contextProperty = validatePropertyFromObjectExpression(\n objExprPath,\n USEGT_CALLBACK_OPTIONS.$context,\n 'string-or-derive',\n state\n );\n errors.push(...contextProperty.errors);\n context = contextProperty.value as string | undefined;\n hasDeriveContext =\n contentHasAutoderive || contextProperty.hasDeriveExpression;\n const idProperty = validatePropertyFromObjectExpression(\n objExprPath,\n USEGT_CALLBACK_OPTIONS.$id,\n 'string'\n );\n errors.push(...idProperty.errors);\n id = idProperty.value;\n const maxCharsProperty = validatePropertyFromObjectExpression(\n objExprPath,\n USEGT_CALLBACK_OPTIONS.$maxChars,\n 'number'\n );\n errors.push(...maxCharsProperty.errors);\n maxChars = maxCharsProperty.value;\n const hashProperty = validatePropertyFromObjectExpression(\n objExprPath,\n USEGT_CALLBACK_OPTIONS.$_hash,\n 'string'\n );\n errors.push(...hashProperty.errors);\n hash = hashProperty.value;\n const formatProperty = validatePropertyFromObjectExpression(\n objExprPath,\n USEGT_CALLBACK_OPTIONS.$format,\n 'string'\n );\n errors.push(...formatProperty.errors);\n format = formatProperty.value;\n const requiresReviewProperty = validatePropertyFromObjectExpression(\n objExprPath,\n USEGT_CALLBACK_OPTIONS.$requiresReview,\n 'boolean'\n );\n errors.push(...requiresReviewProperty.errors);\n requiresReview = requiresReviewProperty.value;\n }\n\n return {\n errors,\n content,\n context,\n id,\n hash,\n maxChars,\n format,\n requiresReview,\n hasDeriveContext,\n };\n}\n\n/**\n * Validate useTranslations_callback / getTranslations_callback\n * - always valid (arguments can be dynamic)\n */\n// eslint-disable-next-line no-unused-vars\nexport function validateUseTranslationsCallback(_callExpr: t.CallExpression): {\n errors: string[];\n} {\n const errors: string[] = [];\n return { errors };\n}\n\n/**\n * Validate useMessages_callback / getMessages_callback\n * - always valid\n */\n// eslint-disable-next-line no-unused-vars\nexport function validateUseMessagesCallback(_callExpr: t.CallExpression): {\n errors: string[];\n} {\n const errors: string[] = [];\n return { errors };\n}\n\n/* =============================== */\n/* Helper Functions */\n/* =============================== */\n\nfunction getResolutionErrorMessages(\n errors: ResolveStaticExpressionError[],\n includeDynamic = true\n): string[] {\n return errors\n .filter((error) => includeDynamic || error.kind !== 'dynamic-expression')\n .map(({ message }) => message);\n}\n\n/**\n * Validate a property from an object expression\n * @param objExpr - The object expression to validate\n * @param name - The name of the property to validate\n * @returns The validated property\n */\nfunction validatePropertyFromObjectExpression(\n objExprPath: NodePath<t.ObjectExpression>,\n name: string,\n type: 'string'\n): { errors: string[]; value?: string };\nfunction validatePropertyFromObjectExpression(\n objExprPath: NodePath<t.ObjectExpression>,\n name: string,\n type: 'number'\n): { errors: string[]; value?: number };\nfunction validatePropertyFromObjectExpression(\n objExprPath: NodePath<t.ObjectExpression>,\n name: string,\n type: 'boolean'\n): { errors: string[]; value?: boolean };\nfunction validatePropertyFromObjectExpression(\n objExprPath: NodePath<t.ObjectExpression>,\n name: string,\n type: 'string-or-derive',\n state: TransformState\n): { errors: string[]; value?: string; hasDeriveExpression?: boolean };\nfunction validatePropertyFromObjectExpression(\n objExprPath: NodePath<t.ObjectExpression>,\n name: string,\n type: 'string' | 'number' | 'boolean' | 'string-or-derive',\n state?: TransformState\n): {\n errors: string[];\n value?: string | number | boolean;\n hasDeriveExpression?: boolean;\n} {\n const result: {\n errors: string[];\n value?: string | number | boolean;\n hasDeriveExpression?: boolean;\n } = { errors: [] };\n let valuePath: NodePath<t.ObjectProperty> | undefined;\n for (const propertyPath of objExprPath.get('properties')) {\n if (!propertyPath.isObjectProperty()) {\n continue;\n }\n const property = propertyPath.node;\n if (t.isIdentifier(property.key) && property.key.name === name) {\n valuePath = propertyPath;\n break;\n }\n if (t.isStringLiteral(property.key) && property.key.value === name) {\n valuePath = propertyPath;\n break;\n }\n }\n\n // return result if no value found\n if (!valuePath) {\n return result;\n }\n\n const value = valuePath.node;\n\n // validate value\n if (!t.isExpression(value.value)) {\n result.errors.push(\n `registration function must use a string literal for its ${name} field. Variable content is not allowed.`\n );\n return result;\n }\n\n // extract value\n if (type === 'string-or-derive') {\n const resolved = resolveStaticExpression(\n valuePath.get('value') as NodePath<t.Expression>\n );\n const resolutionErrors = getResolutionErrorMessages(resolved.errors, false);\n // TODO: until we implement derivation, we will only need to check the first value\n if (resolved.values?.[0] !== undefined) {\n result.value = resolved.values[0];\n } else if (resolutionErrors.length > 0) {\n result.errors.push(...resolutionErrors);\n } else if (state) {\n // Static resolution failed — check if it's a valid derive() expression\n const deriveErrors: string[] = [];\n validateDerive(value.value, state, deriveErrors);\n if (deriveErrors.length === 0) {\n result.hasDeriveExpression = true;\n } else {\n result.errors.push(\n ...getResolutionErrorMessages(resolved.errors),\n ...deriveErrors\n );\n }\n } else {\n result.errors.push(...getResolutionErrorMessages(resolved.errors));\n }\n } else {\n const validatedValue =\n type === 'string'\n ? validateExpressionIsStringLiteral(value.value)\n : type === 'boolean'\n ? validateExpressionIsBooleanLiteral(value.value)\n : validateExpressionIsNumericLiteral(value.value);\n result.errors.push(...validatedValue.errors);\n result.value = validatedValue.value;\n }\n\n return result;\n}\n\n/**\n * Validate that an expression is a string literal\n */\nfunction validateExpressionIsStringLiteral(expr: t.Expression): {\n errors: string[];\n value?: string;\n} {\n if (t.isStringLiteral(expr)) {\n return { errors: [], value: expr.value };\n }\n if (t.isTemplateLiteral(expr) && expr.expressions.length === 0) {\n return { errors: [], value: expr.quasis[0]?.value.cooked };\n }\n return { errors: ['Expression is not a string literal'] };\n}\n\n/**\n * Validates if an expression uses the derive() function correctly\n */\nexport function validateDerive(\n expr: t.Expression,\n state: TransformState,\n errors: string[]\n): { errors: string[] } {\n if (!expr) {\n errors.push('Expression is empty');\n return { errors };\n }\n\n // 1. Direct call: derive(node)\n if (t.isCallExpression(expr)) {\n // Find the canonical function name\n const { namespaceName, functionName } = getCalleeNameFromExpression(expr);\n // Get the canonical function name\n const { canonicalName, type } = getTrackedVariable(\n state.scopeTracker,\n namespaceName,\n functionName\n );\n if (!canonicalName) {\n errors.push('Expression does not use an allowed call expression');\n return { errors };\n }\n // Validate the function is actually the GT derive function\n if (\n type !== 'generaltranslation' ||\n (canonicalName !== GT_OTHER_FUNCTIONS.declareStatic &&\n canonicalName !== GT_OTHER_FUNCTIONS.derive)\n ) {\n errors.push('Expression does not use an allowed call expression');\n return { errors };\n }\n // Validate that the call expression has exactly one argument and the argument is a call expression\n validateDeclareStaticExpression(expr, errors);\n return { errors };\n }\n\n // 2. String concatenation: \"Hello there \" + derive(getName())\n if (t.isBinaryExpression(expr) && expr.operator === '+') {\n if (!t.isExpression(expr.left) || !t.isExpression(expr.right)) {\n errors.push('Operands must be expressions');\n return { errors };\n }\n validateDerive(expr.right, state, errors);\n validateDerive(expr.left, state, errors);\n return { errors };\n }\n\n // 3. Template literal: `Hello there ${derive(getName())}` or `static text`\n if (t.isTemplateLiteral(expr)) {\n if (expr.expressions.length === 0) {\n return { errors };\n }\n if (\n !expr.expressions.some(\n (expression) =>\n t.isExpression(expression) &&\n validateDerive(expression, state, errors).errors.length === 0\n )\n ) {\n errors.push('Expression does not use an allowed call expression');\n }\n return {\n errors,\n };\n }\n\n // 4. Static literals (string, number, boolean, null)\n if (t.isStringLiteral(expr)) {\n return { errors };\n }\n\n if (t.isNumericLiteral(expr)) {\n return { errors };\n }\n\n if (t.isBooleanLiteral(expr)) {\n return { errors };\n }\n\n if (t.isNullLiteral(expr)) {\n return { errors };\n }\n\n // Fallthrough: expression type not supported (e.g., plain identifiers/variables)\n errors.push('Variables are not allowed');\n return { errors };\n}\n\n/**\n * Takes in a call expression to check if:\n * - it has exactly one argument\n * - the argument is a call expression\n * Example: derive(getName())\n */\nfunction validateDeclareStaticExpression(\n expr: t.CallExpression,\n errors: string[]\n): {\n errors: string[];\n} {\n // Validate that the function has 1 argument\n if (expr.arguments.length !== 1) {\n errors.push('derive() must have one argument');\n return { errors };\n }\n const [onlyArg] = expr.arguments;\n\n // Await expression: derive(await ...)\n if (t.isAwaitExpression(onlyArg)) {\n // Validate that the awaited expression is a call expression\n if (!t.isCallExpression(onlyArg.argument)) {\n errors.push('derive() must have a call expression as the argument');\n return { errors };\n }\n // Valid: derive(await someFunction())\n return { errors };\n }\n\n // Validate that the argument is a call expression\n if (!t.isCallExpression(onlyArg)) {\n errors.push('derive() must have a call expression as the argument');\n return { errors };\n }\n\n return { errors };\n}\n\n/**\n * Validate that an expression is a boolean literal (strictly `true` or\n * `false` — never string \"true\"/\"false\" or a dynamic expression).\n *\n * NOTE: a standalone predicate with the same logic exists at\n * `../../utils/validation/validateExpressionIsBooleanLiteral` (returns a\n * plain boolean). This local copy returns `{ errors, value }` to match the\n * interface of the sibling string/number validators in this file — the same\n * local-vs-utility duality those validators already have.\n */\nfunction validateExpressionIsBooleanLiteral(expr: t.Expression): {\n errors: string[];\n value?: boolean;\n} {\n if (t.isBooleanLiteral(expr)) {\n return { errors: [], value: expr.value };\n }\n return { errors: ['Expression is not a boolean literal'] };\n}\n\n/**\n * Validate that an expression is a number literal\n */\nfunction validateExpressionIsNumericLiteral(expr: t.Expression): {\n errors: string[];\n value?: number;\n} {\n let candidateValue: number | undefined;\n if (t.isNumericLiteral(expr)) {\n candidateValue = expr.value;\n } else if (t.isUnaryExpression(expr) && t.isNumericLiteral(expr.argument)) {\n // Note: taking the absolute value of the number literal\n candidateValue = expr.argument.value;\n }\n\n // validate is integer\n if (candidateValue !== undefined && !Number.isInteger(candidateValue)) {\n return { errors: ['Expression is not an integer'] };\n }\n\n // no value found\n if (candidateValue === undefined) {\n return { errors: ['Expression is not a number literal'] };\n }\n\n return { errors: [], value: candidateValue };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"validateTranslationFunction.js","names":["t","resolveStaticExpression","getCalleeNameFromExpression","getTrackedVariable"],"sources":["../../../src/transform/validation/validateTranslationFunction.ts"],"sourcesContent":["import * as t from '@babel/types';\nimport {\n GT_OTHER_FUNCTIONS,\n USEGT_CALLBACK_OPTIONS,\n} from '../../utils/constants/gt/constants';\nimport { TransformState } from '../../state/types';\nimport { getCalleeNameFromExpression } from '../../utils/parsing/getCalleeNameFromExpression';\nimport {\n resolveStaticExpression,\n type ResolveStaticExpressionError,\n} from '../../utils/string-expressions/resolveStaticExpression';\nimport { getTrackedVariable } from '../getTrackedVariable';\nimport { NodePath } from '@babel/traverse';\n\n/**\n * Validate useGT_callback / getGT_callback / msg() / t()\n * - first argument must be a statically resolvable string expression\n * (string literal, template literal, binary '+' concatenation, or derive() call)\n * - second argument, if present, $id field + $context field must be a string literal\n */\nexport function validateTranslationFunction(\n callExprPath: NodePath<t.CallExpression>,\n state: TransformState\n): {\n errors: string[];\n content?: string;\n context?: string;\n hash?: string;\n id?: string;\n maxChars?: number;\n format?: string;\n requiresReview?: boolean;\n hasDeriveContext?: boolean;\n} {\n const callExpr = callExprPath.node;\n const errors: string[] = [];\n\n // Validate that the function has at least 1 argument\n if (callExpr.arguments.length < 1) {\n errors.push('registration function must have at least 1 argument');\n return { errors };\n }\n\n // Validate first argument\n if (!t.isExpression(callExpr.arguments[0])) {\n errors.push(\n 'registration function must use a string literal or derive() call as the first argument. Variable content is not allowed.'\n );\n return { errors };\n }\n\n // Try to resolve the expression to a static string (handles concat, nested templates, etc.)\n const resolvedStaticExpression = resolveStaticExpression(\n callExprPath.get('arguments')[0] as NodePath<t.Expression>\n );\n // TODO: until we implement derivation, we will only need to check the first value\n const content = resolvedStaticExpression.values?.[0];\n const resolutionErrors = getResolutionErrorMessages(\n resolvedStaticExpression.errors,\n false\n );\n\n if (resolutionErrors.length > 0) {\n return { errors: resolutionErrors };\n }\n\n if (content === undefined && !state.settings.autoderive.strings) {\n // Not a static expression — check if it contains a derive() function invocation\n validateDerive(callExpr.arguments[0], state, errors);\n if (errors.length > 0) {\n errors.push(\n ...getResolutionErrorMessages(resolvedStaticExpression.errors)\n );\n errors.push(\n 'registration function must use a string literal or derive() call as the first argument. Variable content is not allowed.'\n );\n return { errors };\n }\n }\n\n // TODO: hasDeriveContext should be refactored to enforce no hash generated HERE in this function\n // instead of passing that information outside of this function.\n // We skip hash gen with autoderive, derive in content, and derive in $context. This flag is being\n // reused for all 3 cases.\n const contentHasAutoderive =\n state.settings.autoderive.strings && content === undefined;\n\n // Validate second argument\n let context: string | undefined;\n let id: string | undefined;\n let hash: string | undefined;\n let maxChars: number | undefined;\n let format: string | undefined;\n let requiresReview: boolean | undefined;\n let hasDeriveContext: boolean | undefined;\n if (callExpr.arguments.length === 1) {\n return {\n errors,\n content,\n hasDeriveContext: contentHasAutoderive || undefined,\n };\n }\n if (t.isObjectExpression(callExpr.arguments[1])) {\n const objExprPath = callExprPath.get(\n 'arguments'\n )[1] as NodePath<t.ObjectExpression>;\n const contextProperty = validatePropertyFromObjectExpression(\n objExprPath,\n USEGT_CALLBACK_OPTIONS.$context,\n 'string-or-derive',\n state\n );\n errors.push(...contextProperty.errors);\n context = contextProperty.value as string | undefined;\n hasDeriveContext =\n contentHasAutoderive || contextProperty.hasDeriveExpression;\n const idProperty = validatePropertyFromObjectExpression(\n objExprPath,\n USEGT_CALLBACK_OPTIONS.$id,\n 'string'\n );\n errors.push(...idProperty.errors);\n id = idProperty.value;\n const maxCharsProperty = validatePropertyFromObjectExpression(\n objExprPath,\n USEGT_CALLBACK_OPTIONS.$maxChars,\n 'number'\n );\n errors.push(...maxCharsProperty.errors);\n maxChars = maxCharsProperty.value;\n const hashProperty = validatePropertyFromObjectExpression(\n objExprPath,\n USEGT_CALLBACK_OPTIONS.$_hash,\n 'string'\n );\n errors.push(...hashProperty.errors);\n hash = hashProperty.value;\n const formatProperty = validatePropertyFromObjectExpression(\n objExprPath,\n USEGT_CALLBACK_OPTIONS.$format,\n 'string'\n );\n errors.push(...formatProperty.errors);\n format = formatProperty.value;\n const requiresReviewProperty = validatePropertyFromObjectExpression(\n objExprPath,\n USEGT_CALLBACK_OPTIONS.$requiresReview,\n 'boolean'\n );\n errors.push(...requiresReviewProperty.errors);\n requiresReview = requiresReviewProperty.value;\n }\n\n return {\n errors,\n content,\n context,\n id,\n hash,\n maxChars,\n format,\n requiresReview,\n hasDeriveContext,\n };\n}\n\n/**\n * Validate useTranslations_callback / getTranslations_callback\n * - always valid (arguments can be dynamic)\n */\n// eslint-disable-next-line no-unused-vars\nexport function validateUseTranslationsCallback(_callExpr: t.CallExpression): {\n errors: string[];\n} {\n const errors: string[] = [];\n return { errors };\n}\n\n/**\n * Validate useMessages_callback / getMessages_callback\n * - always valid\n */\n// eslint-disable-next-line no-unused-vars\nexport function validateUseMessagesCallback(_callExpr: t.CallExpression): {\n errors: string[];\n} {\n const errors: string[] = [];\n return { errors };\n}\n\n/* =============================== */\n/* Helper Functions */\n/* =============================== */\n\nfunction getResolutionErrorMessages(\n errors: ResolveStaticExpressionError[],\n includeDynamic = true\n): string[] {\n return errors\n .filter((error) => includeDynamic || error.kind !== 'dynamic-expression')\n .map(({ message }) => message);\n}\n\n/**\n * Validate a property from an object expression\n * @param objExpr - The object expression to validate\n * @param name - The name of the property to validate\n * @returns The validated property\n */\nfunction validatePropertyFromObjectExpression(\n objExprPath: NodePath<t.ObjectExpression>,\n name: string,\n type: 'string'\n): { errors: string[]; value?: string };\nfunction validatePropertyFromObjectExpression(\n objExprPath: NodePath<t.ObjectExpression>,\n name: string,\n type: 'number'\n): { errors: string[]; value?: number };\nfunction validatePropertyFromObjectExpression(\n objExprPath: NodePath<t.ObjectExpression>,\n name: string,\n type: 'boolean'\n): { errors: string[]; value?: boolean };\nfunction validatePropertyFromObjectExpression(\n objExprPath: NodePath<t.ObjectExpression>,\n name: string,\n type: 'string-or-derive',\n state: TransformState\n): { errors: string[]; value?: string; hasDeriveExpression?: boolean };\nfunction validatePropertyFromObjectExpression(\n objExprPath: NodePath<t.ObjectExpression>,\n name: string,\n type: 'string' | 'number' | 'boolean' | 'string-or-derive',\n state?: TransformState\n): {\n errors: string[];\n value?: string | number | boolean;\n hasDeriveExpression?: boolean;\n} {\n const result: {\n errors: string[];\n value?: string | number | boolean;\n hasDeriveExpression?: boolean;\n } = { errors: [] };\n let valuePath: NodePath<t.ObjectProperty> | undefined;\n for (const propertyPath of objExprPath.get('properties')) {\n if (!propertyPath.isObjectProperty()) {\n continue;\n }\n const property = propertyPath.node;\n if (t.isIdentifier(property.key) && property.key.name === name) {\n valuePath = propertyPath;\n break;\n }\n if (t.isStringLiteral(property.key) && property.key.value === name) {\n valuePath = propertyPath;\n break;\n }\n }\n\n // return result if no value found\n if (!valuePath) {\n return result;\n }\n\n const value = valuePath.node;\n\n // validate value\n if (!t.isExpression(value.value)) {\n result.errors.push(\n `registration function must use a string literal for its ${name} field. Variable content is not allowed.`\n );\n return result;\n }\n\n // extract value\n if (type === 'string-or-derive') {\n const resolved = resolveStaticExpression(\n valuePath.get('value') as NodePath<t.Expression>\n );\n const resolutionErrors = getResolutionErrorMessages(resolved.errors, false);\n // TODO: until we implement derivation, we will only need to check the first value\n if (resolved.values?.[0] !== undefined) {\n result.value = resolved.values[0];\n } else if (resolutionErrors.length > 0) {\n result.errors.push(...resolutionErrors);\n } else if (state) {\n // Static expression resolution failed; check if it's a valid derive() expression.\n const deriveErrors: string[] = [];\n validateDerive(value.value, state, deriveErrors);\n if (deriveErrors.length === 0) {\n result.hasDeriveExpression = true;\n } else {\n result.errors.push(\n ...getResolutionErrorMessages(resolved.errors),\n ...deriveErrors\n );\n }\n } else {\n result.errors.push(...getResolutionErrorMessages(resolved.errors));\n }\n } else {\n const validatedValue =\n type === 'string'\n ? validateExpressionIsStringLiteral(value.value)\n : type === 'boolean'\n ? validateExpressionIsBooleanLiteral(value.value)\n : validateExpressionIsNumericLiteral(value.value);\n result.errors.push(...validatedValue.errors);\n result.value = validatedValue.value;\n }\n\n return result;\n}\n\n/**\n * Validate that an expression is a string literal\n */\nfunction validateExpressionIsStringLiteral(expr: t.Expression): {\n errors: string[];\n value?: string;\n} {\n if (t.isStringLiteral(expr)) {\n return { errors: [], value: expr.value };\n }\n if (t.isTemplateLiteral(expr) && expr.expressions.length === 0) {\n return { errors: [], value: expr.quasis[0]?.value.cooked };\n }\n return { errors: ['Expression is not a string literal'] };\n}\n\n/**\n * Validates if an expression uses the derive() function correctly\n */\nexport function validateDerive(\n expr: t.Expression,\n state: TransformState,\n errors: string[]\n): { errors: string[] } {\n if (!expr) {\n errors.push('Expression is empty');\n return { errors };\n }\n\n // 1. Direct call: derive(node)\n if (t.isCallExpression(expr)) {\n // Find the canonical function name\n const { namespaceName, functionName } = getCalleeNameFromExpression(expr);\n // Get the canonical function name\n const { canonicalName, type } = getTrackedVariable(\n state.scopeTracker,\n namespaceName,\n functionName\n );\n if (!canonicalName) {\n errors.push('Expression does not use an allowed call expression');\n return { errors };\n }\n // Validate the function is actually the GT derive function\n if (\n type !== 'generaltranslation' ||\n canonicalName !== GT_OTHER_FUNCTIONS.derive\n ) {\n errors.push('Expression does not use an allowed call expression');\n return { errors };\n }\n // Validate that the call expression has exactly one argument and the argument is a call expression\n validateDeriveCallExpression(expr, errors);\n return { errors };\n }\n\n // 2. String concatenation: \"Hello there \" + derive(getName())\n if (t.isBinaryExpression(expr) && expr.operator === '+') {\n if (!t.isExpression(expr.left) || !t.isExpression(expr.right)) {\n errors.push('Operands must be expressions');\n return { errors };\n }\n validateDerive(expr.right, state, errors);\n validateDerive(expr.left, state, errors);\n return { errors };\n }\n\n // 3. Template literal: `Hello there ${derive(getName())}` or `static text`\n if (t.isTemplateLiteral(expr)) {\n if (expr.expressions.length === 0) {\n return { errors };\n }\n if (\n !expr.expressions.some(\n (expression) =>\n t.isExpression(expression) &&\n validateDerive(expression, state, errors).errors.length === 0\n )\n ) {\n errors.push('Expression does not use an allowed call expression');\n }\n return {\n errors,\n };\n }\n\n // 4. Static literals (string, number, boolean, null)\n if (t.isStringLiteral(expr)) {\n return { errors };\n }\n\n if (t.isNumericLiteral(expr)) {\n return { errors };\n }\n\n if (t.isBooleanLiteral(expr)) {\n return { errors };\n }\n\n if (t.isNullLiteral(expr)) {\n return { errors };\n }\n\n // Fallthrough: expression type not supported (e.g., plain identifiers/variables)\n errors.push('Variables are not allowed');\n return { errors };\n}\n\n/**\n * Takes in a call expression to check if:\n * - it has exactly one argument\n * - the argument is a call expression\n * Example: derive(getName())\n */\nfunction validateDeriveCallExpression(\n expr: t.CallExpression,\n errors: string[]\n): {\n errors: string[];\n} {\n // Validate that the function has 1 argument\n if (expr.arguments.length !== 1) {\n errors.push('derive() must have one argument');\n return { errors };\n }\n const [onlyArg] = expr.arguments;\n\n // Await expression: derive(await ...)\n if (t.isAwaitExpression(onlyArg)) {\n // Validate that the awaited expression is a call expression\n if (!t.isCallExpression(onlyArg.argument)) {\n errors.push('derive() must have a call expression as the argument');\n return { errors };\n }\n // Valid: derive(await someFunction())\n return { errors };\n }\n\n // Validate that the argument is a call expression\n if (!t.isCallExpression(onlyArg)) {\n errors.push('derive() must have a call expression as the argument');\n return { errors };\n }\n\n return { errors };\n}\n\n/**\n * Validate that an expression is a boolean literal (strictly `true` or\n * `false` — never string \"true\"/\"false\" or a dynamic expression).\n *\n * NOTE: a standalone predicate with the same logic exists at\n * `../../utils/validation/validateExpressionIsBooleanLiteral` (returns a\n * plain boolean). This local copy returns `{ errors, value }` to match the\n * interface of the sibling string/number validators in this file — the same\n * local-vs-utility duality those validators already have.\n */\nfunction validateExpressionIsBooleanLiteral(expr: t.Expression): {\n errors: string[];\n value?: boolean;\n} {\n if (t.isBooleanLiteral(expr)) {\n return { errors: [], value: expr.value };\n }\n return { errors: ['Expression is not a boolean literal'] };\n}\n\n/**\n * Validate that an expression is a number literal\n */\nfunction validateExpressionIsNumericLiteral(expr: t.Expression): {\n errors: string[];\n value?: number;\n} {\n let candidateValue: number | undefined;\n if (t.isNumericLiteral(expr)) {\n candidateValue = expr.value;\n } else if (t.isUnaryExpression(expr) && t.isNumericLiteral(expr.argument)) {\n // Note: taking the absolute value of the number literal\n candidateValue = expr.argument.value;\n }\n\n // validate is integer\n if (candidateValue !== undefined && !Number.isInteger(candidateValue)) {\n return { errors: ['Expression is not an integer'] };\n }\n\n // no value found\n if (candidateValue === undefined) {\n return { errors: ['Expression is not a number literal'] };\n }\n\n return { errors: [], value: candidateValue };\n}\n"],"mappings":"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"}
@@ -2,10 +2,9 @@ import type { DataFormat, JsxChildren } from '@generaltranslation/format/types';
2
2
  /**
3
3
  * Given jsx children, calculate hash
4
4
  */
5
- export default function hashSource({ source, context, id, maxChars, requiresReview, dataFormat, }: {
5
+ export default function hashSource({ source, context, maxChars, requiresReview, dataFormat, }: {
6
6
  source: JsxChildren | string;
7
7
  context?: string;
8
- id?: string;
9
8
  maxChars?: number;
10
9
  requiresReview?: boolean;
11
10
  dataFormat: DataFormat;
@@ -1 +1 @@
1
- {"version":3,"file":"calculateHash.d.ts","sourceRoot":"","sources":["../../src/utils/calculateHash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAEV,WAAW,EAIZ,MAAM,kCAAkC,CAAC;AAG1C;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,MAAM,EACN,OAAO,EACP,EAAE,EACF,QAAQ,EACR,cAAc,EACd,UAAU,GACX,EAAE;IACD,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;CACxB,GAAG,MAAM,CAwBT"}
1
+ {"version":3,"file":"calculateHash.d.ts","sourceRoot":"","sources":["../../src/utils/calculateHash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAEV,WAAW,EAIZ,MAAM,kCAAkC,CAAC;AAG1C;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,MAAM,EACN,OAAO,EACP,QAAQ,EACR,cAAc,EACd,UAAU,GACX,EAAE;IACD,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;CACxB,GAAG,MAAM,CAgBT"}
@@ -8,11 +8,10 @@ let generaltranslation_id = require("generaltranslation/id");
8
8
  /**
9
9
  * Given jsx children, calculate hash
10
10
  */
11
- function hashSource({ source, context, id, maxChars, requiresReview, dataFormat }) {
11
+ function hashSource({ source, context, maxChars, requiresReview, dataFormat }) {
12
12
  if (dataFormat === "ICU" || dataFormat === "I18NEXT") return (0, generaltranslation_id.hashSource)({
13
13
  source,
14
14
  context,
15
- id,
16
15
  maxChars,
17
16
  requiresReview,
18
17
  dataFormat
@@ -21,7 +20,6 @@ function hashSource({ source, context, id, maxChars, requiresReview, dataFormat
21
20
  return (0, generaltranslation_id.hashSource)({
22
21
  source,
23
22
  context,
24
- id,
25
23
  maxChars,
26
24
  requiresReview,
27
25
  dataFormat
@@ -1 +1 @@
1
- {"version":3,"file":"calculateHash.js","names":[],"sources":["../../src/utils/calculateHash.ts"],"sourcesContent":["import type {\n DataFormat,\n JsxChild,\n JsxChildren,\n JsxElement,\n Variable,\n VariableType,\n} from '@generaltranslation/format/types';\nimport { hashSource as _hashSource } from 'generaltranslation/id';\n\n/**\n * Given jsx children, calculate hash\n */\nexport default function hashSource({\n source,\n context,\n id,\n maxChars,\n requiresReview,\n dataFormat,\n}: {\n source: JsxChildren | string;\n context?: string;\n id?: string;\n maxChars?: number;\n requiresReview?: boolean;\n dataFormat: DataFormat;\n}): string {\n // No change needed for ICU or I18NEXT\n if (dataFormat === 'ICU' || dataFormat === 'I18NEXT') {\n return _hashSource({\n source,\n context,\n id,\n maxChars,\n requiresReview,\n dataFormat,\n });\n }\n // For Jsx, we set hash to empty string if it contains a static component\n if (containsStatic(source)) {\n return '';\n }\n return _hashSource({\n source,\n context,\n id,\n maxChars,\n requiresReview,\n dataFormat,\n });\n}\n\n/* =============================================== */\n/* =============== HELPER FUNCTIONS ============== */\n/* =============================================== */\n\n/**\n * Check if the given source contains a static component\n * @param source\n */\nfunction containsStatic(source: JsxChildren): boolean {\n return handleChildren(source);\n}\n\nfunction handleChildren(source: JsxChildren): boolean {\n if (Array.isArray(source)) {\n return source.some((child) => handleChild(child));\n }\n return handleChild(source);\n}\n\nfunction handleChild(child: JsxChild): boolean {\n if (typeof child === 'string') {\n return false;\n }\n if (isVariable(child)) {\n return handleVariable(child);\n }\n return handleElement(child);\n}\n\nfunction handleVariable(variable: Variable): boolean {\n if (variable.v === ('s' as VariableType)) {\n return true;\n }\n return false;\n}\n\nfunction handleElement(element: JsxElement): boolean {\n // branches\n if (\n element.d &&\n element.d.t &&\n ['p', 'b'].includes(element.d.t) &&\n element.d.b\n ) {\n return Object.values(element.d.b).some((branch) => handleChildren(branch));\n }\n // children\n if (element.c) {\n return handleChildren(element.c);\n }\n return false;\n}\n\nfunction isVariable(obj: unknown): obj is Variable {\n const variableObj = obj as Variable;\n if (\n variableObj &&\n typeof variableObj === 'object' &&\n typeof (variableObj as Variable).k === 'string'\n ) {\n const k = Object.keys(variableObj);\n if (k.length === 1) return true;\n if (k.length === 2) {\n if (typeof variableObj.i === 'number') return true;\n if (typeof variableObj.v === 'string') return true;\n }\n if (k.length === 3) {\n if (\n typeof variableObj.v === 'string' &&\n typeof variableObj.i === 'number'\n )\n return true;\n }\n }\n return false;\n}\n"],"mappings":";;;;;;;;;;AAaA,SAAwB,WAAW,EACjC,QACA,SACA,IACA,UACA,gBACA,cAQS;AAET,KAAI,eAAe,SAAS,eAAe,UACzC,SAAA,GAAA,sBAAA,YAAmB;EACjB;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAGJ,KAAI,eAAe,OAAO,CACxB,QAAO;AAET,SAAA,GAAA,sBAAA,YAAmB;EACjB;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;;;;;;AAWJ,SAAS,eAAe,QAA8B;AACpD,QAAO,eAAe,OAAO;;AAG/B,SAAS,eAAe,QAA8B;AACpD,KAAI,MAAM,QAAQ,OAAO,CACvB,QAAO,OAAO,MAAM,UAAU,YAAY,MAAM,CAAC;AAEnD,QAAO,YAAY,OAAO;;AAG5B,SAAS,YAAY,OAA0B;AAC7C,KAAI,OAAO,UAAU,SACnB,QAAO;AAET,KAAI,WAAW,MAAM,CACnB,QAAO,eAAe,MAAM;AAE9B,QAAO,cAAc,MAAM;;AAG7B,SAAS,eAAe,UAA6B;AACnD,KAAI,SAAS,MAAO,IAClB,QAAO;AAET,QAAO;;AAGT,SAAS,cAAc,SAA8B;AAEnD,KACE,QAAQ,KACR,QAAQ,EAAE,KACV,CAAC,KAAK,IAAI,CAAC,SAAS,QAAQ,EAAE,EAAE,IAChC,QAAQ,EAAE,EAEV,QAAO,OAAO,OAAO,QAAQ,EAAE,EAAE,CAAC,MAAM,WAAW,eAAe,OAAO,CAAC;AAG5E,KAAI,QAAQ,EACV,QAAO,eAAe,QAAQ,EAAE;AAElC,QAAO;;AAGT,SAAS,WAAW,KAA+B;CACjD,MAAM,cAAc;AACpB,KACE,eACA,OAAO,gBAAgB,YACvB,OAAQ,YAAyB,MAAM,UACvC;EACA,MAAM,IAAI,OAAO,KAAK,YAAY;AAClC,MAAI,EAAE,WAAW,EAAG,QAAO;AAC3B,MAAI,EAAE,WAAW,GAAG;AAClB,OAAI,OAAO,YAAY,MAAM,SAAU,QAAO;AAC9C,OAAI,OAAO,YAAY,MAAM,SAAU,QAAO;;AAEhD,MAAI,EAAE,WAAW;OAEb,OAAO,YAAY,MAAM,YACzB,OAAO,YAAY,MAAM,SAEzB,QAAO;;;AAGb,QAAO"}
1
+ {"version":3,"file":"calculateHash.js","names":[],"sources":["../../src/utils/calculateHash.ts"],"sourcesContent":["import type {\n DataFormat,\n JsxChild,\n JsxChildren,\n JsxElement,\n Variable,\n VariableType,\n} from '@generaltranslation/format/types';\nimport { hashSource as _hashSource } from 'generaltranslation/id';\n\n/**\n * Given jsx children, calculate hash\n */\nexport default function hashSource({\n source,\n context,\n maxChars,\n requiresReview,\n dataFormat,\n}: {\n source: JsxChildren | string;\n context?: string;\n maxChars?: number;\n requiresReview?: boolean;\n dataFormat: DataFormat;\n}): string {\n // Delegate to the shared hasher without custom ids; ids are metadata only.\n if (dataFormat === 'ICU' || dataFormat === 'I18NEXT') {\n return _hashSource({\n source,\n context,\n maxChars,\n requiresReview,\n dataFormat,\n });\n }\n // For Jsx, we set hash to empty string if it contains a static component\n if (containsStatic(source)) {\n return '';\n }\n return _hashSource({ source, context, maxChars, requiresReview, dataFormat });\n}\n\n/* =============================================== */\n/* =============== HELPER FUNCTIONS ============== */\n/* =============================================== */\n\n/**\n * Check if the given source contains a static component\n * @param source\n */\nfunction containsStatic(source: JsxChildren): boolean {\n return handleChildren(source);\n}\n\nfunction handleChildren(source: JsxChildren): boolean {\n if (Array.isArray(source)) {\n return source.some((child) => handleChild(child));\n }\n return handleChild(source);\n}\n\nfunction handleChild(child: JsxChild): boolean {\n if (typeof child === 'string') {\n return false;\n }\n if (isVariable(child)) {\n return handleVariable(child);\n }\n return handleElement(child);\n}\n\nfunction handleVariable(variable: Variable): boolean {\n if (variable.v === ('s' as VariableType)) {\n return true;\n }\n return false;\n}\n\nfunction handleElement(element: JsxElement): boolean {\n // branches\n if (\n element.d &&\n element.d.t &&\n ['p', 'b'].includes(element.d.t) &&\n element.d.b\n ) {\n return Object.values(element.d.b).some((branch) => handleChildren(branch));\n }\n // children\n if (element.c) {\n return handleChildren(element.c);\n }\n return false;\n}\n\nfunction isVariable(obj: unknown): obj is Variable {\n const variableObj = obj as Variable;\n if (\n variableObj &&\n typeof variableObj === 'object' &&\n typeof (variableObj as Variable).k === 'string'\n ) {\n const k = Object.keys(variableObj);\n if (k.length === 1) return true;\n if (k.length === 2) {\n if (typeof variableObj.i === 'number') return true;\n if (typeof variableObj.v === 'string') return true;\n }\n if (k.length === 3) {\n if (\n typeof variableObj.v === 'string' &&\n typeof variableObj.i === 'number'\n )\n return true;\n }\n }\n return false;\n}\n"],"mappings":";;;;;;;;;;AAaA,SAAwB,WAAW,EACjC,QACA,SACA,UACA,gBACA,cAOS;AAET,KAAI,eAAe,SAAS,eAAe,UACzC,SAAA,GAAA,sBAAA,YAAmB;EACjB;EACA;EACA;EACA;EACA;EACD,CAAC;AAGJ,KAAI,eAAe,OAAO,CACxB,QAAO;AAET,SAAA,GAAA,sBAAA,YAAmB;EAAE;EAAQ;EAAS;EAAU;EAAgB;EAAY,CAAC;;;;;;AAW/E,SAAS,eAAe,QAA8B;AACpD,QAAO,eAAe,OAAO;;AAG/B,SAAS,eAAe,QAA8B;AACpD,KAAI,MAAM,QAAQ,OAAO,CACvB,QAAO,OAAO,MAAM,UAAU,YAAY,MAAM,CAAC;AAEnD,QAAO,YAAY,OAAO;;AAG5B,SAAS,YAAY,OAA0B;AAC7C,KAAI,OAAO,UAAU,SACnB,QAAO;AAET,KAAI,WAAW,MAAM,CACnB,QAAO,eAAe,MAAM;AAE9B,QAAO,cAAc,MAAM;;AAG7B,SAAS,eAAe,UAA6B;AACnD,KAAI,SAAS,MAAO,IAClB,QAAO;AAET,QAAO;;AAGT,SAAS,cAAc,SAA8B;AAEnD,KACE,QAAQ,KACR,QAAQ,EAAE,KACV,CAAC,KAAK,IAAI,CAAC,SAAS,QAAQ,EAAE,EAAE,IAChC,QAAQ,EAAE,EAEV,QAAO,OAAO,OAAO,QAAQ,EAAE,EAAE,CAAC,MAAM,WAAW,eAAe,OAAO,CAAC;AAG5E,KAAI,QAAQ,EACV,QAAO,eAAe,QAAQ,EAAE;AAElC,QAAO;;AAGT,SAAS,WAAW,KAA+B;CACjD,MAAM,cAAc;AACpB,KACE,eACA,OAAO,gBAAgB,YACvB,OAAQ,YAAyB,MAAM,UACvC;EACA,MAAM,IAAI,OAAO,KAAK,YAAY;AAClC,MAAI,EAAE,WAAW,EAAG,QAAO;AAC3B,MAAI,EAAE,WAAW,GAAG;AAClB,OAAI,OAAO,YAAY,MAAM,SAAU,QAAO;AAC9C,OAAI,OAAO,YAAY,MAAM,SAAU,QAAO;;AAEhD,MAAI,EAAE,WAAW;OAEb,OAAO,YAAY,MAAM,YACzB,OAAO,YAAY,MAAM,SAEzB,QAAO;;;AAGb,QAAO"}
@@ -9,7 +9,6 @@ export declare enum GT_COMPONENT_TYPES {
9
9
  DateTime = "DateTime",
10
10
  RelativeTime = "RelativeTime",
11
11
  Num = "Num",
12
- Static = "Static",
13
12
  Derive = "Derive",
14
13
  Branch = "Branch",
15
14
  Plural = "Plural",
@@ -36,7 +35,6 @@ export declare enum GT_FUNCTIONS_WITH_CALLBACKS {
36
35
  */
37
36
  export declare enum GT_OTHER_FUNCTIONS {
38
37
  msg = "msg",
39
- declareStatic = "declareStatic",
40
38
  t = "t",
41
39
  derive = "derive",
42
40
  GtInternalRuntimeTranslateString = "GtInternalRuntimeTranslateString",
@@ -64,7 +62,7 @@ export declare const GT_FUNCTIONS_TO_CALLBACKS: Record<GT_FUNCTIONS_WITH_CALLBAC
64
62
  /**
65
63
  * GT derive functions
66
64
  */
67
- export declare const GT_DERIVE_STRING_FUNCTIONS: readonly [GT_OTHER_FUNCTIONS.declareStatic, GT_OTHER_FUNCTIONS.derive];
65
+ export declare const GT_DERIVE_STRING_FUNCTIONS: readonly [GT_OTHER_FUNCTIONS.derive];
68
66
  /**
69
67
  * All gt functions (both regular and callback functions)
70
68
  */
@@ -74,7 +72,6 @@ export type GT_ALL_FUNCTIONS = GT_FUNCTIONS | GT_CALLBACK_FUNCTIONS | GT_COMPONE
74
72
  */
75
73
  export declare enum GT_IMPORT_SOURCES {
76
74
  GT_NEXT = "gt-next",
77
- GT_NEXT_CLIENT = "gt-next/client",
78
75
  GT_NEXT_SERVER = "gt-next/server",
79
76
  GT_REACT = "gt-react",
80
77
  GT_REACT_CLIENT = "gt-react/client",
@@ -120,7 +117,6 @@ export declare const MINIFY_CANONICAL_NAME_MAP: {
120
117
  readonly DateTime: "d";
121
118
  readonly GtInternalDateTime: "d";
122
119
  readonly RelativeTime: "rt";
123
- readonly Static: "s";
124
120
  readonly Derive: "s";
125
121
  readonly Branch: "b";
126
122
  readonly Plural: "p";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/utils/constants/gt/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,kBAAkB;IAC5B,CAAC,MAAM;IACP,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,cAAc,mBAAmB;IACjC,sBAAsB,2BAA2B;IACjD,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;CAC1C;AAED;;GAEG;AACH,oBAAY,2BAA2B;IACrC,KAAK,UAAU;IACf,KAAK,UAAU;IACf,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;IACnC,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;CAC5B;AAED;;GAEG;AACH,oBAAY,kBAAkB;IAC5B,GAAG,QAAQ;IACX,aAAa,kBAAkB;IAC/B,CAAC,MAAM;IACP,MAAM,WAAW;IACjB,gCAAgC,qCAAqC;IACrE,6BAA6B,kCAAkC;CAChE;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,2BAA2B,GAAG,kBAAkB,CAAC;AAC5E;;GAEG;AACH,oBAAY,qBAAqB;IAC/B,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,wBAAwB,6BAA6B;IACrD,wBAAwB,6BAA6B;IACrD,oBAAoB,yBAAyB;IAC7C,oBAAoB,yBAAyB;CAC9C;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAC5C,2BAA2B,EAC3B,qBAAqB,CAYtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,wEAG7B,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,qBAAqB,GACrB,kBAAkB,CAAC;AAEvB;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,QAAQ,aAAa;IACrB,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IACrC,OAAO,YAAY;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,aAAsB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,aAA4B,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,YAAY,aAUvB,CAAC;AAEH;;GAEG;AACH,oBAAY,sBAAsB;IAChC,GAAG,QAAQ;IACX,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,eAAe,oBAAoB;CACpC;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;CAc5B,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/utils/constants/gt/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,kBAAkB;IAC5B,CAAC,MAAM;IACP,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,cAAc,mBAAmB;IACjC,sBAAsB,2BAA2B;IACjD,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;CAC1C;AAED;;GAEG;AACH,oBAAY,2BAA2B;IACrC,KAAK,UAAU;IACf,KAAK,UAAU;IACf,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;IACnC,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;CAC5B;AAED;;GAEG;AACH,oBAAY,kBAAkB;IAC5B,GAAG,QAAQ;IACX,CAAC,MAAM;IACP,MAAM,WAAW;IACjB,gCAAgC,qCAAqC;IACrE,6BAA6B,kCAAkC;CAChE;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,2BAA2B,GAAG,kBAAkB,CAAC;AAC5E;;GAEG;AACH,oBAAY,qBAAqB;IAC/B,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,wBAAwB,6BAA6B;IACrD,wBAAwB,6BAA6B;IACrD,oBAAoB,yBAAyB;IAC7C,oBAAoB,yBAAyB;CAC9C;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAC5C,2BAA2B,EAC3B,qBAAqB,CAYtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,sCAAuC,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,qBAAqB,GACrB,kBAAkB,CAAC;AAEvB;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,cAAc,mBAAmB;IACjC,QAAQ,aAAa;IACrB,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IACrC,OAAO,YAAY;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,aAAsB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,aAA4B,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,YAAY,aAUvB,CAAC;AAEH;;GAEG;AACH,oBAAY,sBAAsB;IAChC,GAAG,QAAQ;IACX,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,eAAe,oBAAoB;CACpC;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;CAa5B,CAAC"}
@@ -11,7 +11,6 @@ let GT_COMPONENT_TYPES = /* @__PURE__ */ function(GT_COMPONENT_TYPES) {
11
11
  GT_COMPONENT_TYPES["DateTime"] = "DateTime";
12
12
  GT_COMPONENT_TYPES["RelativeTime"] = "RelativeTime";
13
13
  GT_COMPONENT_TYPES["Num"] = "Num";
14
- GT_COMPONENT_TYPES["Static"] = "Static";
15
14
  GT_COMPONENT_TYPES["Derive"] = "Derive";
16
15
  GT_COMPONENT_TYPES["Branch"] = "Branch";
17
16
  GT_COMPONENT_TYPES["Plural"] = "Plural";
@@ -40,7 +39,6 @@ let GT_FUNCTIONS_WITH_CALLBACKS = /* @__PURE__ */ function(GT_FUNCTIONS_WITH_CAL
40
39
  */
41
40
  let GT_OTHER_FUNCTIONS = /* @__PURE__ */ function(GT_OTHER_FUNCTIONS) {
42
41
  GT_OTHER_FUNCTIONS["msg"] = "msg";
43
- GT_OTHER_FUNCTIONS["declareStatic"] = "declareStatic";
44
42
  GT_OTHER_FUNCTIONS["t"] = "t";
45
43
  GT_OTHER_FUNCTIONS["derive"] = "derive";
46
44
  GT_OTHER_FUNCTIONS["GtInternalRuntimeTranslateString"] = "GtInternalRuntimeTranslateString";
@@ -73,13 +71,12 @@ const GT_FUNCTIONS_TO_CALLBACKS = {
73
71
  /**
74
72
  * GT derive functions
75
73
  */
76
- const GT_DERIVE_STRING_FUNCTIONS = ["declareStatic", "derive"];
74
+ const GT_DERIVE_STRING_FUNCTIONS = ["derive"];
77
75
  /**
78
76
  * GT import sources
79
77
  */
80
78
  let GT_IMPORT_SOURCES = /* @__PURE__ */ function(GT_IMPORT_SOURCES) {
81
79
  GT_IMPORT_SOURCES["GT_NEXT"] = "gt-next";
82
- GT_IMPORT_SOURCES["GT_NEXT_CLIENT"] = "gt-next/client";
83
80
  GT_IMPORT_SOURCES["GT_NEXT_SERVER"] = "gt-next/server";
84
81
  GT_IMPORT_SOURCES["GT_REACT"] = "gt-react";
85
82
  GT_IMPORT_SOURCES["GT_REACT_CLIENT"] = "gt-react/client";
@@ -137,7 +134,6 @@ const MINIFY_CANONICAL_NAME_MAP = {
137
134
  ["DateTime"]: "d",
138
135
  ["GtInternalDateTime"]: "d",
139
136
  ["RelativeTime"]: "rt",
140
- ["Static"]: "s",
141
137
  ["Derive"]: "s",
142
138
  ["Branch"]: "b",
143
139
  ["Plural"]: "p"
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":[],"sources":["../../../../src/utils/constants/gt/constants.ts"],"sourcesContent":["/**\n * Different gt components\n */\nexport enum GT_COMPONENT_TYPES {\n T = 'T',\n Tx = 'Tx',\n Var = 'Var',\n Currency = 'Currency',\n DateTime = 'DateTime',\n RelativeTime = 'RelativeTime',\n Num = 'Num',\n Static = 'Static',\n Derive = 'Derive',\n Branch = 'Branch',\n Plural = 'Plural',\n LocaleSelector = 'LocaleSelector',\n GtInternalTranslateJsx = 'GtInternalTranslateJsx',\n GtInternalVar = 'GtInternalVar',\n GtInternalNum = 'GtInternalNum',\n GtInternalCurrency = 'GtInternalCurrency',\n GtInternalDateTime = 'GtInternalDateTime',\n}\n\n/**\n * GT functions that produce callbacks\n */\nexport enum GT_FUNCTIONS_WITH_CALLBACKS {\n useGT = 'useGT',\n getGT = 'getGT',\n useTranslations = 'useTranslations',\n getTranslations = 'getTranslations',\n useMessages = 'useMessages',\n getMessages = 'getMessages',\n}\n\n/**\n * Other GT functions\n */\nexport enum GT_OTHER_FUNCTIONS {\n msg = 'msg',\n declareStatic = 'declareStatic',\n t = 't',\n derive = 'derive',\n GtInternalRuntimeTranslateString = 'GtInternalRuntimeTranslateString',\n GtInternalRuntimeTranslateJsx = 'GtInternalRuntimeTranslateJsx',\n}\n\n/**\n * Different gt functions\n */\nexport type GT_FUNCTIONS = GT_FUNCTIONS_WITH_CALLBACKS | GT_OTHER_FUNCTIONS;\n/**\n * gt callback functions\n */\nexport enum GT_CALLBACK_FUNCTIONS {\n useGT_callback = 'useGT_callback',\n getGT_callback = 'getGT_callback',\n useTranslations_callback = 'useTranslations_callback',\n getTranslations_callback = 'getTranslations_callback',\n useMessages_callback = 'useMessages_callback',\n getMessages_callback = 'getMessages_callback',\n}\n\n/**\n * Maps GT Functions to their callback functions\n */\nexport const GT_FUNCTIONS_TO_CALLBACKS: Record<\n GT_FUNCTIONS_WITH_CALLBACKS,\n GT_CALLBACK_FUNCTIONS\n> = {\n [GT_FUNCTIONS_WITH_CALLBACKS.useGT]: GT_CALLBACK_FUNCTIONS.useGT_callback,\n [GT_FUNCTIONS_WITH_CALLBACKS.getGT]: GT_CALLBACK_FUNCTIONS.getGT_callback,\n [GT_FUNCTIONS_WITH_CALLBACKS.useTranslations]:\n GT_CALLBACK_FUNCTIONS.useTranslations_callback,\n [GT_FUNCTIONS_WITH_CALLBACKS.getTranslations]:\n GT_CALLBACK_FUNCTIONS.getTranslations_callback,\n [GT_FUNCTIONS_WITH_CALLBACKS.useMessages]:\n GT_CALLBACK_FUNCTIONS.useMessages_callback,\n [GT_FUNCTIONS_WITH_CALLBACKS.getMessages]:\n GT_CALLBACK_FUNCTIONS.getMessages_callback,\n};\n\n/**\n * GT derive functions\n */\nexport const GT_DERIVE_STRING_FUNCTIONS = [\n GT_OTHER_FUNCTIONS.declareStatic,\n GT_OTHER_FUNCTIONS.derive,\n] as const;\n\n/**\n * All gt functions (both regular and callback functions)\n */\nexport type GT_ALL_FUNCTIONS =\n | GT_FUNCTIONS\n | GT_CALLBACK_FUNCTIONS\n | GT_COMPONENT_TYPES;\n\n/**\n * GT import sources\n */\nexport enum GT_IMPORT_SOURCES {\n GT_NEXT = 'gt-next',\n GT_NEXT_CLIENT = 'gt-next/client',\n GT_NEXT_SERVER = 'gt-next/server',\n GT_REACT = 'gt-react',\n GT_REACT_CLIENT = 'gt-react/client',\n GT_REACT_BROWSER = 'gt-react/browser',\n GT_I18N = 'gt-i18n',\n}\n\n/**\n * Branch control props — not translatable content.\n * `branch` is the selector key; `data-*` props are HTML attributes ignored at runtime.\n * `data-*` is handled as a prefix check, not listed here.\n */\nexport const BRANCH_CONTROL_PROPS = new Set(['branch']);\n\n/**\n * Plural control props — not translatable content.\n * `n` is the count, `locales` is the locale hint.\n */\nexport const PLURAL_CONTROL_PROPS = new Set(['n', 'locales']);\n\n/**\n * Set of valid plural forms for Plural components\n */\nexport const PLURAL_FORMS = new Set([\n 'singular',\n 'plural',\n 'dual',\n 'zero',\n 'one',\n 'two',\n 'few',\n 'many',\n 'other',\n]);\n\n/**\n * Fields that must be string literals for useGT_callback / getGT_callback\n */\nexport enum USEGT_CALLBACK_OPTIONS {\n $id = '$id',\n $context = '$context',\n $maxChars = '$maxChars',\n $_hash = '$_hash',\n $format = '$format',\n $requiresReview = '$requiresReview',\n}\n\n/**\n * Maps GT Component Types to their minified names\n */\nexport const MINIFY_CANONICAL_NAME_MAP = {\n [GT_COMPONENT_TYPES.Var]: 'v',\n [GT_COMPONENT_TYPES.GtInternalVar]: 'v',\n [GT_COMPONENT_TYPES.Num]: 'n',\n [GT_COMPONENT_TYPES.GtInternalNum]: 'n',\n [GT_COMPONENT_TYPES.Currency]: 'c',\n [GT_COMPONENT_TYPES.GtInternalCurrency]: 'c',\n [GT_COMPONENT_TYPES.DateTime]: 'd',\n [GT_COMPONENT_TYPES.GtInternalDateTime]: 'd',\n [GT_COMPONENT_TYPES.RelativeTime]: 'rt',\n [GT_COMPONENT_TYPES.Static]: 's',\n [GT_COMPONENT_TYPES.Derive]: 's',\n [GT_COMPONENT_TYPES.Branch]: 'b',\n [GT_COMPONENT_TYPES.Plural]: 'p',\n} as const;\n"],"mappings":";;;;;AAGA,IAAY,qBAAL,yBAAA,oBAAA;AACL,oBAAA,OAAA;AACA,oBAAA,QAAA;AACA,oBAAA,SAAA;AACA,oBAAA,cAAA;AACA,oBAAA,cAAA;AACA,oBAAA,kBAAA;AACA,oBAAA,SAAA;AACA,oBAAA,YAAA;AACA,oBAAA,YAAA;AACA,oBAAA,YAAA;AACA,oBAAA,YAAA;AACA,oBAAA,oBAAA;AACA,oBAAA,4BAAA;AACA,oBAAA,mBAAA;AACA,oBAAA,mBAAA;AACA,oBAAA,wBAAA;AACA,oBAAA,wBAAA;;KACD;;;;AAKD,IAAY,8BAAL,yBAAA,6BAAA;AACL,6BAAA,WAAA;AACA,6BAAA,WAAA;AACA,6BAAA,qBAAA;AACA,6BAAA,qBAAA;AACA,6BAAA,iBAAA;AACA,6BAAA,iBAAA;;KACD;;;;AAKD,IAAY,qBAAL,yBAAA,oBAAA;AACL,oBAAA,SAAA;AACA,oBAAA,mBAAA;AACA,oBAAA,OAAA;AACA,oBAAA,YAAA;AACA,oBAAA,sCAAA;AACA,oBAAA,mCAAA;;KACD;;;;AASD,IAAY,wBAAL,yBAAA,uBAAA;AACL,uBAAA,oBAAA;AACA,uBAAA,oBAAA;AACA,uBAAA,8BAAA;AACA,uBAAA,8BAAA;AACA,uBAAA,0BAAA;AACA,uBAAA,0BAAA;;KACD;;;;AAKD,MAAa,4BAGT;;;;;;;CAWH;;;;AAKD,MAAa,6BAA6B,CAAA,iBAAA,SAGzC;;;;AAaD,IAAY,oBAAL,yBAAA,mBAAA;AACL,mBAAA,aAAA;AACA,mBAAA,oBAAA;AACA,mBAAA,oBAAA;AACA,mBAAA,cAAA;AACA,mBAAA,qBAAA;AACA,mBAAA,sBAAA;AACA,mBAAA,aAAA;;KACD;;;;;;AAOD,MAAa,uBAAuB,IAAI,IAAI,CAAC,SAAS,CAAC;;;;;AAMvD,MAAa,uBAAuB,IAAI,IAAI,CAAC,KAAK,UAAU,CAAC;;;;AAK7D,MAAa,eAAe,IAAI,IAAI;CAClC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;;;AAKF,IAAY,yBAAL,yBAAA,wBAAA;AACL,wBAAA,SAAA;AACA,wBAAA,cAAA;AACA,wBAAA,eAAA;AACA,wBAAA,YAAA;AACA,wBAAA,aAAA;AACA,wBAAA,qBAAA;;KACD;;;;AAKD,MAAa,4BAA4B;UACb;oBACU;UACV;oBACU;eACL;yBACU;eACV;yBACU;mBACN;aACN;aACA;aACA;aACA;CAC9B"}
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../../../src/utils/constants/gt/constants.ts"],"sourcesContent":["/**\n * Different gt components\n */\nexport enum GT_COMPONENT_TYPES {\n T = 'T',\n Tx = 'Tx',\n Var = 'Var',\n Currency = 'Currency',\n DateTime = 'DateTime',\n RelativeTime = 'RelativeTime',\n Num = 'Num',\n Derive = 'Derive',\n Branch = 'Branch',\n Plural = 'Plural',\n LocaleSelector = 'LocaleSelector',\n GtInternalTranslateJsx = 'GtInternalTranslateJsx',\n GtInternalVar = 'GtInternalVar',\n GtInternalNum = 'GtInternalNum',\n GtInternalCurrency = 'GtInternalCurrency',\n GtInternalDateTime = 'GtInternalDateTime',\n}\n\n/**\n * GT functions that produce callbacks\n */\nexport enum GT_FUNCTIONS_WITH_CALLBACKS {\n useGT = 'useGT',\n getGT = 'getGT',\n useTranslations = 'useTranslations',\n getTranslations = 'getTranslations',\n useMessages = 'useMessages',\n getMessages = 'getMessages',\n}\n\n/**\n * Other GT functions\n */\nexport enum GT_OTHER_FUNCTIONS {\n msg = 'msg',\n t = 't',\n derive = 'derive',\n GtInternalRuntimeTranslateString = 'GtInternalRuntimeTranslateString',\n GtInternalRuntimeTranslateJsx = 'GtInternalRuntimeTranslateJsx',\n}\n\n/**\n * Different gt functions\n */\nexport type GT_FUNCTIONS = GT_FUNCTIONS_WITH_CALLBACKS | GT_OTHER_FUNCTIONS;\n/**\n * gt callback functions\n */\nexport enum GT_CALLBACK_FUNCTIONS {\n useGT_callback = 'useGT_callback',\n getGT_callback = 'getGT_callback',\n useTranslations_callback = 'useTranslations_callback',\n getTranslations_callback = 'getTranslations_callback',\n useMessages_callback = 'useMessages_callback',\n getMessages_callback = 'getMessages_callback',\n}\n\n/**\n * Maps GT Functions to their callback functions\n */\nexport const GT_FUNCTIONS_TO_CALLBACKS: Record<\n GT_FUNCTIONS_WITH_CALLBACKS,\n GT_CALLBACK_FUNCTIONS\n> = {\n [GT_FUNCTIONS_WITH_CALLBACKS.useGT]: GT_CALLBACK_FUNCTIONS.useGT_callback,\n [GT_FUNCTIONS_WITH_CALLBACKS.getGT]: GT_CALLBACK_FUNCTIONS.getGT_callback,\n [GT_FUNCTIONS_WITH_CALLBACKS.useTranslations]:\n GT_CALLBACK_FUNCTIONS.useTranslations_callback,\n [GT_FUNCTIONS_WITH_CALLBACKS.getTranslations]:\n GT_CALLBACK_FUNCTIONS.getTranslations_callback,\n [GT_FUNCTIONS_WITH_CALLBACKS.useMessages]:\n GT_CALLBACK_FUNCTIONS.useMessages_callback,\n [GT_FUNCTIONS_WITH_CALLBACKS.getMessages]:\n GT_CALLBACK_FUNCTIONS.getMessages_callback,\n};\n\n/**\n * GT derive functions\n */\nexport const GT_DERIVE_STRING_FUNCTIONS = [GT_OTHER_FUNCTIONS.derive] as const;\n\n/**\n * All gt functions (both regular and callback functions)\n */\nexport type GT_ALL_FUNCTIONS =\n | GT_FUNCTIONS\n | GT_CALLBACK_FUNCTIONS\n | GT_COMPONENT_TYPES;\n\n/**\n * GT import sources\n */\nexport enum GT_IMPORT_SOURCES {\n GT_NEXT = 'gt-next',\n GT_NEXT_SERVER = 'gt-next/server',\n GT_REACT = 'gt-react',\n GT_REACT_CLIENT = 'gt-react/client',\n GT_REACT_BROWSER = 'gt-react/browser',\n GT_I18N = 'gt-i18n',\n}\n\n/**\n * Branch control props — not translatable content.\n * `branch` is the selector key; `data-*` props are HTML attributes ignored at runtime.\n * `data-*` is handled as a prefix check, not listed here.\n */\nexport const BRANCH_CONTROL_PROPS = new Set(['branch']);\n\n/**\n * Plural control props — not translatable content.\n * `n` is the count, `locales` is the locale hint.\n */\nexport const PLURAL_CONTROL_PROPS = new Set(['n', 'locales']);\n\n/**\n * Set of valid plural forms for Plural components\n */\nexport const PLURAL_FORMS = new Set([\n 'singular',\n 'plural',\n 'dual',\n 'zero',\n 'one',\n 'two',\n 'few',\n 'many',\n 'other',\n]);\n\n/**\n * Fields that must be string literals for useGT_callback / getGT_callback\n */\nexport enum USEGT_CALLBACK_OPTIONS {\n $id = '$id',\n $context = '$context',\n $maxChars = '$maxChars',\n $_hash = '$_hash',\n $format = '$format',\n $requiresReview = '$requiresReview',\n}\n\n/**\n * Maps GT Component Types to their minified names\n */\nexport const MINIFY_CANONICAL_NAME_MAP = {\n [GT_COMPONENT_TYPES.Var]: 'v',\n [GT_COMPONENT_TYPES.GtInternalVar]: 'v',\n [GT_COMPONENT_TYPES.Num]: 'n',\n [GT_COMPONENT_TYPES.GtInternalNum]: 'n',\n [GT_COMPONENT_TYPES.Currency]: 'c',\n [GT_COMPONENT_TYPES.GtInternalCurrency]: 'c',\n [GT_COMPONENT_TYPES.DateTime]: 'd',\n [GT_COMPONENT_TYPES.GtInternalDateTime]: 'd',\n [GT_COMPONENT_TYPES.RelativeTime]: 'rt',\n [GT_COMPONENT_TYPES.Derive]: 's',\n [GT_COMPONENT_TYPES.Branch]: 'b',\n [GT_COMPONENT_TYPES.Plural]: 'p',\n} as const;\n"],"mappings":";;;;;AAGA,IAAY,qBAAL,yBAAA,oBAAA;AACL,oBAAA,OAAA;AACA,oBAAA,QAAA;AACA,oBAAA,SAAA;AACA,oBAAA,cAAA;AACA,oBAAA,cAAA;AACA,oBAAA,kBAAA;AACA,oBAAA,SAAA;AACA,oBAAA,YAAA;AACA,oBAAA,YAAA;AACA,oBAAA,YAAA;AACA,oBAAA,oBAAA;AACA,oBAAA,4BAAA;AACA,oBAAA,mBAAA;AACA,oBAAA,mBAAA;AACA,oBAAA,wBAAA;AACA,oBAAA,wBAAA;;KACD;;;;AAKD,IAAY,8BAAL,yBAAA,6BAAA;AACL,6BAAA,WAAA;AACA,6BAAA,WAAA;AACA,6BAAA,qBAAA;AACA,6BAAA,qBAAA;AACA,6BAAA,iBAAA;AACA,6BAAA,iBAAA;;KACD;;;;AAKD,IAAY,qBAAL,yBAAA,oBAAA;AACL,oBAAA,SAAA;AACA,oBAAA,OAAA;AACA,oBAAA,YAAA;AACA,oBAAA,sCAAA;AACA,oBAAA,mCAAA;;KACD;;;;AASD,IAAY,wBAAL,yBAAA,uBAAA;AACL,uBAAA,oBAAA;AACA,uBAAA,oBAAA;AACA,uBAAA,8BAAA;AACA,uBAAA,8BAAA;AACA,uBAAA,0BAAA;AACA,uBAAA,0BAAA;;KACD;;;;AAKD,MAAa,4BAGT;;;;;;;CAWH;;;;AAKD,MAAa,6BAA6B,CAAA,SAA2B;;;;AAarE,IAAY,oBAAL,yBAAA,mBAAA;AACL,mBAAA,aAAA;AACA,mBAAA,oBAAA;AACA,mBAAA,cAAA;AACA,mBAAA,qBAAA;AACA,mBAAA,sBAAA;AACA,mBAAA,aAAA;;KACD;;;;;;AAOD,MAAa,uBAAuB,IAAI,IAAI,CAAC,SAAS,CAAC;;;;;AAMvD,MAAa,uBAAuB,IAAI,IAAI,CAAC,KAAK,UAAU,CAAC;;;;AAK7D,MAAa,eAAe,IAAI,IAAI;CAClC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;;;AAKF,IAAY,yBAAL,yBAAA,wBAAA;AACL,wBAAA,SAAA;AACA,wBAAA,cAAA;AACA,wBAAA,eAAA;AACA,wBAAA,YAAA;AACA,wBAAA,aAAA;AACA,wBAAA,qBAAA;;KACD;;;;AAKD,MAAa,4BAA4B;UACb;oBACU;UACV;oBACU;eACL;yBACU;eACV;yBACU;mBACN;aACN;aACA;aACA;CAC9B"}
@@ -49,6 +49,8 @@ export declare function isTranslationFunctionCallback(name: string): name is GT_
49
49
  * Check if it's a GT import source
50
50
  */
51
51
  export declare function isGTImportSource(name: string): name is GT_IMPORT_SOURCES;
52
+ export declare function isGTReactImportSource(name: string): name is GT_IMPORT_SOURCES.GT_REACT | GT_IMPORT_SOURCES.GT_REACT_CLIENT | GT_IMPORT_SOURCES.GT_REACT_BROWSER;
53
+ export declare function getGtReactImportSource(legacyGtReactImportSource: boolean): GT_IMPORT_SOURCES.GT_REACT | GT_IMPORT_SOURCES.GT_REACT_BROWSER;
52
54
  /**
53
55
  * Check if is a html content prop
54
56
  */
@@ -71,7 +73,6 @@ export declare const defaultVariableNames: {
71
73
  readonly Currency: "cost";
72
74
  readonly GtInternalCurrency: "cost";
73
75
  readonly Derive: "static";
74
- readonly Static: "static";
75
76
  };
76
77
  /**
77
78
  * Get the variable name
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/utils/constants/gt/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,2BAA2B,EAC3B,iBAAiB,EAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,2BAA2B,EAC5B,MAAM,kCAAkC,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,gBAAgB,CAiCnE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,GACX,IAAI,IAAI,2BAA2B,CASrC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,kBAAkB,CAEtE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,GACX,IAAI,IAAI,kBAAkB,CAAC,CAAC,CAK9B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,kBAAkB,CAc5E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,kBAAkB,CAI1E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,kBAAkB,CAI1E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,OAAO,GAAG,OAAO,CAE7E;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,GACX,IAAI,IAAI,qBAAqB,CAS/B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,iBAAiB,CAYxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GACX,IAAI,IAAI,MAAM,2BAA2B,CAI3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,GAAG,MAAM,CAM7E;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;CAYvB,CAAC;AAGX;;GAEG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,OAAO,oBAAoB,EAC/C,EAAE,EAAE,MAAM,EACV,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAIR"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/utils/constants/gt/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,2BAA2B,EAC3B,iBAAiB,EAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,2BAA2B,EAC5B,MAAM,kCAAkC,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,gBAAgB,CAiCnE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,GACX,IAAI,IAAI,2BAA2B,CASrC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,kBAAkB,CAEtE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,GACX,IAAI,IAAI,kBAAkB,CAAC,CAAC,CAK9B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,kBAAkB,CAc5E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,kBAAkB,CAE1E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,kBAAkB,CAI1E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,OAAO,GAAG,OAAO,CAE7E;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,GACX,IAAI,IAAI,qBAAqB,CAS/B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,iBAAiB,CAWxE;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GACX,IAAI,IACH,iBAAiB,CAAC,QAAQ,GAC1B,iBAAiB,CAAC,eAAe,GACjC,iBAAiB,CAAC,gBAAgB,CAQrC;AAED,wBAAgB,sBAAsB,CACpC,yBAAyB,EAAE,OAAO,GACjC,iBAAiB,CAAC,QAAQ,GAAG,iBAAiB,CAAC,gBAAgB,CAIjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GACX,IAAI,IAAI,MAAM,2BAA2B,CAI3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,GAAG,MAAM,CAM7E;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;CAWvB,CAAC;AAGX;;GAEG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,OAAO,oBAAoB,EAC/C,EAAE,EAAE,MAAM,EACV,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAIR"}
@@ -21,6 +21,7 @@ function isGTFunction(name) {
21
21
  "getMessages",
22
22
  "msg",
23
23
  "t",
24
+ "derive",
24
25
  "useGT_callback",
25
26
  "getGT_callback",
26
27
  "useTranslations_callback",
@@ -30,7 +31,6 @@ function isGTFunction(name) {
30
31
  "T",
31
32
  "Tx",
32
33
  "Var",
33
- "Static",
34
34
  "Derive",
35
35
  "Currency",
36
36
  "DateTime",
@@ -94,7 +94,7 @@ function isVariableComponent(name) {
94
94
  * Check if a name is a GT derive component
95
95
  */
96
96
  function isDeriveComponent(name) {
97
- return ["Derive", "Static"].includes(name);
97
+ return name === "Derive";
98
98
  }
99
99
  /**
100
100
  * Check if a name is a GT branch component
@@ -127,7 +127,6 @@ function isTranslationFunctionCallback(name) {
127
127
  function isGTImportSource(name) {
128
128
  return [
129
129
  "gt-next",
130
- "gt-next/client",
131
130
  "gt-next/server",
132
131
  "gt-react",
133
132
  "gt-react/client",
@@ -135,6 +134,16 @@ function isGTImportSource(name) {
135
134
  "gt-i18n"
136
135
  ].includes(name);
137
136
  }
137
+ function isGTReactImportSource(name) {
138
+ return [
139
+ "gt-react",
140
+ "gt-react/client",
141
+ "gt-react/browser"
142
+ ].includes(name);
143
+ }
144
+ function getGtReactImportSource(legacyGtReactImportSource) {
145
+ return legacyGtReactImportSource ? "gt-react/browser" : "gt-react";
146
+ }
138
147
  /**
139
148
  * Check if is a html content prop
140
149
  */
@@ -160,8 +169,7 @@ const defaultVariableNames = {
160
169
  ["RelativeTime"]: "time",
161
170
  ["Currency"]: "cost",
162
171
  ["GtInternalCurrency"]: "cost",
163
- ["Derive"]: "static",
164
- ["Static"]: "static"
172
+ ["Derive"]: "static"
165
173
  };
166
174
  const baseVariablePrefix = "_gt_";
167
175
  /**
@@ -173,6 +181,7 @@ function getVariableName(variableType, id, name) {
173
181
  }
174
182
  //#endregion
175
183
  exports.defaultVariableNames = defaultVariableNames;
184
+ exports.getGtReactImportSource = getGtReactImportSource;
176
185
  exports.getVariableName = getVariableName;
177
186
  exports.isBranchComponent = isBranchComponent;
178
187
  exports.isDeriveComponent = isDeriveComponent;
@@ -180,6 +189,7 @@ exports.isGTComponent = isGTComponent;
180
189
  exports.isGTFunction = isGTFunction;
181
190
  exports.isGTFunctionWithCallbacks = isGTFunctionWithCallbacks;
182
191
  exports.isGTImportSource = isGTImportSource;
192
+ exports.isGTReactImportSource = isGTReactImportSource;
183
193
  exports.isHtmlContentProp = isHtmlContentProp;
184
194
  exports.isTranslationComponent = isTranslationComponent;
185
195
  exports.isTranslationFunction = isTranslationFunction;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","names":["GT_COMPONENT_TYPES","HTML_CONTENT_PROPS","MINIFY_CANONICAL_NAME_MAP"],"sources":["../../../../src/utils/constants/gt/helpers.ts"],"sourcesContent":["/**\n * Analysis utilities for identifying GT components and functions\n */\n\nimport {\n GT_ALL_FUNCTIONS,\n GT_CALLBACK_FUNCTIONS,\n GT_COMPONENT_TYPES,\n GT_FUNCTIONS_WITH_CALLBACKS,\n GT_IMPORT_SOURCES,\n MINIFY_CANONICAL_NAME_MAP,\n} from './constants';\nimport {\n HTML_CONTENT_PROPS,\n HtmlContentPropValuesRecord,\n} from '@generaltranslation/format/types';\n\n/**\n * Check if a name is a GT function\n * @param name - The name to check\n * @returns True if the name is a GT function\n */\nexport function isGTFunction(name: string): name is GT_ALL_FUNCTIONS {\n return [\n 'useGT',\n 'getGT',\n 'useTranslations',\n 'getTranslations',\n 'useMessages',\n 'getMessages',\n 'msg',\n 't',\n 'useGT_callback',\n 'getGT_callback',\n 'useTranslations_callback',\n 'getTranslations_callback',\n 'useMessages_callback',\n 'getMessages_callback',\n 'T',\n 'Tx',\n 'Var',\n 'Static',\n 'Derive',\n 'Currency',\n 'DateTime',\n 'RelativeTime',\n 'Num',\n 'Branch',\n 'Plural',\n 'GtInternalTranslateJsx',\n 'GtInternalVar',\n 'GtInternalNum',\n 'GtInternalCurrency',\n 'GtInternalDateTime',\n ].includes(name);\n}\n\n/**\n * Check if a name is a GT function with callbacks\n * @param name - The name to check\n * @returns True if the name is a GT function with callbacks\n */\nexport function isGTFunctionWithCallbacks(\n name: string\n): name is GT_FUNCTIONS_WITH_CALLBACKS {\n return [\n 'useGT',\n 'getGT',\n 'useTranslations',\n 'getTranslations',\n 'useMessages',\n 'getMessages',\n ].includes(name);\n}\n\n/**\n * Check if a name is a GT component\n * @param name - The name to check\n * @returns True if the name is a GT component\n */\nexport function isGTComponent(name: string): name is GT_COMPONENT_TYPES {\n return Object.values(GT_COMPONENT_TYPES).includes(name as GT_COMPONENT_TYPES);\n}\n\n/**\n * Check if a component name matches known gt-next translation components\n */\nexport function isTranslationComponent(\n name: string\n): name is GT_COMPONENT_TYPES.T {\n return [\n GT_COMPONENT_TYPES.T,\n GT_COMPONENT_TYPES.GtInternalTranslateJsx,\n ].includes(name as GT_COMPONENT_TYPES);\n}\n\n/**\n * Check if a component name matches known gt-next variable components\n */\nexport function isVariableComponent(name: string): name is GT_COMPONENT_TYPES {\n return (\n [\n GT_COMPONENT_TYPES.Var,\n GT_COMPONENT_TYPES.Num,\n GT_COMPONENT_TYPES.Currency,\n GT_COMPONENT_TYPES.DateTime,\n GT_COMPONENT_TYPES.RelativeTime,\n GT_COMPONENT_TYPES.GtInternalVar,\n GT_COMPONENT_TYPES.GtInternalNum,\n GT_COMPONENT_TYPES.GtInternalCurrency,\n GT_COMPONENT_TYPES.GtInternalDateTime,\n ] as string[]\n ).includes(name);\n}\n\n/**\n * Check if a name is a GT derive component\n */\nexport function isDeriveComponent(name: string): name is GT_COMPONENT_TYPES {\n return [GT_COMPONENT_TYPES.Derive, GT_COMPONENT_TYPES.Static].includes(\n name as GT_COMPONENT_TYPES\n );\n}\n\n/**\n * Check if a name is a GT branch component\n */\nexport function isBranchComponent(name: string): name is GT_COMPONENT_TYPES {\n return (\n [GT_COMPONENT_TYPES.Branch, GT_COMPONENT_TYPES.Plural] as string[]\n ).includes(name);\n}\n\n/**\n * Check if a name is a GT translation function\n */\nexport function isTranslationFunction(name: string): name is 'useGT' | 'getGT' {\n return ['useGT', 'getGT'].includes(name);\n}\n\n/**\n * Check if it's a translation function callback (const t = useGT())\n */\nexport function isTranslationFunctionCallback(\n name: string\n): name is GT_CALLBACK_FUNCTIONS {\n return [\n 'useGT_callback',\n 'getGT_callback',\n 'useTranslations_callback',\n 'getTranslations_callback',\n 'useMessages_callback',\n 'getMessages_callback',\n ].includes(name);\n}\n\n/**\n * Check if it's a GT import source\n */\nexport function isGTImportSource(name: string): name is GT_IMPORT_SOURCES {\n return (\n [\n GT_IMPORT_SOURCES.GT_NEXT,\n GT_IMPORT_SOURCES.GT_NEXT_CLIENT,\n GT_IMPORT_SOURCES.GT_NEXT_SERVER,\n GT_IMPORT_SOURCES.GT_REACT,\n GT_IMPORT_SOURCES.GT_REACT_CLIENT,\n GT_IMPORT_SOURCES.GT_REACT_BROWSER,\n GT_IMPORT_SOURCES.GT_I18N,\n ] as string[]\n ).includes(name);\n}\n\n/**\n * Check if is a html content prop\n */\nexport function isHtmlContentProp(\n name: string\n): name is keyof HtmlContentPropValuesRecord {\n return Object.values(HTML_CONTENT_PROPS).includes(\n name as keyof HtmlContentPropValuesRecord\n );\n}\n\n/**\n * Minify the canonical name\n */\nexport function minifyCanonicalName(canonicalName: GT_COMPONENT_TYPES): string {\n return (\n MINIFY_CANONICAL_NAME_MAP[\n canonicalName as keyof typeof MINIFY_CANONICAL_NAME_MAP\n ] || canonicalName\n );\n}\n\n/**\n * Default variable names\n */\nexport const defaultVariableNames = {\n [GT_COMPONENT_TYPES.Var]: 'value',\n [GT_COMPONENT_TYPES.GtInternalVar]: 'value',\n [GT_COMPONENT_TYPES.Num]: 'n',\n [GT_COMPONENT_TYPES.GtInternalNum]: 'n',\n [GT_COMPONENT_TYPES.DateTime]: 'date',\n [GT_COMPONENT_TYPES.GtInternalDateTime]: 'date',\n [GT_COMPONENT_TYPES.RelativeTime]: 'time',\n [GT_COMPONENT_TYPES.Currency]: 'cost',\n [GT_COMPONENT_TYPES.GtInternalCurrency]: 'cost',\n [GT_COMPONENT_TYPES.Derive]: 'static',\n [GT_COMPONENT_TYPES.Static]: 'static',\n} as const;\nconst baseVariablePrefix = '_gt_';\n\n/**\n * Get the variable name\n */\nexport function getVariableName(\n variableType: keyof typeof defaultVariableNames,\n id: number,\n name?: string\n): string {\n if (name) return name;\n const baseVariableName = defaultVariableNames[variableType] || 'value';\n return `${baseVariablePrefix}${baseVariableName}_${id}`;\n}\n"],"mappings":";;;;;;;;;;;;;AAsBA,SAAgB,aAAa,MAAwC;AACnE,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,SAAS,KAAK;;;;;;;AAQlB,SAAgB,0BACd,MACqC;AACrC,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,SAAS,KAAK;;;;;;;AAQlB,SAAgB,cAAc,MAA0C;AACtE,QAAO,OAAO,OAAOA,qCAAAA,mBAAmB,CAAC,SAAS,KAA2B;;;;;AAM/E,SAAgB,uBACd,MAC8B;AAC9B,QAAO,CAAA,KAAA,yBAGN,CAAC,SAAS,KAA2B;;;;;AAMxC,SAAgB,oBAAoB,MAA0C;AAC5E,QACE;;;;;;;;;;EAUC,CACD,SAAS,KAAK;;;;;AAMlB,SAAgB,kBAAkB,MAA0C;AAC1E,QAAO,CAAA,UAAA,SAAsD,CAAC,SAC5D,KACD;;;;;AAMH,SAAgB,kBAAkB,MAA0C;AAC1E,QACE,CAAA,UAAA,SAAsD,CACtD,SAAS,KAAK;;;;;AAMlB,SAAgB,sBAAsB,MAAyC;AAC7E,QAAO,CAAC,SAAS,QAAQ,CAAC,SAAS,KAAK;;;;;AAM1C,SAAgB,8BACd,MAC+B;AAC/B,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,SAAS,KAAK;;;;;AAMlB,SAAgB,iBAAiB,MAAyC;AACxE,QACE;;;;;;;;EAQC,CACD,SAAS,KAAK;;;;;AAMlB,SAAgB,kBACd,MAC2C;AAC3C,QAAO,OAAO,OAAOC,iCAAAA,mBAAmB,CAAC,SACvC,KACD;;;;;AAMH,SAAgB,oBAAoB,eAA2C;AAC7E,QACEC,qCAAAA,0BACE,kBACG;;;;;AAOT,MAAa,uBAAuB;UACR;oBACU;UACV;oBACU;eACL;yBACU;mBACN;eACJ;yBACU;aACZ;aACA;CAC9B;AACD,MAAM,qBAAqB;;;;AAK3B,SAAgB,gBACd,cACA,IACA,MACQ;AACR,KAAI,KAAM,QAAO;AAEjB,QAAO,GAAG,qBADe,qBAAqB,iBAAiB,QACf,GAAG"}
1
+ {"version":3,"file":"helpers.js","names":["GT_COMPONENT_TYPES","HTML_CONTENT_PROPS","MINIFY_CANONICAL_NAME_MAP"],"sources":["../../../../src/utils/constants/gt/helpers.ts"],"sourcesContent":["/**\n * Analysis utilities for identifying GT components and functions\n */\n\nimport {\n GT_ALL_FUNCTIONS,\n GT_CALLBACK_FUNCTIONS,\n GT_COMPONENT_TYPES,\n GT_FUNCTIONS_WITH_CALLBACKS,\n GT_IMPORT_SOURCES,\n MINIFY_CANONICAL_NAME_MAP,\n} from './constants';\nimport {\n HTML_CONTENT_PROPS,\n HtmlContentPropValuesRecord,\n} from '@generaltranslation/format/types';\n\n/**\n * Check if a name is a GT function\n * @param name - The name to check\n * @returns True if the name is a GT function\n */\nexport function isGTFunction(name: string): name is GT_ALL_FUNCTIONS {\n return [\n 'useGT',\n 'getGT',\n 'useTranslations',\n 'getTranslations',\n 'useMessages',\n 'getMessages',\n 'msg',\n 't',\n 'derive',\n 'useGT_callback',\n 'getGT_callback',\n 'useTranslations_callback',\n 'getTranslations_callback',\n 'useMessages_callback',\n 'getMessages_callback',\n 'T',\n 'Tx',\n 'Var',\n 'Derive',\n 'Currency',\n 'DateTime',\n 'RelativeTime',\n 'Num',\n 'Branch',\n 'Plural',\n 'GtInternalTranslateJsx',\n 'GtInternalVar',\n 'GtInternalNum',\n 'GtInternalCurrency',\n 'GtInternalDateTime',\n ].includes(name);\n}\n\n/**\n * Check if a name is a GT function with callbacks\n * @param name - The name to check\n * @returns True if the name is a GT function with callbacks\n */\nexport function isGTFunctionWithCallbacks(\n name: string\n): name is GT_FUNCTIONS_WITH_CALLBACKS {\n return [\n 'useGT',\n 'getGT',\n 'useTranslations',\n 'getTranslations',\n 'useMessages',\n 'getMessages',\n ].includes(name);\n}\n\n/**\n * Check if a name is a GT component\n * @param name - The name to check\n * @returns True if the name is a GT component\n */\nexport function isGTComponent(name: string): name is GT_COMPONENT_TYPES {\n return Object.values(GT_COMPONENT_TYPES).includes(name as GT_COMPONENT_TYPES);\n}\n\n/**\n * Check if a component name matches known gt-next translation components\n */\nexport function isTranslationComponent(\n name: string\n): name is GT_COMPONENT_TYPES.T {\n return [\n GT_COMPONENT_TYPES.T,\n GT_COMPONENT_TYPES.GtInternalTranslateJsx,\n ].includes(name as GT_COMPONENT_TYPES);\n}\n\n/**\n * Check if a component name matches known gt-next variable components\n */\nexport function isVariableComponent(name: string): name is GT_COMPONENT_TYPES {\n return (\n [\n GT_COMPONENT_TYPES.Var,\n GT_COMPONENT_TYPES.Num,\n GT_COMPONENT_TYPES.Currency,\n GT_COMPONENT_TYPES.DateTime,\n GT_COMPONENT_TYPES.RelativeTime,\n GT_COMPONENT_TYPES.GtInternalVar,\n GT_COMPONENT_TYPES.GtInternalNum,\n GT_COMPONENT_TYPES.GtInternalCurrency,\n GT_COMPONENT_TYPES.GtInternalDateTime,\n ] as string[]\n ).includes(name);\n}\n\n/**\n * Check if a name is a GT derive component\n */\nexport function isDeriveComponent(name: string): name is GT_COMPONENT_TYPES {\n return name === GT_COMPONENT_TYPES.Derive;\n}\n\n/**\n * Check if a name is a GT branch component\n */\nexport function isBranchComponent(name: string): name is GT_COMPONENT_TYPES {\n return (\n [GT_COMPONENT_TYPES.Branch, GT_COMPONENT_TYPES.Plural] as string[]\n ).includes(name);\n}\n\n/**\n * Check if a name is a GT translation function\n */\nexport function isTranslationFunction(name: string): name is 'useGT' | 'getGT' {\n return ['useGT', 'getGT'].includes(name);\n}\n\n/**\n * Check if it's a translation function callback (const t = useGT())\n */\nexport function isTranslationFunctionCallback(\n name: string\n): name is GT_CALLBACK_FUNCTIONS {\n return [\n 'useGT_callback',\n 'getGT_callback',\n 'useTranslations_callback',\n 'getTranslations_callback',\n 'useMessages_callback',\n 'getMessages_callback',\n ].includes(name);\n}\n\n/**\n * Check if it's a GT import source\n */\nexport function isGTImportSource(name: string): name is GT_IMPORT_SOURCES {\n return (\n [\n GT_IMPORT_SOURCES.GT_NEXT,\n GT_IMPORT_SOURCES.GT_NEXT_SERVER,\n GT_IMPORT_SOURCES.GT_REACT,\n GT_IMPORT_SOURCES.GT_REACT_CLIENT,\n GT_IMPORT_SOURCES.GT_REACT_BROWSER,\n GT_IMPORT_SOURCES.GT_I18N,\n ] as string[]\n ).includes(name);\n}\n\nexport function isGTReactImportSource(\n name: string\n): name is\n | GT_IMPORT_SOURCES.GT_REACT\n | GT_IMPORT_SOURCES.GT_REACT_CLIENT\n | GT_IMPORT_SOURCES.GT_REACT_BROWSER {\n return (\n [\n GT_IMPORT_SOURCES.GT_REACT,\n GT_IMPORT_SOURCES.GT_REACT_CLIENT,\n GT_IMPORT_SOURCES.GT_REACT_BROWSER,\n ] as string[]\n ).includes(name);\n}\n\nexport function getGtReactImportSource(\n legacyGtReactImportSource: boolean\n): GT_IMPORT_SOURCES.GT_REACT | GT_IMPORT_SOURCES.GT_REACT_BROWSER {\n return legacyGtReactImportSource\n ? GT_IMPORT_SOURCES.GT_REACT_BROWSER\n : GT_IMPORT_SOURCES.GT_REACT;\n}\n\n/**\n * Check if is a html content prop\n */\nexport function isHtmlContentProp(\n name: string\n): name is keyof HtmlContentPropValuesRecord {\n return Object.values(HTML_CONTENT_PROPS).includes(\n name as keyof HtmlContentPropValuesRecord\n );\n}\n\n/**\n * Minify the canonical name\n */\nexport function minifyCanonicalName(canonicalName: GT_COMPONENT_TYPES): string {\n return (\n MINIFY_CANONICAL_NAME_MAP[\n canonicalName as keyof typeof MINIFY_CANONICAL_NAME_MAP\n ] || canonicalName\n );\n}\n\n/**\n * Default variable names\n */\nexport const defaultVariableNames = {\n [GT_COMPONENT_TYPES.Var]: 'value',\n [GT_COMPONENT_TYPES.GtInternalVar]: 'value',\n [GT_COMPONENT_TYPES.Num]: 'n',\n [GT_COMPONENT_TYPES.GtInternalNum]: 'n',\n [GT_COMPONENT_TYPES.DateTime]: 'date',\n [GT_COMPONENT_TYPES.GtInternalDateTime]: 'date',\n [GT_COMPONENT_TYPES.RelativeTime]: 'time',\n [GT_COMPONENT_TYPES.Currency]: 'cost',\n [GT_COMPONENT_TYPES.GtInternalCurrency]: 'cost',\n [GT_COMPONENT_TYPES.Derive]: 'static',\n} as const;\nconst baseVariablePrefix = '_gt_';\n\n/**\n * Get the variable name\n */\nexport function getVariableName(\n variableType: keyof typeof defaultVariableNames,\n id: number,\n name?: string\n): string {\n if (name) return name;\n const baseVariableName = defaultVariableNames[variableType] || 'value';\n return `${baseVariablePrefix}${baseVariableName}_${id}`;\n}\n"],"mappings":";;;;;;;;;;;;;AAsBA,SAAgB,aAAa,MAAwC;AACnE,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,SAAS,KAAK;;;;;;;AAQlB,SAAgB,0BACd,MACqC;AACrC,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,SAAS,KAAK;;;;;;;AAQlB,SAAgB,cAAc,MAA0C;AACtE,QAAO,OAAO,OAAOA,qCAAAA,mBAAmB,CAAC,SAAS,KAA2B;;;;;AAM/E,SAAgB,uBACd,MAC8B;AAC9B,QAAO,CAAA,KAAA,yBAGN,CAAC,SAAS,KAA2B;;;;;AAMxC,SAAgB,oBAAoB,MAA0C;AAC5E,QACE;;;;;;;;;;EAUC,CACD,SAAS,KAAK;;;;;AAMlB,SAAgB,kBAAkB,MAA0C;AAC1E,QAAO,SAAA;;;;;AAMT,SAAgB,kBAAkB,MAA0C;AAC1E,QACE,CAAA,UAAA,SAAsD,CACtD,SAAS,KAAK;;;;;AAMlB,SAAgB,sBAAsB,MAAyC;AAC7E,QAAO,CAAC,SAAS,QAAQ,CAAC,SAAS,KAAK;;;;;AAM1C,SAAgB,8BACd,MAC+B;AAC/B,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,SAAS,KAAK;;;;;AAMlB,SAAgB,iBAAiB,MAAyC;AACxE,QACE;;;;;;;EAOC,CACD,SAAS,KAAK;;AAGlB,SAAgB,sBACd,MAIqC;AACrC,QACE;;;;EAIC,CACD,SAAS,KAAK;;AAGlB,SAAgB,uBACd,2BACiE;AACjE,QAAO,4BAAA,qBAAA;;;;;AAQT,SAAgB,kBACd,MAC2C;AAC3C,QAAO,OAAO,OAAOC,iCAAAA,mBAAmB,CAAC,SACvC,KACD;;;;;AAMH,SAAgB,oBAAoB,eAA2C;AAC7E,QACEC,qCAAAA,0BACE,kBACG;;;;;AAOT,MAAa,uBAAuB;UACR;oBACU;UACV;oBACU;eACL;yBACU;mBACN;eACJ;yBACU;aACZ;CAC9B;AACD,MAAM,qBAAqB;;;;AAK3B,SAAgB,gBACd,cACA,IACA,MACQ;AACR,KAAI,KAAM,QAAO;AAEjB,QAAO,GAAG,qBADe,qBAAqB,iBAAiB,QACf,GAAG"}
@@ -12,6 +12,6 @@ export declare function isUserTranslationComponent(firstArgPath: NodePath<t.Expr
12
12
  export declare function isUserVariableComponent(firstArgPath: NodePath<t.Expression>): boolean;
13
13
  /** Check if first arg is Branch or Plural */
14
14
  export declare function isGTBranchComponent(firstArgPath: NodePath<t.Expression>): boolean;
15
- /** Check if first arg is Derive or Static */
15
+ /** Check if first arg is Derive */
16
16
  export declare function isGTDeriveComponent(firstArgPath: NodePath<t.Expression>): boolean;
17
17
  //# sourceMappingURL=isGTComponent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isGTComponent.d.ts","sourceRoot":"","sources":["../../../../src/utils/constants/resolveIdentifier/isGTComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAIlC;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GACnC,MAAM,GAAG,IAAI,CAkBf;AAED,oFAAoF;AACpF,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GACnC,OAAO,CAET;AAED,uFAAuF;AACvF,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GACnC,OAAO,CAST;AAED,6CAA6C;AAC7C,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GACnC,OAAO,CAKT;AAED,6CAA6C;AAC7C,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GACnC,OAAO,CAKT"}
1
+ {"version":3,"file":"isGTComponent.d.ts","sourceRoot":"","sources":["../../../../src/utils/constants/resolveIdentifier/isGTComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAIlC;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GACnC,MAAM,GAAG,IAAI,CAkBf;AAED,oFAAoF;AACpF,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GACnC,OAAO,CAET;AAED,uFAAuF;AACvF,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GACnC,OAAO,CAST;AAED,6CAA6C;AAC7C,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GACnC,OAAO,CAKT;AAED,mCAAmC;AACnC,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GACnC,OAAO,CAGT"}
@@ -42,10 +42,9 @@ function isGTBranchComponent(firstArgPath) {
42
42
  const name = resolveFirstArgGTName(firstArgPath);
43
43
  return name === "Branch" || name === "Plural";
44
44
  }
45
- /** Check if first arg is Derive or Static */
45
+ /** Check if first arg is Derive */
46
46
  function isGTDeriveComponent(firstArgPath) {
47
- const name = resolveFirstArgGTName(firstArgPath);
48
- return name === "Derive" || name === "Static";
47
+ return resolveFirstArgGTName(firstArgPath) === "Derive";
49
48
  }
50
49
  //#endregion
51
50
  exports.isGTBranchComponent = isGTBranchComponent;