@generaltranslation/compiler 1.3.27 → 1.3.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/config.d.ts +12 -7
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js.map +1 -1
  4. package/dist/index.d.ts +2 -2
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +61 -6
  7. package/dist/index.js.map +1 -1
  8. package/dist/passes/basePass.d.ts.map +1 -1
  9. package/dist/passes/basePass.js +9 -10
  10. package/dist/passes/basePass.js.map +1 -1
  11. package/dist/processing/collection/processCallExpression.js +0 -1
  12. package/dist/processing/collection/processCallExpression.js.map +1 -1
  13. package/dist/processing/collection/processTaggedTemplateExpression.d.ts +1 -1
  14. package/dist/processing/collection/processTaggedTemplateExpression.js +1 -1
  15. package/dist/processing/collection/processTaggedTemplateExpression.js.map +1 -1
  16. package/dist/processing/jsx-insertion/processCallExpression.js.map +1 -1
  17. package/dist/processing/jsx-insertion/processProgram.d.ts.map +1 -1
  18. package/dist/processing/jsx-insertion/processProgram.js +1 -1
  19. package/dist/processing/jsx-insertion/processProgram.js.map +1 -1
  20. package/dist/processing/macro-expansion/processProgram.js +1 -1
  21. package/dist/processing/macro-expansion/processProgram.js.map +1 -1
  22. package/dist/processing/macro-expansion/processTaggedTemplateExpression.d.ts +1 -1
  23. package/dist/processing/macro-expansion/processTaggedTemplateExpression.js +1 -1
  24. package/dist/processing/macro-expansion/processTaggedTemplateExpression.js.map +1 -1
  25. package/dist/processing/processFunctionDeclaration.js +1 -1
  26. package/dist/processing/processFunctionExpression.js +1 -1
  27. package/dist/processing/runtime-translate/processProgram.d.ts.map +1 -1
  28. package/dist/processing/runtime-translate/processProgram.js +2 -1
  29. package/dist/processing/runtime-translate/processProgram.js.map +1 -1
  30. package/dist/state/StringCollector.d.ts +3 -3
  31. package/dist/state/StringCollector.d.ts.map +1 -1
  32. package/dist/state/StringCollector.js.map +1 -1
  33. package/dist/state/utils/initializeState.d.ts.map +1 -1
  34. package/dist/state/utils/initializeState.js +8 -5
  35. package/dist/state/utils/initializeState.js.map +1 -1
  36. package/dist/transform/injection/injectCallbackDeclaratorFunctionParameters.d.ts +1 -1
  37. package/dist/transform/injection/injectCallbackDeclaratorFunctionParameters.js +6 -5
  38. package/dist/transform/injection/injectCallbackDeclaratorFunctionParameters.js.map +1 -1
  39. package/dist/transform/jsx-children/constructJsxChildren.js.map +1 -1
  40. package/dist/transform/jsx-insertion/injectJsxInsertionImport.d.ts +2 -2
  41. package/dist/transform/jsx-insertion/injectJsxInsertionImport.d.ts.map +1 -1
  42. package/dist/transform/jsx-insertion/injectJsxInsertionImport.js +4 -3
  43. package/dist/transform/jsx-insertion/injectJsxInsertionImport.js.map +1 -1
  44. package/dist/transform/macro-expansion/injectMacroImport.d.ts +2 -2
  45. package/dist/transform/macro-expansion/injectMacroImport.d.ts.map +1 -1
  46. package/dist/transform/macro-expansion/injectMacroImport.js +4 -3
  47. package/dist/transform/macro-expansion/injectMacroImport.js.map +1 -1
  48. package/dist/transform/registration/callbacks/registerUseGTCallback.d.ts.map +1 -1
  49. package/dist/transform/registration/callbacks/registerUseGTCallback.js +0 -1
  50. package/dist/transform/registration/callbacks/registerUseGTCallback.js.map +1 -1
  51. package/dist/transform/registration/registerStandaloneTranslation.d.ts.map +1 -1
  52. package/dist/transform/registration/registerStandaloneTranslation.js +0 -1
  53. package/dist/transform/registration/registerStandaloneTranslation.js.map +1 -1
  54. package/dist/transform/runtime-translate/injectRuntimeTranslateImport.d.ts +3 -2
  55. package/dist/transform/runtime-translate/injectRuntimeTranslateImport.d.ts.map +1 -1
  56. package/dist/transform/runtime-translate/injectRuntimeTranslateImport.js +4 -3
  57. package/dist/transform/runtime-translate/injectRuntimeTranslateImport.js.map +1 -1
  58. package/dist/transform/validation/validateTranslationComponentArgs.js +0 -1
  59. package/dist/transform/validation/validateTranslationComponentArgs.js.map +1 -1
  60. package/dist/transform/validation/validateTranslationFunction.d.ts.map +1 -1
  61. package/dist/transform/validation/validateTranslationFunction.js +3 -3
  62. package/dist/transform/validation/validateTranslationFunction.js.map +1 -1
  63. package/dist/utils/calculateHash.d.ts +1 -2
  64. package/dist/utils/calculateHash.d.ts.map +1 -1
  65. package/dist/utils/calculateHash.js +1 -3
  66. package/dist/utils/calculateHash.js.map +1 -1
  67. package/dist/utils/constants/gt/constants.d.ts +1 -5
  68. package/dist/utils/constants/gt/constants.d.ts.map +1 -1
  69. package/dist/utils/constants/gt/constants.js +1 -5
  70. package/dist/utils/constants/gt/constants.js.map +1 -1
  71. package/dist/utils/constants/gt/helpers.d.ts +2 -1
  72. package/dist/utils/constants/gt/helpers.d.ts.map +1 -1
  73. package/dist/utils/constants/gt/helpers.js +15 -5
  74. package/dist/utils/constants/gt/helpers.js.map +1 -1
  75. package/dist/utils/constants/resolveIdentifier/isGTComponent.d.ts +1 -1
  76. package/dist/utils/constants/resolveIdentifier/isGTComponent.d.ts.map +1 -1
  77. package/dist/utils/constants/resolveIdentifier/isGTComponent.js +2 -3
  78. package/dist/utils/constants/resolveIdentifier/isGTComponent.js.map +1 -1
  79. package/dist/utils/parsing/isStringTranslationTaggedTemplate.d.ts +1 -1
  80. package/dist/utils/parsing/isStringTranslationTaggedTemplate.js +3 -3
  81. package/dist/utils/parsing/isStringTranslationTaggedTemplate.js.map +1 -1
  82. package/package.json +3 -3
  83. package/dist/processing/index.d.ts +0 -15
  84. package/dist/processing/index.d.ts.map +0 -1
  85. package/dist/processing/index.js +0 -29
  86. package/dist/transform/jsx-children/index.d.ts +0 -2
  87. package/dist/transform/jsx-children/index.d.ts.map +0 -1
  88. package/dist/transform/jsx-children/index.js +0 -3
