annosearch 0.2.8 → 0.2.9
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 +24 -5
- package/dist/delete.js +4 -4
- package/dist/delete.js.map +1 -1
- package/dist/highlight.js +133 -0
- package/dist/highlight.js.map +1 -0
- package/dist/index-annotations-config.yaml +11 -0
- package/dist/index-autocomplete-config.yaml +10 -0
- package/dist/index-config.yaml +8 -0
- package/dist/init.js +6 -5
- package/dist/init.js.map +1 -1
- package/dist/search.js +3 -1
- package/dist/search.js.map +1 -1
- package/dist/utils.js +5 -1
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -44,6 +44,30 @@ After Quickwit finishes ingesting and indexing the data we can perform a search.
|
|
|
44
44
|
},
|
|
45
45
|
"type": "Annotation"
|
|
46
46
|
}
|
|
47
|
+
],
|
|
48
|
+
"annotations": [
|
|
49
|
+
{
|
|
50
|
+
"type": "AnnotationPage",
|
|
51
|
+
"items": [
|
|
52
|
+
{
|
|
53
|
+
"id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1/match-1",
|
|
54
|
+
"type": "Annotation",
|
|
55
|
+
"motivation": "highlighting",
|
|
56
|
+
"target": {
|
|
57
|
+
"type": "SpecificResource",
|
|
58
|
+
"source": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1",
|
|
59
|
+
"selector": [
|
|
60
|
+
{
|
|
61
|
+
"type": "TextQuoteSelector",
|
|
62
|
+
"prefix": "...rktplatz mit Gänseliesel ",
|
|
63
|
+
"exact": "Brunnen",
|
|
64
|
+
"suffix": ""
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
}
|
|
47
71
|
]
|
|
48
72
|
}
|
|
49
73
|
```
|
|
@@ -137,11 +161,6 @@ Configure AnnoSearch by setting the following environment variables:
|
|
|
137
161
|
|
|
138
162
|
Adjust these values as needed to customize AnnoSearch’s configuration and behavior.
|
|
139
163
|
|
|
140
|
-
## Todo
|
|
141
|
-
|
|
142
|
-
- Implement extended API responses
|
|
143
|
-
|
|
144
|
-
|
|
145
164
|
## License
|
|
146
165
|
|
|
147
166
|
This project is licensed under the MIT License.
|
package/dist/delete.js
CHANGED
|
@@ -14,12 +14,12 @@ const quickwit_1 = require("./quickwit");
|
|
|
14
14
|
const errors_1 = require("./errors");
|
|
15
15
|
const contentType = 'application/json';
|
|
16
16
|
const quickwitClient = (0, quickwit_1.createClient)(contentType);
|
|
17
|
-
function deleteIndexWorker(indexId) {
|
|
17
|
+
function deleteIndexWorker(indexId, type) {
|
|
18
18
|
return __awaiter(this, void 0, void 0, function* () {
|
|
19
19
|
if (!indexId.trim()) {
|
|
20
20
|
throw new errors_1.AnnoSearchValidationError('Invalid index parameter');
|
|
21
21
|
}
|
|
22
|
-
const response = yield quickwitClient.delete(`indexes/${indexId}`);
|
|
22
|
+
const response = yield quickwitClient.delete(`indexes/${indexId}_${type}`);
|
|
23
23
|
if (response.status === 200 && response.data) {
|
|
24
24
|
//console.log(`Index ${indexId} successfully deleted`);
|
|
25
25
|
}
|
|
@@ -30,8 +30,8 @@ function deleteIndexWorker(indexId) {
|
|
|
30
30
|
}
|
|
31
31
|
function deleteIndex(indexId) {
|
|
32
32
|
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
-
yield deleteIndexWorker(indexId
|
|
34
|
-
yield deleteIndexWorker(indexId
|
|
33
|
+
yield deleteIndexWorker(indexId, 'annotations');
|
|
34
|
+
yield deleteIndexWorker(indexId, 'autocomplete');
|
|
35
35
|
console.log(`Index ${indexId} successfully deleted`);
|
|
36
36
|
});
|
|
37
37
|
}
|
package/dist/delete.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../src/delete.ts"],"names":[],"mappings":";;;;;;;;;;;AAkBA,kCAIC;AAtBD,yCAA0C;AAC1C,qCAAqD;AAErD,MAAM,WAAW,GAAG,kBAAkB,CAAC;AACvC,MAAM,cAAc,GAAG,IAAA,uBAAY,EAAC,WAAW,CAAC,CAAC;AAEjD,SAAe,iBAAiB,CAAC,OAAe;;
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../src/delete.ts"],"names":[],"mappings":";;;;;;;;;;;AAkBA,kCAIC;AAtBD,yCAA0C;AAC1C,qCAAqD;AAErD,MAAM,WAAW,GAAG,kBAAkB,CAAC;AACvC,MAAM,cAAc,GAAG,IAAA,uBAAY,EAAC,WAAW,CAAC,CAAC;AAEjD,SAAe,iBAAiB,CAAC,OAAe,EAAE,IAAY;;QAC1D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,kCAAyB,CAAC,yBAAyB,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,WAAW,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC;QAC3E,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3C,uDAAuD;QAC3D,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,kCAAyB,CAAC,wBAAwB,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;CAAA;AAED,SAAsB,WAAW,CAAC,OAAe;;QAC7C,MAAM,iBAAiB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAChD,MAAM,iBAAiB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,uBAAuB,CAAC,CAAC;IACzD,CAAC;CAAA"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.highlightTerms = highlightTerms;
|
|
46
|
+
const fs_1 = require("fs");
|
|
47
|
+
const maniiifest_1 = require("maniiifest");
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
const utils_1 = require("./utils");
|
|
50
|
+
function readJsonFromFile(filePath) {
|
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
try {
|
|
53
|
+
const absolutePath = path.resolve(filePath);
|
|
54
|
+
const data = yield fs_1.promises.readFile(absolutePath, 'utf-8');
|
|
55
|
+
return JSON.parse(data);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.error(`Error reading JSON from file: ${error}`);
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function createItem(id, term, prefix, suffix, counter) {
|
|
64
|
+
return {
|
|
65
|
+
"id": `${id}/match-${counter}`,
|
|
66
|
+
"type": "Annotation",
|
|
67
|
+
"motivation": "highlighting",
|
|
68
|
+
"target": {
|
|
69
|
+
"type": "SpecificResource",
|
|
70
|
+
"source": `${id}`,
|
|
71
|
+
"selector": [
|
|
72
|
+
{
|
|
73
|
+
"type": "TextQuoteSelector",
|
|
74
|
+
"prefix": prefix,
|
|
75
|
+
"exact": term,
|
|
76
|
+
"suffix": suffix
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function highlightTerms(annotation_page, query, snippetLength = 25) {
|
|
83
|
+
const terms = query.split(/\s+/).map(utils_1.normalizeTerm).filter(Boolean); // Split into terms, normalize, remove empty ones
|
|
84
|
+
const annotationPageParser = new maniiifest_1.Maniiifest(annotation_page, "AnnotationPage");
|
|
85
|
+
const annotations = annotationPageParser.iterateAnnotationPageAnnotation();
|
|
86
|
+
let matchCounter = 1;
|
|
87
|
+
let annotationItems = [];
|
|
88
|
+
for (const annotation of annotations) {
|
|
89
|
+
const annotationParser = new maniiifest_1.Maniiifest(annotation, "Annotation");
|
|
90
|
+
const bodyParser = annotationParser.iterateAnnotationTextualBody();
|
|
91
|
+
for (const body of bodyParser) {
|
|
92
|
+
const bodyValue = body.value;
|
|
93
|
+
if (bodyValue) {
|
|
94
|
+
for (const term of terms) { // Process each term separately
|
|
95
|
+
const regex = new RegExp(`\\b(${term})\\b`, "gi"); // Global + Case-Insensitive
|
|
96
|
+
let match;
|
|
97
|
+
while ((match = regex.exec(bodyValue)) !== null) { // Iterate all matches for the term
|
|
98
|
+
const exactMatch = match[0]; // Capture the exact match from the original text
|
|
99
|
+
let prefix = bodyValue.substring(Math.max(0, match.index - snippetLength), match.index);
|
|
100
|
+
let suffix = bodyValue.substring(match.index + exactMatch.length, Math.min(bodyValue.length, match.index + exactMatch.length + snippetLength));
|
|
101
|
+
// Add ellipses if the prefix or suffix is truncated
|
|
102
|
+
if (match.index - snippetLength > 0) {
|
|
103
|
+
prefix = '...' + prefix;
|
|
104
|
+
}
|
|
105
|
+
if (match.index + exactMatch.length + snippetLength < bodyValue.length) {
|
|
106
|
+
suffix = suffix + '...';
|
|
107
|
+
}
|
|
108
|
+
const item = createItem(annotation.id, exactMatch, prefix, suffix, matchCounter++);
|
|
109
|
+
annotationItems.push(item);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
annotation_page.annotations = [];
|
|
116
|
+
annotation_page.annotations.push({
|
|
117
|
+
"type": "AnnotationPage",
|
|
118
|
+
"items": annotationItems
|
|
119
|
+
});
|
|
120
|
+
return annotation_page;
|
|
121
|
+
}
|
|
122
|
+
// Example usage with ts-node highlight.ts
|
|
123
|
+
// (async () => {
|
|
124
|
+
// const filePath = '../../maniiifest/test/samples/search.json';
|
|
125
|
+
// try {
|
|
126
|
+
// const jsonData = await readJsonFromFile(filePath);
|
|
127
|
+
// const res = highlightTerms(jsonData, 'london society');
|
|
128
|
+
// console.log(JSON.stringify(res, null, 2));
|
|
129
|
+
// } catch (error) {
|
|
130
|
+
// console.error('Failed to read JSON:', error);
|
|
131
|
+
// }
|
|
132
|
+
// })();
|
|
133
|
+
//# sourceMappingURL=highlight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"highlight.js","sourceRoot":"","sources":["../src/highlight.ts"],"names":[],"mappings":"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"}
|
package/dist/index-config.yaml
CHANGED
package/dist/init.js
CHANGED
|
@@ -30,14 +30,15 @@ function modifyConfig(config, indexId) {
|
|
|
30
30
|
config.index_id = indexId;
|
|
31
31
|
return yaml_1.default.stringify(config);
|
|
32
32
|
}
|
|
33
|
-
function initIndexWorker(indexId) {
|
|
33
|
+
function initIndexWorker(indexId, type) {
|
|
34
34
|
return __awaiter(this, void 0, void 0, function* () {
|
|
35
35
|
if (!indexId.trim()) {
|
|
36
36
|
throw new errors_1.AnnoSearchValidationError('Invalid index parameter');
|
|
37
37
|
}
|
|
38
|
-
const filePath = path_1.default.resolve(__dirname,
|
|
38
|
+
const filePath = path_1.default.resolve(__dirname, `index-${type}-config.yaml`);
|
|
39
39
|
const config = readYamlConfig(filePath);
|
|
40
|
-
const modifiedYamlData = modifyConfig(config, indexId);
|
|
40
|
+
const modifiedYamlData = modifyConfig(config, indexId + '_' + type);
|
|
41
|
+
console.log(modifiedYamlData);
|
|
41
42
|
const response = yield quickwitClient.post('indexes', modifiedYamlData);
|
|
42
43
|
if (response.status === 200 && response.data) {
|
|
43
44
|
//console.log(`Index ${indexId} created successfully`);
|
|
@@ -49,8 +50,8 @@ function initIndexWorker(indexId) {
|
|
|
49
50
|
}
|
|
50
51
|
function initIndex(indexId) {
|
|
51
52
|
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
-
yield initIndexWorker(indexId
|
|
53
|
-
yield initIndexWorker(indexId
|
|
53
|
+
yield initIndexWorker(indexId, 'annotations');
|
|
54
|
+
yield initIndexWorker(indexId, 'autocomplete');
|
|
54
55
|
console.log(`Index ${indexId} created successfully`);
|
|
55
56
|
});
|
|
56
57
|
}
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAuCA,8BAIC;AA3CD,4CAAoB;AACpB,gDAAwB;AACxB,gDAAwB;AACxB,yCAA0C;AAC1C,qCAAqD;AAErD,MAAM,WAAW,GAAG,kBAAkB,CAAC;AACvC,MAAM,cAAc,GAAG,IAAA,uBAAY,EAAC,WAAW,CAAC,CAAC;AAEjD,2CAA2C;AAC3C,SAAS,cAAc,CAAC,QAAgB;IACpC,MAAM,QAAQ,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnD,OAAO,cAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,kEAAkE;AAClE,SAAS,YAAY,CAAC,MAAW,EAAE,OAAe;IAC9C,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,OAAO,cAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAGD,SAAe,eAAe,CAAC,OAAe,EAAE,IAAY;;QACxD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,kCAAyB,CAAC,yBAAyB,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,IAAI,cAAc,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACxE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3C,uDAAuD;QAC3D,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,kCAAyB,CAAC,wBAAwB,CAAC,CAAC;QAClE,CAAC;IAEL,CAAC;CAAA;AAED,SAAsB,SAAS,CAAC,OAAe;;QAC3C,MAAM,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC9C,MAAM,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,uBAAuB,CAAC,CAAC;IACzD,CAAC;CAAA"}
|
package/dist/search.js
CHANGED
|
@@ -15,6 +15,7 @@ const quickwit_1 = require("./quickwit");
|
|
|
15
15
|
const errors_1 = require("./errors");
|
|
16
16
|
const iiif_1 = require("./iiif");
|
|
17
17
|
const validate_1 = require("./validate");
|
|
18
|
+
const highlight_1 = require("./highlight");
|
|
18
19
|
const contentType = 'application/json';
|
|
19
20
|
const quickwitClient = (0, quickwit_1.createClient)(contentType);
|
|
20
21
|
function buildDateQueryFromString(dateRangesString) {
|
|
@@ -67,7 +68,8 @@ function searchIndex(indexId, q, motivation, maxHits, page, searchUrl, date, use
|
|
|
67
68
|
start_offset: startOffset,
|
|
68
69
|
});
|
|
69
70
|
if (response.status === 200 && response.data) {
|
|
70
|
-
|
|
71
|
+
const result = (0, iiif_1.makeSearchResponse)(indexId, response.data, searchUrl, q, motivation, user, maxHits, page, date);
|
|
72
|
+
return (0, highlight_1.highlightTerms)(result, q);
|
|
71
73
|
}
|
|
72
74
|
else {
|
|
73
75
|
throw new errors_1.AnnoSearchValidationError('Failed to search index');
|
package/dist/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.js
CHANGED
|
@@ -116,10 +116,14 @@ function createJsonl(data) {
|
|
|
116
116
|
return JSON.stringify(data) + '\n';
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Normalize a term by trimming whitespace, converting to lowercase,
|
|
121
|
+
* and removing non-alphanumeric characters from the start and end.
|
|
122
|
+
*/
|
|
119
123
|
function normalizeTerm(term) {
|
|
120
124
|
return term
|
|
121
125
|
.trim()
|
|
122
126
|
.toLowerCase()
|
|
123
|
-
.replace(
|
|
127
|
+
.replace(/^[^\p{L}\p{N}]+|[^\p{L}\p{N}]+$/gu, "");
|
|
124
128
|
}
|
|
125
129
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAQA,8BAEC;AAGD,4BAoBC;AAKD,kCAGC;AAED,wCAwCC;AAID,8BAOC;AAED,kCAMC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "annosearch",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.9",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist/**/*"
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"axios": "^1.7.9",
|
|
35
35
|
"express": "^4.21.2",
|
|
36
36
|
"jest": "^29.7.0",
|
|
37
|
-
"maniiifest": "^1.3.
|
|
37
|
+
"maniiifest": "^1.3.8",
|
|
38
38
|
"nock": "^13.5.6",
|
|
39
39
|
"pino": "^9.5.0",
|
|
40
40
|
"pino-http": "^10.3.0",
|