@_linked/translation 0.2.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.
Files changed (153) hide show
  1. package/README.md +102 -0
  2. package/lib/cjs/data/translation.json +8 -0
  3. package/lib/esm/archive.d.ts +133 -0
  4. package/lib/esm/archive.js +567 -0
  5. package/lib/esm/archive.js.map +1 -0
  6. package/lib/esm/authorization.d.ts +12 -0
  7. package/lib/esm/authorization.js +10 -0
  8. package/lib/esm/authorization.js.map +1 -0
  9. package/lib/esm/backend.d.ts +1 -0
  10. package/lib/esm/backend.js +3 -0
  11. package/lib/esm/backend.js.map +1 -0
  12. package/lib/esm/cdn-loader.d.ts +40 -0
  13. package/lib/esm/cdn-loader.js +200 -0
  14. package/lib/esm/cdn-loader.js.map +1 -0
  15. package/lib/esm/checks.d.ts +56 -0
  16. package/lib/esm/checks.js +288 -0
  17. package/lib/esm/checks.js.map +1 -0
  18. package/lib/esm/compile.d.ts +64 -0
  19. package/lib/esm/compile.js +99 -0
  20. package/lib/esm/compile.js.map +1 -0
  21. package/lib/esm/core/messages.d.ts +25 -0
  22. package/lib/esm/core/messages.js +76 -0
  23. package/lib/esm/core/messages.js.map +1 -0
  24. package/lib/esm/data/translation.json +8 -0
  25. package/lib/esm/discovery.d.ts +97 -0
  26. package/lib/esm/discovery.js +365 -0
  27. package/lib/esm/discovery.js.map +1 -0
  28. package/lib/esm/exchange.d.ts +100 -0
  29. package/lib/esm/exchange.js +223 -0
  30. package/lib/esm/exchange.js.map +1 -0
  31. package/lib/esm/export.d.ts +28 -0
  32. package/lib/esm/export.js +92 -0
  33. package/lib/esm/export.js.map +1 -0
  34. package/lib/esm/formats/csv.d.ts +8 -0
  35. package/lib/esm/formats/csv.js +397 -0
  36. package/lib/esm/formats/csv.js.map +1 -0
  37. package/lib/esm/formats/json.d.ts +30 -0
  38. package/lib/esm/formats/json.js +459 -0
  39. package/lib/esm/formats/json.js.map +1 -0
  40. package/lib/esm/formats/xliff.d.ts +12 -0
  41. package/lib/esm/formats/xliff.js +577 -0
  42. package/lib/esm/formats/xliff.js.map +1 -0
  43. package/lib/esm/import.d.ts +197 -0
  44. package/lib/esm/import.js +391 -0
  45. package/lib/esm/import.js.map +1 -0
  46. package/lib/esm/index.d.ts +42 -0
  47. package/lib/esm/index.js +34 -0
  48. package/lib/esm/index.js.map +1 -0
  49. package/lib/esm/key-sync-node.d.ts +29 -0
  50. package/lib/esm/key-sync-node.js +174 -0
  51. package/lib/esm/key-sync-node.js.map +1 -0
  52. package/lib/esm/key-sync.d.ts +46 -0
  53. package/lib/esm/key-sync.js +114 -0
  54. package/lib/esm/key-sync.js.map +1 -0
  55. package/lib/esm/key-version.d.ts +50 -0
  56. package/lib/esm/key-version.js +134 -0
  57. package/lib/esm/key-version.js.map +1 -0
  58. package/lib/esm/languages.d.ts +18 -0
  59. package/lib/esm/languages.js +74 -0
  60. package/lib/esm/languages.js.map +1 -0
  61. package/lib/esm/linked-discovery.d.ts +44 -0
  62. package/lib/esm/linked-discovery.js +267 -0
  63. package/lib/esm/linked-discovery.js.map +1 -0
  64. package/lib/esm/message-format.d.ts +41 -0
  65. package/lib/esm/message-format.js +133 -0
  66. package/lib/esm/message-format.js.map +1 -0
  67. package/lib/esm/mt.d.ts +111 -0
  68. package/lib/esm/mt.js +142 -0
  69. package/lib/esm/mt.js.map +1 -0
  70. package/lib/esm/ontologies/translation.d.ts +203 -0
  71. package/lib/esm/ontologies/translation.js +219 -0
  72. package/lib/esm/ontologies/translation.js.map +1 -0
  73. package/lib/esm/package.d.ts +4 -0
  74. package/lib/esm/package.js +11 -0
  75. package/lib/esm/package.js.map +1 -0
  76. package/lib/esm/react.d.ts +55 -0
  77. package/lib/esm/react.js +127 -0
  78. package/lib/esm/react.js.map +1 -0
  79. package/lib/esm/records.d.ts +151 -0
  80. package/lib/esm/records.js +2 -0
  81. package/lib/esm/records.js.map +1 -0
  82. package/lib/esm/release.d.ts +198 -0
  83. package/lib/esm/release.js +435 -0
  84. package/lib/esm/release.js.map +1 -0
  85. package/lib/esm/shape-catalog.d.ts +79 -0
  86. package/lib/esm/shape-catalog.js +118 -0
  87. package/lib/esm/shape-catalog.js.map +1 -0
  88. package/lib/esm/shapes/GlossaryTerm.d.ts +28 -0
  89. package/lib/esm/shapes/GlossaryTerm.js +94 -0
  90. package/lib/esm/shapes/GlossaryTerm.js.map +1 -0
  91. package/lib/esm/shapes/TranslationInventoryOrigin.d.ts +33 -0
  92. package/lib/esm/shapes/TranslationInventoryOrigin.js +209 -0
  93. package/lib/esm/shapes/TranslationInventoryOrigin.js.map +1 -0
  94. package/lib/esm/shapes/TranslationKey.d.ts +92 -0
  95. package/lib/esm/shapes/TranslationKey.js +194 -0
  96. package/lib/esm/shapes/TranslationKey.js.map +1 -0
  97. package/lib/esm/shapes/TranslationKeyVersion.d.ts +19 -0
  98. package/lib/esm/shapes/TranslationKeyVersion.js +125 -0
  99. package/lib/esm/shapes/TranslationKeyVersion.js.map +1 -0
  100. package/lib/esm/shapes/TranslationLanguage.d.ts +15 -0
  101. package/lib/esm/shapes/TranslationLanguage.js +102 -0
  102. package/lib/esm/shapes/TranslationLanguage.js.map +1 -0
  103. package/lib/esm/shapes/TranslationProvider.d.ts +409 -0
  104. package/lib/esm/shapes/TranslationProvider.js +1376 -0
  105. package/lib/esm/shapes/TranslationProvider.js.map +1 -0
  106. package/lib/esm/shapes/TranslationRelease.d.ts +36 -0
  107. package/lib/esm/shapes/TranslationRelease.js +149 -0
  108. package/lib/esm/shapes/TranslationRelease.js.map +1 -0
  109. package/lib/esm/shapes/TranslationRevision.d.ts +39 -0
  110. package/lib/esm/shapes/TranslationRevision.js +159 -0
  111. package/lib/esm/shapes/TranslationRevision.js.map +1 -0
  112. package/lib/esm/shapes/TranslationUnit.d.ts +26 -0
  113. package/lib/esm/shapes/TranslationUnit.js +111 -0
  114. package/lib/esm/shapes/TranslationUnit.js.map +1 -0
  115. package/package.json +134 -0
  116. package/src/archive.ts +894 -0
  117. package/src/authorization.ts +33 -0
  118. package/src/backend.ts +2 -0
  119. package/src/cdn-loader.ts +264 -0
  120. package/src/checks.ts +413 -0
  121. package/src/compile.ts +168 -0
  122. package/src/core/messages.ts +106 -0
  123. package/src/data/translation.json +8 -0
  124. package/src/discovery.ts +594 -0
  125. package/src/exchange.ts +428 -0
  126. package/src/export.ts +135 -0
  127. package/src/formats/csv.ts +459 -0
  128. package/src/formats/json.ts +587 -0
  129. package/src/formats/xliff.ts +708 -0
  130. package/src/import.ts +648 -0
  131. package/src/index.ts +207 -0
  132. package/src/key-sync-node.ts +269 -0
  133. package/src/key-sync.ts +168 -0
  134. package/src/key-version.ts +206 -0
  135. package/src/languages.ts +102 -0
  136. package/src/linked-discovery.ts +385 -0
  137. package/src/message-format.ts +214 -0
  138. package/src/mt.ts +248 -0
  139. package/src/ontologies/translation.ts +234 -0
  140. package/src/package.ts +19 -0
  141. package/src/react.tsx +250 -0
  142. package/src/records.ts +180 -0
  143. package/src/release.ts +726 -0
  144. package/src/shape-catalog.ts +198 -0
  145. package/src/shapes/GlossaryTerm.ts +61 -0
  146. package/src/shapes/TranslationInventoryOrigin.ts +131 -0
  147. package/src/shapes/TranslationKey.ts +174 -0
  148. package/src/shapes/TranslationKeyVersion.ts +77 -0
  149. package/src/shapes/TranslationLanguage.ts +51 -0
  150. package/src/shapes/TranslationProvider.ts +1755 -0
  151. package/src/shapes/TranslationRelease.ts +114 -0
  152. package/src/shapes/TranslationRevision.ts +105 -0
  153. package/src/shapes/TranslationUnit.ts +72 -0
