@gtkx/cli 1.4.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 +1 -1
- package/dist/builder.d.ts +1 -0
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +2 -2
- package/dist/builder.js.map +1 -1
- package/dist/codegen/run-codegen.d.ts +2 -0
- package/dist/codegen/run-codegen.d.ts.map +1 -1
- package/dist/codegen/run-codegen.js +30 -6
- package/dist/codegen/run-codegen.js.map +1 -1
- package/dist/commands/codegen.js +1 -1
- package/dist/commands/codegen.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/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 +20 -11
- 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 +87 -15
- package/dist/deploy/run-deploy.js.map +1 -1
- package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
- package/dist/deploy/targets/flatpak-source.js +21 -10
- 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/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-main.d.ts.map +1 -1
- package/dist/dev/runner-main.js +2 -0
- package/dist/dev/runner-main.js.map +1 -1
- package/dist/dev/runner.d.ts.map +1 -1
- package/dist/dev/runner.js +6 -0
- package/dist/dev/runner.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/source-imports.d.ts +5 -1
- package/dist/internal/source-imports.d.ts.map +1 -1
- package/dist/internal/source-imports.js +23 -44
- package/dist/internal/source-imports.js.map +1 -1
- 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/settings/render.d.ts +4 -1
- package/dist/settings/render.d.ts.map +1 -1
- package/dist/settings/render.js +11 -2
- package/dist/settings/render.js.map +1 -1
- package/dist/settings/schema.d.ts.map +1 -1
- package/dist/settings/schema.js +3 -1
- package/dist/settings/schema.js.map +1 -1
- package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
- package/dist/vite-plugins/asset-imports.js +2 -12
- package/dist/vite-plugins/asset-imports.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/index.d.ts +1 -1
- package/dist/vite-plugins/index.d.ts.map +1 -1
- package/dist/vite-plugins/index.js +3 -1
- package/dist/vite-plugins/index.js.map +1 -1
- package/dist/vite-plugins/resources.d.ts.map +1 -1
- package/dist/vite-plugins/resources.js +10 -55
- 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/package.json +10 -9
- package/src/builder.ts +3 -2
- package/src/codegen/run-codegen.ts +53 -7
- package/src/commands/codegen.ts +1 -1
- package/src/deploy/freedesktop/localize.ts +144 -0
- package/src/deploy/install-hints.ts +5 -0
- package/src/deploy/payload/launcher.ts +2 -0
- package/src/deploy/payload/stage.ts +35 -10
- package/src/deploy/run-deploy.ts +128 -13
- package/src/deploy/targets/flatpak-source.ts +33 -10
- package/src/deploy/tools.ts +35 -0
- package/src/dev/locale-dir.ts +22 -0
- package/src/dev/runner-main.ts +2 -0
- package/src/dev/runner.ts +8 -0
- 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/source-imports.ts +28 -57
- package/src/mcp/client.ts +17 -44
- package/src/mcp/handlers.ts +7 -6
- package/src/settings/render.ts +16 -2
- package/src/settings/schema.ts +3 -1
- package/src/vite-plugins/asset-imports.ts +3 -15
- package/src/vite-plugins/i18n.ts +146 -0
- package/src/vite-plugins/index.ts +3 -0
- package/src/vite-plugins/resources.ts +10 -72
- package/src/vite-plugins/self-contained.ts +150 -169
|
@@ -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"}
|