@gtkx/cli 1.6.0 → 2.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/builder.d.ts +1 -0
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +17 -5
- package/dist/builder.js.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/codegen/freshness.d.ts.map +1 -1
- package/dist/codegen/freshness.js +45 -16
- package/dist/codegen/freshness.js.map +1 -1
- package/dist/codegen/reference.d.ts.map +1 -1
- package/dist/codegen/reference.js +1 -7
- package/dist/codegen/reference.js.map +1 -1
- package/dist/codegen/report.d.ts.map +1 -1
- package/dist/codegen/report.js +5 -16
- package/dist/codegen/report.js.map +1 -1
- package/dist/codegen/run-codegen.d.ts +7 -7
- package/dist/codegen/run-codegen.d.ts.map +1 -1
- package/dist/codegen/run-codegen.js +35 -107
- package/dist/codegen/run-codegen.js.map +1 -1
- package/dist/codegen/store-resolver.d.ts +1 -2
- package/dist/codegen/store-resolver.d.ts.map +1 -1
- package/dist/codegen/store-resolver.js +10 -19
- package/dist/codegen/store-resolver.js.map +1 -1
- package/dist/commands/build.d.ts +5 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +83 -10
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/codegen.d.ts +1 -0
- package/dist/commands/codegen.d.ts.map +1 -1
- package/dist/commands/codegen.js +6 -5
- package/dist/commands/codegen.js.map +1 -1
- package/dist/commands/deploy.d.ts +1 -0
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +4 -2
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts +8 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +19 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/docs.d.ts.map +1 -1
- package/dist/commands/docs.js +5 -15
- package/dist/commands/docs.js.map +1 -1
- package/dist/deploy/freedesktop/copyright.d.ts.map +1 -1
- package/dist/deploy/freedesktop/copyright.js +2 -13
- package/dist/deploy/freedesktop/copyright.js.map +1 -1
- package/dist/deploy/freedesktop/metainfo.d.ts.map +1 -1
- package/dist/deploy/freedesktop/metainfo.js +41 -2
- package/dist/deploy/freedesktop/metainfo.js.map +1 -1
- package/dist/deploy/freedesktop/xml.d.ts.map +1 -1
- package/dist/deploy/freedesktop/xml.js +21 -25
- package/dist/deploy/freedesktop/xml.js.map +1 -1
- package/dist/deploy/nfpm/config.d.ts.map +1 -1
- package/dist/deploy/nfpm/config.js +5 -2
- package/dist/deploy/nfpm/config.js.map +1 -1
- package/dist/deploy/nfpm/contents.d.ts.map +1 -1
- package/dist/deploy/nfpm/contents.js +8 -0
- package/dist/deploy/nfpm/contents.js.map +1 -1
- package/dist/deploy/node-runtime/elf.d.ts +2 -1
- package/dist/deploy/node-runtime/elf.d.ts.map +1 -1
- package/dist/deploy/node-runtime/elf.js +32 -5
- package/dist/deploy/node-runtime/elf.js.map +1 -1
- package/dist/deploy/node-runtime/index.d.ts +2 -1
- package/dist/deploy/node-runtime/index.d.ts.map +1 -1
- package/dist/deploy/node-runtime/index.js +73 -4
- package/dist/deploy/node-runtime/index.js.map +1 -1
- package/dist/deploy/node-runtime/license.d.ts.map +1 -1
- package/dist/deploy/node-runtime/license.js +2 -9
- package/dist/deploy/node-runtime/license.js.map +1 -1
- package/dist/deploy/notices/node-runtime.js +2 -2
- package/dist/deploy/notices/node-runtime.js.map +1 -1
- package/dist/deploy/notices/packages.d.ts.map +1 -1
- package/dist/deploy/notices/packages.js +3 -10
- package/dist/deploy/notices/packages.js.map +1 -1
- package/dist/deploy/payload/copy-tree.d.ts.map +1 -1
- package/dist/deploy/payload/copy-tree.js +3 -3
- package/dist/deploy/payload/copy-tree.js.map +1 -1
- package/dist/deploy/payload/launcher.d.ts.map +1 -1
- package/dist/deploy/payload/launcher.js +14 -1
- package/dist/deploy/payload/launcher.js.map +1 -1
- package/dist/deploy/payload/stage.d.ts.map +1 -1
- package/dist/deploy/payload/stage.js +2 -4
- package/dist/deploy/payload/stage.js.map +1 -1
- package/dist/deploy/run-deploy.d.ts +1 -0
- package/dist/deploy/run-deploy.d.ts.map +1 -1
- package/dist/deploy/run-deploy.js +100 -14
- package/dist/deploy/run-deploy.js.map +1 -1
- package/dist/deploy/settings/build-manifest.d.ts +6 -1
- package/dist/deploy/settings/build-manifest.d.ts.map +1 -1
- package/dist/deploy/settings/build-manifest.js +17 -17
- package/dist/deploy/settings/build-manifest.js.map +1 -1
- package/dist/deploy/settings/extra-files.d.ts +1 -1
- package/dist/deploy/settings/extra-files.d.ts.map +1 -1
- package/dist/deploy/settings/extra-files.js +22 -1
- package/dist/deploy/settings/extra-files.js.map +1 -1
- package/dist/deploy/settings/index.d.ts +1 -0
- package/dist/deploy/settings/index.d.ts.map +1 -1
- package/dist/deploy/settings/index.js +2 -1
- package/dist/deploy/settings/index.js.map +1 -1
- package/dist/deploy/settings/libraries.d.ts.map +1 -1
- package/dist/deploy/settings/libraries.js +2 -19
- package/dist/deploy/settings/libraries.js.map +1 -1
- package/dist/deploy/settings/paths.d.ts +2 -2
- package/dist/deploy/settings/paths.d.ts.map +1 -1
- package/dist/deploy/settings/paths.js +110 -12
- package/dist/deploy/settings/paths.js.map +1 -1
- package/dist/deploy/settings/screenshots.d.ts.map +1 -1
- package/dist/deploy/settings/screenshots.js +6 -31
- package/dist/deploy/settings/screenshots.js.map +1 -1
- package/dist/deploy/targets/flatpak-pnpm.js +4 -4
- package/dist/deploy/targets/flatpak-pnpm.js.map +1 -1
- package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
- package/dist/deploy/targets/flatpak-source.js +15 -6
- package/dist/deploy/targets/flatpak-source.js.map +1 -1
- package/dist/deploy/targets/flatpak-sources.js +1 -1
- package/dist/deploy/targets/flatpak-sources.js.map +1 -1
- package/dist/deploy/types.d.ts +1 -0
- package/dist/deploy/types.d.ts.map +1 -1
- package/dist/deploy/types.js.map +1 -1
- package/dist/dev/headless.d.ts +3 -0
- package/dist/dev/headless.d.ts.map +1 -0
- package/dist/dev/headless.js +35 -0
- package/dist/dev/headless.js.map +1 -0
- package/dist/dev/runner-deps.js +1 -1
- package/dist/dev/runner-deps.js.map +1 -1
- package/dist/dev/runner-main.d.ts.map +1 -1
- package/dist/dev/runner-main.js +1 -2
- package/dist/dev/runner-main.js.map +1 -1
- package/dist/dev/schema-dir.d.ts +1 -1
- package/dist/dev/schema-dir.d.ts.map +1 -1
- package/dist/dev/schema-dir.js +2 -4
- package/dist/dev/schema-dir.js.map +1 -1
- package/dist/i18n/catalogs.d.ts.map +1 -1
- package/dist/i18n/catalogs.js +2 -1
- package/dist/i18n/catalogs.js.map +1 -1
- package/dist/i18n/metadata-templates.d.ts.map +1 -1
- package/dist/i18n/metadata-templates.js +2 -1
- package/dist/i18n/metadata-templates.js.map +1 -1
- package/dist/i18n/source-messages.d.ts +3 -21
- package/dist/i18n/source-messages.d.ts.map +1 -1
- package/dist/i18n/source-messages.js +900 -85
- package/dist/i18n/source-messages.js.map +1 -1
- package/dist/i18n/types.d.ts +6 -7
- package/dist/i18n/types.d.ts.map +1 -1
- package/dist/i18n/types.js +83 -96
- package/dist/i18n/types.js.map +1 -1
- package/dist/internal/build-manifest.d.ts +5 -2
- package/dist/internal/build-manifest.d.ts.map +1 -1
- package/dist/internal/build-manifest.js +15 -2
- package/dist/internal/build-manifest.js.map +1 -1
- package/dist/internal/build-output.d.ts +8 -0
- package/dist/internal/build-output.d.ts.map +1 -0
- package/dist/internal/build-output.js +69 -0
- package/dist/internal/build-output.js.map +1 -0
- package/dist/internal/docs-elements.js +2 -2
- package/dist/internal/docs-elements.js.map +1 -1
- package/dist/internal/entry-arg.d.ts +4 -1
- package/dist/internal/entry-arg.d.ts.map +1 -1
- package/dist/internal/entry-arg.js +7 -1
- package/dist/internal/entry-arg.js.map +1 -1
- package/dist/internal/icon-path.d.ts.map +1 -1
- package/dist/internal/icon-path.js +5 -16
- package/dist/internal/icon-path.js.map +1 -1
- package/dist/internal/output-directory.d.ts +15 -0
- package/dist/internal/output-directory.d.ts.map +1 -0
- package/dist/internal/output-directory.js +490 -0
- package/dist/internal/output-directory.js.map +1 -0
- package/dist/internal/prepare-project.d.ts +2 -0
- package/dist/internal/prepare-project.d.ts.map +1 -1
- package/dist/internal/prepare-project.js +3 -3
- package/dist/internal/prepare-project.js.map +1 -1
- package/dist/internal/source-imports.d.ts.map +1 -1
- package/dist/internal/source-imports.js +10 -41
- package/dist/internal/source-imports.js.map +1 -1
- package/dist/mcp/client.js +2 -2
- package/dist/mcp/client.js.map +1 -1
- package/dist/settings/render.d.ts +0 -1
- package/dist/settings/render.d.ts.map +1 -1
- package/dist/settings/render.js +1 -11
- package/dist/settings/render.js.map +1 -1
- package/dist/settings/schema.d.ts +2 -2
- package/dist/settings/schema.d.ts.map +1 -1
- package/dist/settings/schema.js +21 -62
- package/dist/settings/schema.js.map +1 -1
- package/dist/vite-plugins/asset-imports.d.ts +1 -2
- package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
- package/dist/vite-plugins/asset-imports.js +19 -32
- package/dist/vite-plugins/asset-imports.js.map +1 -1
- package/dist/vite-plugins/asset-specifier.d.ts +1 -3
- package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
- package/dist/vite-plugins/asset-specifier.js +1 -4
- package/dist/vite-plugins/asset-specifier.js.map +1 -1
- package/dist/vite-plugins/build-manifest.d.ts +5 -1
- package/dist/vite-plugins/build-manifest.d.ts.map +1 -1
- package/dist/vite-plugins/build-manifest.js +2 -1
- package/dist/vite-plugins/build-manifest.js.map +1 -1
- package/dist/vite-plugins/i18n.d.ts.map +1 -1
- package/dist/vite-plugins/i18n.js +59 -6
- package/dist/vite-plugins/i18n.js.map +1 -1
- package/dist/vite-plugins/index.d.ts +8 -1
- package/dist/vite-plugins/index.d.ts.map +1 -1
- package/dist/vite-plugins/index.js +8 -6
- package/dist/vite-plugins/index.js.map +1 -1
- package/dist/vite-plugins/resources.d.ts.map +1 -1
- package/dist/vite-plugins/resources.js +32 -97
- package/dist/vite-plugins/resources.js.map +1 -1
- package/dist/vite-plugins/self-contained.d.ts.map +1 -1
- package/dist/vite-plugins/self-contained.js +159 -158
- package/dist/vite-plugins/self-contained.js.map +1 -1
- package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
- package/dist/vite-plugins/settings-worker-env.js +2 -4
- package/dist/vite-plugins/settings-worker-env.js.map +1 -1
- package/dist/vite-plugins/settings.d.ts +1 -2
- package/dist/vite-plugins/settings.d.ts.map +1 -1
- package/dist/vite-plugins/settings.js +8 -14
- package/dist/vite-plugins/settings.js.map +1 -1
- package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
- package/dist/vite-plugins/undeclared-library.js +10 -13
- package/dist/vite-plugins/undeclared-library.js.map +1 -1
- package/dist/vite-plugins/worker.d.ts.map +1 -1
- package/dist/vite-plugins/worker.js +0 -1
- package/dist/vite-plugins/worker.js.map +1 -1
- package/package.json +21 -15
- package/src/builder.ts +18 -5
- package/src/cli.ts +3 -0
- package/src/codegen/freshness.ts +66 -17
- package/src/codegen/reference.ts +1 -8
- package/src/codegen/report.ts +5 -21
- package/src/codegen/run-codegen.ts +42 -151
- package/src/codegen/store-resolver.ts +10 -26
- package/src/commands/build.ts +13 -2
- package/src/commands/codegen.ts +6 -5
- package/src/commands/deploy.ts +4 -2
- package/src/commands/dev.ts +20 -1
- package/src/commands/docs.ts +5 -17
- package/src/deploy/freedesktop/copyright.ts +2 -14
- package/src/deploy/freedesktop/metainfo.ts +73 -21
- package/src/deploy/freedesktop/xml.ts +24 -32
- package/src/deploy/nfpm/config.ts +5 -2
- package/src/deploy/nfpm/contents.ts +8 -0
- package/src/deploy/node-runtime/elf.ts +43 -5
- package/src/deploy/node-runtime/index.ts +105 -5
- package/src/deploy/node-runtime/license.ts +2 -8
- package/src/deploy/notices/node-runtime.ts +2 -2
- package/src/deploy/notices/packages.ts +3 -11
- package/src/deploy/payload/copy-tree.ts +3 -4
- package/src/deploy/payload/launcher.ts +20 -1
- package/src/deploy/payload/stage.ts +3 -7
- package/src/deploy/run-deploy.ts +56 -16
- package/src/deploy/settings/build-manifest.ts +30 -17
- package/src/deploy/settings/extra-files.ts +26 -2
- package/src/deploy/settings/index.ts +3 -1
- package/src/deploy/settings/libraries.ts +1 -22
- package/src/deploy/settings/paths.ts +68 -13
- package/src/deploy/settings/screenshots.ts +8 -46
- package/src/deploy/targets/flatpak-pnpm.ts +4 -4
- package/src/deploy/targets/flatpak-source.ts +17 -6
- package/src/deploy/targets/flatpak-sources.ts +1 -1
- package/src/deploy/types.ts +1 -0
- package/src/dev/headless.ts +40 -0
- package/src/dev/runner-deps.ts +1 -1
- package/src/dev/runner-main.ts +1 -2
- package/src/dev/schema-dir.ts +2 -4
- package/src/i18n/catalogs.ts +2 -1
- package/src/i18n/metadata-templates.ts +2 -1
- package/src/i18n/source-messages.ts +1442 -262
- package/src/i18n/types.ts +97 -131
- package/src/internal/build-manifest.ts +25 -1
- package/src/internal/build-output.ts +99 -0
- package/src/internal/docs-elements.ts +2 -2
- package/src/internal/entry-arg.ts +8 -1
- package/src/internal/icon-path.ts +6 -19
- package/src/internal/output-directory.ts +699 -0
- package/src/internal/prepare-project.ts +5 -5
- package/src/internal/source-imports.ts +14 -50
- package/src/mcp/client.ts +2 -2
- package/src/settings/render.ts +1 -13
- package/src/settings/schema.ts +19 -81
- package/src/vite-plugins/asset-imports.ts +20 -44
- package/src/vite-plugins/asset-specifier.ts +0 -5
- package/src/vite-plugins/build-manifest.ts +7 -1
- package/src/vite-plugins/i18n.ts +87 -5
- package/src/vite-plugins/index.ts +16 -11
- package/src/vite-plugins/resources.ts +37 -140
- package/src/vite-plugins/self-contained.ts +184 -185
- package/src/vite-plugins/settings-worker-env.ts +2 -4
- package/src/vite-plugins/settings.ts +11 -20
- package/src/vite-plugins/undeclared-library.ts +14 -20
- package/src/vite-plugins/worker.ts +0 -1
- package/dist/i18n/binding-extractor.d.ts +0 -30
- package/dist/i18n/binding-extractor.d.ts.map +0 -1
- package/dist/i18n/binding-extractor.js +0 -1324
- package/dist/i18n/binding-extractor.js.map +0 -1
- package/dist/i18n/extractor-plugin.d.ts +0 -8
- package/dist/i18n/extractor-plugin.d.ts.map +0 -1
- package/dist/i18n/extractor-plugin.js +0 -247
- package/dist/i18n/extractor-plugin.js.map +0 -1
- package/dist/internal/data-dir.d.ts +0 -4
- package/dist/internal/data-dir.d.ts.map +0 -1
- package/dist/internal/data-dir.js +0 -52
- package/dist/internal/data-dir.js.map +0 -1
- package/dist/vite-plugins/animated.d.ts +0 -5
- package/dist/vite-plugins/animated.d.ts.map +0 -1
- package/dist/vite-plugins/animated.js +0 -325
- package/dist/vite-plugins/animated.js.map +0 -1
- package/src/i18n/binding-extractor.ts +0 -1969
- package/src/i18n/extractor-plugin.ts +0 -413
- package/src/internal/data-dir.ts +0 -70
- package/src/vite-plugins/animated.ts +0 -486
|
@@ -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, I18nextToolkitConfig, Logger } from \"i18next-cli\";\nimport { findKeys } 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, sep } from \"node:path\";\nimport type { CatalogProject } from \"./catalogs.js\";\nimport { runCliTool } from \"../internal/run-cli-tool.js\";\nimport { replaceCatalogTemplate } from \"./catalog-template.js\";\nimport { gtkxExtractorPlugin } from \"./extractor-plugin.js\";\nimport { metadataTemplateFiles } from \"./metadata-templates.js\";\n\ntype SourceLocation = {\n file: string;\n line?: number | undefined;\n column?: number | undefined;\n};\n\ntype SourceMessage = {\n context: string | null;\n kind: \"default\" | \"plural\" | \"pluralDefaults\" | \"point\";\n locations: SourceLocation[];\n msgid: string;\n namespace: string;\n plural: string | null;\n singular: string;\n};\n\ntype SourceCatalog = {\n messages: SourceMessage[];\n sourceFiles: 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 sourceFiles: string[];\n workDir: string;\n};\n\ntype CatalogTemplateExtraction = {\n messages: SourceMessage[];\n output?: string | undefined;\n project: CatalogProject;\n shouldPreserveMetadataMessages: boolean;\n sourceFiles: string[];\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\nconst CONTEXT_SEPARATOR = \"\\u{4}\";\nconst DEFAULT_NAMESPACE = \"translation\";\nconst POTFILES_FILENAME = \"POTFILES.in\";\nconst SYNTHETIC_FILENAME = \"messages.js\";\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 extractorConfig = (sourceFiles: string[]): I18nextToolkitConfig => {\n const integration = gtkxExtractorPlugin();\n\n return {\n locales: [\"en\"],\n plugins: [integration.plugin],\n extract: {\n input: sourceFiles,\n output: \"unused/{{language}}/{{namespace}}.json\",\n contextSeparator: CONTEXT_SEPARATOR,\n defaultNS: DEFAULT_NAMESPACE,\n disablePlurals: false,\n extractFromComments: false,\n functions: [],\n generateBasePluralForms: false,\n keySeparator: \".\",\n nsSeparator: false,\n pluralSeparator: \"_\",\n transComponents: integration.transComponents,\n useTranslationNames: [],\n warnOnConflicts: \"error\",\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 (entry.explicitDefault !== true || typeof entry.defaultValue !== \"string\") {\n return msgid;\n }\n\n return entry.defaultValue;\n};\n\nconst pointMessage = (entry: ExtractedKey): SourceMessage => {\n const { context, msgid } = splitContext(entry.key);\n validateIdentity(context, msgid);\n const isDefaultExplicit = entry.explicitDefault === true;\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 kind: isDefaultExplicit ? \"default\" : \"point\",\n locations: normalizedLocations(entry.locations ?? []),\n msgid,\n namespace: namespaceFor(entry),\n plural: null,\n singular,\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 hasStableKey = one.defaultValue !== other.defaultValue;\n const singular = hasStableKey ? one.defaultValue : msgid;\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 kind: hasStableKey ? \"pluralDefaults\" : \"plural\",\n locations: normalizedLocations(variants.flatMap((variant) => variant.locations)),\n msgid,\n namespace,\n plural,\n singular,\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.msgid.localeCompare(right.msgid) ||\n left.singular.localeCompare(right.singular) ||\n (left.plural ?? \"\").localeCompare(right.plural ?? \"\");\n\nconst normalizedSourceFiles = (root: string, paths: string[]): string[] => {\n const files = paths\n .map((path) => resolve(root, path))\n .filter((path) => {\n const projectPath = relative(root, path);\n\n return projectPath !== \"..\" && !projectPath.startsWith(`..${sep}`) && !isAbsolute(projectPath);\n });\n\n return new Set(files).values().toArray().toSorted((left, right) => left.localeCompare(right));\n};\n\nconst findSourceMessages = async (sourceFiles: string[]): Promise<SourceMessage[]> => {\n if (sourceFiles.length === 0) {\n return [];\n }\n\n const fileErrors: string[] = [];\n const { logger, reports } = quietLogger();\n const { allKeys } = await findKeys(extractorConfig(sourceFiles), logger, fileErrors);\n\n if (fileErrors.length > 0 || reports.length > 0) {\n throw new Error([...fileErrors, ...reports].join(\"\\n\"));\n }\n\n return sourceMessages(allKeys.values().toArray()).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 (\n projectRelative === \"\" ||\n projectRelative === \"..\" ||\n projectRelative.startsWith(`..${sep}`) ||\n isAbsolute(projectRelative)\n ) {\n return null;\n }\n\n return projectRelative.replaceAll(\"\\\\\", \"/\");\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 readSources = (sourceFiles: string[]): Map<string, string> =>\n new Map(sourceFiles.map((path) => [path, readFileSync(path, \"utf8\")]));\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 inferredOwner = (\n project: CatalogProject,\n message: SourceMessage,\n sources: Map<string, string>,\n): { path: string; line: number } | null => {\n for (const [path, source] of sources) {\n const index = source.indexOf(message.msgid);\n\n if (index !== -1) {\n return {\n path: projectPath(project.root, path) ?? SYNTHETIC_FILENAME,\n line: source.slice(0, index).split(\"\\n\").length,\n };\n }\n }\n\n return null;\n};\n\nconst sourceOwners = (\n project: CatalogProject,\n message: SourceMessage,\n sources: Map<string, string>,\n): { path: string; line: number | undefined }[] => {\n const located = locatedOwners(project, message);\n\n if (located.length > 0) {\n return located;\n }\n\n return [inferredOwner(project, message, sources) ?? { path: SYNTHETIC_FILENAME, line: undefined }];\n};\n\nconst syntheticEntries = (\n project: CatalogProject,\n messages: SourceMessage[],\n sourceFiles: string[],\n): Map<string, SyntheticEntry[]> => {\n const sources = readSources(sourceFiles);\n const entries: Map<string, SyntheticEntry[]> = new Map();\n\n for (const message of messages) {\n for (const owner of sourceOwners(project, message, sources)) {\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 sourceFiles: string[],\n): string => {\n const entries = syntheticEntries(project, messages, sourceFiles);\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, sourceFiles, output, workDir }: SourceExtraction): void => {\n const potfilesPath = writeSyntheticSources(workDir, project, messages, sourceFiles);\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 sourceFiles,\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, sourceFiles, output: source, workDir });\n joinMetadataFragment(source, fragment);\n } else {\n extractSourceMessages({ project, messages, sourceFiles, 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<SourceCatalog> => {\n const sourceFiles = normalizedSourceFiles(project.root, paths);\n const messages = await findSourceMessages(sourceFiles);\n writePotfiles(project, sourceFiles);\n extractCatalogTemplate({ project, messages, sourceFiles, shouldPreserveMetadataMessages: false, output });\n\n return { messages, sourceFiles };\n};\n\nconst extractSourceCatalog = async (\n project: CatalogProject,\n paths: string[],\n shouldPreserveMetadataMessages = true,\n): Promise<SourceCatalog> => {\n const sourceFiles = normalizedSourceFiles(project.root, paths);\n const messages = await findSourceMessages(sourceFiles);\n writePotfiles(project, sourceFiles);\n extractCatalogTemplate({ project, messages, sourceFiles, shouldPreserveMetadataMessages });\n\n return { messages, sourceFiles };\n};\n\nexport { type SourceMessage, extractSourceCatalog, extractSourceCatalogTo };\n"]}
|
|
1
|
+
{"version":3,"file":"source-messages.js","sourceRoot":"","sources":["../../src/i18n/source-messages.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,SAAS,IAAI,cAAc,EAAc,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACH,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,MAAM,EACN,aAAa,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAqEnE,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAClC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AACxC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AACxC,MAAM,kBAAkB,GAAG,aAAa,CAAC;AACzC,MAAM,yBAAyB,GAAG,qCAAqC,CAAC;AACxE,MAAM,0BAA0B,GAAwB,IAAI,GAAG,CAAC;IAC5D,SAAS;IACT,cAAc;IACd,kBAAkB;IAClB,oBAAoB;IACpB,WAAW;CACd,CAAC,CAAC;AACH,MAAM,cAAc,GAAG,kDAAkD,CAAC;AAC1E,MAAM,YAAY,GAAG,sBAAsB,CAAC;AAC5C,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AACxD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;AAC/D,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC;AACtF,MAAM,wBAAwB,GAAwB,IAAI,GAAG,CAAC;IAC1D,yBAAyB;IACzB,gBAAgB;IAChB,uBAAuB;IACvB,iBAAiB;IACjB,qBAAqB;CACxB,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,GAA0C,EAAE;IAC5D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,OAAO;QACH,OAAO;QACP,MAAM,EAAE;YACJ,IAAI;gBACA,OAAO;YACX,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,IAAI;gBACd,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5D,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC;YACxC,CAAC;YACD,KAAK,CAAC,OAAO;gBACT,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAClC,CAAC;SACJ;KACJ,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,GAAW,EAA6C,EAAE;IAC5E,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAEjD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACzC,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;AAChG,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAU,EAAE,CACjD,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAEhE,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAAE,KAAa,EAAQ,EAAE;IACrE,IAAI,OAAO,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACrE,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAAoB,EAAE,KAAqB,EAAU,EAAE,CAC7E,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;IACnC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;IACpC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AAE7C,MAAM,mBAAmB,GAAG,CAAC,SAA2B,EAAoB,EAAE;IAC1E,MAAM,MAAM,GAAgC,IAAI,GAAG,EAAE,CAAC;IAEtD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrF,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAmB,EAAE,KAAa,EAAU,EAAE;IAC/D,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC,YAAY,CAAC;IAC9B,CAAC;IAED,OAAO,KAAK,CAAC,YAAY,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAC3E,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAiB,EAAE;IACxD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE3C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAClE,CAAC;IAED,OAAO;QACH,OAAO;QACP,SAAS,EAAE,mBAAmB,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;QACrD,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC;QAC9B,MAAM,EAAE,IAAI;QACZ,QAAQ;QACR,SAAS,EAAE,KAAK;KACnB,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAmB,EAA+C,EAAE;IACxF,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,MAAM,GAAG,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACxC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7B,IAAI,MAAM,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QAChF,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACvE,CAAC;IAED,OAAO;QACH,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9C,OAAO,EAAE;YACL,QAAQ;YACR,YAAY;YACZ,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;SACnC;KACJ,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,OAAuB,EAAiB,EAAE;IAC9D,MAAM,MAAM,GAA6B,IAAI,GAAG,EAAE,CAAC;IAEnD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,GAAG,SAAS,KAAK,OAAO,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACtE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,QAAyB,EAAgD,EAAE;IAC/F,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAEnF,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEtC,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAe,EAAiB,EAAE;IACnF,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACjD,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC;IAClC,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC;IAElC,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACxF,CAAC;IAED,OAAO;QACH,OAAO;QACP,SAAS,EAAE,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChF,SAAS;QACT,MAAM;QACN,QAAQ;QACR,SAAS,EAAE,KAAK;KACnB,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,OAAuB,EAAmB,EAAE,CAChE,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAEjE,MAAM,cAAc,GAAG,CAAC,KAAmB,EAAQ,EAAE;IACjD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACnF,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,OAAuB,EAAmB,EAAE;IAChE,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,cAAc,CAAC,KAAK,CAAC,CAAC;QAEtB,IAAI,KAAK,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,SAAS;QACb,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;AACvF,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAmB,EAAE,KAAoB,EAAU,EAAE,CAC1E,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;IAC7C,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;IACvD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC3C,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAE1D,MAAM,cAAc,GAAG,CAAC,OAAsB,EAAE,OAA4B,EAAiB,EAAE;IAC3F,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAqB,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9E,CAAC;IACL,CAAC;IAED,OAAO,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,KAAe,EAAY,EAAE;IACtE,MAAM,KAAK,GAAG,KAAK;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SAClC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAEhD,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAClG,CAAC,CAAC;AAQF,MAAM,kBAAkB,GAAG,CAAC,GAAgB,EAA2B,EAAE,CACrE,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAE3C,MAAM,mBAAmB,GAAG,CAAC,IAAiB,EAAe,EAAE,CAC3D,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAE3E,MAAM,sBAAsB,GAAG,CAAC,GAAmC,EAAW,EAAE;IAC5E,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC;IACzC,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,GAAmC,EAAQ,EAAE;IAC7E,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAChE,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,QAA+B,EAAiB,EAAE;IACpE,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC3D,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,QAAQ;QAC5E,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK;QACpB,CAAC,CAAC,IAAI,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAAC,QAAmC,EAAQ,EAAE;IAChF,IAAI,QAAQ,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,0BAA0B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,OAAuC,EAAQ,EAAE;IAClF,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO;IACX,CAAC;IAED,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAC1F,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IAC1F,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACxC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,IAAc,EAAE,MAAc,EAA0B,EAAE;IACpF,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAEpC,OAAO;QACH,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK;QACvE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;QAC3B,MAAM;QACN,KAAK,EAAE,OAAO;KACjB,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,IAAc,EAAE,MAAc,EAA0B,EAAE,CACtF,IAAI,CAAC,wBAAwB,EAAE;IAC3B,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;IAChF,CAAC,CAAC,IAAI,CAAC;AAEf,MAAM,wBAAwB,GAAG,CAAC,IAAc,EAAE,MAAc,EAA0B,EAAE,CACxF,IAAI,CAAC,0BAA0B,EAAE;IAC7B,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;IAC5E,CAAC,CAAC,IAAI,CAAC;AAEf,MAAM,eAAe,GAAG,CAAC,OAAoC,EAA0B,EAAE;IACrF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;IAEpC,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QAC/E,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAE7C,OAAO,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC;QACrC,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC;QACpC,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,QAA8B,EAAiB,EAAE;IACxE,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;IAEzB,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,GAAG,CAAC,IAAI,CAAC;IACpB,CAAC;IAED,OAAO,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAuB,EAAE,IAAY,EAAW,EAAE;IACzE,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;IAC9B,CAAC;IAED,IAAI,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;IACpE,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,OAAuC,EAAE,IAAY,EAAW,EAAE;IAC5F,IAAI,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CACxC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAChC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,GAAG;YACnC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,KAAY,EAAE,IAA0B,EAA0B,EAAE;IACjG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAErE,OAAO,QAAQ,EAAE,QAAQ,KAAK,gBAAgB,IAAI,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QACtF,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,IAAI,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,OAAwB,EAAiC,EAAE;IACvF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAEnC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;QACvD,CAAC,KAAK,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAElE,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,KAAK,KAAK,gBAAgB,EAAE,CAAC;AACnF,CAAC,CAAC;AAEF,MAAM,+BAA+B,GAAG,CAAC,QAAgC,EAA8B,EAAE;IACrG,IAAI,QAAQ,EAAE,QAAQ,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,OAAoC,EAA8B,EAAE;IACrG,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;AACvF,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAAC,KAAY,EAAE,IAAY,EAA8B,EAAE;IAC7F,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEvC,OAAO,+BAA+B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,2BAA2B,CAAC,OAAO,CAAC,CAAC;AAC7G,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAmC,EAAiB,EAAE;IAC3E,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEjC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,CAAC;IAED,OAAO,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,KAAY,EAAE,MAAkB,EAAW,EAAE;IAC9E,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhE,OAAO,QAAQ,KAAK,IAAI;QACpB,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxC,CAAC,QAAQ,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC;AAC/G,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,OAAwB,EAA6C,EAAE;IACvG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;IAEpC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;QAC5B,CAAC,WAAW,CAAC,qBAAqB,EAAE;QACpC,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CAAC,OAAoC,EAAW,EAAE;IACrF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;IAEpC,OAAO,IAAI,KAAK,IAAI;QAChB,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,gBAAgB,CAAC,WAAW,CAAC;QACnC,uBAAuB,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,KAAY,EAAE,MAAmC,EAAW,EAAE;IAC3F,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAE7B,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,OAAO,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAC3D,CAAC;IAED,OAAO,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,8BAA8B,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACvG,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,KAAY,EAAE,MAAmC,EAAW,EAAE,CACvF,eAAe,CAAC,MAAM,CAAC,KAAK,GAAG;IAC/B,CAAC,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAElG,MAAM,2BAA2B,GAAG,CAAC,KAAY,EAAE,IAAgB,EAAW,EAAE,CAC5E,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,6BAA6B,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAEzF,MAAM,0BAA0B,GAAG,CAAC,KAAY,EAAE,IAAgB,EAAW,EAAE;IAC3E,IAAI,2BAA2B,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAC7E,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,KAAY,EAAE,IAAgB,EAAW,EAAE;IACtE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,MAAM;QAC1C,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,+BAA+B,GAAG,CACpC,IAAwC,EACxC,OAAwB,EACjB,EAAE;IACT,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAEnC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC;QAC/B,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;QACvD,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,2BAA2B,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC;QACvD,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAChF,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,OAAoC,EAAW,EAAE;IAChF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAEjD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,+BAA+B,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAEnC,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,WAAW,KAAK,IAAI;QACpB,WAAW,KAAK,SAAS;QACzB,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AAChH,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,KAAY,EAAE,IAAY,EAA8B,EAAE;IACvF,MAAM,MAAM,GAAG,6BAA6B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE1D,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO,yBAAyB,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,IAAc,EAAE,IAAY,EAA8B,EAAE;IACxF,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9D,IAAI,QAAQ,EAAE,MAAM,KAAK,YAAY,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9E,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;AACxE,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAc,EAAU,EAAE;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAE9B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAgB,EAAE,UAAiC,EAAQ,EAAE;IACrF,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAE5B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACnF,CAAC;IAED,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,MAAc,EAAU,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAExG,MAAM,WAAW,GAAG,CAAC,IAAgB,EAAsB,EAAE;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;IAEjC,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC5F,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,IAAgB,EAAE,UAAiC,EAAsB,EAAE;IACvG,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAEhC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjB,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAmC,EAAiB,EAAE;IAC1E,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;IAChD,CAAC;IAED,IAAI,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC;QACrC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC5B,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC;QACnC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAC7B,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,IAAmC,EAAiC,EAAE;IACjG,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC;QACrC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC5B,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC;QACnC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAC7B,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,OAAO,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACvB,MAAqC,EACrC,IAAY,EACe,EAAE;IAC7B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3E,OAAO,QAAQ,CAAC;QACpB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAqC,EAAE,IAAY,EAAiB,EAAE;IAC/F,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAElD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE7C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,iCAAiC,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAA0B,EAAiC,EAAE,CAC9E,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzF,MAAM,aAAa,GAAG,CAAC,MAAkC,EAAU,EAAE;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAE5E,OAAO,mBAAmB,CACtB,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACpE,WAAW,CACd,IAAI,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAE,GAAW,EAAU,EAAE;IACnE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAA0B,EAAE,SAAiB,EAAiB,EAAE;IACvF,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAE7D,IAAI,UAAU,KAAK,EAAE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,cAAc,GAAG,UAAU,IAAI,SAAS,CAAC;IAC/C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAExD,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,iBAAiB,GAAG,OAAO,EAAE,CAAC;AACrF,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC1B,GAAkB,EAClB,KAAyB,EACzB,UAAiC,EAC7B,EAAE;IACN,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjC,OAAO;IACX,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3D,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC1B,QAAwC,EACxC,UAAiC,EACjC,SAAiB,EACb,EAAE;IACN,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,sBAAsB,CAAC,aAAa,IAAI,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACjF,qBAAqB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AAC1F,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAuC,EAA2C,EAAE,CAAC;IACxG,YAAY;IACZ,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,YAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;CAChE,CAAC;AAEF,MAAM,iCAAiC,GAAG,CACtC,QAAwC,EACxC,MAAgB,EAChB,UAAiC,EAC7B,EAAE;IACN,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;QACzB,OAAO;IACX,CAAC;IAED,MAAM,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAErE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACvB,qBAAqB,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QAClC,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC5B,QAAwC,EACxC,UAAiC,EAC7B,EAAE;IACN,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;QACxB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAEhE,OAAO;IACX,CAAC;IAED,IAAI,MAAM,CAAC,kBAAkB,EAAE,IAAI,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACrE,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,IAAgB,EAAc,EAAE;IAC7D,IAAI,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC;QACrC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC5B,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC;QACnC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAC7B,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,OAAO,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,KAAY,EAAE,IAAgB,EAAW,EAAE;IACpE,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC9D,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAC7E,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CAAC,QAAwC,EAAQ,EAAE;IACpF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IACpC,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAElD,IAAI,SAAS,KAAK,MAAM,IAAI,mBAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC7E,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,QAAgD,EAAQ,EAAE;IAC3F,MAAM,MAAM,GAAG,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE7D,IAAI,mBAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACtE,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,+BAA+B,GAAG,CAAC,OAAiD,EAAQ,EAAE;IAChG,MAAM,GAAG,GAAG,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtD,IAAI,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IAC3E,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG,CACrC,WAAqB,EACrB,IAAmC,EACnC,UAAiC,EAC7B,EAAE;IACN,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC;IAC3C,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAEpF,IAAI,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;QACrC,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,WAAqB,EAAE,UAAiC,EAAQ,EAAE;IAClG,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAErC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QAC1B,OAAO;IACX,CAAC;IAED,MAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE1D,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACvB,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;QAChD,sBAAsB,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,gCAAgC,CAAC,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IACpE,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CAAC,MAAc,EAAE,UAAiC,EAAU,EAAE;IAC/F,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAEnF,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACvF,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC1B,IAAY,EACZ,MAAc,EACd,IAAuC,EAClB,EAAE;IACvB,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE;QAClC,GAAG,EAAE,IAAI;QACT,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,EAAE,8BAA8B,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE;QAClF,UAAU,EAAE,QAAQ;KACvB,CAAC,CAAC;IAEH,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,UAAU,GAA0B;QACtC,KAAK,EAAE,IAAI,GAAG,EAAE;QAChB,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,cAAc,EAAE,IAAI,GAAG,EAAE;QACzB,SAAS,EAAE,IAAI,GAAG,EAAE;QACpB,KAAK,EAAE,EAAE;KACZ,CAAC;IAEF,QAAQ,CAAC,MAAM,EAAE;QACb,cAAc,CAAC,QAAQ;YACnB,uBAAuB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC;QACD,iBAAiB,CAAC,WAAW;YACzB,0BAA0B,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACxD,CAAC;QACD,sBAAsB,CAAC,QAAQ;YAC3B,2BAA2B,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,wBAAwB,CAAC,OAAO;YAC5B,+BAA+B,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;KACJ,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CAAC,IAA2B,EAAE,UAAiC,EAAQ,EAAE;IAC5G,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO;IACX,CAAC;IAED,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,iCAAiC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC,CAAC;AAEF,MAAM,iCAAiC,GAAG,CACtC,MAAsC,EACtC,KAAqC,EACjC,EAAE;IACN,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACxC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACnC,2BAA2B,CAAC,KAAK,CAAC,CAAC;QAEnC,OAAO;IACX,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5E,OAAO;IACX,CAAC;IAED,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,SAA8B,EAAE,IAAY,EAAW,EAAE,CAClF,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;AAE5E,MAAM,uBAAuB,GAAG,CAAC,SAA8B,EAAQ,EAAE;IACrE,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;QAC7C,OAAO;IACX,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,KAAK,wBAAwB;QAC1D,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU;QAC5B,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;IACtB,0BAA0B,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,mCAAmC,GAAG,CAAC,SAA8B,EAAE,IAAY,EAAQ,EAAE;IAC/F,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO;IACX,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,KAAK,wBAAwB;QAC5D,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU;QAC5B,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;IACtB,0BAA0B,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,SAA8B,EAAQ,EAAE;IACzE,IAAI,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE,IAAI,KAAK,wBAAwB,EAAE,CAAC;QACnG,2BAA2B,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAAC,SAAkC,EAAQ,EAAE;IAC/E,IAAI,SAAS,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACrF,CAAC;IAED,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACnC,mCAAmC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC1D,mCAAmC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC3D,2BAA2B,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,IAA8B,EAAE,UAAiC,EAAQ,EAAE;IAC5G,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO;IACX,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,6BAA6B,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG,CAAC,IAAY,EAAE,MAAc,EAAyB,EAAE;IAC7F,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACjH,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAE7D,IAAI,OAAO,CAAC;QACR,cAAc,CAAC,IAAI;YACf,8BAA8B,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACrD,CAAC;QACD,iBAAiB,CAAC,IAAI;YAClB,2BAA2B,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC;KACJ,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzB,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CACjE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAExB,MAAM,oBAAoB,GAAG,CACzB,IAAY,EACZ,UAA8C,EAC9C,QAAwB,EACjB,EAAE;IACT,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/D,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpF,OAAO,gBAAgB,EAAE,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC;AACvG,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC3B,UAA8C,EAC9C,YAAoB,EACD,EAAE;IACrB,MAAM,SAAS,GAAwB,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAEvE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACpB,IAAY,EACZ,UAA8C,EAC9C,KAAmB,EACA,EAAE;IACrB,MAAM,kBAAkB,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;IACjD,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,KAAK,CAAC;QAC7C,CAAC,CAAC,sBAAsB,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC;QAC/C,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEhG,OAAO,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC;AACnE,CAAC,CAAC;AAIF,MAAM,0BAA0B,GAAG,CAAC,OAAe,EAAE,KAAa,EAA+B,EAAE;IAC/F,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEtC,OAAO,GAAG,KAAK,CAAC,CAAC;QACb,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAA+B,EAAE;IACxE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEzB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QAClC,OAAO,0BAA0B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE/E,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC;QACpB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;AAClF,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,OAAe,EAAiB,EAAE;IAC9D,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAEjD,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,SAA6B,EAAE,KAAa,EAAU,EAAE;IACtF,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACpB,OAAO,KAAK,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE;IAC/D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAElE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAE3B,IAAI,SAAS,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC/B,CAAC;QAED,KAAK,GAAG,wBAAwB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAY,EAAE;IACvD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAE3C,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAChB,MAAM;QACV,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE5C,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACb,MAAM;QACV,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,OAAsB,EAAY,EAAE;IACxE,MAAM,UAAU,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,iBAAiB,GAAG,OAAO,EAAE,CAAC;IAErF,OAAO,CAAC,GAAG,UAAU,MAAM,EAAE,GAAG,UAAU,QAAQ,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAY,EAAE;IACtD,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE5C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,OAAO,KAAK,IAAI;QAC/B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,iBAAiB,GAAG,OAAO,EAAE,CAAC,CAAC;IAElF,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QACnC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,UAAU,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAY,EAAe,EAAE;IAClD,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE,CAAC;IAEpC,KAAK,MAAM,OAAO,IAAI,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,KAAK,MAAM,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAC/B,IAAY,EACZ,UAA8C,EAC9C,GAAW,EACX,SAA8B,EAC1B,EAAE;IACN,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/D,SAAS;QACb,CAAC;QAED,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtE,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACjC,qBAAqB,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACnG,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAChC,IAAY,EACZ,UAA8C,EAC9C,IAAY,EACZ,SAA8B,EAC1B,EAAE;IACN,KAAK,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,0BAA0B,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;IACjE,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CACjC,IAAY,EACZ,UAA8C,EAC9C,KAAmB,EACnB,SAA8B,EAC1B,EAAE;IACN,2BAA2B,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAEpE,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QACzC,2BAA2B,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IACjF,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAClC,IAAY,EACZ,UAA8C,EAC9C,OAAyB,EACzB,SAAsB,EACf,EAAE;IACT,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,SAAS;QACb,CAAC;QAED,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAE5D,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACtB,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACtB,4BAA4B,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YAClF,WAAW,GAAG,IAAI,CAAC;QACvB,CAAC;IACL,CAAC;IAED,OAAO,WAAW,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC5B,IAAY,EACZ,UAA8C,EAC9C,OAAyB,EACrB,EAAE;IACN,MAAM,SAAS,GAAgB,IAAI,GAAG,EAAE,CAAC;IACzC,IAAI,sBAAsB,GAAG,IAAI,CAAC;IAElC,OAAO,sBAAsB,EAAE,CAAC;QAC5B,sBAAsB,GAAG,6BAA6B,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACjG,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC5B,IAAY,EACZ,UAA8C,EAC9C,OAAyB,EACrB,EAAE;IACN,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAE5D,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,MAAc,EAAU,EAAE,CAC9E,GAAG,IAAI,KAAK,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;AAElD,MAAM,4BAA4B,GAAG,CACjC,IAAY,EACZ,MAAmB,EACnB,QAA2B,EACvB,EAAE;IACN,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/D,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACjG,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,OAAyB,EAAe,EAAE;IACnF,MAAM,MAAM,GAAgB,IAAI,GAAG,EAAE,CAAC;IAEtC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;QAExC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC1B,IAAY,EACZ,UAAiC,EACjC,SAAsB,EACf,EAAE,CACT,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC;AAE7F,MAAM,4BAA4B,GAAG,CACjC,IAAY,EACZ,UAA8C,EAC9C,OAAyB,EACrB,EAAE;IACN,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEvD,KAAK,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC;QAChD,IAAI,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC9E,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,EAAE,IAAY,EAAE,WAAqB,EAA4B,EAAE;IAC/F,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAEzB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,MAAM,UAAU,GAAuC,IAAI,GAAG,EAAE,CAAC;IAEjE,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,gCAAgC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,SAAuC,CAAC;IAC5C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;IAE1C,MAAM,OAAO,GAAW;QACpB,IAAI,EAAE,cAAc;QACpB,MAAM,CAAC,IAAI,EAAE,IAAI;YACb,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAE7D,OAAO,gBAAgB,KAAK,SAAS;gBACjC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,4BAA4B,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAC/D,CAAC;QACD,KAAK,CAAC,IAAI;YACN,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YAChD,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YAChD,4BAA4B,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YACrD,SAAS,GAAG,IAAI,CAAC;QACrB,CAAC;KACJ,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE;QAC/E,MAAM;QACN,KAAK,EAAE,IAAI;QACX,uBAAuB,EAAE,IAAI;QAC7B,oBAAoB,EAAE,IAAI;KAC7B,CAAC,CAAC;IAEH,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;SAC9C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SAClD,QAAQ,CAAC,eAAe,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,IAAY,EAAiB,EAAE;IAC9D,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxE,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEjD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,WAAW,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,OAAuB,EAAE,WAAqB,EAAU,EAAE;IAC7E,MAAM,KAAK,GAAG,WAAW;SACpB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SAC9C,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACzD,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE3E,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,OAAsB,EAAU,EAAE;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE9C,OAAO,OAAO,CAAC,OAAO,KAAK,IAAI;YAC3B,CAAC,CAAC,YAAY,KAAK,KAAK,MAAM,OAAO;YACrC,CAAC,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;IACnF,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,KAAK,IAAI;QAC3B,CAAC,CAAC,WAAW,KAAK,IAAI;QACtB,CAAC,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;AACpE,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAClB,OAAuB,EACvB,OAAsB,EACsB,EAAE;IAC9C,MAAM,MAAM,GAAiD,EAAE,CAAC;IAEhE,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEtD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAE/F,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CACjB,OAAuB,EACvB,OAAsB,EACsB,EAAE;IAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEhD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AAC1F,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACrB,OAAuB,EACvB,QAAyB,EACI,EAAE;IAC/B,MAAM,OAAO,GAAkC,IAAI,GAAG,EAAE,CAAC;IAEzD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,IAAoB,EAAE,KAAqB,EAAU,EAAE,CACpF,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAErF,MAAM,iBAAiB,GAAG,CAAC,OAAyB,EAAU,EAAE;IAC5D,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,KAAe,EAAE,KAAqB,EAAE,aAAqB,EAAQ,EAAE;IACjG,MAAM,KAAK,GAAG,aAAa,GAAG,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAE9B,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;QAE1B,OAAO;IACX,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAyB,EAAU,EAAE;IAChE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IACzD,IAAI,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC5D,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC1B,OAAe,EACf,OAAuB,EACvB,QAAyB,EACnB,EAAE;IACR,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,aAAa,CAAC,MAAM,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAClD,aAAa,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtG,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAoB,EAAQ,EAAE;IAC7F,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEvE,UAAU,CAAC;QACP,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE;YACF,uBAAuB;YACvB,mBAAmB;YACnB,YAAY;YACZ,qBAAqB;YACrB,wBAAwB;YACxB,yBAAyB;YACzB,4BAA4B;YAC5B,eAAe,OAAO,EAAE;YACxB,gBAAgB,YAAY,EAAE;YAC9B,YAAY,MAAM,EAAE;SACvB;QACD,MAAM,EAAE,MAAM;KACjB,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,OAAuB,EAAE,KAAa,EAAE,MAAc,EAAQ,EAAE;IAC7F,UAAU,CAAC;QACP,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACF,YAAY;YACZ,iBAAiB,MAAM,EAAE;YACzB,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,IAAI,CAAC,YAAY,EAAE,CAAC;YAClF,KAAK;SACR;QACD,MAAM,EAAE,KAAK;KAChB,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAQ,EAAE;IACpE,UAAU,CAAC;QACP,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,CAAC,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,MAAM,EAAE,EAAE,QAAQ,CAAC;QACxF,MAAM,EAAE,MAAM;KACjB,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,EAC5B,OAAO,EACP,QAAQ,EACR,8BAA8B,EAC9B,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,MAAM,MAAM,CAAC,GAChC,EAAQ,EAAE;IAClC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC3C,MAAM,mBAAmB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAE/C,IAAI,CAAC;QACD,IAAI,8BAA8B,IAAI,mBAAmB,EAAE,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YAC/C,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YACnD,qBAAqB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACtE,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACJ,qBAAqB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACP,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,KAAK,EAChC,OAAuB,EACvB,KAAe,EACf,MAAc,EACD,EAAE;IACf,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrE,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACpC,sBAAsB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,8BAA8B,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AACjG,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,KAAK,EAC9B,OAAuB,EACvB,KAAe,EACf,8BAA8B,GAAG,IAAI,EACxB,EAAE;IACf,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrE,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACpC,sBAAsB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,8BAA8B,EAAE,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,CAAC","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"]}
|
package/dist/i18n/types.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
type I18nTypesResult = {
|
|
3
|
-
isWritten: boolean;
|
|
4
|
-
path: string;
|
|
5
|
-
};
|
|
1
|
+
import type { I18nextToolkitConfig, Plugin } from "i18next-cli";
|
|
6
2
|
declare const I18N_TYPES_FILENAME = "i18n.d.ts";
|
|
7
3
|
declare const i18nTypesPath: (root: string) => string;
|
|
8
|
-
declare const
|
|
9
|
-
|
|
4
|
+
declare const clearI18nResources: (root: string) => void;
|
|
5
|
+
declare const i18nToolkitConfig: (root: string, sourceFiles: string[], plugins?: Plugin[]) => I18nextToolkitConfig;
|
|
6
|
+
declare const emitI18nTypes: (root: string) => Promise<void>;
|
|
7
|
+
declare const clearI18nTypes: (root: string) => void;
|
|
8
|
+
export { I18N_TYPES_FILENAME, clearI18nResources, clearI18nTypes, emitI18nTypes, i18nToolkitConfig, i18nTypesPath, };
|
|
10
9
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/i18n/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/i18n/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/i18n/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAU,MAAM,EAAE,MAAM,aAAa,CAAC;AAOxE,QAAA,MAAM,mBAAmB,cAAc,CAAC;AAKxC,QAAA,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAAuD,CAAC;AAG9F,QAAA,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,IAE1C,CAAC;AAEF,QAAA,MAAM,iBAAiB,GACnB,MAAM,MAAM,EACZ,aAAa,MAAM,EAAE,EACrB,UAAS,MAAM,EAAO,KACvB,oBA0BD,CAAC;AA6CH,QAAA,MAAM,aAAa,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAUvD,CAAC;AAEF,QAAA,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,IAItC,CAAC;AAEF,OAAO,EACH,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,aAAa,GAChB,CAAC"}
|
package/dist/i18n/types.js
CHANGED
|
@@ -1,108 +1,95 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { runTypesGenerator } from "i18next-cli";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
2
3
|
import { dirname, join } from "node:path";
|
|
4
|
+
const CONTEXT_SEPARATOR = "\u{4}";
|
|
5
|
+
const DEFAULT_NAMESPACE = "translation";
|
|
3
6
|
const I18N_TYPES_FILENAME = "i18n.d.ts";
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return (`{${contextField(message.context)} interpolated: ${String(isInterpolated)}; kind: "point"; ` +
|
|
12
|
-
`required: ${String(isRequired)}; value: ${JSON.stringify(message.msgid)} }`);
|
|
7
|
+
const I18N_RESOURCES_FILENAME = "i18n-resources.d.ts";
|
|
8
|
+
const generatedDir = (root) => join(root, "node_modules", ".gtkx");
|
|
9
|
+
const i18nResourceDir = (root) => join(generatedDir(root), "i18n");
|
|
10
|
+
const i18nTypesPath = (root) => join(generatedDir(root), I18N_TYPES_FILENAME);
|
|
11
|
+
const i18nResourcesPath = (root) => join(generatedDir(root), I18N_RESOURCES_FILENAME);
|
|
12
|
+
const clearI18nResources = (root) => {
|
|
13
|
+
rmSync(i18nResourceDir(root), { force: true, recursive: true });
|
|
13
14
|
};
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return [pluralDefaultsVariant(message)];
|
|
50
|
-
}
|
|
51
|
-
return message.kind === "default" ? [defaultVariant(message)] : [pointVariant(message)];
|
|
52
|
-
};
|
|
53
|
-
const renderRegistry = (messages) => {
|
|
54
|
-
const entries = new Map();
|
|
55
|
-
for (const message of messages) {
|
|
56
|
-
const variants = entries.get(message.msgid) ?? new Set();
|
|
57
|
-
for (const variant of variantsFor(message)) {
|
|
58
|
-
variants.add(variant);
|
|
59
|
-
}
|
|
60
|
-
entries.set(message.msgid, variants);
|
|
61
|
-
}
|
|
62
|
-
return [...entries]
|
|
63
|
-
.toSorted(([left], [right]) => left.localeCompare(right))
|
|
64
|
-
.map(([msgid, variants]) => ` ${JSON.stringify(msgid)}: ${[...variants].join(" | ")};`);
|
|
65
|
-
};
|
|
66
|
-
const generatedHeader = () => [
|
|
67
|
-
"/**",
|
|
68
|
-
" * Translation declarations generated by GTKX. Regenerated by",
|
|
69
|
-
" * `gtkx codegen`, `gtkx dev`, and `gtkx build`; do not edit.",
|
|
70
|
-
" */",
|
|
71
|
-
];
|
|
72
|
-
const renderI18nTypes = (messages, isEnabled = true) => {
|
|
73
|
-
if (!isEnabled) {
|
|
74
|
-
return [...generatedHeader(), "export {};", ""].join("\n");
|
|
75
|
-
}
|
|
76
|
-
return [
|
|
77
|
-
...generatedHeader(),
|
|
78
|
-
'import "@gtkx/i18n";',
|
|
79
|
-
"",
|
|
80
|
-
'declare module "@gtkx/i18n" {',
|
|
81
|
-
" interface TranslationRegistry {",
|
|
82
|
-
...renderRegistry(messages),
|
|
83
|
-
" }",
|
|
84
|
-
"}",
|
|
85
|
-
"",
|
|
86
|
-
].join("\n");
|
|
87
|
-
};
|
|
88
|
-
const i18nTypesPath = (root) => join(root, "node_modules", ".gtkx", I18N_TYPES_FILENAME);
|
|
89
|
-
const readFileOrNull = (path) => {
|
|
15
|
+
const i18nToolkitConfig = (root, sourceFiles, plugins = []) => ({
|
|
16
|
+
locales: ["en"],
|
|
17
|
+
plugins,
|
|
18
|
+
extract: {
|
|
19
|
+
contextSeparator: CONTEXT_SEPARATOR,
|
|
20
|
+
defaultNS: DEFAULT_NAMESPACE,
|
|
21
|
+
disablePlurals: false,
|
|
22
|
+
extractFromComments: false,
|
|
23
|
+
functions: ["t"],
|
|
24
|
+
generateBasePluralForms: false,
|
|
25
|
+
input: sourceFiles,
|
|
26
|
+
keySeparator: ".",
|
|
27
|
+
nsSeparator: false,
|
|
28
|
+
output: join(i18nResourceDir(root), "{{language}}", "{{namespace}}.json"),
|
|
29
|
+
pluralSeparator: "_",
|
|
30
|
+
primaryLanguage: "en",
|
|
31
|
+
removeUnusedKeys: true,
|
|
32
|
+
transComponents: ["Trans", "TransWithoutContext"],
|
|
33
|
+
useTranslationNames: ["useTranslation"],
|
|
34
|
+
warnOnConflicts: "error",
|
|
35
|
+
},
|
|
36
|
+
types: {
|
|
37
|
+
input: join(i18nResourceDir(root), "en", "*.json"),
|
|
38
|
+
output: i18nTypesPath(root),
|
|
39
|
+
resourcesFile: i18nResourcesPath(root),
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
const declarations = () => `import type Resources from "./i18n-resources.js";
|
|
43
|
+
|
|
44
|
+
declare module "@gtkx/i18n" {
|
|
45
|
+
interface I18nResources extends Resources {}
|
|
46
|
+
}
|
|
47
|
+
`;
|
|
48
|
+
const writeChanged = (path, content) => {
|
|
49
|
+
let current;
|
|
90
50
|
try {
|
|
91
|
-
|
|
51
|
+
current = readFileSync(path, "utf8");
|
|
92
52
|
}
|
|
93
53
|
catch {
|
|
94
|
-
|
|
54
|
+
current = null;
|
|
95
55
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const path = i18nTypesPath(root);
|
|
99
|
-
const content = renderI18nTypes(messages, isEnabled);
|
|
100
|
-
if (readFileOrNull(path) === content) {
|
|
101
|
-
return { isWritten: false, path };
|
|
56
|
+
if (current === content) {
|
|
57
|
+
return;
|
|
102
58
|
}
|
|
103
59
|
mkdirSync(dirname(path), { recursive: true });
|
|
104
60
|
writeFileSync(path, content);
|
|
105
|
-
return { isWritten: true, path };
|
|
106
61
|
};
|
|
107
|
-
|
|
62
|
+
const typegenLogger = () => {
|
|
63
|
+
const errors = [];
|
|
64
|
+
return {
|
|
65
|
+
errors,
|
|
66
|
+
logger: {
|
|
67
|
+
error(value) {
|
|
68
|
+
errors.push(String(value));
|
|
69
|
+
},
|
|
70
|
+
info() {
|
|
71
|
+
return;
|
|
72
|
+
},
|
|
73
|
+
warn() {
|
|
74
|
+
return;
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
const emitI18nTypes = async (root) => {
|
|
80
|
+
const typesPath = i18nTypesPath(root);
|
|
81
|
+
const resourcesPath = i18nResourcesPath(root);
|
|
82
|
+
writeChanged(typesPath, declarations());
|
|
83
|
+
const { errors, logger } = typegenLogger();
|
|
84
|
+
await runTypesGenerator(i18nToolkitConfig(root, []), { logger, quiet: true });
|
|
85
|
+
if (errors.length > 0 || !existsSync(typesPath) || !existsSync(resourcesPath)) {
|
|
86
|
+
throw new Error(errors.join("\n") || "i18next type generation did not produce its outputs");
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const clearI18nTypes = (root) => {
|
|
90
|
+
rmSync(i18nTypesPath(root), { force: true });
|
|
91
|
+
rmSync(i18nResourcesPath(root), { force: true });
|
|
92
|
+
clearI18nResources(root);
|
|
93
|
+
};
|
|
94
|
+
export { I18N_TYPES_FILENAME, clearI18nResources, clearI18nTypes, emitI18nTypes, i18nToolkitConfig, i18nTypesPath, };
|
|
108
95
|
//# sourceMappingURL=types.js.map
|