@verbatra/sdk 0.6.4 → 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.ts 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">;
@@ -644,6 +660,15 @@ declare function loadConfig(options?: LoadConfigOptions): Promise<VerbatraConfig
644
660
  * its timeout elapsed, because another process is holding it (or an orphaned lock file was left
645
661
  * behind by a killed process); the message names the lock file's path (thrown by `translate`,
646
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).
647
672
  * - `CONCURRENCY_INVALID`: the `concurrency` input is not an integer of at least 1 (thrown by
648
673
  * `translate` and, per run, by `watch`, before any locale runs).
649
674
  * - `CONCURRENCY_BUDGET_CONFLICT`: a live run requested `concurrency` greater than 1 while a token
@@ -655,7 +680,7 @@ declare function loadConfig(options?: LoadConfigOptions): Promise<VerbatraConfig
655
680
  * per-locale failure carries no string code of its own. See the surfaced-not-thrown distinction
656
681
  * on `translate`.
657
682
  */
658
- 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";
659
684
  /** The single structured error the SDK throws or records. Never carries a secret. */
660
685
  declare class SdkError extends Error {
661
686
  /** The stable {@link SdkErrorCode} for this failure; branch on this, not the message. */
@@ -1396,12 +1421,19 @@ interface NeedsReviewEntry {
1396
1421
  readonly reasons: readonly ReviewReasonCode[];
1397
1422
  }
1398
1423
  /**
1399
- * One row a workbook import could not read: the 1-based worksheet row number and the header label of
1400
- * 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.
1401
1427
  */
1402
1428
  interface MalformedRowReport {
1403
1429
  /** The 1-based worksheet row number of the malformed row. */
1404
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;
1405
1437
  /** The header label of the column the row was rejected on (for example "Status"). */
1406
1438
  readonly column: string;
1407
1439
  }
@@ -1414,6 +1446,15 @@ interface DuplicateKeyReport {
1414
1446
  readonly key: string;
1415
1447
  /** The 1-based worksheet row number of the later occurrence that lost to the first. */
1416
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;
1417
1458
  }
1418
1459
  /** Structured outcome for one target locale; surfaced as data on the run, never thrown. */
1419
1460
  interface LocaleSummary {
@@ -1892,20 +1933,44 @@ interface TranslateDeps {
1892
1933
  */
1893
1934
  declare function translate(input: TranslateInput, deps?: TranslateDeps): Promise<RunSummary>;
1894
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
+
1895
1949
  /** Default workbook output path, relative to the resolved working directory. */
1896
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";
1897
1956
  /** Input for {@link exportWorkbook}: the validated config and where/how to run the export. */
1898
1957
  interface ExportWorkbookInput {
1899
1958
  /** The validated configuration (typically from {@link loadConfig}). */
1900
1959
  readonly config: VerbatraConfig;
1901
1960
  /** Directory the file pattern, lock-file, and output path resolve against; defaults to cwd. */
1902
1961
  readonly cwd?: string;
1903
- /** 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
+ */
1904
1967
  readonly out?: string;
1905
1968
  /** Subset of target locales to export; defaults to all configured target locales. */
1906
1969
  readonly locales?: readonly string[];
1907
1970
  /** Include unchanged keys (off by default; export is missing-and-changed only). */
1908
1971
  readonly includeUnchanged?: boolean;
1972
+ /** Interchange format to write; defaults to `xlsx`, so an existing caller is unaffected. */
1973
+ readonly format?: ExchangeFormat;
1909
1974
  }
1910
1975
  /** Composition seam for {@link exportWorkbook}: inject a registry and a file system for tests. */
1911
1976
  interface ExportWorkbookDeps {
@@ -1914,7 +1979,10 @@ interface ExportWorkbookDeps {
1914
1979
  }
1915
1980
  /** The outcome of an export: where it was written and how many rows per locale. */
1916
1981
  interface ExportWorkbookResult {
1917
- /** 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
+ */
1918
1986
  readonly path: string;
1919
1987
  /** Per-locale row counts, in config order; the same set the workbook carries. */
1920
1988
  readonly locales: readonly {
@@ -1923,14 +1991,24 @@ interface ExportWorkbookResult {
1923
1991
  }[];
1924
1992
  }
1925
1993
  /**
1926
- * Export the strings needing human translation into a styled `.xlsx` workbook. Each target locale is
1927
- * diffed against the source and lock baseline to pick the rows (missing and changed by default; add
1928
- * unchanged with `includeUnchanged`), and the bytes are written to `out`. No provider is called and no
1929
- * 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.
1930
2008
  *
1931
2009
  * @param input - The validated config and export options.
1932
2010
  * @param deps - Optional composition seams (registry, file system) for tests.
1933
- * @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.
1934
2012
  * @throws {@link SdkError} `UNKNOWN_FORMAT`, `SOURCE_UNREADABLE`, `SOURCE_INVALID`, `LOCK_FILE_INVALID`
1935
2013
  * with the same meanings as in `translate`, or `UNKNOWN_LOCALE` when a requested locale is not
1936
2014
  * among the configured target locales.
@@ -1941,12 +2019,17 @@ declare function exportWorkbook(input: ExportWorkbookInput, deps?: ExportWorkboo
1941
2019
  interface ImportWorkbookInput {
1942
2020
  /** The validated configuration (typically from {@link loadConfig}). */
1943
2021
  readonly config: VerbatraConfig;
1944
- /** 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
+ */
1945
2026
  readonly workbook: string;
1946
2027
  /** Directory the file pattern, lock-file, and workbook path resolve against; defaults to cwd. */
1947
2028
  readonly cwd?: string;
1948
2029
  /** When true, validate and report only: write no locale file and update no lock-file. */
1949
2030
  readonly dryRun?: boolean;
2031
+ /** Interchange format to read; defaults to `xlsx`, so an existing caller is unaffected. */
2032
+ readonly format?: ExchangeFormat;
1950
2033
  }
1951
2034
  /** Composition seam for {@link importWorkbook}: inject a registry and a file system for tests. */
1952
2035
  interface ImportWorkbookDeps {
@@ -1954,7 +2037,7 @@ interface ImportWorkbookDeps {
1954
2037
  readonly fs?: SdkFs;
1955
2038
  }
1956
2039
  /**
1957
- * 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
1958
2041
  * source-drift, placeholder, and ICU checks as the translate flow, the accepted values are written
1959
2042
  * through the format adapter, and the lock is updated. Returns a {@link RunSummary} structurally
1960
2043
  * identical to `translate`'s.
@@ -1965,8 +2048,10 @@ interface ImportWorkbookDeps {
1965
2048
  * throw; per-row rejections are withheld and reported on the locale. A configured target locale with
1966
2049
  * no sheet at all (a deleted, renamed, or reordered tab) is reconciled after the sheet loop and
1967
2050
  * reported as that locale's `status: "failed"` (`WORKBOOK_SHEET_MISSING`) rather than silently
1968
- * dropped. Dry-run validates and reports without writing any locale or lock file, and skips lock
1969
- * 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).
1970
2055
  *
1971
2056
  * The lock-file is read once, up front, for every sheet's diff baseline. On a non-dry-run, each
1972
2057
  * sheet's write-and-lock-update step then holds that locale's `withLocaleWriteLock` for its whole
@@ -1979,6 +2064,82 @@ interface ImportWorkbookDeps {
1979
2064
  */
1980
2065
  declare function importWorkbook(input: ImportWorkbookInput, deps?: ImportWorkbookDeps): Promise<RunSummary>;
1981
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
+
1982
2143
  /**
1983
2144
  * The lock-file shape: for each target locale, a map of key to the source content hash from which that
1984
2145
  * target key was last translated. The baseline core's diff consumes to detect changed source strings.
@@ -2179,4 +2340,4 @@ interface WatchController {
2179
2340
  */
2180
2341
  declare function watch(input: WatchInput, deps?: WatchDeps): Promise<WatchController>;
2181
2342
 
2182
- 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 };