@verbatra/sdk 0.6.3 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -152,7 +152,10 @@ interface TranslateResult {
152
152
  /**
153
153
  * The single contract every provider implements. It is narrow enough that a machine-translation API like
154
154
  * DeepL fits it directly, while LLM providers implement it by delegating to {@link runLlmTranslation}.
155
- * A new provider attaches by implementing this and registering it in a {@link ProviderRegistry}.
155
+ * A new provider attaches by implementing this, then adding an entry to the `providerFactories` table
156
+ * in `packages/sdk/src/config/provider-config.ts` alongside its member of the `providerConfigSchema`
157
+ * union. That table is a mapped type over the union's id set, so a provider present in one but not the
158
+ * other fails to compile.
156
159
  *
157
160
  * Implementer invariants:
158
161
  * - Translatable strings are UNTRUSTED. They travel only as data to the provider; never splice them into
@@ -283,6 +286,14 @@ interface SdkFs {
283
286
  createExclusive(path: string, data: string): Promise<boolean>;
284
287
  /** Delete a file if present; a no-op if it is already absent. */
285
288
  deleteFile(path: string): Promise<void>;
289
+ /**
290
+ * Create a directory and every missing parent (mkdir -p); a no-op if it already exists.
291
+ *
292
+ * Optional so an `SdkFs` written against an earlier version stays valid, and because an in-memory
293
+ * test double has no directories to create. Only the delimited export calls it, right before writing
294
+ * one interchange file per locale into the directory the caller named.
295
+ */
296
+ mkdir?(path: string): Promise<void>;
286
297
  }
287
298
 
288
299
  /**
@@ -374,6 +385,11 @@ declare const verbatraConfigSchema: z.ZodObject<{
374
385
  }>;
375
386
  files: z.ZodObject<{
376
387
  pattern: z.ZodString;
388
+ localeStyle: z.ZodOptional<z.ZodEnum<{
389
+ literal: "literal";
390
+ posix: "posix";
391
+ android: "android";
392
+ }>>;
377
393
  }, z.core.$strict>;
378
394
  provider: z.ZodDiscriminatedUnion<[z.ZodObject<{
379
395
  id: z.ZodLiteral<"anthropic">;
@@ -527,6 +543,7 @@ type GlossaryProvenance = {
527
543
  readonly path: string;
528
544
  };
529
545
 
546
+ /** Where {@link loadConfig} should obtain the configuration. The three sources are alternatives. */
530
547
  interface LoadConfigOptions {
531
548
  /** Directory to start the search from. Defaults to the current working directory. */
532
549
  readonly cwd?: string;
@@ -643,6 +660,15 @@ declare function loadConfig(options?: LoadConfigOptions): Promise<VerbatraConfig
643
660
  * its timeout elapsed, because another process is holding it (or an orphaned lock file was left
644
661
  * behind by a killed process); the message names the lock file's path (thrown by `translate`,
645
662
  * `importWorkbook`, `editEntry`, and `retranslateEntry`).
663
+ * - `LOCALE_LAYOUT_INVALID`: the configured `files.pattern` and `files.localeStyle` cannot be
664
+ * combined (a segment style needs the `{locale}` token to stand alone between separators), or the
665
+ * declared style has no valid path spelling for a configured locale (`zh-Hans` under `posix`, for
666
+ * instance), or a locale expands to something that is not a single path segment. Thrown by
667
+ * `createLocalePathResolver`, and so by every entry point that resolves a locale to a path, before
668
+ * any file is read and before any provider call.
669
+ * - `LOCALE_PATH_COLLISION`: two configured locales resolve to the same absolute file path, which
670
+ * would make the path-to-locale direction meaningless and would let two concurrent locale workers
671
+ * race on one file (thrown by `createLocalePathResolver`, at the same point as the above).
646
672
  * - `CONCURRENCY_INVALID`: the `concurrency` input is not an integer of at least 1 (thrown by
647
673
  * `translate` and, per run, by `watch`, before any locale runs).
