@semiont/api-client 0.1.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/README.md +85 -0
- package/dist/__tests__/client.test.d.ts +28 -0
- package/dist/__tests__/client.test.d.ts.map +1 -0
- package/dist/__tests__/client.test.js +567 -0
- package/dist/__tests__/client.test.js.map +1 -0
- package/dist/__tests__/sse-client.test.d.ts +7 -0
- package/dist/__tests__/sse-client.test.d.ts.map +1 -0
- package/dist/__tests__/sse-client.test.js +421 -0
- package/dist/__tests__/sse-client.test.js.map +1 -0
- package/dist/__tests__/sse-stream.test.d.ts +7 -0
- package/dist/__tests__/sse-stream.test.d.ts.map +1 -0
- package/dist/__tests__/sse-stream.test.js +394 -0
- package/dist/__tests__/sse-stream.test.js.map +1 -0
- package/dist/__tests__/svg-selectors.test.d.ts +5 -0
- package/dist/__tests__/svg-selectors.test.d.ts.map +1 -0
- package/dist/__tests__/svg-selectors.test.js +124 -0
- package/dist/__tests__/svg-selectors.test.js.map +1 -0
- package/dist/branded-types.d.ts +70 -0
- package/dist/branded-types.d.ts.map +1 -0
- package/dist/branded-types.js +62 -0
- package/dist/branded-types.js.map +1 -0
- package/dist/client.d.ts +243 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +460 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/mime-utils.d.ts +27 -0
- package/dist/mime-utils.d.ts.map +1 -0
- package/dist/mime-utils.js +49 -0
- package/dist/mime-utils.js.map +1 -0
- package/dist/sse/index.d.ts +343 -0
- package/dist/sse/index.d.ts.map +1 -0
- package/dist/sse/index.js +404 -0
- package/dist/sse/index.js.map +1 -0
- package/dist/sse/stream.d.ts +58 -0
- package/dist/sse/stream.d.ts.map +1 -0
- package/dist/sse/stream.js +187 -0
- package/dist/sse/stream.js.map +1 -0
- package/dist/sse/types.d.ts +295 -0
- package/dist/sse/types.d.ts.map +1 -0
- package/dist/sse/types.js +10 -0
- package/dist/sse/types.js.map +1 -0
- package/dist/types.d.ts +3177 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/uri-types.d.ts +19 -0
- package/dist/uri-types.d.ts.map +1 -0
- package/dist/uri-types.js +35 -0
- package/dist/uri-types.js.map +1 -0
- package/dist/utils/annotations.d.ts +191 -0
- package/dist/utils/annotations.d.ts.map +1 -0
- package/dist/utils/annotations.js +404 -0
- package/dist/utils/annotations.js.map +1 -0
- package/dist/utils/events.d.ts +74 -0
- package/dist/utils/events.d.ts.map +1 -0
- package/dist/utils/events.js +329 -0
- package/dist/utils/events.js.map +1 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +28 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/locales.d.ts +31 -0
- package/dist/utils/locales.d.ts.map +1 -0
- package/dist/utils/locales.js +83 -0
- package/dist/utils/locales.js.map +1 -0
- package/dist/utils/resources.d.ts +34 -0
- package/dist/utils/resources.d.ts.map +1 -0
- package/dist/utils/resources.js +63 -0
- package/dist/utils/resources.js.map +1 -0
- package/dist/utils/validation.d.ts +57 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +89 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Annotation and Selector Utilities
|
|
4
|
+
*
|
|
5
|
+
* Pure TypeScript utilities for working with W3C Web Annotations.
|
|
6
|
+
* No React dependencies - safe to use in any JavaScript environment.
|
|
7
|
+
*
|
|
8
|
+
* Body is either empty array (stub) or single SpecificResource (resolved)
|
|
9
|
+
* Body can be array of TextualBody (tagging) + SpecificResource (linking)
|
|
10
|
+
* Target can be simple string IRI or object with source and optional selector
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.getBodySource = getBodySource;
|
|
14
|
+
exports.getBodyType = getBodyType;
|
|
15
|
+
exports.isBodyResolved = isBodyResolved;
|
|
16
|
+
exports.getTargetSource = getTargetSource;
|
|
17
|
+
exports.getTargetSelector = getTargetSelector;
|
|
18
|
+
exports.hasTargetSelector = hasTargetSelector;
|
|
19
|
+
exports.getEntityTypes = getEntityTypes;
|
|
20
|
+
exports.isHighlight = isHighlight;
|
|
21
|
+
exports.isReference = isReference;
|
|
22
|
+
exports.isAssessment = isAssessment;
|
|
23
|
+
exports.isComment = isComment;
|
|
24
|
+
exports.isTag = isTag;
|
|
25
|
+
exports.getCommentText = getCommentText;
|
|
26
|
+
exports.getTagCategory = getTagCategory;
|
|
27
|
+
exports.getTagSchemaId = getTagSchemaId;
|
|
28
|
+
exports.isStubReference = isStubReference;
|
|
29
|
+
exports.isResolvedReference = isResolvedReference;
|
|
30
|
+
exports.getExactText = getExactText;
|
|
31
|
+
exports.getAnnotationExactText = getAnnotationExactText;
|
|
32
|
+
exports.getPrimarySelector = getPrimarySelector;
|
|
33
|
+
exports.getTextPositionSelector = getTextPositionSelector;
|
|
34
|
+
exports.getTextQuoteSelector = getTextQuoteSelector;
|
|
35
|
+
exports.getSvgSelector = getSvgSelector;
|
|
36
|
+
exports.validateSvgMarkup = validateSvgMarkup;
|
|
37
|
+
exports.extractBoundingBox = extractBoundingBox;
|
|
38
|
+
const branded_types_1 = require("../branded-types");
|
|
39
|
+
/**
|
|
40
|
+
* Get the source from an annotation body (null if stub)
|
|
41
|
+
* Search for SpecificResource in body array
|
|
42
|
+
*/
|
|
43
|
+
function getBodySource(body) {
|
|
44
|
+
if (Array.isArray(body)) {
|
|
45
|
+
// Search for SpecificResource with source
|
|
46
|
+
for (const item of body) {
|
|
47
|
+
if (typeof item === 'object' &&
|
|
48
|
+
item !== null &&
|
|
49
|
+
'type' in item &&
|
|
50
|
+
'source' in item) {
|
|
51
|
+
const itemType = item.type;
|
|
52
|
+
const itemSource = item.source;
|
|
53
|
+
if (itemType === 'SpecificResource' && typeof itemSource === 'string') {
|
|
54
|
+
return (0, branded_types_1.resourceUri)(itemSource);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return null; // No SpecificResource found = stub
|
|
59
|
+
}
|
|
60
|
+
// Single body object (SpecificResource)
|
|
61
|
+
if (typeof body === 'object' &&
|
|
62
|
+
body !== null &&
|
|
63
|
+
'type' in body &&
|
|
64
|
+
'source' in body) {
|
|
65
|
+
const bodyType = body.type;
|
|
66
|
+
const bodySource = body.source;
|
|
67
|
+
if (bodyType === 'SpecificResource' && typeof bodySource === 'string') {
|
|
68
|
+
return (0, branded_types_1.resourceUri)(bodySource);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get the type from an annotation body (returns first body type in array)
|
|
75
|
+
*/
|
|
76
|
+
function getBodyType(body) {
|
|
77
|
+
if (Array.isArray(body)) {
|
|
78
|
+
if (body.length === 0) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
// Return type of first body item
|
|
82
|
+
if (typeof body[0] === 'object' && body[0] !== null && 'type' in body[0]) {
|
|
83
|
+
const firstType = body[0].type;
|
|
84
|
+
if (firstType === 'TextualBody' || firstType === 'SpecificResource') {
|
|
85
|
+
return firstType;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
// Single body object
|
|
91
|
+
if (typeof body === 'object' && body !== null && 'type' in body) {
|
|
92
|
+
const bodyType = body.type;
|
|
93
|
+
if (bodyType === 'TextualBody' || bodyType === 'SpecificResource') {
|
|
94
|
+
return bodyType;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check if body is resolved (has a source)
|
|
101
|
+
* Check for SpecificResource in body array
|
|
102
|
+
*/
|
|
103
|
+
function isBodyResolved(body) {
|
|
104
|
+
return getBodySource(body) !== null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get the source IRI from target (handles both string and object forms)
|
|
108
|
+
*/
|
|
109
|
+
function getTargetSource(target) {
|
|
110
|
+
if (typeof target === 'string') {
|
|
111
|
+
return (0, branded_types_1.resourceUri)(target);
|
|
112
|
+
}
|
|
113
|
+
return (0, branded_types_1.resourceUri)(target.source);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get the selector from target (undefined if string or no selector)
|
|
117
|
+
*/
|
|
118
|
+
function getTargetSelector(target) {
|
|
119
|
+
if (typeof target === 'string') {
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
return target.selector;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Check if target has a selector
|
|
126
|
+
*/
|
|
127
|
+
function hasTargetSelector(target) {
|
|
128
|
+
return typeof target !== 'string' && target.selector !== undefined;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Extract entity types from annotation bodies
|
|
132
|
+
* Entity types are stored as TextualBody with purpose: "tagging"
|
|
133
|
+
* Accepts any object with a body property matching Annotation['body']
|
|
134
|
+
*/
|
|
135
|
+
function getEntityTypes(annotation) {
|
|
136
|
+
// Extract from TextualBody bodies with purpose: "tagging"
|
|
137
|
+
if (Array.isArray(annotation.body)) {
|
|
138
|
+
const entityTags = [];
|
|
139
|
+
for (const item of annotation.body) {
|
|
140
|
+
// Runtime check for TextualBody with tagging purpose
|
|
141
|
+
// TypeScript incorrectly narrows the union type here, so we use runtime checks only
|
|
142
|
+
if (typeof item === 'object' &&
|
|
143
|
+
item !== null &&
|
|
144
|
+
'type' in item &&
|
|
145
|
+
'value' in item &&
|
|
146
|
+
'purpose' in item) {
|
|
147
|
+
// Access properties as unknown first to avoid TypeScript narrowing issues
|
|
148
|
+
const itemType = item.type;
|
|
149
|
+
const itemValue = item.value;
|
|
150
|
+
const itemPurpose = item.purpose;
|
|
151
|
+
if (itemType === 'TextualBody' && itemPurpose === 'tagging' && typeof itemValue === 'string' && itemValue.length > 0) {
|
|
152
|
+
entityTags.push(itemValue);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return entityTags;
|
|
157
|
+
}
|
|
158
|
+
return [];
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Type guard to check if an annotation is a highlight
|
|
162
|
+
*/
|
|
163
|
+
function isHighlight(annotation) {
|
|
164
|
+
return annotation.motivation === 'highlighting';
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Type guard to check if an annotation is a reference (linking)
|
|
168
|
+
*/
|
|
169
|
+
function isReference(annotation) {
|
|
170
|
+
return annotation.motivation === 'linking';
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Type guard to check if an annotation is an assessment
|
|
174
|
+
*/
|
|
175
|
+
function isAssessment(annotation) {
|
|
176
|
+
return annotation.motivation === 'assessing';
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Type guard to check if an annotation is a comment
|
|
180
|
+
*/
|
|
181
|
+
function isComment(annotation) {
|
|
182
|
+
return annotation.motivation === 'commenting';
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Type guard to check if an annotation is a tag
|
|
186
|
+
*/
|
|
187
|
+
function isTag(annotation) {
|
|
188
|
+
return annotation.motivation === 'tagging';
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Extract comment text from a comment annotation's body
|
|
192
|
+
* @param annotation - The annotation to extract comment text from
|
|
193
|
+
* @returns The comment text, or undefined if not a comment or no text found
|
|
194
|
+
*/
|
|
195
|
+
function getCommentText(annotation) {
|
|
196
|
+
if (!isComment(annotation))
|
|
197
|
+
return undefined;
|
|
198
|
+
const body = Array.isArray(annotation.body) ? annotation.body[0] : annotation.body;
|
|
199
|
+
if (body && 'value' in body) {
|
|
200
|
+
return body.value;
|
|
201
|
+
}
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Extract tag category from a tag annotation's body
|
|
206
|
+
* Tags use dual-body structure: first body has purpose: "tagging" with category value
|
|
207
|
+
* @param annotation - The annotation to extract category from
|
|
208
|
+
* @returns The tag category (e.g., "Issue", "Rule"), or undefined if not a tag or no category found
|
|
209
|
+
*/
|
|
210
|
+
function getTagCategory(annotation) {
|
|
211
|
+
if (!isTag(annotation))
|
|
212
|
+
return undefined;
|
|
213
|
+
const bodies = Array.isArray(annotation.body) ? annotation.body : [annotation.body];
|
|
214
|
+
const taggingBody = bodies.find(b => b && 'purpose' in b && b.purpose === 'tagging');
|
|
215
|
+
if (taggingBody && 'value' in taggingBody) {
|
|
216
|
+
return taggingBody.value;
|
|
217
|
+
}
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Extract tag schema ID from a tag annotation's body
|
|
222
|
+
* Tags use dual-body structure: second body has purpose: "classifying" with schema ID
|
|
223
|
+
* @param annotation - The annotation to extract schema ID from
|
|
224
|
+
* @returns The schema ID (e.g., "legal-irac"), or undefined if not a tag or no schema found
|
|
225
|
+
*/
|
|
226
|
+
function getTagSchemaId(annotation) {
|
|
227
|
+
if (!isTag(annotation))
|
|
228
|
+
return undefined;
|
|
229
|
+
const bodies = Array.isArray(annotation.body) ? annotation.body : [annotation.body];
|
|
230
|
+
const classifyingBody = bodies.find(b => b && 'purpose' in b && b.purpose === 'classifying');
|
|
231
|
+
if (classifyingBody && 'value' in classifyingBody) {
|
|
232
|
+
return classifyingBody.value;
|
|
233
|
+
}
|
|
234
|
+
return undefined;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Type guard to check if a reference annotation is a stub (unresolved)
|
|
238
|
+
* Stub if no SpecificResource in body array
|
|
239
|
+
*/
|
|
240
|
+
function isStubReference(annotation) {
|
|
241
|
+
return isReference(annotation) && !isBodyResolved(annotation.body);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Type guard to check if a reference annotation is resolved
|
|
245
|
+
* Resolved if SpecificResource exists in body array
|
|
246
|
+
*/
|
|
247
|
+
function isResolvedReference(annotation) {
|
|
248
|
+
return isReference(annotation) && isBodyResolved(annotation.body);
|
|
249
|
+
}
|
|
250
|
+
// =============================================================================
|
|
251
|
+
// SELECTOR UTILITIES
|
|
252
|
+
// =============================================================================
|
|
253
|
+
/**
|
|
254
|
+
* Get the exact text from a selector (single or array)
|
|
255
|
+
*
|
|
256
|
+
* When selector is an array, tries to find a TextQuoteSelector (which has exact text).
|
|
257
|
+
* TextPositionSelector does not have exact text, only character offsets.
|
|
258
|
+
* Handles undefined selector (when target is a string IRI with no selector)
|
|
259
|
+
*/
|
|
260
|
+
function getExactText(selector) {
|
|
261
|
+
if (!selector) {
|
|
262
|
+
return ''; // No selector means entire resource
|
|
263
|
+
}
|
|
264
|
+
const selectors = Array.isArray(selector) ? selector : [selector];
|
|
265
|
+
// Try to find TextQuoteSelector (has exact text)
|
|
266
|
+
const quoteSelector = selectors.find(s => s.type === 'TextQuoteSelector');
|
|
267
|
+
if (quoteSelector) {
|
|
268
|
+
return quoteSelector.exact;
|
|
269
|
+
}
|
|
270
|
+
// No TextQuoteSelector found
|
|
271
|
+
return '';
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Get the exact text from an annotation's target selector
|
|
275
|
+
* Uses getTargetSelector helper to safely get selector
|
|
276
|
+
*/
|
|
277
|
+
function getAnnotationExactText(annotation) {
|
|
278
|
+
const selector = getTargetSelector(annotation.target);
|
|
279
|
+
return getExactText(selector);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Get the primary selector from a selector (single or array)
|
|
283
|
+
*
|
|
284
|
+
* When selector is an array, returns the first selector.
|
|
285
|
+
* When selector is a single object, returns it as-is.
|
|
286
|
+
*/
|
|
287
|
+
function getPrimarySelector(selector) {
|
|
288
|
+
if (Array.isArray(selector)) {
|
|
289
|
+
if (selector.length === 0) {
|
|
290
|
+
throw new Error('Empty selector array');
|
|
291
|
+
}
|
|
292
|
+
const first = selector[0];
|
|
293
|
+
if (!first) {
|
|
294
|
+
throw new Error('Invalid selector array');
|
|
295
|
+
}
|
|
296
|
+
return first;
|
|
297
|
+
}
|
|
298
|
+
return selector;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Get TextPositionSelector from a selector (single or array)
|
|
302
|
+
*
|
|
303
|
+
* Returns the first TextPositionSelector found, or null if none exists.
|
|
304
|
+
* Handles undefined selector (when target is a string IRI with no selector)
|
|
305
|
+
*/
|
|
306
|
+
function getTextPositionSelector(selector) {
|
|
307
|
+
if (!selector)
|
|
308
|
+
return null; // No selector means entire resource
|
|
309
|
+
const selectors = Array.isArray(selector) ? selector : [selector];
|
|
310
|
+
const found = selectors.find(s => s.type === 'TextPositionSelector');
|
|
311
|
+
if (!found)
|
|
312
|
+
return null;
|
|
313
|
+
return found.type === 'TextPositionSelector' ? found : null;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Get TextQuoteSelector from a selector (single or array)
|
|
317
|
+
*
|
|
318
|
+
* Returns the first TextQuoteSelector found, or null if none exists.
|
|
319
|
+
*/
|
|
320
|
+
function getTextQuoteSelector(selector) {
|
|
321
|
+
const selectors = Array.isArray(selector) ? selector : [selector];
|
|
322
|
+
const found = selectors.find(s => s.type === 'TextQuoteSelector');
|
|
323
|
+
if (!found)
|
|
324
|
+
return null;
|
|
325
|
+
return found.type === 'TextQuoteSelector' ? found : null;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Get SvgSelector from a selector (single or array)
|
|
329
|
+
*
|
|
330
|
+
* Returns the first SvgSelector found, or null if none exists.
|
|
331
|
+
*/
|
|
332
|
+
function getSvgSelector(selector) {
|
|
333
|
+
if (!selector)
|
|
334
|
+
return null;
|
|
335
|
+
const selectors = Array.isArray(selector) ? selector : [selector];
|
|
336
|
+
const found = selectors.find(s => s.type === 'SvgSelector');
|
|
337
|
+
if (!found)
|
|
338
|
+
return null;
|
|
339
|
+
return found.type === 'SvgSelector' ? found : null;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Validate SVG markup for W3C compliance
|
|
343
|
+
*
|
|
344
|
+
* Checks that:
|
|
345
|
+
* - SVG contains xmlns attribute
|
|
346
|
+
* - SVG is well-formed XML
|
|
347
|
+
* - SVG contains at least one shape element
|
|
348
|
+
*
|
|
349
|
+
* @returns null if valid, error message if invalid
|
|
350
|
+
*/
|
|
351
|
+
function validateSvgMarkup(svg) {
|
|
352
|
+
// Check for xmlns attribute (required by W3C spec)
|
|
353
|
+
if (!svg.includes('xmlns="http://www.w3.org/2000/svg"')) {
|
|
354
|
+
return 'SVG must include xmlns="http://www.w3.org/2000/svg" attribute';
|
|
355
|
+
}
|
|
356
|
+
// Check for basic SVG tag structure
|
|
357
|
+
if (!svg.includes('<svg') || !svg.includes('</svg>')) {
|
|
358
|
+
return 'SVG must have opening and closing tags';
|
|
359
|
+
}
|
|
360
|
+
// Check for at least one shape element
|
|
361
|
+
const shapeElements = ['rect', 'circle', 'ellipse', 'polygon', 'polyline', 'path', 'line'];
|
|
362
|
+
const hasShape = shapeElements.some(shape => svg.includes(`<${shape}`) || svg.includes(`<${shape} `));
|
|
363
|
+
if (!hasShape) {
|
|
364
|
+
return 'SVG must contain at least one shape element (rect, circle, ellipse, polygon, polyline, path, or line)';
|
|
365
|
+
}
|
|
366
|
+
return null; // Valid
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Extract bounding box from SVG markup
|
|
370
|
+
*
|
|
371
|
+
* Attempts to extract x, y, width, height from the SVG viewBox or root element.
|
|
372
|
+
* Returns null if bounding box cannot be determined.
|
|
373
|
+
*/
|
|
374
|
+
function extractBoundingBox(svg) {
|
|
375
|
+
// Try to extract viewBox attribute from SVG element
|
|
376
|
+
const viewBoxMatch = svg.match(/<svg[^>]*viewBox="([^"]+)"/);
|
|
377
|
+
if (viewBoxMatch) {
|
|
378
|
+
const values = viewBoxMatch[1].split(/\s+/).map(parseFloat);
|
|
379
|
+
if (values.length === 4 && values.every(v => !isNaN(v))) {
|
|
380
|
+
return {
|
|
381
|
+
x: values[0],
|
|
382
|
+
y: values[1],
|
|
383
|
+
width: values[2],
|
|
384
|
+
height: values[3]
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
// Try to extract width/height attributes from SVG element (assume x=0, y=0)
|
|
389
|
+
const svgTagMatch = svg.match(/<svg[^>]*>/);
|
|
390
|
+
if (svgTagMatch) {
|
|
391
|
+
const svgTag = svgTagMatch[0];
|
|
392
|
+
const widthMatch = svgTag.match(/width="([^"]+)"/);
|
|
393
|
+
const heightMatch = svgTag.match(/height="([^"]+)"/);
|
|
394
|
+
if (widthMatch && heightMatch) {
|
|
395
|
+
const width = parseFloat(widthMatch[1]);
|
|
396
|
+
const height = parseFloat(heightMatch[1]);
|
|
397
|
+
if (!isNaN(width) && !isNaN(height)) {
|
|
398
|
+
return { x: 0, y: 0, width, height };
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
return null;
|
|
403
|
+
}
|
|
404
|
+
//# sourceMappingURL=annotations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../src/utils/annotations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Utilities
|
|
3
|
+
*
|
|
4
|
+
* Pure TypeScript utilities for working with resource events.
|
|
5
|
+
* No React dependencies - safe to use in any JavaScript environment.
|
|
6
|
+
*/
|
|
7
|
+
import type { paths, components } from '../types';
|
|
8
|
+
import { AnnotationUri } from '../branded-types';
|
|
9
|
+
type EventsResponse = paths['/resources/{id}/events']['get']['responses'][200]['content']['application/json'];
|
|
10
|
+
export type StoredEvent = EventsResponse['events'][number];
|
|
11
|
+
export type ResourceEvent = StoredEvent['event'];
|
|
12
|
+
export type EventMetadata = StoredEvent['metadata'];
|
|
13
|
+
type Annotation = components['schemas']['Annotation'];
|
|
14
|
+
export type ResourceEventType = 'resource.created' | 'resource.cloned' | 'resource.archived' | 'resource.unarchived' | 'annotation.added' | 'annotation.removed' | 'annotation.body.updated' | 'entitytag.added' | 'entitytag.removed' | 'entitytype.added' | 'job.started' | 'job.progress' | 'job.completed' | 'job.failed';
|
|
15
|
+
type TranslateFn = (key: string, params?: Record<string, string | number>) => string;
|
|
16
|
+
/**
|
|
17
|
+
* Extract annotation ID from event payload
|
|
18
|
+
* Returns null if event is not annotation-related
|
|
19
|
+
*
|
|
20
|
+
* For annotation.added: extracts full URI from payload.annotation.id
|
|
21
|
+
* For annotation.removed/body.updated: constructs full URI from payload.annotationId (UUID) + resourceId
|
|
22
|
+
*/
|
|
23
|
+
export declare function getAnnotationUriFromEvent(event: StoredEvent): AnnotationUri | null;
|
|
24
|
+
/**
|
|
25
|
+
* Check if an event is related to a specific annotation
|
|
26
|
+
*/
|
|
27
|
+
export declare function isEventRelatedToAnnotation(event: StoredEvent, annotationUri: AnnotationUri): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Type guard to check if event is a resource event
|
|
30
|
+
*/
|
|
31
|
+
export declare function isResourceEvent(event: any): event is StoredEvent;
|
|
32
|
+
/**
|
|
33
|
+
* Format event type for display with i18n support
|
|
34
|
+
*/
|
|
35
|
+
export declare function formatEventType(type: ResourceEventType, t: TranslateFn, payload?: any): string;
|
|
36
|
+
/**
|
|
37
|
+
* Get emoji for event type
|
|
38
|
+
* For unified annotation events, pass the payload to determine motivation
|
|
39
|
+
*/
|
|
40
|
+
export declare function getEventEmoji(type: ResourceEventType, payload?: any): string;
|
|
41
|
+
/**
|
|
42
|
+
* Format timestamp as relative time with i18n support
|
|
43
|
+
*/
|
|
44
|
+
export declare function formatRelativeTime(timestamp: string, t: TranslateFn): string;
|
|
45
|
+
/**
|
|
46
|
+
* Get display content from event payload - complete implementation
|
|
47
|
+
*/
|
|
48
|
+
export declare function getEventDisplayContent(event: StoredEvent, annotations: Annotation[], // Unified annotations array (all types)
|
|
49
|
+
allEvents: StoredEvent[]): {
|
|
50
|
+
exact: string;
|
|
51
|
+
isQuoted: boolean;
|
|
52
|
+
isTag: boolean;
|
|
53
|
+
} | null;
|
|
54
|
+
/**
|
|
55
|
+
* Get entity types from event payload
|
|
56
|
+
*/
|
|
57
|
+
export declare function getEventEntityTypes(event: StoredEvent): string[];
|
|
58
|
+
/**
|
|
59
|
+
* Resource creation details
|
|
60
|
+
*/
|
|
61
|
+
export interface ResourceCreationDetails {
|
|
62
|
+
type: 'created' | 'cloned';
|
|
63
|
+
method: string;
|
|
64
|
+
userId?: string;
|
|
65
|
+
sourceDocId?: string;
|
|
66
|
+
parentResourceId?: string;
|
|
67
|
+
metadata?: Record<string, any>;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get resource creation details from event
|
|
71
|
+
*/
|
|
72
|
+
export declare function getResourceCreationDetails(event: StoredEvent): ResourceCreationDetails | null;
|
|
73
|
+
export {};
|
|
74
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,KAAK,cAAc,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC9G,MAAM,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AACjD,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACpD,KAAK,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC;AAGtD,MAAM,MAAM,iBAAiB,GACzB,kBAAkB,GAClB,iBAAiB,GACjB,mBAAmB,GACnB,qBAAqB,GACrB,kBAAkB,GAClB,oBAAoB,GACpB,yBAAyB,GACzB,iBAAiB,GACjB,mBAAmB,GACnB,kBAAkB,GAClB,aAAa,GACb,cAAc,GACd,eAAe,GACf,YAAY,CAAC;AAEjB,KAAK,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,MAAM,CAAC;AAMrF;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,GAAG,IAAI,CAgClF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAGpG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,WAAW,CAShE;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,MAAM,CA0C9F;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,MAAM,CAwC5E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,GAAG,MAAM,CAc5E;AAUD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE,UAAU,EAAE,EAAE,wCAAwC;AACnE,SAAS,EAAE,WAAW,EAAE,GACvB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAiG7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,CAYhE;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,GAAG,uBAAuB,GAAG,IAAI,CAyB7F"}
|