@_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,365 @@
1
+ const KIND_ORDER = {
2
+ ui: 0,
3
+ semantic: 1,
4
+ content: 2,
5
+ };
6
+ function requiredString(value, label) {
7
+ if (typeof value !== 'string' || !value.trim()) {
8
+ throw new Error(`${label} is required.`);
9
+ }
10
+ return value.trim();
11
+ }
12
+ function optionalString(value, label) {
13
+ if (value === undefined)
14
+ return undefined;
15
+ if (typeof value !== 'string' || !value.trim()) {
16
+ throw new Error(`${label} must be a non-empty string when supplied.`);
17
+ }
18
+ return value.trim();
19
+ }
20
+ function declarationKind(value, label, fallback = 'ui') {
21
+ const candidate = value !== null && value !== void 0 ? value : fallback;
22
+ if (candidate !== 'ui' &&
23
+ candidate !== 'semantic' &&
24
+ candidate !== 'content') {
25
+ throw new Error(`${label} must be "ui", "semantic", or "content".`);
26
+ }
27
+ return candidate;
28
+ }
29
+ function messageFormat(value, label, fallback = 'simple') {
30
+ const candidate = value !== null && value !== void 0 ? value : fallback;
31
+ if (candidate !== 'simple' && candidate !== 'icu') {
32
+ throw new Error(`${label} must be "simple" or "icu".`);
33
+ }
34
+ return candidate;
35
+ }
36
+ function object(value, label) {
37
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
38
+ throw new Error(`${label} must be an object.`);
39
+ }
40
+ return value;
41
+ }
42
+ function normalizeManifestEntry(value, index) {
43
+ const entry = object(value, `declarations[${index}]`);
44
+ const kind = declarationKind(entry.kind, `declarations[${index}].kind`);
45
+ const nodeIri = optionalString(entry.nodeIri, `declarations[${index}].nodeIri`);
46
+ const propertyIri = optionalString(entry.propertyIri, `declarations[${index}].propertyIri`);
47
+ if (kind === 'content' && (!nodeIri || !propertyIri)) {
48
+ throw new Error(`declarations[${index}] content entries require nodeIri and propertyIri.`);
49
+ }
50
+ if (typeof entry.sourceText !== 'string') {
51
+ throw new Error(`declarations[${index}].sourceText must be a string.`);
52
+ }
53
+ return {
54
+ key: requiredString(entry.key, `declarations[${index}].key`),
55
+ sourceText: entry.sourceText,
56
+ kind,
57
+ format: messageFormat(entry.format, `declarations[${index}].format`),
58
+ ...(optionalString(entry.namespace, `declarations[${index}].namespace`)
59
+ ? {
60
+ namespace: optionalString(entry.namespace, `declarations[${index}].namespace`),
61
+ }
62
+ : {}),
63
+ ...(optionalString(entry.description, `declarations[${index}].description`)
64
+ ? {
65
+ description: optionalString(entry.description, `declarations[${index}].description`),
66
+ }
67
+ : {}),
68
+ ...(optionalString(entry.ownerIri, `declarations[${index}].ownerIri`)
69
+ ? {
70
+ ownerIri: optionalString(entry.ownerIri, `declarations[${index}].ownerIri`),
71
+ }
72
+ : {}),
73
+ ...(optionalString(entry.shapeIri, `declarations[${index}].shapeIri`)
74
+ ? {
75
+ shapeIri: optionalString(entry.shapeIri, `declarations[${index}].shapeIri`),
76
+ }
77
+ : {}),
78
+ ...(propertyIri ? { propertyIri } : {}),
79
+ ...(nodeIri ? { nodeIri } : {}),
80
+ };
81
+ }
82
+ /** Parse the portable v1 manifest used to declare dynamic translation keys. */
83
+ export function parseTranslationDiscoveryManifest(value) {
84
+ const manifest = object(value, 'manifest');
85
+ if (manifest.schemaVersion !== 1) {
86
+ throw new Error('Translation discovery manifest schemaVersion must be 1.');
87
+ }
88
+ if (!Array.isArray(manifest.declarations)) {
89
+ throw new Error('Translation discovery manifest declarations must be an array.');
90
+ }
91
+ return {
92
+ schemaVersion: 1,
93
+ sourceId: requiredString(manifest.sourceId, 'manifest.sourceId'),
94
+ declarations: manifest.declarations.map(normalizeManifestEntry),
95
+ };
96
+ }
97
+ /** Turn a portable manifest into an authoritative discovery source. */
98
+ export function manifestTranslationDiscoverySource(value) {
99
+ const manifest = parseTranslationDiscoveryManifest(value);
100
+ return {
101
+ name: `manifest:${manifest.sourceId}`,
102
+ async *discover() {
103
+ var _a, _b;
104
+ for (const entry of manifest.declarations) {
105
+ yield {
106
+ schemaVersion: 1,
107
+ key: entry.key,
108
+ sourceText: entry.sourceText,
109
+ kind: (_a = entry.kind) !== null && _a !== void 0 ? _a : 'ui',
110
+ format: (_b = entry.format) !== null && _b !== void 0 ? _b : 'simple',
111
+ ...(entry.namespace ? { namespace: entry.namespace } : {}),
112
+ ...(entry.description ? { description: entry.description } : {}),
113
+ provenance: {
114
+ source: 'manifest',
115
+ sourceId: manifest.sourceId,
116
+ authoritative: true,
117
+ ...(entry.ownerIri ? { ownerIri: entry.ownerIri } : {}),
118
+ ...(entry.shapeIri ? { shapeIri: entry.shapeIri } : {}),
119
+ ...(entry.propertyIri ? { propertyIri: entry.propertyIri } : {}),
120
+ ...(entry.nodeIri ? { nodeIri: entry.nodeIri } : {}),
121
+ },
122
+ };
123
+ }
124
+ },
125
+ };
126
+ }
127
+ function normalizeDeclaration(declaration) {
128
+ if ((declaration === null || declaration === void 0 ? void 0 : declaration.schemaVersion) !== 1) {
129
+ throw new Error('Translation declaration schemaVersion must be 1.');
130
+ }
131
+ const kind = declarationKind(declaration.kind, 'declaration.kind');
132
+ const provenance = object(declaration.provenance, 'declaration.provenance');
133
+ const nodeIri = optionalString(provenance.nodeIri, 'provenance.nodeIri');
134
+ const propertyIri = optionalString(provenance.propertyIri, 'provenance.propertyIri');
135
+ if (kind === 'content' && (!nodeIri || !propertyIri)) {
136
+ throw new Error('Content translation declarations require provenance.nodeIri and provenance.propertyIri.');
137
+ }
138
+ if (typeof declaration.sourceText !== 'string') {
139
+ throw new Error('declaration.sourceText must be a string.');
140
+ }
141
+ const source = provenance.source;
142
+ if (source !== 'code' &&
143
+ source !== 'manifest' &&
144
+ source !== 'package' &&
145
+ source !== 'linked' &&
146
+ source !== 'import' &&
147
+ source !== 'runtime') {
148
+ throw new Error('declaration.provenance.source is invalid.');
149
+ }
150
+ if (typeof provenance.authoritative !== 'boolean') {
151
+ throw new Error('declaration.provenance.authoritative must be boolean.');
152
+ }
153
+ return {
154
+ schemaVersion: 1,
155
+ key: requiredString(declaration.key, 'declaration.key'),
156
+ sourceText: declaration.sourceText,
157
+ kind,
158
+ format: messageFormat(declaration.format, 'declaration.format'),
159
+ ...(optionalString(declaration.namespace, 'declaration.namespace')
160
+ ? { namespace: declaration.namespace.trim() }
161
+ : {}),
162
+ ...(optionalString(declaration.description, 'declaration.description')
163
+ ? { description: declaration.description.trim() }
164
+ : {}),
165
+ provenance: {
166
+ source,
167
+ sourceId: requiredString(provenance.sourceId, 'provenance.sourceId'),
168
+ authoritative: provenance.authoritative,
169
+ ...(optionalString(provenance.file, 'provenance.file')
170
+ ? { file: provenance.file.trim() }
171
+ : {}),
172
+ ...(provenance.line === undefined
173
+ ? {}
174
+ : Number.isSafeInteger(provenance.line) && provenance.line > 0
175
+ ? { line: provenance.line }
176
+ : (() => {
177
+ throw new Error('provenance.line must be a positive integer.');
178
+ })()),
179
+ ...(optionalString(provenance.ownerIri, 'provenance.ownerIri')
180
+ ? { ownerIri: provenance.ownerIri.trim() }
181
+ : {}),
182
+ ...(optionalString(provenance.shapeIri, 'provenance.shapeIri')
183
+ ? { shapeIri: provenance.shapeIri.trim() }
184
+ : {}),
185
+ ...(propertyIri ? { propertyIri } : {}),
186
+ ...(nodeIri ? { nodeIri } : {}),
187
+ ...(optionalString(provenance.fromPackage, 'provenance.fromPackage')
188
+ ? { fromPackage: provenance.fromPackage.trim() }
189
+ : {}),
190
+ ...(optionalString(provenance.targetClass, 'provenance.targetClass')
191
+ ? { targetClass: provenance.targetClass.trim() }
192
+ : {}),
193
+ },
194
+ };
195
+ }
196
+ /** Stable identity: UI/semantic by namespace+key; content by node+field IRI. */
197
+ export function translationDeclarationIdentity(appId, declaration) {
198
+ var _a;
199
+ const normalizedAppId = requiredString(appId, 'appId');
200
+ if (declaration.kind === 'content') {
201
+ return `content:${JSON.stringify([
202
+ normalizedAppId,
203
+ declaration.provenance.nodeIri,
204
+ declaration.provenance.propertyIri,
205
+ ])}`;
206
+ }
207
+ return `message:${JSON.stringify([
208
+ normalizedAppId,
209
+ (_a = declaration.namespace) !== null && _a !== void 0 ? _a : '',
210
+ declaration.key,
211
+ ])}`;
212
+ }
213
+ function canonicalProvenance(provenance) {
214
+ var _a, _b, _c, _d, _e, _f, _g, _h;
215
+ return JSON.stringify([
216
+ provenance.source,
217
+ provenance.sourceId,
218
+ provenance.authoritative,
219
+ (_a = provenance.file) !== null && _a !== void 0 ? _a : '',
220
+ (_b = provenance.line) !== null && _b !== void 0 ? _b : 0,
221
+ (_c = provenance.ownerIri) !== null && _c !== void 0 ? _c : '',
222
+ (_d = provenance.shapeIri) !== null && _d !== void 0 ? _d : '',
223
+ (_e = provenance.propertyIri) !== null && _e !== void 0 ? _e : '',
224
+ (_f = provenance.nodeIri) !== null && _f !== void 0 ? _f : '',
225
+ (_g = provenance.fromPackage) !== null && _g !== void 0 ? _g : '',
226
+ (_h = provenance.targetClass) !== null && _h !== void 0 ? _h : '',
227
+ ]);
228
+ }
229
+ function sortDeclarations(declarations) {
230
+ return [...declarations].sort((left, right) => {
231
+ const source = canonicalProvenance(left.provenance).localeCompare(canonicalProvenance(right.provenance));
232
+ if (source !== 0)
233
+ return source;
234
+ return JSON.stringify([
235
+ left.sourceText,
236
+ left.format,
237
+ left.kind,
238
+ left.key,
239
+ ]).localeCompare(JSON.stringify([
240
+ right.sourceText,
241
+ right.format,
242
+ right.kind,
243
+ right.key,
244
+ ]));
245
+ });
246
+ }
247
+ function uniqueOrigins(declarations) {
248
+ return [
249
+ ...new Map(sortDeclarations(declarations).map(({ provenance }) => [
250
+ canonicalProvenance(provenance),
251
+ provenance,
252
+ ])).values(),
253
+ ];
254
+ }
255
+ function itemFromDeclarations(appId, identity, declarations) {
256
+ var _a;
257
+ const ordered = sortDeclarations(declarations);
258
+ const authoritative = ordered.filter(({ provenance }) => provenance.authoritative);
259
+ const contracts = new Set(authoritative.map(({ sourceText, format }) => JSON.stringify([sourceText, format])));
260
+ const preferred = (_a = authoritative[0]) !== null && _a !== void 0 ? _a : ordered[0];
261
+ const conflict = contracts.size > 1;
262
+ const status = conflict
263
+ ? 'conflict'
264
+ : authoritative.length
265
+ ? 'confirmed'
266
+ : 'pending';
267
+ const kind = ordered.reduce((current, declaration) => KIND_ORDER[declaration.kind] > KIND_ORDER[current]
268
+ ? declaration.kind
269
+ : current, preferred.kind);
270
+ const item = {
271
+ identity,
272
+ appId,
273
+ key: preferred.key,
274
+ sourceText: preferred.sourceText,
275
+ kind,
276
+ format: preferred.format,
277
+ status,
278
+ authoritative: authoritative.length > 0,
279
+ exchangeEligible: status === 'confirmed' && kind !== 'content',
280
+ buildEligible: status === 'confirmed' && kind !== 'content',
281
+ origins: uniqueOrigins(ordered),
282
+ ...(preferred.namespace ? { namespace: preferred.namespace } : {}),
283
+ ...(preferred.description ? { description: preferred.description } : {}),
284
+ };
285
+ return {
286
+ item,
287
+ ...(conflict ? { conflict: { identity, declarations: ordered } } : {}),
288
+ };
289
+ }
290
+ function buildDeclaration(item) {
291
+ const first = item.origins[0];
292
+ return {
293
+ key: item.key,
294
+ sourceText: item.sourceText,
295
+ format: item.format,
296
+ kind: item.kind,
297
+ status: 'confirmed',
298
+ authoritative: true,
299
+ ...(item.namespace ? { namespace: item.namespace } : {}),
300
+ ...((first === null || first === void 0 ? void 0 : first.file) ? { file: first.file } : {}),
301
+ ...((first === null || first === void 0 ? void 0 : first.line) ? { line: first.line } : {}),
302
+ };
303
+ }
304
+ /** Build-facing confirmed subset of a persisted or freshly discovered inventory. */
305
+ export function translationBuildDeclarationsFromInventory(items) {
306
+ return [...items]
307
+ .filter(({ buildEligible, status }) => buildEligible && status === 'confirmed')
308
+ .map(buildDeclaration)
309
+ .sort((left, right) => {
310
+ var _a, _b;
311
+ return JSON.stringify([(_a = left.namespace) !== null && _a !== void 0 ? _a : '', left.key]).localeCompare(JSON.stringify([(_b = right.namespace) !== null && _b !== void 0 ? _b : '', right.key]));
312
+ });
313
+ }
314
+ /**
315
+ * Discover and deterministically merge every source. This function is pure
316
+ * with respect to storage: hosts decide how snapshots and lifecycle changes
317
+ * are persisted.
318
+ */
319
+ export async function discoverTranslationInventory(sources, context, options = {}) {
320
+ var _a, _b, _c;
321
+ const appId = requiredString(context.appId, 'context.appId');
322
+ const byIdentity = new Map();
323
+ const orderedSources = [...sources].sort((left, right) => left.name.localeCompare(right.name));
324
+ for (const source of orderedSources) {
325
+ for await (const raw of source.discover({ ...context, appId })) {
326
+ const declaration = normalizeDeclaration(raw);
327
+ const identity = translationDeclarationIdentity(appId, declaration);
328
+ const values = (_a = byIdentity.get(identity)) !== null && _a !== void 0 ? _a : [];
329
+ values.push(declaration);
330
+ byIdentity.set(identity, values);
331
+ }
332
+ }
333
+ const items = [];
334
+ const conflicts = [];
335
+ for (const identity of [...byIdentity.keys()].sort()) {
336
+ const merged = itemFromDeclarations(appId, identity, byIdentity.get(identity));
337
+ items.push(merged.item);
338
+ if (merged.conflict)
339
+ conflicts.push(merged.conflict);
340
+ }
341
+ const currentIdentities = new Set(byIdentity.keys());
342
+ for (const previous of (_c = (_b = options.previous) === null || _b === void 0 ? void 0 : _b.items) !== null && _c !== void 0 ? _c : []) {
343
+ if (previous.appId !== appId ||
344
+ currentIdentities.has(previous.identity) ||
345
+ previous.status === 'pending') {
346
+ continue;
347
+ }
348
+ items.push({
349
+ ...previous,
350
+ status: 'orphaned',
351
+ buildEligible: false,
352
+ exchangeEligible: false,
353
+ });
354
+ }
355
+ items.sort((left, right) => left.identity.localeCompare(right.identity));
356
+ return {
357
+ schemaVersion: 1,
358
+ appId,
359
+ ...(context.branchId ? { branchId: context.branchId } : {}),
360
+ items,
361
+ conflicts,
362
+ buildDeclarations: translationBuildDeclarationsFromInventory(items),
363
+ };
364
+ }
365
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import type { MessageFormat } from './core/messages.js';
2
+ import type { TranslationState } from './records.js';
3
+ export type TranslationExchangeKind = 'ui' | 'semantic';
4
+ export type TranslationDeclarationKind = TranslationExchangeKind | 'content';
5
+ export type TranslationDeclarationStatus = 'confirmed' | 'pending';
6
+ /**
7
+ * The build-facing subset of the later multi-source discovery contract.
8
+ * Static extraction omits the optional fields and retains its existing
9
+ * confirmed/simple behavior.
10
+ */
11
+ export interface TranslationBuildDeclaration {
12
+ key: string;
13
+ sourceText: string;
14
+ format?: MessageFormat;
15
+ kind?: TranslationDeclarationKind;
16
+ status?: TranslationDeclarationStatus;
17
+ authoritative?: boolean;
18
+ namespace?: string;
19
+ file?: string;
20
+ line?: number;
21
+ }
22
+ export interface TranslationExchangeValue {
23
+ text: string;
24
+ state?: TranslationState;
25
+ note?: string;
26
+ }
27
+ export interface TranslationExchangeEntry {
28
+ key: string;
29
+ namespace?: string;
30
+ kind: TranslationExchangeKind;
31
+ sourceText: string;
32
+ keyVersionId: string;
33
+ sourceHash: string;
34
+ contractHash: string;
35
+ argumentSignature: string;
36
+ description?: string;
37
+ format: MessageFormat;
38
+ translations: Record<string, TranslationExchangeValue>;
39
+ }
40
+ export interface TranslationExchangeDocument {
41
+ schemaVersion: 1;
42
+ appId?: string;
43
+ branchId?: string;
44
+ sourceLanguage: string;
45
+ targetLanguages: string[];
46
+ exportedAt?: string;
47
+ revisionWatermark?: string;
48
+ contractSetHash?: string;
49
+ entries: TranslationExchangeEntry[];
50
+ }
51
+ export type ParsedTranslationExchangeEntry = Omit<TranslationExchangeEntry, 'sourceText' | 'keyVersionId' | 'sourceHash' | 'contractHash' | 'argumentSignature'> & {
52
+ sourceText?: string;
53
+ keyVersionId?: string;
54
+ sourceHash?: string;
55
+ contractHash?: string;
56
+ argumentSignature?: string;
57
+ };
58
+ export interface ParsedTranslationExchangeDocument extends Omit<TranslationExchangeDocument, 'entries'> {
59
+ entries: ParsedTranslationExchangeEntry[];
60
+ }
61
+ export type TranslationFormat = 'xliff-1.2' | 'xliff-2.0' | 'csv' | 'json';
62
+ export interface SerializedTranslationDocument {
63
+ fileName: string;
64
+ mediaType: string;
65
+ body: Uint8Array;
66
+ }
67
+ export interface TranslationFormatAdapter {
68
+ readonly format: TranslationFormat;
69
+ sniff(input: Uint8Array, fileName?: string): boolean;
70
+ parse(input: Uint8Array, options?: unknown): Promise<ParsedTranslationExchangeDocument>;
71
+ serialize(document: TranslationExchangeDocument, options?: unknown): Promise<SerializedTranslationDocument>;
72
+ }
73
+ export type TranslationImportDisposition = 'import' | 'carry-forward' | 'unverified-source' | 'conflict' | 'skip';
74
+ export interface TranslationImportDryRunEntry {
75
+ key: string;
76
+ language: string;
77
+ disposition: TranslationImportDisposition;
78
+ expectedKeyVersionId?: string;
79
+ expectedUnitContentHash?: string;
80
+ }
81
+ export interface TranslationImportDryRun {
82
+ sessionId: string;
83
+ documentHash: string;
84
+ revisionWatermark: string;
85
+ expiresAt: string;
86
+ entries: TranslationImportDryRunEntry[];
87
+ }
88
+ /**
89
+ * Normalize adapter output without inventing evidence missing from a foreign
90
+ * file. Import disposition handles those entries as unverified later.
91
+ */
92
+ export declare function normalizeParsedTranslationExchangeDocument(value: unknown): ParsedTranslationExchangeDocument;
93
+ /** Validate the stronger, version-evidenced document required for CN exports. */
94
+ export declare function validateTranslationExchangeDocument(value: unknown): TranslationExchangeDocument;
95
+ export declare function isConfirmedBuildDeclaration(declaration: TranslationBuildDeclaration): boolean;
96
+ export declare function registerTranslationFormatAdapter(adapter: TranslationFormatAdapter): void;
97
+ export declare function getTranslationFormatAdapter(format: TranslationFormat): TranslationFormatAdapter | undefined;
98
+ export declare function listTranslationFormatAdapters(): TranslationFormatAdapter[];
99
+ /** Test/host reset hook; adapters are registered explicitly by the host. */
100
+ export declare function clearTranslationFormatAdapters(): void;