648
674
  * - `CONCURRENCY_BUDGET_CONFLICT`: a live run requested `concurrency` greater than 1 while a token
@@ -654,7 +680,7 @@ declare function loadConfig(options?: LoadConfigOptions): Promise<VerbatraConfig
654
680
  * per-locale failure carries no string code of its own. See the surfaced-not-thrown distinction
655
681
  * on `translate`.
656
682
  */
657
- type SdkErrorCode = "CONFIG_NOT_FOUND" | "CONFIG_INVALID" | "UNKNOWN_FORMAT" | "UNKNOWN_LOCALE" | "UNKNOWN_KEY" | "PROVIDER_CONSTRUCTION_FAILED" | "SOURCE_UNREADABLE" | "SOURCE_INVALID" | "LOCK_FILE_INVALID" | "LOCK_CONTENDED" | "CONCURRENCY_INVALID" | "CONCURRENCY_BUDGET_CONFLICT" | "LOCALE_FAILED";
683
+ type SdkErrorCode = "CONFIG_NOT_FOUND" | "CONFIG_INVALID" | "UNKNOWN_FORMAT" | "UNKNOWN_LOCALE" | "UNKNOWN_KEY" | "PROVIDER_CONSTRUCTION_FAILED" | "SOURCE_UNREADABLE" | "SOURCE_INVALID" | "LOCK_FILE_INVALID" | "LOCK_CONTENDED" | "LOCALE_LAYOUT_INVALID" | "LOCALE_PATH_COLLISION" | "CONCURRENCY_INVALID" | "CONCURRENCY_BUDGET_CONFLICT" | "LOCALE_FAILED";
658
684
  /** The single structured error the SDK throws or records. Never carries a secret. */