@@ -15,7 +15,7 @@ _babel_types = require_runtime.__toESM(_babel_types);
15
15
  function processProgram({ state, countBefore, isAlreadyImported, calleeInfo }) {
16
16
  return { exit(path) {
17
17
  if (!(state.statistics.jsxInsertionsCount > countBefore)) return;
18
- if (!isAlreadyImported()) require_transform_jsx_insertion_injectJsxInsertionImport.injectJsxInsertionImport(path);
18
+ if (!isAlreadyImported()) require_transform_jsx_insertion_injectJsxInsertionImport.injectJsxInsertionImport(path, state.settings.legacyGtReactImportSource);
19
19
  if (!calleeInfo.singleCallee && calleeInfo.multiCallee) {
20
20
  const jsxImport = _babel_types.importDeclaration([_babel_types.importSpecifier(_babel_types.identifier("jsx"), _babel_types.identifier("jsx"))], _babel_types.stringLiteral("react/jsx-runtime"));
21
21
  path.unshiftContainer("body", jsxImport);
@@ -1 +1 @@
1
- {"version":3,"file":"processProgram.js","names":["t"],"sources":["../../../src/processing/jsx-insertion/processProgram.ts"],"sourcesContent":["import { TransformState } from '../../state/types';\nimport { VisitNode } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { injectJsxInsertionImport } from '../../transform/jsx-insertion/injectJsxInsertionImport';\nimport { JsxCalleeInfo } from './processImportDeclaration';\nimport { REACT_FUNTIONS } from '../../utils/constants/react/constants';\nimport { REACT_IMPORT_SOURCES } from '../../utils/constants/react/constants';\n\n/**\n * Process program:\n * - on exit, injects GtInternalTranslateJsx/GtInternalVar import if needed\n * - also injects `jsx` from React runtime if only `jsxs` was imported\n * (Vite production builds only import what's needed — if a file has only\n * multi-child elements, `jsx` is never imported, but our _Var wrappers need it)\n */\nexport function processProgram({\n state,\n countBefore,\n isAlreadyImported,\n calleeInfo,\n}: {\n state: TransformState;\n countBefore: number;\n isAlreadyImported: () => boolean;\n calleeInfo: JsxCalleeInfo;\n}): VisitNode<t.Node, t.Program> {\n return {\n exit(path) {\n const didInsert = state.statistics.jsxInsertionsCount > countBefore;\n if (!didInsert) return;\n\n if (!isAlreadyImported()) {\n injectJsxInsertionImport(path);\n }\n\n // If only jsxs was imported (no jsx), inject jsx import.\n // _Var wrappers always use singleCallee which defaults to 'jsx'.\n if (!calleeInfo.singleCallee && calleeInfo.multiCallee) {\n const jsxImport = t.importDeclaration(\n [\n t.importSpecifier(\n t.identifier(REACT_FUNTIONS.jsx),\n t.identifier(REACT_FUNTIONS.jsx)\n ),\n ],\n t.stringLiteral(REACT_IMPORT_SOURCES.JSX_RUNTIME)\n );\n path.unshiftContainer('body', jsxImport);\n calleeInfo.singleCallee = REACT_FUNTIONS.jsx;\n }\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,SAAgB,eAAe,EAC7B,OACA,aACA,mBACA,cAM+B;AAC/B,QAAO,EACL,KAAK,MAAM;AAET,MAAI,EADc,MAAM,WAAW,qBAAqB,aACxC;AAEhB,MAAI,CAAC,mBAAmB,CACtB,0DAAA,yBAAyB,KAAK;AAKhC,MAAI,CAAC,WAAW,gBAAgB,WAAW,aAAa;GACtD,MAAM,YAAYA,aAAE,kBAClB,CACEA,aAAE,gBACAA,aAAE,WAAA,MAA8B,EAChCA,aAAE,WAAA,MAA8B,CACjC,CACF,EACDA,aAAE,cAAA,oBAA+C,CAClD;AACD,QAAK,iBAAiB,QAAQ,UAAU;AACxC,cAAW,eAAA;;IAGhB"}
1
+ {"version":3,"file":"processProgram.js","names":["t"],"sources":["../../../src/processing/jsx-insertion/processProgram.ts"],"sourcesContent":["import { TransformState } from '../../state/types';\nimport { VisitNode } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { injectJsxInsertionImport } from '../../transform/jsx-insertion/injectJsxInsertionImport';\nimport { JsxCalleeInfo } from './processImportDeclaration';\nimport { REACT_FUNTIONS } from '../../utils/constants/react/constants';\nimport { REACT_IMPORT_SOURCES } from '../../utils/constants/react/constants';\n\n/**\n * Process program:\n * - on exit, injects GtInternalTranslateJsx/GtInternalVar import if needed\n * - also injects `jsx` from React runtime if only `jsxs` was imported\n * (Vite production builds only import what's needed — if a file has only\n * multi-child elements, `jsx` is never imported, but our _Var wrappers need it)\n */\nexport function processProgram({\n state,\n countBefore,\n isAlreadyImported,\n calleeInfo,\n}: {\n state: TransformState;\n countBefore: number;\n isAlreadyImported: () => boolean;\n calleeInfo: JsxCalleeInfo;\n}): VisitNode<t.Node, t.Program> {\n return {\n exit(path) {\n const didInsert = state.statistics.jsxInsertionsCount > countBefore;\n if (!didInsert) return;\n\n if (!isAlreadyImported()) {\n injectJsxInsertionImport(\n path,\n state.settings.legacyGtReactImportSource\n );\n }\n\n // If only jsxs was imported (no jsx), inject jsx import.\n // _Var wrappers always use singleCallee which defaults to 'jsx'.\n if (!calleeInfo.singleCallee && calleeInfo.multiCallee) {\n const jsxImport = t.importDeclaration(\n [\n t.importSpecifier(\n t.identifier(REACT_FUNTIONS.jsx),\n t.identifier(REACT_FUNTIONS.jsx)\n ),\n ],\n t.stringLiteral(REACT_IMPORT_SOURCES.JSX_RUNTIME)\n );\n path.unshiftContainer('body', jsxImport);\n calleeInfo.singleCallee = REACT_FUNTIONS.jsx;\n }\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,SAAgB,eAAe,EAC7B,OACA,aACA,mBACA,cAM+B;AAC/B,QAAO,EACL,KAAK,MAAM;AAET,MAAI,EADc,MAAM,WAAW,qBAAqB,aACxC;AAEhB,MAAI,CAAC,mBAAmB,CACtB,0DAAA,yBACE,MACA,MAAM,SAAS,0BAChB;AAKH,MAAI,CAAC,WAAW,gBAAgB,WAAW,aAAa;GACtD,MAAM,YAAYA,aAAE,kBAClB,CACEA,aAAE,gBACAA,aAAE,WAAA,MAA8B,EAChCA,aAAE,WAAA,MAA8B,CACjC,CACF,EACDA,aAAE,cAAA,oBAA+C,CAClD;AACD,QAAK,iBAAiB,QAAQ,UAAU;AACxC,cAAW,eAAA;;IAGhB"}
@@ -14,7 +14,7 @@ function processProgram({ state, countBefore, isAlreadyImported }) {
14
14
  return { exit(path) {
15
15
  if (!(state.statistics.macroExpansionsCount > countBefore) || isAlreadyImported()) return;
16
16
  if (!state.settings.enableMacroImportInjection) return;
17
- require_transform_macro_expansion_injectMacroImport.injectMacroImport(path);
17
+ require_transform_macro_expansion_injectMacroImport.injectMacroImport(path, state.settings.legacyGtReactImportSource);
18
18
  } };
19
19
  }
20
20
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"processProgram.js","names":[],"sources":["../../../src/processing/macro-expansion/processProgram.ts"],"sourcesContent":["import { TransformState } from '../../state/types';\nimport { VisitNode } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { injectMacroImport } from '../../transform/macro-expansion/injectMacroImport';\n\n/**\n * Process program:\n * - on exit,injects macro import if needed\n * @param {Object} param0 - The parameters for the function.\n * @param {TransformState} param0.state - The state of the transformation.\n * @param {number} param0.countBefore - The count before the transformation.\n * @param {boolean} param0.alreadyImported - Whether the macro import has already been injected.\n * @returns {VisitNode<t.Node, t.Program>} The visit node for the program.\n */\nexport function processProgram({\n state,\n countBefore,\n isAlreadyImported,\n}: {\n state: TransformState;\n countBefore: number;\n isAlreadyImported: () => boolean;\n}): VisitNode<t.Node, t.Program> {\n return {\n exit(path) {\n // (1) Check if the macro expansions count has changed\n const didTransform = state.statistics.macroExpansionsCount > countBefore;\n if (!didTransform || isAlreadyImported()) return;\n // (2) If the macro import injection is disabled, return.\n if (!state.settings.enableMacroImportInjection) return;\n // Inject the macro import.\n injectMacroImport(path);\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;AAcA,SAAgB,eAAe,EAC7B,OACA,aACA,qBAK+B;AAC/B,QAAO,EACL,KAAK,MAAM;AAGT,MAAI,EADiB,MAAM,WAAW,uBAAuB,gBACxC,mBAAmB,CAAE;AAE1C,MAAI,CAAC,MAAM,SAAS,2BAA4B;AAEhD,sDAAA,kBAAkB,KAAK;IAE1B"}
1
+ {"version":3,"file":"processProgram.js","names":[],"sources":["../../../src/processing/macro-expansion/processProgram.ts"],"sourcesContent":["import { TransformState } from '../../state/types';\nimport { VisitNode } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { injectMacroImport } from '../../transform/macro-expansion/injectMacroImport';\n\n/**\n * Process program:\n * - on exit,injects macro import if needed\n * @param {Object} param0 - The parameters for the function.\n * @param {TransformState} param0.state - The state of the transformation.\n * @param {number} param0.countBefore - The count before the transformation.\n * @param {boolean} param0.alreadyImported - Whether the macro import has already been injected.\n * @returns {VisitNode<t.Node, t.Program>} The visit node for the program.\n */\nexport function processProgram({\n state,\n countBefore,\n isAlreadyImported,\n}: {\n state: TransformState;\n countBefore: number;\n isAlreadyImported: () => boolean;\n}): VisitNode<t.Node, t.Program> {\n return {\n exit(path) {\n // (1) Check if the macro expansions count has changed\n const didTransform = state.statistics.macroExpansionsCount > countBefore;\n if (!didTransform || isAlreadyImported()) return;\n // (2) If the macro import injection is disabled, return.\n if (!state.settings.enableMacroImportInjection) return;\n // Inject the macro import.\n injectMacroImport(path, state.settings.legacyGtReactImportSource);\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;AAcA,SAAgB,eAAe,EAC7B,OACA,aACA,qBAK+B;AAC/B,QAAO,EACL,KAAK,MAAM;AAGT,MAAI,EADiB,MAAM,WAAW,uBAAuB,gBACxC,mBAAmB,CAAE;AAE1C,MAAI,CAAC,MAAM,SAAS,2BAA4B;AAEhD,sDAAA,kBAAkB,MAAM,MAAM,SAAS,0BAA0B;IAEpE"}
@@ -7,7 +7,7 @@ import { TransformState } from '../../state/types';
7
7
  *
8
8
  * Only transforms when:
9
9
  * - t is unbound (global macro via gt-react/macros)
10
- * - t is imported from gt-react/browser
10
+ * - t is imported from a gt-react entrypoint
11
11
  * Skips when t is bound to a non-GT import (e.g., i18next)
12
12
  */
13
13
  export declare function processTaggedTemplateExpression(state: TransformState): VisitNode<t.Node, t.TaggedTemplateExpression>;
@@ -12,7 +12,7 @@ _babel_types = require_runtime.__toESM(_babel_types);
12
12
  *
13
13
  * Only transforms when:
14
14
  * - t is unbound (global macro via gt-react/macros)
15
- * - t is imported from gt-react/browser
15
+ * - t is imported from a gt-react entrypoint
16
16
  * Skips when t is bound to a non-GT import (e.g., i18next)
17
17
  */
18
18
  function processTaggedTemplateExpression(state) {
@@ -1 +1 @@
1
- {"version":3,"file":"processTaggedTemplateExpression.js","names":["isStringTranslationTaggedTemplate","transformTemplateLiteral","t"],"sources":["../../../src/processing/macro-expansion/processTaggedTemplateExpression.ts"],"sourcesContent":["import { VisitNode } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { TransformState } from '../../state/types';\nimport { GT_OTHER_FUNCTIONS } from '../../utils/constants/gt/constants';\nimport { transformTemplateLiteral } from '../../transform/macro-expansion/transformTemplateLiteral';\nimport { isStringTranslationTaggedTemplate } from '../../utils/parsing/isStringTranslationTaggedTemplate';\n\n/**\n * Process tagged template expressions for macro expansion.\n * Transforms t`Hello, ${name}` → t(\"Hello, {0}\", { \"0\": name })\n *\n * Only transforms when:\n * - t is unbound (global macro via gt-react/macros)\n * - t is imported from gt-react/browser\n * Skips when t is bound to a non-GT import (e.g., i18next)\n */\nexport function processTaggedTemplateExpression(\n state: TransformState\n): VisitNode<t.Node, t.TaggedTemplateExpression> {\n const symbol = state.settings.stringTranslationMacro;\n\n return (path) => {\n if (!state.settings.enableTaggedTemplate) return;\n if (!isStringTranslationTaggedTemplate(path, symbol)) return;\n\n // Extract message from the template literal, errors are logged by collection pass\n const { content, errors } = transformTemplateLiteral(path.get('quasi'));\n // TODO: Until derive added, we only support one message variant\n const message = content[0]?.message;\n const variables = content[0]?.variables;\n if (errors.length > 0 || message == null) return;\n\n // Build the call expression arguments\n const args: t.Expression[] = [message];\n if (variables) args.push(variables);\n path.replaceWith(\n t.callExpression(t.identifier(GT_OTHER_FUNCTIONS.t), args)\n );\n state.statistics.macroExpansionsCount++;\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAgBA,SAAgB,gCACd,OAC+C;CAC/C,MAAM,SAAS,MAAM,SAAS;AAE9B,SAAQ,SAAS;;AACf,MAAI,CAAC,MAAM,SAAS,qBAAsB;AAC1C,MAAI,CAACA,wDAAAA,kCAAkC,MAAM,OAAO,CAAE;EAGtD,MAAM,EAAE,SAAS,WAAWC,2DAAAA,yBAAyB,KAAK,IAAI,QAAQ,CAAC;EAEvE,MAAM,WAAA,YAAU,QAAQ,QAAA,QAAA,cAAA,KAAA,IAAA,KAAA,IAAA,UAAI;EAC5B,MAAM,aAAA,aAAY,QAAQ,QAAA,QAAA,eAAA,KAAA,IAAA,KAAA,IAAA,WAAI;AAC9B,MAAI,OAAO,SAAS,KAAK,WAAW,KAAM;EAG1C,MAAM,OAAuB,CAAC,QAAQ;AACtC,MAAI,UAAW,MAAK,KAAK,UAAU;AACnC,OAAK,YACHC,aAAE,eAAeA,aAAE,WAAA,IAAgC,EAAE,KAAK,CAC3D;AACD,QAAM,WAAW"}
1
+ {"version":3,"file":"processTaggedTemplateExpression.js","names":["isStringTranslationTaggedTemplate","transformTemplateLiteral","t"],"sources":["../../../src/processing/macro-expansion/processTaggedTemplateExpression.ts"],"sourcesContent":["import { VisitNode } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { TransformState } from '../../state/types';\nimport { GT_OTHER_FUNCTIONS } from '../../utils/constants/gt/constants';\nimport { transformTemplateLiteral } from '../../transform/macro-expansion/transformTemplateLiteral';\nimport { isStringTranslationTaggedTemplate } from '../../utils/parsing/isStringTranslationTaggedTemplate';\n\n/**\n * Process tagged template expressions for macro expansion.\n * Transforms t`Hello, ${name}` → t(\"Hello, {0}\", { \"0\": name })\n *\n * Only transforms when:\n * - t is unbound (global macro via gt-react/macros)\n * - t is imported from a gt-react entrypoint\n * Skips when t is bound to a non-GT import (e.g., i18next)\n */\nexport function processTaggedTemplateExpression(\n state: TransformState\n): VisitNode<t.Node, t.TaggedTemplateExpression> {\n const symbol = state.settings.stringTranslationMacro;\n\n return (path) => {\n if (!state.settings.enableTaggedTemplate) return;\n if (!isStringTranslationTaggedTemplate(path, symbol)) return;\n\n // Extract message from the template literal, errors are logged by collection pass\n const { content, errors } = transformTemplateLiteral(path.get('quasi'));\n // TODO: Until derive added, we only support one message variant\n const message = content[0]?.message;\n const variables = content[0]?.variables;\n if (errors.length > 0 || message == null) return;\n\n // Build the call expression arguments\n const args: t.Expression[] = [message];\n if (variables) args.push(variables);\n path.replaceWith(\n t.callExpression(t.identifier(GT_OTHER_FUNCTIONS.t), args)\n );\n state.statistics.macroExpansionsCount++;\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAgBA,SAAgB,gCACd,OAC+C;CAC/C,MAAM,SAAS,MAAM,SAAS;AAE9B,SAAQ,SAAS;;AACf,MAAI,CAAC,MAAM,SAAS,qBAAsB;AAC1C,MAAI,CAACA,wDAAAA,kCAAkC,MAAM,OAAO,CAAE;EAGtD,MAAM,EAAE,SAAS,WAAWC,2DAAAA,yBAAyB,KAAK,IAAI,QAAQ,CAAC;EAEvE,MAAM,WAAA,YAAU,QAAQ,QAAA,QAAA,cAAA,KAAA,IAAA,KAAA,IAAA,UAAI;EAC5B,MAAM,aAAA,aAAY,QAAQ,QAAA,QAAA,eAAA,KAAA,IAAA,KAAA,IAAA,WAAI;AAC9B,MAAI,OAAO,SAAS,KAAK,WAAW,KAAM;EAG1C,MAAM,OAAuB,CAAC,QAAQ;AACtC,MAAI,UAAW,MAAK,KAAK,UAAU;AACnC,OAAK,YACHC,aAAE,eAAeA,aAAE,WAAA,IAAgC,EAAE,KAAK,CAC3D;AACD,QAAM,WAAW"}
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_transform_tracking_trackFunctionParams = require("../transform/tracking/trackFunctionParams.js");
3
2
  const require_transform_tracking_trackFunctionName = require("../transform/tracking/trackFunctionName.js");
3
+ const require_transform_tracking_trackFunctionParams = require("../transform/tracking/trackFunctionParams.js");
4
4
  //#region src/processing/processFunctionDeclaration.ts
5
5
  /**
6
6
  * Process function declaration:
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_transform_tracking_trackFunctionParams = require("../transform/tracking/trackFunctionParams.js");
3
2
  const require_transform_tracking_trackFunctionName = require("../transform/tracking/trackFunctionName.js");
3
+ const require_transform_tracking_trackFunctionParams = require("../transform/tracking/trackFunctionParams.js");
4
4
  //#region src/processing/processFunctionExpression.ts
5
5
  /**
6
6
  * Process function expression:
@@ -1 +1 @@
1
- {"version":3,"file":"processProgram.d.ts","sourceRoot":"","sources":["../../../src/processing/runtime-translate/processProgram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAGlC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,uBAAuB,EACvB,oBAAoB,EACpB,YAAY,GACb,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,uBAAuB,EAAE,MAAM,OAAO,CAAC;IACvC,oBAAoB,EAAE,MAAM,OAAO,CAAC;IACpC,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAmD/B"}
1
+ {"version":3,"file":"processProgram.d.ts","sourceRoot":"","sources":["../../../src/processing/runtime-translate/processProgram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAGlC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,uBAAuB,EACvB,oBAAoB,EACpB,YAAY,GACb,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,uBAAuB,EAAE,MAAM,OAAO,CAAC;IACvC,oBAAoB,EAAE,MAAM,OAAO,CAAC;IACpC,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAoD/B"}
@@ -22,7 +22,8 @@ function processProgram({ state, isStringAlreadyImported, isJsxAlreadyImported,
22
22
  if (needsString || needsJsx) {
23
23
  const injectedPath = require_transform_runtime_translate_injectRuntimeTranslateImport.injectRuntimeTranslateImport(path, {
24
24
  needsString,
25
- needsJsx
25
+ needsJsx,
26
+ legacyGtReactImportSource: state.settings.legacyGtReactImportSource
26
27
  });
27
28
  if (injectedPath) importAnchor.path = injectedPath;
28
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"processProgram.js","names":["buildRuntimeTranslateCalls","injectRuntimeTranslateImport"],"sources":["../../../src/processing/runtime-translate/processProgram.ts"],"sourcesContent":["import { TransformState } from '../../state/types';\nimport { VisitNode } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { injectRuntimeTranslateImport } from '../../transform/runtime-translate/injectRuntimeTranslateImport';\nimport { buildRuntimeTranslateCalls } from '../../transform/runtime-translate/buildRuntimeTranslateCalls';\nimport { ImportAnchor } from './processImportDeclaration';\n\n/**\n * Process program for runtime translate pass:\n * - On exit, reads collected strings and JSX content from StringCollector\n * - Filters out derive entries (hash === '')\n * - Injects import and await Promise.all([...]) with runtime translate calls\n */\nexport function processProgram({\n state,\n isStringAlreadyImported,\n isJsxAlreadyImported,\n importAnchor,\n}: {\n state: TransformState;\n isStringAlreadyImported: () => boolean;\n isJsxAlreadyImported: () => boolean;\n importAnchor: ImportAnchor;\n}): VisitNode<t.Node, t.Program> {\n return {\n exit(path) {\n // Read collected content, filtered by granular devHotReload config\n const allStrings = state.settings.devHotReload.strings\n ? [\n ...state.stringCollector.getAllTranslationContent(),\n ...state.stringCollector.getRuntimeOnlyContent(),\n ].filter((entry) => entry.hash !== '')\n : [];\n const allJsx = state.settings.devHotReload.jsx\n ? state.stringCollector\n .getAllTranslationJsx()\n .filter((entry) => entry.hash !== '')\n : [];\n\n // Nothing to inject\n if (allStrings.length === 0 && allJsx.length === 0) return;\n\n // Build the await Promise.all([...]) statement\n const promiseAllStatement = buildRuntimeTranslateCalls({\n strings: allStrings,\n jsx: allJsx,\n });\n\n // Inject import with only the specifiers that are needed and not already imported\n const needsString = allStrings.length > 0 && !isStringAlreadyImported();\n const needsJsx = allJsx.length > 0 && !isJsxAlreadyImported();\n\n if (needsString || needsJsx) {\n const injectedPath = injectRuntimeTranslateImport(path, {\n needsString,\n needsJsx,\n });\n if (injectedPath) {\n importAnchor.path = injectedPath;\n }\n }\n\n // Insert the Promise.all statement right after the runtime translate import\n if (importAnchor.path) {\n importAnchor.path.insertAfter(promiseAllStatement);\n } else {\n path.unshiftContainer('body', promiseAllStatement);\n }\n\n // Track that we injected runtime translate calls\n state.statistics.runtimeTranslateCount =\n allStrings.length + allJsx.length;\n },\n };\n}\n"],"mappings":";;;;;;;;;;AAaA,SAAgB,eAAe,EAC7B,OACA,yBACA,sBACA,gBAM+B;AAC/B,QAAO,EACL,KAAK,MAAM;EAET,MAAM,aAAa,MAAM,SAAS,aAAa,UAC3C,CACE,GAAG,MAAM,gBAAgB,0BAA0B,EACnD,GAAG,MAAM,gBAAgB,uBAAuB,CACjD,CAAC,QAAQ,UAAU,MAAM,SAAS,GAAG,GACtC,EAAE;EACN,MAAM,SAAS,MAAM,SAAS,aAAa,MACvC,MAAM,gBACH,sBAAsB,CACtB,QAAQ,UAAU,MAAM,SAAS,GAAG,GACvC,EAAE;AAGN,MAAI,WAAW,WAAW,KAAK,OAAO,WAAW,EAAG;EAGpD,MAAM,sBAAsBA,+DAAAA,2BAA2B;GACrD,SAAS;GACT,KAAK;GACN,CAAC;EAGF,MAAM,cAAc,WAAW,SAAS,KAAK,CAAC,yBAAyB;EACvE,MAAM,WAAW,OAAO,SAAS,KAAK,CAAC,sBAAsB;AAE7D,MAAI,eAAe,UAAU;GAC3B,MAAM,eAAeC,iEAAAA,6BAA6B,MAAM;IACtD;IACA;IACD,CAAC;AACF,OAAI,aACF,cAAa,OAAO;;AAKxB,MAAI,aAAa,KACf,cAAa,KAAK,YAAY,oBAAoB;MAElD,MAAK,iBAAiB,QAAQ,oBAAoB;AAIpD,QAAM,WAAW,wBACf,WAAW,SAAS,OAAO;IAEhC"}
1
+ {"version":3,"file":"processProgram.js","names":["buildRuntimeTranslateCalls","injectRuntimeTranslateImport"],"sources":["../../../src/processing/runtime-translate/processProgram.ts"],"sourcesContent":["import { TransformState } from '../../state/types';\nimport { VisitNode } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { injectRuntimeTranslateImport } from '../../transform/runtime-translate/injectRuntimeTranslateImport';\nimport { buildRuntimeTranslateCalls } from '../../transform/runtime-translate/buildRuntimeTranslateCalls';\nimport { ImportAnchor } from './processImportDeclaration';\n\n/**\n * Process program for runtime translate pass:\n * - On exit, reads collected strings and JSX content from StringCollector\n * - Filters out derive entries (hash === '')\n * - Injects import and await Promise.all([...]) with runtime translate calls\n */\nexport function processProgram({\n state,\n isStringAlreadyImported,\n isJsxAlreadyImported,\n importAnchor,\n}: {\n state: TransformState;\n isStringAlreadyImported: () => boolean;\n isJsxAlreadyImported: () => boolean;\n importAnchor: ImportAnchor;\n}): VisitNode<t.Node, t.Program> {\n return {\n exit(path) {\n // Read collected content, filtered by granular devHotReload config\n const allStrings = state.settings.devHotReload.strings\n ? [\n ...state.stringCollector.getAllTranslationContent(),\n ...state.stringCollector.getRuntimeOnlyContent(),\n ].filter((entry) => entry.hash !== '')\n : [];\n const allJsx = state.settings.devHotReload.jsx\n ? state.stringCollector\n .getAllTranslationJsx()\n .filter((entry) => entry.hash !== '')\n : [];\n\n // Nothing to inject\n if (allStrings.length === 0 && allJsx.length === 0) return;\n\n // Build the await Promise.all([...]) statement\n const promiseAllStatement = buildRuntimeTranslateCalls({\n strings: allStrings,\n jsx: allJsx,\n });\n\n // Inject import with only the specifiers that are needed and not already imported\n const needsString = allStrings.length > 0 && !isStringAlreadyImported();\n const needsJsx = allJsx.length > 0 && !isJsxAlreadyImported();\n\n if (needsString || needsJsx) {\n const injectedPath = injectRuntimeTranslateImport(path, {\n needsString,\n needsJsx,\n legacyGtReactImportSource: state.settings.legacyGtReactImportSource,\n });\n if (injectedPath) {\n importAnchor.path = injectedPath;\n }\n }\n\n // Insert the Promise.all statement right after the runtime translate import\n if (importAnchor.path) {\n importAnchor.path.insertAfter(promiseAllStatement);\n } else {\n path.unshiftContainer('body', promiseAllStatement);\n }\n\n // Track that we injected runtime translate calls\n state.statistics.runtimeTranslateCount =\n allStrings.length + allJsx.length;\n },\n };\n}\n"],"mappings":";;;;;;;;;;AAaA,SAAgB,eAAe,EAC7B,OACA,yBACA,sBACA,gBAM+B;AAC/B,QAAO,EACL,KAAK,MAAM;EAET,MAAM,aAAa,MAAM,SAAS,aAAa,UAC3C,CACE,GAAG,MAAM,gBAAgB,0BAA0B,EACnD,GAAG,MAAM,gBAAgB,uBAAuB,CACjD,CAAC,QAAQ,UAAU,MAAM,SAAS,GAAG,GACtC,EAAE;EACN,MAAM,SAAS,MAAM,SAAS,aAAa,MACvC,MAAM,gBACH,sBAAsB,CACtB,QAAQ,UAAU,MAAM,SAAS,GAAG,GACvC,EAAE;AAGN,MAAI,WAAW,WAAW,KAAK,OAAO,WAAW,EAAG;EAGpD,MAAM,sBAAsBA,+DAAAA,2BAA2B;GACrD,SAAS;GACT,KAAK;GACN,CAAC;EAGF,MAAM,cAAc,WAAW,SAAS,KAAK,CAAC,yBAAyB;EACvE,MAAM,WAAW,OAAO,SAAS,KAAK,CAAC,sBAAsB;AAE7D,MAAI,eAAe,UAAU;GAC3B,MAAM,eAAeC,iEAAAA,6BAA6B,MAAM;IACtD;IACA;IACA,2BAA2B,MAAM,SAAS;IAC3C,CAAC;AACF,OAAI,aACF,cAAa,OAAO;;AAKxB,MAAI,aAAa,KACf,cAAa,KAAK,YAAY,oBAAoB;MAElD,MAAK,iBAAiB,QAAQ,oBAAoB;AAIpD,QAAM,WAAW,wBACf,WAAW,SAAS,OAAO;IAEhC"}
@@ -12,11 +12,11 @@ export interface TranslationContent {
12
12
  message: string;
13
13
  /** Pre-calculated hash for this content */
14
14
  hash: string;
15
- /** Optional ID from options: t("text", {id: "greeting"}) → "greeting" */
15
+ /** Optional ID from options: t("text", {$id: "greeting"}) → "greeting" */
16
16
  id?: string;
17
- /** Optional context from options: t("text", {context: "nav"}) → "nav" */
17
+ /** Optional context from options: t("text", {$context: "nav"}) → "nav" */
18
18
  context?: string;
19
- /** Optional maxChars from options: t("text", {maxChars: 10}) → 10 */
19
+ /** Optional maxChars from options: t("text", {$maxChars: 10}) → 10 */
20
20
  maxChars?: number;
21
21
  /** Optional format from options: t("text", {$format: "STRING"}) → "STRING" */
22
22
  format?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"StringCollector.d.ts","sourceRoot":"","sources":["../../src/state/StringCollector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StringCollector.d.ts","sourceRoot":"","sources":["../../src/state/StringCollector.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"StringCollector.js","names":[],"sources":["../../src/state/StringCollector.ts"],"sourcesContent":["/**\n * String Collector - Manages translation content across two-pass transformation\n *\n * Pass 1: Collects translation strings, JSX content, and hash data\n * Pass 2: Injects collected data back into useGT()/getGT() calls\n */\n\n/**\n * Content extracted from a t() function call\n */\nexport interface TranslationContent {\n /** The string message: t(\"Hello world\") → \"Hello world\" */\n message: string;\n /** Pre-calculated hash for this content */\n hash: string;\n /** Optional ID from options: t(\"text\", {id: \"greeting\"}) → \"greeting\" */\n id?: string;\n /** Optional context from options: t(\"text\", {context: \"nav\"}) → \"nav\" */\n context?: string;\n /** Optional maxChars from options: t(\"text\", {maxChars: 10}) → 10 */\n maxChars?: number;\n /** Optional format from options: t(\"text\", {$format: \"STRING\"}) → \"STRING\" */\n format?: string;\n /** Optional requiresReview from options: t(\"text\", {$requiresReview: true}) → true */\n requiresReview?: boolean;\n}\n\n/**\n * Content extracted from JSX translation components like <T>\n */\nexport interface TranslationJsx {\n /** Pre-calculated hash for this JSX content */\n hash: string;\n /** JSX children structure (serializable) */\n children?: unknown;\n /** Optional ID from props */\n id?: string;\n /** Optional context from props */\n context?: string;\n /** Optional requiresReview from props */\n requiresReview?: boolean;\n}\n\n/**\n * Just a hash value for simple hash injection\n */\nexport interface TranslationHash {\n /** The hash value to inject */\n hash: string;\n}\n\ntype SerializedStringCollector = {\n contentAggregators: Record<string, TranslationContent[]>;\n jsxAggregators: Record<string, TranslationJsx>;\n hashAggregators: Record<string, TranslationHash>;\n globalCallCounter: number;\n};\n\n/**\n * String collector for two-pass transformation system\n */\nexport class StringCollector {\n /** Vector of translation calls indexed by counter ID */\n private contentAggregators: Map<number, TranslationContent[]> = new Map();\n private jsxAggregators: Map<number, TranslationJsx> = new Map();\n private hashAggregators: Map<number, TranslationHash> = new Map();\n /** Global counter incremented for each useGT/getGT call encountered */\n private globalCallCounter: number = 0;\n /** Runtime-only entries for standalone strings consumed by runtime translate */\n private runtimeOnlyEntries: TranslationContent[] = [];\n\n /**\n * Increment counter and return the current counter ID for a useGT/getGT call\n * These IDs are deterministic\n */\n incrementCounter(): number {\n this.globalCallCounter += 1;\n return this.globalCallCounter;\n }\n\n /**\n * Get current global counter value\n */\n getCounter(): number {\n return this.globalCallCounter;\n }\n\n /**\n * Pass 1: Add translation content from a gt() call to a specific useGT/getGT aggregator\n * Multiple content items can be added to the same call\n */\n pushTranslationContent(counterId: number, content: TranslationContent): void {\n if (counterId === -1) {\n throw new Error(\n 'Cannot have a counterId of -1. This likely means you are trying to register content from a namespace method invocation.'\n );\n }\n // Get the agreggator\n let aggregator = this.contentAggregators.get(counterId);\n if (!aggregator) {\n aggregator = [content];\n this.contentAggregators.set(counterId, aggregator);\n } else {\n aggregator.push(content);\n }\n }\n\n /**\n * Pass 1: Set JSX translation content for a specific useGT/getGT\n * Only one JSX item can be set per call (overwrites if called multiple times)\n */\n setTranslationJsx(counterId: number, jsx: TranslationJsx): void {\n this.jsxAggregators.set(counterId, jsx);\n }\n\n /**\n * Pass 1: Set hash-only content for a specific useGT/getGT\n * Only one hash can be set per call (overwrites if called multiple times)\n */\n setTranslationHash(counterId: number, hash: TranslationHash): void {\n this.hashAggregators.set(counterId, hash);\n }\n\n /**\n * Pass 2: Get translation call data for injection into a specific useGT/getGT call\n */\n getTranslationData(counterId: number):\n | {\n type: 'content' | 'jsx' | 'hash';\n value: TranslationContent[] | TranslationJsx | TranslationHash;\n }\n | undefined {\n if (this.contentAggregators.has(counterId)) {\n return {\n type: 'content',\n value: this.contentAggregators.get(counterId)!,\n };\n } else if (this.jsxAggregators.has(counterId)) {\n return { type: 'jsx', value: this.jsxAggregators.get(counterId)! };\n } else if (this.hashAggregators.has(counterId)) {\n return { type: 'hash', value: this.hashAggregators.get(counterId)! };\n }\n }\n\n /**\n * Get the translation content for a specific useGT/getGT call\n */\n getTranslationContent(counterId: number): TranslationContent[] | undefined {\n return this.contentAggregators.get(counterId);\n }\n\n /**\n * Get the translation JSX for a specific <T> component\n */\n getTranslationJsx(counterId: number): TranslationJsx | undefined {\n return this.jsxAggregators.get(counterId);\n }\n\n /**\n * Get the translation hash for a specific other call\n */\n getTranslationHash(counterId: number): TranslationHash | undefined {\n return this.hashAggregators.get(counterId);\n }\n\n /**\n * Reset all state (useful for testing)\n */\n clear(): void {\n this.contentAggregators.clear();\n this.jsxAggregators.clear();\n this.hashAggregators.clear();\n this.runtimeOnlyEntries = [];\n this.globalCallCounter = 0;\n }\n\n /**\n * Reset the counter to zero\n */\n resetCounter(): void {\n this.globalCallCounter = 0;\n }\n\n /**\n * Has content\n */\n hasContent(): boolean {\n return (\n this.contentAggregators.size +\n this.jsxAggregators.size +\n this.hashAggregators.size +\n this.runtimeOnlyEntries.length >\n 0\n );\n }\n\n /**\n * Get all translation content entries (flattened across all aggregators)\n */\n getAllTranslationContent(): TranslationContent[] {\n return Array.from(this.contentAggregators.values()).flat();\n }\n\n /**\n * Get all translation JSX entries\n */\n getAllTranslationJsx(): TranslationJsx[] {\n return Array.from(this.jsxAggregators.values());\n }\n\n /**\n * Add a runtime-only translation entry for the runtime translate pass.\n */\n pushRuntimeOnlyContent(content: TranslationContent): void {\n this.runtimeOnlyEntries.push(content);\n }\n\n /**\n * Get all runtime-only translation entries\n */\n getRuntimeOnlyContent(): TranslationContent[] {\n return this.runtimeOnlyEntries;\n }\n\n /**\n * Helper convert to string\n */\n serialize(): SerializedStringCollector {\n const output = {\n contentAggregators: Object.fromEntries(this.contentAggregators),\n jsxAggregators: Object.fromEntries(this.jsxAggregators),\n hashAggregators: Object.fromEntries(this.hashAggregators),\n globalCallCounter: this.globalCallCounter,\n };\n return output;\n }\n\n /**\n * Helper to repopulate\n */\n unserialize(input: SerializedStringCollector): void {\n this.contentAggregators = Object.entries(\n input.contentAggregators as Record<number, TranslationContent[]>\n ).reduce((acc, [key, value]) => {\n acc.set(Number(key), value);\n return acc;\n }, new Map<number, TranslationContent[]>());\n this.jsxAggregators = Object.entries(\n input.jsxAggregators as Record<number, TranslationJsx>\n ).reduce((acc, [key, value]) => {\n acc.set(Number(key), value);\n return acc;\n }, new Map<number, TranslationJsx>());\n this.hashAggregators = Object.entries(\n input.hashAggregators as Record<number, TranslationHash>\n ).reduce((acc, [key, value]) => {\n acc.set(Number(key), value);\n return acc;\n }, new Map<number, TranslationHash>());\n this.globalCallCounter = input.globalCallCounter;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"StringCollector.js","names":[],"sources":["../../src/state/StringCollector.ts"],"sourcesContent":["/**\n * String Collector - Manages translation content across two-pass transformation\n *\n * Pass 1: Collects translation strings, JSX content, and hash data\n * Pass 2: Injects collected data back into useGT()/getGT() calls\n */\n\n/**\n * Content extracted from a t() function call\n */\nexport interface TranslationContent {\n /** The string message: t(\"Hello world\") → \"Hello world\" */\n message: string;\n /** Pre-calculated hash for this content */\n hash: string;\n /** Optional ID from options: t(\"text\", {$id: \"greeting\"}) → \"greeting\" */\n id?: string;\n /** Optional context from options: t(\"text\", {$context: \"nav\"}) → \"nav\" */\n context?: string;\n /** Optional maxChars from options: t(\"text\", {$maxChars: 10}) → 10 */\n maxChars?: number;\n /** Optional format from options: t(\"text\", {$format: \"STRING\"}) → \"STRING\" */\n format?: string;\n /** Optional requiresReview from options: t(\"text\", {$requiresReview: true}) → true */\n requiresReview?: boolean;\n}\n\n/**\n * Content extracted from JSX translation components like <T>\n */\nexport interface TranslationJsx {\n /** Pre-calculated hash for this JSX content */\n hash: string;\n /** JSX children structure (serializable) */\n children?: unknown;\n /** Optional ID from props */\n id?: string;\n /** Optional context from props */\n context?: string;\n /** Optional requiresReview from props */\n requiresReview?: boolean;\n}\n\n/**\n * Just a hash value for simple hash injection\n */\nexport interface TranslationHash {\n /** The hash value to inject */\n hash: string;\n}\n\ntype SerializedStringCollector = {\n contentAggregators: Record<string, TranslationContent[]>;\n jsxAggregators: Record<string, TranslationJsx>;\n hashAggregators: Record<string, TranslationHash>;\n globalCallCounter: number;\n};\n\n/**\n * String collector for two-pass transformation system\n */\nexport class StringCollector {\n /** Vector of translation calls indexed by counter ID */\n private contentAggregators: Map<number, TranslationContent[]> = new Map();\n private jsxAggregators: Map<number, TranslationJsx> = new Map();\n private hashAggregators: Map<number, TranslationHash> = new Map();\n /** Global counter incremented for each useGT/getGT call encountered */\n private globalCallCounter: number = 0;\n /** Runtime-only entries for standalone strings consumed by runtime translate */\n private runtimeOnlyEntries: TranslationContent[] = [];\n\n /**\n * Increment counter and return the current counter ID for a useGT/getGT call\n * These IDs are deterministic\n */\n incrementCounter(): number {\n this.globalCallCounter += 1;\n return this.globalCallCounter;\n }\n\n /**\n * Get current global counter value\n */\n getCounter(): number {\n return this.globalCallCounter;\n }\n\n /**\n * Pass 1: Add translation content from a gt() call to a specific useGT/getGT aggregator\n * Multiple content items can be added to the same call\n */\n pushTranslationContent(counterId: number, content: TranslationContent): void {\n if (counterId === -1) {\n throw new Error(\n 'Cannot have a counterId of -1. This likely means you are trying to register content from a namespace method invocation.'\n );\n }\n // Get the agreggator\n let aggregator = this.contentAggregators.get(counterId);\n if (!aggregator) {\n aggregator = [content];\n this.contentAggregators.set(counterId, aggregator);\n } else {\n aggregator.push(content);\n }\n }\n\n /**\n * Pass 1: Set JSX translation content for a specific useGT/getGT\n * Only one JSX item can be set per call (overwrites if called multiple times)\n */\n setTranslationJsx(counterId: number, jsx: TranslationJsx): void {\n this.jsxAggregators.set(counterId, jsx);\n }\n\n /**\n * Pass 1: Set hash-only content for a specific useGT/getGT\n * Only one hash can be set per call (overwrites if called multiple times)\n */\n setTranslationHash(counterId: number, hash: TranslationHash): void {\n this.hashAggregators.set(counterId, hash);\n }\n\n /**\n * Pass 2: Get translation call data for injection into a specific useGT/getGT call\n */\n getTranslationData(counterId: number):\n | {\n type: 'content' | 'jsx' | 'hash';\n value: TranslationContent[] | TranslationJsx | TranslationHash;\n }\n | undefined {\n if (this.contentAggregators.has(counterId)) {\n return {\n type: 'content',\n value: this.contentAggregators.get(counterId)!,\n };\n } else if (this.jsxAggregators.has(counterId)) {\n return { type: 'jsx', value: this.jsxAggregators.get(counterId)! };\n } else if (this.hashAggregators.has(counterId)) {\n return { type: 'hash', value: this.hashAggregators.get(counterId)! };\n }\n }\n\n /**\n * Get the translation content for a specific useGT/getGT call\n */\n getTranslationContent(counterId: number): TranslationContent[] | undefined {\n return this.contentAggregators.get(counterId);\n }\n\n /**\n * Get the translation JSX for a specific <T> component\n */\n getTranslationJsx(counterId: number): TranslationJsx | undefined {\n return this.jsxAggregators.get(counterId);\n }\n\n /**\n * Get the translation hash for a specific other call\n */\n getTranslationHash(counterId: number): TranslationHash | undefined {\n return this.hashAggregators.get(counterId);\n }\n\n /**\n * Reset all state (useful for testing)\n */\n clear(): void {\n this.contentAggregators.clear();\n this.jsxAggregators.clear();\n this.hashAggregators.clear();\n this.runtimeOnlyEntries = [];\n this.globalCallCounter = 0;\n }\n\n /**\n * Reset the counter to zero\n */\n resetCounter(): void {\n this.globalCallCounter = 0;\n }\n\n /**\n * Has content\n */\n hasContent(): boolean {\n return (\n this.contentAggregators.size +\n this.jsxAggregators.size +\n this.hashAggregators.size +\n this.runtimeOnlyEntries.length >\n 0\n );\n }\n\n /**\n * Get all translation content entries (flattened across all aggregators)\n */\n getAllTranslationContent(): TranslationContent[] {\n return Array.from(this.contentAggregators.values()).flat();\n }\n\n /**\n * Get all translation JSX entries\n */\n getAllTranslationJsx(): TranslationJsx[] {\n return Array.from(this.jsxAggregators.values());\n }\n\n /**\n * Add a runtime-only translation entry for the runtime translate pass.\n */\n pushRuntimeOnlyContent(content: TranslationContent): void {\n this.runtimeOnlyEntries.push(content);\n }\n\n /**\n * Get all runtime-only translation entries\n */\n getRuntimeOnlyContent(): TranslationContent[] {\n return this.runtimeOnlyEntries;\n }\n\n /**\n * Helper convert to string\n */\n serialize(): SerializedStringCollector {\n const output = {\n contentAggregators: Object.fromEntries(this.contentAggregators),\n jsxAggregators: Object.fromEntries(this.jsxAggregators),\n hashAggregators: Object.fromEntries(this.hashAggregators),\n globalCallCounter: this.globalCallCounter,\n };\n return output;\n }\n\n /**\n * Helper to repopulate\n */\n unserialize(input: SerializedStringCollector): void {\n this.contentAggregators = Object.entries(\n input.contentAggregators as Record<number, TranslationContent[]>\n ).reduce((acc, [key, value]) => {\n acc.set(Number(key), value);\n return acc;\n }, new Map<number, TranslationContent[]>());\n this.jsxAggregators = Object.entries(\n input.jsxAggregators as Record<number, TranslationJsx>\n ).reduce((acc, [key, value]) => {\n acc.set(Number(key), value);\n return acc;\n }, new Map<number, TranslationJsx>());\n this.hashAggregators = Object.entries(\n input.hashAggregators as Record<number, TranslationHash>\n ).reduce((acc, [key, value]) => {\n acc.set(Number(key), value);\n return acc;\n }, new Map<number, TranslationHash>());\n this.globalCallCounter = input.globalCallCounter;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"initializeState.d.ts","sourceRoot":"","sources":["../../../src/state/utils/initializeState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AA4B1C;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,MAAM,GACf,cAAc,CAwDhB"}
1
+ {"version":3,"file":"initializeState.d.ts","sourceRoot":"","sources":["../../../src/state/utils/initializeState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAgC1C;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,MAAM,GACf,cAAc,CAsDhB"}
@@ -1,14 +1,14 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_config = require("../../config.js");
3
- require("../../utils/constants/gt/constants.js");
4
3
  const require_state_ScopeTracker = require("../ScopeTracker.js");
4
+ require("../../utils/constants/gt/constants.js");
5
5
  const require_state_StringCollector = require("../StringCollector.js");
6
6
  const require_state_Logger = require("../Logger.js");
7
7
  const require_state_ErrorTracker = require("../ErrorTracker.js");
8
8
  //#region src/state/utils/initializeState.ts
9
9
  const DEFAULT_SETTINGS = {
10
10
  logLevel: "warn",
11
- compileTimeHash: false,
11
+ compileTimeHash: true,
12
12
  disableBuildChecks: false,
13
13
  enableMacroTransform: true,
14
14
  stringTranslationMacro: "t",
@@ -21,6 +21,7 @@ const DEFAULT_SETTINGS = {
21
21
  jsx: false,
22
22
  strings: false
23
23
  },
24
+ legacyGtReactImportSource: false,
24
25
  _debugHashManifest: false,
25
26
  devHotReload: {
26
27
  strings: false,
@@ -35,14 +36,16 @@ function initializeState(options, filename) {
35
36
  const gtConfig = options.gtConfig;
36
37
  const enableAutoJsxInjection = (gtConfig === null || gtConfig === void 0 || (_gtConfig$files = gtConfig.files) === null || _gtConfig$files === void 0 || (_gtConfig$files = _gtConfig$files.gt) === null || _gtConfig$files === void 0 || (_gtConfig$files = _gtConfig$files.parsingFlags) === null || _gtConfig$files === void 0 ? void 0 : _gtConfig$files.enableAutoJsxInjection) ?? false;
37
38
  const rawDevHotReload = (gtConfig === null || gtConfig === void 0 || (_gtConfig$files2 = gtConfig.files) === null || _gtConfig$files2 === void 0 || (_gtConfig$files2 = _gtConfig$files2.gt) === null || _gtConfig$files2 === void 0 || (_gtConfig$files2 = _gtConfig$files2.parsingFlags) === null || _gtConfig$files2 === void 0 ? void 0 : _gtConfig$files2.devHotReload) ?? false;
38
- const rawAutoderive = (gtConfig === null || gtConfig === void 0 || (_gtConfig$files3 = gtConfig.files) === null || _gtConfig$files3 === void 0 || (_gtConfig$files3 = _gtConfig$files3.gt) === null || _gtConfig$files3 === void 0 || (_gtConfig$files3 = _gtConfig$files3.parsingFlags) === null || _gtConfig$files3 === void 0 ? void 0 : _gtConfig$files3.autoderive) ?? (gtConfig === null || gtConfig === void 0 || (_gtConfig$files4 = gtConfig.files) === null || _gtConfig$files4 === void 0 || (_gtConfig$files4 = _gtConfig$files4.gt) === null || _gtConfig$files4 === void 0 || (_gtConfig$files4 = _gtConfig$files4.parsingFlags) === null || _gtConfig$files4 === void 0 ? void 0 : _gtConfig$files4.autoDerive) ?? false;
39
- const autoderive = require_config.resolveAutoderive(options.autoderive ?? options.autoDerive ?? void 0 ?? rawAutoderive);
39
+ const rawAutoderive = (gtConfig === null || gtConfig === void 0 || (_gtConfig$files3 = gtConfig.files) === null || _gtConfig$files3 === void 0 || (_gtConfig$files3 = _gtConfig$files3.gt) === null || _gtConfig$files3 === void 0 || (_gtConfig$files3 = _gtConfig$files3.parsingFlags) === null || _gtConfig$files3 === void 0 ? void 0 : _gtConfig$files3.autoderive) ?? false;
40
+ const legacyGtReactImportSource = options.legacyGtReactImportSource ?? (gtConfig === null || gtConfig === void 0 || (_gtConfig$files4 = gtConfig.files) === null || _gtConfig$files4 === void 0 || (_gtConfig$files4 = _gtConfig$files4.gt) === null || _gtConfig$files4 === void 0 || (_gtConfig$files4 = _gtConfig$files4.parsingFlags) === null || _gtConfig$files4 === void 0 ? void 0 : _gtConfig$files4.legacyGtReactImportSource) ?? false;
41
+ const autoderive = require_config.resolveAutoderive(options.autoderive ?? rawAutoderive);
40
42
  const devHotReload = require_config.resolveDevHotReload(options.devHotReload ?? void 0 ?? rawDevHotReload);
41
- const { autoderive: _a, autoDerive: _b, devHotReload: _c, ...restOptions } = options;
43
+ const { autoderive: _a, devHotReload: _b, legacyGtReactImportSource: _c, ...restOptions } = options;
42
44
  const settings = {
43
45
  ...DEFAULT_SETTINGS,
44
46
  enableAutoJsxInjection,
45
47
  autoderive,
48
+ legacyGtReactImportSource,
46
49
  devHotReload,
47
50
  ...restOptions,
48
51
  filename
@@ -1 +1 @@
1
- {"version":3,"file":"initializeState.js","names":["resolveAutoderive","resolveDevHotReload","StringCollector","ScopeTracker","Logger","ErrorTracker"],"sources":["../../../src/state/utils/initializeState.ts"],"sourcesContent":["import { GTUnpluginOptions } from '../..';\nimport { TransformState } from '../types';\nimport {\n PluginSettings,\n resolveAutoderive,\n resolveDevHotReload,\n} from '../../config';\nimport { StringCollector } from '../StringCollector';\nimport { ScopeTracker } from '../ScopeTracker';\nimport { Logger } from '../Logger';\nimport { ErrorTracker } from '../ErrorTracker';\nimport { GT_OTHER_FUNCTIONS } from '../../utils/constants/gt/constants';\n\nconst DEFAULT_SETTINGS: PluginSettings = {\n logLevel: 'warn',\n compileTimeHash: false,\n disableBuildChecks: false,\n enableMacroTransform: true,\n stringTranslationMacro: GT_OTHER_FUNCTIONS.t,\n enableTaggedTemplate: true,\n enableTemplateLiteralArg: true,\n enableConcatenationArg: true,\n enableMacroImportInjection: true,\n enableAutoJsxInjection: false,\n autoderive: { jsx: false, strings: false },\n _debugHashManifest: false,\n devHotReload: { strings: false, jsx: false },\n};\n\n/**\n * Initialize processing state for a file\n */\nexport function initializeState(\n options: GTUnpluginOptions,\n filename: string\n): TransformState {\n // Pull enableAutoJsxInjection from gtConfig if provided\n const gtConfig = options.gtConfig;\n const enableAutoJsxInjection =\n gtConfig?.files?.gt?.parsingFlags?.enableAutoJsxInjection ?? false;\n const rawDevHotReload =\n gtConfig?.files?.gt?.parsingFlags?.devHotReload ?? false;\n const rawAutoderive =\n gtConfig?.files?.gt?.parsingFlags?.autoderive ??\n gtConfig?.files?.gt?.parsingFlags?.autoDerive ??\n false;\n\n // Backwards compat: normalize deprecated autoDerive → autoderive from options\n const rawOptionsAutoderive =\n options.autoderive ?? options.autoDerive ?? undefined;\n\n const autoderive = resolveAutoderive(rawOptionsAutoderive ?? rawAutoderive);\n\n // Resolve devHotReload (options override gtConfig)\n const rawOptionsDevHotReload = options.devHotReload ?? undefined;\n const devHotReload = resolveDevHotReload(\n rawOptionsDevHotReload ?? rawDevHotReload\n );\n\n // Spread options but exclude already-resolved fields\n // eslint-disable-next-line no-unused-vars\n const {\n autoderive: _a,\n autoDerive: _b,\n devHotReload: _c,\n ...restOptions\n } = options;\n\n const settings: PluginSettings = {\n ...DEFAULT_SETTINGS,\n enableAutoJsxInjection, // can be overridden by options.enableAutoJsxInjection\n autoderive,\n devHotReload,\n ...restOptions,\n filename,\n };\n\n return {\n settings,\n stringCollector: new StringCollector(),\n scopeTracker: new ScopeTracker(),\n logger: new Logger(settings.logLevel),\n errorTracker: new ErrorTracker(),\n statistics: {\n jsxElementCount: 0,\n dynamicContentViolations: 0,\n macroExpansionsCount: 0,\n jsxInsertionsCount: 0,\n runtimeTranslateCount: 0,\n },\n };\n}\n"],"mappings":";;;;;;;;AAaA,MAAM,mBAAmC;CACvC,UAAU;CACV,iBAAiB;CACjB,oBAAoB;CACpB,sBAAsB;CACtB,wBAAA;CACA,sBAAsB;CACtB,0BAA0B;CAC1B,wBAAwB;CACxB,4BAA4B;CAC5B,wBAAwB;CACxB,YAAY;EAAE,KAAK;EAAO,SAAS;EAAO;CAC1C,oBAAoB;CACpB,cAAc;EAAE,SAAS;EAAO,KAAK;EAAO;CAC7C;;;;AAKD,SAAgB,gBACd,SACA,UACgB;;CAEhB,MAAM,WAAW,QAAQ;CACzB,MAAM,0BAAA,aAAA,QAAA,aAAA,KAAA,MAAA,kBACJ,SAAU,WAAA,QAAA,oBAAA,KAAA,MAAA,kBAAA,gBAAO,QAAA,QAAA,oBAAA,KAAA,MAAA,kBAAA,gBAAI,kBAAA,QAAA,oBAAA,KAAA,IAAA,KAAA,IAAA,gBAAc,2BAA0B;CAC/D,MAAM,mBAAA,aAAA,QAAA,aAAA,KAAA,MAAA,mBACJ,SAAU,WAAA,QAAA,qBAAA,KAAA,MAAA,mBAAA,iBAAO,QAAA,QAAA,qBAAA,KAAA,MAAA,mBAAA,iBAAI,kBAAA,QAAA,qBAAA,KAAA,IAAA,KAAA,IAAA,iBAAc,iBAAgB;CACrD,MAAM,iBAAA,aAAA,QAAA,aAAA,KAAA,MAAA,mBACJ,SAAU,WAAA,QAAA,qBAAA,KAAA,MAAA,mBAAA,iBAAO,QAAA,QAAA,qBAAA,KAAA,MAAA,mBAAA,iBAAI,kBAAA,QAAA,qBAAA,KAAA,IAAA,KAAA,IAAA,iBAAc,gBAAA,aAAA,QAAA,aAAA,KAAA,MAAA,mBACnC,SAAU,WAAA,QAAA,qBAAA,KAAA,MAAA,mBAAA,iBAAO,QAAA,QAAA,qBAAA,KAAA,MAAA,mBAAA,iBAAI,kBAAA,QAAA,qBAAA,KAAA,IAAA,KAAA,IAAA,iBAAc,eACnC;CAMF,MAAM,aAAaA,eAAAA,kBAFjB,QAAQ,cAAc,QAAQ,cAAc,KAAA,KAEe,cAAc;CAI3E,MAAM,eAAeC,eAAAA,oBADU,QAAQ,gBAAgB,KAAA,KAE3B,gBAC3B;CAID,MAAM,EACJ,YAAY,IACZ,YAAY,IACZ,cAAc,IACd,GAAG,gBACD;CAEJ,MAAM,WAA2B;EAC/B,GAAG;EACH;EACA;EACA;EACA,GAAG;EACH;EACD;AAED,QAAO;EACL;EACA,iBAAiB,IAAIC,8BAAAA,iBAAiB;EACtC,cAAc,IAAIC,2BAAAA,cAAc;EAChC,QAAQ,IAAIC,qBAAAA,OAAO,SAAS,SAAS;EACrC,cAAc,IAAIC,2BAAAA,cAAc;EAChC,YAAY;GACV,iBAAiB;GACjB,0BAA0B;GAC1B,sBAAsB;GACtB,oBAAoB;GACpB,uBAAuB;GACxB;EACF"}
1
+ {"version":3,"file":"initializeState.js","names":["resolveAutoderive","resolveDevHotReload","StringCollector","ScopeTracker","Logger","ErrorTracker"],"sources":["../../../src/state/utils/initializeState.ts"],"sourcesContent":["import { GTUnpluginOptions } from '../..';\nimport { TransformState } from '../types';\nimport {\n PluginSettings,\n resolveAutoderive,\n resolveDevHotReload,\n} from '../../config';\nimport { StringCollector } from '../StringCollector';\nimport { ScopeTracker } from '../ScopeTracker';\nimport { Logger } from '../Logger';\nimport { ErrorTracker } from '../ErrorTracker';\nimport { GT_OTHER_FUNCTIONS } from '../../utils/constants/gt/constants';\n\nconst DEFAULT_SETTINGS: PluginSettings = {\n logLevel: 'warn',\n // Hash injection is the plugin's default optimization; matches the gt-next\n // default, which historically matched observed behavior because injection\n // ran unconditionally\n compileTimeHash: true,\n disableBuildChecks: false,\n enableMacroTransform: true,\n stringTranslationMacro: GT_OTHER_FUNCTIONS.t,\n enableTaggedTemplate: true,\n enableTemplateLiteralArg: true,\n enableConcatenationArg: true,\n enableMacroImportInjection: true,\n enableAutoJsxInjection: false,\n autoderive: { jsx: false, strings: false },\n legacyGtReactImportSource: false,\n _debugHashManifest: false,\n devHotReload: { strings: false, jsx: false },\n};\n\n/**\n * Initialize processing state for a file\n */\nexport function initializeState(\n options: GTUnpluginOptions,\n filename: string\n): TransformState {\n // Pull enableAutoJsxInjection from gtConfig if provided\n const gtConfig = options.gtConfig;\n const enableAutoJsxInjection =\n gtConfig?.files?.gt?.parsingFlags?.enableAutoJsxInjection ?? false;\n const rawDevHotReload =\n gtConfig?.files?.gt?.parsingFlags?.devHotReload ?? false;\n const rawAutoderive = gtConfig?.files?.gt?.parsingFlags?.autoderive ?? false;\n const legacyGtReactImportSource =\n options.legacyGtReactImportSource ??\n gtConfig?.files?.gt?.parsingFlags?.legacyGtReactImportSource ??\n false;\n\n const autoderive = resolveAutoderive(options.autoderive ?? rawAutoderive);\n\n // Resolve devHotReload (options override gtConfig)\n const rawOptionsDevHotReload = options.devHotReload ?? undefined;\n const devHotReload = resolveDevHotReload(\n rawOptionsDevHotReload ?? rawDevHotReload\n );\n\n // Spread options but exclude already-resolved fields\n // eslint-disable-next-line no-unused-vars\n const {\n autoderive: _a,\n devHotReload: _b,\n legacyGtReactImportSource: _c,\n ...restOptions\n } = options;\n\n const settings: PluginSettings = {\n ...DEFAULT_SETTINGS,\n enableAutoJsxInjection, // can be overridden by options.enableAutoJsxInjection\n autoderive,\n legacyGtReactImportSource,\n devHotReload,\n ...restOptions,\n filename,\n };\n\n return {\n settings,\n stringCollector: new StringCollector(),\n scopeTracker: new ScopeTracker(),\n logger: new Logger(settings.logLevel),\n errorTracker: new ErrorTracker(),\n statistics: {\n jsxElementCount: 0,\n dynamicContentViolations: 0,\n macroExpansionsCount: 0,\n jsxInsertionsCount: 0,\n runtimeTranslateCount: 0,\n },\n };\n}\n"],"mappings":";;;;;;;;AAaA,MAAM,mBAAmC;CACvC,UAAU;CAIV,iBAAiB;CACjB,oBAAoB;CACpB,sBAAsB;CACtB,wBAAA;CACA,sBAAsB;CACtB,0BAA0B;CAC1B,wBAAwB;CACxB,4BAA4B;CAC5B,wBAAwB;CACxB,YAAY;EAAE,KAAK;EAAO,SAAS;EAAO;CAC1C,2BAA2B;CAC3B,oBAAoB;CACpB,cAAc;EAAE,SAAS;EAAO,KAAK;EAAO;CAC7C;;;;AAKD,SAAgB,gBACd,SACA,UACgB;;CAEhB,MAAM,WAAW,QAAQ;CACzB,MAAM,0BAAA,aAAA,QAAA,aAAA,KAAA,MAAA,kBACJ,SAAU,WAAA,QAAA,oBAAA,KAAA,MAAA,kBAAA,gBAAO,QAAA,QAAA,oBAAA,KAAA,MAAA,kBAAA,gBAAI,kBAAA,QAAA,oBAAA,KAAA,IAAA,KAAA,IAAA,gBAAc,2BAA0B;CAC/D,MAAM,mBAAA,aAAA,QAAA,aAAA,KAAA,MAAA,mBACJ,SAAU,WAAA,QAAA,qBAAA,KAAA,MAAA,mBAAA,iBAAO,QAAA,QAAA,qBAAA,KAAA,MAAA,mBAAA,iBAAI,kBAAA,QAAA,qBAAA,KAAA,IAAA,KAAA,IAAA,iBAAc,iBAAgB;CACrD,MAAM,iBAAA,aAAA,QAAA,aAAA,KAAA,MAAA,mBAAgB,SAAU,WAAA,QAAA,qBAAA,KAAA,MAAA,mBAAA,iBAAO,QAAA,QAAA,qBAAA,KAAA,MAAA,mBAAA,iBAAI,kBAAA,QAAA,qBAAA,KAAA,IAAA,KAAA,IAAA,iBAAc,eAAc;CACvE,MAAM,4BACJ,QAAQ,8BAAA,aAAA,QAAA,aAAA,KAAA,MAAA,mBACR,SAAU,WAAA,QAAA,qBAAA,KAAA,MAAA,mBAAA,iBAAO,QAAA,QAAA,qBAAA,KAAA,MAAA,mBAAA,iBAAI,kBAAA,QAAA,qBAAA,KAAA,IAAA,KAAA,IAAA,iBAAc,8BACnC;CAEF,MAAM,aAAaA,eAAAA,kBAAkB,QAAQ,cAAc,cAAc;CAIzE,MAAM,eAAeC,eAAAA,oBADU,QAAQ,gBAAgB,KAAA,KAE3B,gBAC3B;CAID,MAAM,EACJ,YAAY,IACZ,cAAc,IACd,2BAA2B,IAC3B,GAAG,gBACD;CAEJ,MAAM,WAA2B;EAC/B,GAAG;EACH;EACA;EACA;EACA;EACA,GAAG;EACH;EACD;AAED,QAAO;EACL;EACA,iBAAiB,IAAIC,8BAAAA,iBAAiB;EACtC,cAAc,IAAIC,2BAAAA,cAAc;EAChC,QAAQ,IAAIC,qBAAAA,OAAO,SAAS,SAAS;EACrC,cAAc,IAAIC,2BAAAA,cAAc;EAChC,YAAY;GACV,iBAAiB;GACjB,0BAA0B;GAC1B,sBAAsB;GACtB,oBAAoB;GACpB,uBAAuB;GACxB;EACF"}
@@ -2,7 +2,7 @@ import { TransformState } from '../../state/types';
2
2
  import * as t from '@babel/types';
3
3
  /**
4
4
  * inject parameters into invocation of translation function
5
- * - useGT(messages=[{hash, message, id, context, maxChars}])
5
+ * - useGT(messages=[{$_hash, message, $id, $context, $maxChars, $format}])
6
6
  */
7
7
  export declare function injectCallbackDeclaratorFunctionParameters(varDeclarator: t.VariableDeclarator, state: TransformState): void;
8
8
  //# sourceMappingURL=injectCallbackDeclaratorFunctionParameters.d.ts.map
@@ -12,7 +12,7 @@ _babel_types = require_runtime.__toESM(_babel_types);
12
12
  //#region src/transform/injection/injectCallbackDeclaratorFunctionParameters.ts
13
13
  /**
14
14
  * inject parameters into invocation of translation function
15
- * - useGT(messages=[{hash, message, id, context, maxChars}])
15
+ * - useGT(messages=[{$_hash, message, $id, $context, $maxChars, $format}])
16
16
  */
17
17
  function injectCallbackDeclaratorFunctionParameters(varDeclarator, state) {
18
18
  var _state$scopeTracker$g;
@@ -61,11 +61,12 @@ function injectUseGTParameters(expression, state, id) {
61
61
  const translationContent = state.stringCollector.getTranslationContent(id);
62
62
  if (!translationContent) return;
63
63
  expression.arguments = [_babel_types.arrayExpression(translationContent.map((content) => _babel_types.objectExpression([
64
- _babel_types.objectProperty(_babel_types.identifier("hash"), _babel_types.stringLiteral(content.hash)),
64
+ _babel_types.objectProperty(_babel_types.identifier("$_hash"), _babel_types.stringLiteral(content.hash)),
65
65
  _babel_types.objectProperty(_babel_types.identifier("message"), _babel_types.stringLiteral(content.message)),
66
- ...content.id ? [_babel_types.objectProperty(_babel_types.identifier("id"), _babel_types.stringLiteral(content.id))] : [],
67
- ...content.context ? [_babel_types.objectProperty(_babel_types.identifier("context"), _babel_types.stringLiteral(content.context))] : [],
68
- ...content.maxChars != null ? [_babel_types.objectProperty(_babel_types.identifier("maxChars"), _babel_types.numericLiteral(content.maxChars))] : []
66
+ ...content.id ? [_babel_types.objectProperty(_babel_types.identifier("$id"), _babel_types.stringLiteral(content.id))] : [],
67
+ ...content.context ? [_babel_types.objectProperty(_babel_types.identifier("$context"), _babel_types.stringLiteral(content.context))] : [],
68
+ ...content.maxChars != null ? [_babel_types.objectProperty(_babel_types.identifier("$maxChars"), _babel_types.numericLiteral(content.maxChars))] : [],
69
+ ...content.format ? [_babel_types.objectProperty(_babel_types.identifier("$format"), _babel_types.stringLiteral(content.format))] : []
69
70
  ])))];
70
71
  }
71
72
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"injectCallbackDeclaratorFunctionParameters.js","names":["t","getCalleeNameFromExpressionWrapper","getTrackedVariable","extractIdentifiersFromLVal","isGTFunctionWithCallbacks","createErrorLocation"],"sources":["../../../src/transform/injection/injectCallbackDeclaratorFunctionParameters.ts"],"sourcesContent":["import { TransformState } from '../../state/types';\nimport * as t from '@babel/types';\nimport { getTrackedVariable } from '../getTrackedVariable';\nimport { getCalleeNameFromExpressionWrapper } from '../../utils/parsing/getCalleeNameFromExpressionWrapper';\nimport { isGTFunctionWithCallbacks } from '../../utils/constants/gt/helpers';\nimport { GT_FUNCTIONS_WITH_CALLBACKS } from '../../utils/constants/gt/constants';\nimport { extractIdentifiersFromLVal } from '../../utils/parsing/extractIdentifiersFromLVal';\nimport { trackOverridingVariable } from '../tracking/trackOverridingVariable';\nimport { createErrorLocation } from '../../utils/errors';\n\n/**\n * inject parameters into invocation of translation function\n * - useGT(messages=[{hash, message, id, context, maxChars}])\n */\nexport function injectCallbackDeclaratorFunctionParameters(\n varDeclarator: t.VariableDeclarator,\n state: TransformState\n): void {\n // Ignore non-LVal assignments\n if (!t.isLVal(varDeclarator.id)) {\n return;\n }\n\n // Get function name from callee\n const { namespaceName, functionName } = getCalleeNameFromExpressionWrapper(\n varDeclarator.init\n );\n if (!functionName) {\n return;\n }\n\n // Get the canonical function name\n const { canonicalName, type } = getTrackedVariable(\n state.scopeTracker,\n namespaceName,\n functionName\n );\n if (!canonicalName) {\n return;\n }\n\n // Extract identifiers from the LVal\n const identifiers = extractIdentifiersFromLVal(varDeclarator.id);\n\n // Validate the type\n if (\n type !== 'generaltranslation' ||\n !isGTFunctionWithCallbacks(canonicalName)\n ) {\n // Track as an overriding variable\n for (const identifier of identifiers) {\n trackOverridingVariable(identifier, state.scopeTracker);\n }\n return;\n }\n\n // There can only be one callback defined for const gt = useGT()\n if (identifiers.length !== 1) {\n state.logger.logError(\n `Multiple identifiers found for GT function with callbacks: ${canonicalName}. Parameter injection failed.` +\n createErrorLocation(varDeclarator.id)\n );\n return;\n }\n const identifier = identifiers[0];\n\n // Inject the parameters into the call expression\n const expression = getFunctionInvocation(varDeclarator);\n if (!expression) {\n state.logger.logError(\n `No valid function invocation found for ${functionName}. Parameter injection failed.` +\n createErrorLocation(varDeclarator.id)\n );\n return;\n }\n if (expression.arguments.length > 0) {\n // Found existing arguments, skip injection\n return;\n }\n\n // Look up identifier\n const id = state.scopeTracker.getVariable(identifier)?.identifier;\n if (!id) {\n state.logger.logError(\n `No translation callback variable found for ${identifier}. Parameter injection failed.` +\n createErrorLocation(varDeclarator.id)\n );\n return;\n }\n // Inject into the callees\n switch (canonicalName) {\n case GT_FUNCTIONS_WITH_CALLBACKS.useGT:\n case GT_FUNCTIONS_WITH_CALLBACKS.getGT:\n injectUseGTParameters(expression, state, id);\n break;\n default:\n return;\n }\n}\n\n/**\n * Inject the parameters into the useGT/getGT call\n * @param arguments - The arguments\n * @param state - The state\n * @param identifier - The identifier\n * @param translationContent - The translation content\n */\nfunction injectUseGTParameters(\n expression: t.CallExpression,\n state: TransformState,\n id: number\n) {\n // Get the corresponding callback injection data\n const translationContent = state.stringCollector.getTranslationContent(id);\n if (!translationContent) {\n return;\n }\n\n // Inject the parameters into the call expression\n expression.arguments = [\n t.arrayExpression(\n translationContent.map((content) =>\n t.objectExpression([\n t.objectProperty(t.identifier('hash'), t.stringLiteral(content.hash)),\n t.objectProperty(\n t.identifier('message'),\n t.stringLiteral(content.message)\n ),\n ...(content.id\n ? [\n t.objectProperty(\n t.identifier('id'),\n t.stringLiteral(content.id)\n ),\n ]\n : []),\n ...(content.context\n ? [\n t.objectProperty(\n t.identifier('context'),\n t.stringLiteral(content.context)\n ),\n ]\n : []),\n ...(content.maxChars != null\n ? [\n t.objectProperty(\n t.identifier('maxChars'),\n t.numericLiteral(content.maxChars)\n ),\n ]\n : []),\n ])\n )\n ),\n ];\n}\n\n/**\n * Get the function invocation from the variable declarator\n * @param varDeclarator - The variable declarator\n */\nfunction getFunctionInvocation(\n varDeclarator: t.VariableDeclarator\n): t.CallExpression | undefined {\n const expression = varDeclarator.init;\n if (!expression) {\n // failed\n return;\n }\n if (t.isCallExpression(expression)) {\n return expression;\n }\n if (\n t.isAwaitExpression(expression) &&\n t.isCallExpression(expression.argument)\n ) {\n return expression.argument;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAcA,SAAgB,2CACd,eACA,OACM;;AAEN,KAAI,CAACA,aAAE,OAAO,cAAc,GAAG,CAC7B;CAIF,MAAM,EAAE,eAAe,iBAAiBC,yDAAAA,mCACtC,cAAc,KACf;AACD,KAAI,CAAC,aACH;CAIF,MAAM,EAAE,eAAe,SAASC,qCAAAA,mBAC9B,MAAM,cACN,eACA,aACD;AACD,KAAI,CAAC,cACH;CAIF,MAAM,cAAcC,iDAAAA,2BAA2B,cAAc,GAAG;AAGhE,KACE,SAAS,wBACT,CAACC,mCAAAA,0BAA0B,cAAc,EACzC;AAEA,OAAK,MAAM,cAAc,YACvB,oDAAA,wBAAwB,YAAY,MAAM,aAAa;AAEzD;;AAIF,KAAI,YAAY,WAAW,GAAG;AAC5B,QAAM,OAAO,SACX,8DAA8D,cAAc,iCAC1EC,qBAAAA,oBAAoB,cAAc,GAAG,CACxC;AACD;;CAEF,MAAM,aAAa,YAAY;CAG/B,MAAM,aAAa,sBAAsB,cAAc;AACvD,KAAI,CAAC,YAAY;AACf,QAAM,OAAO,SACX,0CAA0C,aAAa,iCACrDA,qBAAAA,oBAAoB,cAAc,GAAG,CACxC;AACD;;AAEF,KAAI,WAAW,UAAU,SAAS,EAEhC;CAIF,MAAM,MAAA,wBAAK,MAAM,aAAa,YAAY,WAAW,MAAA,QAAA,0BAAA,KAAA,IAAA,KAAA,IAAA,sBAAE;AACvD,KAAI,CAAC,IAAI;AACP,QAAM,OAAO,SACX,8CAA8C,WAAW,iCACvDA,qBAAAA,oBAAoB,cAAc,GAAG,CACxC;AACD;;AAGF,SAAQ,eAAR;EACE,KAAA;EACA,KAAA;AACE,yBAAsB,YAAY,OAAO,GAAG;AAC5C;EACF,QACE;;;;;;;;;;AAWN,SAAS,sBACP,YACA,OACA,IACA;CAEA,MAAM,qBAAqB,MAAM,gBAAgB,sBAAsB,GAAG;AAC1E,KAAI,CAAC,mBACH;AAIF,YAAW,YAAY,CACrBL,aAAE,gBACA,mBAAmB,KAAK,YACtBA,aAAE,iBAAiB;EACjBA,aAAE,eAAeA,aAAE,WAAW,OAAO,EAAEA,aAAE,cAAc,QAAQ,KAAK,CAAC;EACrEA,aAAE,eACAA,aAAE,WAAW,UAAU,EACvBA,aAAE,cAAc,QAAQ,QAAQ,CACjC;EACD,GAAI,QAAQ,KACR,CACEA,aAAE,eACAA,aAAE,WAAW,KAAK,EAClBA,aAAE,cAAc,QAAQ,GAAG,CAC5B,CACF,GACD,EAAE;EACN,GAAI,QAAQ,UACR,CACEA,aAAE,eACAA,aAAE,WAAW,UAAU,EACvBA,aAAE,cAAc,QAAQ,QAAQ,CACjC,CACF,GACD,EAAE;EACN,GAAI,QAAQ,YAAY,OACpB,CACEA,aAAE,eACAA,aAAE,WAAW,WAAW,EACxBA,aAAE,eAAe,QAAQ,SAAS,CACnC,CACF,GACD,EAAE;EACP,CAAC,CACH,CACF,CACF;;;;;;AAOH,SAAS,sBACP,eAC8B;CAC9B,MAAM,aAAa,cAAc;AACjC,KAAI,CAAC,WAEH;AAEF,KAAIA,aAAE,iBAAiB,WAAW,CAChC,QAAO;AAET,KACEA,aAAE,kBAAkB,WAAW,IAC/BA,aAAE,iBAAiB,WAAW,SAAS,CAEvC,QAAO,WAAW"}
1
+ {"version":3,"file":"injectCallbackDeclaratorFunctionParameters.js","names":["t","getCalleeNameFromExpressionWrapper","getTrackedVariable","extractIdentifiersFromLVal","isGTFunctionWithCallbacks","createErrorLocation"],"sources":["../../../src/transform/injection/injectCallbackDeclaratorFunctionParameters.ts"],"sourcesContent":["import { TransformState } from '../../state/types';\nimport * as t from '@babel/types';\nimport { getTrackedVariable } from '../getTrackedVariable';\nimport { getCalleeNameFromExpressionWrapper } from '../../utils/parsing/getCalleeNameFromExpressionWrapper';\nimport { isGTFunctionWithCallbacks } from '../../utils/constants/gt/helpers';\nimport { GT_FUNCTIONS_WITH_CALLBACKS } from '../../utils/constants/gt/constants';\nimport { extractIdentifiersFromLVal } from '../../utils/parsing/extractIdentifiersFromLVal';\nimport { trackOverridingVariable } from '../tracking/trackOverridingVariable';\nimport { createErrorLocation } from '../../utils/errors';\n\n/**\n * inject parameters into invocation of translation function\n * - useGT(messages=[{$_hash, message, $id, $context, $maxChars, $format}])\n */\nexport function injectCallbackDeclaratorFunctionParameters(\n varDeclarator: t.VariableDeclarator,\n state: TransformState\n): void {\n // Ignore non-LVal assignments\n if (!t.isLVal(varDeclarator.id)) {\n return;\n }\n\n // Get function name from callee\n const { namespaceName, functionName } = getCalleeNameFromExpressionWrapper(\n varDeclarator.init\n );\n if (!functionName) {\n return;\n }\n\n // Get the canonical function name\n const { canonicalName, type } = getTrackedVariable(\n state.scopeTracker,\n namespaceName,\n functionName\n );\n if (!canonicalName) {\n return;\n }\n\n // Extract identifiers from the LVal\n const identifiers = extractIdentifiersFromLVal(varDeclarator.id);\n\n // Validate the type\n if (\n type !== 'generaltranslation' ||\n !isGTFunctionWithCallbacks(canonicalName)\n ) {\n // Track as an overriding variable\n for (const identifier of identifiers) {\n trackOverridingVariable(identifier, state.scopeTracker);\n }\n return;\n }\n\n // There can only be one callback defined for const gt = useGT()\n if (identifiers.length !== 1) {\n state.logger.logError(\n `Multiple identifiers found for GT function with callbacks: ${canonicalName}. Parameter injection failed.` +\n createErrorLocation(varDeclarator.id)\n );\n return;\n }\n const identifier = identifiers[0];\n\n // Inject the parameters into the call expression\n const expression = getFunctionInvocation(varDeclarator);\n if (!expression) {\n state.logger.logError(\n `No valid function invocation found for ${functionName}. Parameter injection failed.` +\n createErrorLocation(varDeclarator.id)\n );\n return;\n }\n if (expression.arguments.length > 0) {\n // Found existing arguments, skip injection\n return;\n }\n\n // Look up identifier\n const id = state.scopeTracker.getVariable(identifier)?.identifier;\n if (!id) {\n state.logger.logError(\n `No translation callback variable found for ${identifier}. Parameter injection failed.` +\n createErrorLocation(varDeclarator.id)\n );\n return;\n }\n // Inject into the callees\n switch (canonicalName) {\n case GT_FUNCTIONS_WITH_CALLBACKS.useGT:\n case GT_FUNCTIONS_WITH_CALLBACKS.getGT:\n injectUseGTParameters(expression, state, id);\n break;\n default:\n return;\n }\n}\n\n/**\n * Inject the parameters into the useGT/getGT call\n * @param arguments - The arguments\n * @param state - The state\n * @param identifier - The identifier\n * @param translationContent - The translation content\n */\nfunction injectUseGTParameters(\n expression: t.CallExpression,\n state: TransformState,\n id: number\n) {\n // Get the corresponding callback injection data\n const translationContent = state.stringCollector.getTranslationContent(id);\n if (!translationContent) {\n return;\n }\n\n // Inject the parameters into the call expression\n expression.arguments = [\n t.arrayExpression(\n translationContent.map((content) =>\n t.objectExpression([\n t.objectProperty(\n t.identifier('$_hash'),\n t.stringLiteral(content.hash)\n ),\n t.objectProperty(\n t.identifier('message'),\n t.stringLiteral(content.message)\n ),\n ...(content.id\n ? [\n t.objectProperty(\n t.identifier('$id'),\n t.stringLiteral(content.id)\n ),\n ]\n : []),\n ...(content.context\n ? [\n t.objectProperty(\n t.identifier('$context'),\n t.stringLiteral(content.context)\n ),\n ]\n : []),\n ...(content.maxChars != null\n ? [\n t.objectProperty(\n t.identifier('$maxChars'),\n t.numericLiteral(content.maxChars)\n ),\n ]\n : []),\n ...(content.format\n ? [\n t.objectProperty(\n t.identifier('$format'),\n t.stringLiteral(content.format)\n ),\n ]\n : []),\n ])\n )\n ),\n ];\n}\n\n/**\n * Get the function invocation from the variable declarator\n * @param varDeclarator - The variable declarator\n */\nfunction getFunctionInvocation(\n varDeclarator: t.VariableDeclarator\n): t.CallExpression | undefined {\n const expression = varDeclarator.init;\n if (!expression) {\n // failed\n return;\n }\n if (t.isCallExpression(expression)) {\n return expression;\n }\n if (\n t.isAwaitExpression(expression) &&\n t.isCallExpression(expression.argument)\n ) {\n return expression.argument;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAcA,SAAgB,2CACd,eACA,OACM;;AAEN,KAAI,CAACA,aAAE,OAAO,cAAc,GAAG,CAC7B;CAIF,MAAM,EAAE,eAAe,iBAAiBC,yDAAAA,mCACtC,cAAc,KACf;AACD,KAAI,CAAC,aACH;CAIF,MAAM,EAAE,eAAe,SAASC,qCAAAA,mBAC9B,MAAM,cACN,eACA,aACD;AACD,KAAI,CAAC,cACH;CAIF,MAAM,cAAcC,iDAAAA,2BAA2B,cAAc,GAAG;AAGhE,KACE,SAAS,wBACT,CAACC,mCAAAA,0BAA0B,cAAc,EACzC;AAEA,OAAK,MAAM,cAAc,YACvB,oDAAA,wBAAwB,YAAY,MAAM,aAAa;AAEzD;;AAIF,KAAI,YAAY,WAAW,GAAG;AAC5B,QAAM,OAAO,SACX,8DAA8D,cAAc,iCAC1EC,qBAAAA,oBAAoB,cAAc,GAAG,CACxC;AACD;;CAEF,MAAM,aAAa,YAAY;CAG/B,MAAM,aAAa,sBAAsB,cAAc;AACvD,KAAI,CAAC,YAAY;AACf,QAAM,OAAO,SACX,0CAA0C,aAAa,iCACrDA,qBAAAA,oBAAoB,cAAc,GAAG,CACxC;AACD;;AAEF,KAAI,WAAW,UAAU,SAAS,EAEhC;CAIF,MAAM,MAAA,wBAAK,MAAM,aAAa,YAAY,WAAW,MAAA,QAAA,0BAAA,KAAA,IAAA,KAAA,IAAA,sBAAE;AACvD,KAAI,CAAC,IAAI;AACP,QAAM,OAAO,SACX,8CAA8C,WAAW,iCACvDA,qBAAAA,oBAAoB,cAAc,GAAG,CACxC;AACD;;AAGF,SAAQ,eAAR;EACE,KAAA;EACA,KAAA;AACE,yBAAsB,YAAY,OAAO,GAAG;AAC5C;EACF,QACE;;;;;;;;;;AAWN,SAAS,sBACP,YACA,OACA,IACA;CAEA,MAAM,qBAAqB,MAAM,gBAAgB,sBAAsB,GAAG;AAC1E,KAAI,CAAC,mBACH;AAIF,YAAW,YAAY,CACrBL,aAAE,gBACA,mBAAmB,KAAK,YACtBA,aAAE,iBAAiB;EACjBA,aAAE,eACAA,aAAE,WAAW,SAAS,EACtBA,aAAE,cAAc,QAAQ,KAAK,CAC9B;EACDA,aAAE,eACAA,aAAE,WAAW,UAAU,EACvBA,aAAE,cAAc,QAAQ,QAAQ,CACjC;EACD,GAAI,QAAQ,KACR,CACEA,aAAE,eACAA,aAAE,WAAW,MAAM,EACnBA,aAAE,cAAc,QAAQ,GAAG,CAC5B,CACF,GACD,EAAE;EACN,GAAI,QAAQ,UACR,CACEA,aAAE,eACAA,aAAE,WAAW,WAAW,EACxBA,aAAE,cAAc,QAAQ,QAAQ,CACjC,CACF,GACD,EAAE;EACN,GAAI,QAAQ,YAAY,OACpB,CACEA,aAAE,eACAA,aAAE,WAAW,YAAY,EACzBA,aAAE,eAAe,QAAQ,SAAS,CACnC,CACF,GACD,EAAE;EACN,GAAI,QAAQ,SACR,CACEA,aAAE,eACAA,aAAE,WAAW,UAAU,EACvBA,aAAE,cAAc,QAAQ,OAAO,CAChC,CACF,GACD,EAAE;EACP,CAAC,CACH,CACF,CACF;;;;;;AAOH,SAAS,sBACP,eAC8B;CAC9B,MAAM,aAAa,cAAc;AACjC,KAAI,CAAC,WAEH;AAEF,KAAIA,aAAE,iBAAiB,WAAW,CAChC,QAAO;AAET,KACEA,aAAE,kBAAkB,WAAW,IAC/BA,aAAE,iBAAiB,WAAW,SAAS,CAEvC,QAAO,WAAW"}
@@ -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/browser'`
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>): void;
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;AAM3C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAaxE"}
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/browser'`
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("gt-react/browser"));
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 {\n GT_COMPONENT_TYPES,\n GT_IMPORT_SOURCES,\n} from '../../utils/constants/gt/constants';\n\n/**\n * Inject `import { GtInternalTranslateJsx, GtInternalVar } from 'gt-react/browser'`\n * as the first statement in the program.\n */\nexport function injectJsxInsertionImport(path: NodePath<t.Program>): 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(GT_IMPORT_SOURCES.GT_REACT_BROWSER)\n );\n\n path.unshiftContainer('body', importDecl);\n}\n"],"mappings":";;;;;;;;;;AAWA,SAAgB,yBAAyB,MAAiC;CACxE,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,cAAA,mBAAiD,CACpD;AAED,MAAK,iBAAiB,QAAQ,WAAW"}
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/browser'` as the first statement in the program.
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>): void;
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;AAM3C;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CASjE"}
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"}