@generaltranslation/compiler 1.3.23 → 1.3.25-odysseus.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.d.ts +5 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/processing/collection/processTaggedTemplateExpression.d.ts +1 -1
- package/dist/processing/collection/processTaggedTemplateExpression.js +1 -1
- package/dist/processing/collection/processTaggedTemplateExpression.js.map +1 -1
- package/dist/processing/jsx-insertion/processCallExpression.js.map +1 -1
- package/dist/processing/jsx-insertion/processProgram.d.ts.map +1 -1
- package/dist/processing/jsx-insertion/processProgram.js +1 -1
- package/dist/processing/jsx-insertion/processProgram.js.map +1 -1
- package/dist/processing/macro-expansion/processProgram.js +1 -1
- package/dist/processing/macro-expansion/processProgram.js.map +1 -1
- package/dist/processing/macro-expansion/processTaggedTemplateExpression.d.ts +1 -1
- package/dist/processing/macro-expansion/processTaggedTemplateExpression.js +1 -1
- package/dist/processing/macro-expansion/processTaggedTemplateExpression.js.map +1 -1
- package/dist/processing/runtime-translate/processProgram.d.ts.map +1 -1
- package/dist/processing/runtime-translate/processProgram.js +2 -1
- package/dist/processing/runtime-translate/processProgram.js.map +1 -1
- package/dist/state/utils/initializeState.d.ts.map +1 -1
- package/dist/state/utils/initializeState.js +6 -3
- package/dist/state/utils/initializeState.js.map +1 -1
- package/dist/transform/jsx-children/constructJsxChildren.js.map +1 -1
- package/dist/transform/jsx-insertion/injectJsxInsertionImport.d.ts +2 -2
- package/dist/transform/jsx-insertion/injectJsxInsertionImport.d.ts.map +1 -1
- package/dist/transform/jsx-insertion/injectJsxInsertionImport.js +4 -3
- package/dist/transform/jsx-insertion/injectJsxInsertionImport.js.map +1 -1
- package/dist/transform/macro-expansion/injectMacroImport.d.ts +2 -2
- package/dist/transform/macro-expansion/injectMacroImport.d.ts.map +1 -1
- package/dist/transform/macro-expansion/injectMacroImport.js +4 -3
- package/dist/transform/macro-expansion/injectMacroImport.js.map +1 -1
- package/dist/transform/runtime-translate/injectRuntimeTranslateImport.d.ts +3 -2
- package/dist/transform/runtime-translate/injectRuntimeTranslateImport.d.ts.map +1 -1
- package/dist/transform/runtime-translate/injectRuntimeTranslateImport.js +4 -3
- package/dist/transform/runtime-translate/injectRuntimeTranslateImport.js.map +1 -1
- package/dist/transform/validation/validateTranslationFunction.d.ts.map +1 -1
- package/dist/transform/validation/validateTranslationFunction.js +3 -3
- package/dist/transform/validation/validateTranslationFunction.js.map +1 -1
- package/dist/utils/constants/gt/constants.d.ts +1 -5
- package/dist/utils/constants/gt/constants.d.ts.map +1 -1
- package/dist/utils/constants/gt/constants.js +1 -5
- package/dist/utils/constants/gt/constants.js.map +1 -1
- package/dist/utils/constants/gt/helpers.d.ts +2 -1
- package/dist/utils/constants/gt/helpers.d.ts.map +1 -1
- package/dist/utils/constants/gt/helpers.js +15 -5
- package/dist/utils/constants/gt/helpers.js.map +1 -1
- package/dist/utils/constants/resolveIdentifier/isGTComponent.d.ts +1 -1
- package/dist/utils/constants/resolveIdentifier/isGTComponent.d.ts.map +1 -1
- package/dist/utils/constants/resolveIdentifier/isGTComponent.js +2 -3
- package/dist/utils/constants/resolveIdentifier/isGTComponent.js.map +1 -1
- package/dist/utils/parsing/isStringTranslationTaggedTemplate.d.ts +1 -1
- package/dist/utils/parsing/isStringTranslationTaggedTemplate.js +3 -3
- package/dist/utils/parsing/isStringTranslationTaggedTemplate.js.map +1 -1
- package/package.json +3 -3
package/dist/config.d.ts
CHANGED
|
@@ -14,8 +14,7 @@ type GTConfig = {
|
|
|
14
14
|
jsx?: boolean;
|
|
15
15
|
strings?: boolean;
|
|
16
16
|
};
|
|
17
|
-
|
|
18
|
-
autoDerive?: boolean;
|
|
17
|
+
legacyGtReactImportSource?: boolean;
|
|
19
18
|
/** Dev hot reload: inject runtime translate calls and enable Suspense-based <T> */
|
|
20
19
|
devHotReload?: boolean | {
|
|
21
20
|
strings?: boolean;
|
|
@@ -48,8 +47,8 @@ export interface PluginConfig {
|
|
|
48
47
|
jsx?: boolean;
|
|
49
48
|
strings?: boolean;
|
|
50
49
|
};
|
|
51
|
-
/**
|
|
52
|
-
|
|
50
|
+
/** Emit compiler-injected gt-react imports from gt-react/browser */
|
|
51
|
+
legacyGtReactImportSource?: boolean;
|
|
53
52
|
/** Debug: write a hash → jsxChildren manifest file on build */
|
|
54
53
|
_debugHashManifest?: boolean;
|
|
55
54
|
/** Dev hot reload: inject runtime translate calls and enable Suspense-based <T> */
|
|
@@ -79,6 +78,8 @@ export interface PluginSettings {
|
|
|
79
78
|
jsx: boolean;
|
|
80
79
|
strings: boolean;
|
|
81
80
|
};
|
|
81
|
+
/** Emit compiler-injected gt-react imports from gt-react/browser */
|
|
82
|
+
legacyGtReactImportSource: boolean;
|
|
82
83
|
/** Debug: write a hash → jsxChildren manifest file on build */
|
|
83
84
|
_debugHashManifest: boolean;
|
|
84
85
|
/** Dev hot reload: inject runtime translate calls and enable Suspense-based <T> */
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEtE;;GAEG;AACH,KAAK,QAAQ,GAAG;IACd,KAAK,CAAC,EAAE;QACN,EAAE,CAAC,EAAE;YACH,YAAY,CAAC,EAAE;gBACb,sBAAsB,CAAC,EAAE,OAAO,CAAC;gBACjC,UAAU,CAAC,EAAE,OAAO,GAAG;oBAAE,GAAG,CAAC,EAAE,OAAO,CAAC;oBAAC,OAAO,CAAC,EAAE,OAAO,CAAA;iBAAE,CAAC;gBAC5D,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":[],"sources":["../src/config.ts"],"sourcesContent":["/**\n * Configuration types for the GT Babel plugin\n */\n\nexport type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug';\n\n/**\n * The only relevant parts of the GT config that we are concerned with\n */\ntype GTConfig = {\n files?: {\n gt?: {\n parsingFlags?: {\n enableAutoJsxInjection?: boolean;\n autoderive?: boolean | { jsx?: boolean; strings?: boolean };\n
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../src/config.ts"],"sourcesContent":["/**\n * Configuration types for the GT Babel plugin\n */\n\nexport type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug';\n\n/**\n * The only relevant parts of the GT config that we are concerned with\n */\ntype GTConfig = {\n files?: {\n gt?: {\n parsingFlags?: {\n enableAutoJsxInjection?: boolean;\n autoderive?: boolean | { jsx?: boolean; strings?: boolean };\n legacyGtReactImportSource?: boolean;\n /** Dev hot reload: inject runtime translate calls and enable Suspense-based <T> */\n devHotReload?: boolean | { strings?: boolean; jsx?: boolean };\n };\n };\n };\n};\n\n/**\n * Plugin configuration options (from babel config)\n */\nexport interface PluginConfig {\n /** Log level for the plugin */\n logLevel?: LogLevel;\n /** GT Configuration object — pass the parsed gt.config.json to sync settings */\n gtConfig?: GTConfig;\n /** Enable compile-time hash generation */\n compileTimeHash?: boolean;\n /** Disable dynamic content validation checks */\n disableBuildChecks?: boolean;\n /** Enable macro transform (t`...`, t(`...`), t(\"a\" + b)) */\n enableMacroTransform?: boolean;\n /** Name of the string translation macro function */\n stringTranslationMacro?: string;\n /** Enable Auto Jsx Injection (e.g. <div>Hello</div> -> <div><T>Hello</T></div>) */\n enableAutoJsxInjection?: boolean;\n /** Automatically treat interpolated/concatenated values as derive() calls */\n autoderive?: boolean | { jsx?: boolean; strings?: boolean };\n /** Emit compiler-injected gt-react imports from gt-react/browser */\n legacyGtReactImportSource?: boolean;\n /** Debug: write a hash → jsxChildren manifest file on build */\n _debugHashManifest?: boolean;\n /** Dev hot reload: inject runtime translate calls and enable Suspense-based <T> */\n devHotReload?: boolean | { strings?: boolean; jsx?: boolean };\n}\n\n/**\n * Internal plugin settings (processed config)\n */\nexport interface PluginSettings {\n logLevel: LogLevel;\n compileTimeHash: boolean;\n disableBuildChecks: boolean;\n filename?: string;\n enableMacroTransform: boolean;\n stringTranslationMacro: string;\n enableTaggedTemplate: boolean;\n enableTemplateLiteralArg: boolean;\n enableConcatenationArg: boolean;\n enableMacroImportInjection: boolean;\n /** Enable Auto Jsx Injection (e.g. <div>Hello</div> -> <div><T>Hello</T></div>) */\n enableAutoJsxInjection: boolean;\n /** Automatically treat interpolated/concatenated values as derive() calls */\n autoderive: { jsx: boolean; strings: boolean };\n /** Emit compiler-injected gt-react imports from gt-react/browser */\n legacyGtReactImportSource: boolean;\n /** Debug: write a hash → jsxChildren manifest file on build */\n _debugHashManifest: boolean;\n /** Dev hot reload: inject runtime translate calls and enable Suspense-based <T> */\n devHotReload: { strings: boolean; jsx: boolean };\n}\n\n/**\n * Resolves the autoderive config value into separate jsx and strings flags.\n * - `true` enables both (backward compatible)\n * - `false` disables both (backward compatible)\n * - `{ jsx?: boolean; strings?: boolean }` enables selectively (missing keys default to false)\n */\nexport function resolveAutoderive(\n value: boolean | { jsx?: boolean; strings?: boolean } | undefined\n): { jsx: boolean; strings: boolean } {\n if (value === undefined || typeof value === 'boolean') {\n return { jsx: !!value, strings: !!value };\n }\n return { jsx: value.jsx ?? false, strings: value.strings ?? false };\n}\n\n/**\n * Resolves the devHotReload config value into separate strings and jsx flags.\n * - `true` enables strings only (JSX is handled at runtime via Suspense, no compiler injection needed)\n * - `false` disables both\n * - `{ strings?: boolean; jsx?: boolean }` enables selectively (missing keys default to false)\n */\nexport function resolveDevHotReload(\n value: boolean | { strings?: boolean; jsx?: boolean } | undefined\n): { strings: boolean; jsx: boolean } {\n if (value === undefined || typeof value === 'boolean') {\n return { strings: !!value, jsx: false };\n }\n return { strings: value.strings ?? false, jsx: value.jsx ?? false };\n}\n"],"mappings":";;;;;;;;AAmFA,SAAgB,kBACd,OACoC;AACpC,KAAI,UAAU,KAAA,KAAa,OAAO,UAAU,UAC1C,QAAO;EAAE,KAAK,CAAC,CAAC;EAAO,SAAS,CAAC,CAAC;EAAO;AAE3C,QAAO;EAAE,KAAK,MAAM,OAAO;EAAO,SAAS,MAAM,WAAW;EAAO;;;;;;;;AASrE,SAAgB,oBACd,OACoC;AACpC,KAAI,UAAU,KAAA,KAAa,OAAO,UAAU,UAC1C,QAAO;EAAE,SAAS,CAAC,CAAC;EAAO,KAAK;EAAO;AAEzC,QAAO;EAAE,SAAS,MAAM,WAAW;EAAO,KAAK,MAAM,OAAO;EAAO"}
|
|
@@ -7,7 +7,7 @@ import { TransformState } from '../../state/types';
|
|
|
7
7
|
*
|
|
8
8
|
* Only extracts when:
|
|
9
9
|
* - t is unbound (global macro)
|
|
10
|
-
* - t is imported from gt-react
|
|
10
|
+
* - t is imported from a gt-react entrypoint
|
|
11
11
|
*
|
|
12
12
|
* Does NOT transform the AST — read-only extraction.
|
|
13
13
|
* If the message contains derive() (returns TemplateLiteral), it's skipped.
|
|
@@ -12,7 +12,7 @@ _babel_types = require_runtime.__toESM(_babel_types);
|
|
|
12
12
|
*
|
|
13
13
|
* Only extracts when:
|
|
14
14
|
* - t is unbound (global macro)
|
|
15
|
-
* - t is imported from gt-react
|
|
15
|
+
* - t is imported from a gt-react entrypoint
|
|
16
16
|
*
|
|
17
17
|
* Does NOT transform the AST — read-only extraction.
|
|
18
18
|
* If the message contains derive() (returns TemplateLiteral), it's skipped.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processTaggedTemplateExpression.js","names":["isStringTranslationTaggedTemplate","transformTemplateLiteral","t"],"sources":["../../../src/processing/collection/processTaggedTemplateExpression.ts"],"sourcesContent":["import { VisitNode } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { TransformState } from '../../state/types';\nimport { transformTemplateLiteral } from '../../transform/macro-expansion/transformTemplateLiteral';\nimport { registerStandaloneTranslation } from '../../transform/registration/registerStandaloneTranslation';\nimport { isStringTranslationTaggedTemplate } from '../../utils/parsing/isStringTranslationTaggedTemplate';\n\n/**\n * Process tagged template expressions during the collection pass.\n * Extracts the message for runtime-only entries (t`Hello ${name}`).\n *\n * Only extracts when:\n * - t is unbound (global macro)\n * - t is imported from gt-react
|
|
1
|
+
{"version":3,"file":"processTaggedTemplateExpression.js","names":["isStringTranslationTaggedTemplate","transformTemplateLiteral","t"],"sources":["../../../src/processing/collection/processTaggedTemplateExpression.ts"],"sourcesContent":["import { VisitNode } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { TransformState } from '../../state/types';\nimport { transformTemplateLiteral } from '../../transform/macro-expansion/transformTemplateLiteral';\nimport { registerStandaloneTranslation } from '../../transform/registration/registerStandaloneTranslation';\nimport { isStringTranslationTaggedTemplate } from '../../utils/parsing/isStringTranslationTaggedTemplate';\n\n/**\n * Process tagged template expressions during the collection pass.\n * Extracts the message for runtime-only entries (t`Hello ${name}`).\n *\n * Only extracts when:\n * - t is unbound (global macro)\n * - t is imported from a gt-react entrypoint\n *\n * Does NOT transform the AST — read-only extraction.\n * If the message contains derive() (returns TemplateLiteral), it's skipped.\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 (!isStringTranslationTaggedTemplate(path, symbol)) return;\n\n // Extract message from the template literal (reuse macro expansion utility)\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 if (errors.length > 0 || message == null) {\n state.errorTracker.addErrors(errors);\n return;\n }\n\n // If message is a TemplateLiteral, it contains derive() — skip\n // TODO: remove this check once derive is supported\n if (!t.isStringLiteral(message)) {\n return;\n }\n\n // Register as runtime-only content; tagged templates are not hash-injected.\n registerStandaloneTranslation({\n state,\n content: message.value,\n injectHash: false,\n });\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,SAAgB,gCACd,OAC+C;CAC/C,MAAM,SAAS,MAAM,SAAS;AAE9B,SAAQ,SAAS;;AACf,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;AAC5B,MAAI,OAAO,SAAS,KAAK,WAAW,MAAM;AACxC,SAAM,aAAa,UAAU,OAAO;AACpC;;AAKF,MAAI,CAACC,aAAE,gBAAgB,QAAQ,CAC7B;AAIF,+DAAA,8BAA8B;GAC5B;GACA,SAAS,QAAQ;GACjB,YAAY;GACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processCallExpression.js","names":["isReactJsxFunction","isUserVariableComponent","isUserTranslationComponent","resolveFirstArgGTName","isGTBranchComponent","isGTDeriveComponent","t","BRANCH_CONTROL_PROPS","PLURAL_CONTROL_PROPS"],"sources":["../../../src/processing/jsx-insertion/processCallExpression.ts"],"sourcesContent":["import { VisitNode, NodePath } from '@babel/traverse';\nimport { TransformState } from '../../state/types';\nimport * as t from '@babel/types';\nimport {\n GT_COMPONENT_TYPES,\n BRANCH_CONTROL_PROPS,\n PLURAL_CONTROL_PROPS,\n} from '../../utils/constants/gt/constants';\nimport { OTHER_IDENTIFIERS_ENUM } from '../../utils/constants/other/constants';\nimport { REACT_FUNTIONS } from '../../utils/constants/react/constants';\nimport { isReactJsxFunction } from '../../utils/constants/resolveIdentifier/isReactJsxFunction';\nimport {\n resolveFirstArgGTName,\n isUserTranslationComponent,\n isUserVariableComponent,\n isGTBranchComponent,\n isGTDeriveComponent,\n} from '../../utils/constants/resolveIdentifier/isGTComponent';\nimport { JsxCalleeInfo } from './processImportDeclaration';\n\n/**\n * Extended state for the JSX insertion pass.\n * Bundles the base TransformState with insertion-specific context.\n */\ninterface JsxInsertionState extends TransformState {\n processedNodes: WeakSet<t.Node>;\n calleeInfo: JsxCalleeInfo;\n /** Depth counter: when > 0, we are inside a user Var/Num/Currency/DateTime — skip all transforms */\n insideUserVarDepth: number;\n}\n\n/**\n * Babel visitor entry point for the JSX insertion pass.\n *\n * All internal functions use NodePath-based traversal via .get() so that\n * Babel binding lookups (scope.getBinding) work correctly at every depth.\n * This handles aliased imports like `import { jsxDEV as _jsxDEV }`.\n */\nexport function processCallExpression(\n state: TransformState,\n calleeInfo: JsxCalleeInfo\n): VisitNode<t.Node, t.CallExpression> {\n const jsxState: JsxInsertionState = {\n ...state,\n processedNodes: new WeakSet<t.Node>(),\n calleeInfo,\n insideUserVarDepth: 0,\n };\n\n return {\n enter: (path) => {\n // Check jsx callee first — needed for both user Var detection and processing\n const calleePath = path.get('callee');\n if (\n (!calleePath.isIdentifier() && !calleePath.isMemberExpression()) ||\n !isReactJsxFunction(calleePath)\n ) {\n return;\n }\n\n // Check if this is a user Var/Num/Currency/DateTime — suppress transforms inside.\n // This must happen BEFORE the processedNodes check, because user T's\n // markDescendantJsxCalls may have already added the Var call to processedNodes,\n // but we still need to increment the depth counter so children are suppressed.\n const firstArg = path.get('arguments')[0];\n if (firstArg?.isExpression() && isUserVariableComponent(firstArg)) {\n jsxState.insideUserVarDepth++;\n return;\n }\n\n // Skip all processing when inside a user variable component\n if (jsxState.insideUserVarDepth > 0) return;\n\n if (jsxState.processedNodes.has(path.node)) return;\n\n processJsxNode({ path, insideAutoT: false, state: jsxState });\n },\n exit: (path) => {\n // Decrement depth when exiting a user Var/Num/Currency/DateTime\n const calleePath = path.get('callee');\n if (\n (!calleePath.isIdentifier() && !calleePath.isMemberExpression()) ||\n !isReactJsxFunction(calleePath)\n ) {\n return;\n }\n const firstArg = path.get('arguments')[0];\n if (firstArg?.isExpression() && isUserVariableComponent(firstArg)) {\n jsxState.insideUserVarDepth--;\n }\n },\n };\n}\n\n// ===== Core recursive function =====\n\nfunction processJsxNode({\n path,\n insideAutoT,\n state,\n}: {\n path: NodePath<t.CallExpression>;\n insideAutoT: boolean;\n state: JsxInsertionState;\n}): void {\n state.processedNodes.add(path.node);\n\n const firstArgPath = path.get('arguments')[0];\n if (!firstArgPath?.isExpression()) return;\n\n // User T → mark all descendant jsx calls as processed, hands off\n if (isUserTranslationComponent(firstArgPath)) {\n markDescendantJsxCalls({ jsxCallPath: path, state });\n return;\n }\n\n // User Var/Num/Currency/DateTime → mark descendants, hands off\n if (isUserVariableComponent(firstArgPath)) {\n markDescendantJsxCalls({ jsxCallPath: path, state });\n return;\n }\n\n // Already auto-inserted → skip\n const gtName = resolveFirstArgGTName(firstArgPath);\n if (\n gtName === GT_COMPONENT_TYPES.GtInternalTranslateJsx ||\n gtName === GT_COMPONENT_TYPES.GtInternalVar\n ) {\n return;\n }\n\n // Branch/Plural/Derive/Static → opaque for static JSX, dynamic props get _Var\n if (isGTBranchComponent(firstArgPath) || isGTDeriveComponent(firstArgPath)) {\n // Process props BEFORE wrapping — path still points to the opaque component\n processOpaqueComponentProps({\n jsxCallPath: path,\n insideAutoT: !insideAutoT ? true : insideAutoT,\n state,\n });\n if (!insideAutoT) {\n // Root-level opaque component — wrap in _T (single child → use singleCallee)\n const callee =\n state.calleeInfo.singleCallee ??\n state.calleeInfo.multiCallee ??\n REACT_FUNTIONS.jsx;\n const tWrapped = wrapInT(\n path.node,\n t.identifier(callee),\n state.calleeInfo\n );\n state.processedNodes.add(tWrapped);\n path.replaceWith(tWrapped);\n state.statistics.jsxInsertionsCount++;\n }\n return;\n }\n\n // --- Get children prop path ---\n const childrenPropPath = getChildrenPropPath(path);\n if (!childrenPropPath) return;\n\n const childrenPath = childrenPropPath.get('value');\n if (!childrenPath.isExpression()) return;\n\n // --- Determine if this level should claim T ---\n const shouldClaimT =\n !insideAutoT &&\n (hasNonWhitespaceText(childrenPath) || hasOpaqueGTChild(childrenPath));\n\n if (shouldClaimT) {\n processChildren({ childrenPath, insideAutoT: true, state });\n const currentChildren = childrenPropPath.get('value').node;\n const tCallee = t.isArrayExpression(currentChildren)\n ? state.calleeInfo.multiCallee\n : state.calleeInfo.singleCallee;\n const tWrapped = wrapInT(\n currentChildren as t.Expression,\n t.identifier(tCallee ?? 'jsx'),\n state.calleeInfo\n );\n state.processedNodes.add(tWrapped);\n childrenPropPath.get('value').replaceWith(tWrapped);\n updateCalleeToSingle({ jsxCallPath: path, state });\n state.statistics.jsxInsertionsCount++;\n } else if (insideAutoT) {\n processChildren({ childrenPath, insideAutoT: true, state });\n } else {\n recurseChildJsxCalls({ childrenPath, insideAutoT: false, state });\n }\n}\n\n// ===== Children processing ===== //\n\nfunction processChildren({\n childrenPath,\n insideAutoT,\n state,\n}: {\n childrenPath: NodePath<t.Expression>;\n insideAutoT: boolean;\n state: JsxInsertionState;\n}): void {\n if (childrenPath.isArrayExpression()) {\n for (const elPath of childrenPath.get('elements')) {\n if (elPath.isExpression()) {\n processSingleChild({ childPath: elPath, insideAutoT, state });\n }\n }\n return;\n }\n processSingleChild({ childPath: childrenPath, insideAutoT, state });\n}\n\nfunction processSingleChild({\n childPath,\n insideAutoT,\n state,\n}: {\n childPath: NodePath<t.Expression>;\n insideAutoT: boolean;\n state: JsxInsertionState;\n}): void {\n if (childPath.isCallExpression() && isJsxCallPath(childPath)) {\n processJsxNode({ path: childPath, insideAutoT, state });\n return;\n }\n\n // _Var always has a single child → use singleCallee\n if (insideAutoT && needsVarWrapping(childPath)) {\n const callee = state.calleeInfo.singleCallee ?? REACT_FUNTIONS.jsx;\n const wrapped = wrapInVar(\n childPath.node,\n t.identifier(callee),\n state.calleeInfo\n );\n state.processedNodes.add(wrapped);\n childPath.replaceWith(wrapped);\n }\n}\n\nfunction recurseChildJsxCalls({\n childrenPath,\n insideAutoT,\n state,\n}: {\n childrenPath: NodePath<t.Expression>;\n insideAutoT: boolean;\n state: JsxInsertionState;\n}): void {\n if (childrenPath.isArrayExpression()) {\n for (const elPath of childrenPath.get('elements')) {\n if (elPath.isCallExpression() && isJsxCallPath(elPath)) {\n processJsxNode({ path: elPath, insideAutoT, state });\n }\n }\n } else if (childrenPath.isCallExpression() && isJsxCallPath(childrenPath)) {\n processJsxNode({ path: childrenPath, insideAutoT, state });\n }\n}\n\n// ===== Helper functions =====\n\nfunction getChildrenPropPath(\n jsxCallPath: NodePath<t.CallExpression>\n): NodePath<t.ObjectProperty> | undefined {\n const args = jsxCallPath.get('arguments');\n const propsArg = args[1];\n if (!propsArg?.isObjectExpression()) return undefined;\n\n for (const propPath of propsArg.get('properties')) {\n if (\n propPath.isObjectProperty() &&\n t.isIdentifier(propPath.node.key, { name: 'children' })\n ) {\n return propPath;\n }\n }\n return undefined;\n}\n\nfunction isJsxCallPath(callPath: NodePath<t.CallExpression>): boolean {\n const callee = callPath.get('callee');\n if (!callee.isIdentifier() && !callee.isMemberExpression()) return false;\n return isReactJsxFunction(callee);\n}\n\nfunction hasNonWhitespaceText(childrenPath: NodePath<t.Expression>): boolean {\n const isText = (p: NodePath): boolean => {\n if (p.isStringLiteral()) return p.node.value.trim().length > 0;\n if (p.isTemplateLiteral()) {\n return (\n p.node.expressions.length === 0 &&\n (p.node.quasis[0]?.value.cooked ?? '').trim().length > 0\n );\n }\n return false;\n };\n\n if (childrenPath.isArrayExpression()) {\n return childrenPath\n .get('elements')\n .some((el) => el.isExpression() && isText(el));\n }\n return isText(childrenPath);\n}\n\nfunction hasOpaqueGTChild(childrenPath: NodePath<t.Expression>): boolean {\n const isOpaque = (elPath: NodePath): boolean => {\n if (!elPath.isCallExpression() || !isJsxCallPath(elPath)) return false;\n const firstArg = elPath.get('arguments')[0];\n if (!firstArg?.isExpression()) return false;\n return isGTBranchComponent(firstArg) || isGTDeriveComponent(firstArg);\n };\n\n if (childrenPath.isArrayExpression()) {\n return childrenPath\n .get('elements')\n .some((el) => el.isExpression() && isOpaque(el));\n }\n return isOpaque(childrenPath);\n}\n\nfunction needsVarWrapping(exprPath: NodePath<t.Expression>): boolean {\n if (exprPath.isStringLiteral()) return false;\n if (exprPath.isNumericLiteral()) return false;\n if (exprPath.isBooleanLiteral()) return false;\n if (exprPath.isNullLiteral()) return false;\n if (exprPath.isTemplateLiteral() && exprPath.node.expressions.length === 0) {\n return false;\n }\n if (\n exprPath.isUnaryExpression() &&\n exprPath.node.operator === '-' &&\n t.isNumericLiteral(exprPath.node.argument)\n ) {\n return false;\n }\n if (exprPath.isIdentifier()) {\n return ![\n OTHER_IDENTIFIERS_ENUM.UNDEFINED,\n OTHER_IDENTIFIERS_ENUM.NAN,\n OTHER_IDENTIFIERS_ENUM.INFINITY,\n ].includes(exprPath.node.name as OTHER_IDENTIFIERS_ENUM);\n }\n if (exprPath.isCallExpression() && isJsxCallPath(exprPath)) {\n return false;\n }\n return true;\n}\n\n/**\n * After wrapping children in _T, the parent now has a single child.\n * Update its callee from jsxs → jsx if needed.\n */\nfunction updateCalleeToSingle({\n jsxCallPath,\n state,\n}: {\n jsxCallPath: NodePath<t.CallExpression>;\n state: JsxInsertionState;\n}): void {\n const { singleCallee, multiCallee } = state.calleeInfo;\n\n // Production (jsx/jsxs): update callee name jsxs → jsx\n if (singleCallee && multiCallee && singleCallee !== multiCallee) {\n const callee = jsxCallPath.get('callee');\n if (callee.isIdentifier() && callee.node.name === multiCallee) {\n callee.node.name = singleCallee;\n }\n }\n\n // Dev (jsxDEV): update isStaticChildren (4th arg, index 3) to false\n const args = jsxCallPath.get('arguments');\n const isStaticArg = args[3];\n if (isStaticArg?.isBooleanLiteral({ value: true })) {\n isStaticArg.replaceWith(t.booleanLiteral(false));\n }\n}\n\n// ===== AST construction =====\n\nfunction wrapInVar(\n expr: t.Expression,\n callee: t.Expression,\n calleeInfo: JsxCalleeInfo\n): t.CallExpression {\n const args: t.Expression[] = [\n t.identifier(GT_COMPONENT_TYPES.GtInternalVar),\n t.objectExpression([t.objectProperty(t.identifier('children'), expr)]),\n ];\n if (isDevMode(calleeInfo)) {\n args.push(\n t.unaryExpression('void', t.numericLiteral(0)),\n t.booleanLiteral(false)\n );\n }\n return t.callExpression(t.cloneNode(callee), args);\n}\n\nfunction wrapInT(\n children: t.Expression,\n callee: t.Expression,\n calleeInfo: JsxCalleeInfo\n): t.CallExpression {\n const args: t.Expression[] = [\n t.identifier(GT_COMPONENT_TYPES.GtInternalTranslateJsx),\n t.objectExpression([t.objectProperty(t.identifier('children'), children)]),\n ];\n if (isDevMode(calleeInfo)) {\n args.push(\n t.unaryExpression('void', t.numericLiteral(0)),\n t.booleanLiteral(t.isArrayExpression(children))\n );\n }\n return t.callExpression(t.cloneNode(callee), args);\n}\n\nfunction isDevMode(calleeInfo: JsxCalleeInfo): boolean {\n return (\n calleeInfo.singleCallee != null &&\n calleeInfo.singleCallee === calleeInfo.multiCallee\n );\n}\n\n// ===== Marking descendants as processed =====\n\nfunction markDescendantJsxCalls({\n jsxCallPath,\n state,\n}: {\n jsxCallPath: NodePath<t.CallExpression>;\n state: JsxInsertionState;\n}): void {\n const childrenPropPath = getChildrenPropPath(jsxCallPath);\n if (!childrenPropPath) return;\n const valuePath = childrenPropPath.get('value');\n if (valuePath.isExpression()) {\n walkAndMark({ exprPath: valuePath, state });\n }\n}\n\nfunction processOpaqueComponentProps({\n jsxCallPath,\n insideAutoT,\n state,\n}: {\n jsxCallPath: NodePath<t.CallExpression>;\n insideAutoT: boolean;\n state: JsxInsertionState;\n}): void {\n const args = jsxCallPath.get('arguments');\n const propsArg = args[1];\n if (!propsArg?.isObjectExpression()) return;\n\n // Resolve component type to filter control props\n const firstArgPath = args[0];\n const gtName = firstArgPath?.isExpression()\n ? resolveFirstArgGTName(firstArgPath)\n : null;\n\n for (const propPath of propsArg.get('properties')) {\n if (!propPath.isObjectProperty()) continue;\n\n // Determine prop name and skip control props\n const key = propPath.node.key;\n const propName = t.isIdentifier(key)\n ? key.name\n : t.isStringLiteral(key)\n ? key.value\n : null;\n if (isControlProp(gtName, propName)) continue;\n\n const valuePath = propPath.get('value');\n if (!valuePath.isExpression()) continue;\n\n // children is fallback content for Branch/Plural — process element-by-element\n // For Derive/Static, children is opaque — skip entirely\n if (propName === 'children') {\n if (\n insideAutoT &&\n (gtName === GT_COMPONENT_TYPES.Branch ||\n gtName === GT_COMPONENT_TYPES.Plural)\n ) {\n processChildren({ childrenPath: valuePath, insideAutoT: true, state });\n }\n continue;\n }\n\n if (valuePath.isCallExpression() && isJsxCallPath(valuePath)) {\n // Content prop with JSX value — recurse into children for Var-wrapping\n if (insideAutoT) {\n const childrenPropPath = getChildrenPropPath(valuePath);\n if (childrenPropPath) {\n const childrenPath = childrenPropPath.get('value');\n if (childrenPath.isExpression()) {\n processChildren({ childrenPath, insideAutoT: true, state });\n }\n }\n }\n state.processedNodes.add(valuePath.node);\n walkAndMark({ exprPath: valuePath, state });\n } else if (insideAutoT && needsVarWrapping(valuePath)) {\n const callee = state.calleeInfo.singleCallee ?? REACT_FUNTIONS.jsx;\n const wrapped = wrapInVar(\n valuePath.node,\n t.identifier(callee),\n state.calleeInfo\n );\n state.processedNodes.add(wrapped);\n valuePath.replaceWith(wrapped);\n }\n }\n}\n\nfunction isControlProp(\n gtName: string | null,\n propName: string | null\n): boolean {\n if (!propName) return false;\n if (gtName === GT_COMPONENT_TYPES.Branch) {\n return BRANCH_CONTROL_PROPS.has(propName) || propName.startsWith('data-');\n }\n if (gtName === GT_COMPONENT_TYPES.Plural) {\n return PLURAL_CONTROL_PROPS.has(propName);\n }\n return false;\n}\n\nfunction walkAndMark({\n exprPath,\n state,\n}: {\n exprPath: NodePath<t.Expression>;\n state: JsxInsertionState;\n}): void {\n if (exprPath.isCallExpression() && isJsxCallPath(exprPath)) {\n state.processedNodes.add(exprPath.node);\n const childrenPropPath = getChildrenPropPath(exprPath);\n if (childrenPropPath) {\n const valuePath = childrenPropPath.get('value');\n if (valuePath.isExpression()) {\n walkAndMark({ exprPath: valuePath, state });\n }\n }\n } else if (exprPath.isArrayExpression()) {\n for (const elPath of exprPath.get('elements')) {\n if (elPath.isExpression()) {\n walkAndMark({ exprPath: elPath, state });\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"processCallExpression.js","names":["isReactJsxFunction","isUserVariableComponent","isUserTranslationComponent","resolveFirstArgGTName","isGTBranchComponent","isGTDeriveComponent","t","BRANCH_CONTROL_PROPS","PLURAL_CONTROL_PROPS"],"sources":["../../../src/processing/jsx-insertion/processCallExpression.ts"],"sourcesContent":["import { VisitNode, NodePath } from '@babel/traverse';\nimport { TransformState } from '../../state/types';\nimport * as t from '@babel/types';\nimport {\n GT_COMPONENT_TYPES,\n BRANCH_CONTROL_PROPS,\n PLURAL_CONTROL_PROPS,\n} from '../../utils/constants/gt/constants';\nimport { OTHER_IDENTIFIERS_ENUM } from '../../utils/constants/other/constants';\nimport { REACT_FUNTIONS } from '../../utils/constants/react/constants';\nimport { isReactJsxFunction } from '../../utils/constants/resolveIdentifier/isReactJsxFunction';\nimport {\n resolveFirstArgGTName,\n isUserTranslationComponent,\n isUserVariableComponent,\n isGTBranchComponent,\n isGTDeriveComponent,\n} from '../../utils/constants/resolveIdentifier/isGTComponent';\nimport { JsxCalleeInfo } from './processImportDeclaration';\n\n/**\n * Extended state for the JSX insertion pass.\n * Bundles the base TransformState with insertion-specific context.\n */\ninterface JsxInsertionState extends TransformState {\n processedNodes: WeakSet<t.Node>;\n calleeInfo: JsxCalleeInfo;\n /** Depth counter: when > 0, we are inside a user Var/Num/Currency/DateTime — skip all transforms */\n insideUserVarDepth: number;\n}\n\n/**\n * Babel visitor entry point for the JSX insertion pass.\n *\n * All internal functions use NodePath-based traversal via .get() so that\n * Babel binding lookups (scope.getBinding) work correctly at every depth.\n * This handles aliased imports like `import { jsxDEV as _jsxDEV }`.\n */\nexport function processCallExpression(\n state: TransformState,\n calleeInfo: JsxCalleeInfo\n): VisitNode<t.Node, t.CallExpression> {\n const jsxState: JsxInsertionState = {\n ...state,\n processedNodes: new WeakSet<t.Node>(),\n calleeInfo,\n insideUserVarDepth: 0,\n };\n\n return {\n enter: (path) => {\n // Check jsx callee first — needed for both user Var detection and processing\n const calleePath = path.get('callee');\n if (\n (!calleePath.isIdentifier() && !calleePath.isMemberExpression()) ||\n !isReactJsxFunction(calleePath)\n ) {\n return;\n }\n\n // Check if this is a user Var/Num/Currency/DateTime — suppress transforms inside.\n // This must happen BEFORE the processedNodes check, because user T's\n // markDescendantJsxCalls may have already added the Var call to processedNodes,\n // but we still need to increment the depth counter so children are suppressed.\n const firstArg = path.get('arguments')[0];\n if (firstArg?.isExpression() && isUserVariableComponent(firstArg)) {\n jsxState.insideUserVarDepth++;\n return;\n }\n\n // Skip all processing when inside a user variable component\n if (jsxState.insideUserVarDepth > 0) return;\n\n if (jsxState.processedNodes.has(path.node)) return;\n\n processJsxNode({ path, insideAutoT: false, state: jsxState });\n },\n exit: (path) => {\n // Decrement depth when exiting a user Var/Num/Currency/DateTime\n const calleePath = path.get('callee');\n if (\n (!calleePath.isIdentifier() && !calleePath.isMemberExpression()) ||\n !isReactJsxFunction(calleePath)\n ) {\n return;\n }\n const firstArg = path.get('arguments')[0];\n if (firstArg?.isExpression() && isUserVariableComponent(firstArg)) {\n jsxState.insideUserVarDepth--;\n }\n },\n };\n}\n\n// ===== Core recursive function =====\n\nfunction processJsxNode({\n path,\n insideAutoT,\n state,\n}: {\n path: NodePath<t.CallExpression>;\n insideAutoT: boolean;\n state: JsxInsertionState;\n}): void {\n state.processedNodes.add(path.node);\n\n const firstArgPath = path.get('arguments')[0];\n if (!firstArgPath?.isExpression()) return;\n\n // User T → mark all descendant jsx calls as processed, hands off\n if (isUserTranslationComponent(firstArgPath)) {\n markDescendantJsxCalls({ jsxCallPath: path, state });\n return;\n }\n\n // User Var/Num/Currency/DateTime → mark descendants, hands off\n if (isUserVariableComponent(firstArgPath)) {\n markDescendantJsxCalls({ jsxCallPath: path, state });\n return;\n }\n\n // Already auto-inserted → skip\n const gtName = resolveFirstArgGTName(firstArgPath);\n if (\n gtName === GT_COMPONENT_TYPES.GtInternalTranslateJsx ||\n gtName === GT_COMPONENT_TYPES.GtInternalVar\n ) {\n return;\n }\n\n // Branch/Plural/Derive → opaque for static JSX, dynamic props get _Var\n if (isGTBranchComponent(firstArgPath) || isGTDeriveComponent(firstArgPath)) {\n // Process props BEFORE wrapping — path still points to the opaque component\n processOpaqueComponentProps({\n jsxCallPath: path,\n insideAutoT: !insideAutoT ? true : insideAutoT,\n state,\n });\n if (!insideAutoT) {\n // Root-level opaque component — wrap in _T (single child → use singleCallee)\n const callee =\n state.calleeInfo.singleCallee ??\n state.calleeInfo.multiCallee ??\n REACT_FUNTIONS.jsx;\n const tWrapped = wrapInT(\n path.node,\n t.identifier(callee),\n state.calleeInfo\n );\n state.processedNodes.add(tWrapped);\n path.replaceWith(tWrapped);\n state.statistics.jsxInsertionsCount++;\n }\n return;\n }\n\n // --- Get children prop path ---\n const childrenPropPath = getChildrenPropPath(path);\n if (!childrenPropPath) return;\n\n const childrenPath = childrenPropPath.get('value');\n if (!childrenPath.isExpression()) return;\n\n // --- Determine if this level should claim T ---\n const shouldClaimT =\n !insideAutoT &&\n (hasNonWhitespaceText(childrenPath) || hasOpaqueGTChild(childrenPath));\n\n if (shouldClaimT) {\n processChildren({ childrenPath, insideAutoT: true, state });\n const currentChildren = childrenPropPath.get('value').node;\n const tCallee = t.isArrayExpression(currentChildren)\n ? state.calleeInfo.multiCallee\n : state.calleeInfo.singleCallee;\n const tWrapped = wrapInT(\n currentChildren as t.Expression,\n t.identifier(tCallee ?? 'jsx'),\n state.calleeInfo\n );\n state.processedNodes.add(tWrapped);\n childrenPropPath.get('value').replaceWith(tWrapped);\n updateCalleeToSingle({ jsxCallPath: path, state });\n state.statistics.jsxInsertionsCount++;\n } else if (insideAutoT) {\n processChildren({ childrenPath, insideAutoT: true, state });\n } else {\n recurseChildJsxCalls({ childrenPath, insideAutoT: false, state });\n }\n}\n\n// ===== Children processing ===== //\n\nfunction processChildren({\n childrenPath,\n insideAutoT,\n state,\n}: {\n childrenPath: NodePath<t.Expression>;\n insideAutoT: boolean;\n state: JsxInsertionState;\n}): void {\n if (childrenPath.isArrayExpression()) {\n for (const elPath of childrenPath.get('elements')) {\n if (elPath.isExpression()) {\n processSingleChild({ childPath: elPath, insideAutoT, state });\n }\n }\n return;\n }\n processSingleChild({ childPath: childrenPath, insideAutoT, state });\n}\n\nfunction processSingleChild({\n childPath,\n insideAutoT,\n state,\n}: {\n childPath: NodePath<t.Expression>;\n insideAutoT: boolean;\n state: JsxInsertionState;\n}): void {\n if (childPath.isCallExpression() && isJsxCallPath(childPath)) {\n processJsxNode({ path: childPath, insideAutoT, state });\n return;\n }\n\n // _Var always has a single child → use singleCallee\n if (insideAutoT && needsVarWrapping(childPath)) {\n const callee = state.calleeInfo.singleCallee ?? REACT_FUNTIONS.jsx;\n const wrapped = wrapInVar(\n childPath.node,\n t.identifier(callee),\n state.calleeInfo\n );\n state.processedNodes.add(wrapped);\n childPath.replaceWith(wrapped);\n }\n}\n\nfunction recurseChildJsxCalls({\n childrenPath,\n insideAutoT,\n state,\n}: {\n childrenPath: NodePath<t.Expression>;\n insideAutoT: boolean;\n state: JsxInsertionState;\n}): void {\n if (childrenPath.isArrayExpression()) {\n for (const elPath of childrenPath.get('elements')) {\n if (elPath.isCallExpression() && isJsxCallPath(elPath)) {\n processJsxNode({ path: elPath, insideAutoT, state });\n }\n }\n } else if (childrenPath.isCallExpression() && isJsxCallPath(childrenPath)) {\n processJsxNode({ path: childrenPath, insideAutoT, state });\n }\n}\n\n// ===== Helper functions =====\n\nfunction getChildrenPropPath(\n jsxCallPath: NodePath<t.CallExpression>\n): NodePath<t.ObjectProperty> | undefined {\n const args = jsxCallPath.get('arguments');\n const propsArg = args[1];\n if (!propsArg?.isObjectExpression()) return undefined;\n\n for (const propPath of propsArg.get('properties')) {\n if (\n propPath.isObjectProperty() &&\n t.isIdentifier(propPath.node.key, { name: 'children' })\n ) {\n return propPath;\n }\n }\n return undefined;\n}\n\nfunction isJsxCallPath(callPath: NodePath<t.CallExpression>): boolean {\n const callee = callPath.get('callee');\n if (!callee.isIdentifier() && !callee.isMemberExpression()) return false;\n return isReactJsxFunction(callee);\n}\n\nfunction hasNonWhitespaceText(childrenPath: NodePath<t.Expression>): boolean {\n const isText = (p: NodePath): boolean => {\n if (p.isStringLiteral()) return p.node.value.trim().length > 0;\n if (p.isTemplateLiteral()) {\n return (\n p.node.expressions.length === 0 &&\n (p.node.quasis[0]?.value.cooked ?? '').trim().length > 0\n );\n }\n return false;\n };\n\n if (childrenPath.isArrayExpression()) {\n return childrenPath\n .get('elements')\n .some((el) => el.isExpression() && isText(el));\n }\n return isText(childrenPath);\n}\n\nfunction hasOpaqueGTChild(childrenPath: NodePath<t.Expression>): boolean {\n const isOpaque = (elPath: NodePath): boolean => {\n if (!elPath.isCallExpression() || !isJsxCallPath(elPath)) return false;\n const firstArg = elPath.get('arguments')[0];\n if (!firstArg?.isExpression()) return false;\n return isGTBranchComponent(firstArg) || isGTDeriveComponent(firstArg);\n };\n\n if (childrenPath.isArrayExpression()) {\n return childrenPath\n .get('elements')\n .some((el) => el.isExpression() && isOpaque(el));\n }\n return isOpaque(childrenPath);\n}\n\nfunction needsVarWrapping(exprPath: NodePath<t.Expression>): boolean {\n if (exprPath.isStringLiteral()) return false;\n if (exprPath.isNumericLiteral()) return false;\n if (exprPath.isBooleanLiteral()) return false;\n if (exprPath.isNullLiteral()) return false;\n if (exprPath.isTemplateLiteral() && exprPath.node.expressions.length === 0) {\n return false;\n }\n if (\n exprPath.isUnaryExpression() &&\n exprPath.node.operator === '-' &&\n t.isNumericLiteral(exprPath.node.argument)\n ) {\n return false;\n }\n if (exprPath.isIdentifier()) {\n return ![\n OTHER_IDENTIFIERS_ENUM.UNDEFINED,\n OTHER_IDENTIFIERS_ENUM.NAN,\n OTHER_IDENTIFIERS_ENUM.INFINITY,\n ].includes(exprPath.node.name as OTHER_IDENTIFIERS_ENUM);\n }\n if (exprPath.isCallExpression() && isJsxCallPath(exprPath)) {\n return false;\n }\n return true;\n}\n\n/**\n * After wrapping children in _T, the parent now has a single child.\n * Update its callee from jsxs → jsx if needed.\n */\nfunction updateCalleeToSingle({\n jsxCallPath,\n state,\n}: {\n jsxCallPath: NodePath<t.CallExpression>;\n state: JsxInsertionState;\n}): void {\n const { singleCallee, multiCallee } = state.calleeInfo;\n\n // Production (jsx/jsxs): update callee name jsxs → jsx\n if (singleCallee && multiCallee && singleCallee !== multiCallee) {\n const callee = jsxCallPath.get('callee');\n if (callee.isIdentifier() && callee.node.name === multiCallee) {\n callee.node.name = singleCallee;\n }\n }\n\n // Dev (jsxDEV): update isStaticChildren (4th arg, index 3) to false\n const args = jsxCallPath.get('arguments');\n const isStaticArg = args[3];\n if (isStaticArg?.isBooleanLiteral({ value: true })) {\n isStaticArg.replaceWith(t.booleanLiteral(false));\n }\n}\n\n// ===== AST construction =====\n\nfunction wrapInVar(\n expr: t.Expression,\n callee: t.Expression,\n calleeInfo: JsxCalleeInfo\n): t.CallExpression {\n const args: t.Expression[] = [\n t.identifier(GT_COMPONENT_TYPES.GtInternalVar),\n t.objectExpression([t.objectProperty(t.identifier('children'), expr)]),\n ];\n if (isDevMode(calleeInfo)) {\n args.push(\n t.unaryExpression('void', t.numericLiteral(0)),\n t.booleanLiteral(false)\n );\n }\n return t.callExpression(t.cloneNode(callee), args);\n}\n\nfunction wrapInT(\n children: t.Expression,\n callee: t.Expression,\n calleeInfo: JsxCalleeInfo\n): t.CallExpression {\n const args: t.Expression[] = [\n t.identifier(GT_COMPONENT_TYPES.GtInternalTranslateJsx),\n t.objectExpression([t.objectProperty(t.identifier('children'), children)]),\n ];\n if (isDevMode(calleeInfo)) {\n args.push(\n t.unaryExpression('void', t.numericLiteral(0)),\n t.booleanLiteral(t.isArrayExpression(children))\n );\n }\n return t.callExpression(t.cloneNode(callee), args);\n}\n\nfunction isDevMode(calleeInfo: JsxCalleeInfo): boolean {\n return (\n calleeInfo.singleCallee != null &&\n calleeInfo.singleCallee === calleeInfo.multiCallee\n );\n}\n\n// ===== Marking descendants as processed =====\n\nfunction markDescendantJsxCalls({\n jsxCallPath,\n state,\n}: {\n jsxCallPath: NodePath<t.CallExpression>;\n state: JsxInsertionState;\n}): void {\n const childrenPropPath = getChildrenPropPath(jsxCallPath);\n if (!childrenPropPath) return;\n const valuePath = childrenPropPath.get('value');\n if (valuePath.isExpression()) {\n walkAndMark({ exprPath: valuePath, state });\n }\n}\n\nfunction processOpaqueComponentProps({\n jsxCallPath,\n insideAutoT,\n state,\n}: {\n jsxCallPath: NodePath<t.CallExpression>;\n insideAutoT: boolean;\n state: JsxInsertionState;\n}): void {\n const args = jsxCallPath.get('arguments');\n const propsArg = args[1];\n if (!propsArg?.isObjectExpression()) return;\n\n // Resolve component type to filter control props\n const firstArgPath = args[0];\n const gtName = firstArgPath?.isExpression()\n ? resolveFirstArgGTName(firstArgPath)\n : null;\n\n for (const propPath of propsArg.get('properties')) {\n if (!propPath.isObjectProperty()) continue;\n\n // Determine prop name and skip control props\n const key = propPath.node.key;\n const propName = t.isIdentifier(key)\n ? key.name\n : t.isStringLiteral(key)\n ? key.value\n : null;\n if (isControlProp(gtName, propName)) continue;\n\n const valuePath = propPath.get('value');\n if (!valuePath.isExpression()) continue;\n\n // children is fallback content for Branch/Plural — process element-by-element\n // For Derive, children is opaque — skip entirely\n if (propName === 'children') {\n if (\n insideAutoT &&\n (gtName === GT_COMPONENT_TYPES.Branch ||\n gtName === GT_COMPONENT_TYPES.Plural)\n ) {\n processChildren({ childrenPath: valuePath, insideAutoT: true, state });\n }\n continue;\n }\n\n if (valuePath.isCallExpression() && isJsxCallPath(valuePath)) {\n // Content prop with JSX value — recurse into children for Var-wrapping\n if (insideAutoT) {\n const childrenPropPath = getChildrenPropPath(valuePath);\n if (childrenPropPath) {\n const childrenPath = childrenPropPath.get('value');\n if (childrenPath.isExpression()) {\n processChildren({ childrenPath, insideAutoT: true, state });\n }\n }\n }\n state.processedNodes.add(valuePath.node);\n walkAndMark({ exprPath: valuePath, state });\n } else if (insideAutoT && needsVarWrapping(valuePath)) {\n const callee = state.calleeInfo.singleCallee ?? REACT_FUNTIONS.jsx;\n const wrapped = wrapInVar(\n valuePath.node,\n t.identifier(callee),\n state.calleeInfo\n );\n state.processedNodes.add(wrapped);\n valuePath.replaceWith(wrapped);\n }\n }\n}\n\nfunction isControlProp(\n gtName: string | null,\n propName: string | null\n): boolean {\n if (!propName) return false;\n if (gtName === GT_COMPONENT_TYPES.Branch) {\n return BRANCH_CONTROL_PROPS.has(propName) || propName.startsWith('data-');\n }\n if (gtName === GT_COMPONENT_TYPES.Plural) {\n return PLURAL_CONTROL_PROPS.has(propName);\n }\n return false;\n}\n\nfunction walkAndMark({\n exprPath,\n state,\n}: {\n exprPath: NodePath<t.Expression>;\n state: JsxInsertionState;\n}): void {\n if (exprPath.isCallExpression() && isJsxCallPath(exprPath)) {\n state.processedNodes.add(exprPath.node);\n const childrenPropPath = getChildrenPropPath(exprPath);\n if (childrenPropPath) {\n const valuePath = childrenPropPath.get('value');\n if (valuePath.isExpression()) {\n walkAndMark({ exprPath: valuePath, state });\n }\n }\n } else if (exprPath.isArrayExpression()) {\n for (const elPath of exprPath.get('elements')) {\n if (elPath.isExpression()) {\n walkAndMark({ exprPath: elPath, state });\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processProgram.d.ts","sourceRoot":"","sources":["../../../src/processing/jsx-insertion/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;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAI3D;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,WAAW,EACX,iBAAiB,EACjB,UAAU,GACX,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,OAAO,CAAC;IACjC,UAAU,EAAE,aAAa,CAAC;CAC3B,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"processProgram.d.ts","sourceRoot":"","sources":["../../../src/processing/jsx-insertion/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;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAI3D;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,WAAW,EACX,iBAAiB,EACjB,UAAU,GACX,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,OAAO,CAAC;IACjC,UAAU,EAAE,aAAa,CAAC;CAC3B,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CA8B/B"}
|
|
@@ -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,
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
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 +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,
|
|
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;
|
|
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"}
|
|
@@ -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;
|
|
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;AA6B1C;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,MAAM,GACf,cAAc,CAsDhB"}
|
|
@@ -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) ??
|
|
39
|
-
const
|
|
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,
|
|
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
|
|
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 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;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,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"}
|
|
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DA,SAAgB,qBACd,cACA,OACA,KAAe,IAAIA,wCAAAA,UAAU,EAC0B;CACvD,MAAM,SAA+B,EAAE;AAGvC,KAAI,CAAC,aACH,QAAO;EAAE;EAAQ,OAAO;EAAc;CAGxC,MAAM,WAAW,aAAa;CAC9B,IAAI;AACJ,KAAIC,aAAE,kBAAkB,SAAS,EAAE;AAEjC,UAAQ,EAAE;EACV,MAAM,eAAe,aAAa,IAAI,WAAW;AAEjD,OAAK,IAAI,IAAI,GAAG,IAAI,SAAS,SAAS,QAAQ,KAAK;GACjD,MAAM,QAAQ,SAAS,SAAS;AAEhC,OAAI,CAACC,kEAAAA,wBAAwB,MAAM,EAAE;AACnC,WAAO,KACLC,sCAAAA,oBACEC,qBAAAA,oCAAoC,IACjC,SAASC,qBAAAA,oBAAoB,MAAM,EACvC,CACF;AACD,WAAO,EAAE,QAAQ;;AAInB,OAAIJ,aAAE,iBAAiB,MAAM,IAAIA,aAAE,cAAc,MAAM,CACrD;GAIF,MAAM,YAAY,aAAa;GAG/B,MAAM,aAAa,kBAAkB,WAAW,OAAO,GAAG;AAC1D,UAAO,KAAK,GAAG,WAAW,OAAO;AACjC,OAAI,OAAO,SAAS,EAClB,QAAO,EAAE,QAAQ;AAGnB,OAAI,WAAW,UAAU,KAAA,EAAW;AACnC,SAAqB,KAAK,WAAW,MAAM;;QAEzC;EAEL,MAAM,aAAa,kBACjB,cACA,OACA,GACD;AACD,SAAO,KAAK,GAAG,WAAW,OAAO;AACjC,MAAI,OAAO,SAAS,EAClB,QAAO,EAAE,QAAQ;AAEnB,UAAQ,WAAW;;AAGrB,QAAO;EAAE;EAAQ;EAAO;;;;;;AAO1B,SAAS,kBACP,WACA,OACA,IACoD;CACpD,MAAM,SAA+B,EAAE;CACvC,MAAM,QAAQ,UAAU;CACxB,IAAI;AAEJ,KAAIA,aAAE,iBAAiB,MAAM,EAAE;EAE7B,MAAM,aAAa,oBACjB,WACA,OACA,GACD;AACD,SAAO,KAAK,GAAG,WAAW,OAAO;AACjC,MAAI,OAAO,SAAS,EAClB,QAAO,EAAE,QAAQ;AAEnB,UAAQ,WAAW;YACVA,aAAE,gBAAgB,MAAM,CACjC,SAAQ,MAAM;UACLA,aAAE,kBAAkB,MAAM,EAAE;EACrC,MAAM,aAAaK,kEAAAA,wBAAwB,MAAM;AACjD,SAAO,KAAK,GAAG,WAAW,OAAO,KAAK,QAAQH,sCAAAA,oBAAoB,IAAI,CAAC,CAAC;AACxE,MAAI,OAAO,SAAS,EAClB,QAAO,EAAE,QAAQ;AAEnB,UAAQ,WAAW;YACVF,aAAE,iBAAiB,MAAM,CAClC,SAAQ,MAAM,MAAM,UAAU;UACrBA,aAAE,iBAAiB,MAAM,CAClC,SAAQ,MAAM;UACLA,aAAE,cAAc,MAAM,CAC/B,SAAQ;UACCA,aAAE,kBAAkB,MAAM,EAAE;EACrC,MAAM,aAAaM,kEAAAA,wBAAwB,MAAM;AACjD,SAAO,KAAK,GAAG,WAAW,OAAO,KAAK,QAAQC,sCAAAA,gBAAgB,IAAI,CAAC,CAAC;AACpE,MAAI,OAAO,SAAS,EAClB,QAAO,EAAE,QAAQ;AAEnB,UAAQ,WAAW;YACVP,aAAE,aAAa,MAAM,EAAE;EAEhC,MAAM,aAAaQ,6DAAAA,mBAAmB,OAAO,MAAM;AACnD,SAAO,KAAK,GAAG,WAAW,OAAO,KAAK,QAAQN,sCAAAA,oBAAoB,IAAI,CAAC,CAAC;AACxE,MAAI,OAAO,SAAS,EAClB,QAAO,EAAE,QAAQ;AAEnB,UAAQ,WAAW;QACd;AAEL,SAAO,KACLA,sCAAAA,oBACEC,qBAAAA,oCAAoC,GAAGC,qBAAAA,oBAAoB,MAAM,CAClE,CACF;AACD,SAAO,EAAE,QAAQ;;AAGnB,QAAO;EAAE;EAAQ;EAAO;;;;;;AAO1B,SAAS,oBACP,cACA,OACA,IACiE;CACjE,MAAM,SAA+B,EAAE;CACvC,MAAM,WAAW,aAAa;CAG9B,MAAM,gBAAgBK,0DAAAA,gBAAgB,UAAU,MAAM;AACtD,QAAO,KAAK,GAAG,cAAc,KAAK,QAAQP,sCAAAA,oBAAoB,IAAI,CAAC,CAAC;AACpE,KAAI,cAAc,SAAS,EACzB,QAAO,EAAE,QAAQ;AAInB,IAAG,WAAW;AAGd,KAAI,SAAS,UAAU,WAAW,EAChC,QAAO,EAAE,QAAQ;CAEnB,MAAM,WAAW,SAAS,UAAU;AACpC,KAAI,CAACF,aAAE,aAAa,SAAS,EAAE;AAC7B,SAAO,KACLO,sCAAAA,gBACE,yEACEH,qBAAAA,oBAAoB,SAAS,UAAU,GAAG,CAC7C,CACF;AACD,SAAO,EAAE,QAAQ;;CAInB,MAAM,EAAE,eAAe,iBACrBM,yEAAAA,oCAAoC,SAAS;AAC/C,KAAI,CAAC,cAAc;AACjB,SAAO,KACLH,sCAAAA,gBACE,4EACEH,qBAAAA,oBAAoB,SAAS,UAAU,GAAG,CAC7C,CACF;AACD,SAAO,EAAE,QAAQ;;CAInB,MAAM,EAAE,eAAe,SAASO,qCAAAA,mBAC9B,MAAM,cACN,eACA,aACD;AAGD,KACE,iBACA,SAAS,wBACTC,mCAAAA,oBAAoB,cAAc,EAClC;EACA,MAAM,qBAAqB,kBACzB,eACA,SAAS,WACT,GACD;AACD,SAAO,KACL,GAAG,mBAAmB,OAAO,KAAK,QAAQL,sCAAAA,gBAAgB,IAAI,CAAC,CAChE;AACD,MAAI,mBAAmB,OAAO,SAAS,EACrC,QAAO,EAAE,QAAQ;AAEnB,SAAO;GAAE;GAAQ,OAAO,mBAAmB;GAAQ;;CAIrD,IAAI;CACJ,MAAM,WAAmB,GAAG,KAAK;AACjC,KAAI,iBAAiB,SAAS,sBAAsB;AAIlD,MAAI,CAACM,mCAAAA,cAAc,cAAc,EAAE;AACjC,UAAO,KACLN,sCAAAA,gBACE,mCAAmC,cAAc,gCAC/CH,qBAAAA,oBAAoB,SAAS,UAAU,GAAG,CAC7C,CACF;AACD,UAAO,EAAE,QAAQ;;AAInB,MAAIU,mCAAAA,kBAAkB,cAAc,CAClC,QAAO;GACL;GACA,OAAO;IAAE,GAAG;IAAe,GAAG;IAAU;GACzC;AAGH,kBAAgB;YACP,iBAAiB,SAAS,SAAS;AAE5C,MAAI,CAACC,sCAAAA,iBAAiB,cAAc,EAAE;AACpC,UAAO,KACLR,sCAAAA,gBACE,mCAAmC,cAAc,mCAC/CH,qBAAAA,oBAAoB,SAAS,UAAU,GAAG,CAC7C,CACF;AACD,UAAO,EAAE,QAAQ;;AAGnB,kBACE,kBAAA,aACI,IAAI,GAAG,KAAK,KACZ;OAGN,iBAAgB;CAIlB,MAAM,qBAAqBY,mEAAAA,yBAAyB,aAAa;AACjE,KAAI,mBAAmB,OAAO,SAAS,GAAG;AACxC,SAAO,KACL,GAAG,mBAAmB,OAAO,KAAK,QAAQT,sCAAAA,gBAAgB,IAAI,CAAC,CAChE;AACD,SAAO,EAAE,QAAQ;;CAMnB,MAAM,wBAAwB,kCAC5B,mBAAmB,OACnB,OACAU,mCAAAA,kBAAkB,iBAAiB,GAAG,GAAG,GAAG,MAAM,GAAG,GACtD;AACD,QAAO,KAAK,GAAG,sBAAsB,OAAO;AAC5C,KAAI,sBAAsB,OAAO,SAAS,EACxC,QAAO,EAAE,QAAQ;CAEnB,MAAM,WAAoC,sBAAsB;CAGhE,MAAM,gBAAgB,gBACpB,cACA,IACA,OACA,eACA,KACD;AACD,QAAO,KAAK,GAAG,cAAc,OAAO;AACpC,KAAI,cAAc,OAAO,SAAS,EAChC,QAAO,EAAE,QAAQ;CAEnB,MAAM,MAA0B,cAAc;AAS9C,QAAO;EAAE;EAAQ,OAAA;GALf,GAAG;GACH,GAAG;GACH,GAAI,QAAQ,KAAA,KAAa,EAAE,GAAG,KAAK;GACnC,GAAI,aAAa,KAAA,KAAa,EAAE,GAAG,UAAU;GAEzB;EAAE;;;;;;AAO1B,SAAS,kCACP,cACA,OACA,IACuD;CACvD,MAAM,SAA+B,EAAE;CACvC,MAAM,WAAA,iBAAA,QAAA,iBAAA,KAAA,IAAA,KAAA,IAAW,aAAc;AAG/B,KAAIjB,aAAE,cAAc,SAAS,CAC3B,QAAO;EAAE;EAAQ,OAAO,KAAA;EAAqC;AAE/D,KAAIA,aAAE,iBAAiB,SAAS,CAC9B,QAAO;EACL;EACA,OAAQ,SAAS,SAAS,KAAA;EAC3B;AAIH,QAAO,qBAAqB,cAAc,OAAO,GAAG;;;;;AAMtD,SAAS,gBACP,cACA,IACA,OACA,eACA,MACkD;CAClD,MAAM,SAA+B,EAAE;CACvC,MAAM,QAAgB,EAAE;CACxB,MAAM,OAAO,aAAa,KAAK;AAG/B,KAAI,KAAK,SAAS,GAAG;AACnB,SAAO,KACLO,sCAAAA,gBACE,mDACEH,qBAAAA,oBAAoB,KAAK,GAAG,CAC/B,CACF;AACD,SAAO,EAAE,QAAQ;;CAEnB,MAAM,aAAa,KAAK;AACxB,KAAI,CAACJ,aAAE,mBAAmB,WAAW,EAAE;AACrC,SAAO,KACLO,sCAAAA,gBACE,6EACEH,qBAAAA,oBAAoB,KAAK,GAAG,CAC/B,CACF;AACD,SAAO,EAAE,QAAQ;;CAInB,MAAM,iBAAiB,aAAa,IAClC,YACD,CAAC;AAEF,KACE,iBACA,SAAS,wBACTa,mCAAAA,kBAAkB,cAAc,EAChC;EAEA,MAAM,sBAAsBC,kEAAAA,6BAC1B,gBACA,cACD;EAED,MAAM,WAAW,EAAE;AAEnB,OAAK,MAAM,CAAC,MAAM,kBAAkB,qBAAqB;GACvD,MAAM,YAAY,cAAc;AAEhC,OAAIlB,aAAE,cAAc,UAAU,EAAE;AAC9B,aAAS,QAAQ;AACjB;cACSA,aAAE,iBAAiB,UAAU,EAAE;AACxC,aAAS,QAAQ,UAAU;AAC3B;;GAIF,MAAM,aAAa,qBAAqB,eAAe,OAAO,GAAG,MAAM,CAAC;AACxE,UAAO,KAAK,GAAG,WAAW,OAAO;AACjC,OAAI,WAAW,OAAO,SAAS,EAC7B,QAAO,EAAE,QAAQ;AAEnB,OAAI,WAAW,UAAU,KAAA,EAAW;AACpC,YAAS,QAAQ,WAAW;;AAG9B,MAAI,OAAO,KAAK,SAAS,CAAC,SAAS,GAAG;AACpC,SAAM,OAAO;AACb,SAAM,OAAO,kBAAA,WAA8C,MAAM;;OAInE,QAAO,QAAQmB,iCAAAA,mBAAmB,CAAC,SAAS,CAAC,MAAM,UAAU;EAC3D,MAAM,aAAaC,+EAAAA,qCAAqC,YAAY,KAAK;AACzE,MAAI,WAAW,OAAO,SAAS,GAAG;AAChC,UAAO,KAAK,GAAG,WAAW,OAAO,KAAK,QAAQb,sCAAAA,gBAAgB,IAAI,CAAC,CAAC;AACpE,UAAO,EAAE,QAAQ;;AAEnB,MAAI,WAAW,UAAU,KAAA,EAAW;AACpC,QAAM,QAA2C,WAAW;GAC5D;AAIJ,QAAO;EAAE;EAAQ,OAAO,OAAO,KAAK,MAAM,CAAC,SAAS,IAAI,QAAQ,KAAA;EAAW;;;;;AAM7E,SAAS,kBACP,eACA,MACA,IACwC;CACxC,MAAM,SAAmB,EAAE;AAE3B,KAAI,KAAK,SAAS,GAAG;AACnB,SAAO,KACL,mDACEH,qBAAAA,oBAAoB,KAAK,GAAG,CAC/B;AACD,SAAO,EAAE,QAAQ;;CAEnB,MAAM,aAAa,KAAK;AACxB,KAAI,CAACJ,aAAE,mBAAmB,WAAW,EAAE;AACrC,SAAO,KACL,6EACEI,qBAAAA,oBAAoB,KAAK,GAAG,CAC/B;AACD,SAAO,EAAE,QAAQ;;CAInB,MAAM,iBAAiBiB,2EAAAA,iCAAiC,WAAW;AACnE,QAAO,KAAK,GAAG,eAAe,OAAO;AACrC,KAAI,eAAe,OAAO,SAAS,EACjC,QAAO,EAAE,QAAQ;CAEnB,MAAM,OAAO,eAAe;AAa5B,QAAO;EAAE;EAAQ,OAAA;GATf,GAAG,GAAG,KAAK;GACX,GAAGC,mCAAAA,gBACD,eACA,GAAG,KAAK,EACR,KACD;GACD,GAAGC,mCAAAA,oBAAoB,cAAc;GAGjB;EAAE"}
|
|
1
|
+
{"version":3,"file":"constructJsxChildren.js","names":["IdObject","t","validateChildrenElement","dynamicContentError","generateDynamicContentErrorMessage","createErrorLocation","validateTemplateLiteral","validateUnaryExpression","structuralError","validateIdentifier","validateJsxCall","getCalleeNameFromJsxExpressionParam","getTrackedVariable","isVariableComponent","isGTComponent","isDeriveComponent","isReactComponent","validateChildrenFromArgs","isBranchComponent","getBranchComponentParameters","HTML_CONTENT_PROPS","validateStringLiteralPropertyFromArg","validateNameFieldForVarComponent","getVariableName","minifyCanonicalName"],"sources":["../../../src/transform/jsx-children/constructJsxChildren.ts"],"sourcesContent":["import {\n GTProp,\n HTML_CONTENT_PROPS,\n JsxChild,\n JsxChildren,\n JsxElement,\n Variable,\n VariableType as GTVariableType,\n} from '@generaltranslation/format/types';\nimport { TransformState } from '../../state/types';\nimport * as t from '@babel/types';\nimport type { NodePath } from '@babel/traverse';\nimport { validateIdentifier } from './validation/validateIdentifier';\nimport { validateTemplateLiteral } from './validation/validateTemplateLiteral';\nimport { validateChildrenElement } from './validation/validateChildrenElement';\nimport { getCalleeNameFromJsxExpressionParam } from './utils/getCalleeNameFromJsxExpressionParam';\nimport { getTrackedVariable } from '../getTrackedVariable';\nimport { isReactComponent } from '../../utils/constants/react/helpers';\nimport { REACT_COMPONENTS } from '../../utils/constants/react/constants';\nimport { validateChildrenFromArgs } from './validation/validateChildrenFromArgs';\nimport { IdObject } from './utils/id';\nimport { VariableType } from '../../state/ScopeTracker';\nimport {\n defaultVariableNames,\n getVariableName,\n isBranchComponent,\n isDeriveComponent,\n isGTComponent,\n isVariableComponent,\n minifyCanonicalName,\n} from '../../utils/constants/gt/helpers';\nimport { validateStringLiteralPropertyFromArg } from './validation/validateStringLiteralPropertyFromArg';\nimport { GT_COMPONENT_TYPES } from '../../utils/constants/gt/constants';\nimport { getBranchComponentParameters } from './utils/getBranchComponentParameters';\nimport { validateNameFieldForVarComponent } from './validation/validateNameFieldForVarComponent';\nimport { validateUnaryExpression } from './validation/validateUnaryExpression';\nimport {\n createErrorLocation,\n generateDynamicContentErrorMessage,\n} from '../../utils/errors';\nimport { validateJsxCall } from './validation/validateJsxCall';\nimport {\n JsxValidationError,\n dynamicContentError,\n structuralError,\n} from './errors';\n\n/**\n * Given the children of a <T> component, constructs a JsxChildren object.\n * Takes an Expression path.\n *\n * ONLY does JsxChildren construction + validation, no further processing on any children.\n *\n * On invalid children, quit immediately.\n *\n * The node checks intentionally happen before navigating with .get(). This\n * keeps runtime validation behavior stable while preserving NodePath scope for\n * future derivation work.\n */\nexport function constructJsxChildren(\n childrenPath: NodePath<t.Expression> | undefined,\n state: TransformState,\n id: IdObject = new IdObject()\n): { errors: JsxValidationError[]; value?: JsxChildren } {\n const errors: JsxValidationError[] = [];\n\n // Skip if no children\n if (!childrenPath) {\n return { errors, value: childrenPath };\n }\n\n const children = childrenPath.node;\n let value: JsxChildren | undefined;\n if (t.isArrayExpression(children)) {\n // Handle ArrayExpression\n value = [];\n const elementPaths = childrenPath.get('elements');\n\n for (let i = 0; i < children.elements.length; i++) {\n const child = children.elements[i];\n // Validate child\n if (!validateChildrenElement(child)) {\n errors.push(\n dynamicContentError(\n generateDynamicContentErrorMessage() +\n (child && createErrorLocation(child))\n )\n );\n return { errors };\n }\n\n // Special children edge cases: nullLiteral, booleanLiteral\n if (t.isBooleanLiteral(child) || t.isNullLiteral(child)) {\n continue;\n }\n\n // Construct JsxChild\n const childPath = elementPaths[i] as NodePath<\n Exclude<t.Expression, t.ArrayExpression>\n >;\n const validation = constructJsxChild(childPath, state, id);\n errors.push(...validation.errors);\n if (errors.length > 0) {\n return { errors };\n }\n // Skip if no value\n if (validation.value === undefined) continue;\n (value as JsxChild[]).push(validation.value);\n }\n } else {\n // Handle single child\n const validation = constructJsxChild(\n childrenPath as NodePath<Exclude<t.Expression, t.ArrayExpression>>,\n state,\n id\n );\n errors.push(...validation.errors);\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n }\n\n return { errors, value };\n}\n\n/**\n * Given an Expression path, constructs a JsxChild.\n * @returns { errors: string[]; value?: JsxChild }\n */\nfunction constructJsxChild(\n childPath: NodePath<Exclude<t.Expression, t.ArrayExpression>>,\n state: TransformState,\n id: IdObject\n): { errors: JsxValidationError[]; value?: JsxChild } {\n const errors: JsxValidationError[] = [];\n const child = childPath.node;\n let value: JsxChild | undefined;\n\n if (t.isCallExpression(child)) {\n // Construct JsxElement\n const validation = constructJsxElement(\n childPath as NodePath<t.CallExpression>,\n state,\n id\n );\n errors.push(...validation.errors);\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n } else if (t.isStringLiteral(child)) {\n value = child.value;\n } else if (t.isTemplateLiteral(child)) {\n const validation = validateTemplateLiteral(child);\n errors.push(...validation.errors.map((msg) => dynamicContentError(msg)));\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n } else if (t.isNumericLiteral(child)) {\n value = child.value.toString();\n } else if (t.isBooleanLiteral(child)) {\n value = child.value as unknown as JsxChild;\n } else if (t.isNullLiteral(child)) {\n value = null as unknown as JsxChild;\n } else if (t.isUnaryExpression(child)) {\n const validation = validateUnaryExpression(child);\n errors.push(...validation.errors.map((msg) => structuralError(msg)));\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n } else if (t.isIdentifier(child)) {\n // <T>{name}</T> or <T>{undefined}</T>\n const validation = validateIdentifier(child, state);\n errors.push(...validation.errors.map((msg) => dynamicContentError(msg)));\n if (errors.length > 0) {\n return { errors };\n }\n value = validation.value;\n } else {\n // Other cases fail\n errors.push(\n dynamicContentError(\n generateDynamicContentErrorMessage() + createErrorLocation(child)\n )\n );\n return { errors };\n }\n\n return { errors, value };\n}\n\n/**\n * Given a CallExpression path, constructs a JsxChild.\n * Handles: Jsx(T, ...children)\n */\nfunction constructJsxElement(\n callExprPath: NodePath<t.CallExpression>,\n state: TransformState,\n id: IdObject\n): { errors: JsxValidationError[]; value?: JsxElement | Variable } {\n const errors: JsxValidationError[] = [];\n const callExpr = callExprPath.node;\n\n // Validate that this is a jsx call\n const jsxValidation = validateJsxCall(callExpr, state);\n errors.push(...jsxValidation.map((msg) => dynamicContentError(msg)));\n if (jsxValidation.length > 0) {\n return { errors };\n }\n\n // Increment id\n id.increment();\n\n // Get first argument\n if (callExpr.arguments.length === 0) {\n return { errors };\n }\n const firstArg = callExpr.arguments[0];\n if (!t.isExpression(firstArg)) {\n errors.push(\n structuralError(\n `Failed to construct JsxElement! First argument must be an expression` +\n createErrorLocation(callExpr.arguments[0])\n )\n );\n return { errors };\n }\n\n // Resolve canonical name\n const { namespaceName, functionName } =\n getCalleeNameFromJsxExpressionParam(firstArg);\n if (!functionName) {\n errors.push(\n structuralError(\n `Failed to construct JsxElement! First argument must be a valid function` +\n createErrorLocation(callExpr.arguments[0])\n )\n );\n return { errors };\n }\n\n // Get the canonical function name\n const { canonicalName, type } = getTrackedVariable(\n state.scopeTracker,\n namespaceName,\n functionName\n );\n\n // Handle variable components\n if (\n canonicalName &&\n type === 'generaltranslation' &&\n isVariableComponent(canonicalName)\n ) {\n const variableValidation = constructVariable(\n canonicalName,\n callExpr.arguments,\n id\n );\n errors.push(\n ...variableValidation.errors.map((msg) => structuralError(msg))\n );\n if (variableValidation.errors.length > 0) {\n return { errors };\n }\n return { errors, value: variableValidation.value! };\n }\n\n // Set the component name\n let componentName: string;\n const idNumber: number = id.get();\n if (canonicalName && type === 'generaltranslation') {\n // Handle GT components: <Var>, <Num>, <Currency>, etc.\n\n // Check that this is a gt component\n if (!isGTComponent(canonicalName)) {\n errors.push(\n structuralError(\n `Failed to construct JsxElement! ${canonicalName} is not a valid GT component` +\n createErrorLocation(callExpr.arguments[0])\n )\n );\n return { errors };\n }\n // Derive - opaque element, skip children validation\n // The compiler doesn't resolve Derive functions; the CLI handles that.\n if (isDeriveComponent(canonicalName)) {\n return {\n errors,\n value: { t: canonicalName, i: idNumber },\n };\n }\n // Get the name of the component\n componentName = canonicalName;\n } else if (canonicalName && type === 'react') {\n // Handle fragment + special react components\n if (!isReactComponent(canonicalName)) {\n errors.push(\n structuralError(\n `Failed to construct JsxElement! ${canonicalName} is not a valid React component` +\n createErrorLocation(callExpr.arguments[0])\n )\n );\n return { errors };\n }\n // Get the name of the component\n componentName =\n canonicalName === REACT_COMPONENTS.Fragment\n ? `C${id.get()}`\n : functionName;\n } else {\n // Handle all other components: div, etc.\n componentName = functionName;\n }\n\n // Get children from args\n const childrenValidation = validateChildrenFromArgs(callExprPath);\n if (childrenValidation.errors.length > 0) {\n errors.push(\n ...childrenValidation.errors.map((msg) => structuralError(msg))\n );\n return { errors };\n }\n\n // Construct JsxChildren\n // For branching components (Branch/Plural), use id.copy() so children and\n // branch props start counting from the same base independently.\n const jsxChildrenValidation = constructJsxChildrenForJsxElement(\n childrenValidation.value,\n state,\n isBranchComponent(canonicalName ?? '') ? id.copy() : id\n );\n errors.push(...jsxChildrenValidation.errors);\n if (jsxChildrenValidation.errors.length > 0) {\n return { errors };\n }\n const children: JsxChildren | undefined = jsxChildrenValidation.value;\n\n // Construct GT Tag\n const tagValidation = constructGTProp(\n callExprPath,\n id,\n state,\n canonicalName,\n type\n );\n errors.push(...tagValidation.errors);\n if (tagValidation.errors.length > 0) {\n return { errors };\n }\n const tag: GTProp | undefined = tagValidation.value;\n\n // Return result\n const value: JsxElement = {\n t: componentName,\n i: idNumber,\n ...(tag !== undefined && { d: tag }),\n ...(children !== undefined && { c: children }),\n };\n return { errors, value };\n}\n\n/**\n * Construct JsxChildren for a JsxElement\n * This is slightly different from constructJsxChildren in how it handles nullLiteral and booleanLiteral\n */\nfunction constructJsxChildrenForJsxElement(\n childrenPath: NodePath<t.Expression> | undefined,\n state: TransformState,\n id: IdObject\n): { errors: JsxValidationError[]; value?: JsxChildren } {\n const errors: JsxValidationError[] = [];\n const children = childrenPath?.node;\n\n // Special children edge cases: nullLiteral, booleanLiteral\n if (t.isNullLiteral(children)) {\n return { errors, value: undefined as unknown as JsxChildren };\n }\n if (t.isBooleanLiteral(children)) {\n return {\n errors,\n value: (children.value || undefined) as unknown as JsxChildren,\n };\n }\n\n // Construct JsxChildren\n return constructJsxChildren(childrenPath, state, id);\n}\n\n/**\n * Given a canonical name, constructs a GTProp\n */\nfunction constructGTProp(\n callExprPath: NodePath<t.CallExpression>,\n id: IdObject,\n state: TransformState,\n canonicalName?: string,\n type?: VariableType\n): { errors: JsxValidationError[]; value?: GTProp } {\n const errors: JsxValidationError[] = [];\n const value: GTProp = {};\n const args = callExprPath.node.arguments;\n\n // Validate Parameters\n if (args.length < 2) {\n errors.push(\n structuralError(\n 'Failed to construct GTProp! Missing parameters' +\n createErrorLocation(args[0])\n )\n );\n return { errors };\n }\n const parameters = args[1];\n if (!t.isObjectExpression(parameters)) {\n errors.push(\n structuralError(\n 'Failed to construct GTProp! Parameter field must be an object expression' +\n createErrorLocation(args[1])\n )\n );\n return { errors };\n }\n\n // For Branch and Plural, get the properties\n const parametersPath = callExprPath.get(\n 'arguments'\n )[1] as NodePath<t.ObjectExpression>;\n\n if (\n canonicalName &&\n type === 'generaltranslation' &&\n isBranchComponent(canonicalName)\n ) {\n // Get the branching parameters\n const branchingParameters = getBranchComponentParameters(\n parametersPath as NodePath<t.ObjectExpression>,\n canonicalName\n );\n // Add branch component branches\n const branches = {} as Record<string, JsxChildren>;\n\n for (const [name, parameterPath] of branchingParameters) {\n const parameter = parameterPath.node;\n // Special exceptions for branches:\n if (t.isNullLiteral(parameter)) {\n branches[name] = null as unknown as JsxChildren;\n continue;\n } else if (t.isBooleanLiteral(parameter)) {\n branches[name] = parameter.value as unknown as JsxChildren;\n continue;\n }\n\n // Otherwise, construct the JsxChildren\n const validation = constructJsxChildren(parameterPath, state, id.copy());\n errors.push(...validation.errors);\n if (validation.errors.length > 0) {\n return { errors };\n }\n if (validation.value === undefined) continue;\n branches[name] = validation.value;\n }\n\n if (Object.keys(branches).length > 0) {\n value['b'] = branches;\n value['t'] = canonicalName === GT_COMPONENT_TYPES.Branch ? 'b' : 'p';\n }\n } else {\n // Get the html content props\n Object.entries(HTML_CONTENT_PROPS).forEach(([prop, name]) => {\n const validation = validateStringLiteralPropertyFromArg(parameters, name);\n if (validation.errors.length > 0) {\n errors.push(...validation.errors.map((msg) => structuralError(msg)));\n return { errors };\n }\n if (validation.value === undefined) return;\n value[prop as keyof typeof HTML_CONTENT_PROPS] = validation.value;\n });\n }\n\n // Return result\n return { errors, value: Object.keys(value).length > 0 ? value : undefined };\n}\n\n/**\n * Construct Variable\n */\nfunction constructVariable(\n canonicalName: GT_COMPONENT_TYPES,\n args: (t.ArgumentPlaceholder | t.SpreadElement | t.Expression)[],\n id: IdObject\n): { errors: string[]; value?: Variable } {\n const errors: string[] = [];\n // Validate Parameters\n if (args.length < 2) {\n errors.push(\n 'Failed to construct GTProp! Missing parameters' +\n createErrorLocation(args[0])\n );\n return { errors };\n }\n const parameters = args[1];\n if (!t.isObjectExpression(parameters)) {\n errors.push(\n 'Failed to construct GTProp! Parameter field must be an object expression' +\n createErrorLocation(args[1])\n );\n return { errors };\n }\n\n // Validate Parameters\n const nameValidation = validateNameFieldForVarComponent(parameters);\n errors.push(...nameValidation.errors);\n if (nameValidation.errors.length > 0) {\n return { errors };\n }\n const name = nameValidation.value;\n\n // Check for name field\n const value: Variable = {\n i: id.get(),\n k: getVariableName(\n canonicalName as keyof typeof defaultVariableNames,\n id.get(),\n name\n ),\n v: minifyCanonicalName(canonicalName) as GTVariableType,\n };\n\n return { errors, value };\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as t from '@babel/types';
|
|
2
2
|
import { NodePath } from '@babel/traverse';
|
|
3
3
|
/**
|
|
4
|
-
* Inject `import { GtInternalTranslateJsx, GtInternalVar } from 'gt-react
|
|
4
|
+
* Inject `import { GtInternalTranslateJsx, GtInternalVar } from 'gt-react'`
|
|
5
5
|
* as the first statement in the program.
|
|
6
6
|
*/
|
|
7
|
-
export declare function injectJsxInsertionImport(path: NodePath<t.Program
|
|
7
|
+
export declare function injectJsxInsertionImport(path: NodePath<t.Program>, legacyGtReactImportSource: boolean): void;
|
|
8
8
|
//# sourceMappingURL=injectJsxInsertionImport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectJsxInsertionImport.d.ts","sourceRoot":"","sources":["../../../src/transform/jsx-insertion/injectJsxInsertionImport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"injectJsxInsertionImport.d.ts","sourceRoot":"","sources":["../../../src/transform/jsx-insertion/injectJsxInsertionImport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAI3C;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EACzB,yBAAyB,EAAE,OAAO,GACjC,IAAI,CAaN"}
|