659
685
  declare class SdkError extends Error {
660
686
  /** The stable {@link SdkErrorCode} for this failure; branch on this, not the message. */
@@ -1395,12 +1421,19 @@ interface NeedsReviewEntry {
1395
1421
  readonly reasons: readonly ReviewReasonCode[];
1396
1422
  }
1397
1423
  /**
1398
- * One row a workbook import could not read: the 1-based worksheet row number and the header label of
1399
- * the offending column. Carries no cell content, so untrusted workbook text never reaches the summary.
1424
+ * One row a workbook import could not read: the 1-based row number, the file line for a delimited
1425
+ * import, and the header label of the offending column. Carries no cell content, so untrusted workbook
1426
+ * text never reaches the summary.
1400
1427
  */
1401
1428
  interface MalformedRowReport {
1402
1429
  /** The 1-based worksheet row number of the malformed row. */
1403
1430
  readonly row: number;
1431
+ /**
1432
+ * The 1-based file line the malformed record starts on. Present only for a delimited (csv or tsv)
1433
+ * import; an xlsx workbook has rows rather than lines. See {@link DuplicateKeyReport.line} for why
1434
+ * both numbers are reported.
1435
+ */
1436
+ readonly line?: number;
1404
1437
  /** The header label of the column the row was rejected on (for example "Status"). */
1405
1438
  readonly column: string;
1406
1439
  }
@@ -1413,6 +1446,15 @@ interface DuplicateKeyReport {
1413
1446
  readonly key: string;
1414
1447
  /** The 1-based worksheet row number of the later occurrence that lost to the first. */
1415
1448
  readonly row: number;
1449
+ /**
1450
+ * The 1-based file line this later occurrence starts on. Present only for a delimited (csv or tsv)
1451
+ * import.
1452
+ *
1453
+ * A delimited record holding a quoted line break covers one spreadsheet row but several editor
1454
+ * lines, so `row` is the number a translator sees in a spreadsheet and `line` the one they see in a
1455
+ * text editor. Both are reported so the position holds whichever tool they opened the file in.
1456
+ */
1457
+ readonly line?: number;
1416
1458
  }
1417
1459
  /** Structured outcome for one target locale; surfaced as data on the run, never thrown. */
1418
1460
  interface LocaleSummary {
@@ -1891,20 +1933,44 @@ interface TranslateDeps {
1891
1933
  */
1892
1934
  declare function translate(input: TranslateInput, deps?: TranslateDeps): Promise<RunSummary>;
1893
1935
 
1936
+ /**
1937
+ * The two delimiter-separated interchange formats. They are one implementation with one parameter, the
1938
+ * field delimiter: `tsv` is not a second format, it is `csv` with a tab.
1939
+ */
1940
+ type DelimitedFormat = "csv" | "tsv";
1941
+
1942
+ /**
1943
+ * The interchange format a handoff moves in. `xlsx` is the default and the only shape that carries
1944
+ * every target locale in one artifact; `csv` and `tsv` are plain text and move one file per target
1945
+ * locale, so their path names a directory rather than a file.
1946
+ */
1947
+ type ExchangeFormat = "xlsx" | DelimitedFormat;
1948
+
1894
1949
  /** Default workbook output path, relative to the resolved working directory. */
1895
1950
  declare const DEFAULT_WORKBOOK_PATH = "verbatra-translations.xlsx";
1951
+ /**
1952
+ * Default delimited output directory, relative to the resolved working directory. A delimited export
1953
+ * writes one file per target locale, so its output path names a directory, not a file.
1954
+ */
1955
+ declare const DEFAULT_DELIMITED_PATH = "verbatra-translations";
1896
1956
  /** Input for {@link exportWorkbook}: the validated config and where/how to run the export. */
1897
1957
  interface ExportWorkbookInput {
1898
1958
  /** The validated configuration (typically from {@link loadConfig}). */
1899
1959
  readonly config: VerbatraConfig;
1900
1960
  /** Directory the file pattern, lock-file, and output path resolve against; defaults to cwd. */
1901
1961
  readonly cwd?: string;
1902
- /** Output path for the workbook; defaults to {@link DEFAULT_WORKBOOK_PATH} under cwd. */
1962
+ /**
1963
+ * Output path; defaults to {@link DEFAULT_WORKBOOK_PATH} for `xlsx` and to
1964
+ * {@link DEFAULT_DELIMITED_PATH} for `csv` and `tsv`. It is the workbook file for `xlsx` and the
1965
+ * directory the per-locale files are written into for `csv` and `tsv` (created if missing).
1966
+ */
1903
1967
  readonly out?: string;
1904
1968
  /** Subset of target locales to export; defaults to all configured target locales. */
1905
1969
  readonly locales?: readonly string[];
1906
1970
  /** Include unchanged keys (off by default; export is missing-and-changed only). */
1907
1971
  readonly includeUnchanged?: boolean;
1972
+ /** Interchange format to write; defaults to `xlsx`, so an existing caller is unaffected. */
1973
+ readonly format?: ExchangeFormat;
1908
1974
  }
1909
1975
  /** Composition seam for {@link exportWorkbook}: inject a registry and a file system for tests. */
1910
1976
  interface ExportWorkbookDeps {
@@ -1913,7 +1979,10 @@ interface ExportWorkbookDeps {
1913
1979
  }
1914
1980
  /** The outcome of an export: where it was written and how many rows per locale. */
1915
1981
  interface ExportWorkbookResult {
1916
- /** The absolute path the workbook was written to. */
1982
+ /**
1983
+ * The absolute path written to: the workbook file for `xlsx`, the directory holding one
1984
+ * `<locale>.csv` or `<locale>.tsv` per exported locale for the delimited formats.
1985
+ */
1917
1986
  readonly path: string;
1918
1987
  /** Per-locale row counts, in config order; the same set the workbook carries. */
1919
1988
  readonly locales: readonly {
@@ -1922,14 +1991,24 @@ interface ExportWorkbookResult {
1922
1991
  }[];
1923
1992
  }
1924
1993
  /**
1925
- * Export the strings needing human translation into a styled `.xlsx` workbook. Each target locale is
1926
- * diffed against the source and lock baseline to pick the rows (missing and changed by default; add
1927
- * unchanged with `includeUnchanged`), and the bytes are written to `out`. No provider is called and no
1928
- * lock-file is written.
1994
+ * Export the strings needing human translation into a styled `.xlsx` workbook, or into one plain
1995
+ * `.csv` or `.tsv` file per target locale. Each target locale is diffed against the source and lock
1996
+ * baseline to pick the rows (missing and changed by default; add unchanged with `includeUnchanged`),
1997
+ * and the result is written to `out`. No provider is called and no lock-file is written.
1998
+ *
1999
+ * The delimited formats trade the workbook's protection for a diffable, git-friendly handoff: a
2000
+ * workbook leaves only the Translation column editable and hides the source hash, while every field of
2001
+ * a delimited file is editable and its source hash is visible. An edited source hash is never trusted
2002
+ * on import; it is compared against the live source and the row is withheld as drift.
2003
+ *
2004
+ * A delimited export also writes a small hidden manifest naming the locales it wrote. It exists so a
2005
+ * re-export with a narrower `locales` selection retires the locales it dropped: their files stay on
2006
+ * disk, but the next import recognizes them as leftovers from the earlier run and refuses to apply
2007
+ * them. The export deletes nothing, so an unrelated file in the output directory is never at risk.
1929
2008
  *
1930
2009
  * @param input - The validated config and export options.
1931
2010
  * @param deps - Optional composition seams (registry, file system) for tests.
1932
- * @returns Where the workbook was written and the per-locale row counts.
2011
+ * @returns Where the export was written and the per-locale row counts.
1933
2012
  * @throws {@link SdkError} `UNKNOWN_FORMAT`, `SOURCE_UNREADABLE`, `SOURCE_INVALID`, `LOCK_FILE_INVALID`
1934
2013
  * with the same meanings as in `translate`, or `UNKNOWN_LOCALE` when a requested locale is not
1935
2014
  * among the configured target locales.
@@ -1940,12 +2019,17 @@ declare function exportWorkbook(input: ExportWorkbookInput, deps?: ExportWorkboo
1940
2019
  interface ImportWorkbookInput {
1941
2020
  /** The validated configuration (typically from {@link loadConfig}). */
1942
2021
  readonly config: VerbatraConfig;
1943
- /** Path to the filled workbook to import. */
2022
+ /**
2023
+ * Path to the filled handoff to import: the workbook file for `xlsx`, and for `csv` and `tsv`
2024
+ * either one `<locale>.csv` / `<locale>.tsv` file or a directory holding one per target locale.
2025
+ */
1944
2026
  readonly workbook: string;
1945
2027
  /** Directory the file pattern, lock-file, and workbook path resolve against; defaults to cwd. */
1946
2028
  readonly cwd?: string;
1947
2029
  /** When true, validate and report only: write no locale file and update no lock-file. */
1948
2030
  readonly dryRun?: boolean;
2031
+ /** Interchange format to read; defaults to `xlsx`, so an existing caller is unaffected. */
2032
+ readonly format?: ExchangeFormat;
1949
2033
  }
1950
2034
  /** Composition seam for {@link importWorkbook}: inject a registry and a file system for tests. */
1951
2035
  interface ImportWorkbookDeps {
@@ -1953,7 +2037,7 @@ interface ImportWorkbookDeps {
1953
2037
  readonly fs?: SdkFs;
1954
2038
  }
1955
2039
  /**
1956
- * Import a filled workbook back into the locale files. Each target-locale data sheet runs the same
2040
+ * Import a filled handoff back into the locale files. Each target-locale data sheet runs the same
1957
2041
  * source-drift, placeholder, and ICU checks as the translate flow, the accepted values are written
1958
2042
  * through the format adapter, and the lock is updated. Returns a {@link RunSummary} structurally
1959
2043
  * identical to `translate`'s.
@@ -1964,8 +2048,10 @@ interface ImportWorkbookDeps {
1964
2048
  * throw; per-row rejections are withheld and reported on the locale. A configured target locale with
1965
2049
  * no sheet at all (a deleted, renamed, or reordered tab) is reconciled after the sheet loop and
1966
2050
  * reported as that locale's `status: "failed"` (`WORKBOOK_SHEET_MISSING`) rather than silently
1967
- * dropped. Dry-run validates and reports without writing any locale or lock file, and skips lock
1968
- * acquisition (there is nothing to protect).
2051
+ * dropped. For a delimited directory, a locale file the most recent export into that directory did not
2052
+ * write is a leftover from an earlier, wider selection: it is never applied and is reported as that
2053
+ * locale's `status: "failed"` (`HANDOFF_FILE_STALE`). Dry-run validates and reports without writing any
2054
+ * locale or lock file, and skips lock acquisition (there is nothing to protect).
1969
2055
  *
1970
2056
  * The lock-file is read once, up front, for every sheet's diff baseline. On a non-dry-run, each
1971
2057
  * sheet's write-and-lock-update step then holds that locale's `withLocaleWriteLock` for its whole
@@ -1978,6 +2064,82 @@ interface ImportWorkbookDeps {
1978
2064
  */
1979
2065
  declare function importWorkbook(input: ImportWorkbookInput, deps?: ImportWorkbookDeps): Promise<RunSummary>;
1980
2066
 
2067
+ /** The locale styles a files pattern's `{locale}` token can expand under. */
2068
+ declare const LOCALE_STYLES: readonly ["literal", "posix", "android"];
2069
+ /**
2070
+ * How a configured locale is spelled inside a path:
2071
+ *
2072
+ * - `literal` (the default) expands the token to the configured tag verbatim. This covers the
2073
+ * i18next, vue-i18n, next-intl, ngx-translate, XLIFF, YAML, and ARB layouts, and Apple's
2074
+ * `.lproj` naming, which is the BCP-47 tag as written.
2075
+ * - `posix` replaces `-` with `_`, for gettext directories (`pt_BR/LC_MESSAGES/`) and the Java
2076
+ * `messages_{locale}.properties` suffix layout.
2077
+ * - `android` expands the token to a complete Android resource-directory segment, `values` prefix
2078
+ * included, and is the only style that spells the source locale differently from a target.
2079
+ *
2080
+ * A style may be relaxed to accept a locale it previously refused, but the spelling it already
2081
+ * produces must never change: a re-spelling orphans every file written under the old name, leaving
2082
+ * a stale directory the platform still prefers.
2083
+ */
2084
+ type LocaleStyle = (typeof LOCALE_STYLES)[number];
2085
+
2086
+ /**
2087
+ * The part of the project config locale-to-path resolution depends on. Deliberately structural, so a
2088
+ * caller holding a full `VerbatraConfig` passes it unchanged while a test can build one inline.
2089
+ */
2090
+ interface LocalePathResolverConfig {
2091
+ readonly sourceLocale: string;
2092
+ readonly targetLocales: readonly string[];
2093
+ readonly files: {
2094
+ readonly pattern: string;
2095
+ readonly localeStyle?: LocaleStyle | undefined;
2096
+ };
2097
+ }
2098
+ /**
2099
+ * The project's locale-to-path mapping, resolved once from the config and threaded through every
2100
+ * flow that needs a path. Holding one object rather than a `(pattern, style, sourceLocale)` triple
2101
+ * is what keeps a source-aware style from producing a wrong path in a flow that only threaded part
2102
+ * of it.
2103
+ */
2104
+ interface LocalePathResolver {
2105
+ /**
2106
+ * The absolute file path for one locale. Never throws for a configured locale: every one of them
2107
+ * is spelled and checked when the resolver is created.
2108
+ *
2109
+ * @throws SdkError `LOCALE_LAYOUT_INVALID` when the style cannot spell an unconfigured locale
2110
+ * passed in after construction.
2111
+ */
2112
+ pathFor(locale: string): string;
2113
+ /**
2114
+ * Which configured locale a path belongs to, or `undefined` when it belongs to none of them. This
2115
+ * is a lookup in the forward map, never a parse: the configured locale list is the only authority
2116
+ * on which locales exist. A relative argument is resolved against the same `cwd` the resolver was
2117
+ * created with; the match is exact, so a path differing only in case does not resolve even on a
2118
+ * case-insensitive file system.
2119
+ *
2120
+ * `undefined` is not an error. It means the path is not one of this project's locale files, which
2121
+ * is what a watcher needs to know in order to ignore it.
2122
+ */
2123
+ localeFor(absolutePath: string): string | undefined;
2124
+ }
2125
+ /**
2126
+ * Creates the project's locale-to-path resolver. Every check runs here, before any file is read and
2127
+ * before any provider call: the pattern must carry the `{locale}` token and must be combinable with
2128
+ * the declared style, the style must have a valid spelling for the source locale and every target,
2129
+ * and no two locales may resolve to the same path.
2130
+ *
2131
+ * Under the default `literal` style the produced path is the pattern with `{locale}` replaced by the
2132
+ * configured tag, resolved against `cwd`, which is what every project without a `files.localeStyle`
2133
+ * gets and is unchanged from before styles existed.
2134
+ *
2135
+ * @param cwd - Directory the files pattern resolves against.
2136
+ * @param config - The project's locales, files pattern, and locale style.
2137
+ * @throws SdkError `LOCALE_LAYOUT_INVALID` when the pattern and style cannot be combined, or the
2138
+ * style cannot spell a configured locale.
2139
+ * @throws SdkError `LOCALE_PATH_COLLISION` when two configured locales resolve to the same path.
2140
+ */
2141
+ declare function createLocalePathResolver(cwd: string, config: LocalePathResolverConfig): LocalePathResolver;
2142
+
1981
2143
  /**
1982
2144
  * The lock-file shape: for each target locale, a map of key to the source content hash from which that
1983
2145
  * target key was last translated. The baseline core's diff consumes to detect changed source strings.
@@ -2178,4 +2340,4 @@ interface WatchController {
2178
2340
  */
2179
2341
  declare function watch(input: WatchInput, deps?: WatchDeps): Promise<WatchController>;
2180
2342
 
2181
- export { type BudgetBehavior, CACHE_FILE_NAME, type CheckDeps, type CheckInput, type CheckSummary, type ConfigSource, type CreateProvider, type CreateWatcher, DEFAULT_WORKBOOK_PATH, type DiffDeps, type DiffInput, type DiffSummary, type DuplicateKeyReport, type EditEntryDeps, type EditEntryInput, type EditEntryResult, type ExportWorkbookDeps, type ExportWorkbookInput, type ExportWorkbookResult, type GlossaryProvenance, type ImportWorkbookDeps, type ImportWorkbookInput, type IntegrityGateReason, type KeyIntegrityDeps, type KeyIntegrityEntry, type KeyIntegrityInput, type KeyValueDeps, type KeyValueInput, type KeyValueResult, LOCK_FILE_NAME, type LoadConfigOptions, type LoadLockFileDeps, type LoadLockFileInput, type LoadedConfig, type LocaleCheckSummary, type LocaleDiff, type LocaleFileSnapshot, type LocaleFinishedEvent, type LocaleKeyIntegrity, type LocaleNotice, type LocaleSnapshotDelta, type LocaleStartedEvent, type LocaleSummary, type LockFile, type LockHolder, type LockLocaleState, type LockStateDeps, type LockStateInput, type LockStateResult, type LockWaitEvent, type LockWaitListener, type MalformedRowReport, type NeedsReviewEntry, type ProgressEvent, type ProgressListener, type ProviderConfig, type ProviderId, type ReadLocaleFileSnapshotDeps, type ReadLocaleFileSnapshotInput, type RetranslateEntryDeps, type RetranslateEntryInput, type RetranslateEntryResult, type ReviewReasonCode, type RunBudget, type RunFinishedEvent, type RunStatusDeps, type RunStatusFile, type RunStatusInput, type RunStatusLocale, type RunStatusResult, type RunSummary, type RunTranslate, type ScaffoldableProviderId, SdkError, type SdkErrorCode, type SdkFs, type SdkNotice, type SdkNoticeCode, type SubBatchProgressEvent, type SupportedFormat$1 as SupportedFormat, type TranslateDeps, type TranslateInput, type TranslationMemory, type UsageSummary, type VerbatraConfig, type VerbatraConfigInput, type WatchController, type WatchDeps, type WatchInput, type WatchRunResult, type Watcher, check, defineConfig, diff, diffLocaleSnapshots, editEntry, exportWorkbook, importWorkbook, keyIntegrity, keyValue, loadConfig, loadConfigWithMeta, loadLockFile, lockState, readLocaleFileSnapshot, retranslateEntry, runStatus, scaffoldingMetadata, translate, verbatraConfigSchema, watch };
2343
+ export { type BudgetBehavior, CACHE_FILE_NAME, type CheckDeps, type CheckInput, type CheckSummary, type ConfigSource, type CreateProvider, type CreateWatcher, DEFAULT_DELIMITED_PATH, DEFAULT_WORKBOOK_PATH, type DiffDeps, type DiffInput, type DiffSummary, type DuplicateKeyReport, type EditEntryDeps, type EditEntryInput, type EditEntryResult, type ExchangeFormat, type ExportWorkbookDeps, type ExportWorkbookInput, type ExportWorkbookResult, type GlossaryProvenance, type ImportWorkbookDeps, type ImportWorkbookInput, type IntegrityGateReason, type KeyIntegrityDeps, type KeyIntegrityEntry, type KeyIntegrityInput, type KeyValueDeps, type KeyValueInput, type KeyValueResult, LOCK_FILE_NAME, type LoadConfigOptions, type LoadLockFileDeps, type LoadLockFileInput, type LoadedConfig, type LocaleCheckSummary, type LocaleDiff, type LocaleFileSnapshot, type LocaleFinishedEvent, type LocaleKeyIntegrity, type LocaleNotice, type LocalePathResolver, type LocalePathResolverConfig, type LocaleSnapshotDelta, type LocaleStartedEvent, type LocaleStyle, type LocaleSummary, type LockFile, type LockHolder, type LockLocaleState, type LockStateDeps, type LockStateInput, type LockStateResult, type LockWaitEvent, type LockWaitListener, type MalformedRowReport, type NeedsReviewEntry, type ProgressEvent, type ProgressListener, type ProviderConfig, type ProviderId, type ReadLocaleFileSnapshotDeps, type ReadLocaleFileSnapshotInput, type RetranslateEntryDeps, type RetranslateEntryInput, type RetranslateEntryResult, type ReviewReasonCode, type RunBudget, type RunFinishedEvent, type RunStatusDeps, type RunStatusFile, type RunStatusInput, type RunStatusLocale, type RunStatusResult, type RunSummary, type RunTranslate, type ScaffoldableProviderId, SdkError, type SdkErrorCode, type SdkFs, type SdkNotice, type SdkNoticeCode, type SubBatchProgressEvent, type SupportedFormat$1 as SupportedFormat, type TranslateDeps, type TranslateInput, type TranslationMemory, type UsageSummary, type VerbatraConfig, type VerbatraConfigInput, type WatchController, type WatchDeps, type WatchInput, type WatchRunResult, type Watcher, check, createLocalePathResolver, defineConfig, diff, diffLocaleSnapshots, editEntry, exportWorkbook, importWorkbook, keyIntegrity, keyValue, loadConfig, loadConfigWithMeta, loadLockFile, lockState, readLocaleFileSnapshot, retranslateEntry, runStatus, scaffoldingMetadata, translate, verbatraConfigSchema, watch };