@gtkx/cli 2.0.0-beta.2 → 2.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/dist/cli.d.ts +1 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +8 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/codegen/reference.d.ts.map +1 -1
  6. package/dist/codegen/reference.js +1 -0
  7. package/dist/codegen/reference.js.map +1 -1
  8. package/dist/codegen/run-codegen.d.ts.map +1 -1
  9. package/dist/codegen/run-codegen.js +2 -8
  10. package/dist/codegen/run-codegen.js.map +1 -1
  11. package/dist/codegen/store-resolver.d.ts +1 -0
  12. package/dist/codegen/store-resolver.d.ts.map +1 -1
  13. package/dist/codegen/store-resolver.js +2 -1
  14. package/dist/codegen/store-resolver.js.map +1 -1
  15. package/dist/commands/dev.d.ts +1 -0
  16. package/dist/commands/dev.d.ts.map +1 -1
  17. package/dist/commands/dev.js +11 -4
  18. package/dist/commands/dev.js.map +1 -1
  19. package/dist/commands/docs.d.ts.map +1 -1
  20. package/dist/commands/docs.js +1 -0
  21. package/dist/commands/docs.js.map +1 -1
  22. package/dist/deploy/freedesktop/validate.d.ts.map +1 -1
  23. package/dist/deploy/freedesktop/validate.js +10 -4
  24. package/dist/deploy/freedesktop/validate.js.map +1 -1
  25. package/dist/deploy/nfpm/config.d.ts +3 -2
  26. package/dist/deploy/nfpm/config.d.ts.map +1 -1
  27. package/dist/deploy/nfpm/config.js +3 -3
  28. package/dist/deploy/nfpm/config.js.map +1 -1
  29. package/dist/deploy/node-runtime/index.d.ts.map +1 -1
  30. package/dist/deploy/node-runtime/index.js +2 -1
  31. package/dist/deploy/node-runtime/index.js.map +1 -1
  32. package/dist/deploy/targets/nfpm-target.d.ts.map +1 -1
  33. package/dist/deploy/targets/nfpm-target.js +12 -7
  34. package/dist/deploy/targets/nfpm-target.js.map +1 -1
  35. package/dist/dev/entry-env.d.ts +2 -1
  36. package/dist/dev/entry-env.d.ts.map +1 -1
  37. package/dist/dev/entry-env.js +2 -1
  38. package/dist/dev/entry-env.js.map +1 -1
  39. package/dist/dev/runner-deps.d.ts +1 -1
  40. package/dist/dev/runner-deps.d.ts.map +1 -1
  41. package/dist/dev/runner-deps.js +3 -3
  42. package/dist/dev/runner-deps.js.map +1 -1
  43. package/dist/dev/runner-main.d.ts.map +1 -1
  44. package/dist/dev/runner-main.js +8 -3
  45. package/dist/dev/runner-main.js.map +1 -1
  46. package/dist/dev/supervisor.d.ts +1 -0
  47. package/dist/dev/supervisor.d.ts.map +1 -1
  48. package/dist/dev/supervisor.js +4 -3
  49. package/dist/dev/supervisor.js.map +1 -1
  50. package/dist/i18n/catalogs.d.ts.map +1 -1
  51. package/dist/i18n/catalogs.js +1 -0
  52. package/dist/i18n/catalogs.js.map +1 -1
  53. package/dist/i18n/source-messages.d.ts.map +1 -1
  54. package/dist/i18n/source-messages.js +154 -36
  55. package/dist/i18n/source-messages.js.map +1 -1
  56. package/dist/internal/build-output.d.ts.map +1 -1
  57. package/dist/internal/build-output.js +12 -2
  58. package/dist/internal/build-output.js.map +1 -1
  59. package/dist/internal/docs-elements.d.ts +1 -0
  60. package/dist/internal/docs-elements.d.ts.map +1 -1
  61. package/dist/internal/docs-elements.js +5 -4
  62. package/dist/internal/docs-elements.js.map +1 -1
  63. package/dist/internal/errors.d.ts +2 -1
  64. package/dist/internal/errors.d.ts.map +1 -1
  65. package/dist/internal/errors.js +1 -1
  66. package/dist/internal/errors.js.map +1 -1
  67. package/dist/internal/parent-process.d.ts +12 -0
  68. package/dist/internal/parent-process.d.ts.map +1 -0
  69. package/dist/internal/parent-process.js +74 -0
  70. package/dist/internal/parent-process.js.map +1 -0
  71. package/dist/vite-plugins/ensure-store.d.ts +1 -1
  72. package/dist/vite-plugins/ensure-store.d.ts.map +1 -1
  73. package/dist/vite-plugins/ensure-store.js +2 -2
  74. package/dist/vite-plugins/ensure-store.js.map +1 -1
  75. package/dist/vite-plugins/i18n.d.ts.map +1 -1
  76. package/dist/vite-plugins/i18n.js +7 -7
  77. package/dist/vite-plugins/i18n.js.map +1 -1
  78. package/dist/vite-plugins/native.d.ts.map +1 -1
  79. package/dist/vite-plugins/native.js +0 -4
  80. package/dist/vite-plugins/native.js.map +1 -1
  81. package/dist/vite-plugins/settings-worker-env.d.ts +1 -1
  82. package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
  83. package/dist/vite-plugins/settings-worker-env.js +2 -2
  84. package/dist/vite-plugins/settings-worker-env.js.map +1 -1
  85. package/dist/vitest-plugin.d.ts +2 -1
  86. package/dist/vitest-plugin.d.ts.map +1 -1
  87. package/dist/vitest-plugin.js +6 -6
  88. package/dist/vitest-plugin.js.map +1 -1
  89. package/package.json +10 -9
  90. package/src/cli.ts +8 -3
  91. package/src/codegen/reference.ts +1 -0
  92. package/src/codegen/run-codegen.ts +2 -12
  93. package/src/codegen/store-resolver.ts +3 -1
  94. package/src/commands/dev.ts +19 -4
  95. package/src/commands/docs.ts +1 -0
  96. package/src/deploy/freedesktop/validate.ts +12 -4
  97. package/src/deploy/nfpm/config.ts +9 -3
  98. package/src/deploy/node-runtime/index.ts +2 -1
  99. package/src/deploy/targets/nfpm-target.ts +13 -6
  100. package/src/dev/entry-env.ts +2 -1
  101. package/src/dev/runner-deps.ts +3 -3
  102. package/src/dev/runner-main.ts +10 -3
  103. package/src/dev/supervisor.ts +6 -3
  104. package/src/i18n/catalogs.ts +1 -0
  105. package/src/i18n/source-messages.ts +223 -40
  106. package/src/internal/build-output.ts +16 -2
  107. package/src/internal/docs-elements.ts +10 -4
  108. package/src/internal/errors.ts +1 -1
  109. package/src/internal/parent-process.ts +110 -0
  110. package/src/vite-plugins/ensure-store.ts +2 -2
  111. package/src/vite-plugins/i18n.ts +8 -11
  112. package/src/vite-plugins/native.ts +0 -5
  113. package/src/vite-plugins/settings-worker-env.ts +2 -2
  114. package/src/vitest-plugin.ts +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"source-messages.js","sourceRoot":"","sources":["../../src/i18n/source-messages.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtractedKey, ExtractedKeysMap, Logger, Plugin } from \"i18next-cli\";\nimport type { ESTree } from \"vite\";\nimport { type NodePath, parseSync as parseBabelSync, type Scope, traverse, types } from \"@babel/core\";\nimport { isPathInside, isPathWithin, toPosixPath } from \"@gtkx/utils\";\nimport { runExtractor } from \"i18next-cli\";\nimport {\n existsSync,\n mkdirSync,\n mkdtempSync,\n readFileSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { parseSync, Visitor } from \"vite\";\nimport type { CatalogProject } from \"./catalogs.js\";\nimport { runCliTool } from \"../internal/run-cli-tool.js\";\nimport { sourceLanguage } from \"../internal/source-imports.js\";\nimport { replaceCatalogTemplate } from \"./catalog-template.js\";\nimport { metadataTemplateFiles } from \"./metadata-templates.js\";\nimport { clearI18nResources, i18nToolkitConfig } from \"./types.js\";\n\ntype SourceLocation = {\n file: string;\n line?: number | undefined;\n column?: number | undefined;\n};\ntype ExtractedLocation = NonNullable<ExtractedKey[\"locations\"]>[number];\n\ntype SourceMessage = {\n context: string | null;\n locations: SourceLocation[];\n namespace: string;\n plural: string | null;\n singular: string;\n sourceKey: string;\n};\n\ntype SyntheticEntry = {\n call: string;\n line: number | undefined;\n};\n\ntype SourceExtraction = {\n messages: SourceMessage[];\n output: string;\n project: CatalogProject;\n workDir: string;\n};\n\ntype CatalogTemplateExtraction = {\n messages: SourceMessage[];\n output?: string | undefined;\n project: CatalogProject;\n shouldPreserveMetadataMessages: boolean;\n};\n\ntype PluralVariant = {\n category: string;\n defaultValue: string;\n locations: SourceLocation[];\n};\n\ntype PluralGroup = {\n baseKey: string;\n namespace: string;\n variants: PluralVariant[];\n};\n\ntype TranslationReferences = {\n calls: Set<number>;\n elements: Set<number>;\n entryLocations: Map<string, SourcePoint[]>;\n locations: Set<string>;\n masks: SourceMask[];\n};\ntype SourceMask = { end: number; start: number };\ntype SourcePoint = { column: number; line: number };\ntype TranslationCallKind = \"alias\" | \"canonical\";\ntype ImportedBinding = {\n imported: string;\n local: string;\n source: string;\n style: \"default\" | \"named\" | \"namespace\";\n};\ntype TranslationHookBinding = { call: types.CallExpression; isCanonical: boolean };\ntype TranslationMemberExpression = types.MemberExpression | types.OptionalMemberExpression;\ntype ResolvedBinding = NonNullable<ReturnType<Scope[\"getBinding\"]>>;\n\nconst CONTEXT_SEPARATOR = \"\\u{4}\";\nconst DEFAULT_NAMESPACE = \"translation\";\nconst POTFILES_FILENAME = \"POTFILES.in\";\nconst SYNTHETIC_FILENAME = \"messages.js\";\nconst UNSUPPORTED_PLURAL_OPTION = /^defaultValue_(few|many|two|zero)$/u;\nconst STATIC_SOURCE_OPTION_NAMES: ReadonlySet<string> = new Set([\n \"context\",\n \"defaultValue\",\n \"defaultValue_one\",\n \"defaultValue_other\",\n \"keyPrefix\",\n]);\nconst NESTED_CONTEXT = /[\"']?context[\"']?\\s*:\\s*(?:\"([^\"]*)\"|'([^']*)')/u;\nconst NESTED_COUNT = /[\"']?count[\"']?\\s*:/u;\nconst NESTED_STRUCTURE_TOKEN = /\"[^\"]*\"|'[^']*'|[()]/gu;\nconst TRANSLATION_MODULES = new Set([\"@gtkx/i18n\", \"i18next\"]);\nconst TRANS_ELEMENTS: ReadonlySet<string> = new Set([\"Trans\", \"TransWithoutContext\"]);\nconst STATIC_KEY_WRAPPER_TYPES: ReadonlySet<string> = new Set([\n \"ParenthesizedExpression\",\n \"TSAsExpression\",\n \"TSSatisfiesExpression\",\n \"TSTypeAssertion\",\n \"TSNonNullExpression\",\n]);\n\nconst quietLogger = (): { logger: Logger; reports: string[] } => {\n const reports: string[] = [];\n\n return {\n reports,\n logger: {\n info() {\n return;\n },\n warn(message, more) {\n const detail = more === undefined ? \"\" : ` ${String(more)}`;\n reports.push(`${message}${detail}`);\n },\n error(message) {\n reports.push(String(message));\n },\n },\n };\n};\n\nconst splitContext = (key: string): { context: string | null; msgid: string } => {\n const index = key.lastIndexOf(CONTEXT_SEPARATOR);\n\n if (index === -1) {\n return { context: null, msgid: key };\n }\n\n return { context: key.slice(index + CONTEXT_SEPARATOR.length), msgid: key.slice(0, index) };\n};\n\nconst namespaceFor = (entry: ExtractedKey): string =>\n typeof entry.ns === \"string\" ? entry.ns : DEFAULT_NAMESPACE;\n\nconst validateIdentity = (context: string | null, msgid: string): void => {\n if (context === \"\" || msgid.length === 0) {\n throw new Error(\"Translation keys and contexts cannot be empty\");\n }\n};\n\nconst compareLocations = (left: SourceLocation, right: SourceLocation): number =>\n left.file.localeCompare(right.file) ||\n (left.line ?? 0) - (right.line ?? 0) ||\n (left.column ?? 0) - (right.column ?? 0);\n\nconst normalizedLocations = (locations: SourceLocation[]): SourceLocation[] => {\n const unique: Map<string, SourceLocation> = new Map();\n\n for (const location of locations) {\n const key = `${location.file}\\0${String(location.line)}\\0${String(location.column)}`;\n unique.set(key, location);\n }\n\n return unique.values().toArray().toSorted(compareLocations);\n};\n\nconst pointSource = (entry: ExtractedKey, msgid: string): string => {\n if (typeof entry.defaultValue !== \"string\") {\n return msgid;\n }\n\n if (entry.explicitDefault === true) {\n return entry.defaultValue;\n }\n\n return entry.defaultValue === msgid || msgid.endsWith(`.${entry.defaultValue}`)\n ? msgid\n : entry.defaultValue;\n};\n\nconst pointMessage = (entry: ExtractedKey): SourceMessage => {\n const { context, msgid } = splitContext(entry.key);\n validateIdentity(context, msgid);\n const singular = pointSource(entry, msgid);\n\n if (singular.length === 0) {\n throw new Error(\"Translation source strings cannot be empty\");\n }\n\n return {\n context,\n locations: normalizedLocations(entry.locations ?? []),\n namespace: namespaceFor(entry),\n plural: null,\n singular,\n sourceKey: msgid,\n };\n};\n\nconst expandedPlural = (entry: ExtractedKey): { baseKey: string; variant: PluralVariant } => {\n if (entry.isOrdinal === true) {\n throw new Error(\"GNU gettext catalogs do not support i18next ordinal plurals\");\n }\n\n const suffix = /_(few|many|one|other|two|zero)$/u.exec(entry.key);\n const defaultValue = entry.defaultValue;\n const category = suffix?.[1];\n\n if (suffix === null || category === undefined || typeof defaultValue !== \"string\") {\n throw new Error(\"Unable to recover an i18next plural source pair\");\n }\n\n return {\n baseKey: entry.key.slice(0, -suffix[0].length),\n variant: {\n category,\n defaultValue,\n locations: entry.locations ?? [],\n },\n };\n};\n\nconst groupedPlurals = (entries: ExtractedKey[]): PluralGroup[] => {\n const groups: Map<string, PluralGroup> = new Map();\n\n for (const entry of entries) {\n const { baseKey, variant } = expandedPlural(entry);\n const namespace = namespaceFor(entry);\n const key = `${namespace}\\0${baseKey}`;\n const group = groups.get(key) ?? { baseKey, namespace, variants: [] };\n group.variants.push(variant);\n groups.set(key, group);\n }\n\n return groups.values().toArray();\n};\n\nconst pairedVariants = (variants: PluralVariant[]): { one: PluralVariant; other: PluralVariant } => {\n const categories = new Map(variants.map((variant) => [variant.category, variant]));\n\n if (categories.size !== 2 || !categories.has(\"one\") || !categories.has(\"other\")) {\n throw new Error(\"GNU gettext requires one singular and one plural source string\");\n }\n\n const one = categories.get(\"one\");\n const other = categories.get(\"other\");\n\n if (one === undefined || other === undefined) {\n throw new Error(\"Unable to recover an i18next plural source pair\");\n }\n\n return { one, other };\n};\n\nconst pluralMessage = ({ baseKey, namespace, variants }: PluralGroup): SourceMessage => {\n const { one, other } = pairedVariants(variants);\n const { context, msgid } = splitContext(baseKey);\n validateIdentity(context, msgid);\n const singular = one.defaultValue;\n const plural = other.defaultValue;\n\n if (singular === plural || singular.length === 0 || plural.length === 0) {\n throw new Error(\"GNU gettext plural source strings must be distinct and non-empty\");\n }\n\n return {\n context,\n locations: normalizedLocations(variants.flatMap((variant) => variant.locations)),\n namespace,\n plural,\n singular,\n sourceKey: msgid,\n };\n};\n\nconst pluralMessages = (entries: ExtractedKey[]): SourceMessage[] =>\n groupedPlurals(entries).map((group) => pluralMessage(group));\n\nconst assertCardinal = (entry: ExtractedKey): void => {\n if (entry.isOrdinal === true) {\n throw new Error(\"GNU gettext catalogs do not support i18next ordinal plurals\");\n }\n};\n\nconst sourceMessages = (entries: ExtractedKey[]): SourceMessage[] => {\n const points: ExtractedKey[] = [];\n const plurals: ExtractedKey[] = [];\n\n for (const entry of entries) {\n assertCardinal(entry);\n\n if (entry.isExpandedPlural === true) {\n plurals.push(entry);\n continue;\n }\n\n if (entry.hasCount === true) {\n throw new Error(\"Count-based translations require an explicit plural source string\");\n }\n\n points.push(entry);\n }\n\n return [...points.map((entry) => pointMessage(entry)), ...pluralMessages(plurals)];\n};\n\nconst compareMessages = (left: SourceMessage, right: SourceMessage): number =>\n left.namespace.localeCompare(right.namespace) ||\n (left.context ?? \"\").localeCompare(right.context ?? \"\") ||\n left.singular.localeCompare(right.singular) ||\n (left.plural ?? \"\").localeCompare(right.plural ?? \"\");\n\nconst inferLocations = (message: SourceMessage, sources: Map<string, string>): SourceMessage => {\n if (message.locations.length > 0) {\n return message;\n }\n\n const locations: SourceLocation[] = [];\n\n for (const [file, source] of sources) {\n const index = source.indexOf(message.sourceKey);\n\n if (index !== -1) {\n locations.push({ file, line: source.slice(0, index).split(\"\\n\").length });\n }\n }\n\n return { ...message, locations };\n};\n\nconst normalizedSourceFiles = (root: string, paths: string[]): string[] => {\n const files = paths\n .map((path) => resolve(root, path))\n .filter((path) => isPathWithin(root, path));\n\n return new Set(files).values().toArray().toSorted((left, right) => left.localeCompare(right));\n};\n\ntype StaticKeyWrapper = ESTree.ParenthesizedExpression |\n ESTree.TSAsExpression |\n ESTree.TSSatisfiesExpression |\n ESTree.TSTypeAssertion |\n ESTree.TSNonNullExpression;\n\nconst isStaticKeyWrapper = (key: ESTree.Node): key is StaticKeyWrapper =>\n STATIC_KEY_WRAPPER_TYPES.has(key.type);\n\nconst unwrapStaticWrapper = (node: ESTree.Node): ESTree.Node =>\n isStaticKeyWrapper(node) ? unwrapStaticWrapper(node.expression) : node;\n\nconst isStaticTranslationKey = (key: ESTree.Node | null | undefined): boolean => {\n if (key === undefined || key === null) {\n return false;\n }\n\n if (key.type === \"Literal\") {\n return typeof key.value === \"string\";\n }\n\n if (key.type === \"TemplateLiteral\") {\n return key.expressions.length === 0;\n }\n\n if (key.type === \"ParenthesizedExpression\") {\n return false;\n }\n\n if (isStaticKeyWrapper(key)) {\n return isStaticTranslationKey(key.expression);\n }\n\n return false;\n};\n\nconst assertStaticTranslationKey = (key: ESTree.Node | null | undefined): void => {\n if (!isStaticTranslationKey(key)) {\n throw new Error(\"Translation keys must be string literals\");\n }\n};\n\nconst propertyName = (property: ESTree.ObjectProperty): string | null => {\n if (!property.computed && property.key.type === \"Identifier\") {\n return property.key.name;\n }\n\n return property.key.type === \"Literal\" && typeof property.key.value === \"string\"\n ? property.key.value\n : null;\n};\n\nconst assertSupportedOptionProperty = (property: ESTree.ObjectPropertyKind): void => {\n if (property.type === \"SpreadElement\") {\n throw new Error(\"Translation extraction requires explicit option properties\");\n }\n\n const name = propertyName(property);\n\n if (name === null) {\n throw new Error(\"Translation extraction requires static option property names\");\n }\n\n if (UNSUPPORTED_PLURAL_OPTION.test(name)) {\n throw new Error(\"GNU gettext accepts one singular and one plural source string\");\n }\n\n if (STATIC_SOURCE_OPTION_NAMES.has(name)) {\n assertStaticTranslationKey(property.value);\n }\n};\n\nconst assertSupportedOptionObject = (options: ESTree.Node | null | undefined): void => {\n if (options === null || options === undefined) {\n return;\n }\n\n if (isStaticKeyWrapper(options) && unwrapStaticWrapper(options).type === \"ObjectExpression\") {\n throw new Error(\"Translation option objects cannot be wrapped in another expression\");\n }\n\n if (options.type !== \"ObjectExpression\") {\n throw new Error(\"Translation option objects must be inline object literals\");\n }\n\n for (const property of options.properties) {\n assertSupportedOptionProperty(property);\n }\n};\n\nconst namedImportedBinding = (path: NodePath, source: string): ImportedBinding | null => {\n if (!path.isImportSpecifier() || path.node.importKind === \"type\") {\n return null;\n }\n\n const imported = path.node.imported;\n\n return {\n imported: types.isIdentifier(imported) ? imported.name : imported.value,\n local: path.node.local.name,\n source,\n style: \"named\",\n };\n};\n\nconst defaultImportedBinding = (path: NodePath, source: string): ImportedBinding | null =>\n path.isImportDefaultSpecifier()\n ? { imported: \"default\", local: path.node.local.name, source, style: \"default\" }\n : null;\n\nconst namespaceImportedBinding = (path: NodePath, source: string): ImportedBinding | null =>\n path.isImportNamespaceSpecifier()\n ? { imported: \"*\", local: path.node.local.name, source, style: \"namespace\" }\n : null;\n\nconst importedBinding = (binding: ResolvedBinding | undefined): ImportedBinding | null => {\n if (binding === undefined) {\n return null;\n }\n\n const path = binding.path;\n const declaration = path.parentPath;\n\n if (!declaration.isImportDeclaration() || declaration.node.importKind === \"type\") {\n return null;\n }\n\n const source = declaration.node.source.value;\n\n return namedImportedBinding(path, source) ??\n defaultImportedBinding(path, source) ??\n namespaceImportedBinding(path, source);\n};\n\nconst babelPropertyName = (property: types.ObjectProperty): string | null => {\n const key = property.key;\n\n if (!property.computed && types.isIdentifier(key)) {\n return key.name;\n }\n\n return types.isStringLiteral(key) ? key.value : null;\n};\n\nconst isBoundIdentifier = (node: types.Node | null, name: string): boolean => {\n if (types.isIdentifier(node)) {\n return node.name === name;\n }\n\n if (types.isAssignmentPattern(node)) {\n return types.isIdentifier(node.left) && node.left.name === name;\n }\n\n return false;\n};\n\nconst isHookPatternBinding = (pattern: types.VariableDeclarator[\"id\"], name: string): boolean => {\n if (types.isObjectPattern(pattern)) {\n return pattern.properties.some((property) =>\n types.isObjectProperty(property) &&\n babelPropertyName(property) === \"t\" &&\n isBoundIdentifier(property.value, name));\n }\n\n if (types.isArrayPattern(pattern)) {\n return isBoundIdentifier(pattern.elements[0] ?? null, name);\n }\n\n return false;\n};\n\nconst importedTranslationHook = (scope: Scope, call: types.CallExpression): ImportedBinding | null => {\n if (!types.isIdentifier(call.callee)) {\n return null;\n }\n\n const imported = importedBinding(scope.getBinding(call.callee.name));\n\n return imported?.imported === \"useTranslation\" && TRANSLATION_MODULES.has(imported.source)\n ? imported\n : null;\n};\n\nconst translationHookBinding = (binding: ResolvedBinding): TranslationHookBinding | null => {\n const path = binding.path;\n\n if (!path.isVariableDeclarator()) {\n return null;\n }\n\n const pattern = path.node.id;\n const initializer = path.node.init;\n\n if (!isHookPatternBinding(pattern, binding.identifier.name) ||\n !types.isCallExpression(initializer)) {\n return null;\n }\n\n const imported = importedTranslationHook(path.scope, initializer);\n\n if (imported === null) {\n return null;\n }\n\n return { call: initializer, isCanonical: imported.local === \"useTranslation\" };\n};\n\nconst importedTranslationFunctionKind = (imported: ImportedBinding | null): TranslationCallKind | null => {\n if (imported?.imported !== \"t\" || !TRANSLATION_MODULES.has(imported.source)) {\n return null;\n }\n\n return imported.local === \"t\" ? \"canonical\" : \"alias\";\n};\n\nconst hookTranslationFunctionKind = (binding: ResolvedBinding | undefined): TranslationCallKind | null => {\n if (binding === undefined) {\n return null;\n }\n\n const hook = translationHookBinding(binding);\n\n if (hook === null) {\n return null;\n }\n\n return binding.identifier.name === \"t\" && hook.isCanonical ? \"canonical\" : \"alias\";\n};\n\nconst directTranslationFunctionKind = (scope: Scope, name: string): TranslationCallKind | null => {\n const binding = scope.getBinding(name);\n\n return importedTranslationFunctionKind(importedBinding(binding)) ?? hookTranslationFunctionKind(binding);\n};\n\nconst babelMemberName = (member: TranslationMemberExpression): string | null => {\n const property = member.property;\n\n if (member.computed) {\n return types.isStringLiteral(property) ? property.value : null;\n }\n\n return types.isIdentifier(property) ? property.name : null;\n};\n\nconst isImportedTranslationObject = (scope: Scope, object: types.Node): boolean => {\n if (!types.isIdentifier(object)) {\n return false;\n }\n\n const imported = importedBinding(scope.getBinding(object.name));\n\n return imported !== null &&\n TRANSLATION_MODULES.has(imported.source) &&\n (imported.style === \"namespace\" || (imported.source === \"i18next\" && imported.imported === \"default\"));\n};\n\nconst constantVariableDeclarator = (binding: ResolvedBinding): NodePath<types.VariableDeclarator> | null => {\n const path = binding.path;\n const declaration = path.parentPath;\n\n if (!path.isVariableDeclarator() ||\n !declaration.isVariableDeclaration() ||\n declaration.node.kind !== \"const\") {\n return null;\n }\n\n return path;\n};\n\nconst isTranslationHookResultBinding = (binding: ResolvedBinding | undefined): boolean => {\n if (binding === undefined) {\n return false;\n }\n\n const path = constantVariableDeclarator(binding);\n const initializer = path?.node.init;\n\n return path !== null &&\n types.isIdentifier(path.node.id) &&\n types.isCallExpression(initializer) &&\n importedTranslationHook(path.scope, initializer) !== null;\n};\n\nconst isHookTranslationMember = (scope: Scope, member: TranslationMemberExpression): boolean => {\n if (babelMemberName(member) !== \"t\") {\n return false;\n }\n\n const object = member.object;\n\n if (types.isCallExpression(object)) {\n return importedTranslationHook(scope, object) !== null;\n }\n\n return types.isIdentifier(object) && isTranslationHookResultBinding(scope.getBinding(object.name));\n};\n\nconst isTranslationMember = (scope: Scope, member: TranslationMemberExpression): boolean =>\n babelMemberName(member) === \"t\" &&\n (isImportedTranslationObject(scope, member.object) || isHookTranslationMember(scope, member));\n\nconst isDirectTranslationFunction = (scope: Scope, node: types.Node): boolean =>\n types.isIdentifier(node) && directTranslationFunctionKind(scope, node.name) !== null;\n\nconst isTranslationFunctionValue = (scope: Scope, node: types.Node): boolean => {\n if (isDirectTranslationFunction(scope, node)) {\n return true;\n }\n\n return (types.isMemberExpression(node) || types.isOptionalMemberExpression(node)) &&\n isTranslationMember(scope, node);\n};\n\nconst isTranslationBindCall = (scope: Scope, node: types.Node): boolean => {\n if (!types.isCallExpression(node) || !types.isMemberExpression(node.callee)) {\n return false;\n }\n\n return babelMemberName(node.callee) === \"bind\" &&\n isTranslationFunctionValue(scope, node.callee.object);\n};\n\nconst isTranslationObjectPatternAlias = (\n path: NodePath<types.VariableDeclarator>,\n binding: ResolvedBinding,\n): boolean => {\n const pattern = path.node.id;\n const initializer = path.node.init;\n\n if (!types.isObjectPattern(pattern) ||\n !isHookPatternBinding(pattern, binding.identifier.name) ||\n !types.isIdentifier(initializer)) {\n return false;\n }\n\n return isImportedTranslationObject(path.scope, initializer) ||\n isTranslationHookResultBinding(path.scope.getBinding(initializer.name));\n};\n\nconst isTranslationAliasBinding = (binding: ResolvedBinding | undefined): boolean => {\n if (binding === undefined) {\n return false;\n }\n\n const path = constantVariableDeclarator(binding);\n\n if (path === null) {\n return false;\n }\n\n if (isTranslationObjectPatternAlias(path, binding)) {\n return true;\n }\n\n const initializer = path.node.init;\n\n return types.isIdentifier(path.node.id) &&\n initializer !== null &&\n initializer !== undefined &&\n (isTranslationFunctionValue(path.scope, initializer) || isTranslationBindCall(path.scope, initializer));\n};\n\nconst translationFunctionKind = (scope: Scope, name: string): TranslationCallKind | null => {\n const direct = directTranslationFunctionKind(scope, name);\n\n if (direct !== null) {\n return direct;\n }\n\n return isTranslationAliasBinding(scope.getBinding(name)) ? \"alias\" : null;\n};\n\nconst translationElementKind = (path: NodePath, name: string): TranslationCallKind | null => {\n const imported = importedBinding(path.scope.getBinding(name));\n\n if (imported?.source !== \"@gtkx/i18n\" || !TRANS_ELEMENTS.has(imported.imported)) {\n return null;\n }\n\n return imported.local === imported.imported ? \"canonical\" : \"alias\";\n};\n\nconst nodeStart = (path: NodePath): number => {\n const start = path.node.start;\n\n if (start === null || start === undefined) {\n throw new Error(\"Translation extraction could not locate a source expression\");\n }\n\n return start;\n};\n\nconst registerSourceMask = (node: types.Node, references: TranslationReferences): void => {\n const { start, end } = node;\n\n if (start === null || start === undefined || end === null || end === undefined) {\n throw new Error(\"Translation extraction could not locate a source expression\");\n }\n\n references.masks.push({ start, end });\n};\n\nconst sourceLocationKey = (line: number, column: number): string => `${String(line)}:${String(column)}`;\n\nconst sourcePoint = (node: types.Node): SourcePoint | null => {\n const location = node.loc?.start;\n\n return location === undefined ? null : { column: location.column, line: location.line };\n};\n\nconst registerSourceLocation = (node: types.Node, references: TranslationReferences): SourcePoint | null => {\n const point = sourcePoint(node);\n\n if (point !== null) {\n references.locations.add(sourceLocationKey(point.line, point.column));\n }\n\n return point;\n};\n\nconst babelStaticKey = (node: types.Node | null | undefined): string | null => {\n if (node === null || node === undefined) {\n return null;\n }\n\n if (types.isStringLiteral(node)) {\n return node.value;\n }\n\n if (types.isTemplateLiteral(node) && node.expressions.length === 0) {\n return node.quasis[0]?.value.cooked ?? null;\n }\n\n if (types.isParenthesizedExpression(node) ||\n types.isTSAsExpression(node) ||\n types.isTSSatisfiesExpression(node) ||\n types.isTSTypeAssertion(node) ||\n types.isTSNonNullExpression(node)) {\n return babelStaticKey(node.expression);\n }\n\n return null;\n};\n\nconst babelObjectExpression = (node: types.Node | null | undefined): types.ObjectExpression | null => {\n if (node === null || node === undefined) {\n return null;\n }\n\n if (types.isObjectExpression(node)) {\n return node;\n }\n\n if (types.isParenthesizedExpression(node) ||\n types.isTSAsExpression(node) ||\n types.isTSSatisfiesExpression(node) ||\n types.isTSTypeAssertion(node) ||\n types.isTSNonNullExpression(node)) {\n return babelObjectExpression(node.expression);\n }\n\n return null;\n};\n\nconst babelNamedProperty = (\n object: types.ObjectExpression | null,\n name: string,\n): types.ObjectProperty | null => {\n if (object === null) {\n return null;\n }\n\n for (const property of object.properties) {\n if (types.isObjectProperty(property) && babelPropertyName(property) === name) {\n return property;\n }\n }\n\n return null;\n};\n\nconst babelStringProperty = (object: types.ObjectExpression | null, name: string): string | null => {\n const property = babelNamedProperty(object, name);\n\n if (property === null) {\n return null;\n }\n\n const value = babelStaticKey(property.value);\n\n if (value === null) {\n throw new Error(`Translation ${name} values must be string literals`);\n }\n\n return value;\n};\n\nconst callOptions = (call: types.CallExpression): types.ObjectExpression | null =>\n babelObjectExpression(call.arguments[1]) ?? babelObjectExpression(call.arguments[2]);\n\nconst hookKeyPrefix = (callee: NodePath<types.Identifier>): string => {\n const binding = callee.scope.getBinding(callee.node.name);\n const hook = binding === undefined ? null : translationHookBinding(binding);\n\n return babelStringProperty(\n hook === null ? null : babelObjectExpression(hook.call.arguments[1]),\n \"keyPrefix\",\n ) ?? \"\";\n};\n\nconst prefixedTranslationKey = (prefix: string, key: string): string => {\n if (prefix.length === 0) {\n return key;\n }\n\n return prefix.endsWith(\".\") ? `${prefix}${key}` : `${prefix}.${key}`;\n};\n\nconst extractedEntryKey = (call: types.CallExpression, keyPrefix: string): string | null => {\n const key = babelStaticKey(call.arguments[0]);\n\n if (key === null) {\n return null;\n }\n\n const options = callOptions(call);\n const callPrefix = babelStringProperty(options, \"keyPrefix\");\n\n if (callPrefix === \"\" && keyPrefix.length > 0) {\n throw new Error(\"An empty call keyPrefix cannot override a hook keyPrefix during extraction\");\n }\n\n const selectedPrefix = callPrefix ?? keyPrefix;\n const prefixed = prefixedTranslationKey(selectedPrefix, key);\n const context = babelStringProperty(options, \"context\");\n\n return context === null ? prefixed : `${prefixed}${CONTEXT_SEPARATOR}${context}`;\n};\n\nconst registerEntryLocation = (\n key: string | null,\n point: SourcePoint | null,\n references: TranslationReferences,\n): void => {\n if (key === null || point === null) {\n return;\n }\n\n const locations = references.entryLocations.get(key) ?? [];\n locations.push(point);\n references.entryLocations.set(key, locations);\n};\n\nconst registerCallReference = (\n callPath: NodePath<types.CallExpression>,\n references: TranslationReferences,\n keyPrefix: string,\n): void => {\n references.calls.add(nodeStart(callPath));\n const firstArgument = callPath.node.arguments[0];\n const point = registerSourceLocation(firstArgument ?? callPath.node, references);\n registerEntryLocation(extractedEntryKey(callPath.node, keyPrefix), point, references);\n};\n\nconst parserPlugins = (lang: ReturnType<typeof sourceLanguage>): (\"decorators\" | \"jsx\" | \"typescript\")[] => [\n \"decorators\",\n ...(lang === \"ts\" || lang === \"tsx\" ? [\"typescript\" as const] : []),\n ...(lang === \"jsx\" || lang === \"tsx\" ? [\"jsx\" as const] : []),\n];\n\nconst registerIdentifierTranslationCall = (\n callPath: NodePath<types.CallExpression>,\n callee: NodePath,\n references: TranslationReferences,\n): void => {\n if (!callee.isIdentifier()) {\n return;\n }\n\n const kind = translationFunctionKind(callee.scope, callee.node.name);\n\n if (kind === \"alias\") {\n throw new Error(\"Translation calls must use the imported name t\");\n }\n\n if (kind === \"canonical\") {\n registerCallReference(callPath, references, hookKeyPrefix(callee));\n } else if (callee.node.name === \"t\") {\n registerSourceMask(callee.node, references);\n }\n};\n\nconst registerTranslationCall = (\n callPath: NodePath<types.CallExpression>,\n references: TranslationReferences,\n): void => {\n assertSupportedWrappedCallee(callPath);\n const callee = callPath.get(\"callee\");\n\n if (callee.isIdentifier()) {\n registerIdentifierTranslationCall(callPath, callee, references);\n\n return;\n }\n\n if (callee.isMemberExpression() && isTranslationMember(callee.scope, callee.node)) {\n throw new Error(\"Translation calls must use the named t export\");\n }\n};\n\nconst unwrapTranslationCallee = (node: types.Node): types.Node => {\n if (types.isParenthesizedExpression(node) ||\n types.isTSAsExpression(node) ||\n types.isTSSatisfiesExpression(node) ||\n types.isTSTypeAssertion(node) ||\n types.isTSNonNullExpression(node)) {\n return unwrapTranslationCallee(node.expression);\n }\n\n return node;\n};\n\nconst isTranslationCallee = (scope: Scope, node: types.Node): boolean => {\n if (types.isIdentifier(node)) {\n return translationFunctionKind(scope, node.name) !== null;\n }\n\n return (types.isMemberExpression(node) || types.isOptionalMemberExpression(node)) &&\n isTranslationMember(scope, node);\n};\n\nconst assertSupportedWrappedCallee = (callPath: NodePath<types.CallExpression>): void => {\n const callee = callPath.node.callee;\n const unwrapped = unwrapTranslationCallee(callee);\n\n if (unwrapped !== callee && isTranslationCallee(callPath.scope, unwrapped)) {\n throw new Error(\"Translation call expressions cannot wrap their callee\");\n }\n};\n\nconst assertSupportedOptionalCall = (callPath: NodePath<types.OptionalCallExpression>): void => {\n const callee = unwrapTranslationCallee(callPath.node.callee);\n\n if (isTranslationCallee(callPath.scope, callee)) {\n throw new Error(\"Translation calls cannot use optional chaining\");\n }\n};\n\nconst assertUnsupportedTranslationTag = (tagPath: NodePath<types.TaggedTemplateExpression>): void => {\n const tag = unwrapTranslationCallee(tagPath.node.tag);\n\n if (isTranslationCallee(tagPath.scope, tag)) {\n throw new Error(\"Translation calls cannot use tagged-template syntax\");\n }\n};\n\nconst registerUnrecognizedElementMasks = (\n elementPath: NodePath,\n name: NodePath<types.JSXIdentifier>,\n references: TranslationReferences,\n): void => {\n registerSourceMask(name.node, references);\n const parent = elementPath.parentPath.node;\n const closingName = types.isJSXElement(parent) ? parent.closingElement?.name : null;\n\n if (types.isJSXIdentifier(closingName)) {\n registerSourceMask(closingName, references);\n }\n};\n\nconst registerTranslationElement = (elementPath: NodePath, references: TranslationReferences): void => {\n const name = elementPath.get(\"name\");\n\n if (!name.isJSXIdentifier()) {\n return;\n }\n\n const kind = translationElementKind(name, name.node.name);\n\n if (kind === \"alias\") {\n throw new Error(\"Translation components must use their imported names\");\n }\n\n if (kind === \"canonical\") {\n references.elements.add(nodeStart(elementPath));\n registerSourceLocation(elementPath.node, references);\n } else if (TRANS_ELEMENTS.has(name.node.name)) {\n registerUnrecognizedElementMasks(elementPath, name, references);\n }\n};\n\nconst maskUnrecognizedTranslations = (source: string, references: TranslationReferences): string => {\n let masked = source;\n const masks = references.masks.toSorted((left, right) => right.start - left.start);\n\n for (const { start, end } of masks) {\n masked = `${masked.slice(0, start)}${\"_\".repeat(end - start)}${masked.slice(end)}`;\n }\n\n return masked;\n};\n\nconst translationReferences = (\n path: string,\n source: string,\n lang: ReturnType<typeof sourceLanguage>,\n): TranslationReferences => {\n const parsed = parseBabelSync(source, {\n ast: true,\n babelrc: false,\n configFile: false,\n filename: path,\n parserOpts: { createParenthesizedExpressions: true, plugins: parserPlugins(lang) },\n sourceType: \"module\",\n });\n\n if (parsed === null) {\n throw new Error(`Translation extraction could not parse ${path}`);\n }\n\n const references: TranslationReferences = {\n calls: new Set(),\n elements: new Set(),\n entryLocations: new Map(),\n locations: new Set(),\n masks: [],\n };\n\n traverse(parsed, {\n CallExpression(callPath) {\n registerTranslationCall(callPath, references);\n },\n JSXOpeningElement(elementPath) {\n registerTranslationElement(elementPath, references);\n },\n OptionalCallExpression(callPath) {\n assertSupportedOptionalCall(callPath);\n },\n TaggedTemplateExpression(tagPath) {\n assertUnsupportedTranslationTag(tagPath);\n },\n });\n\n return references;\n};\n\nconst assertSupportedTranslationCall = (node: ESTree.CallExpression, references: TranslationReferences): void => {\n if (!references.calls.has(node.start)) {\n return;\n }\n\n assertStaticTranslationKey(node.arguments[0]);\n assertSupportedTranslationOptions(node.arguments[1], node.arguments[2]);\n};\n\nconst assertSupportedTranslationOptions = (\n second: ESTree.Node | null | undefined,\n third: ESTree.Node | null | undefined,\n): void => {\n if (third !== undefined && third !== null) {\n assertStaticTranslationKey(second);\n assertSupportedOptionObject(third);\n\n return;\n }\n\n if (second === undefined || second === null || isStaticTranslationKey(second)) {\n return;\n }\n\n assertSupportedOptionObject(second);\n};\n\nconst isNamedJsxAttribute = (attribute: ESTree.JSXAttribute, name: string): boolean =>\n attribute.name.type === \"JSXIdentifier\" && attribute.name.name === name;\n\nconst assertSupportedTransKey = (attribute: ESTree.JSXAttribute): void => {\n if (!isNamedJsxAttribute(attribute, \"i18nKey\")) {\n return;\n }\n\n const key = attribute.value?.type === \"JSXExpressionContainer\"\n ? attribute.value.expression\n : attribute.value;\n assertStaticTranslationKey(key);\n};\n\nconst assertSupportedTransStringAttribute = (attribute: ESTree.JSXAttribute, name: string): void => {\n if (!isNamedJsxAttribute(attribute, name)) {\n return;\n }\n\n const value = attribute.value?.type === \"JSXExpressionContainer\"\n ? attribute.value.expression\n : attribute.value;\n assertStaticTranslationKey(value);\n};\n\nconst assertSupportedTransOptions = (attribute: ESTree.JSXAttribute): void => {\n if (isNamedJsxAttribute(attribute, \"tOptions\") && attribute.value?.type === \"JSXExpressionContainer\") {\n assertSupportedOptionObject(attribute.value.expression);\n }\n};\n\nconst assertSupportedTransAttribute = (attribute: ESTree.JSXAttributeItem): void => {\n if (attribute.type === \"JSXSpreadAttribute\") {\n throw new Error(\"Translation extraction requires explicit component properties\");\n }\n\n assertSupportedTransKey(attribute);\n assertSupportedTransStringAttribute(attribute, \"context\");\n assertSupportedTransStringAttribute(attribute, \"defaults\");\n assertSupportedTransOptions(attribute);\n};\n\nconst assertSupportedTransElement = (node: ESTree.JSXOpeningElement, references: TranslationReferences): void => {\n if (!references.elements.has(node.start)) {\n return;\n }\n\n for (const attribute of node.attributes) {\n assertSupportedTransAttribute(attribute);\n }\n};\n\nconst assertSupportedTranslationSyntax = (path: string, source: string): TranslationReferences => {\n const lang = sourceLanguage(path);\n\n if (lang === undefined) {\n return { calls: new Set(), elements: new Set(), entryLocations: new Map(), locations: new Set(), masks: [] };\n }\n\n const parsed = parseSync(path, source, { lang });\n const references = translationReferences(path, source, lang);\n\n new Visitor({\n CallExpression(node) {\n assertSupportedTranslationCall(node, references);\n },\n JSXOpeningElement(node) {\n assertSupportedTransElement(node, references);\n },\n }).visit(parsed.program);\n\n return references;\n};\n\nconst extractedLocationFile = (root: string, file: string): string =>\n resolve(root, file);\n\nconst isRecognizedLocation = (\n root: string,\n references: Map<string, TranslationReferences>,\n location: SourceLocation,\n): boolean => {\n if (location.line === undefined || location.column === undefined) {\n return false;\n }\n\n const sourceReferences = references.get(extractedLocationFile(root, location.file));\n\n return sourceReferences?.locations.has(sourceLocationKey(location.line, location.column)) === true;\n};\n\nconst recognizedKeyLocations = (\n references: Map<string, TranslationReferences>,\n extractedKey: string,\n): ExtractedLocation[] => {\n const locations: ExtractedLocation[] = [];\n\n for (const [file, sourceReferences] of references) {\n const points = sourceReferences.entryLocations.get(extractedKey) ?? [];\n\n for (const point of points) {\n locations.push({ file, column: point.column, line: point.line });\n }\n }\n\n return locations;\n};\n\nconst recognizedEntry = (\n root: string,\n references: Map<string, TranslationReferences>,\n entry: ExtractedKey,\n): ExtractedKey | null => {\n const extractedLocations = entry.locations ?? [];\n const locations = extractedLocations.length === 0\n ? recognizedKeyLocations(references, entry.key)\n : extractedLocations.filter((location) => isRecognizedLocation(root, references, location));\n\n return locations.length === 0 ? null : { ...entry, locations };\n};\n\ntype NestedReferenceParts = { base: string; options: string };\n\nconst quotedNestedReferenceParts = (content: string, quote: string): NestedReferenceParts | null => {\n const end = content.indexOf(quote, 1);\n\n return end === -1\n ? null\n : { base: content.slice(1, end), options: content.slice(end + 1) };\n};\n\nconst nestedReferenceParts = (value: string): NestedReferenceParts | null => {\n const content = value.trim();\n const quote = content[0];\n\n if (quote === \"\\\"\" || quote === \"'\") {\n return quotedNestedReferenceParts(content, quote);\n }\n\n const separator = content.indexOf(\",\");\n const base = (separator === -1 ? content : content.slice(0, separator)).trim();\n\n return base.length === 0\n ? null\n : { base, options: separator === -1 ? \"\" : content.slice(separator + 1) };\n};\n\nconst nestedReferenceContext = (options: string): string | null => {\n const match = NESTED_CONTEXT.exec(options);\n const context = match?.[1] ?? match?.[2] ?? null;\n\n return context === null || context.length === 0 ? null : context;\n};\n\nconst adjustedParenthesisDepth = (character: string | undefined, depth: number): number => {\n if (character === \"(\") {\n return depth + 1;\n }\n\n return character === \")\" ? depth - 1 : depth;\n};\n\nconst nestedReferenceEnd = (text: string, start: number): number => {\n let depth = 0;\n const tokens = text.slice(start).matchAll(NESTED_STRUCTURE_TOKEN);\n\n for (const token of tokens) {\n const character = token[0];\n\n if (character === \")\" && depth === 0) {\n return start + token.index;\n }\n\n depth = adjustedParenthesisDepth(character, depth);\n }\n\n return -1;\n};\n\nconst nestedReferenceContents = (text: string): string[] => {\n const contents: string[] = [];\n let offset = 0;\n\n while (offset < text.length) {\n const prefix = text.indexOf(\"$t(\", offset);\n\n if (prefix === -1) {\n break;\n }\n\n const start = prefix + 3;\n const end = nestedReferenceEnd(text, start);\n\n if (end === -1) {\n break;\n }\n\n contents.push(text.slice(start, end));\n offset = end + 1;\n }\n\n return contents;\n};\n\nconst nestedPluralKeys = (base: string, context: string | null): string[] => {\n const pluralBase = context === null ? base : `${base}${CONTEXT_SEPARATOR}${context}`;\n\n return [`${pluralBase}_one`, `${pluralBase}_other`];\n};\n\nconst nestedReferenceKeys = (content: string): string[] => {\n const parts = nestedReferenceParts(content);\n\n if (parts === null) {\n return [];\n }\n\n const context = nestedReferenceContext(parts.options);\n const contextual = context === null\n ? []\n : [`${parts.base}_${context}`, `${parts.base}${CONTEXT_SEPARATOR}${context}`];\n\n return NESTED_COUNT.test(parts.options)\n ? [parts.base, ...contextual, ...nestedPluralKeys(parts.base, context)]\n : [parts.base, ...contextual];\n};\n\nconst nestedEntryKeys = (text: string): Set<string> => {\n const keys: Set<string> = new Set();\n\n for (const content of nestedReferenceContents(text)) {\n for (const key of nestedReferenceKeys(content)) {\n keys.add(key);\n }\n }\n\n return keys;\n};\n\nconst registerNestedKeyLocations = (\n root: string,\n references: Map<string, TranslationReferences>,\n key: string,\n locations: ExtractedLocation[],\n): void => {\n for (const location of locations) {\n if (location.line === undefined || location.column === undefined) {\n continue;\n }\n\n const sourceReferences = references.get(resolve(root, location.file));\n\n if (sourceReferences !== undefined) {\n registerEntryLocation(key, { column: location.column, line: location.line }, sourceReferences);\n }\n }\n};\n\nconst registerNestedTextLocations = (\n root: string,\n references: Map<string, TranslationReferences>,\n text: string,\n locations: ExtractedLocation[],\n): void => {\n for (const key of nestedEntryKeys(text)) {\n registerNestedKeyLocations(root, references, key, locations);\n }\n};\n\nconst registerNestedEntryLocations = (\n root: string,\n references: Map<string, TranslationReferences>,\n entry: ExtractedKey,\n locations: ExtractedLocation[],\n): void => {\n registerNestedTextLocations(root, references, entry.key, locations);\n\n if (typeof entry.defaultValue === \"string\") {\n registerNestedTextLocations(root, references, entry.defaultValue, locations);\n }\n};\n\nconst didRegisterNestedLocationPass = (\n root: string,\n references: Map<string, TranslationReferences>,\n entries: ExtractedKeysMap,\n processed: Set<string>,\n): boolean => {\n let didRegister = false;\n\n for (const [mapKey, entry] of entries) {\n if (processed.has(mapKey)) {\n continue;\n }\n\n const recognized = recognizedEntry(root, references, entry);\n\n if (recognized !== null) {\n processed.add(mapKey);\n registerNestedEntryLocations(root, references, entry, recognized.locations ?? []);\n didRegister = true;\n }\n }\n\n return didRegister;\n};\n\nconst registerNestedLocations = (\n root: string,\n references: Map<string, TranslationReferences>,\n entries: ExtractedKeysMap,\n): void => {\n const processed: Set<string> = new Set();\n let hasRegisteredLocations = true;\n\n while (hasRegisteredLocations) {\n hasRegisteredLocations = didRegisterNestedLocationPass(root, references, entries, processed);\n }\n};\n\nconst retainRecognizedEntries = (\n root: string,\n references: Map<string, TranslationReferences>,\n entries: ExtractedKeysMap,\n): void => {\n for (const [mapKey, entry] of entries) {\n const recognized = recognizedEntry(root, references, entry);\n\n if (recognized === null) {\n entries.delete(mapKey);\n } else {\n entries.set(mapKey, recognized);\n }\n }\n};\n\nconst fileSourcePointKey = (file: string, line: number, column: number): string =>\n `${file}\\0${sourceLocationKey(line, column)}`;\n\nconst registerExtractedSourcePoint = (\n root: string,\n points: Set<string>,\n location: ExtractedLocation,\n): void => {\n if (location.line !== undefined && location.column !== undefined) {\n points.add(fileSourcePointKey(resolve(root, location.file), location.line, location.column));\n }\n};\n\nconst extractedSourcePoints = (root: string, entries: ExtractedKeysMap): Set<string> => {\n const points: Set<string> = new Set();\n\n for (const entry of entries.values()) {\n const locations = entry.locations ?? [];\n\n for (const location of locations) {\n registerExtractedSourcePoint(root, points, location);\n }\n }\n\n return points;\n};\n\nconst hasMissingSourcePoint = (\n file: string,\n references: TranslationReferences,\n extracted: Set<string>,\n): boolean =>\n references.locations.values().some((location) => !extracted.has(`${file}\\0${location}`));\n\nconst assertAllReferencesExtracted = (\n root: string,\n references: Map<string, TranslationReferences>,\n entries: ExtractedKeysMap,\n): void => {\n const extracted = extractedSourcePoints(root, entries);\n\n for (const [file, sourceReferences] of references) {\n if (hasMissingSourcePoint(file, sourceReferences, extracted)) {\n throw new Error(\"A translation expression could not be extracted safely\");\n }\n }\n};\n\nconst findSourceMessages = async (root: string, sourceFiles: string[]): Promise<SourceMessage[]> => {\n if (sourceFiles.length === 0) {\n clearI18nResources(root);\n\n return [];\n }\n\n const sources = new Map(sourceFiles.map((file) => [file, readFileSync(file, \"utf8\")]));\n const references: Map<string, TranslationReferences> = new Map();\n\n for (const [file, source] of sources) {\n references.set(file, assertSupportedTranslationSyntax(file, source));\n }\n\n let extracted: ExtractedKeysMap | undefined;\n const { logger, reports } = quietLogger();\n\n const capture: Plugin = {\n name: \"gtkx-gettext\",\n onLoad(code, path) {\n const sourceReferences = references.get(resolve(root, path));\n\n return sourceReferences === undefined\n ? code\n : maskUnrecognizedTranslations(code, sourceReferences);\n },\n onEnd(keys) {\n registerNestedLocations(root, references, keys);\n retainRecognizedEntries(root, references, keys);\n assertAllReferencesExtracted(root, references, keys);\n extracted = keys;\n },\n };\n\n const result = await runExtractor(i18nToolkitConfig(root, sourceFiles, [capture]), {\n logger,\n quiet: true,\n syncPrimaryWithDefaults: true,\n trustDerivedDefaults: true,\n });\n\n if (extracted === undefined || reports.length > 0 || result.hasErrors) {\n throw new Error(reports.join(\"\\n\") || \"i18next extraction failed\");\n }\n\n return sourceMessages(extracted.values().toArray())\n .map((message) => inferLocations(message, sources))\n .toSorted(compareMessages);\n};\n\nconst projectPath = (root: string, path: string): string | null => {\n const absolute = isAbsolute(path) ? resolve(path) : resolve(root, path);\n const projectRelative = relative(root, absolute);\n\n if (!isPathInside(root, absolute)) {\n return null;\n }\n\n return toPosixPath(projectRelative);\n};\n\nconst writePotfiles = (project: CatalogProject, sourceFiles: string[]): string => {\n const paths = sourceFiles\n .map((path) => projectPath(project.root, path))\n .filter((path): path is string => path !== null);\n\n const sorted = [...new Set(paths)].toSorted((left, right) => left.localeCompare(right));\n const target = resolve(project.poDir, POTFILES_FILENAME);\n writeFileSync(target, sorted.length === 0 ? \"\" : `${sorted.join(\"\\n\")}\\n`);\n\n return target;\n};\n\nconst renderCatalogCall = (message: SourceMessage): string => {\n const msgid = JSON.stringify(message.singular);\n\n if (message.plural !== null) {\n const plural = JSON.stringify(message.plural);\n\n return message.context === null\n ? `ngettext(${msgid}, ${plural}, 0);`\n : `npgettext(${JSON.stringify(message.context)}, ${msgid}, ${plural}, 0);`;\n }\n\n return message.context === null\n ? `gettext(${msgid});`\n : `pgettext(${JSON.stringify(message.context)}, ${msgid});`;\n};\n\nconst locatedOwners = (\n project: CatalogProject,\n message: SourceMessage,\n): { path: string; line: number | undefined }[] => {\n const owners: { path: string; line: number | undefined }[] = [];\n\n for (const location of message.locations) {\n const path = projectPath(project.root, location.file);\n\n if (path !== null) {\n owners.push({ path, line: location.line });\n }\n }\n\n const unique = new Map(owners.map((owner) => [`${owner.path}\\0${String(owner.line)}`, owner]));\n\n return unique.values().toArray();\n};\n\nconst sourceOwners = (\n project: CatalogProject,\n message: SourceMessage,\n): { path: string; line: number | undefined }[] => {\n const located = locatedOwners(project, message);\n\n return located.length > 0 ? located : [{ path: SYNTHETIC_FILENAME, line: undefined }];\n};\n\nconst syntheticEntries = (\n project: CatalogProject,\n messages: SourceMessage[],\n): Map<string, SyntheticEntry[]> => {\n const entries: Map<string, SyntheticEntry[]> = new Map();\n\n for (const message of messages) {\n for (const owner of sourceOwners(project, message)) {\n const owned = entries.get(owner.path) ?? [];\n owned.push({ call: renderCatalogCall(message), line: owner.line });\n entries.set(owner.path, owned);\n }\n }\n\n if (entries.size === 0) {\n entries.set(SYNTHETIC_FILENAME, []);\n }\n\n return entries;\n};\n\nconst compareSyntheticEntries = (left: SyntheticEntry, right: SyntheticEntry): number =>\n (left.line ?? Number.MAX_SAFE_INTEGER) - (right.line ?? Number.MAX_SAFE_INTEGER);\n\nconst lastSyntheticLine = (entries: SyntheticEntry[]): number => {\n let line = 0;\n\n for (const entry of entries) {\n line = Math.max(line, entry.line ?? 0);\n }\n\n return line;\n};\n\nconst appendSyntheticEntry = (lines: string[], entry: SyntheticEntry, requestedLine: number): void => {\n const index = requestedLine - 1;\n const existing = lines[index];\n\n if (existing === undefined || existing.length === 0) {\n lines[index] = entry.call;\n\n return;\n }\n\n lines[index] = `${existing} ${entry.call}`;\n};\n\nconst renderSyntheticSource = (entries: SyntheticEntry[]): string => {\n const lines: string[] = [];\n const sorted = entries.toSorted(compareSyntheticEntries);\n let nextLine = lastSyntheticLine(entries) + 1;\n\n for (const entry of sorted) {\n const requestedLine = Math.max(1, entry.line ?? nextLine++);\n appendSyntheticEntry(lines, entry, requestedLine);\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n};\n\nconst writeSyntheticSources = (\n workDir: string,\n project: CatalogProject,\n messages: SourceMessage[],\n): string => {\n const entries = syntheticEntries(project, messages);\n const paths: string[] = [];\n\n for (const [path, owned] of entries) {\n const target = join(workDir, path);\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, renderSyntheticSource(owned));\n paths.push(path);\n }\n\n const potfiles = join(workDir, POTFILES_FILENAME);\n writeFileSync(potfiles, `${paths.toSorted((left, right) => left.localeCompare(right)).join(\"\\n\")}\\n`);\n\n return potfiles;\n};\n\nconst extractSourceMessages = ({ project, messages, output, workDir }: SourceExtraction): void => {\n const potfilesPath = writeSyntheticSources(workDir, project, messages);\n\n runCliTool({\n tool: \"xgettext\",\n args: [\n \"--language=JavaScript\",\n \"--from-code=UTF-8\",\n \"--force-po\",\n \"--keyword=gettext:1\",\n \"--keyword=ngettext:1,2\",\n \"--keyword=pgettext:1c,2\",\n \"--keyword=npgettext:1c,2,3\",\n `--directory=${workDir}`,\n `--files-from=${potfilesPath}`,\n `--output=${output}`,\n ],\n target: output,\n });\n};\n\nconst extractMetadataFragment = (project: CatalogProject, input: string, output: string): void => {\n runCliTool({\n tool: \"msggrep\",\n args: [\n \"--force-po\",\n `--output-file=${output}`,\n ...metadataTemplateFiles(project).map((file) => `--location=${file.relativePath}`),\n input,\n ],\n target: input,\n });\n};\n\nconst joinMetadataFragment = (output: string, fragment: string): void => {\n runCliTool({\n tool: \"xgettext\",\n args: [\"--language=PO\", \"--join-existing\", \"--force-po\", `--output=${output}`, fragment],\n target: output,\n });\n};\n\nconst extractCatalogTemplate = ({\n project,\n messages,\n shouldPreserveMetadataMessages,\n output = resolve(project.poDir, `${project.domain}.pot`),\n}: CatalogTemplateExtraction): void => {\n const workDir = mkdtempSync(join(project.poDir, \".gtkx-i18n-\"));\n const source = join(workDir, \"source.pot\");\n const hasPreviousTemplate = existsSync(output);\n\n try {\n if (shouldPreserveMetadataMessages && hasPreviousTemplate) {\n const fragment = join(workDir, \"metadata.pot\");\n extractMetadataFragment(project, output, fragment);\n extractSourceMessages({ project, messages, output: source, workDir });\n joinMetadataFragment(source, fragment);\n } else {\n extractSourceMessages({ project, messages, output: source, workDir });\n }\n\n replaceCatalogTemplate(source, output);\n } finally {\n rmSync(workDir, { recursive: true, force: true });\n }\n};\n\nconst extractSourceCatalogTo = async (\n project: CatalogProject,\n paths: string[],\n output: string,\n): Promise<void> => {\n const sourceFiles = normalizedSourceFiles(project.root, paths);\n const messages = await findSourceMessages(project.root, sourceFiles);\n writePotfiles(project, sourceFiles);\n extractCatalogTemplate({ project, messages, shouldPreserveMetadataMessages: false, output });\n};\n\nconst extractSourceCatalog = async (\n project: CatalogProject,\n paths: string[],\n shouldPreserveMetadataMessages = true,\n): Promise<void> => {\n const sourceFiles = normalizedSourceFiles(project.root, paths);\n const messages = await findSourceMessages(project.root, sourceFiles);\n writePotfiles(project, sourceFiles);\n extractCatalogTemplate({ project, messages, shouldPreserveMetadataMessages });\n};\n\nexport { extractSourceCatalog, extractSourceCatalogTo };\n"]}
