@semiont/api-client 0.1.0-build.6

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 (74) hide show
  1. package/README.md +85 -0
  2. package/dist/__tests__/client.test.d.ts +28 -0
  3. package/dist/__tests__/client.test.d.ts.map +1 -0
  4. package/dist/__tests__/client.test.js +567 -0
  5. package/dist/__tests__/client.test.js.map +1 -0
  6. package/dist/__tests__/sse-client.test.d.ts +7 -0
  7. package/dist/__tests__/sse-client.test.d.ts.map +1 -0
  8. package/dist/__tests__/sse-client.test.js +421 -0
  9. package/dist/__tests__/sse-client.test.js.map +1 -0
  10. package/dist/__tests__/sse-stream.test.d.ts +7 -0
  11. package/dist/__tests__/sse-stream.test.d.ts.map +1 -0
  12. package/dist/__tests__/sse-stream.test.js +394 -0
  13. package/dist/__tests__/sse-stream.test.js.map +1 -0
  14. package/dist/__tests__/svg-selectors.test.d.ts +5 -0
  15. package/dist/__tests__/svg-selectors.test.d.ts.map +1 -0
  16. package/dist/__tests__/svg-selectors.test.js +124 -0
  17. package/dist/__tests__/svg-selectors.test.js.map +1 -0
  18. package/dist/branded-types.d.ts +70 -0
  19. package/dist/branded-types.d.ts.map +1 -0
  20. package/dist/branded-types.js +62 -0
  21. package/dist/branded-types.js.map +1 -0
  22. package/dist/client.d.ts +243 -0
  23. package/dist/client.d.ts.map +1 -0
  24. package/dist/client.js +460 -0
  25. package/dist/client.js.map +1 -0
  26. package/dist/index.d.ts +43 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +62 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/mime-utils.d.ts +27 -0
  31. package/dist/mime-utils.d.ts.map +1 -0
  32. package/dist/mime-utils.js +49 -0
  33. package/dist/mime-utils.js.map +1 -0
  34. package/dist/sse/index.d.ts +343 -0
  35. package/dist/sse/index.d.ts.map +1 -0
  36. package/dist/sse/index.js +404 -0
  37. package/dist/sse/index.js.map +1 -0
  38. package/dist/sse/stream.d.ts +58 -0
  39. package/dist/sse/stream.d.ts.map +1 -0
  40. package/dist/sse/stream.js +187 -0
  41. package/dist/sse/stream.js.map +1 -0
  42. package/dist/sse/types.d.ts +295 -0
  43. package/dist/sse/types.d.ts.map +1 -0
  44. package/dist/sse/types.js +10 -0
  45. package/dist/sse/types.js.map +1 -0
  46. package/dist/types.d.ts +3177 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +7 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/utils/annotations.d.ts +191 -0
  51. package/dist/utils/annotations.d.ts.map +1 -0
  52. package/dist/utils/annotations.js +404 -0
  53. package/dist/utils/annotations.js.map +1 -0
  54. package/dist/utils/events.d.ts +74 -0
  55. package/dist/utils/events.d.ts.map +1 -0
  56. package/dist/utils/events.js +329 -0
  57. package/dist/utils/events.js.map +1 -0
  58. package/dist/utils/index.d.ts +12 -0
  59. package/dist/utils/index.d.ts.map +1 -0
  60. package/dist/utils/index.js +28 -0
  61. package/dist/utils/index.js.map +1 -0
  62. package/dist/utils/locales.d.ts +31 -0
  63. package/dist/utils/locales.d.ts.map +1 -0
  64. package/dist/utils/locales.js +83 -0
  65. package/dist/utils/locales.js.map +1 -0
  66. package/dist/utils/resources.d.ts +34 -0
  67. package/dist/utils/resources.d.ts.map +1 -0
  68. package/dist/utils/resources.js +63 -0
  69. package/dist/utils/resources.js.map +1 -0
  70. package/dist/utils/validation.d.ts +57 -0
  71. package/dist/utils/validation.d.ts.map +1 -0
  72. package/dist/utils/validation.js +89 -0
  73. package/dist/utils/validation.js.map +1 -0
  74. package/package.json +65 -0
