@gtkx/cli 1.3.0 → 1.5.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/README.md +5 -4
- package/dist/builder.d.ts +1 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +6 -6
- package/dist/builder.js.map +1 -1
- package/dist/codegen/run-codegen.d.ts +3 -2
- package/dist/codegen/run-codegen.d.ts.map +1 -1
- package/dist/codegen/run-codegen.js +41 -12
- package/dist/codegen/run-codegen.js.map +1 -1
- package/dist/commands/build.d.ts +0 -4
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +0 -5
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/codegen.d.ts.map +1 -1
- package/dist/commands/codegen.js +2 -4
- package/dist/commands/codegen.js.map +1 -1
- package/dist/deploy/depends.d.ts +2 -2
- package/dist/deploy/depends.d.ts.map +1 -1
- package/dist/deploy/depends.js +30 -15
- package/dist/deploy/depends.js.map +1 -1
- package/dist/deploy/freedesktop/localize.d.ts +6 -0
- package/dist/deploy/freedesktop/localize.d.ts.map +1 -0
- package/dist/deploy/freedesktop/localize.js +107 -0
- package/dist/deploy/freedesktop/localize.js.map +1 -0
- package/dist/deploy/install-hints.d.ts.map +1 -1
- package/dist/deploy/install-hints.js +5 -0
- package/dist/deploy/install-hints.js.map +1 -1
- package/dist/deploy/nfpm/config.js +1 -1
- package/dist/deploy/nfpm/config.js.map +1 -1
- package/dist/deploy/node-runtime/elf.d.ts +1 -1
- package/dist/deploy/node-runtime/elf.d.ts.map +1 -1
- package/dist/deploy/node-runtime/elf.js +2 -2
- package/dist/deploy/node-runtime/elf.js.map +1 -1
- package/dist/deploy/node-runtime/index.js +2 -2
- package/dist/deploy/node-runtime/index.js.map +1 -1
- package/dist/deploy/notices/collect.d.ts +3 -1
- package/dist/deploy/notices/collect.d.ts.map +1 -1
- package/dist/deploy/notices/collect.js +2 -2
- package/dist/deploy/notices/collect.js.map +1 -1
- package/dist/deploy/notices/packages.d.ts +2 -1
- package/dist/deploy/notices/packages.d.ts.map +1 -1
- package/dist/deploy/notices/packages.js +4 -27
- package/dist/deploy/notices/packages.js.map +1 -1
- package/dist/deploy/payload/icons.d.ts +7 -3
- package/dist/deploy/payload/icons.d.ts.map +1 -1
- package/dist/deploy/payload/icons.js +46 -28
- package/dist/deploy/payload/icons.js.map +1 -1
- package/dist/deploy/payload/launcher.d.ts.map +1 -1
- package/dist/deploy/payload/launcher.js +2 -0
- package/dist/deploy/payload/launcher.js.map +1 -1
- package/dist/deploy/payload/stage.d.ts +1 -1
- package/dist/deploy/payload/stage.d.ts.map +1 -1
- package/dist/deploy/payload/stage.js +23 -13
- package/dist/deploy/payload/stage.js.map +1 -1
- package/dist/deploy/run-deploy.d.ts.map +1 -1
- package/dist/deploy/run-deploy.js +149 -25
- package/dist/deploy/run-deploy.js.map +1 -1
- package/dist/deploy/settings/build-manifest.d.ts +9 -0
- package/dist/deploy/settings/build-manifest.d.ts.map +1 -0
- package/dist/deploy/settings/build-manifest.js +80 -0
- package/dist/deploy/settings/build-manifest.js.map +1 -0
- package/dist/deploy/settings/index.d.ts.map +1 -1
- package/dist/deploy/settings/index.js +9 -3
- package/dist/deploy/settings/index.js.map +1 -1
- package/dist/deploy/settings/libraries.d.ts +8 -0
- package/dist/deploy/settings/libraries.d.ts.map +1 -0
- package/dist/deploy/settings/libraries.js +39 -0
- package/dist/deploy/settings/libraries.js.map +1 -0
- package/dist/deploy/settings/paths.d.ts +3 -0
- package/dist/deploy/settings/paths.d.ts.map +1 -1
- package/dist/deploy/settings/paths.js +6 -32
- package/dist/deploy/settings/paths.js.map +1 -1
- package/dist/deploy/targets/appimage.d.ts.map +1 -1
- package/dist/deploy/targets/appimage.js +19 -13
- package/dist/deploy/targets/appimage.js.map +1 -1
- package/dist/deploy/targets/flatpak-manifest.d.ts +2 -1
- package/dist/deploy/targets/flatpak-manifest.d.ts.map +1 -1
- package/dist/deploy/targets/flatpak-manifest.js +5 -1
- package/dist/deploy/targets/flatpak-manifest.js.map +1 -1
- package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
- package/dist/deploy/targets/flatpak-source.js +30 -16
- package/dist/deploy/targets/flatpak-source.js.map +1 -1
- package/dist/deploy/tools.d.ts +6 -1
- package/dist/deploy/tools.d.ts.map +1 -1
- package/dist/deploy/tools.js +26 -1
- package/dist/deploy/tools.js.map +1 -1
- package/dist/deploy/types.d.ts +4 -4
- package/dist/deploy/types.d.ts.map +1 -1
- package/dist/deploy/types.js.map +1 -1
- package/dist/dev/icon-dir.d.ts +1 -1
- package/dist/dev/icon-dir.d.ts.map +1 -1
- package/dist/dev/icon-dir.js +20 -7
- package/dist/dev/icon-dir.js.map +1 -1
- package/dist/dev/locale-dir.d.ts +3 -0
- package/dist/dev/locale-dir.d.ts.map +1 -0
- package/dist/dev/locale-dir.js +17 -0
- package/dist/dev/locale-dir.js.map +1 -0
- package/dist/dev/runner-deps.d.ts.map +1 -1
- package/dist/dev/runner-deps.js +5 -1
- package/dist/dev/runner-deps.js.map +1 -1
- package/dist/dev/runner-main.d.ts.map +1 -1
- package/dist/dev/runner-main.js +6 -4
- package/dist/dev/runner-main.js.map +1 -1
- package/dist/dev/runner.d.ts +1 -1
- package/dist/dev/runner.d.ts.map +1 -1
- package/dist/dev/runner.js +7 -1
- package/dist/dev/runner.js.map +1 -1
- package/dist/dev/schema-dir.d.ts +1 -1
- package/dist/dev/schema-dir.d.ts.map +1 -1
- package/dist/dev/schema-dir.js +3 -1
- package/dist/dev/schema-dir.js.map +1 -1
- package/dist/dev/vite-dev-server.d.ts +1 -0
- package/dist/dev/vite-dev-server.d.ts.map +1 -1
- package/dist/dev/vite-dev-server.js.map +1 -1
- package/dist/i18n/binding-extractor.d.ts +30 -0
- package/dist/i18n/binding-extractor.d.ts.map +1 -0
- package/dist/i18n/binding-extractor.js +1324 -0
- package/dist/i18n/binding-extractor.js.map +1 -0
- package/dist/i18n/catalog-template.d.ts +3 -0
- package/dist/i18n/catalog-template.d.ts.map +1 -0
- package/dist/i18n/catalog-template.js +18 -0
- package/dist/i18n/catalog-template.js.map +1 -0
- package/dist/i18n/catalogs.d.ts +21 -0
- package/dist/i18n/catalogs.d.ts.map +1 -0
- package/dist/i18n/catalogs.js +139 -0
- package/dist/i18n/catalogs.js.map +1 -0
- package/dist/i18n/extractor-plugin.d.ts +8 -0
- package/dist/i18n/extractor-plugin.d.ts.map +1 -0
- package/dist/i18n/extractor-plugin.js +247 -0
- package/dist/i18n/extractor-plugin.js.map +1 -0
- package/dist/i18n/metadata-templates.d.ts +11 -0
- package/dist/i18n/metadata-templates.d.ts.map +1 -0
- package/dist/i18n/metadata-templates.js +11 -0
- package/dist/i18n/metadata-templates.js.map +1 -0
- package/dist/i18n/source-messages.d.ts +23 -0
- package/dist/i18n/source-messages.d.ts.map +1 -0
- package/dist/i18n/source-messages.js +403 -0
- package/dist/i18n/source-messages.js.map +1 -0
- package/dist/i18n/types.d.ts +10 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +108 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/internal/build-manifest.d.ts +20 -0
- package/dist/internal/build-manifest.d.ts.map +1 -0
- package/dist/internal/build-manifest.js +6 -0
- package/dist/internal/build-manifest.js.map +1 -0
- package/dist/internal/icon-path.d.ts +13 -0
- package/dist/internal/icon-path.d.ts.map +1 -0
- package/dist/internal/icon-path.js +86 -0
- package/dist/internal/icon-path.js.map +1 -0
- package/dist/internal/source-imports.d.ts +12 -0
- package/dist/internal/source-imports.d.ts.map +1 -0
- package/dist/internal/source-imports.js +123 -0
- package/dist/internal/source-imports.js.map +1 -0
- package/dist/mcp/client.d.ts +0 -1
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +11 -39
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/handlers.d.ts +2 -1
- package/dist/mcp/handlers.d.ts.map +1 -1
- package/dist/mcp/handlers.js.map +1 -1
- package/dist/mcp/widget-properties.d.ts.map +1 -1
- package/dist/mcp/widget-properties.js +3 -12
- package/dist/mcp/widget-properties.js.map +1 -1
- package/dist/settings/render.d.ts +10 -1
- package/dist/settings/render.d.ts.map +1 -1
- package/dist/settings/render.js +78 -20
- package/dist/settings/render.js.map +1 -1
- package/dist/settings/schema.d.ts +4 -3
- package/dist/settings/schema.d.ts.map +1 -1
- package/dist/settings/schema.js +124 -15
- package/dist/settings/schema.js.map +1 -1
- package/dist/vite-plugins/asset-emitter.d.ts +1 -1
- package/dist/vite-plugins/asset-emitter.d.ts.map +1 -1
- package/dist/vite-plugins/asset-emitter.js.map +1 -1
- package/dist/vite-plugins/asset-extensions.d.ts.map +1 -1
- package/dist/vite-plugins/asset-extensions.js +1 -0
- package/dist/vite-plugins/asset-extensions.js.map +1 -1
- package/dist/vite-plugins/asset-imports.d.ts +2 -1
- package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
- package/dist/vite-plugins/asset-imports.js +39 -28
- package/dist/vite-plugins/asset-imports.js.map +1 -1
- package/dist/vite-plugins/asset-specifier.d.ts +13 -1
- package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
- package/dist/vite-plugins/asset-specifier.js +39 -1
- package/dist/vite-plugins/asset-specifier.js.map +1 -1
- package/dist/vite-plugins/build-manifest.d.ts +5 -0
- package/dist/vite-plugins/build-manifest.d.ts.map +1 -0
- package/dist/vite-plugins/{bundled-packages.js → build-manifest.js} +20 -14
- package/dist/vite-plugins/build-manifest.js.map +1 -0
- package/dist/vite-plugins/built-url.d.ts +1 -1
- package/dist/vite-plugins/built-url.d.ts.map +1 -1
- package/dist/vite-plugins/built-url.js +37 -24
- package/dist/vite-plugins/built-url.js.map +1 -1
- package/dist/vite-plugins/i18n.d.ts +5 -0
- package/dist/vite-plugins/i18n.d.ts.map +1 -0
- package/dist/vite-plugins/i18n.js +88 -0
- package/dist/vite-plugins/i18n.js.map +1 -0
- package/dist/vite-plugins/icons.d.ts +2 -1
- package/dist/vite-plugins/icons.d.ts.map +1 -1
- package/dist/vite-plugins/icons.js +25 -12
- package/dist/vite-plugins/icons.js.map +1 -1
- package/dist/vite-plugins/index.d.ts +2 -1
- package/dist/vite-plugins/index.d.ts.map +1 -1
- package/dist/vite-plugins/index.js +9 -5
- package/dist/vite-plugins/index.js.map +1 -1
- package/dist/vite-plugins/native.d.ts.map +1 -1
- package/dist/vite-plugins/native.js +23 -4
- package/dist/vite-plugins/native.js.map +1 -1
- package/dist/vite-plugins/resource-init-module.d.ts +7 -3
- package/dist/vite-plugins/resource-init-module.d.ts.map +1 -1
- package/dist/vite-plugins/resource-init-module.js +39 -14
- package/dist/vite-plugins/resource-init-module.js.map +1 -1
- package/dist/vite-plugins/resource-shared.d.ts +3 -1
- package/dist/vite-plugins/resource-shared.d.ts.map +1 -1
- package/dist/vite-plugins/resource-shared.js +3 -1
- package/dist/vite-plugins/resource-shared.js.map +1 -1
- package/dist/vite-plugins/resources.d.ts +1 -1
- package/dist/vite-plugins/resources.d.ts.map +1 -1
- package/dist/vite-plugins/resources.js +877 -86
- package/dist/vite-plugins/resources.js.map +1 -1
- package/dist/vite-plugins/self-contained.d.ts.map +1 -1
- package/dist/vite-plugins/self-contained.js +128 -135
- package/dist/vite-plugins/self-contained.js.map +1 -1
- package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
- package/dist/vite-plugins/settings-worker-env.js +6 -3
- package/dist/vite-plugins/settings-worker-env.js.map +1 -1
- package/dist/vite-plugins/settings.d.ts +3 -1
- package/dist/vite-plugins/settings.d.ts.map +1 -1
- package/dist/vite-plugins/settings.js +63 -23
- package/dist/vite-plugins/settings.js.map +1 -1
- package/env.d.ts +11 -192
- package/package.json +11 -10
- package/src/builder.ts +7 -7
- package/src/codegen/run-codegen.ts +64 -15
- package/src/commands/build.ts +0 -5
- package/src/commands/codegen.ts +2 -4
- package/src/deploy/depends.ts +47 -18
- package/src/deploy/freedesktop/localize.ts +144 -0
- package/src/deploy/install-hints.ts +5 -0
- package/src/deploy/nfpm/config.ts +1 -1
- package/src/deploy/node-runtime/elf.ts +3 -3
- package/src/deploy/node-runtime/index.ts +2 -2
- package/src/deploy/notices/collect.ts +4 -2
- package/src/deploy/notices/packages.ts +5 -43
- package/src/deploy/payload/icons.ts +64 -34
- package/src/deploy/payload/launcher.ts +2 -0
- package/src/deploy/payload/stage.ts +40 -12
- package/src/deploy/run-deploy.ts +214 -24
- package/src/deploy/settings/build-manifest.ts +122 -0
- package/src/deploy/settings/index.ts +9 -4
- package/src/deploy/settings/libraries.ts +57 -0
- package/src/deploy/settings/paths.ts +10 -47
- package/src/deploy/targets/appimage.ts +32 -15
- package/src/deploy/targets/flatpak-manifest.ts +7 -1
- package/src/deploy/targets/flatpak-source.ts +42 -20
- package/src/deploy/tools.ts +35 -0
- package/src/deploy/types.ts +4 -4
- package/src/dev/icon-dir.ts +31 -7
- package/src/dev/locale-dir.ts +22 -0
- package/src/dev/runner-deps.ts +5 -1
- package/src/dev/runner-main.ts +6 -4
- package/src/dev/runner.ts +10 -2
- package/src/dev/schema-dir.ts +3 -1
- package/src/dev/vite-dev-server.ts +1 -0
- package/src/i18n/binding-extractor.ts +1969 -0
- package/src/i18n/catalog-template.ts +24 -0
- package/src/i18n/catalogs.ts +216 -0
- package/src/i18n/extractor-plugin.ts +413 -0
- package/src/i18n/metadata-templates.ts +29 -0
- package/src/i18n/source-messages.ts +608 -0
- package/src/i18n/types.ts +154 -0
- package/src/internal/build-manifest.ts +32 -0
- package/src/internal/icon-path.ts +127 -0
- package/src/internal/source-imports.ts +171 -0
- package/src/mcp/client.ts +17 -44
- package/src/mcp/handlers.ts +7 -6
- package/src/mcp/widget-properties.ts +3 -14
- package/src/settings/render.ts +113 -21
- package/src/settings/schema.ts +192 -17
- package/src/vite-plugins/asset-emitter.ts +1 -1
- package/src/vite-plugins/asset-extensions.ts +1 -0
- package/src/vite-plugins/asset-imports.ts +62 -33
- package/src/vite-plugins/asset-specifier.ts +73 -1
- package/src/vite-plugins/{bundled-packages.ts → build-manifest.ts} +30 -19
- package/src/vite-plugins/built-url.ts +49 -28
- package/src/vite-plugins/i18n.ts +146 -0
- package/src/vite-plugins/icons.ts +33 -14
- package/src/vite-plugins/index.ts +15 -5
- package/src/vite-plugins/native.ts +31 -4
- package/src/vite-plugins/resource-init-module.ts +44 -15
- package/src/vite-plugins/resource-shared.ts +4 -0
- package/src/vite-plugins/resources.ts +1397 -100
- package/src/vite-plugins/self-contained.ts +150 -169
- package/src/vite-plugins/settings-worker-env.ts +7 -3
- package/src/vite-plugins/settings.ts +89 -21
- package/dist/vite-plugins/bundled-packages.d.ts +0 -5
- package/dist/vite-plugins/bundled-packages.d.ts.map +0 -1
- package/dist/vite-plugins/bundled-packages.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-template.d.ts","sourceRoot":"","sources":["../../src/i18n/catalog-template.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,sBAAsB,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,IAWhE,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { existsSync, readFileSync, renameSync } from "node:fs";
|
|
2
|
+
const POT_CREATION_DATE = /^"POT-Creation-Date: .*\\n"$/m;
|
|
3
|
+
const isUnchangedTemplate = (previous, next) => {
|
|
4
|
+
const previousDate = POT_CREATION_DATE.exec(previous)?.[0];
|
|
5
|
+
return previousDate !== undefined && next.replace(POT_CREATION_DATE, () => previousDate) === previous;
|
|
6
|
+
};
|
|
7
|
+
const replaceCatalogTemplate = (source, output) => {
|
|
8
|
+
if (existsSync(output)) {
|
|
9
|
+
const previous = readFileSync(output, "utf8");
|
|
10
|
+
const next = readFileSync(source, "utf8");
|
|
11
|
+
if (next === previous || isUnchangedTemplate(previous, next)) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
renameSync(source, output);
|
|
16
|
+
};
|
|
17
|
+
export { replaceCatalogTemplate };
|
|
18
|
+
//# sourceMappingURL=catalog-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-template.js","sourceRoot":"","sources":["../../src/i18n/catalog-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE/D,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAE1D,MAAM,mBAAmB,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAW,EAAE;IACpE,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE3D,OAAO,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC;AAC1G,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAE,MAAc,EAAQ,EAAE;IACpE,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE1C,IAAI,IAAI,KAAK,QAAQ,IAAI,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;YAC3D,OAAO;QACX,CAAC;IACL,CAAC;IAED,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,CAAC","sourcesContent":["import { existsSync, readFileSync, renameSync } from \"node:fs\";\n\nconst POT_CREATION_DATE = /^\"POT-Creation-Date: .*\\\\n\"$/m;\n\nconst isUnchangedTemplate = (previous: string, next: string): boolean => {\n const previousDate = POT_CREATION_DATE.exec(previous)?.[0];\n\n return previousDate !== undefined && next.replace(POT_CREATION_DATE, () => previousDate) === previous;\n};\n\nconst replaceCatalogTemplate = (source: string, output: string): void => {\n if (existsSync(output)) {\n const previous = readFileSync(output, \"utf8\");\n const next = readFileSync(source, \"utf8\");\n\n if (next === previous || isUnchangedTemplate(previous, next)) {\n return;\n }\n }\n\n renameSync(source, output);\n};\n\nexport { replaceCatalogTemplate };\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type Catalog = {
|
|
2
|
+
locale: string;
|
|
3
|
+
path: string;
|
|
4
|
+
};
|
|
5
|
+
type CatalogProject = {
|
|
6
|
+
catalogs: Catalog[];
|
|
7
|
+
domain: string;
|
|
8
|
+
linguasPath: string;
|
|
9
|
+
locales: string[];
|
|
10
|
+
poDir: string;
|
|
11
|
+
poFiles: string[];
|
|
12
|
+
root: string;
|
|
13
|
+
};
|
|
14
|
+
declare const LOCALE_DIRNAME = "locale";
|
|
15
|
+
declare const requiresCatalogInitialization: (project: CatalogProject) => boolean;
|
|
16
|
+
declare const resolveCatalogProject: (root: string, domain: string) => CatalogProject | null;
|
|
17
|
+
declare const compileCatalogs: (project: CatalogProject, outputDir: string) => string[];
|
|
18
|
+
declare const synchronizeCatalogs: (project: CatalogProject) => void;
|
|
19
|
+
declare const isCatalogSource: (root: string, path: string) => boolean;
|
|
20
|
+
export { type CatalogProject, LOCALE_DIRNAME, compileCatalogs, isCatalogSource, requiresCatalogInitialization, resolveCatalogProject, synchronizeCatalogs, };
|
|
21
|
+
//# sourceMappingURL=catalogs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalogs.d.ts","sourceRoot":"","sources":["../../src/i18n/catalogs.ts"],"names":[],"mappings":"AAaA,KAAK,OAAO,GAAG;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,cAAc,GAAG;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AASF,QAAA,MAAM,cAAc,WAAW,CAAC;AAiChC,QAAA,MAAM,6BAA6B,GAAI,SAAS,cAAc,KAAG,OACA,CAAC;AAElE,QAAA,MAAM,qBAAqB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,cAAc,GAAG,IA8B9E,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,SAAS,cAAc,EAAE,WAAW,MAAM,KAAG,MAAM,EAmB3E,CAAC;AAkDF,QAAA,MAAM,mBAAmB,GAAI,SAAS,cAAc,KAAG,IAqBtD,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,OAUrD,CAAC;AAEF,OAAO,EACH,KAAK,cAAc,EACnB,cAAc,EACd,eAAe,EACf,eAAe,EACf,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,GACtB,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { chmodSync, existsSync, mkdirSync, mkdtempSync, readFileSync, renameSync, rmSync, statSync, } from "node:fs";
|
|
2
|
+
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
3
|
+
import { runCliTool } from "../internal/run-cli-tool.js";
|
|
4
|
+
const PO_DIRNAME = "po";
|
|
5
|
+
const LOCALE_DIRNAME = "locale";
|
|
6
|
+
const LINGUAS_FILENAME = "LINGUAS";
|
|
7
|
+
const LOCALE_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_.@+-]*$/;
|
|
8
|
+
const DOMAIN_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
9
|
+
const MODE_MASK = 0o7777;
|
|
10
|
+
const parseLocales = (linguasPath) => {
|
|
11
|
+
const source = readFileSync(linguasPath, "utf8");
|
|
12
|
+
const tokens = source
|
|
13
|
+
.split(/\r?\n/)
|
|
14
|
+
.flatMap((line) => line.replace(/#.*/, "").trim().split(/\s+/))
|
|
15
|
+
.filter((token) => token.length > 0);
|
|
16
|
+
const seen = new Set();
|
|
17
|
+
for (const token of tokens) {
|
|
18
|
+
if (!LOCALE_PATTERN.test(token) || seen.has(token)) {
|
|
19
|
+
throw new Error(`Invalid locale in ${linguasPath}: ${token}`);
|
|
20
|
+
}
|
|
21
|
+
seen.add(token);
|
|
22
|
+
}
|
|
23
|
+
return tokens;
|
|
24
|
+
};
|
|
25
|
+
const requireFile = (path) => {
|
|
26
|
+
if (!existsSync(path) || !statSync(path).isFile()) {
|
|
27
|
+
throw new Error(`Missing translation catalog: ${path}`);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const requiresCatalogInitialization = (project) => project.catalogs.some((catalog) => !existsSync(catalog.path));
|
|
31
|
+
const resolveCatalogProject = (root, domain) => {
|
|
32
|
+
const projectRoot = resolve(root);
|
|
33
|
+
const poDir = join(projectRoot, PO_DIRNAME);
|
|
34
|
+
if (!existsSync(poDir)) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
if (!statSync(poDir).isDirectory()) {
|
|
38
|
+
throw new Error(`Translation source is not a directory: ${poDir}`);
|
|
39
|
+
}
|
|
40
|
+
if (!DOMAIN_PATTERN.test(domain)) {
|
|
41
|
+
throw new Error(`Invalid translation domain: ${domain}`);
|
|
42
|
+
}
|
|
43
|
+
const linguasPath = join(poDir, LINGUAS_FILENAME);
|
|
44
|
+
requireFile(linguasPath);
|
|
45
|
+
const locales = parseLocales(linguasPath);
|
|
46
|
+
const catalogs = locales.map((locale) => ({ locale, path: join(poDir, `${locale}.po`) }));
|
|
47
|
+
return {
|
|
48
|
+
catalogs,
|
|
49
|
+
domain,
|
|
50
|
+
linguasPath,
|
|
51
|
+
locales,
|
|
52
|
+
poDir,
|
|
53
|
+
poFiles: catalogs.map((catalog) => catalog.path),
|
|
54
|
+
root: projectRoot,
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
const compileCatalogs = (project, outputDir) => {
|
|
58
|
+
const localeDir = resolve(outputDir);
|
|
59
|
+
for (const catalog of project.catalogs) {
|
|
60
|
+
requireFile(catalog.path);
|
|
61
|
+
}
|
|
62
|
+
return project.catalogs.map((catalog) => {
|
|
63
|
+
const output = join(localeDir, catalog.locale, "LC_MESSAGES", `${project.domain}.mo`);
|
|
64
|
+
mkdirSync(dirname(output), { recursive: true });
|
|
65
|
+
runCliTool({
|
|
66
|
+
tool: "msgfmt",
|
|
67
|
+
args: ["--check", "--output-file", output, catalog.path],
|
|
68
|
+
target: catalog.path,
|
|
69
|
+
});
|
|
70
|
+
return output;
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
const initializeCatalog = (catalog, template, output) => {
|
|
74
|
+
runCliTool({
|
|
75
|
+
tool: "msginit",
|
|
76
|
+
args: [
|
|
77
|
+
"--no-translator",
|
|
78
|
+
"--no-wrap",
|
|
79
|
+
`--locale=${catalog.locale}`,
|
|
80
|
+
`--input=${template}`,
|
|
81
|
+
`--output-file=${output}`,
|
|
82
|
+
],
|
|
83
|
+
target: catalog.path,
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
const mergeCatalog = (catalog, template, output) => {
|
|
87
|
+
requireFile(catalog.path);
|
|
88
|
+
runCliTool({
|
|
89
|
+
tool: "msgmerge",
|
|
90
|
+
args: ["--quiet", "--no-wrap", `--output-file=${output}`, catalog.path, template],
|
|
91
|
+
target: catalog.path,
|
|
92
|
+
});
|
|
93
|
+
chmodSync(output, statSync(catalog.path).mode & MODE_MASK);
|
|
94
|
+
};
|
|
95
|
+
const prepareCatalog = (catalog, index, template, stagingDir) => {
|
|
96
|
+
const output = join(stagingDir, `${String(index)}.po`);
|
|
97
|
+
const isExisting = existsSync(catalog.path);
|
|
98
|
+
if (isExisting) {
|
|
99
|
+
mergeCatalog(catalog, template, output);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
initializeCatalog(catalog, template, output);
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
isChanged: !isExisting || !readFileSync(output).equals(readFileSync(catalog.path)),
|
|
106
|
+
output,
|
|
107
|
+
target: catalog.path,
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
const synchronizeCatalogs = (project) => {
|
|
111
|
+
if (project.catalogs.length === 0) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const template = join(project.poDir, `${project.domain}.pot`);
|
|
115
|
+
requireFile(template);
|
|
116
|
+
const stagingDir = mkdtempSync(join(project.poDir, ".gtkx-catalog-"));
|
|
117
|
+
try {
|
|
118
|
+
const merged = project.catalogs.map((catalog, index) => prepareCatalog(catalog, index, template, stagingDir));
|
|
119
|
+
for (const catalog of merged) {
|
|
120
|
+
if (catalog.isChanged) {
|
|
121
|
+
renameSync(catalog.output, catalog.target);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
rmSync(stagingDir, { recursive: true, force: true });
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
const isCatalogSource = (root, path) => {
|
|
130
|
+
const projectRoot = resolve(root);
|
|
131
|
+
const sourcePath = isAbsolute(path) ? resolve(path) : resolve(projectRoot, path);
|
|
132
|
+
const poPath = relative(join(projectRoot, PO_DIRNAME), sourcePath);
|
|
133
|
+
if (poPath === "" || poPath === ".." || poPath.startsWith(`..${sep}`) || isAbsolute(poPath)) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
return !poPath.includes(sep) && (poPath === LINGUAS_FILENAME || poPath.endsWith(".po"));
|
|
137
|
+
};
|
|
138
|
+
export { LOCALE_DIRNAME, compileCatalogs, isCatalogSource, requiresCatalogInitialization, resolveCatalogProject, synchronizeCatalogs, };
|
|
139
|
+
//# sourceMappingURL=catalogs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalogs.js","sourceRoot":"","sources":["../../src/i18n/catalogs.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n chmodSync,\n existsSync,\n mkdirSync,\n mkdtempSync,\n readFileSync,\n renameSync,\n rmSync,\n statSync,\n} from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve, sep } from \"node:path\";\nimport { runCliTool } from \"../internal/run-cli-tool.js\";\n\ntype Catalog = {\n locale: string;\n path: string;\n};\n\ntype CatalogProject = {\n catalogs: Catalog[];\n domain: string;\n linguasPath: string;\n locales: string[];\n poDir: string;\n poFiles: string[];\n root: string;\n};\n\ntype PreparedCatalog = {\n isChanged: boolean;\n output: string;\n target: string;\n};\n\nconst PO_DIRNAME = \"po\";\nconst LOCALE_DIRNAME = \"locale\";\nconst LINGUAS_FILENAME = \"LINGUAS\";\nconst LOCALE_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_.@+-]*$/;\nconst DOMAIN_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;\nconst MODE_MASK = 0o7777;\n\nconst parseLocales = (linguasPath: string): string[] => {\n const source = readFileSync(linguasPath, \"utf8\");\n\n const tokens = source\n .split(/\\r?\\n/)\n .flatMap((line) => line.replace(/#.*/, \"\").trim().split(/\\s+/))\n .filter((token) => token.length > 0);\n\n const seen: Set<string> = new Set();\n\n for (const token of tokens) {\n if (!LOCALE_PATTERN.test(token) || seen.has(token)) {\n throw new Error(`Invalid locale in ${linguasPath}: ${token}`);\n }\n\n seen.add(token);\n }\n\n return tokens;\n};\n\nconst requireFile = (path: string): void => {\n if (!existsSync(path) || !statSync(path).isFile()) {\n throw new Error(`Missing translation catalog: ${path}`);\n }\n};\n\nconst requiresCatalogInitialization = (project: CatalogProject): boolean =>\n project.catalogs.some((catalog) => !existsSync(catalog.path));\n\nconst resolveCatalogProject = (root: string, domain: string): CatalogProject | null => {\n const projectRoot = resolve(root);\n const poDir = join(projectRoot, PO_DIRNAME);\n\n if (!existsSync(poDir)) {\n return null;\n }\n\n if (!statSync(poDir).isDirectory()) {\n throw new Error(`Translation source is not a directory: ${poDir}`);\n }\n\n if (!DOMAIN_PATTERN.test(domain)) {\n throw new Error(`Invalid translation domain: ${domain}`);\n }\n\n const linguasPath = join(poDir, LINGUAS_FILENAME);\n requireFile(linguasPath);\n const locales = parseLocales(linguasPath);\n const catalogs = locales.map((locale) => ({ locale, path: join(poDir, `${locale}.po`) }));\n\n return {\n catalogs,\n domain,\n linguasPath,\n locales,\n poDir,\n poFiles: catalogs.map((catalog) => catalog.path),\n root: projectRoot,\n };\n};\n\nconst compileCatalogs = (project: CatalogProject, outputDir: string): string[] => {\n const localeDir = resolve(outputDir);\n\n for (const catalog of project.catalogs) {\n requireFile(catalog.path);\n }\n\n return project.catalogs.map((catalog) => {\n const output = join(localeDir, catalog.locale, \"LC_MESSAGES\", `${project.domain}.mo`);\n mkdirSync(dirname(output), { recursive: true });\n\n runCliTool({\n tool: \"msgfmt\",\n args: [\"--check\", \"--output-file\", output, catalog.path],\n target: catalog.path,\n });\n\n return output;\n });\n};\n\nconst initializeCatalog = (catalog: Catalog, template: string, output: string): void => {\n runCliTool({\n tool: \"msginit\",\n args: [\n \"--no-translator\",\n \"--no-wrap\",\n `--locale=${catalog.locale}`,\n `--input=${template}`,\n `--output-file=${output}`,\n ],\n target: catalog.path,\n });\n};\n\nconst mergeCatalog = (catalog: Catalog, template: string, output: string): void => {\n requireFile(catalog.path);\n\n runCliTool({\n tool: \"msgmerge\",\n args: [\"--quiet\", \"--no-wrap\", `--output-file=${output}`, catalog.path, template],\n target: catalog.path,\n });\n\n chmodSync(output, statSync(catalog.path).mode & MODE_MASK);\n};\n\nconst prepareCatalog = (\n catalog: Catalog,\n index: number,\n template: string,\n stagingDir: string,\n): PreparedCatalog => {\n const output = join(stagingDir, `${String(index)}.po`);\n const isExisting = existsSync(catalog.path);\n\n if (isExisting) {\n mergeCatalog(catalog, template, output);\n } else {\n initializeCatalog(catalog, template, output);\n }\n\n return {\n isChanged: !isExisting || !readFileSync(output).equals(readFileSync(catalog.path)),\n output,\n target: catalog.path,\n };\n};\n\nconst synchronizeCatalogs = (project: CatalogProject): void => {\n if (project.catalogs.length === 0) {\n return;\n }\n\n const template = join(project.poDir, `${project.domain}.pot`);\n requireFile(template);\n const stagingDir = mkdtempSync(join(project.poDir, \".gtkx-catalog-\"));\n\n try {\n const merged = project.catalogs.map((catalog, index) =>\n prepareCatalog(catalog, index, template, stagingDir));\n\n for (const catalog of merged) {\n if (catalog.isChanged) {\n renameSync(catalog.output, catalog.target);\n }\n }\n } finally {\n rmSync(stagingDir, { recursive: true, force: true });\n }\n};\n\nconst isCatalogSource = (root: string, path: string): boolean => {\n const projectRoot = resolve(root);\n const sourcePath = isAbsolute(path) ? resolve(path) : resolve(projectRoot, path);\n const poPath = relative(join(projectRoot, PO_DIRNAME), sourcePath);\n\n if (poPath === \"\" || poPath === \"..\" || poPath.startsWith(`..${sep}`) || isAbsolute(poPath)) {\n return false;\n }\n\n return !poPath.includes(sep) && (poPath === LINGUAS_FILENAME || poPath.endsWith(\".po\"));\n};\n\nexport {\n type CatalogProject,\n LOCALE_DIRNAME,\n compileCatalogs,\n isCatalogSource,\n requiresCatalogInitialization,\n resolveCatalogProject,\n synchronizeCatalogs,\n};\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|