1
+ {"version":3,"file":"source-messages.js","sourceRoot":"","sources":["../../src/i18n/source-messages.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtractedKey, ExtractedKeysMap, Logger, Plugin } from \"i18next-cli\";\nimport type { ESTree } from \"vite\";\nimport { type NodePath, parseSync as parseBabelSync, type Scope, traverse, types } from \"@babel/core\";\nimport { isPathInside, isPathWithin, toPosixPath } from \"@gtkx/utils\";\nimport { runExtractor } from \"i18next-cli\";\nimport {\n existsSync,\n mkdirSync,\n mkdtempSync,\n readFileSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { parseSync, Visitor } from \"vite\";\nimport type { CatalogProject } from \"./catalogs.js\";\nimport { runCliTool } from \"../internal/run-cli-tool.js\";\nimport { sourceLanguage } from \"../internal/source-imports.js\";\nimport { replaceCatalogTemplate } from \"./catalog-template.js\";\nimport { metadataTemplateFiles } from \"./metadata-templates.js\";\nimport { clearI18nResources, i18nToolkitConfig } from \"./types.js\";\n\ntype SourceLocation = {\n file: string;\n line?: number | undefined;\n column?: number | undefined;\n};\ntype ExtractedLocation = NonNullable<ExtractedKey[\"locations\"]>[number];\n\ntype SourceMessage = {\n context: string | null;\n locations: SourceLocation[];\n namespace: string;\n plural: string | null;\n singular: string;\n sourceKey: string;\n};\n\ntype SyntheticEntry = {\n call: string;\n line: number | undefined;\n};\n\ntype SourceExtraction = {\n messages: SourceMessage[];\n output: string;\n project: CatalogProject;\n workDir: string;\n};\n\ntype CatalogTemplateExtraction = {\n messages: SourceMessage[];\n output?: string | undefined;\n project: CatalogProject;\n shouldPreserveMetadataMessages: boolean;\n};\n\ntype PluralVariant = {\n category: string;\n defaultValue: string;\n locations: SourceLocation[];\n};\n\ntype PluralGroup = {\n baseKey: string;\n namespace: string;\n variants: PluralVariant[];\n};\n\ntype TranslationReferences = {\n calls: Set<number>;\n elements: Set<number>;\n entryLocations: Map<string, SourcePoint[]>;\n locations: Map<string, SourcePoint>;\n masks: SourceMask[];\n sourcePoints: Map<number, SourcePoint>;\n};\ntype SourceMask = { end: number; start: number };\ntype SourcePoint = { column: number; line: number };\ntype TranslationCallKind = \"alias\" | \"canonical\";\ntype ImportedBinding = {\n imported: string;\n local: string;\n source: string;\n style: \"default\" | \"named\" | \"namespace\";\n};\ntype TranslationHookBinding = { call: types.CallExpression; isCanonical: boolean };\ntype TranslationMemberExpression = types.MemberExpression | types.OptionalMemberExpression;\ntype ResolvedBinding = NonNullable<ReturnType<Scope[\"getBinding\"]>>;\ntype LocatableNode = { loc?: { start: SourcePoint } | null | undefined };\n\nconst CONTEXT_SEPARATOR = \"\\u{4}\";\nconst DEFAULT_NAMESPACE = \"translation\";\nconst POTFILES_FILENAME = \"POTFILES.in\";\nconst SYNTHETIC_FILENAME = \"messages.js\";\nconst UNSUPPORTED_PLURAL_OPTION = /^defaultValue_(few|many|two|zero)$/u;\nconst STATIC_SOURCE_OPTION_NAMES: ReadonlySet<string> = new Set([\n \"context\",\n \"defaultValue\",\n \"defaultValue_one\",\n \"defaultValue_other\",\n \"keyPrefix\",\n]);\nconst NESTED_CONTEXT = /[\"']?context[\"']?\\s*:\\s*(?:\"([^\"]*)\"|'([^']*)')/u;\nconst NESTED_COUNT = /[\"']?count[\"']?\\s*:/u;\nconst NESTED_STRUCTURE_TOKEN = /\"[^\"]*\"|'[^']*'|[()]/gu;\nconst TRANSLATION_MODULES = new Set([\"@gtkx/i18n\", \"i18next\"]);\nconst TRANS_ELEMENTS: ReadonlySet<string> = new Set([\"Trans\", \"TransWithoutContext\"]);\nconst STATIC_KEY_WRAPPER_TYPES: ReadonlySet<string> = new Set([\n \"ParenthesizedExpression\",\n \"TSAsExpression\",\n \"TSSatisfiesExpression\",\n \"TSTypeAssertion\",\n \"TSNonNullExpression\",\n]);\n\nclass SourceExtractionError extends Error {}\n\nconst sourceErrorMessage = (error: unknown): string =>\n error instanceof Error ? error.message : String(error);\n\nconst projectSourcePath = (root: string, path: string): string => {\n const absolute = isAbsolute(path) ? resolve(path) : resolve(root, path);\n\n return toPosixPath(isPathInside(root, absolute) ? relative(root, absolute) : path);\n};\n\nconst sourceExtractionError = (\n root: string,\n path: string,\n point: SourcePoint | null,\n error: unknown,\n): SourceExtractionError => {\n if (error instanceof SourceExtractionError) {\n return error;\n }\n\n const file = projectSourcePath(root, path);\n const location = point === null\n ? file\n : `${file}:${String(point.line)}:${String(point.column + 1)}`;\n\n return new SourceExtractionError(`${location}: ${sourceErrorMessage(error)}`, { cause: error });\n};\n\nconst locatablePoint = (node: LocatableNode): SourcePoint | null => {\n const location = node.loc?.start;\n\n return location === undefined ? null : { column: location.column, line: location.line };\n};\n\nconst isSourcePoint = (value: unknown): value is SourcePoint =>\n typeof value === \"object\" &&\n value !== null &&\n \"column\" in value &&\n typeof value.column === \"number\" &&\n \"line\" in value &&\n typeof value.line === \"number\";\n\nconst errorSourcePoint = (error: unknown): SourcePoint | null => {\n if (typeof error !== \"object\" || error === null) {\n return null;\n }\n\n if (\"loc\" in error && isSourcePoint(error.loc)) {\n return error.loc;\n }\n\n return \"location\" in error && isSourcePoint(error.location) ? error.location : null;\n};\n\nconst atSourceNode = <T>(\n root: string,\n path: string,\n node: LocatableNode,\n operation: () => T,\n): T => {\n try {\n return operation();\n } catch (error) {\n throw sourceExtractionError(root, path, locatablePoint(node), error);\n }\n};\n\nconst atExtractedLocation = <T>(\n root: string,\n locations: SourceLocation[],\n operation: () => T,\n): T => {\n const location = locations.find((candidate) =>\n candidate.line !== undefined && candidate.column !== undefined);\n\n if (location?.line === undefined || location.column === undefined) {\n return operation();\n }\n\n try {\n return operation();\n } catch (error) {\n throw sourceExtractionError(\n root,\n location.file,\n { column: location.column, line: location.line },\n error,\n );\n }\n};\n\nconst quietLogger = (): { logger: Logger; reports: string[] } => {\n const reports: string[] = [];\n\n return {\n reports,\n logger: {\n info() {\n return;\n },\n warn(message, more) {\n const detail = more === undefined ? \"\" : ` ${String(more)}`;\n reports.push(`${message}${detail}`);\n },\n error(message) {\n reports.push(String(message));\n },\n },\n };\n};\n\nconst splitContext = (key: string): { context: string | null; msgid: string } => {\n const index = key.lastIndexOf(CONTEXT_SEPARATOR);\n\n if (index === -1) {\n return { context: null, msgid: key };\n }\n\n return { context: key.slice(index + CONTEXT_SEPARATOR.length), msgid: key.slice(0, index) };\n};\n\nconst namespaceFor = (entry: ExtractedKey): string =>\n typeof entry.ns === \"string\" ? entry.ns : DEFAULT_NAMESPACE;\n\nconst validateIdentity = (context: string | null, msgid: string): void => {\n if (context === \"\" || msgid.length === 0) {\n throw new Error(\"Translation keys and contexts cannot be empty\");\n }\n};\n\nconst compareLocations = (left: SourceLocation, right: SourceLocation): number =>\n left.file.localeCompare(right.file) ||\n (left.line ?? 0) - (right.line ?? 0) ||\n (left.column ?? 0) - (right.column ?? 0);\n\nconst normalizedLocations = (locations: SourceLocation[]): SourceLocation[] => {\n const unique: Map<string, SourceLocation> = new Map();\n\n for (const location of locations) {\n const key = `${location.file}\\0${String(location.line)}\\0${String(location.column)}`;\n unique.set(key, location);\n }\n\n return unique.values().toArray().toSorted(compareLocations);\n};\n\nconst pointSource = (entry: ExtractedKey, msgid: string): string => {\n if (typeof entry.defaultValue !== \"string\") {\n return msgid;\n }\n\n if (entry.explicitDefault === true) {\n return entry.defaultValue;\n }\n\n return entry.defaultValue === msgid || msgid.endsWith(`.${entry.defaultValue}`)\n ? msgid\n : entry.defaultValue;\n};\n\nconst pointMessage = (entry: ExtractedKey): SourceMessage => {\n const { context, msgid } = splitContext(entry.key);\n validateIdentity(context, msgid);\n const singular = pointSource(entry, msgid);\n\n if (singular.length === 0) {\n throw new Error(\"Translation source strings cannot be empty\");\n }\n\n return {\n context,\n locations: normalizedLocations(entry.locations ?? []),\n namespace: namespaceFor(entry),\n plural: null,\n singular,\n sourceKey: msgid,\n };\n};\n\nconst expandedPlural = (entry: ExtractedKey): { baseKey: string; variant: PluralVariant } => {\n if (entry.isOrdinal === true) {\n throw new Error(\"GNU gettext catalogs do not support i18next ordinal plurals\");\n }\n\n const suffix = /_(few|many|one|other|two|zero)$/u.exec(entry.key);\n const defaultValue = entry.defaultValue;\n const category = suffix?.[1];\n\n if (suffix === null || category === undefined || typeof defaultValue !== \"string\") {\n throw new Error(\"Unable to recover an i18next plural source pair\");\n }\n\n return {\n baseKey: entry.key.slice(0, -suffix[0].length),\n variant: {\n category,\n defaultValue,\n locations: entry.locations ?? [],\n },\n };\n};\n\nconst groupedPlurals = (root: string, entries: ExtractedKey[]): PluralGroup[] => {\n const groups: Map<string, PluralGroup> = new Map();\n\n for (const entry of entries) {\n const { baseKey, variant } = atExtractedLocation(\n root,\n entry.locations ?? [],\n () => expandedPlural(entry),\n );\n const namespace = namespaceFor(entry);\n const key = `${namespace}\\0${baseKey}`;\n const group = groups.get(key) ?? { baseKey, namespace, variants: [] };\n group.variants.push(variant);\n groups.set(key, group);\n }\n\n return groups.values().toArray();\n};\n\nconst pairedVariants = (variants: PluralVariant[]): { one: PluralVariant; other: PluralVariant } => {\n const categories = new Map(variants.map((variant) => [variant.category, variant]));\n\n if (categories.size !== 2 || !categories.has(\"one\") || !categories.has(\"other\")) {\n throw new Error(\"GNU gettext requires one singular and one plural source string\");\n }\n\n const one = categories.get(\"one\");\n const other = categories.get(\"other\");\n\n if (one === undefined || other === undefined) {\n throw new Error(\"Unable to recover an i18next plural source pair\");\n }\n\n return { one, other };\n};\n\nconst pluralMessage = ({ baseKey, namespace, variants }: PluralGroup): SourceMessage => {\n const { one, other } = pairedVariants(variants);\n const { context, msgid } = splitContext(baseKey);\n validateIdentity(context, msgid);\n const singular = one.defaultValue;\n const plural = other.defaultValue;\n\n if (singular === plural || singular.length === 0 || plural.length === 0) {\n throw new Error(\"GNU gettext plural source strings must be distinct and non-empty\");\n }\n\n return {\n context,\n locations: normalizedLocations(variants.flatMap((variant) => variant.locations)),\n namespace,\n plural,\n singular,\n sourceKey: msgid,\n };\n};\n\nconst pluralMessages = (root: string, entries: ExtractedKey[]): SourceMessage[] =>\n groupedPlurals(root, entries).map((group) =>\n atExtractedLocation(\n root,\n group.variants.flatMap((variant) => variant.locations),\n () => pluralMessage(group),\n ));\n\nconst assertCardinal = (entry: ExtractedKey): void => {\n if (entry.isOrdinal === true) {\n throw new Error(\"GNU gettext catalogs do not support i18next ordinal plurals\");\n }\n};\n\nconst sourceMessages = (root: string, entries: ExtractedKey[]): SourceMessage[] => {\n const points: ExtractedKey[] = [];\n const plurals: ExtractedKey[] = [];\n\n for (const entry of entries) {\n atExtractedLocation(root, entry.locations ?? [], () => {\n assertCardinal(entry);\n });\n\n if (entry.isExpandedPlural === true) {\n plurals.push(entry);\n continue;\n }\n\n if (entry.hasCount === true) {\n throw new Error(\"Count-based translations require an explicit plural source string\");\n }\n\n points.push(entry);\n }\n\n return [\n ...points.map((entry) =>\n atExtractedLocation(root, entry.locations ?? [], () => pointMessage(entry))),\n ...pluralMessages(root, plurals),\n ];\n};\n\nconst compareMessages = (left: SourceMessage, right: SourceMessage): number =>\n left.namespace.localeCompare(right.namespace) ||\n (left.context ?? \"\").localeCompare(right.context ?? \"\") ||\n left.singular.localeCompare(right.singular) ||\n (left.plural ?? \"\").localeCompare(right.plural ?? \"\");\n\nconst inferLocations = (message: SourceMessage, sources: Map<string, string>): SourceMessage => {\n if (message.locations.length > 0) {\n return message;\n }\n\n const locations: SourceLocation[] = [];\n\n for (const [file, source] of sources) {\n const index = source.indexOf(message.sourceKey);\n\n if (index !== -1) {\n locations.push({ file, line: source.slice(0, index).split(\"\\n\").length });\n }\n }\n\n return { ...message, locations };\n};\n\nconst normalizedSourceFiles = (root: string, paths: string[]): string[] => {\n const files = paths\n .map((path) => resolve(root, path))\n .filter((path) => isPathWithin(root, path));\n\n return new Set(files).values().toArray().toSorted((left, right) => left.localeCompare(right));\n};\n\ntype StaticKeyWrapper = ESTree.ParenthesizedExpression |\n ESTree.TSAsExpression |\n ESTree.TSSatisfiesExpression |\n ESTree.TSTypeAssertion |\n ESTree.TSNonNullExpression;\n\nconst isStaticKeyWrapper = (key: ESTree.Node): key is StaticKeyWrapper =>\n STATIC_KEY_WRAPPER_TYPES.has(key.type);\n\nconst unwrapStaticWrapper = (node: ESTree.Node): ESTree.Node =>\n isStaticKeyWrapper(node) ? unwrapStaticWrapper(node.expression) : node;\n\nconst isStaticTranslationKey = (key: ESTree.Node | null | undefined): boolean => {\n if (key === undefined || key === null) {\n return false;\n }\n\n if (key.type === \"Literal\") {\n return typeof key.value === \"string\";\n }\n\n if (key.type === \"TemplateLiteral\") {\n return key.expressions.length === 0;\n }\n\n if (key.type === \"ParenthesizedExpression\") {\n return false;\n }\n\n if (isStaticKeyWrapper(key)) {\n return isStaticTranslationKey(key.expression);\n }\n\n return false;\n};\n\nconst assertStaticTranslationKey = (key: ESTree.Node | null | undefined): void => {\n if (!isStaticTranslationKey(key)) {\n throw new Error(\"Translation keys must be string literals\");\n }\n};\n\nconst propertyName = (property: ESTree.ObjectProperty): string | null => {\n if (!property.computed && property.key.type === \"Identifier\") {\n return property.key.name;\n }\n\n return property.key.type === \"Literal\" && typeof property.key.value === \"string\"\n ? property.key.value\n : null;\n};\n\nconst assertSupportedOptionProperty = (property: ESTree.ObjectPropertyKind): void => {\n if (property.type === \"SpreadElement\") {\n throw new Error(\"Translation extraction requires explicit option properties\");\n }\n\n const name = propertyName(property);\n\n if (name === null) {\n throw new Error(\"Translation extraction requires static option property names\");\n }\n\n if (UNSUPPORTED_PLURAL_OPTION.test(name)) {\n throw new Error(\"GNU gettext accepts one singular and one plural source string\");\n }\n\n if (STATIC_SOURCE_OPTION_NAMES.has(name)) {\n assertStaticTranslationKey(property.value);\n }\n};\n\nconst assertSupportedOptionObject = (options: ESTree.Node | null | undefined): void => {\n if (options === null || options === undefined) {\n return;\n }\n\n if (isStaticKeyWrapper(options) && unwrapStaticWrapper(options).type === \"ObjectExpression\") {\n throw new Error(\"Translation option objects cannot be wrapped in another expression\");\n }\n\n if (options.type !== \"ObjectExpression\") {\n throw new Error(\"Translation option objects must be inline object literals\");\n }\n\n for (const property of options.properties) {\n assertSupportedOptionProperty(property);\n }\n};\n\nconst namedImportedBinding = (path: NodePath, source: string): ImportedBinding | null => {\n if (!path.isImportSpecifier() || path.node.importKind === \"type\") {\n return null;\n }\n\n const imported = path.node.imported;\n\n return {\n imported: types.isIdentifier(imported) ? imported.name : imported.value,\n local: path.node.local.name,\n source,\n style: \"named\",\n };\n};\n\nconst defaultImportedBinding = (path: NodePath, source: string): ImportedBinding | null =>\n path.isImportDefaultSpecifier()\n ? { imported: \"default\", local: path.node.local.name, source, style: \"default\" }\n : null;\n\nconst namespaceImportedBinding = (path: NodePath, source: string): ImportedBinding | null =>\n path.isImportNamespaceSpecifier()\n ? { imported: \"*\", local: path.node.local.name, source, style: \"namespace\" }\n : null;\n\nconst importedBinding = (binding: ResolvedBinding | undefined): ImportedBinding | null => {\n if (binding === undefined) {\n return null;\n }\n\n const path = binding.path;\n const declaration = path.parentPath;\n\n if (!declaration.isImportDeclaration() || declaration.node.importKind === \"type\") {\n return null;\n }\n\n const source = declaration.node.source.value;\n\n return namedImportedBinding(path, source) ??\n defaultImportedBinding(path, source) ??\n namespaceImportedBinding(path, source);\n};\n\nconst babelPropertyName = (property: types.ObjectProperty): string | null => {\n const key = property.key;\n\n if (!property.computed && types.isIdentifier(key)) {\n return key.name;\n }\n\n return types.isStringLiteral(key) ? key.value : null;\n};\n\nconst isBoundIdentifier = (node: types.Node | null, name: string): boolean => {\n if (types.isIdentifier(node)) {\n return node.name === name;\n }\n\n if (types.isAssignmentPattern(node)) {\n return types.isIdentifier(node.left) && node.left.name === name;\n }\n\n return false;\n};\n\nconst isHookPatternBinding = (pattern: types.VariableDeclarator[\"id\"], name: string): boolean => {\n if (types.isObjectPattern(pattern)) {\n return pattern.properties.some((property) =>\n types.isObjectProperty(property) &&\n babelPropertyName(property) === \"t\" &&\n isBoundIdentifier(property.value, name));\n }\n\n if (types.isArrayPattern(pattern)) {\n return isBoundIdentifier(pattern.elements[0] ?? null, name);\n }\n\n return false;\n};\n\nconst importedTranslationHook = (scope: Scope, call: types.CallExpression): ImportedBinding | null => {\n if (!types.isIdentifier(call.callee)) {\n return null;\n }\n\n const imported = importedBinding(scope.getBinding(call.callee.name));\n\n return imported?.imported === \"useTranslation\" && TRANSLATION_MODULES.has(imported.source)\n ? imported\n : null;\n};\n\nconst translationHookBinding = (binding: ResolvedBinding): TranslationHookBinding | null => {\n const path = binding.path;\n\n if (!path.isVariableDeclarator()) {\n return null;\n }\n\n const pattern = path.node.id;\n const initializer = path.node.init;\n\n if (!isHookPatternBinding(pattern, binding.identifier.name) ||\n !types.isCallExpression(initializer)) {\n return null;\n }\n\n const imported = importedTranslationHook(path.scope, initializer);\n\n if (imported === null) {\n return null;\n }\n\n return { call: initializer, isCanonical: imported.local === \"useTranslation\" };\n};\n\nconst importedTranslationFunctionKind = (imported: ImportedBinding | null): TranslationCallKind | null => {\n if (imported?.imported !== \"t\" || !TRANSLATION_MODULES.has(imported.source)) {\n return null;\n }\n\n return imported.local === \"t\" ? \"canonical\" : \"alias\";\n};\n\nconst hookTranslationFunctionKind = (binding: ResolvedBinding | undefined): TranslationCallKind | null => {\n if (binding === undefined) {\n return null;\n }\n\n const hook = translationHookBinding(binding);\n\n if (hook === null) {\n return null;\n }\n\n return binding.identifier.name === \"t\" && hook.isCanonical ? \"canonical\" : \"alias\";\n};\n\nconst directTranslationFunctionKind = (scope: Scope, name: string): TranslationCallKind | null => {\n const binding = scope.getBinding(name);\n\n return importedTranslationFunctionKind(importedBinding(binding)) ?? hookTranslationFunctionKind(binding);\n};\n\nconst babelMemberName = (member: TranslationMemberExpression): string | null => {\n const property = member.property;\n\n if (member.computed) {\n return types.isStringLiteral(property) ? property.value : null;\n }\n\n return types.isIdentifier(property) ? property.name : null;\n};\n\nconst isImportedTranslationObject = (scope: Scope, object: types.Node): boolean => {\n if (!types.isIdentifier(object)) {\n return false;\n }\n\n const imported = importedBinding(scope.getBinding(object.name));\n\n return imported !== null &&\n TRANSLATION_MODULES.has(imported.source) &&\n (imported.style === \"namespace\" || (imported.source === \"i18next\" && imported.imported === \"default\"));\n};\n\nconst constantVariableDeclarator = (binding: ResolvedBinding): NodePath<types.VariableDeclarator> | null => {\n const path = binding.path;\n const declaration = path.parentPath;\n\n if (!path.isVariableDeclarator() ||\n !declaration.isVariableDeclaration() ||\n declaration.node.kind !== \"const\") {\n return null;\n }\n\n return path;\n};\n\nconst isTranslationHookResultBinding = (binding: ResolvedBinding | undefined): boolean => {\n if (binding === undefined) {\n return false;\n }\n\n const path = constantVariableDeclarator(binding);\n const initializer = path?.node.init;\n\n return path !== null &&\n types.isIdentifier(path.node.id) &&\n types.isCallExpression(initializer) &&\n importedTranslationHook(path.scope, initializer) !== null;\n};\n\nconst isHookTranslationMember = (scope: Scope, member: TranslationMemberExpression): boolean => {\n if (babelMemberName(member) !== \"t\") {\n return false;\n }\n\n const object = member.object;\n\n if (types.isCallExpression(object)) {\n return importedTranslationHook(scope, object) !== null;\n }\n\n return types.isIdentifier(object) && isTranslationHookResultBinding(scope.getBinding(object.name));\n};\n\nconst isTranslationMember = (scope: Scope, member: TranslationMemberExpression): boolean =>\n babelMemberName(member) === \"t\" &&\n (isImportedTranslationObject(scope, member.object) || isHookTranslationMember(scope, member));\n\nconst isDirectTranslationFunction = (scope: Scope, node: types.Node): boolean =>\n types.isIdentifier(node) && directTranslationFunctionKind(scope, node.name) !== null;\n\nconst isTranslationFunctionValue = (scope: Scope, node: types.Node): boolean => {\n if (isDirectTranslationFunction(scope, node)) {\n return true;\n }\n\n return (types.isMemberExpression(node) || types.isOptionalMemberExpression(node)) &&\n isTranslationMember(scope, node);\n};\n\nconst isTranslationBindCall = (scope: Scope, node: types.Node): boolean => {\n if (!types.isCallExpression(node) || !types.isMemberExpression(node.callee)) {\n return false;\n }\n\n return babelMemberName(node.callee) === \"bind\" &&\n isTranslationFunctionValue(scope, node.callee.object);\n};\n\nconst isTranslationObjectPatternAlias = (\n path: NodePath<types.VariableDeclarator>,\n binding: ResolvedBinding,\n): boolean => {\n const pattern = path.node.id;\n const initializer = path.node.init;\n\n if (!types.isObjectPattern(pattern) ||\n !isHookPatternBinding(pattern, binding.identifier.name) ||\n !types.isIdentifier(initializer)) {\n return false;\n }\n\n return isImportedTranslationObject(path.scope, initializer) ||\n isTranslationHookResultBinding(path.scope.getBinding(initializer.name));\n};\n\nconst isTranslationAliasBinding = (binding: ResolvedBinding | undefined): boolean => {\n if (binding === undefined) {\n return false;\n }\n\n const path = constantVariableDeclarator(binding);\n\n if (path === null) {\n return false;\n }\n\n if (isTranslationObjectPatternAlias(path, binding)) {\n return true;\n }\n\n const initializer = path.node.init;\n\n return types.isIdentifier(path.node.id) &&\n initializer !== null &&\n initializer !== undefined &&\n (isTranslationFunctionValue(path.scope, initializer) || isTranslationBindCall(path.scope, initializer));\n};\n\nconst translationFunctionKind = (scope: Scope, name: string): TranslationCallKind | null => {\n const direct = directTranslationFunctionKind(scope, name);\n\n if (direct !== null) {\n return direct;\n }\n\n return isTranslationAliasBinding(scope.getBinding(name)) ? \"alias\" : null;\n};\n\nconst translationElementKind = (path: NodePath, name: string): TranslationCallKind | null => {\n const imported = importedBinding(path.scope.getBinding(name));\n\n if (imported?.source !== \"@gtkx/i18n\" || !TRANS_ELEMENTS.has(imported.imported)) {\n return null;\n }\n\n return imported.local === imported.imported ? \"canonical\" : \"alias\";\n};\n\nconst nodeStart = (path: NodePath): number => {\n const start = path.node.start;\n\n if (start === null || start === undefined) {\n throw new Error(\"Translation extraction could not locate a source expression\");\n }\n\n return start;\n};\n\nconst registerSourceMask = (node: types.Node, references: TranslationReferences): void => {\n const { start, end } = node;\n\n if (start === null || start === undefined || end === null || end === undefined) {\n throw new Error(\"Translation extraction could not locate a source expression\");\n }\n\n references.masks.push({ start, end });\n};\n\nconst sourceLocationKey = (line: number, column: number): string => `${String(line)}:${String(column)}`;\n\nconst sourcePoint = (node: types.Node): SourcePoint | null => {\n return locatablePoint(node);\n};\n\nconst registerSourceLocation = (node: types.Node, references: TranslationReferences): SourcePoint | null => {\n const point = sourcePoint(node);\n\n if (point !== null) {\n references.locations.set(sourceLocationKey(point.line, point.column), point);\n }\n\n return point;\n};\n\nconst babelStaticKey = (node: types.Node | null | undefined): string | null => {\n if (node === null || node === undefined) {\n return null;\n }\n\n if (types.isStringLiteral(node)) {\n return node.value;\n }\n\n if (types.isTemplateLiteral(node) && node.expressions.length === 0) {\n return node.quasis[0]?.value.cooked ?? null;\n }\n\n if (types.isParenthesizedExpression(node) ||\n types.isTSAsExpression(node) ||\n types.isTSSatisfiesExpression(node) ||\n types.isTSTypeAssertion(node) ||\n types.isTSNonNullExpression(node)) {\n return babelStaticKey(node.expression);\n }\n\n return null;\n};\n\nconst babelObjectExpression = (node: types.Node | null | undefined): types.ObjectExpression | null => {\n if (node === null || node === undefined) {\n return null;\n }\n\n if (types.isObjectExpression(node)) {\n return node;\n }\n\n if (types.isParenthesizedExpression(node) ||\n types.isTSAsExpression(node) ||\n types.isTSSatisfiesExpression(node) ||\n types.isTSTypeAssertion(node) ||\n types.isTSNonNullExpression(node)) {\n return babelObjectExpression(node.expression);\n }\n\n return null;\n};\n\nconst babelNamedProperty = (\n object: types.ObjectExpression | null,\n name: string,\n): types.ObjectProperty | null => {\n if (object === null) {\n return null;\n }\n\n for (const property of object.properties) {\n if (types.isObjectProperty(property) && babelPropertyName(property) === name) {\n return property;\n }\n }\n\n return null;\n};\n\nconst babelStringProperty = (object: types.ObjectExpression | null, name: string): string | null => {\n const property = babelNamedProperty(object, name);\n\n if (property === null) {\n return null;\n }\n\n const value = babelStaticKey(property.value);\n\n if (value === null) {\n throw new Error(`Translation ${name} values must be string literals`);\n }\n\n return value;\n};\n\nconst callOptions = (call: types.CallExpression): types.ObjectExpression | null =>\n babelObjectExpression(call.arguments[1]) ?? babelObjectExpression(call.arguments[2]);\n\nconst hookKeyPrefix = (callee: NodePath<types.Identifier>): string => {\n const binding = callee.scope.getBinding(callee.node.name);\n const hook = binding === undefined ? null : translationHookBinding(binding);\n\n return babelStringProperty(\n hook === null ? null : babelObjectExpression(hook.call.arguments[1]),\n \"keyPrefix\",\n ) ?? \"\";\n};\n\nconst prefixedTranslationKey = (prefix: string, key: string): string => {\n if (prefix.length === 0) {\n return key;\n }\n\n return prefix.endsWith(\".\") ? `${prefix}${key}` : `${prefix}.${key}`;\n};\n\nconst extractedEntryKey = (call: types.CallExpression, keyPrefix: string): string | null => {\n const key = babelStaticKey(call.arguments[0]);\n\n if (key === null) {\n return null;\n }\n\n const options = callOptions(call);\n const callPrefix = babelStringProperty(options, \"keyPrefix\");\n\n if (callPrefix === \"\" && keyPrefix.length > 0) {\n throw new Error(\"An empty call keyPrefix cannot override a hook keyPrefix during extraction\");\n }\n\n const selectedPrefix = callPrefix ?? keyPrefix;\n const prefixed = prefixedTranslationKey(selectedPrefix, key);\n const context = babelStringProperty(options, \"context\");\n\n return context === null ? prefixed : `${prefixed}${CONTEXT_SEPARATOR}${context}`;\n};\n\nconst registerEntryLocation = (\n key: string | null,\n point: SourcePoint | null,\n references: TranslationReferences,\n): void => {\n if (key === null || point === null) {\n return;\n }\n\n const locations = references.entryLocations.get(key) ?? [];\n locations.push(point);\n references.entryLocations.set(key, locations);\n};\n\nconst registerCallReference = (\n callPath: NodePath<types.CallExpression>,\n references: TranslationReferences,\n keyPrefix: string,\n): void => {\n references.calls.add(nodeStart(callPath));\n const firstArgument = callPath.node.arguments[0];\n const point = registerSourceLocation(firstArgument ?? callPath.node, references);\n\n if (point !== null) {\n references.sourcePoints.set(nodeStart(callPath), point);\n }\n\n registerEntryLocation(extractedEntryKey(callPath.node, keyPrefix), point, references);\n};\n\nconst parserPlugins = (lang: ReturnType<typeof sourceLanguage>): (\"decorators\" | \"jsx\" | \"typescript\")[] => [\n \"decorators\",\n ...(lang === \"ts\" || lang === \"tsx\" ? [\"typescript\" as const] : []),\n ...(lang === \"jsx\" || lang === \"tsx\" ? [\"jsx\" as const] : []),\n];\n\nconst parseTranslationReferences = (\n root: string,\n path: string,\n source: string,\n lang: ReturnType<typeof sourceLanguage>,\n) => {\n try {\n return parseBabelSync(source, {\n ast: true,\n babelrc: false,\n configFile: false,\n filename: projectSourcePath(root, path),\n parserOpts: { createParenthesizedExpressions: true, plugins: parserPlugins(lang) },\n sourceType: \"module\",\n });\n } catch (error) {\n throw sourceExtractionError(root, path, errorSourcePoint(error), error);\n }\n};\n\nconst registerIdentifierTranslationCall = (\n callPath: NodePath<types.CallExpression>,\n callee: NodePath,\n references: TranslationReferences,\n): void => {\n if (!callee.isIdentifier()) {\n return;\n }\n\n const kind = translationFunctionKind(callee.scope, callee.node.name);\n\n if (kind === \"alias\") {\n throw new Error(\"Translation calls must use the imported name t\");\n }\n\n if (kind === \"canonical\") {\n registerCallReference(callPath, references, hookKeyPrefix(callee));\n } else if (callee.node.name === \"t\") {\n registerSourceMask(callee.node, references);\n }\n};\n\nconst registerTranslationCall = (\n callPath: NodePath<types.CallExpression>,\n references: TranslationReferences,\n): void => {\n assertSupportedWrappedCallee(callPath);\n const callee = callPath.get(\"callee\");\n\n if (callee.isIdentifier()) {\n registerIdentifierTranslationCall(callPath, callee, references);\n\n return;\n }\n\n if (callee.isMemberExpression() && isTranslationMember(callee.scope, callee.node)) {\n throw new Error(\"Translation calls must use the named t export\");\n }\n};\n\nconst unwrapTranslationCallee = (node: types.Node): types.Node => {\n if (types.isParenthesizedExpression(node) ||\n types.isTSAsExpression(node) ||\n types.isTSSatisfiesExpression(node) ||\n types.isTSTypeAssertion(node) ||\n types.isTSNonNullExpression(node)) {\n return unwrapTranslationCallee(node.expression);\n }\n\n return node;\n};\n\nconst isTranslationCallee = (scope: Scope, node: types.Node): boolean => {\n if (types.isIdentifier(node)) {\n return translationFunctionKind(scope, node.name) !== null;\n }\n\n return (types.isMemberExpression(node) || types.isOptionalMemberExpression(node)) &&\n isTranslationMember(scope, node);\n};\n\nconst assertSupportedWrappedCallee = (callPath: NodePath<types.CallExpression>): void => {\n const callee = callPath.node.callee;\n const unwrapped = unwrapTranslationCallee(callee);\n\n if (unwrapped !== callee && isTranslationCallee(callPath.scope, unwrapped)) {\n throw new Error(\"Translation call expressions cannot wrap their callee\");\n }\n};\n\nconst assertSupportedOptionalCall = (callPath: NodePath<types.OptionalCallExpression>): void => {\n const callee = unwrapTranslationCallee(callPath.node.callee);\n\n if (isTranslationCallee(callPath.scope, callee)) {\n throw new Error(\"Translation calls cannot use optional chaining\");\n }\n};\n\nconst assertUnsupportedTranslationTag = (tagPath: NodePath<types.TaggedTemplateExpression>): void => {\n const tag = unwrapTranslationCallee(tagPath.node.tag);\n\n if (isTranslationCallee(tagPath.scope, tag)) {\n throw new Error(\"Translation calls cannot use tagged-template syntax\");\n }\n};\n\nconst registerUnrecognizedElementMasks = (\n elementPath: NodePath,\n name: NodePath<types.JSXIdentifier>,\n references: TranslationReferences,\n): void => {\n registerSourceMask(name.node, references);\n const parent = elementPath.parentPath.node;\n const closingName = types.isJSXElement(parent) ? parent.closingElement?.name : null;\n\n if (types.isJSXIdentifier(closingName)) {\n registerSourceMask(closingName, references);\n }\n};\n\nconst registerElementReference = (\n elementPath: NodePath,\n references: TranslationReferences,\n): void => {\n const start = nodeStart(elementPath);\n const point = registerSourceLocation(elementPath.node, references);\n references.elements.add(start);\n\n if (point !== null) {\n references.sourcePoints.set(start, point);\n }\n};\n\nconst registerTranslationElement = (elementPath: NodePath, references: TranslationReferences): void => {\n const name = elementPath.get(\"name\");\n\n if (!name.isJSXIdentifier()) {\n return;\n }\n\n const kind = translationElementKind(name, name.node.name);\n\n if (kind === \"alias\") {\n throw new Error(\"Translation components must use their imported names\");\n }\n\n if (kind === \"canonical\") {\n registerElementReference(elementPath, references);\n } else if (TRANS_ELEMENTS.has(name.node.name)) {\n registerUnrecognizedElementMasks(elementPath, name, references);\n }\n};\n\nconst maskUnrecognizedTranslations = (source: string, references: TranslationReferences): string => {\n let masked = source;\n const masks = references.masks.toSorted((left, right) => right.start - left.start);\n\n for (const { start, end } of masks) {\n masked = `${masked.slice(0, start)}${\"_\".repeat(end - start)}${masked.slice(end)}`;\n }\n\n return masked;\n};\n\nconst translationReferences = (\n root: string,\n path: string,\n source: string,\n lang: ReturnType<typeof sourceLanguage>,\n): TranslationReferences => {\n const parsed = parseTranslationReferences(root, path, source, lang);\n\n if (parsed === null) {\n throw new Error(`Translation extraction could not parse ${path}`);\n }\n\n const references: TranslationReferences = {\n calls: new Set(),\n elements: new Set(),\n entryLocations: new Map(),\n locations: new Map(),\n masks: [],\n sourcePoints: new Map(),\n };\n\n traverse(parsed, {\n CallExpression(callPath) {\n atSourceNode(root, path, callPath.node, () => {\n registerTranslationCall(callPath, references);\n });\n },\n JSXOpeningElement(elementPath) {\n atSourceNode(root, path, elementPath.node, () => {\n registerTranslationElement(elementPath, references);\n });\n },\n OptionalCallExpression(callPath) {\n atSourceNode(root, path, callPath.node, () => {\n assertSupportedOptionalCall(callPath);\n });\n },\n TaggedTemplateExpression(tagPath) {\n atSourceNode(root, path, tagPath.node, () => {\n assertUnsupportedTranslationTag(tagPath);\n });\n },\n });\n\n return references;\n};\n\nconst assertSupportedTranslationCall = (node: ESTree.CallExpression, references: TranslationReferences): void => {\n if (!references.calls.has(node.start)) {\n return;\n }\n\n assertStaticTranslationKey(node.arguments[0]);\n assertSupportedTranslationOptions(node.arguments[1], node.arguments[2]);\n};\n\nconst assertSupportedTranslationOptions = (\n second: ESTree.Node | null | undefined,\n third: ESTree.Node | null | undefined,\n): void => {\n if (third !== undefined && third !== null) {\n assertStaticTranslationKey(second);\n assertSupportedOptionObject(third);\n\n return;\n }\n\n if (second === undefined || second === null || isStaticTranslationKey(second)) {\n return;\n }\n\n assertSupportedOptionObject(second);\n};\n\nconst isNamedJsxAttribute = (attribute: ESTree.JSXAttribute, name: string): boolean =>\n attribute.name.type === \"JSXIdentifier\" && attribute.name.name === name;\n\nconst assertSupportedTransKey = (attribute: ESTree.JSXAttribute): void => {\n if (!isNamedJsxAttribute(attribute, \"i18nKey\")) {\n return;\n }\n\n const key = attribute.value?.type === \"JSXExpressionContainer\"\n ? attribute.value.expression\n : attribute.value;\n assertStaticTranslationKey(key);\n};\n\nconst assertSupportedTransStringAttribute = (attribute: ESTree.JSXAttribute, name: string): void => {\n if (!isNamedJsxAttribute(attribute, name)) {\n return;\n }\n\n const value = attribute.value?.type === \"JSXExpressionContainer\"\n ? attribute.value.expression\n : attribute.value;\n assertStaticTranslationKey(value);\n};\n\nconst assertSupportedTransOptions = (attribute: ESTree.JSXAttribute): void => {\n if (isNamedJsxAttribute(attribute, \"tOptions\") && attribute.value?.type === \"JSXExpressionContainer\") {\n assertSupportedOptionObject(attribute.value.expression);\n }\n};\n\nconst assertSupportedTransAttribute = (attribute: ESTree.JSXAttributeItem): void => {\n if (attribute.type === \"JSXSpreadAttribute\") {\n throw new Error(\"Translation extraction requires explicit component properties\");\n }\n\n assertSupportedTransKey(attribute);\n assertSupportedTransStringAttribute(attribute, \"context\");\n assertSupportedTransStringAttribute(attribute, \"defaults\");\n assertSupportedTransOptions(attribute);\n};\n\nconst assertSupportedTransElement = (node: ESTree.JSXOpeningElement, references: TranslationReferences): void => {\n if (!references.elements.has(node.start)) {\n return;\n }\n\n for (const attribute of node.attributes) {\n assertSupportedTransAttribute(attribute);\n }\n};\n\nconst assertSupportedTranslationSyntax = (root: string, path: string, source: string): TranslationReferences => {\n const lang = sourceLanguage(path);\n\n if (lang === undefined) {\n return {\n calls: new Set(),\n elements: new Set(),\n entryLocations: new Map(),\n locations: new Map(),\n masks: [],\n sourcePoints: new Map(),\n };\n }\n\n let parsed: ReturnType<typeof parseSync>;\n\n try {\n parsed = parseSync(projectSourcePath(root, path), source, { lang });\n } catch (error) {\n throw sourceExtractionError(root, path, errorSourcePoint(error), error);\n }\n\n const references = translationReferences(root, path, source, lang);\n\n new Visitor({\n CallExpression(node) {\n try {\n assertSupportedTranslationCall(node, references);\n } catch (error) {\n throw sourceExtractionError(root, path, references.sourcePoints.get(node.start) ?? null, error);\n }\n },\n JSXOpeningElement(node) {\n try {\n assertSupportedTransElement(node, references);\n } catch (error) {\n throw sourceExtractionError(root, path, references.sourcePoints.get(node.start) ?? null, error);\n }\n },\n }).visit(parsed.program);\n\n return references;\n};\n\nconst extractedLocationFile = (root: string, file: string): string =>\n resolve(root, file);\n\nconst isRecognizedLocation = (\n root: string,\n references: Map<string, TranslationReferences>,\n location: SourceLocation,\n): boolean => {\n if (location.line === undefined || location.column === undefined) {\n return false;\n }\n\n const sourceReferences = references.get(extractedLocationFile(root, location.file));\n\n return sourceReferences?.locations.has(sourceLocationKey(location.line, location.column)) === true;\n};\n\nconst recognizedKeyLocations = (\n references: Map<string, TranslationReferences>,\n extractedKey: string,\n): ExtractedLocation[] => {\n const locations: ExtractedLocation[] = [];\n\n for (const [file, sourceReferences] of references) {\n const points = sourceReferences.entryLocations.get(extractedKey) ?? [];\n\n for (const point of points) {\n locations.push({ file, column: point.column, line: point.line });\n }\n }\n\n return locations;\n};\n\nconst recognizedEntry = (\n root: string,\n references: Map<string, TranslationReferences>,\n entry: ExtractedKey,\n): ExtractedKey | null => {\n const extractedLocations = entry.locations ?? [];\n const locations = extractedLocations.length === 0\n ? recognizedKeyLocations(references, entry.key)\n : extractedLocations.filter((location) => isRecognizedLocation(root, references, location));\n\n return locations.length === 0 ? null : { ...entry, locations };\n};\n\ntype NestedReferenceParts = { base: string; options: string };\n\nconst quotedNestedReferenceParts = (content: string, quote: string): NestedReferenceParts | null => {\n const end = content.indexOf(quote, 1);\n\n return end === -1\n ? null\n : { base: content.slice(1, end), options: content.slice(end + 1) };\n};\n\nconst nestedReferenceParts = (value: string): NestedReferenceParts | null => {\n const content = value.trim();\n const quote = content[0];\n\n if (quote === \"\\\"\" || quote === \"'\") {\n return quotedNestedReferenceParts(content, quote);\n }\n\n const separator = content.indexOf(\",\");\n const base = (separator === -1 ? content : content.slice(0, separator)).trim();\n\n return base.length === 0\n ? null\n : { base, options: separator === -1 ? \"\" : content.slice(separator + 1) };\n};\n\nconst nestedReferenceContext = (options: string): string | null => {\n const match = NESTED_CONTEXT.exec(options);\n const context = match?.[1] ?? match?.[2] ?? null;\n\n return context === null || context.length === 0 ? null : context;\n};\n\nconst adjustedParenthesisDepth = (character: string | undefined, depth: number): number => {\n if (character === \"(\") {\n return depth + 1;\n }\n\n return character === \")\" ? depth - 1 : depth;\n};\n\nconst nestedReferenceEnd = (text: string, start: number): number => {\n let depth = 0;\n const tokens = text.slice(start).matchAll(NESTED_STRUCTURE_TOKEN);\n\n for (const token of tokens) {\n const character = token[0];\n\n if (character === \")\" && depth === 0) {\n return start + token.index;\n }\n\n depth = adjustedParenthesisDepth(character, depth);\n }\n\n return -1;\n};\n\nconst nestedReferenceContents = (text: string): string[] => {\n const contents: string[] = [];\n let offset = 0;\n\n while (offset < text.length) {\n const prefix = text.indexOf(\"$t(\", offset);\n\n if (prefix === -1) {\n break;\n }\n\n const start = prefix + 3;\n const end = nestedReferenceEnd(text, start);\n\n if (end === -1) {\n break;\n }\n\n contents.push(text.slice(start, end));\n offset = end + 1;\n }\n\n return contents;\n};\n\nconst nestedPluralKeys = (base: string, context: string | null): string[] => {\n const pluralBase = context === null ? base : `${base}${CONTEXT_SEPARATOR}${context}`;\n\n return [`${pluralBase}_one`, `${pluralBase}_other`];\n};\n\nconst nestedReferenceKeys = (content: string): string[] => {\n const parts = nestedReferenceParts(content);\n\n if (parts === null) {\n return [];\n }\n\n const context = nestedReferenceContext(parts.options);\n const contextual = context === null\n ? []\n : [`${parts.base}_${context}`, `${parts.base}${CONTEXT_SEPARATOR}${context}`];\n\n return NESTED_COUNT.test(parts.options)\n ? [parts.base, ...contextual, ...nestedPluralKeys(parts.base, context)]\n : [parts.base, ...contextual];\n};\n\nconst nestedEntryKeys = (text: string): Set<string> => {\n const keys: Set<string> = new Set();\n\n for (const content of nestedReferenceContents(text)) {\n for (const key of nestedReferenceKeys(content)) {\n keys.add(key);\n }\n }\n\n return keys;\n};\n\nconst registerNestedKeyLocations = (\n root: string,\n references: Map<string, TranslationReferences>,\n key: string,\n locations: ExtractedLocation[],\n): void => {\n for (const location of locations) {\n if (location.line === undefined || location.column === undefined) {\n continue;\n }\n\n const sourceReferences = references.get(resolve(root, location.file));\n\n if (sourceReferences !== undefined) {\n registerEntryLocation(key, { column: location.column, line: location.line }, sourceReferences);\n }\n }\n};\n\nconst registerNestedTextLocations = (\n root: string,\n references: Map<string, TranslationReferences>,\n text: string,\n locations: ExtractedLocation[],\n): void => {\n for (const key of nestedEntryKeys(text)) {\n registerNestedKeyLocations(root, references, key, locations);\n }\n};\n\nconst registerNestedEntryLocations = (\n root: string,\n references: Map<string, TranslationReferences>,\n entry: ExtractedKey,\n locations: ExtractedLocation[],\n): void => {\n registerNestedTextLocations(root, references, entry.key, locations);\n\n if (typeof entry.defaultValue === \"string\") {\n registerNestedTextLocations(root, references, entry.defaultValue, locations);\n }\n};\n\nconst didRegisterNestedLocationPass = (\n root: string,\n references: Map<string, TranslationReferences>,\n entries: ExtractedKeysMap,\n processed: Set<string>,\n): boolean => {\n let didRegister = false;\n\n for (const [mapKey, entry] of entries) {\n if (processed.has(mapKey)) {\n continue;\n }\n\n const recognized = recognizedEntry(root, references, entry);\n\n if (recognized !== null) {\n processed.add(mapKey);\n registerNestedEntryLocations(root, references, entry, recognized.locations ?? []);\n didRegister = true;\n }\n }\n\n return didRegister;\n};\n\nconst registerNestedLocations = (\n root: string,\n references: Map<string, TranslationReferences>,\n entries: ExtractedKeysMap,\n): void => {\n const processed: Set<string> = new Set();\n let hasRegisteredLocations = true;\n\n while (hasRegisteredLocations) {\n hasRegisteredLocations = didRegisterNestedLocationPass(root, references, entries, processed);\n }\n};\n\nconst retainRecognizedEntries = (\n root: string,\n references: Map<string, TranslationReferences>,\n entries: ExtractedKeysMap,\n): void => {\n for (const [mapKey, entry] of entries) {\n const recognized = recognizedEntry(root, references, entry);\n\n if (recognized === null) {\n entries.delete(mapKey);\n } else {\n entries.set(mapKey, recognized);\n }\n }\n};\n\nconst fileSourcePointKey = (file: string, line: number, column: number): string =>\n `${file}\\0${sourceLocationKey(line, column)}`;\n\nconst registerExtractedSourcePoint = (\n root: string,\n points: Set<string>,\n location: ExtractedLocation,\n): void => {\n if (location.line !== undefined && location.column !== undefined) {\n points.add(fileSourcePointKey(resolve(root, location.file), location.line, location.column));\n }\n};\n\nconst extractedSourcePoints = (root: string, entries: ExtractedKeysMap): Set<string> => {\n const points: Set<string> = new Set();\n\n for (const entry of entries.values()) {\n const locations = entry.locations ?? [];\n\n for (const location of locations) {\n registerExtractedSourcePoint(root, points, location);\n }\n }\n\n return points;\n};\n\nconst missingSourcePoint = (\n file: string,\n references: TranslationReferences,\n extracted: Set<string>,\n): SourcePoint | null => {\n for (const [location, point] of references.locations) {\n if (!extracted.has(`${file}\\0${location}`)) {\n return point;\n }\n }\n\n return null;\n};\n\nconst assertAllReferencesExtracted = (\n root: string,\n references: Map<string, TranslationReferences>,\n entries: ExtractedKeysMap,\n): void => {\n const extracted = extractedSourcePoints(root, entries);\n\n for (const [file, sourceReferences] of references) {\n const point = missingSourcePoint(file, sourceReferences, extracted);\n\n if (point !== null) {\n throw sourceExtractionError(\n root,\n file,\n point,\n new Error(\"A translation expression could not be extracted safely\"),\n );\n }\n }\n};\n\nconst findSourceMessages = async (root: string, sourceFiles: string[]): Promise<SourceMessage[]> => {\n if (sourceFiles.length === 0) {\n clearI18nResources(root);\n\n return [];\n }\n\n const sources = new Map(sourceFiles.map((file) => [file, readFileSync(file, \"utf8\")]));\n const references: Map<string, TranslationReferences> = new Map();\n\n for (const [file, source] of sources) {\n references.set(file, assertSupportedTranslationSyntax(root, file, source));\n }\n\n let extracted: ExtractedKeysMap | undefined;\n const { logger, reports } = quietLogger();\n\n const capture: Plugin = {\n name: \"gtkx-gettext\",\n onLoad(code, path) {\n const sourceReferences = references.get(resolve(root, path));\n\n return sourceReferences === undefined\n ? code\n : maskUnrecognizedTranslations(code, sourceReferences);\n },\n onEnd(keys) {\n registerNestedLocations(root, references, keys);\n retainRecognizedEntries(root, references, keys);\n assertAllReferencesExtracted(root, references, keys);\n extracted = keys;\n },\n };\n\n const result = await runExtractor(i18nToolkitConfig(root, sourceFiles, [capture]), {\n logger,\n quiet: true,\n syncPrimaryWithDefaults: true,\n trustDerivedDefaults: true,\n });\n\n if (extracted === undefined || reports.length > 0 || result.hasErrors) {\n throw new Error(reports.join(\"\\n\") || \"i18next extraction failed\");\n }\n\n return sourceMessages(root, extracted.values().toArray())\n .map((message) => inferLocations(message, sources))\n .toSorted(compareMessages);\n};\n\nconst projectPath = (root: string, path: string): string | null => {\n const absolute = isAbsolute(path) ? resolve(path) : resolve(root, path);\n const projectRelative = relative(root, absolute);\n\n if (!isPathInside(root, absolute)) {\n return null;\n }\n\n return toPosixPath(projectRelative);\n};\n\nconst writePotfiles = (project: CatalogProject, sourceFiles: string[]): string => {\n const paths = sourceFiles\n .map((path) => projectPath(project.root, path))\n .filter((path): path is string => path !== null);\n\n const sorted = [...new Set(paths)].toSorted((left, right) => left.localeCompare(right));\n const target = resolve(project.poDir, POTFILES_FILENAME);\n writeFileSync(target, sorted.length === 0 ? \"\" : `${sorted.join(\"\\n\")}\\n`);\n\n return target;\n};\n\nconst renderCatalogCall = (message: SourceMessage): string => {\n const msgid = JSON.stringify(message.singular);\n\n if (message.plural !== null) {\n const plural = JSON.stringify(message.plural);\n\n return message.context === null\n ? `ngettext(${msgid}, ${plural}, 0);`\n : `npgettext(${JSON.stringify(message.context)}, ${msgid}, ${plural}, 0);`;\n }\n\n return message.context === null\n ? `gettext(${msgid});`\n : `pgettext(${JSON.stringify(message.context)}, ${msgid});`;\n};\n\nconst locatedOwners = (\n project: CatalogProject,\n message: SourceMessage,\n): { path: string; line: number | undefined }[] => {\n const owners: { path: string; line: number | undefined }[] = [];\n\n for (const location of message.locations) {\n const path = projectPath(project.root, location.file);\n\n if (path !== null) {\n owners.push({ path, line: location.line });\n }\n }\n\n const unique = new Map(owners.map((owner) => [`${owner.path}\\0${String(owner.line)}`, owner]));\n\n return unique.values().toArray();\n};\n\nconst sourceOwners = (\n project: CatalogProject,\n message: SourceMessage,\n): { path: string; line: number | undefined }[] => {\n const located = locatedOwners(project, message);\n\n return located.length > 0 ? located : [{ path: SYNTHETIC_FILENAME, line: undefined }];\n};\n\nconst syntheticEntries = (\n project: CatalogProject,\n messages: SourceMessage[],\n): Map<string, SyntheticEntry[]> => {\n const entries: Map<string, SyntheticEntry[]> = new Map();\n\n for (const message of messages) {\n for (const owner of sourceOwners(project, message)) {\n const owned = entries.get(owner.path) ?? [];\n owned.push({ call: renderCatalogCall(message), line: owner.line });\n entries.set(owner.path, owned);\n }\n }\n\n if (entries.size === 0) {\n entries.set(SYNTHETIC_FILENAME, []);\n }\n\n return entries;\n};\n\nconst compareSyntheticEntries = (left: SyntheticEntry, right: SyntheticEntry): number =>\n (left.line ?? Number.MAX_SAFE_INTEGER) - (right.line ?? Number.MAX_SAFE_INTEGER);\n\nconst lastSyntheticLine = (entries: SyntheticEntry[]): number => {\n let line = 0;\n\n for (const entry of entries) {\n line = Math.max(line, entry.line ?? 0);\n }\n\n return line;\n};\n\nconst appendSyntheticEntry = (lines: string[], entry: SyntheticEntry, requestedLine: number): void => {\n const index = requestedLine - 1;\n const existing = lines[index];\n\n if (existing === undefined || existing.length === 0) {\n lines[index] = entry.call;\n\n return;\n }\n\n lines[index] = `${existing} ${entry.call}`;\n};\n\nconst renderSyntheticSource = (entries: SyntheticEntry[]): string => {\n const lines: string[] = [];\n const sorted = entries.toSorted(compareSyntheticEntries);\n let nextLine = lastSyntheticLine(entries) + 1;\n\n for (const entry of sorted) {\n const requestedLine = Math.max(1, entry.line ?? nextLine++);\n appendSyntheticEntry(lines, entry, requestedLine);\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n};\n\nconst writeSyntheticSources = (\n workDir: string,\n project: CatalogProject,\n messages: SourceMessage[],\n): string => {\n const entries = syntheticEntries(project, messages);\n const paths: string[] = [];\n\n for (const [path, owned] of entries) {\n const target = join(workDir, path);\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, renderSyntheticSource(owned));\n paths.push(path);\n }\n\n const potfiles = join(workDir, POTFILES_FILENAME);\n writeFileSync(potfiles, `${paths.toSorted((left, right) => left.localeCompare(right)).join(\"\\n\")}\\n`);\n\n return potfiles;\n};\n\nconst extractSourceMessages = ({ project, messages, output, workDir }: SourceExtraction): void => {\n const potfilesPath = writeSyntheticSources(workDir, project, messages);\n\n runCliTool({\n tool: \"xgettext\",\n args: [\n \"--language=JavaScript\",\n \"--from-code=UTF-8\",\n \"--force-po\",\n \"--keyword=gettext:1\",\n \"--keyword=ngettext:1,2\",\n \"--keyword=pgettext:1c,2\",\n \"--keyword=npgettext:1c,2,3\",\n `--directory=${workDir}`,\n `--files-from=${potfilesPath}`,\n `--output=${output}`,\n ],\n target: output,\n });\n};\n\nconst extractMetadataFragment = (project: CatalogProject, input: string, output: string): void => {\n runCliTool({\n tool: \"msggrep\",\n args: [\n \"--force-po\",\n `--output-file=${output}`,\n ...metadataTemplateFiles(project).map((file) => `--location=${file.relativePath}`),\n input,\n ],\n target: input,\n });\n};\n\nconst joinMetadataFragment = (output: string, fragment: string): void => {\n runCliTool({\n tool: \"xgettext\",\n args: [\"--language=PO\", \"--join-existing\", \"--force-po\", `--output=${output}`, fragment],\n target: output,\n });\n};\n\nconst extractCatalogTemplate = ({\n project,\n messages,\n shouldPreserveMetadataMessages,\n output = resolve(project.poDir, `${project.domain}.pot`),\n}: CatalogTemplateExtraction): void => {\n const workDir = mkdtempSync(join(project.poDir, \".gtkx-i18n-\"));\n const source = join(workDir, \"source.pot\");\n const hasPreviousTemplate = existsSync(output);\n\n try {\n if (shouldPreserveMetadataMessages && hasPreviousTemplate) {\n const fragment = join(workDir, \"metadata.pot\");\n extractMetadataFragment(project, output, fragment);\n extractSourceMessages({ project, messages, output: source, workDir });\n joinMetadataFragment(source, fragment);\n } else {\n extractSourceMessages({ project, messages, output: source, workDir });\n }\n\n replaceCatalogTemplate(source, output);\n } finally {\n rmSync(workDir, { recursive: true, force: true });\n }\n};\n\nconst extractSourceCatalogTo = async (\n project: CatalogProject,\n paths: string[],\n output: string,\n): Promise<void> => {\n const sourceFiles = normalizedSourceFiles(project.root, paths);\n const messages = await findSourceMessages(project.root, sourceFiles);\n writePotfiles(project, sourceFiles);\n extractCatalogTemplate({ project, messages, shouldPreserveMetadataMessages: false, output });\n};\n\nconst extractSourceCatalog = async (\n project: CatalogProject,\n paths: string[],\n shouldPreserveMetadataMessages = true,\n): Promise<void> => {\n const sourceFiles = normalizedSourceFiles(project.root, paths);\n const messages = await findSourceMessages(project.root, sourceFiles);\n writePotfiles(project, sourceFiles);\n extractCatalogTemplate({ project, messages, shouldPreserveMetadataMessages });\n};\n\nexport { extractSourceCatalog, extractSourceCatalogTo };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"build-output.d.ts","sourceRoot":"","sources":["../../src/internal/build-output.ts"],"names":[],"mappings":"AAgBA,KAAK,mBAAmB,GAAG,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAgD7E,QAAA,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,aAAa,MAAM,KAAG,MAW/D,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,mBAmB1D,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"build-output.d.ts","sourceRoot":"","sources":["../../src/internal/build-output.ts"],"names":[],"mappings":"AAgBA,KAAK,mBAAmB,GAAG,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AA8D7E,QAAA,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,aAAa,MAAM,KAAG,MAW/D,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,mBAmB1D,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { isPathInside, isRecord } from "@gtkx/utils";
2
2
  import { lstatSync, readdirSync } from "node:fs";
3
- import { join, relative, resolve, sep } from "node:path";
3
+ import { dirname, join, relative, resolve, sep } from "node:path";
4
4
  import { BUILD_MANIFEST_FILENAME, BUILD_MANIFEST_GENERATOR, } from "./build-manifest.js";
5
5
  import { prepareOutputDirectory, readRegularFile, } from "./output-directory.js";
6
6
  const DEFAULT_BUILD_OUT_DIR = "dist";
@@ -34,8 +34,18 @@ const isReusableBuildDirectory = (path) => {
34
34
  return stats.isDirectory() && (readdirSync(path).length === 0 || isGtkxBuildDirectory(path));
35
35
  };
36
36
  const buildOutputError = (root) => new Error(`Build output must be an empty directory or an earlier GTKX build below the project root ${root}`);
37
+ const hasGtkxBuildAncestor = (root, outDir) => {
38
+ let ancestor = dirname(outDir);
39
+ while (isPathInside(root, ancestor)) {
40
+ if (isGtkxBuildDirectory(ancestor)) {
41
+ return true;
42
+ }
43
+ ancestor = dirname(ancestor);
44
+ }
45
+ return false;
46
+ };
37
47
  const assertSafeBuildLocation = (root, outDir) => {
38
- if (!isPathInside(root, outDir) || hasSymlinkComponent(root, outDir)) {
48
+ if (!isPathInside(root, outDir) || hasSymlinkComponent(root, outDir) || hasGtkxBuildAncestor(root, outDir)) {
39
49
  throw buildOutputError(root);
40
50
  }
41
51
  };