@@ -0,0 +1,329 @@
1
+ "use strict";
2
+ /**
3
+ * Event Utilities
4
+ *
5
+ * Pure TypeScript utilities for working with resource events.
6
+ * No React dependencies - safe to use in any JavaScript environment.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getAnnotationUriFromEvent = getAnnotationUriFromEvent;
10
+ exports.isEventRelatedToAnnotation = isEventRelatedToAnnotation;
11
+ exports.isResourceEvent = isResourceEvent;
12
+ exports.formatEventType = formatEventType;
13
+ exports.getEventEmoji = getEventEmoji;
14
+ exports.formatRelativeTime = formatRelativeTime;
15
+ exports.getEventDisplayContent = getEventDisplayContent;
16
+ exports.getEventEntityTypes = getEventEntityTypes;
17
+ exports.getResourceCreationDetails = getResourceCreationDetails;
18
+ const annotations_1 = require("./annotations");
19
+ // =============================================================================
20
+ // EVENT TYPE GUARDS AND EXTRACTION
21
+ // =============================================================================
22
+ /**
23
+ * Extract annotation ID from event payload
24
+ * Returns null if event is not annotation-related
25
+ *
26
+ * For annotation.added: extracts full URI from payload.annotation.id
27
+ * For annotation.removed/body.updated: constructs full URI from payload.annotationId (UUID) + resourceId
28
+ */
29
+ function getAnnotationUriFromEvent(event) {
30
+ const eventData = event.event;
31
+ const payload = eventData.payload;
32
+ if (!payload) {
33
+ return null;
34
+ }
35
+ switch (eventData.type) {
36
+ case 'annotation.added':
37
+ // annotation.added has the full annotation object with id as full URI
38
+ return payload.annotation?.id || null;
39
+ case 'annotation.removed':
40
+ case 'annotation.body.updated':
41
+ // These events have annotationId (UUID only), need to construct full URI
42
+ // Extract base URL from resourceId (format: http://host/resources/id)
43
+ if (payload.annotationId && eventData.resourceId) {
44
+ try {
45
+ const resourceUri = eventData.resourceId;
46
+ // Extract base URL by removing the /resources/{id} part
47
+ const baseUrl = resourceUri.substring(0, resourceUri.lastIndexOf('/resources/'));
48
+ return `${baseUrl}/annotations/${payload.annotationId}`;
49
+ }
50
+ catch (e) {
51
+ return null;
52
+ }
53
+ }
54
+ return null;
55
+ default:
56
+ return null;
57
+ }
58
+ }
59
+ /**
60
+ * Check if an event is related to a specific annotation
61
+ */
62
+ function isEventRelatedToAnnotation(event, annotationUri) {
63
+ const eventAnnotationUri = getAnnotationUriFromEvent(event);
64
+ return eventAnnotationUri === annotationUri;
65
+ }
66
+ /**
67
+ * Type guard to check if event is a resource event
68
+ */
69
+ function isResourceEvent(event) {
70
+ return event &&
71
+ typeof event.event === 'object' &&
72
+ typeof event.event.id === 'string' &&
73
+ typeof event.event.timestamp === 'string' &&
74
+ typeof event.event.resourceId === 'string' &&
75
+ typeof event.event.type === 'string' &&
76
+ typeof event.metadata === 'object' &&
77
+ typeof event.metadata.sequenceNumber === 'number';
78
+ }
79
+ // =============================================================================
80
+ // EVENT FORMATTING AND DISPLAY
81
+ // =============================================================================
82
+ /**
83
+ * Format event type for display with i18n support
84
+ */
85
+ function formatEventType(type, t, payload) {
86
+ switch (type) {
87
+ case 'resource.created':
88
+ return t('resourceCreated');
89
+ case 'resource.cloned':
90
+ return t('resourceCloned');
91
+ case 'resource.archived':
92
+ return t('resourceArchived');
93
+ case 'resource.unarchived':
94
+ return t('resourceUnarchived');
95
+ case 'annotation.added': {
96
+ const motivation = payload?.annotation?.motivation;
97
+ if (motivation === 'highlighting')
98
+ return t('highlightAdded');
99
+ if (motivation === 'linking')
100
+ return t('referenceCreated');
101
+ if (motivation === 'assessing')
102
+ return t('assessmentAdded');
103
+ return t('annotationAdded');
104
+ }
105
+ case 'annotation.removed': {
106
+ return t('annotationRemoved');
107
+ }
108
+ case 'annotation.body.updated': {
109
+ return t('annotationBodyUpdated');
110
+ }
111
+ case 'entitytag.added':
112
+ return t('entitytagAdded');
113
+ case 'entitytag.removed':
114
+ return t('entitytagRemoved');
115
+ case 'entitytype.added':
116
+ return t('entitytypeAdded');
117
+ case 'job.completed':
118
+ case 'job.started':
119
+ case 'job.progress':
120
+ case 'job.failed':
121
+ return t('jobEvent');
122
+ default:
123
+ const _exhaustiveCheck = type;
124
+ return _exhaustiveCheck;
125
+ }
126
+ }
127
+ /**
128
+ * Get emoji for event type
129
+ * For unified annotation events, pass the payload to determine motivation
130
+ */
131
+ function getEventEmoji(type, payload) {
132
+ switch (type) {
133
+ case 'resource.created':
134
+ case 'resource.cloned':
135
+ case 'resource.archived':
136
+ case 'resource.unarchived':
137
+ return '📄';
138
+ case 'annotation.added': {
139
+ const motivation = payload?.annotation?.motivation;
140
+ if (motivation === 'highlighting')
141
+ return '🟡';
142
+ if (motivation === 'linking')
143
+ return '🔵';
144
+ if (motivation === 'assessing')
145
+ return '🔴';
146
+ return '📝';
147
+ }
148
+ case 'annotation.removed': {
149
+ return '🗑️';
150
+ }
151
+ case 'annotation.body.updated': {
152
+ return '✏️';
153
+ }
154
+ case 'entitytag.added':
155
+ case 'entitytag.removed':
156
+ return '🏷️';
157
+ case 'entitytype.added':
158
+ return '🏷️'; // Same emoji as entitytag (global entity type collection)
159
+ case 'job.completed':
160
+ return '🔗'; // Link emoji for linked document creation
161
+ case 'job.started':
162
+ case 'job.progress':
163
+ return '⚙️'; // Gear for job processing
164
+ case 'job.failed':
165
+ return '❌'; // X mark for failed jobs
166
+ default:
167
+ const _exhaustiveCheck = type;
168
+ return _exhaustiveCheck;
169
+ }
170
+ }
171
+ /**
172
+ * Format timestamp as relative time with i18n support
173
+ */
174
+ function formatRelativeTime(timestamp, t) {
175
+ const date = new Date(timestamp);
176
+ const now = new Date();
177
+ const diffMs = now.getTime() - date.getTime();
178
+ const diffMins = Math.floor(diffMs / 60000);
179
+ const diffHours = Math.floor(diffMs / 3600000);
180
+ const diffDays = Math.floor(diffMs / 86400000);
181
+ if (diffMins < 1)
182
+ return t('justNow');
183
+ if (diffMins < 60)
184
+ return t('minutesAgo', { count: diffMins });
185
+ if (diffHours < 24)
186
+ return t('hoursAgo', { count: diffHours });
187
+ if (diffDays < 7)
188
+ return t('daysAgo', { count: diffDays });
189
+ return date.toLocaleDateString();
190
+ }
191
+ /**
192
+ * Helper to truncate text for display
193
+ */
194
+ function truncateText(text, maxLength = 50) {
195
+ const trimmed = text.trim();
196
+ return trimmed.length > maxLength ? trimmed.substring(0, maxLength) + '...' : trimmed;
197
+ }
198
+ /**
199
+ * Get display content from event payload - complete implementation
200
+ */
201
+ function getEventDisplayContent(event, annotations, // Unified annotations array (all types)
202
+ allEvents) {
203
+ const eventData = event.event;
204
+ const payload = eventData.payload;
205
+ // Use type discriminators instead of runtime typeof checks
206
+ switch (eventData.type) {
207
+ case 'resource.created':
208
+ case 'resource.cloned': {
209
+ return { exact: payload.name, isQuoted: false, isTag: false };
210
+ }
211
+ // Unified annotation events
212
+ case 'annotation.body.updated': {
213
+ // Find current annotation to get its text
214
+ // payload.annotationId is just the UUID, but annotation.id is the full URI
215
+ const annotation = annotations.find(a => a.id.endsWith(`/annotations/${payload.annotationId}`));
216
+ if (annotation?.target) {
217
+ try {
218
+ const targetSelector = (0, annotations_1.getTargetSelector)(annotation.target);
219
+ const exact = (0, annotations_1.getExactText)(targetSelector);
220
+ if (exact) {
221
+ return { exact: truncateText(exact), isQuoted: true, isTag: false };
222
+ }
223
+ }
224
+ catch {
225
+ // If selector parsing fails, continue to return null
226
+ }
227
+ }
228
+ return null;
229
+ }
230
+ case 'annotation.removed': {
231
+ // Find the original annotation.added event to get the text
232
+ // payload.annotationId is just the UUID, but annotation.id in the added event is the full URI
233
+ const addedEvent = allEvents.find(e => e.event.type === 'annotation.added' &&
234
+ e.event.payload.annotation?.id?.endsWith(`/annotations/${payload.annotationId}`));
235
+ if (addedEvent) {
236
+ const addedPayload = addedEvent.event.payload;
237
+ try {
238
+ const exact = (0, annotations_1.getExactText)(addedPayload.annotation.target.selector);
239
+ if (exact) {
240
+ return { exact: truncateText(exact), isQuoted: true, isTag: false };
241
+ }
242
+ }
243
+ catch {
244
+ // If selector parsing fails, return null
245
+ }
246
+ }
247
+ return null;
248
+ }
249
+ case 'annotation.added': {
250
+ // New unified event structure - annotation is in payload
251
+ try {
252
+ const exact = (0, annotations_1.getExactText)(payload.annotation.target.selector);
253
+ if (exact) {
254
+ return { exact: truncateText(exact), isQuoted: true, isTag: false };
255
+ }
256
+ }
257
+ catch {
258
+ // If selector parsing fails, return null
259
+ }
260
+ return null;
261
+ }
262
+ case 'entitytag.added':
263
+ case 'entitytag.removed': {
264
+ return { exact: payload.entityType, isQuoted: false, isTag: true };
265
+ }
266
+ case 'job.completed': {
267
+ // Find the annotation that was used to generate the resource
268
+ if (payload.annotationUri) {
269
+ const annotation = annotations.find(a => a.id === payload.annotationUri);
270
+ if (annotation?.target) {
271
+ try {
272
+ const targetSelector = (0, annotations_1.getTargetSelector)(annotation.target);
273
+ const exact = (0, annotations_1.getExactText)(targetSelector);
274
+ if (exact) {
275
+ return { exact: truncateText(exact), isQuoted: true, isTag: false };
276
+ }
277
+ }
278
+ catch {
279
+ // If selector parsing fails, continue to return null
280
+ }
281
+ }
282
+ }
283
+ return null;
284
+ }
285
+ default:
286
+ return null;
287
+ }
288
+ }
289
+ /**
290
+ * Get entity types from event payload
291
+ */
292
+ function getEventEntityTypes(event) {
293
+ const eventData = event.event;
294
+ if (eventData.type === 'annotation.added') {
295
+ const payload = eventData.payload;
296
+ const motivation = payload?.annotation?.motivation;
297
+ if (motivation === 'linking') {
298
+ return payload.annotation?.body?.entityTypes ?? [];
299
+ }
300
+ }
301
+ return [];
302
+ }
303
+ /**
304
+ * Get resource creation details from event
305
+ */
306
+ function getResourceCreationDetails(event) {
307
+ const eventData = event.event;
308
+ const payload = eventData.payload;
309
+ if (eventData.type === 'resource.created') {
310
+ return {
311
+ type: 'created',
312
+ method: payload.creationMethod || 'unknown',
313
+ userId: eventData.userId,
314
+ metadata: payload.metadata,
315
+ };
316
+ }
317
+ if (eventData.type === 'resource.cloned') {
318
+ return {
319
+ type: 'cloned',
320
+ method: payload.creationMethod || 'clone',
321
+ userId: eventData.userId,
322
+ sourceDocId: payload.parentResourceId,
323
+ parentResourceId: payload.parentResourceId,
324
+ metadata: payload.metadata,
325
+ };
326
+ }
327
+ return null;
328
+ }
329
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * SDK utilities for @semiont/api-client
3
+ *
4
+ * Pure TypeScript helpers for working with Semiont data structures.
5
+ * No React dependencies - safe to use in any JavaScript environment.
6
+ */
7
+ export * from './annotations';
8
+ export * from './events';
9
+ export * from './locales';
10
+ export * from './resources';
11
+ export * from './validation';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ /**
3
+ * SDK utilities for @semiont/api-client
4
+ *
5
+ * Pure TypeScript helpers for working with Semiont data structures.
6
+ * No React dependencies - safe to use in any JavaScript environment.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ __exportStar(require("./annotations"), exports);
24
+ __exportStar(require("./events"), exports);
25
+ __exportStar(require("./locales"), exports);
26
+ __exportStar(require("./resources"), exports);
27
+ __exportStar(require("./validation"), exports);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;AAEH,gDAA8B;AAC9B,2CAAyB;AACzB,4CAA0B;AAC1B,8CAA4B;AAC5B,+CAA6B"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Locale information
3
+ * Copied from SDK for frontend use
4
+ */
5
+ export interface LocaleInfo {
6
+ code: string;
7
+ nativeName: string;
8
+ englishName: string;
9
+ }
10
+ export declare const LOCALES: readonly LocaleInfo[];
11
+ /**
12
+ * Get locale information by code
13
+ */
14
+ export declare function getLocaleInfo(code: string | undefined): LocaleInfo | undefined;
15
+ /**
16
+ * Get the native name of a language by its locale code
17
+ */
18
+ export declare function getLocaleNativeName(code: string | undefined): string | undefined;
19
+ /**
20
+ * Get the English name of a language by its locale code
21
+ */
22
+ export declare function getLocaleEnglishName(code: string | undefined): string | undefined;
23
+ /**
24
+ * Format locale code for display as "Native Name (code)"
25
+ */
26
+ export declare function formatLocaleDisplay(code: string | undefined): string | undefined;
27
+ /**
28
+ * Get all supported locale codes
29
+ */
30
+ export declare function getAllLocaleCodes(): readonly string[];
31
+ //# sourceMappingURL=locales.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../src/utils/locales.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,OAAO,EAAE,SAAS,UAAU,EA8B/B,CAAC;AAOX;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAG9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEhF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEjF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOhF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,SAAS,MAAM,EAAE,CAErD"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ /**
3
+ * Locale information
4
+ * Copied from SDK for frontend use
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.LOCALES = void 0;
8
+ exports.getLocaleInfo = getLocaleInfo;
9
+ exports.getLocaleNativeName = getLocaleNativeName;
10
+ exports.getLocaleEnglishName = getLocaleEnglishName;
11
+ exports.formatLocaleDisplay = formatLocaleDisplay;
12
+ exports.getAllLocaleCodes = getAllLocaleCodes;
13
+ exports.LOCALES = [
14
+ { code: 'ar', nativeName: 'العربية', englishName: 'Arabic' },
15
+ { code: 'bn', nativeName: 'বাংলা', englishName: 'Bengali' },
16
+ { code: 'cs', nativeName: 'Čeština', englishName: 'Czech' },
17
+ { code: 'da', nativeName: 'Dansk', englishName: 'Danish' },
18
+ { code: 'de', nativeName: 'Deutsch', englishName: 'German' },
19
+ { code: 'el', nativeName: 'Ελληνικά', englishName: 'Greek' },
20
+ { code: 'en', nativeName: 'English', englishName: 'English' },
21
+ { code: 'es', nativeName: 'Español', englishName: 'Spanish' },
22
+ { code: 'fa', nativeName: 'فارسی', englishName: 'Persian' },
23
+ { code: 'fi', nativeName: 'Suomi', englishName: 'Finnish' },
24
+ { code: 'fr', nativeName: 'Français', englishName: 'French' },
25
+ { code: 'he', nativeName: 'עברית', englishName: 'Hebrew' },
26
+ { code: 'hi', nativeName: 'हिन्दी', englishName: 'Hindi' },
27
+ { code: 'id', nativeName: 'Bahasa Indonesia', englishName: 'Indonesian' },
28
+ { code: 'it', nativeName: 'Italiano', englishName: 'Italian' },
29
+ { code: 'ja', nativeName: '日本語', englishName: 'Japanese' },
30
+ { code: 'ko', nativeName: '한국어', englishName: 'Korean' },
31
+ { code: 'ms', nativeName: 'Bahasa Melayu', englishName: 'Malay' },
32
+ { code: 'nl', nativeName: 'Nederlands', englishName: 'Dutch' },
33
+ { code: 'no', nativeName: 'Norsk', englishName: 'Norwegian' },
34
+ { code: 'pl', nativeName: 'Polski', englishName: 'Polish' },
35
+ { code: 'pt', nativeName: 'Português', englishName: 'Portuguese' },
36
+ { code: 'ro', nativeName: 'Română', englishName: 'Romanian' },
37
+ { code: 'sv', nativeName: 'Svenska', englishName: 'Swedish' },
38
+ { code: 'th', nativeName: 'ไทย', englishName: 'Thai' },
39
+ { code: 'tr', nativeName: 'Türkçe', englishName: 'Turkish' },
40
+ { code: 'uk', nativeName: 'Українська', englishName: 'Ukrainian' },
41
+ { code: 'vi', nativeName: 'Tiếng Việt', englishName: 'Vietnamese' },
42
+ { code: 'zh', nativeName: '中文', englishName: 'Chinese' },
43
+ ];
44
+ // Create lookup map for efficient access
45
+ const localeByCode = new Map(exports.LOCALES.map(locale => [locale.code.toLowerCase(), locale]));
46
+ /**
47
+ * Get locale information by code
48
+ */
49
+ function getLocaleInfo(code) {
50
+ if (!code)
51
+ return undefined;
52
+ return localeByCode.get(code.toLowerCase());
53
+ }
54
+ /**
55
+ * Get the native name of a language by its locale code
56
+ */
57
+ function getLocaleNativeName(code) {
58
+ return getLocaleInfo(code)?.nativeName;
59
+ }
60
+ /**
61
+ * Get the English name of a language by its locale code
62
+ */
63
+ function getLocaleEnglishName(code) {
64
+ return getLocaleInfo(code)?.englishName;
65
+ }
66
+ /**
67
+ * Format locale code for display as "Native Name (code)"
68
+ */
69
+ function formatLocaleDisplay(code) {
70
+ if (!code)
71
+ return undefined;
72
+ const info = getLocaleInfo(code);
73
+ if (!info)
74
+ return code;
75
+ return `${info.nativeName} (${code.toLowerCase()})`;
76
+ }
77
+ /**
78
+ * Get all supported locale codes
79
+ */
80
+ function getAllLocaleCodes() {
81
+ return exports.LOCALES.map(l => l.code);
82
+ }
83
+ //# sourceMappingURL=locales.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locales.js","sourceRoot":"","sources":["../../src/utils/locales.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Helper functions for working with W3C ResourceDescriptor
3
+ */
4
+ import type { components } from '../types';
5
+ type ResourceDescriptor = components['schemas']['ResourceDescriptor'];
6
+ type Representation = components['schemas']['Representation'];
7
+ /**
8
+ * Get the resource ID from @id property
9
+ *
10
+ * For internal resources: extracts UUID from "http://localhost:4000/resources/{uuid}"
11
+ * For external resources: returns undefined
12
+ *
13
+ * This is used for routing - the frontend URL should contain only the resource ID,
14
+ * not the full HTTP URI.
15
+ */
16
+ export declare function getResourceId(resource: ResourceDescriptor | undefined): string | undefined;
17
+ /**
18
+ * Get the primary representation (first or only representation)
19
+ */
20
+ export declare function getPrimaryRepresentation(resource: ResourceDescriptor | undefined): Representation | undefined;
21
+ /**
22
+ * Get the media type from the primary representation
23
+ */
24
+ export declare function getPrimaryMediaType(resource: ResourceDescriptor | undefined): string | undefined;
25
+ /**
26
+ * Get the checksum from the primary representation
27
+ */
28
+ export declare function getChecksum(resource: ResourceDescriptor | undefined): string | undefined;
29
+ /**
30
+ * Get the language from the primary representation
31
+ */
32
+ export declare function getLanguage(resource: ResourceDescriptor | undefined): string | undefined;
33
+ export {};
34
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/utils/resources.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,KAAK,kBAAkB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,CAAC;AACtE,KAAK,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,CAAC;AAE9D;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAe1F;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAM7G;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEhG;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAExF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAExF"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /**
3
+ * Helper functions for working with W3C ResourceDescriptor
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getResourceId = getResourceId;
7
+ exports.getPrimaryRepresentation = getPrimaryRepresentation;
8
+ exports.getPrimaryMediaType = getPrimaryMediaType;
9
+ exports.getChecksum = getChecksum;
10
+ exports.getLanguage = getLanguage;
11
+ /**
12
+ * Get the resource ID from @id property
13
+ *
14
+ * For internal resources: extracts UUID from "http://localhost:4000/resources/{uuid}"
15
+ * For external resources: returns undefined
16
+ *
17
+ * This is used for routing - the frontend URL should contain only the resource ID,
18
+ * not the full HTTP URI.
19
+ */
20
+ function getResourceId(resource) {
21
+ if (!resource)
22
+ return undefined;
23
+ const fullId = resource['@id'];
24
+ // For internal resources, extract the last path segment
25
+ // http://localhost:4000/resources/{uuid} -> {uuid}
26
+ if (fullId.includes('/resources/')) {
27
+ const parts = fullId.split('/resources/');
28
+ const lastPart = parts[parts.length - 1];
29
+ return lastPart || undefined;
30
+ }
31
+ // For external resources, cannot extract ID
32
+ return undefined;
33
+ }
34
+ /**
35
+ * Get the primary representation (first or only representation)
36
+ */
37
+ function getPrimaryRepresentation(resource) {
38
+ if (!resource?.representations)
39
+ return undefined;
40
+ const reps = Array.isArray(resource.representations)
41
+ ? resource.representations
42
+ : [resource.representations];
43
+ return reps[0];
44
+ }
45
+ /**
46
+ * Get the media type from the primary representation
47
+ */
48
+ function getPrimaryMediaType(resource) {
49
+ return getPrimaryRepresentation(resource)?.mediaType;
50
+ }
51
+ /**
52
+ * Get the checksum from the primary representation
53
+ */
54
+ function getChecksum(resource) {
55
+ return getPrimaryRepresentation(resource)?.checksum;
56
+ }
57
+ /**
58
+ * Get the language from the primary representation
59
+ */
60
+ function getLanguage(resource) {
61
+ return getPrimaryRepresentation(resource)?.language;
62
+ }
63
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/utils/resources.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAgBH,sCAeC;AAKD,4DAMC;AAKD,kDAEC;AAKD,kCAEC;AAKD,kCAEC;AAxDD;;;;;;;;GAQG;AACH,SAAgB,aAAa,CAAC,QAAwC;IACpE,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEhC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE/B,wDAAwD;IACxD,mDAAmD;IACnD,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,OAAO,QAAQ,IAAI,SAAS,CAAC;IAC/B,CAAC;IAED,4CAA4C;IAC5C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CAAC,QAAwC;IAC/E,IAAI,CAAC,QAAQ,EAAE,eAAe;QAAE,OAAO,SAAS,CAAC;IACjD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;QAClD,CAAC,CAAC,QAAQ,CAAC,eAAe;QAC1B,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,QAAwC;IAC1E,OAAO,wBAAwB,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,QAAwC;IAClE,OAAO,wBAAwB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,QAAwC;IAClE,OAAO,wBAAwB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;AACtD,CAAC"}