/** * `@urbicon-ui/i18n/audit` — the dependency-free data-level audit (Feature A, * also on the main entry) plus the source-scanning unused-key detector * (Feature B). The scanner lazily imports `typescript` and `svelte/compiler` * (optional peers), so this subpath stays out of the i18n runtime entry and the * heavy deps load only when a scan actually runs. * * The CLI (`urbicon i18n`) is the filesystem front end over this pure core: it * globs sources, reads bundles, then calls `scanSources` + `findUnusedKeys` + * `auditTranslations` here. */ export type { I18nMissingKey, Locale } from '../i18n/types.js'; export { isLocaleSupported, SUPPORTED_LOCALES } from '../i18n/types.js'; export { collectDeepKeys } from '../utils/deep-keys.js'; export { makeGlobMatcher } from './glob.js'; export type { MissingKeyCollector, MissingKeyRecord } from './missing-key-collector.js'; export { createMissingKeyCollector } from './missing-key-collector.js'; export type { FindHardcodedOptions, HardcodedFinding } from './scan/hardcoded.js'; export { findHardcodedStrings } from './scan/hardcoded.js'; export type { ScanSourcesResult } from './scan/scanner.js'; export { scanSource, scanSources } from './scan/scanner.js'; export type { KeyUsageSite, ScanOptions, UsageScan } from './scan/types.js'; export type { AuditTranslationsOptions, TranslationAuditReport, TranslationFinding, TranslationFindingCode, TranslationFindingSeverity } from './translations.js'; export { auditTranslations } from './translations.js'; export type { DynamicPrefixCoverage, FindUnusedOptions, UnusedKeyFinding, UnusedReport, UsedButUndefinedFinding } from './unused.js'; export { findUnusedKeys } from './unused.js';