@gtkx/cli 1.6.0 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/README.md +5 -5
  2. package/dist/codegen/freshness.d.ts.map +1 -1
  3. package/dist/codegen/freshness.js +45 -16
  4. package/dist/codegen/freshness.js.map +1 -1
  5. package/dist/codegen/reference.d.ts.map +1 -1
  6. package/dist/codegen/reference.js +1 -7
  7. package/dist/codegen/reference.js.map +1 -1
  8. package/dist/codegen/report.d.ts.map +1 -1
  9. package/dist/codegen/report.js +5 -16
  10. package/dist/codegen/report.js.map +1 -1
  11. package/dist/codegen/run-codegen.d.ts +3 -5
  12. package/dist/codegen/run-codegen.d.ts.map +1 -1
  13. package/dist/codegen/run-codegen.js +23 -100
  14. package/dist/codegen/run-codegen.js.map +1 -1
  15. package/dist/codegen/store-resolver.d.ts +0 -1
  16. package/dist/codegen/store-resolver.d.ts.map +1 -1
  17. package/dist/codegen/store-resolver.js +8 -17
  18. package/dist/codegen/store-resolver.js.map +1 -1
  19. package/dist/commands/docs.d.ts.map +1 -1
  20. package/dist/commands/docs.js +5 -15
  21. package/dist/commands/docs.js.map +1 -1
  22. package/dist/deploy/freedesktop/copyright.d.ts.map +1 -1
  23. package/dist/deploy/freedesktop/copyright.js +2 -13
  24. package/dist/deploy/freedesktop/copyright.js.map +1 -1
  25. package/dist/deploy/freedesktop/xml.d.ts.map +1 -1
  26. package/dist/deploy/freedesktop/xml.js +21 -25
  27. package/dist/deploy/freedesktop/xml.js.map +1 -1
  28. package/dist/deploy/node-runtime/license.d.ts.map +1 -1
  29. package/dist/deploy/node-runtime/license.js +2 -9
  30. package/dist/deploy/node-runtime/license.js.map +1 -1
  31. package/dist/deploy/notices/packages.d.ts.map +1 -1
  32. package/dist/deploy/notices/packages.js +3 -10
  33. package/dist/deploy/notices/packages.js.map +1 -1
  34. package/dist/deploy/payload/copy-tree.d.ts.map +1 -1
  35. package/dist/deploy/payload/copy-tree.js +3 -3
  36. package/dist/deploy/payload/copy-tree.js.map +1 -1
  37. package/dist/deploy/payload/stage.d.ts.map +1 -1
  38. package/dist/deploy/payload/stage.js +1 -3
  39. package/dist/deploy/payload/stage.js.map +1 -1
  40. package/dist/deploy/settings/build-manifest.d.ts.map +1 -1
  41. package/dist/deploy/settings/build-manifest.js +4 -15
  42. package/dist/deploy/settings/build-manifest.js.map +1 -1
  43. package/dist/deploy/settings/libraries.d.ts.map +1 -1
  44. package/dist/deploy/settings/libraries.js +2 -19
  45. package/dist/deploy/settings/libraries.js.map +1 -1
  46. package/dist/deploy/settings/paths.d.ts +1 -2
  47. package/dist/deploy/settings/paths.d.ts.map +1 -1
  48. package/dist/deploy/settings/paths.js +5 -15
  49. package/dist/deploy/settings/paths.js.map +1 -1
  50. package/dist/deploy/settings/screenshots.d.ts.map +1 -1
  51. package/dist/deploy/settings/screenshots.js +6 -31
  52. package/dist/deploy/settings/screenshots.js.map +1 -1
  53. package/dist/deploy/targets/flatpak-pnpm.js +4 -4
  54. package/dist/deploy/targets/flatpak-pnpm.js.map +1 -1
  55. package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
  56. package/dist/deploy/targets/flatpak-source.js +4 -4
  57. package/dist/deploy/targets/flatpak-source.js.map +1 -1
  58. package/dist/deploy/targets/flatpak-sources.js +1 -1
  59. package/dist/deploy/targets/flatpak-sources.js.map +1 -1
  60. package/dist/dev/runner-main.d.ts.map +1 -1
  61. package/dist/dev/runner-main.js +1 -2
  62. package/dist/dev/runner-main.js.map +1 -1
  63. package/dist/dev/schema-dir.d.ts +1 -1
  64. package/dist/dev/schema-dir.d.ts.map +1 -1
  65. package/dist/dev/schema-dir.js +2 -4
  66. package/dist/dev/schema-dir.js.map +1 -1
  67. package/dist/i18n/catalogs.d.ts.map +1 -1
  68. package/dist/i18n/catalogs.js +2 -1
  69. package/dist/i18n/catalogs.js.map +1 -1
  70. package/dist/i18n/metadata-templates.d.ts.map +1 -1
  71. package/dist/i18n/metadata-templates.js +2 -1
  72. package/dist/i18n/metadata-templates.js.map +1 -1
  73. package/dist/i18n/source-messages.d.ts +3 -21
  74. package/dist/i18n/source-messages.d.ts.map +1 -1
  75. package/dist/i18n/source-messages.js +66 -85
  76. package/dist/i18n/source-messages.js.map +1 -1
  77. package/dist/i18n/types.d.ts +6 -7
  78. package/dist/i18n/types.d.ts.map +1 -1
  79. package/dist/i18n/types.js +83 -96
  80. package/dist/i18n/types.js.map +1 -1
  81. package/dist/internal/docs-elements.js +2 -2
  82. package/dist/internal/docs-elements.js.map +1 -1
  83. package/dist/internal/icon-path.d.ts.map +1 -1
  84. package/dist/internal/icon-path.js +5 -16
  85. package/dist/internal/icon-path.js.map +1 -1
  86. package/dist/internal/source-imports.d.ts.map +1 -1
  87. package/dist/internal/source-imports.js +10 -41
  88. package/dist/internal/source-imports.js.map +1 -1
  89. package/dist/settings/render.d.ts +0 -1
  90. package/dist/settings/render.d.ts.map +1 -1
  91. package/dist/settings/render.js +1 -11
  92. package/dist/settings/render.js.map +1 -1
  93. package/dist/settings/schema.d.ts +2 -2
  94. package/dist/settings/schema.d.ts.map +1 -1
  95. package/dist/settings/schema.js +21 -62
  96. package/dist/settings/schema.js.map +1 -1
  97. package/dist/vite-plugins/asset-imports.d.ts +1 -2
  98. package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
  99. package/dist/vite-plugins/asset-imports.js +19 -32
  100. package/dist/vite-plugins/asset-imports.js.map +1 -1
  101. package/dist/vite-plugins/asset-specifier.d.ts +1 -3
  102. package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
  103. package/dist/vite-plugins/asset-specifier.js +1 -4
  104. package/dist/vite-plugins/asset-specifier.js.map +1 -1
  105. package/dist/vite-plugins/i18n.d.ts.map +1 -1
  106. package/dist/vite-plugins/i18n.js +2 -1
  107. package/dist/vite-plugins/i18n.js.map +1 -1
  108. package/dist/vite-plugins/index.d.ts.map +1 -1
  109. package/dist/vite-plugins/index.js +2 -4
  110. package/dist/vite-plugins/index.js.map +1 -1
  111. package/dist/vite-plugins/resources.d.ts.map +1 -1
  112. package/dist/vite-plugins/resources.js +32 -97
  113. package/dist/vite-plugins/resources.js.map +1 -1
  114. package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
  115. package/dist/vite-plugins/settings-worker-env.js +2 -4
  116. package/dist/vite-plugins/settings-worker-env.js.map +1 -1
  117. package/dist/vite-plugins/settings.d.ts +1 -2
  118. package/dist/vite-plugins/settings.d.ts.map +1 -1
  119. package/dist/vite-plugins/settings.js +8 -14
  120. package/dist/vite-plugins/settings.js.map +1 -1
  121. package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
  122. package/dist/vite-plugins/undeclared-library.js +10 -13
  123. package/dist/vite-plugins/undeclared-library.js.map +1 -1
  124. package/dist/vite-plugins/worker.d.ts.map +1 -1
  125. package/dist/vite-plugins/worker.js +0 -1
  126. package/dist/vite-plugins/worker.js.map +1 -1
  127. package/package.json +21 -15
  128. package/src/codegen/freshness.ts +66 -17
  129. package/src/codegen/reference.ts +1 -8
  130. package/src/codegen/report.ts +5 -21
  131. package/src/codegen/run-codegen.ts +28 -145
  132. package/src/codegen/store-resolver.ts +8 -24
  133. package/src/commands/docs.ts +5 -17
  134. package/src/deploy/freedesktop/copyright.ts +2 -14
  135. package/src/deploy/freedesktop/xml.ts +24 -32
  136. package/src/deploy/node-runtime/license.ts +2 -8
  137. package/src/deploy/notices/packages.ts +3 -11
  138. package/src/deploy/payload/copy-tree.ts +3 -4
  139. package/src/deploy/payload/stage.ts +2 -6
  140. package/src/deploy/settings/build-manifest.ts +4 -16
  141. package/src/deploy/settings/libraries.ts +1 -22
  142. package/src/deploy/settings/paths.ts +6 -16
  143. package/src/deploy/settings/screenshots.ts +8 -46
  144. package/src/deploy/targets/flatpak-pnpm.ts +4 -4
  145. package/src/deploy/targets/flatpak-source.ts +4 -4
  146. package/src/deploy/targets/flatpak-sources.ts +1 -1
  147. package/src/dev/runner-main.ts +1 -2
  148. package/src/dev/schema-dir.ts +2 -4
  149. package/src/i18n/catalogs.ts +2 -1
  150. package/src/i18n/metadata-templates.ts +2 -1
  151. package/src/i18n/source-messages.ts +77 -115
  152. package/src/i18n/types.ts +97 -131
  153. package/src/internal/docs-elements.ts +2 -2
  154. package/src/internal/icon-path.ts +6 -19
  155. package/src/internal/source-imports.ts +14 -50
  156. package/src/settings/render.ts +1 -13
  157. package/src/settings/schema.ts +19 -81
  158. package/src/vite-plugins/asset-imports.ts +20 -44
  159. package/src/vite-plugins/asset-specifier.ts +0 -5
  160. package/src/vite-plugins/i18n.ts +2 -1
  161. package/src/vite-plugins/index.ts +2 -4
  162. package/src/vite-plugins/resources.ts +37 -140
  163. package/src/vite-plugins/settings-worker-env.ts +2 -4
  164. package/src/vite-plugins/settings.ts +11 -20
  165. package/src/vite-plugins/undeclared-library.ts +14 -20
  166. package/src/vite-plugins/worker.ts +0 -1
  167. package/dist/i18n/binding-extractor.d.ts +0 -30
  168. package/dist/i18n/binding-extractor.d.ts.map +0 -1
  169. package/dist/i18n/binding-extractor.js +0 -1324
  170. package/dist/i18n/binding-extractor.js.map +0 -1
  171. package/dist/i18n/extractor-plugin.d.ts +0 -8
  172. package/dist/i18n/extractor-plugin.d.ts.map +0 -1
  173. package/dist/i18n/extractor-plugin.js +0 -247
  174. package/dist/i18n/extractor-plugin.js.map +0 -1
  175. package/dist/internal/data-dir.d.ts +0 -4
  176. package/dist/internal/data-dir.d.ts.map +0 -1
  177. package/dist/internal/data-dir.js +0 -52
  178. package/dist/internal/data-dir.js.map +0 -1
  179. package/dist/vite-plugins/animated.d.ts +0 -5
  180. package/dist/vite-plugins/animated.d.ts.map +0 -1
  181. package/dist/vite-plugins/animated.js +0 -325
  182. package/dist/vite-plugins/animated.js.map +0 -1
  183. package/src/i18n/binding-extractor.ts +0 -1969
  184. package/src/i18n/extractor-plugin.ts +0 -413
  185. package/src/internal/data-dir.ts +0 -70
  186. package/src/vite-plugins/animated.ts +0 -486
