@generaltranslation/compiler 1.3.24 → 1.3.25-odysseus.1
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 +5 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.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/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/utils/initializeState.d.ts.map +1 -1
- package/dist/state/utils/initializeState.js +7 -4
- package/dist/state/utils/initializeState.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/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.js +0 -1
- package/dist/transform/validation/validateTranslationComponentArgs.js.map +1 -1
- package/dist/transform/validation/validateTranslationFunction.d.ts.map +1 -1
- package/dist/transform/validation/validateTranslationFunction.js +3 -3
- package/dist/transform/validation/validateTranslationFunction.js.map +1 -1
- package/dist/utils/constants/gt/constants.d.ts +1 -5
- package/dist/utils/constants/gt/constants.d.ts.map +1 -1
- package/dist/utils/constants/gt/constants.js +1 -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/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":"constructJsxChildren.js","names":["IdObject","t","validateChildrenElement","dynamicContentError","generateDynamicContentErrorMessage","createErrorLocation","validateTemplateLiteral","validateUnaryExpression","structuralError","validateIdentifier","validateJsxCall","getCalleeNameFromJsxExpressionParam","getTrackedVariable","isVariableComponent","isGTComponent","isDeriveComponent","isReactComponent","validateChildrenFromArgs","isBranchComponent","getBranchComponentParameters","HTML_CONTENT_PROPS","validateStringLiteralPropertyFromArg","validateNameFieldForVarComponent","getVariableName","minifyCanonicalName"],"sources":["../../../src/transform/jsx-children/constructJsxChildren.ts"],"sourcesContent":["import {\n GTProp,\n HTML_CONTENT_PROPS,\n JsxChild,\n JsxChildren,\n JsxElement,\n Variable,\n VariableType as GTVariableType,\n} from '@generaltranslation/format/types';\nimport { TransformState } from '../../state/types';\nimport * as t from '@babel/types';\nimport type { NodePath } from '@babel/traverse';\nimport { validateIdentifier } from './validation/validateIdentifier';\nimport { validateTemplateLiteral } from './validation/validateTemplateLiteral';\nimport { validateChildrenElement } from './validation/validateChildrenElement';\nimport { getCalleeNameFromJsxExpressionParam } from './utils/getCalleeNameFromJsxExpressionParam';\nimport { getTrackedVariable } from '../getTrackedVariable';\nimport { isReactComponent } from '../../utils/constants/react/helpers';\nimport { REACT_COMPONENTS } from '../../utils/constants/react/constants';\nimport { validateChildrenFromArgs } from './validation/validateChildrenFromArgs';\nimport { IdObject } from './utils/id';\nimport { VariableType } from '../../state/ScopeTracker';\nimport {\n defaultVariableNames,\n getVariableName,\n isBranchComponent,\n isDeriveComponent,\n isGTComponent,\n isVariableComponent,\n minifyCanonicalName,\n} from '../../utils/constants/gt/helpers';\nimport { validateStringLiteralPropertyFromArg } from './validation/validateStringLiteralPropertyFromArg';\nimport { GT_COMPONENT_TYPES } from '../../utils/constants/gt/constants';\nimport { getBranchComponentParameters } from './utils/getBranchComponentParameters';\nimport { validateNameFieldForVarComponent } from './validation/validateNameFieldForVarComponent';\nimport { validateUnaryExpression } from './validation/validateUnaryExpression';\nimport {\n createErrorLocation,\n generateDynamicContentErrorMessage,\n} from '../../utils/errors';\nimport { validateJsxCall } from './validation/validateJsxCall';\nimport {\n JsxValidationError,\n dynamicContentError,\n structuralError,\n} from './errors';\n\n/**\n * Given the children of a <T> component, constructs a JsxChildren object.\n * Takes an Expression path.\n *\n * ONLY does JsxChildren construction + validation, no further processing on any children.\n *\n * On invalid children, quit immediately.\n *\n * The node checks intentionally happen before navigating with .get(). This\n * keeps runtime validation behavior stable while preserving NodePath scope for\n * future derivation work.\n */\nexport function constructJsxChildren(\n childrenPath: NodePath<t.Expression> | undefined,\n state: TransformState,\n id: IdObject = new IdObject()\n): { errors: JsxValidationError[]; value?: JsxChildren } {\n const errors: JsxValidationError[] = [];\n\n // Skip if no children\n if (!childrenPath) {\n return { errors, value: childrenPath };\n }\n\n const children = childrenPath.node;\n let value: JsxChildren | undefined;\n if (t.isArrayExpression(children)) {\n // Handle ArrayExpression\n value = [];\n const elementPaths = childrenPath.get('elements');\n\n for (let i = 0; i < children.elements.length; i++) {\n const child = children.elements[i];\n // Validate child\n if (!validateChildrenElement(child)) {\n errors.push(\n dynamicContentError(\n generateDynamicContentErrorMessage() +\n (child && createErrorLocation(child))\n )\n );\n return { errors };\n }\n\n // Special children edge cases: nullLiteral, booleanLiteral\n if (t.isBooleanLiteral(child) || t.isNullLiteral(child)) {\n continue;\n }\n\n // Construct JsxChild\n const childPath = elementPaths[i] as NodePath<\n Exclude<t.Expression, t.ArrayExpression>\n >;\n const validation = constructJsxChild(childPath, state, id);\n errors.push(...validation.errors);\n if (errors.length > 0) {\n return { errors };\n }\n // Skip if no value\n if (validation.value === undefined) continue;\n (value as JsxChild[]).push(validation.value);\n }\n } else {\n // Handle single child\n const validation = constructJsxChild(\n childrenPath as NodePath<Exclude<t.Expression, t.ArrayExpression>>,\n state,\n id\n );\n errors.push(...validation.errors);\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n }\n\n return { errors, value };\n}\n\n/**\n * Given an Expression path, constructs a JsxChild.\n * @returns { errors: string[]; value?: JsxChild }\n */\nfunction constructJsxChild(\n childPath: NodePath<Exclude<t.Expression, t.ArrayExpression>>,\n state: TransformState,\n id: IdObject\n): { errors: JsxValidationError[]; value?: JsxChild } {\n const errors: JsxValidationError[] = [];\n const child = childPath.node;\n let value: JsxChild | undefined;\n\n if (t.isCallExpression(child)) {\n // Construct JsxElement\n const validation = constructJsxElement(\n childPath as NodePath<t.CallExpression>,\n state,\n id\n );\n errors.push(...validation.errors);\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n } else if (t.isStringLiteral(child)) {\n value = child.value;\n } else if (t.isTemplateLiteral(child)) {\n const validation = validateTemplateLiteral(child);\n errors.push(...validation.errors.map((msg) => dynamicContentError(msg)));\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n } else if (t.isNumericLiteral(child)) {\n value = child.value.toString();\n } else if (t.isBooleanLiteral(child)) {\n value = child.value as unknown as JsxChild;\n } else if (t.isNullLiteral(child)) {\n value = null as unknown as JsxChild;\n } else if (t.isUnaryExpression(child)) {\n const validation = validateUnaryExpression(child);\n errors.push(...validation.errors.map((msg) => structuralError(msg)));\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n } else if (t.isIdentifier(child)) {\n // <T>{name}</T> or <T>{undefined}</T>\n const validation = validateIdentifier(child, state);\n errors.push(...validation.errors.map((msg) => dynamicContentError(msg)));\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n } else {\n // Other cases fail\n errors.push(\n dynamicContentError(\n generateDynamicContentErrorMessage() + createErrorLocation(child)\n )\n );\n return { errors };\n }\n\n return { errors, value };\n}\n\n/**\n * Given a CallExpression path, constructs a JsxChild.\n * Handles: Jsx(T, ...children)\n */\nfunction constructJsxElement(\n callExprPath: NodePath<t.CallExpression>,\n state: TransformState,\n id: IdObject\n): { errors: JsxValidationError[]; value?: JsxElement | Variable } {\n const errors: JsxValidationError[] = [];\n const callExpr = callExprPath.node;\n\n // Validate that this is a jsx call\n const jsxValidation = validateJsxCall(callExpr, state);\n errors.push(...jsxValidation.map((msg) => dynamicContentError(msg)));\n if (jsxValidation.length > 0) {\n return { errors };\n }\n\n // Increment id\n id.increment();\n\n // Get first argument\n if (callExpr.arguments.length === 0) {\n return { errors };\n }\n const firstArg = callExpr.arguments[0];\n if (!t.isExpression(firstArg)) {\n errors.push(\n structuralError(\n `Failed to construct JsxElement! First argument must be an expression` +\n createErrorLocation(callExpr.arguments[0])\n )\n );\n return { errors };\n }\n\n // Resolve canonical name\n const { namespaceName, functionName } =\n getCalleeNameFromJsxExpressionParam(firstArg);\n if (!functionName) {\n errors.push(\n structuralError(\n `Failed to construct JsxElement! First argument must be a valid function` +\n createErrorLocation(callExpr.arguments[0])\n )\n );\n return { errors };\n }\n\n // Get the canonical function name\n const { canonicalName, type } = getTrackedVariable(\n state.scopeTracker,\n namespaceName,\n functionName\n );\n\n // Handle variable components\n if (\n canonicalName &&\n type === 'generaltranslation' &&\n isVariableComponent(canonicalName)\n ) {\n const variableValidation = constructVariable(\n canonicalName,\n callExpr.arguments,\n id\n );\n errors.push(\n ...variableValidation.errors.map((msg) => structuralError(msg))\n );\n if (variableValidation.errors.length > 0) {\n return { errors };\n }\n return { errors, value: variableValidation.value! };\n }\n\n // Set the component name\n let componentName: string;\n const idNumber: number = id.get();\n if (canonicalName && type === 'generaltranslation') {\n // Handle GT components: <Var>, <Num>, <Currency>, etc.\n\n // Check that this is a gt component\n if (!isGTComponent(canonicalName)) {\n errors.push(\n structuralError(\n `Failed to construct JsxElement! ${canonicalName} is not a valid GT component` +\n createErrorLocation(callExpr.arguments[0])\n )\n );\n return { errors };\n }\n // Derive/Static - opaque element, skip children validation\n // The compiler doesn't resolve Derive functions; the CLI handles that.\n if (isDeriveComponent(canonicalName)) {\n return {\n errors,\n value: { t: canonicalName, i: idNumber },\n };\n }\n // Get the name of the component\n componentName = canonicalName;\n } else if (canonicalName && type === 'react') {\n // Handle fragment + special react components\n if (!isReactComponent(canonicalName)) {\n errors.push(\n structuralError(\n `Failed to construct JsxElement! ${canonicalName} is not a valid React component` +\n createErrorLocation(callExpr.arguments[0])\n )\n );\n return { errors };\n }\n // Get the name of the component\n componentName =\n canonicalName === REACT_COMPONENTS.Fragment\n ? `C${id.get()}`\n : functionName;\n } else {\n // Handle all other components: div, etc.\n componentName = functionName;\n }\n\n // Get children from args\n const childrenValidation = validateChildrenFromArgs(callExprPath);\n if (childrenValidation.errors.length > 0) {\n errors.push(\n ...childrenValidation.errors.map((msg) => structuralError(msg))\n );\n return { errors };\n }\n\n // Construct JsxChildren\n // For branching components (Branch/Plural), use id.copy() so children and\n // branch props start counting from the same base independently.\n const jsxChildrenValidation = constructJsxChildrenForJsxElement(\n childrenValidation.value,\n state,\n isBranchComponent(canonicalName ?? '') ? id.copy() : id\n );\n errors.push(...jsxChildrenValidation.errors);\n if (jsxChildrenValidation.errors.length > 0) {\n return { errors };\n }\n const children: JsxChildren | undefined = jsxChildrenValidation.value;\n\n // Construct GT Tag\n const tagValidation = constructGTProp(\n callExprPath,\n id,\n state,\n canonicalName,\n type\n );\n errors.push(...tagValidation.errors);\n if (tagValidation.errors.length > 0) {\n return { errors };\n }\n const tag: GTProp | undefined = tagValidation.value;\n\n // Return result\n const value: JsxElement = {\n t: componentName,\n i: idNumber,\n ...(tag !== undefined && { d: tag }),\n ...(children !== undefined && { c: children }),\n };\n return { errors, value };\n}\n\n/**\n * Construct JsxChildren for a JsxElement\n * This is slightly different from constructJsxChildren in how it handles nullLiteral and booleanLiteral\n */\nfunction constructJsxChildrenForJsxElement(\n childrenPath: NodePath<t.Expression> | undefined,\n state: TransformState,\n id: IdObject\n): { errors: JsxValidationError[]; value?: JsxChildren } {\n const errors: JsxValidationError[] = [];\n const children = childrenPath?.node;\n\n // Special children edge cases: nullLiteral, booleanLiteral\n if (t.isNullLiteral(children)) {\n return { errors, value: undefined as unknown as JsxChildren };\n }\n if (t.isBooleanLiteral(children)) {\n return {\n errors,\n value: (children.value || undefined) as unknown as JsxChildren,\n };\n }\n\n // Construct JsxChildren\n return constructJsxChildren(childrenPath, state, id);\n}\n\n/**\n * Given a canonical name, constructs a GTProp\n */\nfunction constructGTProp(\n callExprPath: NodePath<t.CallExpression>,\n id: IdObject,\n state: TransformState,\n canonicalName?: string,\n type?: VariableType\n): { errors: JsxValidationError[]; value?: GTProp } {\n const errors: JsxValidationError[] = [];\n const value: GTProp = {};\n const args = callExprPath.node.arguments;\n\n // Validate Parameters\n if (args.length < 2) {\n errors.push(\n structuralError(\n 'Failed to construct GTProp! Missing parameters' +\n createErrorLocation(args[0])\n )\n );\n return { errors };\n }\n const parameters = args[1];\n if (!t.isObjectExpression(parameters)) {\n errors.push(\n structuralError(\n 'Failed to construct GTProp! Parameter field must be an object expression' +\n createErrorLocation(args[1])\n )\n );\n return { errors };\n }\n\n // For Branch and Plural, get the properties\n const parametersPath = callExprPath.get(\n 'arguments'\n )[1] as NodePath<t.ObjectExpression>;\n\n if (\n canonicalName &&\n type === 'generaltranslation' &&\n isBranchComponent(canonicalName)\n ) {\n // Get the branching parameters\n const branchingParameters = getBranchComponentParameters(\n parametersPath as NodePath<t.ObjectExpression>,\n canonicalName\n );\n // Add branch component branches\n const branches = {} as Record<string, JsxChildren>;\n\n for (const [name, parameterPath] of branchingParameters) {\n const parameter = parameterPath.node;\n // Special exceptions for branches:\n if (t.isNullLiteral(parameter)) {\n branches[name] = null as unknown as JsxChildren;\n continue;\n } else if (t.isBooleanLiteral(parameter)) {\n branches[name] = parameter.value as unknown as JsxChildren;\n continue;\n }\n\n // Otherwise, construct the JsxChildren\n const validation = constructJsxChildren(parameterPath, state, id.copy());\n errors.push(...validation.errors);\n if (validation.errors.length > 0) {\n return { errors };\n }\n if (validation.value === undefined) continue;\n branches[name] = validation.value;\n }\n\n if (Object.keys(branches).length > 0) {\n value['b'] = branches;\n value['t'] = canonicalName === GT_COMPONENT_TYPES.Branch ? 'b' : 'p';\n }\n } else {\n // Get the html content props\n Object.entries(HTML_CONTENT_PROPS).forEach(([prop, name]) => {\n const validation = validateStringLiteralPropertyFromArg(parameters, name);\n if (validation.errors.length > 0) {\n errors.push(...validation.errors.map((msg) => structuralError(msg)));\n return { errors };\n }\n if (validation.value === undefined) return;\n value[prop as keyof typeof HTML_CONTENT_PROPS] = validation.value;\n });\n }\n\n // Return result\n return { errors, value: Object.keys(value).length > 0 ? value : undefined };\n}\n\n/**\n * Construct Variable\n */\nfunction constructVariable(\n canonicalName: GT_COMPONENT_TYPES,\n args: (t.ArgumentPlaceholder | t.SpreadElement | t.Expression)[],\n id: IdObject\n): { errors: string[]; value?: Variable } {\n const errors: string[] = [];\n // Validate Parameters\n if (args.length < 2) {\n errors.push(\n 'Failed to construct GTProp! Missing parameters' +\n createErrorLocation(args[0])\n );\n return { errors };\n }\n const parameters = args[1];\n if (!t.isObjectExpression(parameters)) {\n errors.push(\n 'Failed to construct GTProp! Parameter field must be an object expression' +\n createErrorLocation(args[1])\n );\n return { errors };\n }\n\n // Validate Parameters\n const nameValidation = validateNameFieldForVarComponent(parameters);\n errors.push(...nameValidation.errors);\n if (nameValidation.errors.length > 0) {\n return { errors };\n }\n const name = nameValidation.value;\n\n // Check for name field\n const value: Variable = {\n i: id.get(),\n k: getVariableName(\n canonicalName as keyof typeof defaultVariableNames,\n id.get(),\n name\n ),\n v: minifyCanonicalName(canonicalName) as GTVariableType,\n };\n\n return { errors, value };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constructJsxChildren.js","names":["IdObject","t","validateChildrenElement","dynamicContentError","generateDynamicContentErrorMessage","createErrorLocation","validateTemplateLiteral","validateUnaryExpression","structuralError","validateIdentifier","validateJsxCall","getCalleeNameFromJsxExpressionParam","getTrackedVariable","isVariableComponent","isGTComponent","isDeriveComponent","isReactComponent","validateChildrenFromArgs","isBranchComponent","getBranchComponentParameters","HTML_CONTENT_PROPS","validateStringLiteralPropertyFromArg","validateNameFieldForVarComponent","getVariableName","minifyCanonicalName"],"sources":["../../../src/transform/jsx-children/constructJsxChildren.ts"],"sourcesContent":["import {\n GTProp,\n HTML_CONTENT_PROPS,\n JsxChild,\n JsxChildren,\n JsxElement,\n Variable,\n VariableType as GTVariableType,\n} from '@generaltranslation/format/types';\nimport { TransformState } from '../../state/types';\nimport * as t from '@babel/types';\nimport type { NodePath } from '@babel/traverse';\nimport { validateIdentifier } from './validation/validateIdentifier';\nimport { validateTemplateLiteral } from './validation/validateTemplateLiteral';\nimport { validateChildrenElement } from './validation/validateChildrenElement';\nimport { getCalleeNameFromJsxExpressionParam } from './utils/getCalleeNameFromJsxExpressionParam';\nimport { getTrackedVariable } from '../getTrackedVariable';\nimport { isReactComponent } from '../../utils/constants/react/helpers';\nimport { REACT_COMPONENTS } from '../../utils/constants/react/constants';\nimport { validateChildrenFromArgs } from './validation/validateChildrenFromArgs';\nimport { IdObject } from './utils/id';\nimport { VariableType } from '../../state/ScopeTracker';\nimport {\n defaultVariableNames,\n getVariableName,\n isBranchComponent,\n isDeriveComponent,\n isGTComponent,\n isVariableComponent,\n minifyCanonicalName,\n} from '../../utils/constants/gt/helpers';\nimport { validateStringLiteralPropertyFromArg } from './validation/validateStringLiteralPropertyFromArg';\nimport { GT_COMPONENT_TYPES } from '../../utils/constants/gt/constants';\nimport { getBranchComponentParameters } from './utils/getBranchComponentParameters';\nimport { validateNameFieldForVarComponent } from './validation/validateNameFieldForVarComponent';\nimport { validateUnaryExpression } from './validation/validateUnaryExpression';\nimport {\n createErrorLocation,\n generateDynamicContentErrorMessage,\n} from '../../utils/errors';\nimport { validateJsxCall } from './validation/validateJsxCall';\nimport {\n JsxValidationError,\n dynamicContentError,\n structuralError,\n} from './errors';\n\n/**\n * Given the children of a <T> component, constructs a JsxChildren object.\n * Takes an Expression path.\n *\n * ONLY does JsxChildren construction + validation, no further processing on any children.\n *\n * On invalid children, quit immediately.\n *\n * The node checks intentionally happen before navigating with .get(). This\n * keeps runtime validation behavior stable while preserving NodePath scope for\n * future derivation work.\n */\nexport function constructJsxChildren(\n childrenPath: NodePath<t.Expression> | undefined,\n state: TransformState,\n id: IdObject = new IdObject()\n): { errors: JsxValidationError[]; value?: JsxChildren } {\n const errors: JsxValidationError[] = [];\n\n // Skip if no children\n if (!childrenPath) {\n return { errors, value: childrenPath };\n }\n\n const children = childrenPath.node;\n let value: JsxChildren | undefined;\n if (t.isArrayExpression(children)) {\n // Handle ArrayExpression\n value = [];\n const elementPaths = childrenPath.get('elements');\n\n for (let i = 0; i < children.elements.length; i++) {\n const child = children.elements[i];\n // Validate child\n if (!validateChildrenElement(child)) {\n errors.push(\n dynamicContentError(\n generateDynamicContentErrorMessage() +\n (child && createErrorLocation(child))\n )\n );\n return { errors };\n }\n\n // Special children edge cases: nullLiteral, booleanLiteral\n if (t.isBooleanLiteral(child) || t.isNullLiteral(child)) {\n continue;\n }\n\n // Construct JsxChild\n const childPath = elementPaths[i] as NodePath<\n Exclude<t.Expression, t.ArrayExpression>\n >;\n const validation = constructJsxChild(childPath, state, id);\n errors.push(...validation.errors);\n if (errors.length > 0) {\n return { errors };\n }\n // Skip if no value\n if (validation.value === undefined) continue;\n (value as JsxChild[]).push(validation.value);\n }\n } else {\n // Handle single child\n const validation = constructJsxChild(\n childrenPath as NodePath<Exclude<t.Expression, t.ArrayExpression>>,\n state,\n id\n );\n errors.push(...validation.errors);\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n }\n\n return { errors, value };\n}\n\n/**\n * Given an Expression path, constructs a JsxChild.\n * @returns { errors: string[]; value?: JsxChild }\n */\nfunction constructJsxChild(\n childPath: NodePath<Exclude<t.Expression, t.ArrayExpression>>,\n state: TransformState,\n id: IdObject\n): { errors: JsxValidationError[]; value?: JsxChild } {\n const errors: JsxValidationError[] = [];\n const child = childPath.node;\n let value: JsxChild | undefined;\n\n if (t.isCallExpression(child)) {\n // Construct JsxElement\n const validation = constructJsxElement(\n childPath as NodePath<t.CallExpression>,\n state,\n id\n );\n errors.push(...validation.errors);\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n } else if (t.isStringLiteral(child)) {\n value = child.value;\n } else if (t.isTemplateLiteral(child)) {\n const validation = validateTemplateLiteral(child);\n errors.push(...validation.errors.map((msg) => dynamicContentError(msg)));\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n } else if (t.isNumericLiteral(child)) {\n value = child.value.toString();\n } else if (t.isBooleanLiteral(child)) {\n value = child.value as unknown as JsxChild;\n } else if (t.isNullLiteral(child)) {\n value = null as unknown as JsxChild;\n } else if (t.isUnaryExpression(child)) {\n const validation = validateUnaryExpression(child);\n errors.push(...validation.errors.map((msg) => structuralError(msg)));\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n } else if (t.isIdentifier(child)) {\n // <T>{name}</T> or <T>{undefined}</T>\n const validation = validateIdentifier(child, state);\n errors.push(...validation.errors.map((msg) => dynamicContentError(msg)));\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n } else {\n // Other cases fail\n errors.push(\n dynamicContentError(\n generateDynamicContentErrorMessage() + createErrorLocation(child)\n )\n );\n return { errors };\n }\n\n return { errors, value };\n}\n\n/**\n * Given a CallExpression path, constructs a JsxChild.\n * Handles: Jsx(T, ...children)\n */\nfunction constructJsxElement(\n callExprPath: NodePath<t.CallExpression>,\n state: TransformState,\n id: IdObject\n): { errors: JsxValidationError[]; value?: JsxElement | Variable } {\n const errors: JsxValidationError[] = [];\n const callExpr = callExprPath.node;\n\n // Validate that this is a jsx call\n const jsxValidation = validateJsxCall(callExpr, state);\n errors.push(...jsxValidation.map((msg) => dynamicContentError(msg)));\n if (jsxValidation.length > 0) {\n return { errors };\n }\n\n // Increment id\n id.increment();\n\n // Get first argument\n if (callExpr.arguments.length === 0) {\n return { errors };\n }\n const firstArg = callExpr.arguments[0];\n if (!t.isExpression(firstArg)) {\n errors.push(\n structuralError(\n `Failed to construct JsxElement! First argument must be an expression` +\n createErrorLocation(callExpr.arguments[0])\n )\n );\n return { errors };\n }\n\n // Resolve canonical name\n const { namespaceName, functionName } =\n getCalleeNameFromJsxExpressionParam(firstArg);\n if (!functionName) {\n errors.push(\n structuralError(\n `Failed to construct JsxElement! First argument must be a valid function` +\n createErrorLocation(callExpr.arguments[0])\n )\n );\n return { errors };\n }\n\n // Get the canonical function name\n const { canonicalName, type } = getTrackedVariable(\n state.scopeTracker,\n namespaceName,\n functionName\n );\n\n // Handle variable components\n if (\n canonicalName &&\n type === 'generaltranslation' &&\n isVariableComponent(canonicalName)\n ) {\n const variableValidation = constructVariable(\n canonicalName,\n callExpr.arguments,\n id\n );\n errors.push(\n ...variableValidation.errors.map((msg) => structuralError(msg))\n );\n if (variableValidation.errors.length > 0) {\n return { errors };\n }\n return { errors, value: variableValidation.value! };\n }\n\n // Set the component name\n let componentName: string;\n const idNumber: number = id.get();\n if (canonicalName && type === 'generaltranslation') {\n // Handle GT components: <Var>, <Num>, <Currency>, etc.\n\n // Check that this is a gt component\n if (!isGTComponent(canonicalName)) {\n errors.push(\n structuralError(\n `Failed to construct JsxElement! ${canonicalName} is not a valid GT component` +\n createErrorLocation(callExpr.arguments[0])\n )\n );\n return { errors };\n }\n // Derive - opaque element, skip children validation\n // The compiler doesn't resolve Derive functions; the CLI handles that.\n if (isDeriveComponent(canonicalName)) {\n return {\n errors,\n value: { t: canonicalName, i: idNumber },\n };\n }\n // Get the name of the component\n componentName = canonicalName;\n } else if (canonicalName && type === 'react') {\n // Handle fragment + special react components\n if (!isReactComponent(canonicalName)) {\n errors.push(\n structuralError(\n `Failed to construct JsxElement! ${canonicalName} is not a valid React component` +\n createErrorLocation(callExpr.arguments[0])\n )\n );\n return { errors };\n }\n // Get the name of the component\n componentName =\n canonicalName === REACT_COMPONENTS.Fragment\n ? `C${id.get()}`\n : functionName;\n } else {\n // Handle all other components: div, etc.\n componentName = functionName;\n }\n\n // Get children from args\n const childrenValidation = validateChildrenFromArgs(callExprPath);\n if (childrenValidation.errors.length > 0) {\n errors.push(\n ...childrenValidation.errors.map((msg) => structuralError(msg))\n );\n return { errors };\n }\n\n // Construct JsxChildren\n // For branching components (Branch/Plural), use id.copy() so children and\n // branch props start counting from the same base independently.\n const jsxChildrenValidation = constructJsxChildrenForJsxElement(\n childrenValidation.value,\n state,\n isBranchComponent(canonicalName ?? '') ? id.copy() : id\n );\n errors.push(...jsxChildrenValidation.errors);\n if (jsxChildrenValidation.errors.length > 0) {\n return { errors };\n }\n const children: JsxChildren | undefined = jsxChildrenValidation.value;\n\n // Construct GT Tag\n const tagValidation = constructGTProp(\n callExprPath,\n id,\n state,\n canonicalName,\n type\n );\n errors.push(...tagValidation.errors);\n if (tagValidation.errors.length > 0) {\n return { errors };\n }\n const tag: GTProp | undefined = tagValidation.value;\n\n // Return result\n const value: JsxElement = {\n t: componentName,\n i: idNumber,\n ...(tag !== undefined && { d: tag }),\n ...(children !== undefined && { c: children }),\n };\n return { errors, value };\n}\n\n/**\n * Construct JsxChildren for a JsxElement\n * This is slightly different from constructJsxChildren in how it handles nullLiteral and booleanLiteral\n */\nfunction constructJsxChildrenForJsxElement(\n childrenPath: NodePath<t.Expression> | undefined,\n state: TransformState,\n id: IdObject\n): { errors: JsxValidationError[]; value?: JsxChildren } {\n const errors: JsxValidationError[] = [];\n const children = childrenPath?.node;\n\n // Special children edge cases: nullLiteral, booleanLiteral\n if (t.isNullLiteral(children)) {\n return { errors, value: undefined as unknown as JsxChildren };\n }\n if (t.isBooleanLiteral(children)) {\n return {\n errors,\n value: (children.value || undefined) as unknown as JsxChildren,\n };\n }\n\n // Construct JsxChildren\n return constructJsxChildren(childrenPath, state, id);\n}\n\n/**\n * Given a canonical name, constructs a GTProp\n */\nfunction constructGTProp(\n callExprPath: NodePath<t.CallExpression>,\n id: IdObject,\n state: TransformState,\n canonicalName?: string,\n type?: VariableType\n): { errors: JsxValidationError[]; value?: GTProp } {\n const errors: JsxValidationError[] = [];\n const value: GTProp = {};\n const args = callExprPath.node.arguments;\n\n // Validate Parameters\n if (args.length < 2) {\n errors.push(\n structuralError(\n 'Failed to construct GTProp! Missing parameters' +\n createErrorLocation(args[0])\n )\n );\n return { errors };\n }\n const parameters = args[1];\n if (!t.isObjectExpression(parameters)) {\n errors.push(\n structuralError(\n 'Failed to construct GTProp! Parameter field must be an object expression' +\n createErrorLocation(args[1])\n )\n );\n return { errors };\n }\n\n // For Branch and Plural, get the properties\n const parametersPath = callExprPath.get(\n 'arguments'\n )[1] as NodePath<t.ObjectExpression>;\n\n if (\n canonicalName &&\n type === 'generaltranslation' &&\n isBranchComponent(canonicalName)\n ) {\n // Get the branching parameters\n const branchingParameters = getBranchComponentParameters(\n parametersPath as NodePath<t.ObjectExpression>,\n canonicalName\n );\n // Add branch component branches\n const branches = {} as Record<string, JsxChildren>;\n\n for (const [name, parameterPath] of branchingParameters) {\n const parameter = parameterPath.node;\n // Special exceptions for branches:\n if (t.isNullLiteral(parameter)) {\n branches[name] = null as unknown as JsxChildren;\n continue;\n } else if (t.isBooleanLiteral(parameter)) {\n branches[name] = parameter.value as unknown as JsxChildren;\n continue;\n }\n\n // Otherwise, construct the JsxChildren\n const validation = constructJsxChildren(parameterPath, state, id.copy());\n errors.push(...validation.errors);\n if (validation.errors.length > 0) {\n return { errors };\n }\n if (validation.value === undefined) continue;\n branches[name] = validation.value;\n }\n\n if (Object.keys(branches).length > 0) {\n value['b'] = branches;\n value['t'] = canonicalName === GT_COMPONENT_TYPES.Branch ? 'b' : 'p';\n }\n } else {\n // Get the html content props\n Object.entries(HTML_CONTENT_PROPS).forEach(([prop, name]) => {\n const validation = validateStringLiteralPropertyFromArg(parameters, name);\n if (validation.errors.length > 0) {\n errors.push(...validation.errors.map((msg) => structuralError(msg)));\n return { errors };\n }\n if (validation.value === undefined) return;\n value[prop as keyof typeof HTML_CONTENT_PROPS] = validation.value;\n });\n }\n\n // Return result\n return { errors, value: Object.keys(value).length > 0 ? value : undefined };\n}\n\n/**\n * Construct Variable\n */\nfunction constructVariable(\n canonicalName: GT_COMPONENT_TYPES,\n args: (t.ArgumentPlaceholder | t.SpreadElement | t.Expression)[],\n id: IdObject\n): { errors: string[]; value?: Variable } {\n const errors: string[] = [];\n // Validate Parameters\n if (args.length < 2) {\n errors.push(\n 'Failed to construct GTProp! Missing parameters' +\n createErrorLocation(args[0])\n );\n return { errors };\n }\n const parameters = args[1];\n if (!t.isObjectExpression(parameters)) {\n errors.push(\n 'Failed to construct GTProp! Parameter field must be an object expression' +\n createErrorLocation(args[1])\n );\n return { errors };\n }\n\n // Validate Parameters\n const nameValidation = validateNameFieldForVarComponent(parameters);\n errors.push(...nameValidation.errors);\n if (nameValidation.errors.length > 0) {\n return { errors };\n }\n const name = nameValidation.value;\n\n // Check for name field\n const value: Variable = {\n i: id.get(),\n k: getVariableName(\n canonicalName as keyof typeof defaultVariableNames,\n id.get(),\n name\n ),\n v: minifyCanonicalName(canonicalName) as GTVariableType,\n };\n\n return { errors, value };\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as t from '@babel/types';
|
|
2
2
|
import { NodePath } from '@babel/traverse';
|
|
3
3
|
/**
|
|
4
|
-
* Inject `import { GtInternalTranslateJsx, GtInternalVar } from 'gt-react
|
|
4
|
+
* Inject `import { GtInternalTranslateJsx, GtInternalVar } from 'gt-react'`
|
|
5
5
|
* as the first statement in the program.
|
|
6
6
|
*/
|
|
7
|
-
export declare function injectJsxInsertionImport(path: NodePath<t.Program
|
|
7
|
+
export declare function injectJsxInsertionImport(path: NodePath<t.Program>, legacyGtReactImportSource: boolean): void;
|
|
8
8
|
//# sourceMappingURL=injectJsxInsertionImport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectJsxInsertionImport.d.ts","sourceRoot":"","sources":["../../../src/transform/jsx-insertion/injectJsxInsertionImport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"injectJsxInsertionImport.d.ts","sourceRoot":"","sources":["../../../src/transform/jsx-insertion/injectJsxInsertionImport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAI3C;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EACzB,yBAAyB,EAAE,OAAO,GACjC,IAAI,CAaN"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
3
3
|
require("../../utils/constants/gt/constants.js");
|
|
4
|
+
const require_utils_constants_gt_helpers = require("../../utils/constants/gt/helpers.js");
|
|
4
5
|
let _babel_types = require("@babel/types");
|
|
5
6
|
_babel_types = require_runtime.__toESM(_babel_types);
|
|
6
7
|
//#region src/transform/jsx-insertion/injectJsxInsertionImport.ts
|
|
7
8
|
/**
|
|
8
|
-
* Inject `import { GtInternalTranslateJsx, GtInternalVar } from 'gt-react
|
|
9
|
+
* Inject `import { GtInternalTranslateJsx, GtInternalVar } from 'gt-react'`
|
|
9
10
|
* as the first statement in the program.
|
|
10
11
|
*/
|
|
11
|
-
function injectJsxInsertionImport(path) {
|
|
12
|
+
function injectJsxInsertionImport(path, legacyGtReactImportSource) {
|
|
12
13
|
const tName = "GtInternalTranslateJsx";
|
|
13
14
|
const varName = "GtInternalVar";
|
|
14
|
-
const importDecl = _babel_types.importDeclaration([_babel_types.importSpecifier(_babel_types.identifier(tName), _babel_types.identifier(tName)), _babel_types.importSpecifier(_babel_types.identifier(varName), _babel_types.identifier(varName))], _babel_types.stringLiteral(
|
|
15
|
+
const importDecl = _babel_types.importDeclaration([_babel_types.importSpecifier(_babel_types.identifier(tName), _babel_types.identifier(tName)), _babel_types.importSpecifier(_babel_types.identifier(varName), _babel_types.identifier(varName))], _babel_types.stringLiteral(require_utils_constants_gt_helpers.getGtReactImportSource(legacyGtReactImportSource)));
|
|
15
16
|
path.unshiftContainer("body", importDecl);
|
|
16
17
|
}
|
|
17
18
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectJsxInsertionImport.js","names":["t"],"sources":["../../../src/transform/jsx-insertion/injectJsxInsertionImport.ts"],"sourcesContent":["import * as t from '@babel/types';\nimport { NodePath } from '@babel/traverse';\nimport {
|
|
1
|
+
{"version":3,"file":"injectJsxInsertionImport.js","names":["t","getGtReactImportSource"],"sources":["../../../src/transform/jsx-insertion/injectJsxInsertionImport.ts"],"sourcesContent":["import * as t from '@babel/types';\nimport { NodePath } from '@babel/traverse';\nimport { GT_COMPONENT_TYPES } from '../../utils/constants/gt/constants';\nimport { getGtReactImportSource } from '../../utils/constants/gt/helpers';\n\n/**\n * Inject `import { GtInternalTranslateJsx, GtInternalVar } from 'gt-react'`\n * as the first statement in the program.\n */\nexport function injectJsxInsertionImport(\n path: NodePath<t.Program>,\n legacyGtReactImportSource: boolean\n): void {\n const tName = GT_COMPONENT_TYPES.GtInternalTranslateJsx;\n const varName = GT_COMPONENT_TYPES.GtInternalVar;\n\n const importDecl = t.importDeclaration(\n [\n t.importSpecifier(t.identifier(tName), t.identifier(tName)),\n t.importSpecifier(t.identifier(varName), t.identifier(varName)),\n ],\n t.stringLiteral(getGtReactImportSource(legacyGtReactImportSource))\n );\n\n path.unshiftContainer('body', importDecl);\n}\n"],"mappings":";;;;;;;;;;;AASA,SAAgB,yBACd,MACA,2BACM;CACN,MAAM,QAAA;CACN,MAAM,UAAA;CAEN,MAAM,aAAaA,aAAE,kBACnB,CACEA,aAAE,gBAAgBA,aAAE,WAAW,MAAM,EAAEA,aAAE,WAAW,MAAM,CAAC,EAC3DA,aAAE,gBAAgBA,aAAE,WAAW,QAAQ,EAAEA,aAAE,WAAW,QAAQ,CAAC,CAChE,EACDA,aAAE,cAAcC,mCAAAA,uBAAuB,0BAA0B,CAAC,CACnE;AAED,MAAK,iBAAiB,QAAQ,WAAW"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as t from '@babel/types';
|
|
2
2
|
import { NodePath } from '@babel/traverse';
|
|
3
3
|
/**
|
|
4
|
-
* Inject `import { t } from 'gt-react
|
|
4
|
+
* Inject `import { t } from 'gt-react'` as the first statement in the program.
|
|
5
5
|
*/
|
|
6
|
-
export declare function injectMacroImport(path: NodePath<t.Program
|
|
6
|
+
export declare function injectMacroImport(path: NodePath<t.Program>, legacyGtReactImportSource: boolean): void;
|
|
7
7
|
//# sourceMappingURL=injectMacroImport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectMacroImport.d.ts","sourceRoot":"","sources":["../../../src/transform/macro-expansion/injectMacroImport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"injectMacroImport.d.ts","sourceRoot":"","sources":["../../../src/transform/macro-expansion/injectMacroImport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAI3C;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EACzB,yBAAyB,EAAE,OAAO,GACjC,IAAI,CASN"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
3
3
|
require("../../utils/constants/gt/constants.js");
|
|
4
|
+
const require_utils_constants_gt_helpers = require("../../utils/constants/gt/helpers.js");
|
|
4
5
|
let _babel_types = require("@babel/types");
|
|
5
6
|
_babel_types = require_runtime.__toESM(_babel_types);
|
|
6
7
|
//#region src/transform/macro-expansion/injectMacroImport.ts
|
|
7
8
|
/**
|
|
8
|
-
* Inject `import { t } from 'gt-react
|
|
9
|
+
* Inject `import { t } from 'gt-react'` as the first statement in the program.
|
|
9
10
|
*/
|
|
10
|
-
function injectMacroImport(path) {
|
|
11
|
+
function injectMacroImport(path, legacyGtReactImportSource) {
|
|
11
12
|
const tName = "t";
|
|
12
|
-
const importDecl = _babel_types.importDeclaration([_babel_types.importSpecifier(_babel_types.identifier(tName), _babel_types.identifier(tName))], _babel_types.stringLiteral(
|
|
13
|
+
const importDecl = _babel_types.importDeclaration([_babel_types.importSpecifier(_babel_types.identifier(tName), _babel_types.identifier(tName))], _babel_types.stringLiteral(require_utils_constants_gt_helpers.getGtReactImportSource(legacyGtReactImportSource)));
|
|
13
14
|
path.unshiftContainer("body", importDecl);
|
|
14
15
|
}
|
|
15
16
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectMacroImport.js","names":["t"],"sources":["../../../src/transform/macro-expansion/injectMacroImport.ts"],"sourcesContent":["import * as t from '@babel/types';\nimport { NodePath } from '@babel/traverse';\nimport {
|
|
1
|
+
{"version":3,"file":"injectMacroImport.js","names":["t","getGtReactImportSource"],"sources":["../../../src/transform/macro-expansion/injectMacroImport.ts"],"sourcesContent":["import * as t from '@babel/types';\nimport { NodePath } from '@babel/traverse';\nimport { GT_OTHER_FUNCTIONS } from '../../utils/constants/gt/constants';\nimport { getGtReactImportSource } from '../../utils/constants/gt/helpers';\n\n/**\n * Inject `import { t } from 'gt-react'` as the first statement in the program.\n */\nexport function injectMacroImport(\n path: NodePath<t.Program>,\n legacyGtReactImportSource: boolean\n): void {\n const tName = GT_OTHER_FUNCTIONS.t;\n\n const importDecl = t.importDeclaration(\n [t.importSpecifier(t.identifier(tName), t.identifier(tName))],\n t.stringLiteral(getGtReactImportSource(legacyGtReactImportSource))\n );\n\n path.unshiftContainer('body', importDecl);\n}\n"],"mappings":";;;;;;;;;;AAQA,SAAgB,kBACd,MACA,2BACM;CACN,MAAM,QAAA;CAEN,MAAM,aAAaA,aAAE,kBACnB,CAACA,aAAE,gBAAgBA,aAAE,WAAW,MAAM,EAAEA,aAAE,WAAW,MAAM,CAAC,CAAC,EAC7DA,aAAE,cAAcC,mCAAAA,uBAAuB,0BAA0B,CAAC,CACnE;AAED,MAAK,iBAAiB,QAAQ,WAAW"}
|
|
@@ -2,10 +2,11 @@ import * as t from '@babel/types';
|
|
|
2
2
|
import { NodePath } from '@babel/traverse';
|
|
3
3
|
/**
|
|
4
4
|
* Inject runtime translate import with only the specifiers needed.
|
|
5
|
-
* `import { GtInternalRuntimeTranslateString, GtInternalRuntimeTranslateJsx } from 'gt-react
|
|
5
|
+
* `import { GtInternalRuntimeTranslateString, GtInternalRuntimeTranslateJsx } from 'gt-react'`
|
|
6
6
|
*/
|
|
7
|
-
export declare function injectRuntimeTranslateImport(path: NodePath<t.Program>, { needsString, needsJsx }: {
|
|
7
|
+
export declare function injectRuntimeTranslateImport(path: NodePath<t.Program>, { needsString, needsJsx, legacyGtReactImportSource, }: {
|
|
8
8
|
needsString: boolean;
|
|
9
9
|
needsJsx: boolean;
|
|
10
|
+
legacyGtReactImportSource: boolean;
|
|
10
11
|
}): NodePath<t.ImportDeclaration> | null;
|
|
11
12
|
//# sourceMappingURL=injectRuntimeTranslateImport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectRuntimeTranslateImport.d.ts","sourceRoot":"","sources":["../../../src/transform/runtime-translate/injectRuntimeTranslateImport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"injectRuntimeTranslateImport.d.ts","sourceRoot":"","sources":["../../../src/transform/runtime-translate/injectRuntimeTranslateImport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAI3C;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EACzB,EACE,WAAW,EACX,QAAQ,EACR,yBAAyB,GAC1B,EAAE;IACD,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,yBAAyB,EAAE,OAAO,CAAC;CACpC,GACA,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAsBtC"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
3
3
|
require("../../utils/constants/gt/constants.js");
|
|
4
|
+
const require_utils_constants_gt_helpers = require("../../utils/constants/gt/helpers.js");
|
|
4
5
|
let _babel_types = require("@babel/types");
|
|
5
6
|
_babel_types = require_runtime.__toESM(_babel_types);
|
|
6
7
|
//#region src/transform/runtime-translate/injectRuntimeTranslateImport.ts
|
|
7
8
|
/**
|
|
8
9
|
* Inject runtime translate import with only the specifiers needed.
|
|
9
|
-
* `import { GtInternalRuntimeTranslateString, GtInternalRuntimeTranslateJsx } from 'gt-react
|
|
10
|
+
* `import { GtInternalRuntimeTranslateString, GtInternalRuntimeTranslateJsx } from 'gt-react'`
|
|
10
11
|
*/
|
|
11
|
-
function injectRuntimeTranslateImport(path, { needsString, needsJsx }) {
|
|
12
|
+
function injectRuntimeTranslateImport(path, { needsString, needsJsx, legacyGtReactImportSource }) {
|
|
12
13
|
const specifiers = [];
|
|
13
14
|
if (needsString) {
|
|
14
15
|
const name = "GtInternalRuntimeTranslateString";
|
|
@@ -19,7 +20,7 @@ function injectRuntimeTranslateImport(path, { needsString, needsJsx }) {
|
|
|
19
20
|
specifiers.push(_babel_types.importSpecifier(_babel_types.identifier(name), _babel_types.identifier(name)));
|
|
20
21
|
}
|
|
21
22
|
if (specifiers.length === 0) return null;
|
|
22
|
-
const importDecl = _babel_types.importDeclaration(specifiers, _babel_types.stringLiteral(
|
|
23
|
+
const importDecl = _babel_types.importDeclaration(specifiers, _babel_types.stringLiteral(require_utils_constants_gt_helpers.getGtReactImportSource(legacyGtReactImportSource)));
|
|
23
24
|
const [inserted] = path.unshiftContainer("body", importDecl);
|
|
24
25
|
return inserted;
|
|
25
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectRuntimeTranslateImport.js","names":["t"],"sources":["../../../src/transform/runtime-translate/injectRuntimeTranslateImport.ts"],"sourcesContent":["import * as t from '@babel/types';\nimport { NodePath } from '@babel/traverse';\nimport {
|
|
1
|
+
{"version":3,"file":"injectRuntimeTranslateImport.js","names":["t","getGtReactImportSource"],"sources":["../../../src/transform/runtime-translate/injectRuntimeTranslateImport.ts"],"sourcesContent":["import * as t from '@babel/types';\nimport { NodePath } from '@babel/traverse';\nimport { GT_OTHER_FUNCTIONS } from '../../utils/constants/gt/constants';\nimport { getGtReactImportSource } from '../../utils/constants/gt/helpers';\n\n/**\n * Inject runtime translate import with only the specifiers needed.\n * `import { GtInternalRuntimeTranslateString, GtInternalRuntimeTranslateJsx } from 'gt-react'`\n */\nexport function injectRuntimeTranslateImport(\n path: NodePath<t.Program>,\n {\n needsString,\n needsJsx,\n legacyGtReactImportSource,\n }: {\n needsString: boolean;\n needsJsx: boolean;\n legacyGtReactImportSource: boolean;\n }\n): NodePath<t.ImportDeclaration> | null {\n const specifiers: t.ImportSpecifier[] = [];\n\n if (needsString) {\n const name = GT_OTHER_FUNCTIONS.GtInternalRuntimeTranslateString;\n specifiers.push(t.importSpecifier(t.identifier(name), t.identifier(name)));\n }\n\n if (needsJsx) {\n const name = GT_OTHER_FUNCTIONS.GtInternalRuntimeTranslateJsx;\n specifiers.push(t.importSpecifier(t.identifier(name), t.identifier(name)));\n }\n\n if (specifiers.length === 0) return null;\n\n const importDecl = t.importDeclaration(\n specifiers,\n t.stringLiteral(getGtReactImportSource(legacyGtReactImportSource))\n );\n\n const [inserted] = path.unshiftContainer('body', importDecl);\n return inserted as NodePath<t.ImportDeclaration>;\n}\n"],"mappings":";;;;;;;;;;;AASA,SAAgB,6BACd,MACA,EACE,aACA,UACA,6BAMoC;CACtC,MAAM,aAAkC,EAAE;AAE1C,KAAI,aAAa;EACf,MAAM,OAAA;AACN,aAAW,KAAKA,aAAE,gBAAgBA,aAAE,WAAW,KAAK,EAAEA,aAAE,WAAW,KAAK,CAAC,CAAC;;AAG5E,KAAI,UAAU;EACZ,MAAM,OAAA;AACN,aAAW,KAAKA,aAAE,gBAAgBA,aAAE,WAAW,KAAK,EAAEA,aAAE,WAAW,KAAK,CAAC,CAAC;;AAG5E,KAAI,WAAW,WAAW,EAAG,QAAO;CAEpC,MAAM,aAAaA,aAAE,kBACnB,YACAA,aAAE,cAAcC,mCAAAA,uBAAuB,0BAA0B,CAAC,CACnE;CAED,MAAM,CAAC,YAAY,KAAK,iBAAiB,QAAQ,WAAW;AAC5D,QAAO"}
|
|
@@ -6,7 +6,6 @@ const require_utils_parsing_getObjectPropertyFromObjectExpression = require("../
|
|
|
6
6
|
const require_utils_validation_validateExpressionIsStringLiteral = require("../../utils/validation/validateExpressionIsStringLiteral.js");
|
|
7
7
|
const require_utils_validation_validateChildrenFromObjectExpression = require("../../utils/validation/validateChildrenFromObjectExpression.js");
|
|
8
8
|
const require_transform_jsx_children_constructJsxChildren = require("../jsx-children/constructJsxChildren.js");
|
|
9
|
-
require("../jsx-children/index.js");
|
|
10
9
|
const require_utils_validation_validateExpressionIsNumericLiteral = require("../../utils/validation/validateExpressionIsNumericLiteral.js");
|
|
11
10
|
let _babel_types = require("@babel/types");
|
|
12
11
|
_babel_types = require_runtime.__toESM(_babel_types);
|
|
@@ -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"],"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 { 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 +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,CA0HA;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;AAyID;;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,
|
|
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,CA0HA;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;AAyID;;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"}
|
|
@@ -168,11 +168,11 @@ function validateDerive(expr, state, errors) {
|
|
|
168
168
|
errors.push("Expression does not use an allowed call expression");
|
|
169
169
|
return { errors };
|
|
170
170
|
}
|
|
171
|
-
if (type !== "generaltranslation" || canonicalName !== "
|
|
171
|
+
if (type !== "generaltranslation" || canonicalName !== "derive") {
|
|
172
172
|
errors.push("Expression does not use an allowed call expression");
|
|
173
173
|
return { errors };
|
|
174
174
|
}
|
|
175
|
-
|
|
175
|
+
validateDeriveCallExpression(expr, errors);
|
|
176
176
|
return { errors };
|
|
177
177
|
}
|
|
178
178
|
if (_babel_types.isBinaryExpression(expr) && expr.operator === "+") {
|
|
@@ -202,7 +202,7 @@ function validateDerive(expr, state, errors) {
|
|
|
202
202
|
* - the argument is a call expression
|
|
203
203
|
* Example: derive(getName())
|
|
204
204
|
*/
|
|
205
|
-
function
|
|
205
|
+
function validateDeriveCallExpression(expr, errors) {
|
|
206
206
|
if (expr.arguments.length !== 1) {
|
|
207
207
|
errors.push("derive() must have one argument");
|
|
208
208
|
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 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 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 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 : 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 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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"}
|
|
@@ -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",
|
|
@@ -119,7 +116,6 @@ export declare const MINIFY_CANONICAL_NAME_MAP: {
|
|
|
119
116
|
readonly DateTime: "d";
|
|
120
117
|
readonly GtInternalDateTime: "d";
|
|
121
118
|
readonly RelativeTime: "rt";
|
|
122
|
-
readonly Static: "s";
|
|
123
119
|
readonly Derive: "s";
|
|
124
120
|
readonly Branch: "b";
|
|
125
121
|
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;CACpB;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";
|
|
@@ -136,7 +133,6 @@ const MINIFY_CANONICAL_NAME_MAP = {
|
|
|
136
133
|
["DateTime"]: "d",
|
|
137
134
|
["GtInternalDateTime"]: "d",
|
|
138
135
|
["RelativeTime"]: "rt",
|
|
139
|
-
["Static"]: "s",
|
|
140
136
|
["Derive"]: "s",
|
|
141
137
|
["Branch"]: "b",
|
|
142
138
|
["Plural"]: "p"
|