@@ -0,0 +1,198 @@
1
+ import type { TranslationLanguageDefinition } from './languages.js';
2
+ import type { TranslationMessages } from './core/messages.js';
3
+ import { type TranslationBuildDeclaration } from './exchange.js';
4
+ import type { GlossaryTermRecord, TranslationEntryRecord } from './records.js';
5
+ import type { ExtractedTranslationKey } from './key-sync.js';
6
+ export interface TranslationBuildDescriptor {
7
+ schemaVersion: 2;
8
+ appId: string;
9
+ releaseId: string;
10
+ contractSetHash: string;
11
+ manifestUrl: string;
12
+ }
13
+ /** Serializable handoff from translation publication to an exact app build. */
14
+ export interface TranslationBuildPin {
15
+ schemaVersion: 1;
16
+ appId: string;
17
+ branchId: string;
18
+ buildId: string;
19
+ channel: 'preview' | 'production';
20
+ releaseId: string;
21
+ contractSetHash: string;
22
+ manifestHash: string;
23
+ manifestUrl: string;
24
+ /** Sequence baked into the fallback catalogs at build time. */
25
+ hotfixSequence: number;
26
+ catalogs: Record<string, TranslationCatalogObject>;
27
+ pinnedAt: string;
28
+ /** Which declaration source supplied the contract verifier for this build. */
29
+ inventorySource?: 'confirmed-inventory' | 'static-fallback';
30
+ }
31
+ export interface TranslationCatalogObject {
32
+ hash: string;
33
+ url: string;
34
+ bytes: number;
35
+ encoding?: 'gzip';
36
+ }
37
+ export interface TranslationCatalogPatchObject extends TranslationCatalogObject {
38
+ sequence: number;
39
+ }
40
+ export interface TranslationQualitySummary {
41
+ errors: number;
42
+ warnings: number;
43
+ rules: Record<string, number>;
44
+ }
45
+ export interface TranslationReleaseManifest {
46
+ languageResources?: TranslationLanguageDefinition[];
47
+ schemaVersion: 2;
48
+ releaseId: string;
49
+ contractSetHash: string;
50
+ hotfixSequence: number;
51
+ revisionWatermark?: string;
52
+ /** Compact release selection index: logical key → exact key-version IRI. */
53
+ keyVersions: Record<string, string>;
54
+ quality: Record<string, TranslationQualitySummary>;
55
+ languages: Record<string, {
56
+ base: TranslationCatalogObject;
57
+ patches: TranslationCatalogPatchObject[];
58
+ }>;
59
+ }
60
+ export interface TranslationCatalogPatch {
61
+ set: TranslationMessages;
62
+ remove?: string[];
63
+ }
64
+ export interface CompileReleaseInput {
65
+ languageResources?: TranslationLanguageDefinition[];
66
+ appId: string;
67
+ branchId: string;
68
+ buildId?: string;
69
+ releaseId?: string;
70
+ publicBase?: string;
71
+ channel?: 'preview' | 'production';
72
+ languages: string[];
73
+ defaultLanguage: string;
74
+ reviewedOnlyLanguages?: Iterable<string>;
75
+ previousRelease?: TranslationReleaseManifest;
76
+ revisionWatermark?: string;
77
+ glossary?: GlossaryTermRecord[];
78
+ allowQualityErrors?: boolean;
79
+ }
80
+ export interface CompiledTranslationRelease {
81
+ descriptor: TranslationBuildDescriptor;
82
+ manifest: TranslationReleaseManifest;
83
+ manifestHash: string;
84
+ immutableObjects: Array<{
85
+ kind: 'base' | 'patch';
86
+ hash: string;
87
+ body: Uint8Array;
88
+ }>;
89
+ }
90
+ export interface TranslationReleaseReuseCandidate {
91
+ releaseId: string;
92
+ manifestHash: string;
93
+ }
94
+ export interface CompiledTranslationHotfix {
95
+ key: string;
96
+ language: string;
97
+ sequence: number;
98
+ patch: TranslationCatalogPatch;
99
+ immutableObject: {
100
+ kind: 'patch';
101
+ hash: string;
102
+ body: Uint8Array;
103
+ };
104
+ manifest: TranslationReleaseManifest;
105
+ }
106
+ export interface CompiledTranslationCompaction {
107
+ language: string;
108
+ immutableObject: {
109
+ kind: 'base';
110
+ hash: string;
111
+ body: Uint8Array;
112
+ };
113
+ manifest: TranslationReleaseManifest;
114
+ }
115
+ export interface TranslationObjectInventoryEntry {
116
+ /** App-relative object name, for example `objects/catalog/<hash>.json`. */
117
+ name: string;
118
+ lastModified?: Date | string;
119
+ }
120
+ export interface TranslationCompactionThresholds {
121
+ maxPatches?: number;
122
+ maxPatchToBaseRatio?: number;
123
+ }
124
+ export declare const DEFAULT_TRANSLATION_MAX_PATCHES = 8;
125
+ export declare const DEFAULT_TRANSLATION_PATCH_TO_BASE_RATIO = 0.25;
126
+ /** Recursive canonical JSON used for every content-addressed release object. */
127
+ export declare function canonicalJson(value: unknown): string;
128
+ /** The one canonical contract-set hash used by release compile and build pinning. */
129
+ export declare function translationContractSetHash(entries: TranslationEntryRecord[]): Promise<string>;
130
+ /**
131
+ * Resolve keys extracted from one immutable build workspace to graph versions.
132
+ * Any missing/orphaned/conflicting/default-drifted key fails before publication.
133
+ */
134
+ export declare function buildSnapshotContractSetHash(entries: TranslationEntryRecord[], extracted: Array<ExtractedTranslationKey | TranslationBuildDeclaration>): Promise<string>;
135
+ export declare function assertTranslationContractSet(buildContractSetHash: string, releaseContractSetHash: string): void;
136
+ /** Verify immutable catalog bytes before a build adapter writes them. */
137
+ export declare function assertTranslationObjectHash(value: string | Uint8Array, expectedHash: string): Promise<void>;
138
+ export declare function createTranslationBuildPin(input: {
139
+ descriptor: TranslationBuildDescriptor;
140
+ manifest: TranslationReleaseManifest;
141
+ manifestHash: string;
142
+ branchId: string;
143
+ buildId: string;
144
+ channel: 'preview' | 'production';
145
+ pinnedAt?: string;
146
+ inventorySource?: 'confirmed-inventory' | 'static-fallback';
147
+ }): TranslationBuildPin;
148
+ export declare function decodeReleaseObject(body: Uint8Array): unknown;
149
+ export declare function applyCatalogPatches(base: TranslationMessages, patches: TranslationCatalogPatch[]): TranslationMessages;
150
+ export declare function releaseReferencesKeyVersion(manifest: TranslationReleaseManifest, keyVersionId: string): boolean;
151
+ export declare function keyForVersion(manifest: TranslationReleaseManifest, keyVersionId: string): string | undefined;
152
+ export declare function shouldCompactTranslationLanguage(lane: TranslationReleaseManifest['languages'][string], thresholds?: TranslationCompactionThresholds): boolean;
153
+ /**
154
+ * Replace one eligible patch chain with an equivalent immutable base. The
155
+ * release identity, contract set, and hotfix sequence deliberately do not
156
+ * change because compaction changes representation, not translation content.
157
+ */
158
+ export declare function compileTranslationCompaction(input: {
159
+ manifest: TranslationReleaseManifest;
160
+ language: string;
161
+ currentMessages: TranslationMessages;
162
+ force?: boolean;
163
+ thresholds?: TranslationCompactionThresholds;
164
+ }): Promise<CompiledTranslationCompaction | null>;
165
+ /** Every immutable object directly reachable from the supplied manifests. */
166
+ export declare function collectReferencedTranslationObjects(manifests: Iterable<TranslationReleaseManifest>): Set<string>;
167
+ /**
168
+ * Mark only old, content-addressed objects that are absent from every retained
169
+ * manifest. Unknown timestamps fail closed and remain retained.
170
+ */
171
+ export declare function selectPrunableTranslationObjects(input: {
172
+ objects: Iterable<TranslationObjectInventoryEntry>;
173
+ manifests: Iterable<TranslationReleaseManifest>;
174
+ now?: Date | number;
175
+ gracePeriodMs: number;
176
+ }): string[];
177
+ /**
178
+ * Create one content-addressed language patch and advance a compatible
179
+ * manifest. Returns null for an idempotent re-approval of the current value.
180
+ */
181
+ export declare function compileTranslationHotfix(input: {
182
+ manifest: TranslationReleaseManifest;
183
+ keyVersionId: string;
184
+ language: string;
185
+ text: string;
186
+ currentMessages: TranslationMessages;
187
+ }): Promise<CompiledTranslationHotfix | null>;
188
+ /**
189
+ * Compile one immutable schema-v2 release. The input entries are the captured
190
+ * graph snapshot; callers are responsible for supplying its revision watermark.
191
+ */
192
+ export declare function compileRelease(entries: TranslationEntryRecord[], input: CompileReleaseInput): Promise<CompiledTranslationRelease>;
193
+ /**
194
+ * Recompile content beneath existing release identities and reuse only an
195
+ * exact manifest match. Contract equality alone is insufficient because
196
+ * selected translations, language policy, quality, or delivery URLs may differ.
197
+ */
198
+ export declare function findReusableCompiledRelease(entries: TranslationEntryRecord[], input: Omit<CompileReleaseInput, 'releaseId' | 'buildId'>, candidates: TranslationReleaseReuseCandidate[]): Promise<CompiledTranslationRelease | null>;
@@ -0,0 +1,435 @@
1
+ import { runChecks } from './checks.js';
2
+ import { compileLanguage } from './compile.js';
3
+ import { classifyKeyVersion, sha256Hex } from './key-version.js';
4
+ import { isConfirmedBuildDeclaration, } from './exchange.js';
5
+ export const DEFAULT_TRANSLATION_MAX_PATCHES = 8;
6
+ export const DEFAULT_TRANSLATION_PATCH_TO_BASE_RATIO = 0.25;
7
+ const encoder = new TextEncoder();
8
+ const decoder = new TextDecoder();
9
+ /** Recursive canonical JSON used for every content-addressed release object. */
10
+ export function canonicalJson(value) {
11
+ if (value === null || typeof value !== 'object')
12
+ return JSON.stringify(value);
13
+ if (Array.isArray(value))
14
+ return `[${value.map(canonicalJson).join(',')}]`;
15
+ const record = value;
16
+ return `{${Object.keys(record)
17
+ .sort()
18
+ .map((key) => `${JSON.stringify(key)}:${canonicalJson(record[key])}`)
19
+ .join(',')}}`;
20
+ }
21
+ function translationContracts(entries) {
22
+ return entries
23
+ .filter((entry) => entry.kind === 'ui')
24
+ .sort((left, right) => left.key.localeCompare(right.key))
25
+ .map((entry) => {
26
+ var _a, _b, _c, _d;
27
+ return ({
28
+ key: entry.key,
29
+ versionId: (_b = (_a = entry.currentVersion) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : null,
30
+ contractHash: (_d = (_c = entry.currentVersion) === null || _c === void 0 ? void 0 : _c.contractHash) !== null && _d !== void 0 ? _d : null,
31
+ });
32
+ });
33
+ }
34
+ /** The one canonical contract-set hash used by release compile and build pinning. */
35
+ export async function translationContractSetHash(entries) {
36
+ return sha256Hex(canonicalJson(translationContracts(entries)));
37
+ }
38
+ /**
39
+ * Resolve keys extracted from one immutable build workspace to graph versions.
40
+ * Any missing/orphaned/conflicting/default-drifted key fails before publication.
41
+ */
42
+ export async function buildSnapshotContractSetHash(entries, extracted) {
43
+ var _a, _b;
44
+ const declarations = extracted.filter(isConfirmedBuildDeclaration);
45
+ const declarationsByKey = new Map();
46
+ for (const item of declarations) {
47
+ const values = (_a = declarationsByKey.get(item.key)) !== null && _a !== void 0 ? _a : [];
48
+ values.push(item);
49
+ declarationsByKey.set(item.key, values);
50
+ }
51
+ const selected = entries
52
+ .filter((entry) => entry.kind === 'ui')
53
+ .sort((left, right) => left.key.localeCompare(right.key));
54
+ const graphKeys = new Set(selected.map(({ key }) => key));
55
+ const missing = [...declarationsByKey.keys()]
56
+ .filter((key) => !graphKeys.has(key))
57
+ .sort();
58
+ const orphaned = selected
59
+ .map(({ key }) => key)
60
+ .filter((key) => !declarationsByKey.has(key))
61
+ .sort();
62
+ if (missing.length || orphaned.length) {
63
+ throw new Error(`Build translation contract differs from the release: ${missing.length ? `missing in graph [${missing.join(', ')}]` : ''}${missing.length && orphaned.length ? '; ' : ''}${orphaned.length ? `missing in build [${orphaned.join(', ')}]` : ''}.`);
64
+ }
65
+ for (const entry of selected) {
66
+ const current = entry.currentVersion;
67
+ if (!(current === null || current === void 0 ? void 0 : current.id)) {
68
+ throw new Error(`Translation key "${entry.key}" has no current contract version.`);
69
+ }
70
+ const contracts = ((_b = declarationsByKey.get(entry.key)) !== null && _b !== void 0 ? _b : []).map((declaration) => {
71
+ var _a, _b;
72
+ return ({
73
+ sourceText: declaration.sourceText,
74
+ // Legacy static extraction has no format. Preserve its shipped behavior
75
+ // by resolving against the current graph contract.
76
+ format: (_b = (_a = declaration.format) !== null && _a !== void 0 ? _a : current.format) !== null && _b !== void 0 ? _b : entry.format,
77
+ });
78
+ });
79
+ const distinct = new Map(contracts.map((contract) => [
80
+ canonicalJson([contract.sourceText, contract.format]),
81
+ contract,
82
+ ]));
83
+ if (distinct.size > 1) {
84
+ throw new Error(`Build translation key "${entry.key}" has conflicting source defaults or formats.`);
85
+ }
86
+ const extractedContract = [...distinct.values()][0];
87
+ const decision = classifyKeyVersion(current, extractedContract);
88
+ if (decision.action !== 'unchanged') {
89
+ throw new Error(`Build translation source for "${entry.key}" does not match its current key version (${decision.reason}).`);
90
+ }
91
+ }
92
+ return translationContractSetHash(selected);
93
+ }
94
+ export function assertTranslationContractSet(buildContractSetHash, releaseContractSetHash) {
95
+ if (buildContractSetHash !== releaseContractSetHash) {
96
+ throw new Error(`Build translation contract ${buildContractSetHash} does not match release contract ${releaseContractSetHash}.`);
97
+ }
98
+ }
99
+ /** Verify immutable catalog bytes before a build adapter writes them. */
100
+ export async function assertTranslationObjectHash(value, expectedHash) {
101
+ const text = typeof value === 'string' ? value : decoder.decode(value);
102
+ const actual = await sha256Hex(text);
103
+ if (actual !== expectedHash) {
104
+ throw new Error(`Translation object hash mismatch: expected ${expectedHash}, received ${actual}.`);
105
+ }
106
+ }
107
+ export function createTranslationBuildPin(input) {
108
+ var _a;
109
+ if (input.manifest.releaseId !== input.descriptor.releaseId ||
110
+ input.manifest.contractSetHash !== input.descriptor.contractSetHash) {
111
+ throw new Error('Translation release descriptor and manifest are incompatible.');
112
+ }
113
+ return {
114
+ schemaVersion: 1,
115
+ appId: input.descriptor.appId,
116
+ branchId: input.branchId,
117
+ buildId: input.buildId,
118
+ channel: input.channel,
119
+ releaseId: input.descriptor.releaseId,
120
+ contractSetHash: input.descriptor.contractSetHash,
121
+ manifestHash: input.manifestHash,
122
+ manifestUrl: input.descriptor.manifestUrl,
123
+ hotfixSequence: input.manifest.hotfixSequence,
124
+ catalogs: Object.fromEntries(Object.entries(input.manifest.languages).map(([language, lane]) => [
125
+ language,
126
+ lane.base,
127
+ ])),
128
+ pinnedAt: (_a = input.pinnedAt) !== null && _a !== void 0 ? _a : new Date().toISOString(),
129
+ ...(input.inventorySource
130
+ ? { inventorySource: input.inventorySource }
131
+ : {}),
132
+ };
133
+ }
134
+ export function decodeReleaseObject(body) {
135
+ return JSON.parse(decoder.decode(body));
136
+ }
137
+ export function applyCatalogPatches(base, patches) {
138
+ var _a;
139
+ const result = { ...base };
140
+ for (const patch of patches) {
141
+ for (const key of (_a = patch.remove) !== null && _a !== void 0 ? _a : [])
142
+ delete result[key];
143
+ Object.assign(result, patch.set);
144
+ }
145
+ return result;
146
+ }
147
+ export function releaseReferencesKeyVersion(manifest, keyVersionId) {
148
+ return Object.values(manifest.keyVersions).includes(keyVersionId);
149
+ }
150
+ export function keyForVersion(manifest, keyVersionId) {
151
+ var _a;
152
+ return (_a = Object.entries(manifest.keyVersions).find(([, version]) => version === keyVersionId)) === null || _a === void 0 ? void 0 : _a[0];
153
+ }
154
+ export function shouldCompactTranslationLanguage(lane, thresholds = {}) {
155
+ var _a, _b;
156
+ const maxPatches = (_a = thresholds.maxPatches) !== null && _a !== void 0 ? _a : DEFAULT_TRANSLATION_MAX_PATCHES;
157
+ const maxPatchToBaseRatio = (_b = thresholds.maxPatchToBaseRatio) !== null && _b !== void 0 ? _b : DEFAULT_TRANSLATION_PATCH_TO_BASE_RATIO;
158
+ if (lane.patches.length > maxPatches)
159
+ return true;
160
+ if (lane.base.bytes <= 0)
161
+ return lane.patches.length > 0;
162
+ const patchBytes = lane.patches.reduce((total, patch) => total + patch.bytes, 0);
163
+ return patchBytes > lane.base.bytes * maxPatchToBaseRatio;
164
+ }
165
+ function publicBaseFromObjectUrl(url) {
166
+ const marker = '/objects/';
167
+ const index = url.indexOf(marker);
168
+ return index < 0 ? undefined : url.slice(0, index);
169
+ }
170
+ /**
171
+ * Replace one eligible patch chain with an equivalent immutable base. The
172
+ * release identity, contract set, and hotfix sequence deliberately do not
173
+ * change because compaction changes representation, not translation content.
174
+ */
175
+ export async function compileTranslationCompaction(input) {
176
+ const lane = input.manifest.languages[input.language];
177
+ if (!lane) {
178
+ throw new Error(`Release ${input.manifest.releaseId} does not publish ${input.language}.`);
179
+ }
180
+ if (!input.force &&
181
+ !shouldCompactTranslationLanguage(lane, input.thresholds)) {
182
+ return null;
183
+ }
184
+ if (lane.patches.length === 0)
185
+ return null;
186
+ const body = encoder.encode(canonicalJson(input.currentMessages));
187
+ const hash = await sha256Hex(decoder.decode(body));
188
+ const base = {
189
+ hash,
190
+ url: objectUrl(publicBaseFromObjectUrl(lane.base.url), `objects/catalog/${hash}.json`),
191
+ bytes: body.byteLength,
192
+ };
193
+ return {
194
+ language: input.language,
195
+ immutableObject: { kind: 'base', hash, body },
196
+ manifest: {
197
+ ...input.manifest,
198
+ languages: {
199
+ ...input.manifest.languages,
200
+ [input.language]: {
201
+ base,
202
+ patches: [],
203
+ },
204
+ },
205
+ },
206
+ };
207
+ }
208
+ function objectNameFromUrl(url, fallback) {
209
+ const clean = url.split(/[?#]/, 1)[0].replace(/^\/+/, '');
210
+ const marker = 'objects/';
211
+ const index = clean.indexOf(marker);
212
+ return index >= 0 ? clean.slice(index) : fallback;
213
+ }
214
+ /** Every immutable object directly reachable from the supplied manifests. */
215
+ export function collectReferencedTranslationObjects(manifests) {
216
+ const referenced = new Set();
217
+ for (const manifest of manifests) {
218
+ for (const lane of Object.values(manifest.languages)) {
219
+ referenced.add(objectNameFromUrl(lane.base.url, `objects/catalog/${lane.base.hash}.json${lane.base.encoding === 'gzip' ? '.gz' : ''}`));
220
+ for (const patch of lane.patches) {
221
+ referenced.add(objectNameFromUrl(patch.url, `objects/patch/${patch.hash}.json${patch.encoding === 'gzip' ? '.gz' : ''}`));
222
+ }
223
+ }
224
+ }
225
+ return referenced;
226
+ }
227
+ /**
228
+ * Mark only old, content-addressed objects that are absent from every retained
229
+ * manifest. Unknown timestamps fail closed and remain retained.
230
+ */
231
+ export function selectPrunableTranslationObjects(input) {
232
+ var _a;
233
+ if (!Number.isFinite(input.gracePeriodMs) || input.gracePeriodMs < 0) {
234
+ throw new Error('gracePeriodMs must be a non-negative finite number.');
235
+ }
236
+ const now = input.now instanceof Date ? input.now.getTime() : (_a = input.now) !== null && _a !== void 0 ? _a : Date.now();
237
+ const referenced = collectReferencedTranslationObjects(input.manifests);
238
+ const candidates = new Set();
239
+ for (const object of input.objects) {
240
+ const name = object.name.replace(/^\/+/, '');
241
+ if (!/^objects\/(?:catalog|patch)\/[^/]+\.json(?:\.gz)?$/.test(name) ||
242
+ referenced.has(name) ||
243
+ !object.lastModified) {
244
+ continue;
245
+ }
246
+ const modifiedAt = object.lastModified instanceof Date
247
+ ? object.lastModified.getTime()
248
+ : new Date(object.lastModified).getTime();
249
+ if (Number.isFinite(modifiedAt) &&
250
+ now - modifiedAt >= input.gracePeriodMs) {
251
+ candidates.add(name);
252
+ }
253
+ }
254
+ return [...candidates].sort();
255
+ }
256
+ /**
257
+ * Create one content-addressed language patch and advance a compatible
258
+ * manifest. Returns null for an idempotent re-approval of the current value.
259
+ */
260
+ export async function compileTranslationHotfix(input) {
261
+ const key = keyForVersion(input.manifest, input.keyVersionId);
262
+ if (!key) {
263
+ throw new Error(`Release ${input.manifest.releaseId} does not reference key version ${input.keyVersionId}.`);
264
+ }
265
+ const lane = input.manifest.languages[input.language];
266
+ if (!lane) {
267
+ throw new Error(`Release ${input.manifest.releaseId} does not publish ${input.language}.`);
268
+ }
269
+ const current = input.currentMessages[key];
270
+ const next = typeof current === 'object' && (current === null || current === void 0 ? void 0 : current.format) === 'icu'
271
+ ? { message: input.text, format: 'icu' }
272
+ : input.text;
273
+ if (canonicalJson(current) === canonicalJson(next))
274
+ return null;
275
+ const patch = { set: { [key]: next } };
276
+ const body = encoder.encode(canonicalJson(patch));
277
+ const hash = await sha256Hex(decoder.decode(body));
278
+ const sequence = input.manifest.hotfixSequence + 1;
279
+ const publicBase = publicBaseFromObjectUrl(lane.base.url);
280
+ const patchObject = {
281
+ hash,
282
+ url: objectUrl(publicBase, `objects/patch/${hash}.json`),
283
+ bytes: body.byteLength,
284
+ sequence,
285
+ };
286
+ return {
287
+ key,
288
+ language: input.language,
289
+ sequence,
290
+ patch,
291
+ immutableObject: { kind: 'patch', hash, body },
292
+ manifest: {
293
+ ...input.manifest,
294
+ hotfixSequence: sequence,
295
+ languages: {
296
+ ...input.manifest.languages,
297
+ [input.language]: {
298
+ ...lane,
299
+ patches: [...lane.patches, patchObject],
300
+ },
301
+ },
302
+ },
303
+ };
304
+ }
305
+ function qualitySummary(findings) {
306
+ var _a;
307
+ const rules = {};
308
+ let errors = 0;
309
+ let warnings = 0;
310
+ for (const finding of findings) {
311
+ finding.severity === 'error' ? errors++ : warnings++;
312
+ rules[finding.rule] = ((_a = rules[finding.rule]) !== null && _a !== void 0 ? _a : 0) + 1;
313
+ }
314
+ return { errors, warnings, rules };
315
+ }
316
+ function objectUrl(publicBase, path) {
317
+ const base = publicBase === null || publicBase === void 0 ? void 0 : publicBase.replace(/\/+$/, '');
318
+ return base ? `${base}/${path}` : path;
319
+ }
320
+ /**
321
+ * Compile one immutable schema-v2 release. The input entries are the captured
322
+ * graph snapshot; callers are responsible for supplying its revision watermark.
323
+ */
324
+ export async function compileRelease(entries, input) {
325
+ var _a, _b, _c, _d;
326
+ const reviewedOnly = new Set((_a = input.reviewedOnlyLanguages) !== null && _a !== void 0 ? _a : []);
327
+ const selected = entries
328
+ .filter((entry) => entry.kind === 'ui')
329
+ .sort((left, right) => left.key.localeCompare(right.key));
330
+ const missingVersion = selected.find((entry) => { var _a; return !((_a = entry.currentVersion) === null || _a === void 0 ? void 0 : _a.id); });
331
+ if (missingVersion) {
332
+ throw new Error(`Translation key "${missingVersion.key}" has no current contract version.`);
333
+ }
334
+ const keyVersions = Object.fromEntries(selected.map((entry) => [entry.key, entry.currentVersion.id]));
335
+ const contractSetHash = await translationContractSetHash(selected);
336
+ const releaseSeed = canonicalJson([
337
+ input.appId,
338
+ input.branchId,
339
+ (_b = input.buildId) !== null && _b !== void 0 ? _b : '',
340
+ contractSetHash,
341
+ ]);
342
+ const releaseId = ((_c = input.releaseId) === null || _c === void 0 ? void 0 : _c.trim()) ||
343
+ `release-${(await sha256Hex(releaseSeed)).slice(0, 24)}`;
344
+ const immutableObjects = [];
345
+ const languages = {};
346
+ const quality = {};
347
+ for (const language of [...new Set(input.languages)].sort()) {
348
+ const payload = compileLanguage(selected, language, {
349
+ defaultLanguage: input.defaultLanguage,
350
+ reviewedOnly: reviewedOnly.has(language),
351
+ languageResources: input.languageResources,
352
+ });
353
+ const body = encoder.encode(canonicalJson(payload));
354
+ const hash = await sha256Hex(decoder.decode(body));
355
+ immutableObjects.push({ kind: 'base', hash, body });
356
+ languages[language] = {
357
+ base: {
358
+ hash,
359
+ url: objectUrl(input.publicBase, `objects/catalog/${hash}.json`),
360
+ bytes: body.byteLength,
361
+ },
362
+ patches: [],
363
+ };
364
+ const checkedEntries = selected.map((entry) => {
365
+ var _a, _b, _c;
366
+ const message = payload[entry.key];
367
+ const text = typeof message === 'string' ? message : (_a = message === null || message === void 0 ? void 0 : message.message) !== null && _a !== void 0 ? _a : '';
368
+ return {
369
+ ...entry,
370
+ units: {
371
+ ...entry.units,
372
+ [language]: {
373
+ language,
374
+ text,
375
+ state: (_c = (_b = entry.units[language]) === null || _b === void 0 ? void 0 : _b.state) !== null && _c !== void 0 ? _c : 'untranslated',
376
+ },
377
+ },
378
+ };
379
+ });
380
+ quality[language] = qualitySummary(language === input.defaultLanguage
381
+ ? []
382
+ : runChecks(checkedEntries, language, (_d = input.glossary) !== null && _d !== void 0 ? _d : []));
383
+ }
384
+ const errorCount = Object.values(quality).reduce((total, summary) => total + summary.errors, 0);
385
+ if (input.channel === 'production' &&
386
+ errorCount > 0 &&
387
+ !input.allowQualityErrors) {
388
+ throw new Error(`Production translation release blocked by ${errorCount} quality error${errorCount === 1 ? '' : 's'}.`);
389
+ }
390
+ const manifest = {
391
+ schemaVersion: 2,
392
+ releaseId,
393
+ contractSetHash,
394
+ hotfixSequence: 0,
395
+ ...(input.revisionWatermark
396
+ ? { revisionWatermark: input.revisionWatermark }
397
+ : {}),
398
+ keyVersions,
399
+ quality,
400
+ languages,
401
+ ...(input.languageResources
402
+ ? { languageResources: input.languageResources }
403
+ : {}),
404
+ };
405
+ const manifestHash = await sha256Hex(canonicalJson(manifest));
406
+ return {
407
+ descriptor: {
408
+ schemaVersion: 2,
409
+ appId: input.appId,
410
+ releaseId,
411
+ contractSetHash,
412
+ manifestUrl: objectUrl(input.publicBase, `releases/${releaseId}/manifest.json`),
413
+ },
414
+ manifest,
415
+ manifestHash,
416
+ immutableObjects,
417
+ };
418
+ }
419
+ /**
420
+ * Recompile content beneath existing release identities and reuse only an
421
+ * exact manifest match. Contract equality alone is insufficient because
422
+ * selected translations, language policy, quality, or delivery URLs may differ.
423
+ */
424
+ export async function findReusableCompiledRelease(entries, input, candidates) {
425
+ for (const candidate of candidates) {
426
+ const compiled = await compileRelease(entries, {
427
+ ...input,
428
+ releaseId: candidate.releaseId,
429
+ });
430
+ if (compiled.manifestHash === candidate.manifestHash)
431
+ return compiled;
432
+ }
433
+ return null;
434
+ }
435
+ //# sourceMappingURL=release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/release.ts"],"names":[],"mappings":"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"}