@generaltranslation/compiler 1.3.26 → 1.3.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.d.ts +12 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -6
- package/dist/index.js.map +1 -1
- package/dist/passes/basePass.d.ts.map +1 -1
- package/dist/passes/basePass.js +9 -10
- package/dist/passes/basePass.js.map +1 -1
- package/dist/processing/collection/processCallExpression.js +6 -3
- package/dist/processing/collection/processCallExpression.js.map +1 -1
- package/dist/processing/collection/processTaggedTemplateExpression.d.ts +1 -1
- package/dist/processing/collection/processTaggedTemplateExpression.js +1 -1
- package/dist/processing/collection/processTaggedTemplateExpression.js.map +1 -1
- package/dist/processing/jsx-insertion/processCallExpression.js.map +1 -1
- package/dist/processing/jsx-insertion/processProgram.d.ts.map +1 -1
- package/dist/processing/jsx-insertion/processProgram.js +1 -1
- package/dist/processing/jsx-insertion/processProgram.js.map +1 -1
- package/dist/processing/macro-expansion/processProgram.js +1 -1
- package/dist/processing/macro-expansion/processProgram.js.map +1 -1
- package/dist/processing/macro-expansion/processTaggedTemplateExpression.d.ts +1 -1
- package/dist/processing/macro-expansion/processTaggedTemplateExpression.js +1 -1
- package/dist/processing/macro-expansion/processTaggedTemplateExpression.js.map +1 -1
- package/dist/processing/processFunctionDeclaration.js +1 -1
- package/dist/processing/processFunctionExpression.js +1 -1
- package/dist/processing/runtime-translate/processProgram.d.ts.map +1 -1
- package/dist/processing/runtime-translate/processProgram.js +2 -1
- package/dist/processing/runtime-translate/processProgram.js.map +1 -1
- package/dist/state/StringCollector.d.ts +7 -3
- package/dist/state/StringCollector.d.ts.map +1 -1
- package/dist/state/StringCollector.js.map +1 -1
- package/dist/state/utils/initializeState.d.ts.map +1 -1
- package/dist/state/utils/initializeState.js +8 -5
- package/dist/state/utils/initializeState.js.map +1 -1
- package/dist/transform/injection/injectCallbackDeclaratorFunctionParameters.d.ts +1 -1
- package/dist/transform/injection/injectCallbackDeclaratorFunctionParameters.js +6 -5
- package/dist/transform/injection/injectCallbackDeclaratorFunctionParameters.js.map +1 -1
- package/dist/transform/jsx-children/constructJsxChildren.js.map +1 -1
- package/dist/transform/jsx-insertion/injectJsxInsertionImport.d.ts +2 -2
- package/dist/transform/jsx-insertion/injectJsxInsertionImport.d.ts.map +1 -1
- package/dist/transform/jsx-insertion/injectJsxInsertionImport.js +4 -3
- package/dist/transform/jsx-insertion/injectJsxInsertionImport.js.map +1 -1
- package/dist/transform/macro-expansion/injectMacroImport.d.ts +2 -2
- package/dist/transform/macro-expansion/injectMacroImport.d.ts.map +1 -1
- package/dist/transform/macro-expansion/injectMacroImport.js +4 -3
- package/dist/transform/macro-expansion/injectMacroImport.js.map +1 -1
- package/dist/transform/registration/callbacks/registerUseGTCallback.d.ts +2 -1
- package/dist/transform/registration/callbacks/registerUseGTCallback.d.ts.map +1 -1
- package/dist/transform/registration/callbacks/registerUseGTCallback.js +3 -2
- package/dist/transform/registration/callbacks/registerUseGTCallback.js.map +1 -1
- package/dist/transform/registration/registerStandaloneTranslation.d.ts +2 -1
- package/dist/transform/registration/registerStandaloneTranslation.d.ts.map +1 -1
- package/dist/transform/registration/registerStandaloneTranslation.js +3 -2
- package/dist/transform/registration/registerStandaloneTranslation.js.map +1 -1
- package/dist/transform/registration/registerTranslationComponent.d.ts +1 -0
- package/dist/transform/registration/registerTranslationComponent.d.ts.map +1 -1
- package/dist/transform/registration/registerTranslationComponent.js +2 -1
- package/dist/transform/registration/registerTranslationComponent.js.map +1 -1
- package/dist/transform/runtime-translate/buildRuntimeTranslateCalls.js +2 -0
- package/dist/transform/runtime-translate/buildRuntimeTranslateCalls.js.map +1 -1
- package/dist/transform/runtime-translate/injectRuntimeTranslateImport.d.ts +3 -2
- package/dist/transform/runtime-translate/injectRuntimeTranslateImport.d.ts.map +1 -1
- package/dist/transform/runtime-translate/injectRuntimeTranslateImport.js +4 -3
- package/dist/transform/runtime-translate/injectRuntimeTranslateImport.js.map +1 -1
- package/dist/transform/validation/validateTranslationComponentArgs.d.ts +1 -0
- package/dist/transform/validation/validateTranslationComponentArgs.d.ts.map +1 -1
- package/dist/transform/validation/validateTranslationComponentArgs.js +23 -1
- package/dist/transform/validation/validateTranslationComponentArgs.js.map +1 -1
- package/dist/transform/validation/validateTranslationFunction.d.ts +1 -0
- package/dist/transform/validation/validateTranslationFunction.d.ts.map +1 -1
- package/dist/transform/validation/validateTranslationFunction.js +26 -4
- package/dist/transform/validation/validateTranslationFunction.js.map +1 -1
- package/dist/utils/calculateHash.d.ts +2 -2
- package/dist/utils/calculateHash.d.ts.map +1 -1
- package/dist/utils/calculateHash.js +3 -3
- package/dist/utils/calculateHash.js.map +1 -1
- package/dist/utils/constants/gt/constants.d.ts +3 -6
- package/dist/utils/constants/gt/constants.d.ts.map +1 -1
- package/dist/utils/constants/gt/constants.js +2 -5
- package/dist/utils/constants/gt/constants.js.map +1 -1
- package/dist/utils/constants/gt/helpers.d.ts +2 -1
- package/dist/utils/constants/gt/helpers.d.ts.map +1 -1
- package/dist/utils/constants/gt/helpers.js +15 -5
- package/dist/utils/constants/gt/helpers.js.map +1 -1
- package/dist/utils/constants/resolveIdentifier/isGTComponent.d.ts +1 -1
- package/dist/utils/constants/resolveIdentifier/isGTComponent.d.ts.map +1 -1
- package/dist/utils/constants/resolveIdentifier/isGTComponent.js +2 -3
- package/dist/utils/constants/resolveIdentifier/isGTComponent.js.map +1 -1
- package/dist/utils/parsing/isStringTranslationTaggedTemplate.d.ts +1 -1
- package/dist/utils/parsing/isStringTranslationTaggedTemplate.js +3 -3
- package/dist/utils/parsing/isStringTranslationTaggedTemplate.js.map +1 -1
- package/dist/utils/validation/validateExpressionIsBooleanLiteral.d.ts +8 -0
- package/dist/utils/validation/validateExpressionIsBooleanLiteral.d.ts.map +1 -0
- package/dist/utils/validation/validateExpressionIsBooleanLiteral.js +17 -0
- package/dist/utils/validation/validateExpressionIsBooleanLiteral.js.map +1 -0
- package/package.json +3 -3
- package/dist/processing/index.d.ts +0 -15
- package/dist/processing/index.d.ts.map +0 -1
- package/dist/processing/index.js +0 -29
- package/dist/transform/jsx-children/index.d.ts +0 -2
- package/dist/transform/jsx-children/index.d.ts.map +0 -1
- package/dist/transform/jsx-children/index.js +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateTranslationComponentArgs.js","names":["t","validateChildrenPropertyFromObjectExpression","constructJsxChildren","getObjectPropertyFromObjectExpression","validateExpressionIsStringLiteral","validateExpressionIsNumericLiteral"],"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 { 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 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 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 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 { errors, id, context, _hash, maxChars, children, hasDeriveContext };\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"],"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} {\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 +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,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,
|
|
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"}
|
|
@@ -43,6 +43,7 @@ function validateTranslationFunction(callExprPath, state) {
|
|
|
43
43
|
let hash;
|
|
44
44
|
let maxChars;
|
|
45
45
|
let format;
|
|
46
|
+
let requiresReview;
|
|
46
47
|
let hasDeriveContext;
|
|
47
48
|
if (callExpr.arguments.length === 1) return {
|
|
48
49
|
errors,
|
|
@@ -67,6 +68,9 @@ function validateTranslationFunction(callExprPath, state) {
|
|
|
67
68
|
const formatProperty = validatePropertyFromObjectExpression(objExprPath, "$format", "string");
|
|
68
69
|
errors.push(...formatProperty.errors);
|
|
69
70
|
format = formatProperty.value;
|
|
71
|
+
const requiresReviewProperty = validatePropertyFromObjectExpression(objExprPath, "$requiresReview", "boolean");
|
|
72
|
+
errors.push(...requiresReviewProperty.errors);
|
|
73
|
+
requiresReview = requiresReviewProperty.value;
|
|
70
74
|
}
|
|
71
75
|
return {
|
|
72
76
|
errors,
|
|
@@ -76,6 +80,7 @@ function validateTranslationFunction(callExprPath, state) {
|
|
|
76
80
|
hash,
|
|
77
81
|
maxChars,
|
|
78
82
|
format,
|
|
83
|
+
requiresReview,
|
|
79
84
|
hasDeriveContext
|
|
80
85
|
};
|
|
81
86
|
}
|
|
@@ -130,7 +135,7 @@ function validatePropertyFromObjectExpression(objExprPath, name, type, state) {
|
|
|
130
135
|
else result.errors.push(...getResolutionErrorMessages(resolved.errors), ...deriveErrors);
|
|
131
136
|
} else result.errors.push(...getResolutionErrorMessages(resolved.errors));
|
|
132
137
|
} else {
|
|
133
|
-
const validatedValue = type === "string" ? validateExpressionIsStringLiteral(value.value) : validateExpressionIsNumericLiteral(value.value);
|
|
138
|
+
const validatedValue = type === "string" ? validateExpressionIsStringLiteral(value.value) : type === "boolean" ? validateExpressionIsBooleanLiteral(value.value) : validateExpressionIsNumericLiteral(value.value);
|
|
134
139
|
result.errors.push(...validatedValue.errors);
|
|
135
140
|
result.value = validatedValue.value;
|
|
136
141
|
}
|
|
@@ -168,11 +173,11 @@ function validateDerive(expr, state, errors) {
|
|
|
168
173
|
errors.push("Expression does not use an allowed call expression");
|
|
169
174
|
return { errors };
|
|
170
175
|
}
|
|
171
|
-
if (type !== "generaltranslation" || canonicalName !== "
|
|
176
|
+
if (type !== "generaltranslation" || canonicalName !== "derive") {
|
|
172
177
|
errors.push("Expression does not use an allowed call expression");
|
|
173
178
|
return { errors };
|
|
174
179
|
}
|
|
175
|
-
|
|
180
|
+
validateDeriveCallExpression(expr, errors);
|
|
176
181
|
return { errors };
|
|
177
182
|
}
|
|
178
183
|
if (_babel_types.isBinaryExpression(expr) && expr.operator === "+") {
|
|
@@ -202,7 +207,7 @@ function validateDerive(expr, state, errors) {
|
|
|
202
207
|
* - the argument is a call expression
|
|
203
208
|
* Example: derive(getName())
|
|
204
209
|
*/
|
|
205
|
-
function
|
|
210
|
+
function validateDeriveCallExpression(expr, errors) {
|
|
206
211
|
if (expr.arguments.length !== 1) {
|
|
207
212
|
errors.push("derive() must have one argument");
|
|
208
213
|
return { errors };
|
|
@@ -222,6 +227,23 @@ function validateDeclareStaticExpression(expr, errors) {
|
|
|
222
227
|
return { errors };
|
|
223
228
|
}
|
|
224
229
|
/**
|
|
230
|
+
* Validate that an expression is a boolean literal (strictly `true` or
|
|
231
|
+
* `false` — never string "true"/"false" or a dynamic expression).
|
|
232
|
+
*
|
|
233
|
+
* NOTE: a standalone predicate with the same logic exists at
|
|
234
|
+
* `../../utils/validation/validateExpressionIsBooleanLiteral` (returns a
|
|
235
|
+
* plain boolean). This local copy returns `{ errors, value }` to match the
|
|
236
|
+
* interface of the sibling string/number validators in this file — the same
|
|
237
|
+
* local-vs-utility duality those validators already have.
|
|
238
|
+
*/
|
|
239
|
+
function validateExpressionIsBooleanLiteral(expr) {
|
|
240
|
+
if (_babel_types.isBooleanLiteral(expr)) return {
|
|
241
|
+
errors: [],
|
|
242
|
+
value: expr.value
|
|
243
|
+
};
|
|
244
|
+
return { errors: ["Expression is not a boolean literal"] };
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
225
247
|
* Validate that an expression is a number literal
|
|
226
248
|
*/
|
|
227
249
|
function validateExpressionIsNumericLiteral(expr) {
|
|
@@ -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 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 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 }\n\n return {\n errors,\n content,\n context,\n id,\n hash,\n maxChars,\n format,\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: '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' | 'string-or-derive',\n state?: TransformState\n): {\n errors: string[];\n value?: string | number;\n hasDeriveExpression?: boolean;\n} {\n const result: {\n errors: string[];\n value?: string | number;\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 : 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 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,11 +2,11 @@ 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,
|
|
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;
|
|
9
|
+
requiresReview?: boolean;
|
|
10
10
|
dataFormat: DataFormat;
|
|
11
11
|
}): string;
|
|
12
12
|
//# sourceMappingURL=calculateHash.d.ts.map
|
|
@@ -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,
|
|
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,20 +8,20 @@ let generaltranslation_id = require("generaltranslation/id");
|
|
|
8
8
|
/**
|
|
9
9
|
* Given jsx children, calculate hash
|
|
10
10
|
*/
|
|
11
|
-
function hashSource({ source, context,
|
|
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,
|
|
16
|
+
requiresReview,
|
|
17
17
|
dataFormat
|
|
18
18
|
});
|
|
19
19
|
if (containsStatic(source)) return "";
|
|
20
20
|
return (0, generaltranslation_id.hashSource)({
|
|
21
21
|
source,
|
|
22
22
|
context,
|
|
23
|
-
id,
|
|
24
23
|
maxChars,
|
|
24
|
+
requiresReview,
|
|
25
25
|
dataFormat
|
|
26
26
|
});
|
|
27
27
|
}
|
|
@@ -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
|
|
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.
|
|
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",
|
|
@@ -104,7 +101,8 @@ export declare enum USEGT_CALLBACK_OPTIONS {
|
|
|
104
101
|
$context = "$context",
|
|
105
102
|
$maxChars = "$maxChars",
|
|
106
103
|
$_hash = "$_hash",
|
|
107
|
-
$format = "$format"
|
|
104
|
+
$format = "$format",
|
|
105
|
+
$requiresReview = "$requiresReview"
|
|
108
106
|
}
|
|
109
107
|
/**
|
|
110
108
|
* Maps GT Component Types to their minified names
|
|
@@ -119,7 +117,6 @@ export declare const MINIFY_CANONICAL_NAME_MAP: {
|
|
|
119
117
|
readonly DateTime: "d";
|
|
120
118
|
readonly GtInternalDateTime: "d";
|
|
121
119
|
readonly RelativeTime: "rt";
|
|
122
|
-
readonly Static: "s";
|
|
123
120
|
readonly Derive: "s";
|
|
124
121
|
readonly Branch: "b";
|
|
125
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,
|
|
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 = ["
|
|
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";
|
|
@@ -121,6 +118,7 @@ let USEGT_CALLBACK_OPTIONS = /* @__PURE__ */ function(USEGT_CALLBACK_OPTIONS) {
|
|
|
121
118
|
USEGT_CALLBACK_OPTIONS["$maxChars"] = "$maxChars";
|
|
122
119
|
USEGT_CALLBACK_OPTIONS["$_hash"] = "$_hash";
|
|
123
120
|
USEGT_CALLBACK_OPTIONS["$format"] = "$format";
|
|
121
|
+
USEGT_CALLBACK_OPTIONS["$requiresReview"] = "$requiresReview";
|
|
124
122
|
return USEGT_CALLBACK_OPTIONS;
|
|
125
123
|
}({});
|
|
126
124
|
/**
|
|
@@ -136,7 +134,6 @@ const MINIFY_CANONICAL_NAME_MAP = {
|
|
|
136
134
|
["DateTime"]: "d",
|
|
137
135
|
["GtInternalDateTime"]: "d",
|
|
138
136
|
["RelativeTime"]: "rt",
|
|
139
|
-
["Static"]: "s",
|
|
140
137
|
["Derive"]: "s",
|
|
141
138
|
["Branch"]: "b",
|
|
142
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
|
|
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,
|
|
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
|
|
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;
|