@@ -1 +0,0 @@
1
- {"version":3,"file":"binding-extractor.js","sourceRoot":"","sources":["../../src/i18n/binding-extractor.ts"],"names":[],"mappings":"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","sourcesContent":["import { types as babel, type NodePath as BabelNodePath, parseAsync, traverse } from \"@babel/core\";\nimport { extname } from \"node:path\";\n\ntype ApiName =\n | \"IcuTrans\" |\n \"IcuTransWithoutContext\" |\n \"Trans\" |\n \"TransWithoutContext\" |\n \"Translation\" |\n \"getFixedT\" |\n \"getI18n\" |\n \"init\" |\n \"t\" |\n \"useTranslation\" |\n \"withTranslation\";\n\ntype ScopeInfo = {\n defaultNs?: string;\n keyPrefix?: string;\n namespaces?: string[];\n};\n\ntype TSemantic = {\n fixed: boolean;\n info: ScopeInfo;\n kind: \"t\";\n};\n\ntype Semantic =\n | TSemantic |\n { api: ApiName; kind: \"api\" } |\n { info: ScopeInfo; kind: \"enhancer\" } |\n { kind: \"initPromise\" } |\n { kind: \"namespace\"; module: string } |\n { kind: \"translationContext\" } |\n { instance: boolean; kind: \"translationObject\"; t: TSemantic };\n\ntype ExtractedCall = {\n info: ScopeInfo;\n key: string;\n};\n\ntype ExtractedMessage = {\n defaultValue: string;\n explicitDefault: boolean;\n key: string;\n location: {\n column?: number;\n file: string;\n line?: number;\n };\n ns?: string;\n};\n\ntype BindingExtraction = {\n blockedGetFixedT: Set<string>;\n calls: Map<string, ExtractedCall>;\n errors: string[];\n messages: ExtractedMessage[];\n trans: Map<string, ScopeInfo | null>;\n};\n\ntype NodePath<T extends babel.Node = babel.Node> = BabelNodePath<T>;\ntype Binding = NonNullable<ReturnType<NodePath[\"scope\"][\"getBinding\"]>>;\ntype ParserPlugin = \"decorators-legacy\" | \"jsx\" | \"typescript\";\n\ntype ScopeCallInput = {\n file: string;\n namespaceIndex: number;\n optionsIndex?: number;\n path: NodePath;\n prefixIndex?: number;\n};\n\ntype ComponentInput = {\n contextPath?: NodePath | undefined;\n countPath?: NodePath | undefined;\n defaultPath?: NodePath | undefined;\n isIcu: boolean;\n keyPath?: NodePath | undefined;\n namespacePath?: NodePath | undefined;\n optionsPath?: NodePath | undefined;\n path: NodePath;\n tPath?: NodePath | undefined;\n valuesPath?: NodePath | undefined;\n};\n\ntype ComponentKeys = {\n fallback?: string | undefined;\n rawKeys: string[];\n};\n\ntype ComponentScope = {\n keys: string[];\n ns?: string | undefined;\n};\n\ntype Resolution<T> = {\n isValid: boolean;\n value?: T | undefined;\n};\n\ntype MessageInput = {\n defaultValue: string;\n hasExplicitDefault: boolean;\n key: string;\n ns?: string | undefined;\n path: NodePath;\n};\n\ntype PluralPairInput = {\n key: string;\n ns?: string | undefined;\n path: NodePath;\n plural: string;\n singular: string;\n};\n\nconst API_NAMES: readonly ApiName[] = [\n \"IcuTrans\",\n \"IcuTransWithoutContext\",\n \"Trans\",\n \"TransWithoutContext\",\n \"Translation\",\n \"getFixedT\",\n \"getI18n\",\n \"init\",\n \"t\",\n \"useTranslation\",\n \"withTranslation\",\n];\n\nconst API_NAME_SET: Set<string> = new Set(API_NAMES);\nconst GTKX_MODULE = \"@gtkx/i18n\";\nconst I18NEXT_MODULE = \"i18next\";\nconst REACT_I18NEXT_MODULE = \"react-i18next\";\nconst SUPPORTED_MODULES = new Set([GTKX_MODULE, I18NEXT_MODULE, REACT_I18NEXT_MODULE]);\nconst I18NEXT_APIS: Set<ApiName> = new Set([\"getFixedT\", \"init\", \"t\"]);\nconst CONTEXT_SEPARATOR = \"\\u{4}\";\nconst EMPTY_INFO: ScopeInfo = {};\nconst GLOBAL_T: TSemantic = { fixed: false, info: EMPTY_INFO, kind: \"t\" };\n\nconst oneChild = (path: NodePath, key: string): NodePath | undefined => {\n const value = path.get(key);\n\n return Array.isArray(value) || value.node === null ? undefined : value;\n};\n\nconst childPaths = (path: NodePath, key: string): NodePath[] => {\n const value = path.get(key);\n\n return Array.isArray(value)\n ? value.filter((candidate) => candidate.node !== null)\n : [];\n};\n\nconst isTransparentExpression = (path: NodePath): boolean => [\n path.isParenthesizedExpression(),\n path.isTSAsExpression(),\n path.isTSInstantiationExpression(),\n path.isTSNonNullExpression(),\n path.isTSSatisfiesExpression(),\n path.isTSTypeAssertion(),\n].includes(true);\n\nconst unwrapPath = (path: NodePath): NodePath => {\n let current = path;\n\n while (isTransparentExpression(current)) {\n const expression = oneChild(current, \"expression\");\n\n if (expression === undefined) {\n return current;\n }\n\n current = expression;\n }\n\n return current;\n};\n\nconst staticPropertyName = (path: NodePath): string | undefined => {\n if (path.isIdentifier()) {\n return path.node.name;\n }\n\n if (path.isStringLiteral()) {\n return path.node.value;\n }\n\n return path.isNumericLiteral() ? String(path.node.value) : undefined;\n};\n\nconst memberProperty = (path: NodePath): string | undefined => {\n const member = unwrapPath(path);\n\n if (!member.isMemberExpression() && !member.isOptionalMemberExpression()) {\n return;\n }\n\n const property = oneChild(member, \"property\");\n\n if (property === undefined) {\n return;\n }\n\n return !member.node.computed && property.isIdentifier()\n ? property.node.name\n : staticPropertyName(property);\n};\n\nconst constantDeclaratorBinding = (\n path: NodePath,\n resolving: Set<Binding>,\n): Binding | undefined => {\n if (!path.isIdentifier()) {\n return;\n }\n\n const binding = path.scope.getBinding(path.node.name);\n\n if (!binding?.constant) {\n return;\n }\n\n return resolving.has(binding) || !binding.path.isVariableDeclarator()\n ? undefined\n : binding;\n};\n\nconst literalIdentifierString = (\n path: NodePath,\n resolving: Set<Binding>,\n): string | undefined => {\n const binding = constantDeclaratorBinding(path, resolving);\n\n if (binding === undefined) {\n return;\n }\n\n const init = oneChild(binding.path, \"init\");\n\n if (init === undefined) {\n return;\n }\n\n resolving.add(binding);\n const resolved = literalString(init, resolving);\n resolving.delete(binding);\n\n return resolved;\n};\n\nconst literalMemberString = (\n path: NodePath,\n resolving: Set<Binding>,\n): string | undefined => {\n const object = oneChild(path, \"object\");\n const property = memberProperty(path);\n\n if (property === undefined || object?.isIdentifier() !== true) {\n return;\n }\n\n const binding = constantDeclaratorBinding(object, resolving);\n\n if (binding === undefined) {\n return;\n }\n\n const member = objectProperty(oneChild(binding.path, \"init\"), property);\n\n if (member === undefined) {\n return;\n }\n\n resolving.add(binding);\n const resolved = literalString(member, resolving);\n resolving.delete(binding);\n\n return resolved;\n};\n\nconst directLiteralString = (value: NodePath): string | undefined => {\n if (value.isStringLiteral()) {\n return value.node.value;\n }\n\n if (!value.isTemplateLiteral() || value.node.expressions.length > 0) {\n return;\n }\n\n const quasi = value.node.quasis[0];\n\n return quasi?.value.cooked ?? quasi?.value.raw;\n};\n\nconst literalString = (\n path: NodePath | undefined,\n resolving: Set<Binding> = new Set(),\n): string | undefined => {\n if (path === undefined) {\n return;\n }\n\n const value = unwrapPath(path);\n const direct = directLiteralString(value);\n\n if (direct !== undefined) {\n return direct;\n }\n\n return value.isIdentifier()\n ? literalIdentifierString(value, resolving)\n : literalMemberString(value, resolving);\n};\n\nconst isStaticObjectProperty = (path: NodePath, resolving: Set<Binding>): boolean => {\n if (!path.isSpreadElement()) {\n return true;\n }\n\n return isStaticObject(oneChild(path, \"argument\"), resolving);\n};\n\nconst isStaticObject = (\n path: NodePath | undefined,\n resolving: Set<Binding> = new Set(),\n): boolean => {\n if (path === undefined) {\n return false;\n }\n\n const value = unwrapPath(path);\n const binding = constantDeclaratorBinding(value, resolving);\n\n if (binding !== undefined) {\n resolving.add(binding);\n const isResult = isStaticObject(oneChild(binding.path, \"init\"), resolving);\n resolving.delete(binding);\n\n return isResult;\n }\n\n return value.isObjectExpression() &&\n childPaths(value, \"properties\").every((property) => isStaticObjectProperty(property, resolving));\n};\n\nconst propertyKeyName = (\n property: NodePath<babel.ObjectMethod | babel.ObjectProperty>,\n): string | undefined => {\n const key = oneChild(property, \"key\");\n\n if (key === undefined) {\n return;\n }\n\n const propertyName = property.node.computed\n ? literalString(key)\n : staticPropertyName(key);\n\n if (propertyName === undefined && property.node.computed) {\n throw new Error(\"Translation options cannot contain dynamic computed properties\");\n }\n\n return propertyName;\n};\n\nconst spreadPropertyValue = (\n property: NodePath,\n name: string,\n resolving: Set<Binding>,\n): NodePath | undefined => {\n const argument = oneChild(property, \"argument\");\n const spread = objectProperty(argument, name, resolving);\n\n if (spread !== undefined) {\n return spread;\n }\n\n if (!isStaticObject(argument)) {\n throw new Error(\"Translation options cannot contain dynamic object spreads\");\n }\n\n return undefined;\n};\n\nconst directPropertyValue = (property: NodePath, name: string): NodePath | undefined => {\n if (!property.isObjectMethod() && !property.isObjectProperty()) {\n return;\n }\n\n if (propertyKeyName(property) !== name) {\n return;\n }\n\n if (property.isObjectMethod()) {\n return property;\n }\n\n const key = oneChild(property, \"key\");\n\n return property.node.shorthand ? key : oneChild(property, \"value\");\n};\n\nconst objectPropertyEntry = (\n property: NodePath,\n name: string,\n resolving: Set<Binding>,\n): NodePath | undefined => property.isSpreadElement()\n ? spreadPropertyValue(property, name, resolving)\n : directPropertyValue(property, name);\n\nconst objectExpressionProperty = (\n value: NodePath,\n name: string,\n resolving: Set<Binding>,\n): NodePath | undefined => {\n for (const property of childPaths(value, \"properties\").toReversed()) {\n const result = objectPropertyEntry(property, name, resolving);\n\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n};\n\nconst objectProperty = (\n path: NodePath | undefined,\n name: string,\n resolving: Set<Binding> = new Set(),\n): NodePath | undefined => {\n if (path === undefined) {\n return;\n }\n\n const value = unwrapPath(path);\n const binding = constantDeclaratorBinding(value, resolving);\n\n if (binding !== undefined) {\n resolving.add(binding);\n const resolved = objectProperty(oneChild(binding.path, \"init\"), name, resolving);\n resolving.delete(binding);\n\n return resolved;\n }\n\n if (!value.isObjectExpression()) {\n return;\n }\n\n return objectExpressionProperty(value, name, resolving);\n};\n\nconst resolvedNamespaceIdentifier = (\n value: NodePath,\n resolving: Set<Binding>,\n): string[] | undefined => {\n const binding = constantDeclaratorBinding(value, resolving);\n\n if (binding === undefined) {\n return;\n }\n\n resolving.add(binding);\n const resolved = namespaceValues(oneChild(binding.path, \"init\"), resolving);\n resolving.delete(binding);\n\n return resolved;\n};\n\nconst namespaceValues = (\n path: NodePath | undefined,\n resolving: Set<Binding> = new Set(),\n): string[] => {\n const direct = literalString(path);\n\n if (direct !== undefined) {\n return [direct];\n }\n\n if (path === undefined) {\n return [];\n }\n\n const value = unwrapPath(path);\n const resolved = resolvedNamespaceIdentifier(value, resolving);\n\n if (resolved !== undefined) {\n return resolved;\n }\n\n if (!value.isArrayExpression()) {\n return [];\n }\n\n const values = childPaths(value, \"elements\").map((element) => literalString(element, resolving));\n\n return values.every((candidate): candidate is string => candidate !== undefined) ? values : [];\n};\n\nconst normalizedInfo = (namespaces: string[], keyPrefix: string | undefined): ScopeInfo => {\n const info: ScopeInfo = {};\n const defaultNs = namespaces[0];\n\n if (defaultNs !== undefined) {\n info.defaultNs = defaultNs;\n\n if (namespaces.length > 1) {\n info.namespaces = namespaces;\n }\n }\n\n if (keyPrefix !== undefined && keyPrefix.length > 0) {\n info.keyPrefix = keyPrefix;\n }\n\n return info;\n};\n\nconst isAbsentArgument = (path: NodePath): boolean => {\n if (path.isNullLiteral()) {\n return true;\n }\n\n return path.isIdentifier() &&\n path.node.name === \"undefined\" &&\n path.scope.getBinding(\"undefined\") === undefined;\n};\n\nconst staticNamespaces = (path: NodePath | undefined, file: string): string[] => {\n if (path === undefined || isAbsentArgument(path)) {\n return [];\n }\n\n const namespaces = namespaceValues(path);\n\n if (namespaces.length === 0) {\n throw new Error(`Translation namespaces must be static strings in ${file}`);\n }\n\n return namespaces;\n};\n\nconst staticKeyPrefix = (path: NodePath | undefined, file: string): string | undefined => {\n if (path === undefined || isAbsentArgument(path)) {\n return;\n }\n\n const keyPrefix = literalString(path);\n\n if (keyPrefix === undefined) {\n throw new Error(`Translation key prefixes must be static strings in ${file}`);\n }\n\n return keyPrefix;\n};\n\nconst callArguments = (path: NodePath): NodePath[] => childPaths(path, \"arguments\");\n\nconst scopeFromCall = (input: ScopeCallInput): ScopeInfo => {\n const args = callArguments(input.path);\n const options = input.optionsIndex === undefined ? undefined : args[input.optionsIndex];\n const optionPrefix = staticKeyPrefix(objectProperty(options, \"keyPrefix\"), input.file);\n const positional = input.prefixIndex === undefined ? undefined : args[input.prefixIndex];\n const positionalPrefix = staticKeyPrefix(positional, input.file);\n\n return normalizedInfo(\n staticNamespaces(args[input.namespaceIndex], input.file),\n optionPrefix ?? positionalPrefix,\n );\n};\n\nconst isApiName = (name: string): name is ApiName => API_NAME_SET.has(name);\n\nconst isApiAvailable = (moduleName: string, api: ApiName): boolean => {\n if (moduleName === GTKX_MODULE) {\n return true;\n }\n\n if (moduleName === I18NEXT_MODULE) {\n return I18NEXT_APIS.has(api);\n }\n\n return moduleName === REACT_I18NEXT_MODULE && !I18NEXT_APIS.has(api);\n};\n\nconst apiSemantic = (api: ApiName): Semantic =>\n api === \"t\" ? GLOBAL_T : { api, kind: \"api\" };\n\nconst spanKey = (node: { end?: number | null; start?: number | null }): string | undefined =>\n typeof node.start === \"number\" && typeof node.end === \"number\"\n ? `${String(node.start)}:${String(node.end)}`\n : undefined;\n\nconst pathLocation = (path: NodePath, file: string): ExtractedMessage[\"location\"] => {\n const start = path.node.loc?.start;\n\n return start === undefined\n ? { file }\n : { column: start.column, file, line: start.line };\n};\n\nconst patternLocalName = (path: NodePath): string | undefined => {\n const value = unwrapPath(path);\n\n if (value.isIdentifier()) {\n return value.node.name;\n }\n\n const left = value.isAssignmentPattern() ? oneChild(value, \"left\") : undefined;\n\n return left?.isIdentifier() === true ? left.node.name : undefined;\n};\n\nconst scopeWithPrefix = (info: ScopeInfo, keyPrefix: string): ScopeInfo => {\n const scoped = { ...info };\n\n if (keyPrefix.length === 0) {\n delete scoped.keyPrefix;\n } else {\n scoped.keyPrefix = keyPrefix;\n }\n\n return scoped;\n};\n\nconst isClassPath = (path: NodePath): boolean => path.isClass();\n\nconst isCallPath = (path: NodePath): boolean =>\n path.isCallExpression() || path.isOptionalCallExpression();\n\nconst isMemberPath = (path: NodePath): boolean =>\n path.isMemberExpression() || path.isOptionalMemberExpression();\n\nconst isStaticStringArray = (path: NodePath | undefined): boolean =>\n path !== undefined && literalString(path) === undefined && namespaceValues(path).length > 0;\n\nconst analyzeProgram = (program: NodePath, file: string): BindingExtraction =>\n new BindingAnalyzer(file).analyze(program);\n\nconst parserPlugins = (path: string): ParserPlugin[] => {\n const extension = extname(path).toLowerCase();\n const plugins: ParserPlugin[] = [\"decorators-legacy\"];\n\n if ([\".cts\", \".mts\", \".ts\", \".tsx\"].includes(extension)) {\n plugins.push(\"typescript\");\n }\n\n if ([\".cjs\", \".js\", \".jsx\", \".mjs\", \".tsx\"].includes(extension)) {\n plugins.push(\"jsx\");\n }\n\n return plugins;\n};\n\nconst extractBindings = async (code: string, path: string): Promise<BindingExtraction> => {\n const ast = await parseAsync(code, {\n babelrc: false,\n configFile: false,\n filename: path,\n parserOpts: {\n plugins: parserPlugins(path),\n sourceType: \"unambiguous\",\n },\n });\n\n if (ast === null) {\n throw new Error(`Unable to parse ${path}`);\n }\n\n let extraction: BindingExtraction | undefined;\n\n traverse(ast, {\n Program(programPath) {\n extraction = analyzeProgram(programPath, path);\n programPath.stop();\n },\n });\n\n if (extraction === undefined) {\n throw new Error(`Unable to analyze ${path}`);\n }\n\n return extraction;\n};\n\nclass BindingAnalyzer {\n private readonly bindingCache: Map<Binding, Semantic | null> = new Map();\n private readonly blockedGetFixedT: Set<string> = new Set();\n private readonly calls: Map<string, ExtractedCall> = new Map();\n private readonly errors: Set<string> = new Set();\n private readonly file: string;\n private readonly hocClasses: Map<babel.Node, TSemantic> = new Map();\n private readonly messages: ExtractedMessage[] = [];\n private readonly resolving: Set<Binding> = new Set();\n private readonly specialBindings: Map<Binding, Semantic> = new Map();\n private readonly trans: Map<string, ScopeInfo | null> = new Map();\n\n constructor(file: string) {\n this.file = file;\n }\n\n private runSemanticPass(program: NodePath): void {\n program.traverse({\n CallExpression: this.registerCallSemantics.bind(this),\n JSXElement: this.registerJsxElement.bind(this),\n OptionalCallExpression: this.registerCallSemantics.bind(this),\n VariableDeclarator: this.registerBlockedGetFixedT.bind(this),\n });\n }\n\n private runTranslationPass(program: NodePath): void {\n program.traverse({\n CallExpression: this.registerTranslationCall.bind(this),\n OptionalCallExpression: this.registerTranslationCall.bind(this),\n TaggedTemplateExpression: this.registerTaggedTranslation.bind(this),\n });\n }\n\n private importSemantic(binding: Binding): Semantic | undefined {\n const path = binding.path;\n const declaration = path.parentPath;\n\n if (!declaration.isImportDeclaration()) {\n return;\n }\n\n if (this.isTypeImport(path, declaration)) {\n return;\n }\n\n const moduleName = declaration.node.source.value;\n\n if (path.isImportNamespaceSpecifier()) {\n return SUPPORTED_MODULES.has(moduleName) ? { kind: \"namespace\", module: moduleName } : undefined;\n }\n\n return this.importSpecifierSemantic(path, moduleName);\n }\n\n private isTypeImport(path: NodePath, declaration: NodePath<babel.ImportDeclaration>): boolean {\n return declaration.node.importKind === \"type\" ||\n (path.isImportSpecifier() && path.node.importKind === \"type\");\n }\n\n private importSpecifierSemantic(path: NodePath, moduleName: string): Semantic | undefined {\n if (path.isImportDefaultSpecifier()) {\n return moduleName === I18NEXT_MODULE\n ? { kind: \"namespace\", module: moduleName }\n : undefined;\n }\n\n return path.isImportSpecifier()\n ? this.namedImportSemantic(path, moduleName)\n : undefined;\n }\n\n private namedImportSemantic(path: NodePath<babel.ImportSpecifier>, moduleName: string): Semantic | undefined {\n const imported = path.node.imported;\n const name = babel.isIdentifier(imported) ? imported.name : imported.value;\n\n return isApiName(name) && isApiAvailable(moduleName, name)\n ? apiSemantic(name)\n : undefined;\n }\n\n private semanticMember(object: Semantic, property: string): Semantic | undefined {\n if (object.kind === \"namespace\") {\n return this.namespaceMember(object.module, property);\n }\n\n return this.localSemanticMember(object, property);\n }\n\n private namespaceMember(moduleName: string, property: string): Semantic | undefined {\n return isApiName(property) && isApiAvailable(moduleName, property)\n ? apiSemantic(property)\n : undefined;\n }\n\n private localSemanticMember(object: Semantic, property: string): Semantic | undefined {\n if (object.kind === \"translationContext\") {\n return property === \"i18n\"\n ? { instance: true, kind: \"translationObject\", t: GLOBAL_T }\n : undefined;\n }\n\n return object.kind === \"translationObject\"\n ? this.translationObjectMember(object, property)\n : undefined;\n }\n\n private translationObjectMember(\n object: Extract<Semantic, { kind: \"translationObject\" }>,\n property: string,\n ): Semantic | undefined {\n if ([\"0\", \"t\"].includes(property)) {\n return object.t;\n }\n\n if (!object.instance && [\"1\", \"i18n\"].includes(property)) {\n return { instance: true, kind: \"translationObject\", t: GLOBAL_T };\n }\n\n return object.instance && [\"getFixedT\", \"init\"].includes(property)\n ? { api: property as \"getFixedT\" | \"init\", kind: \"api\" }\n : undefined;\n }\n\n private resolvePath(input: NodePath): Semantic | undefined {\n const path = unwrapPath(input);\n\n if (path.isIdentifier()) {\n return this.resolveIdentifierPath(path);\n }\n\n if (isMemberPath(path)) {\n return this.resolveMemberPath(path);\n }\n\n if (isCallPath(path)) {\n return this.resolveCallPath(path);\n }\n\n return path.isAwaitExpression()\n ? this.resolveAwaitPath(path)\n : undefined;\n }\n\n private resolveIdentifierPath(path: NodePath<babel.Identifier>): Semantic | undefined {\n const binding = path.scope.getBinding(path.node.name);\n\n return binding === undefined ? undefined : this.resolveBinding(binding);\n }\n\n private resolveMemberPath(path: NodePath): Semantic | undefined {\n const objectPath = oneChild(path, \"object\");\n const property = memberProperty(path);\n\n if (objectPath === undefined || property === undefined) {\n return;\n }\n\n const object = this.resolvePath(objectPath);\n\n return object === undefined ? undefined : this.semanticMember(object, property);\n }\n\n private resolveCallPath(path: NodePath): Semantic | undefined {\n const callee = oneChild(path, \"callee\");\n\n if (callee === undefined) {\n return;\n }\n\n const required = this.requireSemantic(path, callee);\n\n if (required !== undefined) {\n return required;\n }\n\n const called = this.resolvePath(callee);\n\n return called?.kind === \"api\" ? this.apiCallSemantic(called.api, path) : undefined;\n }\n\n private requireSemantic(path: NodePath, callee: NodePath): Semantic | undefined {\n if (!callee.isIdentifier() || callee.node.name !== \"require\") {\n return;\n }\n\n if (callee.scope.getBinding(callee.node.name) !== undefined) {\n return;\n }\n\n const moduleName = literalString(callArguments(path)[0]);\n\n return moduleName !== undefined && SUPPORTED_MODULES.has(moduleName)\n ? { kind: \"namespace\", module: moduleName }\n : undefined;\n }\n\n private apiCallSemantic(api: ApiName, path: NodePath): Semantic | undefined {\n switch (api) {\n case \"useTranslation\": {\n return this.useTranslationSemantic(path);\n }\n case \"getI18n\": {\n return { instance: true, kind: \"translationObject\", t: GLOBAL_T };\n }\n case \"getFixedT\": {\n return this.fixedTranslationSemantic(path);\n }\n case \"withTranslation\": {\n return this.translationEnhancerSemantic(path);\n }\n case \"init\": {\n return { kind: \"initPromise\" };\n }\n case \"IcuTrans\":\n case \"IcuTransWithoutContext\":\n case \"Trans\":\n case \"TransWithoutContext\":\n case \"Translation\":\n case \"t\": {\n return;\n }\n }\n }\n\n private useTranslationSemantic(path: NodePath): Semantic {\n const info = scopeFromCall({ file: this.file, namespaceIndex: 0, optionsIndex: 1, path });\n\n return {\n instance: false,\n kind: \"translationObject\",\n t: { fixed: true, info, kind: \"t\" },\n };\n }\n\n private fixedTranslationSemantic(path: NodePath): TSemantic {\n const info = scopeFromCall({\n file: this.file,\n namespaceIndex: 1,\n path,\n prefixIndex: 2,\n });\n\n return { fixed: true, info, kind: \"t\" };\n }\n\n private translationEnhancerSemantic(path: NodePath): Semantic {\n const info = scopeFromCall({ file: this.file, namespaceIndex: 0, optionsIndex: 1, path });\n\n return { info, kind: \"enhancer\" };\n }\n\n private resolveAwaitPath(path: NodePath): Semantic | undefined {\n const argument = oneChild(path, \"argument\");\n const awaited = argument === undefined ? undefined : this.resolvePath(argument);\n\n return awaited?.kind === \"initPromise\" ? GLOBAL_T : undefined;\n }\n\n private resolveBinding(binding: Binding): Semantic | undefined {\n const special = this.specialBindings.get(binding);\n\n if (special !== undefined) {\n return special;\n }\n\n return binding.constant ? this.resolveConstantBinding(binding) : undefined;\n }\n\n private resolveConstantBinding(binding: Binding): Semantic | undefined {\n const cached = this.bindingCache.get(binding);\n\n if (cached !== undefined) {\n return cached ?? undefined;\n }\n\n if (this.resolving.has(binding)) {\n return;\n }\n\n this.resolving.add(binding);\n const resolved = this.importSemantic(binding) ?? this.declaratorSemantic(binding);\n this.resolving.delete(binding);\n this.bindingCache.set(binding, resolved ?? null);\n\n return resolved;\n }\n\n private declaratorSemantic(binding: Binding): Semantic | undefined {\n const path = binding.path;\n\n if (!path.isVariableDeclarator()) {\n return;\n }\n\n const id = oneChild(path, \"id\");\n const init = oneChild(path, \"init\");\n\n if (id === undefined || init === undefined) {\n return;\n }\n\n if (id.isIdentifier() && id.node.name === binding.identifier.name) {\n return this.resolvePath(init);\n }\n\n return this.patternDeclaratorSemantic(id, init, binding.identifier.name);\n }\n\n private patternDeclaratorSemantic(id: NodePath, init: NodePath, name: string): Semantic | undefined {\n if (id.isObjectPattern()) {\n return this.objectPatternSemantic(id, init, name);\n }\n\n return id.isArrayPattern()\n ? this.arrayPatternSemantic(id, init, name)\n : undefined;\n }\n\n private objectPatternSemantic(id: NodePath, init: NodePath, name: string): Semantic | undefined {\n const object = this.resolvePath(init);\n\n if (object === undefined) {\n return;\n }\n\n for (const property of childPaths(id, \"properties\")) {\n const resolved = this.patternPropertySemantic(property, object, name);\n\n if (resolved !== undefined) {\n return resolved;\n }\n }\n\n return undefined;\n }\n\n private patternPropertySemantic(\n property: NodePath,\n object: Semantic,\n name: string,\n ): Semantic | undefined {\n if (!property.isObjectProperty()) {\n return;\n }\n\n const key = oneChild(property, \"key\");\n const value = oneChild(property, \"value\");\n\n if (key === undefined || value === undefined || patternLocalName(value) !== name) {\n return;\n }\n\n const propertyName = staticPropertyName(key);\n\n return propertyName === undefined ? undefined : this.semanticMember(object, propertyName);\n }\n\n private arrayPatternSemantic(id: NodePath, init: NodePath, name: string): Semantic | undefined {\n const object = this.resolvePath(init);\n\n if (object?.kind !== \"translationObject\") {\n return;\n }\n\n const elements = childPaths(id, \"elements\");\n\n if (elements[0] !== undefined && patternLocalName(elements[0]) === name) {\n return object.t;\n }\n\n return !object.instance && elements[1] !== undefined && patternLocalName(elements[1]) === name\n ? { instance: true, kind: \"translationObject\", t: GLOBAL_T }\n : undefined;\n }\n\n private jsxSemantic(path: NodePath): Semantic | undefined {\n if (path.isJSXIdentifier()) {\n const binding = path.scope.getBinding(path.node.name);\n\n return binding === undefined ? undefined : this.resolveBinding(binding);\n }\n\n return path.isJSXMemberExpression()\n ? this.jsxMemberSemantic(path)\n : undefined;\n }\n\n private jsxMemberSemantic(path: NodePath<babel.JSXMemberExpression>): Semantic | undefined {\n const object = oneChild(path, \"object\");\n const property = oneChild(path, \"property\");\n\n if (object === undefined || property?.isJSXIdentifier() !== true) {\n return;\n }\n\n const base = this.jsxSemantic(object);\n\n return base === undefined\n ? undefined\n : this.semanticMember(base, property.node.name);\n }\n\n private resolveFunction(input: NodePath | undefined): NodePath | undefined {\n if (input === undefined) {\n return;\n }\n\n const path = unwrapPath(input);\n\n if (path.isFunction() || path.isClass()) {\n return path;\n }\n\n if (!path.isIdentifier()) {\n return;\n }\n\n return this.resolveFunctionBinding(path.scope.getBinding(path.node.name));\n }\n\n private resolveFunctionBinding(binding: Binding | undefined): NodePath | undefined {\n if (binding?.path.isFunctionDeclaration() === true || binding?.path.isClassDeclaration() === true) {\n return binding.path;\n }\n\n return binding?.path.isVariableDeclarator() === true\n ? this.resolveFunction(oneChild(binding.path, \"init\"))\n : undefined;\n }\n\n private registerPatternBinding(path: NodePath, semantic: Semantic): void {\n const name = patternLocalName(path);\n const binding = name === undefined ? undefined : path.scope.getBinding(name);\n\n if (binding === undefined) {\n return;\n }\n\n const existing = this.specialBindings.get(binding);\n\n if (existing !== undefined && JSON.stringify(existing) !== JSON.stringify(semantic)) {\n this.errors.add(`A translation binding cannot be reused with conflicting scopes in ${this.file}`);\n\n return;\n }\n\n this.specialBindings.set(binding, semantic);\n }\n\n private registerSemanticPattern(path: NodePath, semantic: Semantic): void {\n const target = this.semanticPatternTarget(path);\n\n if (target.isIdentifier()) {\n this.registerPatternBinding(target, semantic);\n\n return;\n }\n\n if (target.isObjectPattern()) {\n this.registerObjectSemanticPattern(target, semantic);\n }\n }\n\n private semanticPatternTarget(path: NodePath): NodePath {\n const target = unwrapPath(path);\n\n return target.isAssignmentPattern()\n ? oneChild(target, \"left\") ?? target\n : target;\n }\n\n private registerObjectSemanticPattern(pattern: NodePath, semantic: Semantic): void {\n for (const property of childPaths(pattern, \"properties\")) {\n this.registerSemanticProperty(property, semantic);\n }\n }\n\n private registerSemanticProperty(property: NodePath, semantic: Semantic): void {\n if (!property.isObjectProperty()) {\n return;\n }\n\n const key = oneChild(property, \"key\");\n const value = oneChild(property, \"value\");\n const name = key === undefined ? undefined : staticPropertyName(key);\n const member = name === undefined ? undefined : this.semanticMember(semantic, name);\n\n if (value !== undefined && member !== undefined) {\n this.registerSemanticPattern(value, member);\n }\n }\n\n private registerTParameter(fn: NodePath, index: number, t: TSemantic): void {\n const parameter = childPaths(fn, \"params\")[index];\n\n if (parameter !== undefined) {\n this.registerPatternBinding(parameter, t);\n }\n }\n\n private registerHocComponent(component: NodePath | undefined, info: ScopeInfo): void {\n const target = this.resolveFunction(component);\n\n if (target === undefined) {\n return;\n }\n\n const t: TSemantic = { fixed: true, info, kind: \"t\" };\n\n if (target.isClass()) {\n this.hocClasses.set(target.node, t);\n\n return;\n }\n\n this.registerHocParameter(childPaths(target, \"params\")[0], t);\n }\n\n private registerHocParameter(parameter: NodePath | undefined, t: TSemantic): void {\n if (parameter === undefined) {\n return;\n }\n\n const unwrapped = unwrapPath(parameter);\n\n if (unwrapped.isIdentifier() || unwrapped.isAssignmentPattern()) {\n this.registerPatternBinding(unwrapped, { instance: false, kind: \"translationObject\", t });\n\n return;\n }\n\n if (unwrapped.isObjectPattern()) {\n this.registerHocObjectPattern(unwrapped, t);\n }\n }\n\n private registerHocObjectPattern(pattern: NodePath, t: TSemantic): void {\n for (const property of childPaths(pattern, \"properties\")) {\n this.registerHocProperty(property, t);\n }\n }\n\n private registerHocProperty(property: NodePath, t: TSemantic): void {\n if (!property.isObjectProperty()) {\n return;\n }\n\n const key = oneChild(property, \"key\");\n const value = oneChild(property, \"value\");\n\n if (key !== undefined && value !== undefined && staticPropertyName(key) === \"t\") {\n this.registerPatternBinding(value, t);\n }\n }\n\n private jsxAttribute(element: NodePath, name: string): NodePath | undefined {\n const opening = oneChild(element, \"openingElement\");\n\n if (opening === undefined) {\n return;\n }\n\n for (const attribute of childPaths(opening, \"attributes\").toReversed()) {\n const value = this.jsxAttributeValue(attribute, name);\n\n if (value !== undefined) {\n return value;\n }\n }\n\n return undefined;\n }\n\n private jsxAttributeValue(attribute: NodePath, name: string): NodePath | undefined {\n if (attribute.isJSXSpreadAttribute()) {\n return objectProperty(oneChild(attribute, \"argument\"), name);\n }\n\n if (!attribute.isJSXAttribute()) {\n return;\n }\n\n const attributeName = oneChild(attribute, \"name\");\n\n if (attributeName?.isJSXIdentifier() !== true || attributeName.node.name !== name) {\n return;\n }\n\n const value = oneChild(attribute, \"value\");\n\n return value?.isJSXExpressionContainer() === true ? oneChild(value, \"expression\") : value;\n }\n\n private scopeFromJsx(element: NodePath): ScopeInfo {\n return normalizedInfo(\n staticNamespaces(this.jsxAttribute(element, \"ns\"), this.file),\n staticKeyPrefix(this.jsxAttribute(element, \"keyPrefix\"), this.file),\n );\n }\n\n private addComponentMessage(input: ComponentInput): void {\n const componentKeys = this.componentKeys(input);\n\n if (componentKeys === undefined) {\n return;\n }\n\n if (!this.validateIcu(input, componentKeys)) {\n return;\n }\n\n const t = this.componentT(input.tPath);\n\n if (!t.isValid) {\n return;\n }\n\n const context = this.componentContext(input);\n\n if (!context.isValid) {\n return;\n }\n\n const scope = this.componentScope(input, componentKeys.rawKeys, t.value, context.value);\n this.addScopedComponentMessages(input, componentKeys, scope);\n }\n\n private addScopedComponentMessages(\n input: ComponentInput,\n componentKeys: ComponentKeys,\n scope: ComponentScope,\n ): void {\n if (this.componentHasCount(input)) {\n this.addPluralComponentMessages(input, componentKeys.fallback, scope);\n } else {\n this.addPointComponentMessages(input, componentKeys, scope);\n }\n }\n\n private componentKeys(input: ComponentInput): ComponentKeys | undefined {\n const optionDefault = objectProperty(input.optionsPath, \"defaultValue\");\n const fallback = literalString(input.defaultPath) ?? literalString(optionDefault);\n const explicitKeys = this.explicitComponentKeys(input.keyPath);\n\n if (explicitKeys === undefined) {\n return;\n }\n\n const rawKeys = explicitKeys.length > 0 ? explicitKeys : this.fallbackKeys(fallback);\n\n if (rawKeys.length === 0) {\n this.errors.add(`Translation components require a static key or default in ${this.file}`);\n\n return;\n }\n\n return { fallback, rawKeys };\n }\n\n private explicitComponentKeys(keyPath: NodePath | undefined): string[] | undefined {\n if (keyPath === undefined) {\n return [];\n }\n\n const keys = namespaceValues(keyPath);\n\n if (keys.length === 0) {\n this.errors.add(`Translation component keys must be static strings in ${this.file}`);\n\n return;\n }\n\n return keys;\n }\n\n private fallbackKeys(fallback: string | undefined): string[] {\n return fallback === undefined ? [] : [fallback];\n }\n\n private validateIcu(input: ComponentInput, keys: ComponentKeys): boolean {\n if (!input.isIcu) {\n return true;\n }\n\n if (keys.rawKeys.length > 1) {\n this.errors.add(`ICU translations require one static key in ${this.file}`);\n\n return false;\n }\n\n return this.validateIcuFallback(input, keys.fallback);\n }\n\n private validateIcuFallback(input: ComponentInput, fallback: string | undefined): boolean {\n if (fallback === undefined) {\n this.errors.add(`ICU translations require a static defaultTranslation in ${this.file}`);\n\n return false;\n }\n\n const withoutInterpolation = fallback.replaceAll(/\\{\\{[^{}]+\\}\\}/gu, \"\");\n\n if (/\\{[^{}]+\\}/u.test(withoutInterpolation)) {\n this.errors.add(`GTKX gettext catalogs do not support ICU MessageFormat syntax in ${this.file}`);\n\n return false;\n }\n\n return this.validateIcuCount(input, fallback);\n }\n\n private validateIcuCount(input: ComponentInput, fallback: string): boolean {\n const hasValueCount = objectProperty(input.valuesPath, \"count\") !== undefined;\n\n if (hasValueCount || /\\{\\{\\s*count\\s*\\}\\}/u.test(fallback)) {\n this.errors.add(`ICU translations cannot infer a GNU gettext plural pair in ${this.file}`);\n\n return false;\n }\n\n return true;\n }\n\n private componentT(path: NodePath | undefined): Resolution<TSemantic> {\n if (path === undefined) {\n return { isValid: true };\n }\n\n const semantic = this.resolvePath(path);\n\n if (semantic?.kind !== \"t\") {\n this.errors.add(`Translation component t props must have a statically known scope in ${this.file}`);\n\n return { isValid: false };\n }\n\n return { isValid: true, value: semantic };\n }\n\n private componentContext(input: ComponentInput): Resolution<string> {\n const optionContext = objectProperty(input.optionsPath, \"context\");\n const contextPath = input.contextPath ?? optionContext;\n\n if (contextPath === undefined) {\n return { isValid: true };\n }\n\n const context = literalString(contextPath);\n\n if (context === undefined) {\n this.errors.add(`Translation contexts must be static strings in ${this.file}`);\n\n return { isValid: false };\n }\n\n return { isValid: true, value: context };\n }\n\n private componentScope(\n input: ComponentInput,\n rawKeys: string[],\n t: TSemantic | undefined,\n context: string | undefined,\n ): ComponentScope {\n const prefix = t?.info.keyPrefix;\n const baseKeys = rawKeys.map((key) => prefix === undefined ? key : `${prefix}.${key}`);\n\n const keys = baseKeys.map((key) => context === undefined\n ? key\n : `${key}${CONTEXT_SEPARATOR}${context}`);\n\n const explicitNs = staticNamespaces(input.namespacePath, this.file)[0];\n\n return { keys, ns: explicitNs ?? t?.info.defaultNs };\n }\n\n private componentHasCount(input: ComponentInput): boolean {\n return input.countPath !== undefined ||\n objectProperty(input.optionsPath, \"count\") !== undefined ||\n objectProperty(input.valuesPath, \"count\") !== undefined;\n }\n\n private addPluralComponentMessages(\n input: ComponentInput,\n fallback: string | undefined,\n scope: ComponentScope,\n ): void {\n if (input.isIcu) {\n this.errors.add(`ICU translations cannot infer a GNU gettext plural pair in ${this.file}`);\n\n return;\n }\n\n if (this.hasUnsupportedPluralOptions(input.optionsPath)) {\n this.errors.add(`GNU gettext catalogs only support cardinal one/other source pairs in ${this.file}`);\n\n return;\n }\n\n const defaults = this.pluralDefaults(input.optionsPath, fallback);\n\n if (defaults === undefined) {\n return;\n }\n\n for (const key of scope.keys) {\n this.addPluralPair({ key, ns: scope.ns, path: input.path, ...defaults });\n }\n }\n\n private pluralDefaults(\n options: NodePath | undefined,\n fallback: string | undefined,\n ): Pick<PluralPairInput, \"plural\" | \"singular\"> | undefined {\n const singular = literalString(objectProperty(options, \"defaultValue_one\")) ?? fallback;\n const plural = literalString(objectProperty(options, \"defaultValue_other\"));\n\n if (singular === undefined || plural === undefined || singular === plural) {\n this.errors.add(\n `Count-based Trans calls require distinct static singular and plural defaults in ${this.file}`,\n );\n\n return;\n }\n\n return { plural, singular };\n }\n\n private hasUnsupportedPluralOptions(options: NodePath | undefined): boolean {\n return objectProperty(options, \"ordinal\") !== undefined ||\n objectProperty(options, \"defaultValue_zero\") !== undefined;\n }\n\n private addPluralPair(input: PluralPairInput): void {\n this.addMessage({\n defaultValue: input.singular,\n hasExplicitDefault: true,\n key: `${input.key}_one`,\n ns: input.ns,\n path: input.path,\n });\n\n this.addMessage({\n defaultValue: input.plural,\n hasExplicitDefault: true,\n key: `${input.key}_other`,\n ns: input.ns,\n path: input.path,\n });\n }\n\n private addPointComponentMessages(\n input: ComponentInput,\n componentKeys: ComponentKeys,\n scope: ComponentScope,\n ): void {\n for (const [index, key] of scope.keys.entries()) {\n const defaultValue = componentKeys.fallback ?? componentKeys.rawKeys[index] ?? key;\n\n this.addMessage({\n defaultValue,\n hasExplicitDefault: componentKeys.fallback !== undefined,\n key,\n ns: scope.ns,\n path: input.path,\n });\n }\n }\n\n private addMessage(input: MessageInput): void {\n this.messages.push({\n defaultValue: input.defaultValue,\n explicitDefault: input.hasExplicitDefault,\n key: input.key,\n location: pathLocation(input.path, this.file),\n ...(input.ns !== undefined && { ns: input.ns }),\n });\n }\n\n private markTranslationCallback(callback: NodePath | undefined, info: ScopeInfo): void {\n const fn = this.resolveFunction(callback);\n\n if (fn !== undefined && !fn.isClass()) {\n this.registerTParameter(fn, 0, { fixed: true, info, kind: \"t\" });\n this.registerTranslationContextParameter(fn);\n }\n }\n\n private registerTranslationContextParameter(fn: NodePath): void {\n const parameter = childPaths(fn, \"params\")[1];\n\n if (parameter !== undefined) {\n this.registerSemanticPattern(parameter, { kind: \"translationContext\" });\n }\n }\n\n private registerCallSemantics(path: NodePath): void {\n const callee = oneChild(path, \"callee\");\n const called = callee === undefined ? undefined : this.resolvePath(callee);\n this.registerHocCall(path, called);\n this.registerTranslationCallbackCall(path, called);\n this.registerInitCallback(path, called);\n this.registerInitPromiseCallback(path, callee);\n this.registerCallableComponent(path, called);\n }\n\n private registerHocCall(path: NodePath, called: Semantic | undefined): void {\n if (called?.kind === \"enhancer\") {\n this.registerHocComponent(callArguments(path)[0], called.info);\n }\n }\n\n private registerTranslationCallbackCall(path: NodePath, called: Semantic | undefined): void {\n if (called?.kind !== \"api\" || called.api !== \"Translation\") {\n return;\n }\n\n const props = callArguments(path)[0];\n\n const info = normalizedInfo(\n staticNamespaces(objectProperty(props, \"ns\"), this.file),\n staticKeyPrefix(objectProperty(props, \"keyPrefix\"), this.file),\n );\n\n this.markTranslationCallback(objectProperty(props, \"children\"), info);\n }\n\n private registerInitCallback(path: NodePath, called: Semantic | undefined): void {\n if (called?.kind !== \"api\" || called.api !== \"init\") {\n return;\n }\n\n const callback = callArguments(path).findLast((argument) => this.resolveFunction(argument) !== undefined);\n const fn = this.resolveFunction(callback);\n\n if (fn !== undefined && !fn.isClass()) {\n this.registerTParameter(fn, 1, GLOBAL_T);\n }\n }\n\n private registerInitPromiseCallback(path: NodePath, callee: NodePath | undefined): void {\n if (callee === undefined) {\n return;\n }\n\n if (memberProperty(callee) !== \"then\") {\n return;\n }\n\n const receiver = oneChild(unwrapPath(callee), \"object\");\n const received = receiver === undefined ? undefined : this.resolvePath(receiver);\n\n if (received?.kind !== \"initPromise\") {\n return;\n }\n\n this.registerInitPromiseFunction(this.resolveFunction(callArguments(path)[0]));\n }\n\n private registerInitPromiseFunction(fn: NodePath | undefined): void {\n if (fn === undefined || fn.isClass()) {\n return;\n }\n\n this.registerTParameter(fn, 0, GLOBAL_T);\n }\n\n private registerCallableComponent(path: NodePath, called: Semantic | undefined): void {\n if (called?.kind !== \"api\") {\n return;\n }\n\n if ([\"IcuTrans\", \"IcuTransWithoutContext\"].includes(called.api)) {\n this.addComponentMessage(this.callableIcuInput(path));\n }\n\n if ([\"Trans\", \"TransWithoutContext\"].includes(called.api)) {\n this.addComponentMessage(this.callableTransInput(path));\n }\n }\n\n private callableIcuInput(path: NodePath): ComponentInput {\n const props = callArguments(path)[0];\n\n return {\n defaultPath: objectProperty(props, \"defaultTranslation\"),\n isIcu: true,\n keyPath: objectProperty(props, \"i18nKey\"),\n namespacePath: objectProperty(props, \"ns\"),\n path,\n tPath: objectProperty(props, \"t\"),\n valuesPath: objectProperty(props, \"values\"),\n };\n }\n\n private callableTransInput(path: NodePath): ComponentInput {\n const props = callArguments(path)[0];\n\n return {\n contextPath: objectProperty(props, \"context\"),\n countPath: objectProperty(props, \"count\"),\n defaultPath: objectProperty(props, \"defaults\") ?? objectProperty(props, \"children\"),\n isIcu: false,\n keyPath: objectProperty(props, \"i18nKey\"),\n namespacePath: objectProperty(props, \"ns\"),\n optionsPath: objectProperty(props, \"tOptions\"),\n path,\n tPath: objectProperty(props, \"t\"),\n valuesPath: objectProperty(props, \"values\"),\n };\n }\n\n private registerBlockedGetFixedT(path: NodePath): void {\n const callee = this.possibleGetFixedCallee(path);\n\n if (callee === undefined) {\n return;\n }\n\n const semantic = this.resolvePath(callee);\n\n if (this.isGetFixedApi(semantic)) {\n return;\n }\n\n const key = spanKey(path.node);\n\n if (key !== undefined) {\n this.blockedGetFixedT.add(key);\n }\n }\n\n private possibleGetFixedCallee(path: NodePath): NodePath | undefined {\n const init = oneChild(path, \"init\");\n\n if (!init?.isCallExpression()) {\n return;\n }\n\n const callee = oneChild(init, \"callee\");\n\n return callee !== undefined && memberProperty(callee) === \"getFixedT\"\n ? callee\n : undefined;\n }\n\n private isGetFixedApi(semantic: Semantic | undefined): boolean {\n return semantic?.kind === \"api\" && semantic.api === \"getFixedT\";\n }\n\n private registerJsxElement(path: NodePath): void {\n const opening = oneChild(path, \"openingElement\");\n const name = opening === undefined ? undefined : oneChild(opening, \"name\");\n const component = name === undefined ? undefined : this.jsxSemantic(name);\n\n if (opening === undefined || component?.kind !== \"api\") {\n return;\n }\n\n this.registerApiJsx(path, opening, component.api);\n }\n\n private registerApiJsx(path: NodePath, opening: NodePath, api: ApiName): void {\n if ([\"Trans\", \"TransWithoutContext\"].includes(api)) {\n this.registerTransJsx(path, opening);\n\n return;\n }\n\n if (api === \"Translation\") {\n this.registerTranslationJsx(path);\n\n return;\n }\n\n if ([\"IcuTrans\", \"IcuTransWithoutContext\"].includes(api)) {\n this.addComponentMessage(this.jsxIcuInput(path));\n }\n }\n\n private registerTransJsx(path: NodePath, opening: NodePath): void {\n if (!this.validateTransJsxProps(path, opening)) {\n return;\n }\n\n const key = spanKey(path.node);\n\n if (key === undefined) {\n return;\n }\n\n const scope = this.transJsxScope(path);\n\n if (!scope.isValid) {\n return;\n }\n\n this.trans.set(key, scope.value ?? null);\n }\n\n private validateTransJsxProps(path: NodePath, opening: NodePath): boolean {\n const hasSpread = childPaths(opening, \"attributes\").some((attribute) => attribute.isJSXSpreadAttribute());\n\n if (hasSpread) {\n this.errors.add(`Trans JSX props must be written explicitly for static extraction in ${this.file}`);\n\n return false;\n }\n\n if (isStaticStringArray(this.jsxAttribute(path, \"i18nKey\"))) {\n this.errors.add(`Trans JSX i18nKey arrays are not supported by static extraction in ${this.file}`);\n\n return false;\n }\n\n return true;\n }\n\n private transJsxScope(path: NodePath): Resolution<ScopeInfo> {\n const tProp = this.jsxAttribute(path, \"t\");\n\n if (tProp === undefined) {\n return { isValid: true };\n }\n\n const semantic = this.resolvePath(tProp);\n\n if (semantic?.kind !== \"t\") {\n this.errors.add(`Trans t props must have a statically known scope in ${this.file}`);\n\n return { isValid: false };\n }\n\n if (!this.validatePrefixedTransNamespace(path, semantic)) {\n return { isValid: false };\n }\n\n return { isValid: true, value: semantic.info };\n }\n\n private validatePrefixedTransNamespace(path: NodePath, t: TSemantic): boolean {\n if (t.info.keyPrefix === undefined || this.jsxAttribute(path, \"ns\") === undefined) {\n return true;\n }\n\n this.errors.add(`Prefixed Trans components cannot also override ns during static extraction in ${this.file}`);\n\n return false;\n }\n\n private registerTranslationJsx(path: NodePath): void {\n const info = this.scopeFromJsx(path);\n this.markTranslationCallback(this.jsxAttribute(path, \"children\"), info);\n\n for (const child of childPaths(path, \"children\")) {\n if (child.isJSXExpressionContainer()) {\n this.markTranslationCallback(oneChild(child, \"expression\"), info);\n }\n }\n }\n\n private jsxIcuInput(path: NodePath): ComponentInput {\n return {\n defaultPath: this.jsxAttribute(path, \"defaultTranslation\"),\n isIcu: true,\n keyPath: this.jsxAttribute(path, \"i18nKey\"),\n namespacePath: this.jsxAttribute(path, \"ns\"),\n path,\n tPath: this.jsxAttribute(path, \"t\"),\n valuesPath: this.jsxAttribute(path, \"values\"),\n };\n }\n\n private classT(callee: NodePath): TSemantic | undefined {\n if (memberProperty(callee) !== \"t\") {\n return;\n }\n\n const object = oneChild(unwrapPath(callee), \"object\");\n\n if (object === undefined || memberProperty(object) !== \"props\") {\n return;\n }\n\n const receiver = oneChild(unwrapPath(object), \"object\");\n\n if (receiver?.isThisExpression() !== true) {\n return;\n }\n\n const owner = callee.findParent(isClassPath);\n\n return owner === null ? undefined : this.hocClasses.get(owner.node);\n }\n\n private optionsKeyPrefix(call: NodePath): NodePath | undefined {\n for (const argument of callArguments(call).slice(1)) {\n const keyPrefix = objectProperty(argument, \"keyPrefix\");\n\n if (keyPrefix !== undefined) {\n return keyPrefix;\n }\n }\n\n return undefined;\n }\n\n private registerTranslationCall(path: NodePath): void {\n const callee = oneChild(path, \"callee\");\n\n if (callee === undefined) {\n return;\n }\n\n const resolved = this.resolvePath(callee);\n const t = resolved?.kind === \"t\" ? resolved : this.classT(callee);\n const key = spanKey(path.node);\n\n if (t === undefined || key === undefined) {\n return;\n }\n\n const info = this.translationCallScope(path, t);\n\n if (info !== undefined) {\n this.calls.set(key, { info, key });\n }\n }\n\n private translationCallScope(path: NodePath, t: TSemantic): ScopeInfo | undefined {\n const keyPrefix = this.optionsKeyPrefix(path);\n\n if (keyPrefix === undefined) {\n return t.info;\n }\n\n const literalPrefix = literalString(keyPrefix);\n\n if (literalPrefix === undefined) {\n this.errors.add(`Translation keyPrefix options must be static strings in ${this.file}`);\n\n return;\n }\n\n if (!t.fixed) {\n this.errors.add(`keyPrefix options require a fixed translation function in ${this.file}`);\n\n return;\n }\n\n return scopeWithPrefix(t.info, literalPrefix);\n }\n\n private registerTaggedTranslation(path: NodePath): void {\n const tag = oneChild(path, \"tag\");\n const resolved = tag === undefined ? undefined : this.resolvePath(tag);\n\n if (resolved?.kind === \"t\") {\n this.errors.add(\n `Tagged-template translations are not compatible with strict GTKX codegen in ${this.file}`,\n );\n }\n }\n\n analyze(program: NodePath): BindingExtraction {\n this.runSemanticPass(program);\n this.bindingCache.clear();\n this.runTranslationPass(program);\n\n return {\n blockedGetFixedT: this.blockedGetFixedT,\n calls: this.calls,\n errors: [...this.errors],\n messages: this.messages,\n trans: this.trans,\n };\n }\n}\n\nexport { type BindingExtraction, type ScopeInfo, extractBindings };\n"]}
@@ -1,8 +0,0 @@
1
- import type { Plugin } from "i18next-cli";
2
- type GtkxExtractorPlugin = {
3
- plugin: Plugin;
4
- transComponents: string[];
5
- };
6
- declare const gtkxExtractorPlugin: () => GtkxExtractorPlugin;
7
- export { gtkxExtractorPlugin };
8
- //# sourceMappingURL=extractor-plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extractor-plugin.d.ts","sourceRoot":"","sources":["../../src/i18n/extractor-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAC;AAOzD,KAAK,mBAAmB,GAAG;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AA8XF,QAAA,MAAM,mBAAmB,QAAO,mBAkB/B,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,247 +0,0 @@
1
- import { extractBindings, } from "./binding-extractor.js";
2
- const emptyExtraction = () => ({
3
- blockedGetFixedT: new Set(),
4
- calls: new Map(),
5
- errors: [],
6
- messages: [],
7
- trans: new Map(),
8
- });
9
- const isRecord = (value) => typeof value === "object" && value !== null;
10
- const nodeSpanKey = (node) => {
11
- if (!isRecord(node.span)) {
12
- return;
13
- }
14
- return typeof node.span.start === "number" && typeof node.span.end === "number"
15
- ? `${String(node.span.start)}:${String(node.span.end)}`
16
- : undefined;
17
- };
18
- const identifier = (value, source) => {
19
- const span = isRecord(source) && isRecord(source.span) ? source.span : { end: 0, start: 0 };
20
- return {
21
- ctxt: 0,
22
- optional: false,
23
- span,
24
- type: "Identifier",
25
- value,
26
- };
27
- };
28
- const sentinelFor = (code) => {
29
- let sentinel = "__gtkxI18nSentinel";
30
- while (new RegExp(String.raw `\b${sentinel}\b`, "u").test(code)) {
31
- sentinel += "_";
32
- }
33
- return sentinel;
34
- };
35
- const canonicalSource = (code) => {
36
- const hasBom = code.startsWith("\u{FEFF}");
37
- let hashbangIndex = -1;
38
- if (code.startsWith("#!")) {
39
- hashbangIndex = 0;
40
- }
41
- else if (hasBom && code.startsWith("#!", 1)) {
42
- hashbangIndex = 1;
43
- }
44
- let canonical = hasBom ? ` ${code.slice(1)}` : code;
45
- if (hashbangIndex !== -1) {
46
- canonical = `${canonical.slice(0, hashbangIndex)}//${canonical.slice(hashbangIndex + 2)}`;
47
- }
48
- return `;${canonical}`;
49
- };
50
- const replaceCallCallee = (node, sentinel) => {
51
- node.callee = identifier(sentinel, node.callee);
52
- };
53
- const replaceJsxName = (element, sentinel) => {
54
- if (!isRecord(element)) {
55
- return;
56
- }
57
- if (isRecord(element.opening)) {
58
- element.opening.name = identifier(sentinel, element.opening.name);
59
- }
60
- if (isRecord(element.closing)) {
61
- element.closing.name = identifier(sentinel, element.closing.name);
62
- }
63
- };
64
- const isJsxAttribute = (value) => isRecord(value) && value.type === "JSXAttribute";
65
- const isTAttributeName = (value) => isRecord(value) && value.value === "t";
66
- const isExpressionContainer = (value) => isRecord(value) && value.type === "JSXExpressionContainer";
67
- const transTExpression = (attribute) => {
68
- if (!isJsxAttribute(attribute)) {
69
- return;
70
- }
71
- if (!isTAttributeName(attribute.name)) {
72
- return;
73
- }
74
- if (!isExpressionContainer(attribute.value)) {
75
- return;
76
- }
77
- return attribute.value;
78
- };
79
- const replaceTransTProp = (element, sentinel, info, context) => {
80
- if (info === null || !isRecord(element.opening) || !Array.isArray(element.opening.attributes)) {
81
- return;
82
- }
83
- for (const attribute of element.opening.attributes) {
84
- const expression = transTExpression(attribute);
85
- if (expression === undefined) {
86
- continue;
87
- }
88
- context.setVarInScope(sentinel, info);
89
- expression.expression = identifier(sentinel, expression.expression);
90
- return;
91
- }
92
- };
93
- const reconcileBlockedNode = (value, key, extraction, reconciled) => {
94
- if (value.type !== "VariableDeclarator") {
95
- return;
96
- }
97
- if (!extraction.blockedGetFixedT.has(key)) {
98
- return;
99
- }
100
- blockUnrelatedGetFixedT(value);
101
- reconciled.blocked.add(key);
102
- };
103
- const reconcileCallNode = (value, key, extraction, reconciled) => {
104
- if (value.type === "CallExpression" && extraction.calls.has(key)) {
105
- reconciled.calls.add(key);
106
- }
107
- };
108
- const reconcileTransNode = (value, key, extraction, reconciled) => {
109
- if (value.type === "JSXElement" && extraction.trans.has(key)) {
110
- reconciled.trans.add(key);
111
- }
112
- };
113
- const reconcileNode = (value, extraction, reconciled) => {
114
- const key = nodeSpanKey(value);
115
- if (key === undefined) {
116
- return;
117
- }
118
- reconcileBlockedNode(value, key, extraction, reconciled);
119
- reconcileCallNode(value, key, extraction, reconciled);
120
- reconcileTransNode(value, key, extraction, reconciled);
121
- };
122
- const visitModuleChild = (child, extraction, reconciled) => {
123
- if (Array.isArray(child)) {
124
- for (const item of child) {
125
- visitModuleNode(item, extraction, reconciled);
126
- }
127
- return;
128
- }
129
- visitModuleNode(child, extraction, reconciled);
130
- };
131
- const visitModuleNode = (value, extraction, reconciled) => {
132
- if (!isRecord(value)) {
133
- return;
134
- }
135
- reconcileNode(value, extraction, reconciled);
136
- for (const [name, child] of Object.entries(value)) {
137
- if (name !== "span") {
138
- visitModuleChild(child, extraction, reconciled);
139
- }
140
- }
141
- };
142
- const wasExtractionReconciled = (extraction, reconciled) => reconciled.blocked.size === extraction.blockedGetFixedT.size &&
143
- reconciled.calls.size === extraction.calls.size &&
144
- reconciled.trans.size === extraction.trans.size;
145
- const blockUnrelatedGetFixedT = (declarator) => {
146
- if (!isRecord(declarator.init) || !isRecord(declarator.init.callee)) {
147
- return;
148
- }
149
- const callee = declarator.init.callee;
150
- if (callee.type === "MemberExpression" &&
151
- isRecord(callee.property) &&
152
- callee.property.value === "getFixedT") {
153
- callee.property.value = "__gtkxIgnoredGetFixedT";
154
- }
155
- };
156
- const prepareModule = (module, extraction, context) => {
157
- const reconciled = {
158
- blocked: new Set(),
159
- calls: new Set(),
160
- trans: new Set(),
161
- };
162
- visitModuleNode(module, extraction, reconciled);
163
- if (!wasExtractionReconciled(extraction, reconciled)) {
164
- context.logger.warn("GTKX could not reconcile the binding-aware and i18next syntax trees");
165
- }
166
- };
167
- const submitMessages = (extraction, context) => {
168
- for (const error of extraction.errors) {
169
- context.logger.warn(error);
170
- }
171
- for (const message of extraction.messages) {
172
- context.addKey({
173
- key: message.key,
174
- defaultValue: message.defaultValue,
175
- explicitDefault: message.explicitDefault,
176
- locations: [message.location],
177
- ...(message.ns !== undefined && { ns: message.ns }),
178
- });
179
- }
180
- };
181
- const loadSource = async (state, transComponents, code, path) => {
182
- const canonical = canonicalSource(code);
183
- state.extraction = await extractBindings(canonical, path);
184
- state.sentinel = sentinelFor(canonical);
185
- transComponents.splice(0, transComponents.length, state.sentinel);
186
- return canonical;
187
- };
188
- const visitCall = (state, node, key, context) => {
189
- const call = state.extraction.calls.get(key);
190
- if (call !== undefined) {
191
- context.setVarInScope(state.sentinel, call.info);
192
- replaceCallCallee(node, state.sentinel);
193
- }
194
- };
195
- const visitTrans = (state, node, key, context) => {
196
- const transInfo = state.extraction.trans.get(key);
197
- if (transInfo !== undefined) {
198
- const tSentinel = `${state.sentinel}T`;
199
- replaceJsxName(node, state.sentinel);
200
- replaceTransTProp(node, tSentinel, transInfo, context);
201
- }
202
- };
203
- const visitMatchedNode = (state, node, key, context) => {
204
- if (node.type === "VariableDeclarator" && state.extraction.blockedGetFixedT.has(key)) {
205
- blockUnrelatedGetFixedT(node);
206
- return;
207
- }
208
- if (node.type === "CallExpression") {
209
- visitCall(state, node, key, context);
210
- return;
211
- }
212
- if (node.type === "JSXElement") {
213
- visitTrans(state, node, key, context);
214
- }
215
- };
216
- const visitNode = (state, node, context) => {
217
- if (!isRecord(node)) {
218
- return;
219
- }
220
- if (node.type === "Module") {
221
- prepareModule(node, state.extraction, context);
222
- submitMessages(state.extraction, context);
223
- return;
224
- }
225
- const key = nodeSpanKey(node);
226
- if (key !== undefined) {
227
- visitMatchedNode(state, node, key, context);
228
- }
229
- };
230
- const gtkxExtractorPlugin = () => {
231
- const state = {
232
- extraction: emptyExtraction(),
233
- sentinel: "__gtkxI18nSentinel",
234
- };
235
- const transComponents = [];
236
- const plugin = {
237
- name: "gtkx-react-i18next",
238
- onLoad: loadSource.bind(undefined, state, transComponents),
239
- onVisitNode: visitNode.bind(undefined, state),
240
- };
241
- return {
242
- plugin,
243
- transComponents,
244
- };
245
- };
246
- export { gtkxExtractorPlugin };
247
- //# sourceMappingURL=extractor-plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extractor-plugin.js","sourceRoot":"","sources":["../../src/i18n/extractor-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Plugin, PluginContext } from \"i18next-cli\";\nimport {\n type BindingExtraction,\n extractBindings,\n type ScopeInfo,\n} from \"./binding-extractor.js\";\n\ntype GtkxExtractorPlugin = {\n plugin: Plugin;\n transComponents: string[];\n};\n\ntype ExtractorState = {\n extraction: BindingExtraction;\n sentinel: string;\n};\n\ntype ReconciledNodes = {\n blocked: Set<string>;\n calls: Set<string>;\n trans: Set<string>;\n};\n\nconst emptyExtraction = (): BindingExtraction => ({\n blockedGetFixedT: new Set(),\n calls: new Map(),\n errors: [],\n messages: [],\n trans: new Map(),\n});\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nconst nodeSpanKey = (node: Record<string, unknown>): string | undefined => {\n if (!isRecord(node.span)) {\n return;\n }\n\n return typeof node.span.start === \"number\" && typeof node.span.end === \"number\"\n ? `${String(node.span.start)}:${String(node.span.end)}`\n : undefined;\n};\n\nconst identifier = (value: string, source: unknown): Record<string, unknown> => {\n const span = isRecord(source) && isRecord(source.span) ? source.span : { end: 0, start: 0 };\n\n return {\n ctxt: 0,\n optional: false,\n span,\n type: \"Identifier\",\n value,\n };\n};\n\nconst sentinelFor = (code: string): string => {\n let sentinel = \"__gtkxI18nSentinel\";\n\n while (new RegExp(String.raw`\\b${sentinel}\\b`, \"u\").test(code)) {\n sentinel += \"_\";\n }\n\n return sentinel;\n};\n\nconst canonicalSource = (code: string): string => {\n const hasBom = code.startsWith(\"\\u{FEFF}\");\n let hashbangIndex = -1;\n\n if (code.startsWith(\"#!\")) {\n hashbangIndex = 0;\n } else if (hasBom && code.startsWith(\"#!\", 1)) {\n hashbangIndex = 1;\n }\n\n let canonical = hasBom ? ` ${code.slice(1)}` : code;\n\n if (hashbangIndex !== -1) {\n canonical = `${canonical.slice(0, hashbangIndex)}//${canonical.slice(hashbangIndex + 2)}`;\n }\n\n return `;${canonical}`;\n};\n\nconst replaceCallCallee = (node: Record<string, unknown>, sentinel: string): void => {\n node.callee = identifier(sentinel, node.callee);\n};\n\nconst replaceJsxName = (element: unknown, sentinel: string): void => {\n if (!isRecord(element)) {\n return;\n }\n\n if (isRecord(element.opening)) {\n element.opening.name = identifier(sentinel, element.opening.name);\n }\n\n if (isRecord(element.closing)) {\n element.closing.name = identifier(sentinel, element.closing.name);\n }\n};\n\nconst isJsxAttribute = (value: unknown): value is Record<string, unknown> =>\n isRecord(value) && value.type === \"JSXAttribute\";\n\nconst isTAttributeName = (value: unknown): boolean =>\n isRecord(value) && value.value === \"t\";\n\nconst isExpressionContainer = (value: unknown): value is Record<string, unknown> =>\n isRecord(value) && value.type === \"JSXExpressionContainer\";\n\nconst transTExpression = (attribute: unknown): Record<string, unknown> | undefined => {\n if (!isJsxAttribute(attribute)) {\n return;\n }\n\n if (!isTAttributeName(attribute.name)) {\n return;\n }\n\n if (!isExpressionContainer(attribute.value)) {\n return;\n }\n\n return attribute.value;\n};\n\nconst replaceTransTProp = (\n element: Record<string, unknown>,\n sentinel: string,\n info: ScopeInfo | null,\n context: PluginContext,\n): void => {\n if (info === null || !isRecord(element.opening) || !Array.isArray(element.opening.attributes)) {\n return;\n }\n\n for (const attribute of element.opening.attributes) {\n const expression = transTExpression(attribute);\n\n if (expression === undefined) {\n continue;\n }\n\n context.setVarInScope(sentinel, info);\n expression.expression = identifier(sentinel, expression.expression);\n\n return;\n }\n};\n\nconst reconcileBlockedNode = (\n value: Record<string, unknown>,\n key: string,\n extraction: BindingExtraction,\n reconciled: ReconciledNodes,\n): void => {\n if (value.type !== \"VariableDeclarator\") {\n return;\n }\n\n if (!extraction.blockedGetFixedT.has(key)) {\n return;\n }\n\n blockUnrelatedGetFixedT(value);\n reconciled.blocked.add(key);\n};\n\nconst reconcileCallNode = (\n value: Record<string, unknown>,\n key: string,\n extraction: BindingExtraction,\n reconciled: ReconciledNodes,\n): void => {\n if (value.type === \"CallExpression\" && extraction.calls.has(key)) {\n reconciled.calls.add(key);\n }\n};\n\nconst reconcileTransNode = (\n value: Record<string, unknown>,\n key: string,\n extraction: BindingExtraction,\n reconciled: ReconciledNodes,\n): void => {\n if (value.type === \"JSXElement\" && extraction.trans.has(key)) {\n reconciled.trans.add(key);\n }\n};\n\nconst reconcileNode = (\n value: Record<string, unknown>,\n extraction: BindingExtraction,\n reconciled: ReconciledNodes,\n): void => {\n const key = nodeSpanKey(value);\n\n if (key === undefined) {\n return;\n }\n\n reconcileBlockedNode(value, key, extraction, reconciled);\n reconcileCallNode(value, key, extraction, reconciled);\n reconcileTransNode(value, key, extraction, reconciled);\n};\n\nconst visitModuleChild = (\n child: unknown,\n extraction: BindingExtraction,\n reconciled: ReconciledNodes,\n): void => {\n if (Array.isArray(child)) {\n for (const item of child) {\n visitModuleNode(item, extraction, reconciled);\n }\n\n return;\n }\n\n visitModuleNode(child, extraction, reconciled);\n};\n\nconst visitModuleNode = (\n value: unknown,\n extraction: BindingExtraction,\n reconciled: ReconciledNodes,\n): void => {\n if (!isRecord(value)) {\n return;\n }\n\n reconcileNode(value, extraction, reconciled);\n\n for (const [name, child] of Object.entries(value)) {\n if (name !== \"span\") {\n visitModuleChild(child, extraction, reconciled);\n }\n }\n};\n\nconst wasExtractionReconciled = (\n extraction: BindingExtraction,\n reconciled: ReconciledNodes,\n): boolean =>\n reconciled.blocked.size === extraction.blockedGetFixedT.size &&\n reconciled.calls.size === extraction.calls.size &&\n reconciled.trans.size === extraction.trans.size;\n\nconst blockUnrelatedGetFixedT = (declarator: Record<string, unknown>): void => {\n if (!isRecord(declarator.init) || !isRecord(declarator.init.callee)) {\n return;\n }\n\n const callee = declarator.init.callee;\n\n if (\n callee.type === \"MemberExpression\" &&\n isRecord(callee.property) &&\n callee.property.value === \"getFixedT\"\n ) {\n callee.property.value = \"__gtkxIgnoredGetFixedT\";\n }\n};\n\nconst prepareModule = (\n module: Record<string, unknown>,\n extraction: BindingExtraction,\n context: PluginContext,\n): void => {\n const reconciled: ReconciledNodes = {\n blocked: new Set(),\n calls: new Set(),\n trans: new Set(),\n };\n\n visitModuleNode(module, extraction, reconciled);\n\n if (!wasExtractionReconciled(extraction, reconciled)) {\n context.logger.warn(\"GTKX could not reconcile the binding-aware and i18next syntax trees\");\n }\n};\n\nconst submitMessages = (\n extraction: BindingExtraction,\n context: PluginContext,\n): void => {\n for (const error of extraction.errors) {\n context.logger.warn(error);\n }\n\n for (const message of extraction.messages) {\n context.addKey({\n key: message.key,\n defaultValue: message.defaultValue,\n explicitDefault: message.explicitDefault,\n locations: [message.location],\n ...(message.ns !== undefined && { ns: message.ns }),\n });\n }\n};\n\nconst loadSource = async (\n state: ExtractorState,\n transComponents: string[],\n code: string,\n path: string,\n): Promise<string> => {\n const canonical = canonicalSource(code);\n state.extraction = await extractBindings(canonical, path);\n state.sentinel = sentinelFor(canonical);\n transComponents.splice(0, transComponents.length, state.sentinel);\n\n return canonical;\n};\n\nconst visitCall = (\n state: ExtractorState,\n node: Record<string, unknown>,\n key: string,\n context: PluginContext,\n): void => {\n const call = state.extraction.calls.get(key);\n\n if (call !== undefined) {\n context.setVarInScope(state.sentinel, call.info);\n replaceCallCallee(node, state.sentinel);\n }\n};\n\nconst visitTrans = (\n state: ExtractorState,\n node: Record<string, unknown>,\n key: string,\n context: PluginContext,\n): void => {\n const transInfo = state.extraction.trans.get(key);\n\n if (transInfo !== undefined) {\n const tSentinel = `${state.sentinel}T`;\n replaceJsxName(node, state.sentinel);\n replaceTransTProp(node, tSentinel, transInfo, context);\n }\n};\n\nconst visitMatchedNode = (\n state: ExtractorState,\n node: Record<string, unknown>,\n key: string,\n context: PluginContext,\n): void => {\n if (node.type === \"VariableDeclarator\" && state.extraction.blockedGetFixedT.has(key)) {\n blockUnrelatedGetFixedT(node);\n\n return;\n }\n\n if (node.type === \"CallExpression\") {\n visitCall(state, node, key, context);\n\n return;\n }\n\n if (node.type === \"JSXElement\") {\n visitTrans(state, node, key, context);\n }\n};\n\nconst visitNode = (\n state: ExtractorState,\n node: unknown,\n context: PluginContext,\n): void => {\n if (!isRecord(node)) {\n return;\n }\n\n if (node.type === \"Module\") {\n prepareModule(node, state.extraction, context);\n submitMessages(state.extraction, context);\n\n return;\n }\n\n const key = nodeSpanKey(node);\n\n if (key !== undefined) {\n visitMatchedNode(state, node, key, context);\n }\n};\n\nconst gtkxExtractorPlugin = (): GtkxExtractorPlugin => {\n const state: ExtractorState = {\n extraction: emptyExtraction(),\n sentinel: \"__gtkxI18nSentinel\",\n };\n\n const transComponents: string[] = [];\n\n const plugin: Plugin = {\n name: \"gtkx-react-i18next\",\n onLoad: loadSource.bind(undefined, state, transComponents),\n onVisitNode: visitNode.bind(undefined, state),\n };\n\n return {\n plugin,\n transComponents,\n };\n};\n\nexport { gtkxExtractorPlugin };\n"]}
@@ -1,4 +0,0 @@
1
- declare const DATA_IMPORT_PREFIX = "#data";
2
- declare const resolveDataDir: (root: string) => string | null;
3
- export { DATA_IMPORT_PREFIX, resolveDataDir };
4
- //# sourceMappingURL=data-dir.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-dir.d.ts","sourceRoot":"","sources":["../../src/internal/data-dir.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,kBAAkB,UAAU,CAAC;AAsCnC,QAAA,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IA0B/C,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC"}
@@ -1,52 +0,0 @@
1
- import { readFileSync } from "node:fs";
2
- import { join } from "node:path";
3
- const DATA_IMPORT_PREFIX = "#data";
4
- const DATA_IMPORT_KEY = `${DATA_IMPORT_PREFIX}/*`;
5
- const CONDITION_PRIORITY = ["default", "import", "node"];
6
- const DATA_TARGET_PATTERN = /^\.?\/?(.+?)\/\*$/;
7
- const isConditionMap = (entry) => entry !== null && typeof entry === "object" && !Array.isArray(entry);
8
- const conditionTarget = (conditions) => {
9
- for (const condition of CONDITION_PRIORITY) {
10
- const value = conditions[condition];
11
- if (typeof value === "string") {
12
- return value;
13
- }
14
- }
15
- return null;
16
- };
17
- const targetString = (entry) => {
18
- if (typeof entry === "string") {
19
- return entry;
20
- }
21
- if (isConditionMap(entry)) {
22
- return conditionTarget(entry);
23
- }
24
- return null;
25
- };
26
- const directoryFromTarget = (target) => {
27
- const match = DATA_TARGET_PATTERN.exec(target);
28
- return match?.[1] ?? null;
29
- };
30
- const resolveDataDir = (root) => {
31
- let manifest;
32
- try {
33
- manifest = JSON.parse(readFileSync(join(root, "package.json"), "utf8"));
34
- }
35
- catch {
36
- return null;
37
- }
38
- if (!isConditionMap(manifest)) {
39
- return null;
40
- }
41
- const imports = manifest.imports;
42
- if (!isConditionMap(imports)) {
43
- return null;
44
- }
45
- const target = targetString(imports[DATA_IMPORT_KEY]);
46
- if (target === null) {
47
- return null;
48
- }
49
- return directoryFromTarget(target);
50
- };
51
- export { DATA_IMPORT_PREFIX, resolveDataDir };
52
- //# sourceMappingURL=data-dir.js.map