cocoda-sdk 3.3.3 → 3.4.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 +3 -1
- package/dist/cjs/index.cjs +1086 -35
- package/dist/cocoda-sdk.js +16 -11
- package/dist/cocoda-sdk.js.LICENSES.txt +178 -4
- package/dist/cocoda-sdk.js.map +4 -4
- package/dist/esm/errors/index.js +22 -0
- package/dist/esm/lib/CocodaSDK.js +120 -17
- package/dist/esm/providers/base-provider.js +88 -0
- package/dist/esm/providers/concept-api-provider.js +108 -0
- package/dist/esm/providers/index.js +2 -0
- package/dist/esm/providers/label-search-suggestion-provider.js +39 -0
- package/dist/esm/providers/lobid-api-provider.js +239 -0
- package/dist/esm/providers/loc-api-provider.js +58 -0
- package/dist/esm/providers/local-mappings-provider.js +60 -3
- package/dist/esm/providers/mappings-api-provider.js +116 -0
- package/dist/esm/providers/mycore-provider.js +42 -0
- package/dist/esm/providers/occurrences-api-provider.js +32 -0
- package/dist/esm/providers/reconciliation-api-provider.js +21 -0
- package/dist/esm/providers/skohub-provider.js +26 -0
- package/dist/esm/providers/skosmos-api-provider.js +89 -0
- package/dist/esm/utils/index.js +8 -0
- package/package.json +8 -8
package/dist/cjs/index.cjs
CHANGED
|
@@ -17,6 +17,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
return to;
|
|
18
18
|
};
|
|
19
19
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
24
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
25
|
mod
|
|
22
26
|
));
|
|
@@ -29,6 +33,7 @@ __export(src_exports, {
|
|
|
29
33
|
CocodaSDK: () => CocodaSDK,
|
|
30
34
|
ConceptApiProvider: () => ConceptApiProvider,
|
|
31
35
|
LabelSearchSuggestionProvider: () => LabelSearchSuggestionProvider,
|
|
36
|
+
LobidApiProvider: () => LobidApiProvider,
|
|
32
37
|
LocApiProvider: () => LocApiProvider,
|
|
33
38
|
LocalMappingsProvider: () => LocalMappingsProvider,
|
|
34
39
|
MappingsApiProvider: () => MappingsApiProvider,
|
|
@@ -58,6 +63,14 @@ __export(errors_exports, {
|
|
|
58
63
|
NetworkError: () => NetworkError
|
|
59
64
|
});
|
|
60
65
|
var CDKError = class extends Error {
|
|
66
|
+
/**
|
|
67
|
+
* CDKError constructor.
|
|
68
|
+
*
|
|
69
|
+
* @param {Object} options
|
|
70
|
+
* @param {string} [options.message=""] message for the error
|
|
71
|
+
* @param {Error} [options.relatedError=null] related error
|
|
72
|
+
* @param {number} [options.code] HTTP status code for the error
|
|
73
|
+
*/
|
|
61
74
|
constructor({ message = "", relatedError = null, code = null } = {}) {
|
|
62
75
|
if (!message && relatedError && relatedError.message) {
|
|
63
76
|
message = relatedError.message;
|
|
@@ -69,12 +82,26 @@ var CDKError = class extends Error {
|
|
|
69
82
|
}
|
|
70
83
|
};
|
|
71
84
|
var MethodNotImplementedError = class extends CDKError {
|
|
85
|
+
/**
|
|
86
|
+
* MethodNotImplementedError constructor.
|
|
87
|
+
*
|
|
88
|
+
* @param {Object} config
|
|
89
|
+
* @param {string} config.method method that this error refers to
|
|
90
|
+
* @param {string} [config.message=""] message for the error
|
|
91
|
+
*/
|
|
72
92
|
constructor({ method, message = "", ...options }) {
|
|
73
93
|
options.message = `Method not implemented: ${method} (${message})`;
|
|
74
94
|
super(options);
|
|
75
95
|
}
|
|
76
96
|
};
|
|
77
97
|
var InvalidOrMissingParameterError = class extends CDKError {
|
|
98
|
+
/**
|
|
99
|
+
* InvalidOrMissingParameterError constructor.
|
|
100
|
+
*
|
|
101
|
+
* @param {Object} config
|
|
102
|
+
* @param {string} config.parameter parameter that this error refers to
|
|
103
|
+
* @param {string} [config.message=""] message for the error
|
|
104
|
+
*/
|
|
78
105
|
constructor({ parameter, message = "", ...options }) {
|
|
79
106
|
options.message = `Invalid or missing parameter: ${parameter} (${message})`;
|
|
80
107
|
super(options);
|
|
@@ -94,7 +121,7 @@ var InvalidProviderError = class extends CDKError {
|
|
|
94
121
|
};
|
|
95
122
|
|
|
96
123
|
// src/lib/CocodaSDK.js
|
|
97
|
-
var
|
|
124
|
+
var import_axios4 = __toESM(require("axios"), 1);
|
|
98
125
|
|
|
99
126
|
// src/utils/lodash.js
|
|
100
127
|
var import_get = __toESM(require("lodash/get.js"), 1);
|
|
@@ -114,7 +141,7 @@ var import_omit = __toESM(require("lodash/omit.js"), 1);
|
|
|
114
141
|
var import_concat = __toESM(require("lodash/concat.js"), 1);
|
|
115
142
|
|
|
116
143
|
// src/lib/CocodaSDK.js
|
|
117
|
-
var
|
|
144
|
+
var import_jskos_tools13 = __toESM(require("jskos-tools"), 1);
|
|
118
145
|
|
|
119
146
|
// src/providers/index.js
|
|
120
147
|
var providers_exports = {};
|
|
@@ -122,6 +149,7 @@ __export(providers_exports, {
|
|
|
122
149
|
BaseProvider: () => BaseProvider,
|
|
123
150
|
ConceptApiProvider: () => ConceptApiProvider,
|
|
124
151
|
LabelSearchSuggestionProvider: () => LabelSearchSuggestionProvider,
|
|
152
|
+
LobidApiProvider: () => LobidApiProvider,
|
|
125
153
|
LocApiProvider: () => LocApiProvider,
|
|
126
154
|
LocalMappingsProvider: () => LocalMappingsProvider,
|
|
127
155
|
MappingsApiProvider: () => MappingsApiProvider,
|
|
@@ -145,6 +173,7 @@ __export(utils_exports, {
|
|
|
145
173
|
withCustomProps: () => withCustomProps
|
|
146
174
|
});
|
|
147
175
|
var requestMethods = [
|
|
176
|
+
// General
|
|
148
177
|
{
|
|
149
178
|
method: "getRegistries",
|
|
150
179
|
fallback: [],
|
|
@@ -183,6 +212,7 @@ var requestMethods = [
|
|
|
183
212
|
fallback: [],
|
|
184
213
|
type: "Occurrences"
|
|
185
214
|
},
|
|
215
|
+
// Concepts
|
|
186
216
|
{
|
|
187
217
|
method: "getTop",
|
|
188
218
|
fallback: [],
|
|
@@ -208,6 +238,7 @@ var requestMethods = [
|
|
|
208
238
|
fallback: [],
|
|
209
239
|
type: "Concepts"
|
|
210
240
|
},
|
|
241
|
+
// Mappings
|
|
211
242
|
{
|
|
212
243
|
method: "getMapping",
|
|
213
244
|
fallback: null,
|
|
@@ -246,6 +277,11 @@ var requestMethods = [
|
|
|
246
277
|
method: "deleteMappings",
|
|
247
278
|
fallback: []
|
|
248
279
|
},
|
|
280
|
+
// Annotations
|
|
281
|
+
// {
|
|
282
|
+
// method: "getAnnotation",
|
|
283
|
+
// fallback: "",
|
|
284
|
+
// },
|
|
249
285
|
{
|
|
250
286
|
method: "getAnnotations",
|
|
251
287
|
fallback: [],
|
|
@@ -308,9 +344,15 @@ var listOfCapabilities = [
|
|
|
308
344
|
|
|
309
345
|
// src/providers/base-provider.js
|
|
310
346
|
var BaseProvider = class {
|
|
347
|
+
/**
|
|
348
|
+
* Provider constructor.
|
|
349
|
+
*
|
|
350
|
+
* @param {Object} registry the registry for this provider
|
|
351
|
+
*/
|
|
311
352
|
constructor(registry = {}) {
|
|
312
353
|
this._jskos = registry;
|
|
313
354
|
this.axios = import_axios.default.create({
|
|
355
|
+
// TODO: Decide on timeout value
|
|
314
356
|
timeout: 2e4
|
|
315
357
|
});
|
|
316
358
|
this._path = typeof window !== "undefined" && window.location.pathname;
|
|
@@ -324,6 +366,7 @@ var BaseProvider = class {
|
|
|
324
366
|
this._repeating = [];
|
|
325
367
|
this._api = {
|
|
326
368
|
status: registry.status,
|
|
369
|
+
// If `schemes` on registry is an array, remove it because we're only keeping it in this._jskos.schemes
|
|
327
370
|
schemes: Array.isArray(registry.schemes) ? void 0 : registry.schemes,
|
|
328
371
|
top: registry.top,
|
|
329
372
|
data: registry.data,
|
|
@@ -469,6 +512,7 @@ var BaseProvider = class {
|
|
|
469
512
|
};
|
|
470
513
|
}
|
|
471
514
|
}
|
|
515
|
+
// Expose some properties from original registry object as getters
|
|
472
516
|
get uri() {
|
|
473
517
|
return this._jskos.uri;
|
|
474
518
|
}
|
|
@@ -490,6 +534,11 @@ var BaseProvider = class {
|
|
|
490
534
|
get stored() {
|
|
491
535
|
return this._jskos.stored !== void 0 ? this._jskos.stored : this.constructor.stored;
|
|
492
536
|
}
|
|
537
|
+
/**
|
|
538
|
+
* Load data about registry via the status endpoint.
|
|
539
|
+
*
|
|
540
|
+
* @returns {Promise} Promise that resolves when initialization is complete.
|
|
541
|
+
*/
|
|
493
542
|
async init() {
|
|
494
543
|
if (this._init) {
|
|
495
544
|
return this._init;
|
|
@@ -523,17 +572,48 @@ var BaseProvider = class {
|
|
|
523
572
|
})();
|
|
524
573
|
return this._init;
|
|
525
574
|
}
|
|
575
|
+
/**
|
|
576
|
+
* Preparation to be executed before init. Should be overwritten by subclasses.
|
|
577
|
+
*
|
|
578
|
+
* @private
|
|
579
|
+
*/
|
|
526
580
|
_prepare() {
|
|
527
581
|
}
|
|
582
|
+
/**
|
|
583
|
+
* Setup to be executed after init. Should be overwritten by subclasses.
|
|
584
|
+
*
|
|
585
|
+
* @private
|
|
586
|
+
*/
|
|
528
587
|
_setup() {
|
|
529
588
|
}
|
|
589
|
+
/**
|
|
590
|
+
* Returns a source for a axios cancel token.
|
|
591
|
+
*
|
|
592
|
+
* @returns {Object} axios cancel token source
|
|
593
|
+
*/
|
|
530
594
|
getCancelTokenSource() {
|
|
531
595
|
return import_axios.default.CancelToken.source();
|
|
532
596
|
}
|
|
597
|
+
/**
|
|
598
|
+
* Sets authentication credentials.
|
|
599
|
+
*
|
|
600
|
+
* @param {Object} options
|
|
601
|
+
* @param {string} options.key public key of login-server instance the user is authorized for
|
|
602
|
+
* @param {string} options.bearerToken token that is sent with each request
|
|
603
|
+
*/
|
|
533
604
|
setAuth({ key = this._auth.key, bearerToken = this._auth.bearerToken }) {
|
|
534
605
|
this._auth.key = key;
|
|
535
606
|
this._auth.bearerToken = bearerToken;
|
|
536
607
|
}
|
|
608
|
+
/**
|
|
609
|
+
* Sets retry configuration.
|
|
610
|
+
*
|
|
611
|
+
* @param {Object} config
|
|
612
|
+
* @param {string[]} [config.methods=["get", "head", "options"]] HTTP methods to retry (lowercase)
|
|
613
|
+
* @param {number[]} [config.statusCodes=[401, 403]] status codes to retry
|
|
614
|
+
* @param {number} [config.count=3] maximum number of retries
|
|
615
|
+
* @param {number|Function} [config.delay=300*count] a delay in ms or a function that takes the number of current retries and returns a delay in ms
|
|
616
|
+
*/
|
|
537
617
|
setRetryConfig(config = {}) {
|
|
538
618
|
this._retryConfig = Object.assign({
|
|
539
619
|
methods: ["get", "head", "options"],
|
|
@@ -544,6 +624,16 @@ var BaseProvider = class {
|
|
|
544
624
|
}
|
|
545
625
|
}, config);
|
|
546
626
|
}
|
|
627
|
+
/**
|
|
628
|
+
* Returns whether a user is authorized for a certain request.
|
|
629
|
+
*
|
|
630
|
+
* @param {Object} options
|
|
631
|
+
* @param {string} options.type type of item (e.g. mappings)
|
|
632
|
+
* @param {string} options.action action to be performed (read/create/update/delete)
|
|
633
|
+
* @param {Object} options.user user object
|
|
634
|
+
* @param {boolean} [options.crossUser] whether the request is a crossUser request (i.e. updading/deleting another user's item)
|
|
635
|
+
* @returns {boolean}
|
|
636
|
+
*/
|
|
547
637
|
isAuthorizedFor({ type, action, user, crossUser }) {
|
|
548
638
|
if (action == "read" && this.has[type] === true) {
|
|
549
639
|
return true;
|
|
@@ -578,6 +668,12 @@ var BaseProvider = class {
|
|
|
578
668
|
}
|
|
579
669
|
return !!this.has[type][action];
|
|
580
670
|
}
|
|
671
|
+
/**
|
|
672
|
+
* Returns a boolean whether a certain target scheme is supported or not.
|
|
673
|
+
*
|
|
674
|
+
* @param {Object} scheme
|
|
675
|
+
* @returns {boolean}
|
|
676
|
+
*/
|
|
581
677
|
supportsScheme(scheme) {
|
|
582
678
|
if (!scheme) {
|
|
583
679
|
return false;
|
|
@@ -671,6 +767,13 @@ var BaseProvider = class {
|
|
|
671
767
|
adjustMappings(mappings) {
|
|
672
768
|
return withCustomProps(mappings.map((mapping) => this.adjustMapping(mapping)), mappings);
|
|
673
769
|
}
|
|
770
|
+
/**
|
|
771
|
+
* POSTs multiple mappings. Do not override in subclass!
|
|
772
|
+
*
|
|
773
|
+
* @param {Object} config
|
|
774
|
+
* @param {Array} config.mappings array of mapping objects
|
|
775
|
+
* @returns {Object[]} array of created mapping objects; in case of failure, consult the `_errors` property on the array at the index of the failed request
|
|
776
|
+
*/
|
|
674
777
|
async postMappings({ mappings, ...config } = {}) {
|
|
675
778
|
if (!mappings || !mappings.length) {
|
|
676
779
|
throw new InvalidOrMissingParameterError({ parameter: "mappings" });
|
|
@@ -682,6 +785,13 @@ var BaseProvider = class {
|
|
|
682
785
|
config
|
|
683
786
|
});
|
|
684
787
|
}
|
|
788
|
+
/**
|
|
789
|
+
* DELETEs multiple mappings. Do not override in subclass!
|
|
790
|
+
*
|
|
791
|
+
* @param {Object} config
|
|
792
|
+
* @param {Array} config.mappings array of mapping objects
|
|
793
|
+
* @returns {Object[]} array of results (`true` if successful); in case of failure, consult the `_errors` property on the array at the index of the failed request
|
|
794
|
+
*/
|
|
685
795
|
async deleteMappings({ mappings, ...config } = {}) {
|
|
686
796
|
if (!mappings || !mappings.length) {
|
|
687
797
|
throw new InvalidOrMissingParameterError({ parameter: "mappings" });
|
|
@@ -693,6 +803,20 @@ var BaseProvider = class {
|
|
|
693
803
|
config
|
|
694
804
|
});
|
|
695
805
|
}
|
|
806
|
+
/**
|
|
807
|
+
* Calls a method that is for only one item for an array of items. Returns an array of results.
|
|
808
|
+
*
|
|
809
|
+
* If there is an error, that index in the result array will be `null`. There is a property `_errors` on the result array that will contain the respective error at the correct index.
|
|
810
|
+
*
|
|
811
|
+
* @param {Object} options
|
|
812
|
+
* @param {string} options.method instance method to call (e.g. `postMapping`)
|
|
813
|
+
* @param {Object[]} options.items items to call the method for
|
|
814
|
+
* @param {string} options.itemProperty the property name for the item when calling the method (e.g. `mapping`)
|
|
815
|
+
* @param {Object} options.config other properties to pass to the method call
|
|
816
|
+
* @returns {any[]} result array with values returned from individual method calls
|
|
817
|
+
*
|
|
818
|
+
* @private
|
|
819
|
+
*/
|
|
696
820
|
async _callHelperForArrayWrappers({ method, items, itemProperty, config }) {
|
|
697
821
|
const errors = [];
|
|
698
822
|
const resultItems = await Promise.all(items.map(async (item) => {
|
|
@@ -716,6 +840,9 @@ var import_localforage = __toESM(require("localforage"), 1);
|
|
|
716
840
|
var import_uuid = require("uuid");
|
|
717
841
|
var uriPrefix = "urn:uuid:";
|
|
718
842
|
var LocalMappingsProvider = class extends BaseProvider {
|
|
843
|
+
/**
|
|
844
|
+
* @private
|
|
845
|
+
*/
|
|
719
846
|
_prepare() {
|
|
720
847
|
this.has.mappings = {
|
|
721
848
|
read: true,
|
|
@@ -727,6 +854,9 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
727
854
|
this.has[c] = false;
|
|
728
855
|
});
|
|
729
856
|
}
|
|
857
|
+
/**
|
|
858
|
+
* @private
|
|
859
|
+
*/
|
|
730
860
|
_setup() {
|
|
731
861
|
this.queue = [];
|
|
732
862
|
this.localStorageKey = "cocoda-mappings--" + this._path;
|
|
@@ -768,6 +898,14 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
768
898
|
}
|
|
769
899
|
return false;
|
|
770
900
|
}
|
|
901
|
+
/**
|
|
902
|
+
* Returns a Promise that returns an object { mappings, done } with the local mappings and a done function that is supposed to be called when the transaction is finished.
|
|
903
|
+
* This prevents conflicts when saveMapping is called multiple times simultaneously.
|
|
904
|
+
*
|
|
905
|
+
* TODO: There might be a better solution for this...
|
|
906
|
+
*
|
|
907
|
+
* @private
|
|
908
|
+
*/
|
|
771
909
|
_getMappingsQueue() {
|
|
772
910
|
let last2 = import_last.default(this.queue) || Promise.resolve();
|
|
773
911
|
return new Promise((resolve) => {
|
|
@@ -793,6 +931,13 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
793
931
|
});
|
|
794
932
|
});
|
|
795
933
|
}
|
|
934
|
+
/**
|
|
935
|
+
* Returns a single mapping.
|
|
936
|
+
*
|
|
937
|
+
* @param {Object} config
|
|
938
|
+
* @param {Object} config.mapping JSKOS mapping
|
|
939
|
+
* @returns {Object} JSKOS mapping object
|
|
940
|
+
*/
|
|
796
941
|
async getMapping({ mapping, ...config }) {
|
|
797
942
|
config._raw = true;
|
|
798
943
|
if (!mapping || !mapping.uri) {
|
|
@@ -800,6 +945,14 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
800
945
|
}
|
|
801
946
|
return (await this.getMappings({ ...config, uri: mapping.uri }))[0];
|
|
802
947
|
}
|
|
948
|
+
/**
|
|
949
|
+
* Returns a list of local mappings.
|
|
950
|
+
*
|
|
951
|
+
* TODO: Add support for sort (`created` or `modified`) and order (`asc` or `desc`).
|
|
952
|
+
* TODO: Clean up and use async/await
|
|
953
|
+
*
|
|
954
|
+
* @returns {Object[]} array of JSKOS mapping objects
|
|
955
|
+
*/
|
|
803
956
|
async getMappings({ from, fromScheme, to, toScheme, creator, type, partOf, offset, limit, direction, mode, identifier, uri } = {}) {
|
|
804
957
|
let params = {};
|
|
805
958
|
if (from) {
|
|
@@ -945,6 +1098,13 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
945
1098
|
return mappings;
|
|
946
1099
|
});
|
|
947
1100
|
}
|
|
1101
|
+
/**
|
|
1102
|
+
* Creates a mapping.
|
|
1103
|
+
*
|
|
1104
|
+
* @param {Object} config
|
|
1105
|
+
* @param {Object} config.mapping JSKOS mapping
|
|
1106
|
+
* @returns {Object} JSKOS mapping object
|
|
1107
|
+
*/
|
|
948
1108
|
async postMapping({ mapping }) {
|
|
949
1109
|
if (!mapping) {
|
|
950
1110
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -964,7 +1124,7 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
964
1124
|
throw new InvalidOrMissingParameterError({ parameter: "mapping", message: "Duplicate URI" });
|
|
965
1125
|
}
|
|
966
1126
|
if (!mapping.created) {
|
|
967
|
-
mapping.created = new Date().toISOString();
|
|
1127
|
+
mapping.created = (/* @__PURE__ */ new Date()).toISOString();
|
|
968
1128
|
}
|
|
969
1129
|
if (!mapping.modified) {
|
|
970
1130
|
mapping.modified = mapping.created;
|
|
@@ -980,6 +1140,13 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
980
1140
|
throw error;
|
|
981
1141
|
}
|
|
982
1142
|
}
|
|
1143
|
+
/**
|
|
1144
|
+
* Overwrites a mapping.
|
|
1145
|
+
*
|
|
1146
|
+
* @param {Object} config
|
|
1147
|
+
* @param {Object} config.mapping JSKOS mapping
|
|
1148
|
+
* @returns {Object} JSKOS mapping object
|
|
1149
|
+
*/
|
|
983
1150
|
async putMapping({ mapping }) {
|
|
984
1151
|
if (!mapping) {
|
|
985
1152
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -993,7 +1160,7 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
993
1160
|
if (!mapping.created) {
|
|
994
1161
|
mapping.created = localMappings[index].created;
|
|
995
1162
|
}
|
|
996
|
-
mapping.modified = new Date().toISOString();
|
|
1163
|
+
mapping.modified = (/* @__PURE__ */ new Date()).toISOString();
|
|
997
1164
|
localMappings[index] = mapping;
|
|
998
1165
|
localMappings = localMappings.map((mapping2) => import_jskos_tools2.default.minifyMapping(mapping2));
|
|
999
1166
|
try {
|
|
@@ -1005,6 +1172,13 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
1005
1172
|
throw error;
|
|
1006
1173
|
}
|
|
1007
1174
|
}
|
|
1175
|
+
/**
|
|
1176
|
+
* Patches a mapping.
|
|
1177
|
+
*
|
|
1178
|
+
* @param {Object} config
|
|
1179
|
+
* @param {Object} mapping JSKOS mapping (or part of mapping)
|
|
1180
|
+
* @returns {Object} JSKOS mapping object
|
|
1181
|
+
*/
|
|
1008
1182
|
async patchMapping({ mapping }) {
|
|
1009
1183
|
if (!mapping) {
|
|
1010
1184
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1018,7 +1192,7 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
1018
1192
|
if (!mapping.created) {
|
|
1019
1193
|
mapping.created = localMappings[index].created;
|
|
1020
1194
|
}
|
|
1021
|
-
mapping.modified = new Date().toISOString();
|
|
1195
|
+
mapping.modified = (/* @__PURE__ */ new Date()).toISOString();
|
|
1022
1196
|
localMappings[index] = Object.assign(localMappings[index], mapping);
|
|
1023
1197
|
localMappings = localMappings.map((mapping2) => import_jskos_tools2.default.minifyMapping(mapping2));
|
|
1024
1198
|
try {
|
|
@@ -1030,6 +1204,13 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
1030
1204
|
throw error;
|
|
1031
1205
|
}
|
|
1032
1206
|
}
|
|
1207
|
+
/**
|
|
1208
|
+
* Removes a mapping from local storage.
|
|
1209
|
+
*
|
|
1210
|
+
* @param {Object} config
|
|
1211
|
+
* @param {Object} mapping JSKOS mapping
|
|
1212
|
+
* @returns {boolean} boolean whether deleting the mapping was successful
|
|
1213
|
+
*/
|
|
1033
1214
|
async deleteMapping({ mapping }) {
|
|
1034
1215
|
if (!mapping) {
|
|
1035
1216
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1053,6 +1234,9 @@ LocalMappingsProvider.stored = true;
|
|
|
1053
1234
|
// src/providers/mappings-api-provider.js
|
|
1054
1235
|
var import_jskos_tools3 = __toESM(require("jskos-tools"), 1);
|
|
1055
1236
|
var MappingsApiProvider = class extends BaseProvider {
|
|
1237
|
+
/**
|
|
1238
|
+
* @private
|
|
1239
|
+
*/
|
|
1056
1240
|
_prepare() {
|
|
1057
1241
|
if (this._api.api && this._api.status === void 0) {
|
|
1058
1242
|
this._api.status = concatUrl(this._api.api, "/status");
|
|
@@ -1064,6 +1248,9 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1064
1248
|
this.has[c] = false;
|
|
1065
1249
|
});
|
|
1066
1250
|
}
|
|
1251
|
+
/**
|
|
1252
|
+
* @private
|
|
1253
|
+
*/
|
|
1067
1254
|
_setup() {
|
|
1068
1255
|
if (this._api.api) {
|
|
1069
1256
|
const endpoints = {
|
|
@@ -1104,6 +1291,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1104
1291
|
properties: "annotations"
|
|
1105
1292
|
};
|
|
1106
1293
|
}
|
|
1294
|
+
/**
|
|
1295
|
+
* Returns a single mapping.
|
|
1296
|
+
*
|
|
1297
|
+
* @param {Object} config
|
|
1298
|
+
* @param {Object} config.mapping JSKOS mapping
|
|
1299
|
+
* @returns {Object} JSKOS mapping object
|
|
1300
|
+
*/
|
|
1107
1301
|
async getMapping({ mapping, ...config }) {
|
|
1108
1302
|
if (!mapping) {
|
|
1109
1303
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1127,6 +1321,12 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1127
1321
|
throw error;
|
|
1128
1322
|
}
|
|
1129
1323
|
}
|
|
1324
|
+
/**
|
|
1325
|
+
* Returns a list of mappings.
|
|
1326
|
+
*
|
|
1327
|
+
* @param {Object} config request config with parameters
|
|
1328
|
+
* @returns {Object[]} array of JSKOS mapping objects
|
|
1329
|
+
*/
|
|
1130
1330
|
async getMappings({ from, fromScheme, to, toScheme, creator, type, partOf, offset, limit, direction, mode, identifier, cardinality, annotatedBy, annotatedFor, annotatedWith, sort, order, ...config }) {
|
|
1131
1331
|
let params = {}, url = this._api.mappings;
|
|
1132
1332
|
if (from) {
|
|
@@ -1194,6 +1394,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1194
1394
|
}
|
|
1195
1395
|
});
|
|
1196
1396
|
}
|
|
1397
|
+
/**
|
|
1398
|
+
* Creates a mapping.
|
|
1399
|
+
*
|
|
1400
|
+
* @param {Object} config
|
|
1401
|
+
* @param {Object} config.mapping JSKOS mapping
|
|
1402
|
+
* @returns {Object} JSKOS mapping object
|
|
1403
|
+
*/
|
|
1197
1404
|
async postMapping({ mapping, ...config }) {
|
|
1198
1405
|
if (!mapping) {
|
|
1199
1406
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1211,6 +1418,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1211
1418
|
}
|
|
1212
1419
|
});
|
|
1213
1420
|
}
|
|
1421
|
+
/**
|
|
1422
|
+
* Overwrites a mapping.
|
|
1423
|
+
*
|
|
1424
|
+
* @param {Object} config
|
|
1425
|
+
* @param {Object} config.mapping JSKOS mapping
|
|
1426
|
+
* @returns {Object} JSKOS mapping object
|
|
1427
|
+
*/
|
|
1214
1428
|
async putMapping({ mapping, ...config }) {
|
|
1215
1429
|
if (!mapping) {
|
|
1216
1430
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1232,6 +1446,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1232
1446
|
}
|
|
1233
1447
|
});
|
|
1234
1448
|
}
|
|
1449
|
+
/**
|
|
1450
|
+
* Patches a mapping.
|
|
1451
|
+
*
|
|
1452
|
+
* @param {Object} config
|
|
1453
|
+
* @param {Object} config.mapping JSKOS mapping (or part of mapping)
|
|
1454
|
+
* @returns {Object} JSKOS mapping object
|
|
1455
|
+
*/
|
|
1235
1456
|
async patchMapping({ mapping, ...config }) {
|
|
1236
1457
|
if (!mapping) {
|
|
1237
1458
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1251,6 +1472,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1251
1472
|
}
|
|
1252
1473
|
});
|
|
1253
1474
|
}
|
|
1475
|
+
/**
|
|
1476
|
+
* Deletes a mapping.
|
|
1477
|
+
*
|
|
1478
|
+
* @param {Object} config
|
|
1479
|
+
* @param {Object} config.mapping JSKOS mapping
|
|
1480
|
+
* @returns {boolean} `true` if deletion was successful
|
|
1481
|
+
*/
|
|
1254
1482
|
async deleteMapping({ mapping, ...config }) {
|
|
1255
1483
|
if (!mapping) {
|
|
1256
1484
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1266,6 +1494,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1266
1494
|
});
|
|
1267
1495
|
return true;
|
|
1268
1496
|
}
|
|
1497
|
+
/**
|
|
1498
|
+
* Returns a list of annotations.
|
|
1499
|
+
*
|
|
1500
|
+
* @param {Object} config
|
|
1501
|
+
* @param {string} [config.target] target URI
|
|
1502
|
+
* @returns {Object[]} array of JSKOS annotation objects
|
|
1503
|
+
*/
|
|
1269
1504
|
async getAnnotations({ target, ...config }) {
|
|
1270
1505
|
if (target) {
|
|
1271
1506
|
import_set.default(config, "params.target", target);
|
|
@@ -1276,6 +1511,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1276
1511
|
url: this._api.annotations
|
|
1277
1512
|
});
|
|
1278
1513
|
}
|
|
1514
|
+
/**
|
|
1515
|
+
* Creates an annotation.
|
|
1516
|
+
*
|
|
1517
|
+
* @param {Object} config
|
|
1518
|
+
* @param {Object} config.annotation JSKOS annotation
|
|
1519
|
+
* @returns {Object} JSKOS annotation object
|
|
1520
|
+
*/
|
|
1279
1521
|
async postAnnotation({ annotation, ...config }) {
|
|
1280
1522
|
return this.axios({
|
|
1281
1523
|
...config,
|
|
@@ -1284,6 +1526,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1284
1526
|
data: annotation
|
|
1285
1527
|
});
|
|
1286
1528
|
}
|
|
1529
|
+
/**
|
|
1530
|
+
* Overwrites an annotation.
|
|
1531
|
+
*
|
|
1532
|
+
* @param {Object} config
|
|
1533
|
+
* @param {Object} config.annotation JSKOS annotation
|
|
1534
|
+
* @returns {Object} JSKOS annotation object
|
|
1535
|
+
*/
|
|
1287
1536
|
async putAnnotation({ annotation, ...config }) {
|
|
1288
1537
|
const uri = annotation.id;
|
|
1289
1538
|
if (!uri || !uri.startsWith(this._api.annotations)) {
|
|
@@ -1296,6 +1545,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1296
1545
|
data: annotation
|
|
1297
1546
|
});
|
|
1298
1547
|
}
|
|
1548
|
+
/**
|
|
1549
|
+
* Patches an annotation.
|
|
1550
|
+
*
|
|
1551
|
+
* @param {Object} config
|
|
1552
|
+
* @param {Object} config.annotation JSKOS annotation
|
|
1553
|
+
* @returns {Object} JSKOS annotation object
|
|
1554
|
+
*/
|
|
1299
1555
|
async patchAnnotation({ annotation, ...config }) {
|
|
1300
1556
|
const uri = annotation.id;
|
|
1301
1557
|
if (!uri || !uri.startsWith(this._api.annotations)) {
|
|
@@ -1308,6 +1564,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1308
1564
|
data: annotation
|
|
1309
1565
|
});
|
|
1310
1566
|
}
|
|
1567
|
+
/**
|
|
1568
|
+
* Deletes an annotation.
|
|
1569
|
+
*
|
|
1570
|
+
* @param {Object} config
|
|
1571
|
+
* @param {Object} config.annotation JSKOS annotation
|
|
1572
|
+
* @returns {boolean} `true` if deletion was successful
|
|
1573
|
+
*/
|
|
1311
1574
|
async deleteAnnotation({ annotation, ...config }) {
|
|
1312
1575
|
const uri = annotation.id;
|
|
1313
1576
|
if (!uri || !uri.startsWith(this._api.annotations)) {
|
|
@@ -1320,6 +1583,12 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1320
1583
|
});
|
|
1321
1584
|
return true;
|
|
1322
1585
|
}
|
|
1586
|
+
/**
|
|
1587
|
+
* Returns a list of concordances.
|
|
1588
|
+
*
|
|
1589
|
+
* @param {Object} config
|
|
1590
|
+
* @returns {Object[]} array of JSKOS concordance objects
|
|
1591
|
+
*/
|
|
1323
1592
|
async getConcordances(config) {
|
|
1324
1593
|
return this.axios({
|
|
1325
1594
|
...config,
|
|
@@ -1327,6 +1596,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1327
1596
|
url: this._api.concordances
|
|
1328
1597
|
});
|
|
1329
1598
|
}
|
|
1599
|
+
/**
|
|
1600
|
+
* Creates a concordance.
|
|
1601
|
+
*
|
|
1602
|
+
* @param {Object} config
|
|
1603
|
+
* @param {Object} config.concordance JSKOS concordance
|
|
1604
|
+
* @returns {Object} JSKOS concordance object
|
|
1605
|
+
*/
|
|
1330
1606
|
async postConcordance({ concordance, ...config }) {
|
|
1331
1607
|
if (!concordance) {
|
|
1332
1608
|
throw new InvalidOrMissingParameterError({ parameter: "concordance" });
|
|
@@ -1342,6 +1618,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1342
1618
|
}
|
|
1343
1619
|
});
|
|
1344
1620
|
}
|
|
1621
|
+
/**
|
|
1622
|
+
* Overwrites a concordance.
|
|
1623
|
+
*
|
|
1624
|
+
* @param {Object} config
|
|
1625
|
+
* @param {Object} config.concordance JSKOS concordance
|
|
1626
|
+
* @returns {Object} JSKOS concordance object
|
|
1627
|
+
*/
|
|
1345
1628
|
async putConcordance({ concordance, ...config }) {
|
|
1346
1629
|
if (!concordance) {
|
|
1347
1630
|
throw new InvalidOrMissingParameterError({ parameter: "concordance" });
|
|
@@ -1361,6 +1644,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1361
1644
|
}
|
|
1362
1645
|
});
|
|
1363
1646
|
}
|
|
1647
|
+
/**
|
|
1648
|
+
* Patches a concordance.
|
|
1649
|
+
*
|
|
1650
|
+
* @param {Object} config
|
|
1651
|
+
* @param {Object} config.concordance JSKOS concordance (or part of concordance)
|
|
1652
|
+
* @returns {Object} JSKOS concordance object
|
|
1653
|
+
*/
|
|
1364
1654
|
async patchConcordance({ concordance, ...config }) {
|
|
1365
1655
|
if (!concordance) {
|
|
1366
1656
|
throw new InvalidOrMissingParameterError({ parameter: "concordance" });
|
|
@@ -1380,6 +1670,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1380
1670
|
}
|
|
1381
1671
|
});
|
|
1382
1672
|
}
|
|
1673
|
+
/**
|
|
1674
|
+
* Deletes a concordance.
|
|
1675
|
+
*
|
|
1676
|
+
* @param {Object} config
|
|
1677
|
+
* @param {Object} config.concordance JSKOS concordance
|
|
1678
|
+
* @returns {boolean} `true` if deletion was successful
|
|
1679
|
+
*/
|
|
1383
1680
|
async deleteConcordance({ concordance, ...config }) {
|
|
1384
1681
|
if (!concordance) {
|
|
1385
1682
|
throw new InvalidOrMissingParameterError({ parameter: "concordance" });
|
|
@@ -1406,6 +1703,9 @@ var OccurrencesApiProvider = class extends BaseProvider {
|
|
|
1406
1703
|
get _cache() {
|
|
1407
1704
|
return cache[this.uri];
|
|
1408
1705
|
}
|
|
1706
|
+
/**
|
|
1707
|
+
* @private
|
|
1708
|
+
*/
|
|
1409
1709
|
_prepare() {
|
|
1410
1710
|
cache[this.uri] = [];
|
|
1411
1711
|
this._occurrencesSupportedSchemes = [];
|
|
@@ -1415,6 +1715,13 @@ var OccurrencesApiProvider = class extends BaseProvider {
|
|
|
1415
1715
|
this.has[c] = false;
|
|
1416
1716
|
});
|
|
1417
1717
|
}
|
|
1718
|
+
/**
|
|
1719
|
+
* Returns whether a concept scheme is supported for occurrences.
|
|
1720
|
+
*
|
|
1721
|
+
* @private
|
|
1722
|
+
*
|
|
1723
|
+
* @param {Object} scheme JSKOS scheme to query
|
|
1724
|
+
*/
|
|
1418
1725
|
async _occurrencesIsSupported(scheme) {
|
|
1419
1726
|
if (this._occurrencesSupportedSchemes && this._occurrencesSupportedSchemes.length) {
|
|
1420
1727
|
} else {
|
|
@@ -1436,6 +1743,12 @@ var OccurrencesApiProvider = class extends BaseProvider {
|
|
|
1436
1743
|
}
|
|
1437
1744
|
return supported;
|
|
1438
1745
|
}
|
|
1746
|
+
/**
|
|
1747
|
+
* Wrapper around getOccurrences that converts occurrences into mappings.
|
|
1748
|
+
*
|
|
1749
|
+
* @param {Object} config config object for getOccurrences request
|
|
1750
|
+
* @returns {Object[]} array of JSKOS mapping objects
|
|
1751
|
+
*/
|
|
1439
1752
|
async getMappings(config) {
|
|
1440
1753
|
const occurrences = await this.getOccurrences(config);
|
|
1441
1754
|
const from = config.from;
|
|
@@ -1479,6 +1792,15 @@ var OccurrencesApiProvider = class extends BaseProvider {
|
|
|
1479
1792
|
mappings._url = occurrences._url;
|
|
1480
1793
|
return mappings;
|
|
1481
1794
|
}
|
|
1795
|
+
/**
|
|
1796
|
+
* Returns a list of occurrences.
|
|
1797
|
+
*
|
|
1798
|
+
* @param {Object} config
|
|
1799
|
+
* @param {Object} [config.from] JSKOS concept to load occurrences for (from side)
|
|
1800
|
+
* @param {Object} [config.to] JSKOS concept to load occurrences for (to side)
|
|
1801
|
+
* @param {Object[]} [config.concepts] list of JSKOS concepts to load occurrences for
|
|
1802
|
+
* @returns {Object[]} array of JSKOS occurrence objects
|
|
1803
|
+
*/
|
|
1482
1804
|
async getOccurrences({ from, to, concepts, threshold = 0, ...config }) {
|
|
1483
1805
|
let promises = [];
|
|
1484
1806
|
concepts = (concepts || []).concat([from, to]).filter((c) => !!c);
|
|
@@ -1531,6 +1853,13 @@ var OccurrencesApiProvider = class extends BaseProvider {
|
|
|
1531
1853
|
occurrences._url = results.map((result) => result._url);
|
|
1532
1854
|
return occurrences;
|
|
1533
1855
|
}
|
|
1856
|
+
/**
|
|
1857
|
+
* Internal function for getOccurrences that either makes an API request or uses a local cache.
|
|
1858
|
+
*
|
|
1859
|
+
* @private
|
|
1860
|
+
*
|
|
1861
|
+
* @param {Object} config passthrough of config parameter for axios request
|
|
1862
|
+
*/
|
|
1534
1863
|
async _getOccurrences(config) {
|
|
1535
1864
|
let resultsFromCache = this._cache.find((item) => {
|
|
1536
1865
|
return import_isEqual.default(item.config.params, config.params);
|
|
@@ -1559,6 +1888,9 @@ OccurrencesApiProvider.stored = false;
|
|
|
1559
1888
|
// src/providers/concept-api-provider.js
|
|
1560
1889
|
var import_jskos_tools5 = __toESM(require("jskos-tools"), 1);
|
|
1561
1890
|
var ConceptApiProvider = class extends BaseProvider {
|
|
1891
|
+
/**
|
|
1892
|
+
* @private
|
|
1893
|
+
*/
|
|
1562
1894
|
_prepare() {
|
|
1563
1895
|
if (this._api.api && this._api.status === void 0) {
|
|
1564
1896
|
this._api.status = concatUrl(this._api.api, "/status");
|
|
@@ -1577,6 +1909,9 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1577
1909
|
this.has[c] = false;
|
|
1578
1910
|
});
|
|
1579
1911
|
}
|
|
1912
|
+
/**
|
|
1913
|
+
* @private
|
|
1914
|
+
*/
|
|
1580
1915
|
_setup() {
|
|
1581
1916
|
if (this._api.api) {
|
|
1582
1917
|
const endpoints = {
|
|
@@ -1610,9 +1945,17 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1610
1945
|
this.has.search = !!this._api.search;
|
|
1611
1946
|
this.has.auth = import_get.default(this._config, "auth.key") != null;
|
|
1612
1947
|
this._defaultParams = {
|
|
1948
|
+
// Default parameters mostly for DANTE
|
|
1613
1949
|
properties: "+created,issued,modified,editorialNote,scopeNote"
|
|
1614
1950
|
};
|
|
1615
1951
|
}
|
|
1952
|
+
/**
|
|
1953
|
+
* Used by `registryForScheme` (see src/lib/CocodaSDK.js) to determine a provider config for a concept schceme.
|
|
1954
|
+
*
|
|
1955
|
+
* @param {Object} options
|
|
1956
|
+
* @param {Object} options.url API URL for server
|
|
1957
|
+
* @returns {Object} provider configuration
|
|
1958
|
+
*/
|
|
1616
1959
|
static _registryConfigForBartocApiConfig({ url, scheme } = {}) {
|
|
1617
1960
|
if (!url || !scheme) {
|
|
1618
1961
|
return null;
|
|
@@ -1622,6 +1965,11 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1622
1965
|
schemes: [scheme]
|
|
1623
1966
|
};
|
|
1624
1967
|
}
|
|
1968
|
+
/**
|
|
1969
|
+
* Returns the main vocabulary URI by requesting the scheme info and saving it in a cache.
|
|
1970
|
+
*
|
|
1971
|
+
* @private
|
|
1972
|
+
*/
|
|
1625
1973
|
async _getSchemeUri(scheme) {
|
|
1626
1974
|
this._approvedSchemes = this._approvedSchemes || [];
|
|
1627
1975
|
this._rejectedSchemes = this._rejectedSchemes || [];
|
|
@@ -1650,6 +1998,12 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1650
1998
|
return null;
|
|
1651
1999
|
}
|
|
1652
2000
|
}
|
|
2001
|
+
/**
|
|
2002
|
+
* Returns all concept schemes.
|
|
2003
|
+
*
|
|
2004
|
+
* @param {Object} config
|
|
2005
|
+
* @returns {Object[]} array of JSKOS concept scheme objects
|
|
2006
|
+
*/
|
|
1653
2007
|
async getSchemes(config) {
|
|
1654
2008
|
if (!this._api.schemes) {
|
|
1655
2009
|
if (Array.isArray(this.schemes)) {
|
|
@@ -1663,6 +2017,7 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1663
2017
|
url: this._api.schemes,
|
|
1664
2018
|
params: {
|
|
1665
2019
|
...this._defaultParams,
|
|
2020
|
+
// ? What should the default limit be?
|
|
1666
2021
|
limit: 500,
|
|
1667
2022
|
...config.params || {}
|
|
1668
2023
|
}
|
|
@@ -1673,6 +2028,13 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1673
2028
|
return schemes;
|
|
1674
2029
|
}
|
|
1675
2030
|
}
|
|
2031
|
+
/**
|
|
2032
|
+
* Returns top concepts for a concept scheme.
|
|
2033
|
+
*
|
|
2034
|
+
* @param {Object} config
|
|
2035
|
+
* @param {Object} config.scheme concept scheme object
|
|
2036
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
2037
|
+
*/
|
|
1676
2038
|
async getTop({ scheme, ...config }) {
|
|
1677
2039
|
if (!this._api.top) {
|
|
1678
2040
|
throw new MissingApiUrlError();
|
|
@@ -1693,12 +2055,20 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1693
2055
|
url: this._api.top,
|
|
1694
2056
|
params: {
|
|
1695
2057
|
...this._defaultParams,
|
|
2058
|
+
// ? What should the default limit be?
|
|
1696
2059
|
limit: 1e4,
|
|
1697
2060
|
...config.params || {},
|
|
1698
2061
|
uri: schemeUri
|
|
1699
2062
|
}
|
|
1700
2063
|
});
|
|
1701
2064
|
}
|
|
2065
|
+
/**
|
|
2066
|
+
* Returns details for a list of concepts.
|
|
2067
|
+
*
|
|
2068
|
+
* @param {Object} config
|
|
2069
|
+
* @param {Object[]} config.concepts list of concept objects to load
|
|
2070
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
2071
|
+
*/
|
|
1702
2072
|
async getConcepts({ concepts, ...config }) {
|
|
1703
2073
|
if (this.has.data === false) {
|
|
1704
2074
|
throw new MissingApiUrlError();
|
|
@@ -1716,12 +2086,20 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1716
2086
|
url: this._api.data,
|
|
1717
2087
|
params: {
|
|
1718
2088
|
...this._defaultParams,
|
|
2089
|
+
// ? What should the default limit be?
|
|
1719
2090
|
limit: 500,
|
|
1720
2091
|
...config.params || {},
|
|
1721
2092
|
uri: uris.join("|")
|
|
1722
2093
|
}
|
|
1723
2094
|
});
|
|
1724
2095
|
}
|
|
2096
|
+
/**
|
|
2097
|
+
* Returns narrower concepts for a concept.
|
|
2098
|
+
*
|
|
2099
|
+
* @param {Object} config
|
|
2100
|
+
* @param {Object} config.concept concept object
|
|
2101
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
2102
|
+
*/
|
|
1725
2103
|
async getNarrower({ concept, ...config }) {
|
|
1726
2104
|
if (!this._api.narrower) {
|
|
1727
2105
|
throw new MissingApiUrlError();
|
|
@@ -1735,12 +2113,20 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1735
2113
|
url: this._api.narrower,
|
|
1736
2114
|
params: {
|
|
1737
2115
|
...this._defaultParams,
|
|
2116
|
+
// ? What should the default limit be?
|
|
1738
2117
|
limit: 1e4,
|
|
1739
2118
|
...config.params || {},
|
|
1740
2119
|
uri: concept.uri
|
|
1741
2120
|
}
|
|
1742
2121
|
});
|
|
1743
2122
|
}
|
|
2123
|
+
/**
|
|
2124
|
+
* Returns ancestor concepts for a concept.
|
|
2125
|
+
*
|
|
2126
|
+
* @param {Object} config
|
|
2127
|
+
* @param {Object} config.concept concept object
|
|
2128
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
2129
|
+
*/
|
|
1744
2130
|
async getAncestors({ concept, ...config }) {
|
|
1745
2131
|
if (!this._api.ancestors) {
|
|
1746
2132
|
throw new MissingApiUrlError();
|
|
@@ -1754,12 +2140,25 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1754
2140
|
url: this._api.ancestors,
|
|
1755
2141
|
params: {
|
|
1756
2142
|
...this._defaultParams,
|
|
2143
|
+
// ? What should the default limit be?
|
|
1757
2144
|
limit: 1e4,
|
|
1758
2145
|
...config.params || {},
|
|
1759
2146
|
uri: concept.uri
|
|
1760
2147
|
}
|
|
1761
2148
|
});
|
|
1762
2149
|
}
|
|
2150
|
+
/**
|
|
2151
|
+
* Returns suggestion result in OpenSearch Suggest Format.
|
|
2152
|
+
*
|
|
2153
|
+
* @param {Object} config
|
|
2154
|
+
* @param {string} config.search search string
|
|
2155
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
2156
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
2157
|
+
* @param {string} [config.use=notation,label] which fields to search ("notation", "label" or "notation,label")
|
|
2158
|
+
* @param {string[]} [config.types=[]] list of type URIs
|
|
2159
|
+
* @param {string} [config.sort=score] sorting parameter
|
|
2160
|
+
* @returns {Array} result in OpenSearch Suggest Format
|
|
2161
|
+
*/
|
|
1763
2162
|
async suggest({ use = "notation,label", types = [], sort = "score", params = {}, ...config }) {
|
|
1764
2163
|
return this._search({
|
|
1765
2164
|
...config,
|
|
@@ -1772,6 +2171,17 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1772
2171
|
}
|
|
1773
2172
|
});
|
|
1774
2173
|
}
|
|
2174
|
+
/**
|
|
2175
|
+
* Returns search results in JSKOS Format.
|
|
2176
|
+
*
|
|
2177
|
+
* @param {Object} config
|
|
2178
|
+
* @param {string} config.search search string
|
|
2179
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
2180
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
2181
|
+
* @param {number} [config.offset=0] offset
|
|
2182
|
+
* @param {string[]} [config.types=[]] list of type URIs
|
|
2183
|
+
* @returns {Array} result in JSKOS Format
|
|
2184
|
+
*/
|
|
1775
2185
|
async search({ types = [], params = {}, ...config }) {
|
|
1776
2186
|
return this._search({
|
|
1777
2187
|
...config,
|
|
@@ -1782,6 +2192,16 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1782
2192
|
}
|
|
1783
2193
|
});
|
|
1784
2194
|
}
|
|
2195
|
+
/**
|
|
2196
|
+
* Returns concept scheme suggestion result in OpenSearch Suggest Format.
|
|
2197
|
+
*
|
|
2198
|
+
* @param {Object} config
|
|
2199
|
+
* @param {string} config.search search string
|
|
2200
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
2201
|
+
* @param {string} [config.use=notation,label] which fields to search ("notation", "label" or "notation,label")
|
|
2202
|
+
* @param {string} [config.sort=score] sorting parameter
|
|
2203
|
+
* @returns {Array} result in OpenSearch Suggest Format
|
|
2204
|
+
*/
|
|
1785
2205
|
async vocSuggest({ use = "notation,label", sort = "score", params = {}, ...config }) {
|
|
1786
2206
|
return this._search({
|
|
1787
2207
|
...config,
|
|
@@ -1793,6 +2213,15 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1793
2213
|
}
|
|
1794
2214
|
});
|
|
1795
2215
|
}
|
|
2216
|
+
/**
|
|
2217
|
+
* Returns concept scheme search results in JSKOS Format.
|
|
2218
|
+
*
|
|
2219
|
+
* @param {Object} config
|
|
2220
|
+
* @param {string} config.search search string
|
|
2221
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
2222
|
+
* @param {number} [config.offset=0] offset
|
|
2223
|
+
* @returns {Array} result in JSKOS Format
|
|
2224
|
+
*/
|
|
1796
2225
|
async vocSearch(config) {
|
|
1797
2226
|
return this._search({
|
|
1798
2227
|
...config,
|
|
@@ -1818,6 +2247,7 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1818
2247
|
...params,
|
|
1819
2248
|
limit,
|
|
1820
2249
|
count: limit,
|
|
2250
|
+
// Some endpoints use count instead of limit
|
|
1821
2251
|
offset,
|
|
1822
2252
|
search,
|
|
1823
2253
|
query: search,
|
|
@@ -1827,6 +2257,13 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1827
2257
|
url
|
|
1828
2258
|
});
|
|
1829
2259
|
}
|
|
2260
|
+
/**
|
|
2261
|
+
* Returns a list of types.
|
|
2262
|
+
*
|
|
2263
|
+
* @param {Object} config
|
|
2264
|
+
* @param {Object} [config.scheme] concept scheme to load types for
|
|
2265
|
+
* @returns {Object[]} array of JSKOS type objects
|
|
2266
|
+
*/
|
|
1830
2267
|
async getTypes({ scheme, ...config }) {
|
|
1831
2268
|
if (!this._api.types) {
|
|
1832
2269
|
throw new MissingApiUrlError();
|
|
@@ -1855,6 +2292,9 @@ var ReconciliationApiProvider = class extends BaseProvider {
|
|
|
1855
2292
|
get _cache() {
|
|
1856
2293
|
return cache2[this.uri];
|
|
1857
2294
|
}
|
|
2295
|
+
/**
|
|
2296
|
+
* @private
|
|
2297
|
+
*/
|
|
1858
2298
|
_prepare() {
|
|
1859
2299
|
cache2[this.uri] = [];
|
|
1860
2300
|
this.has.mappings = true;
|
|
@@ -1862,6 +2302,15 @@ var ReconciliationApiProvider = class extends BaseProvider {
|
|
|
1862
2302
|
this.has[c] = false;
|
|
1863
2303
|
});
|
|
1864
2304
|
}
|
|
2305
|
+
/**
|
|
2306
|
+
* Returns a list of mappings suggestions.
|
|
2307
|
+
*
|
|
2308
|
+
* @param {Object} config
|
|
2309
|
+
* @param {Object} config.from JSKOS concept on from side
|
|
2310
|
+
* @param {Object} config.to JSKOS concept on to side
|
|
2311
|
+
* @param {Object} config.mode mappings mode
|
|
2312
|
+
* @returns {Object[]} array of JSKOS mapping objects
|
|
2313
|
+
*/
|
|
1865
2314
|
async getMappings({ from, to, mode, ...config }) {
|
|
1866
2315
|
let schemes = [];
|
|
1867
2316
|
if (import_isArray.default(this.schemes)) {
|
|
@@ -1946,6 +2395,15 @@ var ReconciliationApiProvider = class extends BaseProvider {
|
|
|
1946
2395
|
mappings._url = url;
|
|
1947
2396
|
return mappings;
|
|
1948
2397
|
}
|
|
2398
|
+
/**
|
|
2399
|
+
* Internal function that either makes an API request or uses a local cache.
|
|
2400
|
+
*
|
|
2401
|
+
* @private
|
|
2402
|
+
*
|
|
2403
|
+
* @param {Object} config passthrough of config object for axios request
|
|
2404
|
+
* @param {string[]} labels list of labels to get results for
|
|
2405
|
+
* @param {string} language language of labels
|
|
2406
|
+
*/
|
|
1949
2407
|
async _getReconciliationResults({ labels, language, ...config }) {
|
|
1950
2408
|
labels = labels.sort();
|
|
1951
2409
|
let resultsFromCache = this._cache.find((item) => {
|
|
@@ -1994,6 +2452,9 @@ ReconciliationApiProvider.stored = false;
|
|
|
1994
2452
|
// src/providers/label-search-suggestion-provider.js
|
|
1995
2453
|
var import_jskos_tools7 = __toESM(require("jskos-tools"), 1);
|
|
1996
2454
|
var LabelSearchSuggestionProvider = class extends BaseProvider {
|
|
2455
|
+
/**
|
|
2456
|
+
* @private
|
|
2457
|
+
*/
|
|
1997
2458
|
_prepare() {
|
|
1998
2459
|
this._cache = [];
|
|
1999
2460
|
this.has.mappings = true;
|
|
@@ -2001,9 +2462,25 @@ var LabelSearchSuggestionProvider = class extends BaseProvider {
|
|
|
2001
2462
|
this.has[c] = false;
|
|
2002
2463
|
});
|
|
2003
2464
|
}
|
|
2465
|
+
/**
|
|
2466
|
+
* Override `supportsScheme` to check whether a search URI is available for the scheme's registry.
|
|
2467
|
+
*
|
|
2468
|
+
* @param {Object} scheme - target scheme to check for support
|
|
2469
|
+
* @returns {boolean}
|
|
2470
|
+
*/
|
|
2004
2471
|
supportsScheme(scheme) {
|
|
2005
2472
|
return super.supportsScheme(scheme) && import_get.default(scheme, "_registry.has.search", false);
|
|
2006
2473
|
}
|
|
2474
|
+
/**
|
|
2475
|
+
* Returns a list of mappings.
|
|
2476
|
+
*
|
|
2477
|
+
* @param {Object} config
|
|
2478
|
+
* @param {Object} config.from JSKOS concept on from side
|
|
2479
|
+
* @param {Object} config.to JSKOS concept on to side
|
|
2480
|
+
* @param {Object} config.mode mappings mode
|
|
2481
|
+
* @param {Object} config.selected selected mappings in Cocoda
|
|
2482
|
+
* @returns {Object[]} array of JSKOS mapping objects
|
|
2483
|
+
*/
|
|
2007
2484
|
async getMappings({ from, to, mode, selected, limit = 10, ...config }) {
|
|
2008
2485
|
if (mode != "or") {
|
|
2009
2486
|
return [];
|
|
@@ -2033,6 +2510,17 @@ var LabelSearchSuggestionProvider = class extends BaseProvider {
|
|
|
2033
2510
|
}
|
|
2034
2511
|
return import_union.default(fromResult, toResult);
|
|
2035
2512
|
}
|
|
2513
|
+
/**
|
|
2514
|
+
* Internal function to get mapping recommendations for a certain concept with sourceScheme and targetScheme.
|
|
2515
|
+
*
|
|
2516
|
+
* @private
|
|
2517
|
+
*
|
|
2518
|
+
* @param {Object} config
|
|
2519
|
+
* @param {Object} config.concept
|
|
2520
|
+
* @param {Object} config.sourceScheme
|
|
2521
|
+
* @param {Pbject} config.targetScheme
|
|
2522
|
+
* @param {boolean} config.swap - whether to reverse the direction of the mappings
|
|
2523
|
+
*/
|
|
2036
2524
|
async _getMappings({ concept, sourceScheme, targetScheme, limit, swap = false, ...config }) {
|
|
2037
2525
|
if (!concept || !sourceScheme || !targetScheme) {
|
|
2038
2526
|
return [];
|
|
@@ -2082,6 +2570,15 @@ var LabelSearchSuggestionProvider = class extends BaseProvider {
|
|
|
2082
2570
|
}
|
|
2083
2571
|
return mappings;
|
|
2084
2572
|
}
|
|
2573
|
+
/**
|
|
2574
|
+
* Internal function that either makes an API request or uses a local cache.
|
|
2575
|
+
*
|
|
2576
|
+
* @private
|
|
2577
|
+
*
|
|
2578
|
+
* @param {Object} config
|
|
2579
|
+
* @param {string} config.label
|
|
2580
|
+
* @param {Object} config.targetScheme
|
|
2581
|
+
*/
|
|
2085
2582
|
async _getResults({ label, targetScheme, limit, ...config }) {
|
|
2086
2583
|
let resultsFromCache = (this._cache[targetScheme.uri] || {})[label];
|
|
2087
2584
|
if (resultsFromCache && resultsFromCache._limit >= limit) {
|
|
@@ -2113,6 +2610,9 @@ LabelSearchSuggestionProvider.stored = false;
|
|
|
2113
2610
|
// src/providers/skosmos-api-provider.js
|
|
2114
2611
|
var import_jskos_tools8 = __toESM(require("jskos-tools"), 1);
|
|
2115
2612
|
var SkosmosApiProvider = class extends BaseProvider {
|
|
2613
|
+
/**
|
|
2614
|
+
* @private
|
|
2615
|
+
*/
|
|
2116
2616
|
_prepare() {
|
|
2117
2617
|
this.has.schemes = true;
|
|
2118
2618
|
this.has.top = true;
|
|
@@ -2127,6 +2627,14 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2127
2627
|
this.has[c] = false;
|
|
2128
2628
|
});
|
|
2129
2629
|
}
|
|
2630
|
+
/**
|
|
2631
|
+
* Used by `registryForScheme` (see src/lib/CocodaSDK.js) to determine a provider config for a concept schceme.
|
|
2632
|
+
*
|
|
2633
|
+
* @param {Object} options
|
|
2634
|
+
* @param {Object} options.url API URL for BARTOC instance
|
|
2635
|
+
* @param {Object} options.scheme scheme for which the config is requested
|
|
2636
|
+
* @returns {Object} provider configuration
|
|
2637
|
+
*/
|
|
2130
2638
|
static _registryConfigForBartocApiConfig({ url, scheme } = {}) {
|
|
2131
2639
|
if (!url || !scheme) {
|
|
2132
2640
|
return null;
|
|
@@ -2141,9 +2649,15 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2141
2649
|
config.schemes = [scheme];
|
|
2142
2650
|
return config;
|
|
2143
2651
|
}
|
|
2652
|
+
/**
|
|
2653
|
+
* @private
|
|
2654
|
+
*/
|
|
2144
2655
|
get _language() {
|
|
2145
2656
|
return this.languages[0] || this._defaultLanguages[0] || "en";
|
|
2146
2657
|
}
|
|
2658
|
+
/**
|
|
2659
|
+
* @private
|
|
2660
|
+
*/
|
|
2147
2661
|
_getApiUrl(scheme, endpoint, params) {
|
|
2148
2662
|
const VOCID = scheme && scheme.VOCID || import_get.default(this.schemes.find((s) => import_jskos_tools8.default.compare(s, scheme)), "VOCID");
|
|
2149
2663
|
if (!VOCID) {
|
|
@@ -2157,6 +2671,9 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2157
2671
|
const paramString = Object.keys(params).map((k) => `${k}=${encodeURIComponent(params[k])}`).join("&");
|
|
2158
2672
|
return `${this._api.api}${VOCID}${endpoint}${paramString ? "?" + paramString : ""}`;
|
|
2159
2673
|
}
|
|
2674
|
+
/**
|
|
2675
|
+
* @private
|
|
2676
|
+
*/
|
|
2160
2677
|
_getDataUrl(concept, { addFormatParameter = true } = {}) {
|
|
2161
2678
|
const scheme = import_get.default(concept, "inScheme[0]");
|
|
2162
2679
|
if (!concept || !concept.uri) {
|
|
@@ -2164,6 +2681,11 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2164
2681
|
}
|
|
2165
2682
|
return this._getApiUrl(scheme, "/data", addFormatParameter ? { format: "application/json" } : {});
|
|
2166
2683
|
}
|
|
2684
|
+
/**
|
|
2685
|
+
* Returns the main vocabulary URI by requesting the scheme info and saving it in a cache.
|
|
2686
|
+
*
|
|
2687
|
+
* @private
|
|
2688
|
+
*/
|
|
2167
2689
|
async _getSchemeUri(scheme) {
|
|
2168
2690
|
this._approvedSchemes = this._approvedSchemes || [];
|
|
2169
2691
|
this._rejectedSchemes = this._rejectedSchemes || [];
|
|
@@ -2194,6 +2716,9 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2194
2716
|
return null;
|
|
2195
2717
|
}
|
|
2196
2718
|
}
|
|
2719
|
+
/**
|
|
2720
|
+
* @private
|
|
2721
|
+
*/
|
|
2197
2722
|
_toJskosConcept(skosmosConcept, { concept, scheme, result, language } = {}) {
|
|
2198
2723
|
if (!skosmosConcept) {
|
|
2199
2724
|
return null;
|
|
@@ -2266,6 +2791,12 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2266
2791
|
}
|
|
2267
2792
|
return concept;
|
|
2268
2793
|
}
|
|
2794
|
+
/**
|
|
2795
|
+
* Returns all concept schemes.
|
|
2796
|
+
*
|
|
2797
|
+
* @param {Object} config
|
|
2798
|
+
* @returns {Object[]} array of JSKOS concept scheme objects
|
|
2799
|
+
*/
|
|
2269
2800
|
async getSchemes({ ...config }) {
|
|
2270
2801
|
const schemes = [];
|
|
2271
2802
|
for (let scheme of this.schemes || []) {
|
|
@@ -2291,6 +2822,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2291
2822
|
}
|
|
2292
2823
|
return schemes;
|
|
2293
2824
|
}
|
|
2825
|
+
/**
|
|
2826
|
+
* Returns top concepts.
|
|
2827
|
+
*
|
|
2828
|
+
* @param {Object} config
|
|
2829
|
+
* @param {Object} config.scheme concept scheme
|
|
2830
|
+
* @returns {Object[]} array of JSKOS concept scheme objects
|
|
2831
|
+
*/
|
|
2294
2832
|
async getTop({ scheme, ...config }) {
|
|
2295
2833
|
const url = this._getApiUrl(scheme, "/topConcepts");
|
|
2296
2834
|
const schemeUri = await this._getSchemeUri(scheme);
|
|
@@ -2314,6 +2852,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2314
2852
|
}
|
|
2315
2853
|
return concepts;
|
|
2316
2854
|
}
|
|
2855
|
+
/**
|
|
2856
|
+
* Returns details for a list of concepts.
|
|
2857
|
+
*
|
|
2858
|
+
* @param {Object} config
|
|
2859
|
+
* @param {Object[]} config.concepts list of concept objects to load
|
|
2860
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
2861
|
+
*/
|
|
2317
2862
|
async getConcepts({ concepts, ...config }) {
|
|
2318
2863
|
if (!import_isArray.default(concepts)) {
|
|
2319
2864
|
concepts = [concepts];
|
|
@@ -2353,6 +2898,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2353
2898
|
}
|
|
2354
2899
|
return newConcepts;
|
|
2355
2900
|
}
|
|
2901
|
+
/**
|
|
2902
|
+
* Returns narrower concepts for a concept.
|
|
2903
|
+
*
|
|
2904
|
+
* @param {Object} config
|
|
2905
|
+
* @param {Object} config.concept concept object
|
|
2906
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
2907
|
+
*/
|
|
2356
2908
|
async getNarrower({ concept, ...config }) {
|
|
2357
2909
|
if (!concept || !concept.uri) {
|
|
2358
2910
|
throw new InvalidOrMissingParameterError({ parameter: "concept" });
|
|
@@ -2368,6 +2920,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2368
2920
|
const concepts = (response.narrower || []).map((c) => this._toJskosConcept(c, { scheme }));
|
|
2369
2921
|
return concepts;
|
|
2370
2922
|
}
|
|
2923
|
+
/**
|
|
2924
|
+
* Returns ancestor concepts for a concept.
|
|
2925
|
+
*
|
|
2926
|
+
* @param {Object} config
|
|
2927
|
+
* @param {Object} config.concept concept object
|
|
2928
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
2929
|
+
*/
|
|
2371
2930
|
async getAncestors({ concept, ...config }) {
|
|
2372
2931
|
if (!concept || !concept.uri) {
|
|
2373
2932
|
throw new InvalidOrMissingParameterError({ parameter: "concept" });
|
|
@@ -2392,6 +2951,16 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2392
2951
|
const concepts = ancestors.map((c) => this._toJskosConcept(c, { scheme })).filter((c) => c.uri != concept.uri);
|
|
2393
2952
|
return concepts;
|
|
2394
2953
|
}
|
|
2954
|
+
/**
|
|
2955
|
+
* Returns suggestion result in OpenSearch Suggest Format.
|
|
2956
|
+
*
|
|
2957
|
+
* @param {Object} config
|
|
2958
|
+
* @param {string} config.search search string
|
|
2959
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
2960
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
2961
|
+
* @param {string[]} [config.types=[]] list of type URIs
|
|
2962
|
+
* @returns {Array} result in OpenSearch Suggest Format
|
|
2963
|
+
*/
|
|
2395
2964
|
async suggest(config) {
|
|
2396
2965
|
config._raw = true;
|
|
2397
2966
|
const concepts = await this.search(config);
|
|
@@ -2410,6 +2979,16 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2410
2979
|
}
|
|
2411
2980
|
return result;
|
|
2412
2981
|
}
|
|
2982
|
+
/**
|
|
2983
|
+
* Returns concept search results.
|
|
2984
|
+
*
|
|
2985
|
+
* @param {Object} config
|
|
2986
|
+
* @param {string} config.search search string
|
|
2987
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
2988
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
2989
|
+
* @param {string[]} [config.types=[]] list of type URIs
|
|
2990
|
+
* @returns {Array} array of JSKOS concept objects
|
|
2991
|
+
*/
|
|
2413
2992
|
async search({ search, scheme, limit, types = [], ...config }) {
|
|
2414
2993
|
const url = this._getApiUrl(scheme, "/search");
|
|
2415
2994
|
import_set.default(config, "params.query", `${search}*`);
|
|
@@ -2424,6 +3003,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2424
3003
|
const concepts = (response.results || []).map((c) => this._toJskosConcept(c, { scheme }));
|
|
2425
3004
|
return concepts;
|
|
2426
3005
|
}
|
|
3006
|
+
/**
|
|
3007
|
+
* Returns a list of types.
|
|
3008
|
+
*
|
|
3009
|
+
* @param {Object} config
|
|
3010
|
+
* @param {Object} [config.scheme] concept scheme to load types for
|
|
3011
|
+
* @returns {Object[]} array of JSKOS type objects
|
|
3012
|
+
*/
|
|
2427
3013
|
async getTypes({ scheme, ...config }) {
|
|
2428
3014
|
const url = this._getApiUrl(scheme, "/types");
|
|
2429
3015
|
const types = [];
|
|
@@ -2522,6 +3108,9 @@ function madsToJskosConcept(data3, { scheme }) {
|
|
|
2522
3108
|
return concept;
|
|
2523
3109
|
}
|
|
2524
3110
|
var LocApiProvider = class extends BaseProvider {
|
|
3111
|
+
/**
|
|
3112
|
+
* @private
|
|
3113
|
+
*/
|
|
2525
3114
|
_prepare() {
|
|
2526
3115
|
this.has.schemes = true;
|
|
2527
3116
|
this.has.top = false;
|
|
@@ -2535,6 +3124,13 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2535
3124
|
this.has[c] = false;
|
|
2536
3125
|
});
|
|
2537
3126
|
}
|
|
3127
|
+
/**
|
|
3128
|
+
* Used by `registryForScheme` (see src/lib/CocodaSDK.js) to determine a provider config for a concept schceme.
|
|
3129
|
+
*
|
|
3130
|
+
* @param {Object} options
|
|
3131
|
+
* @param {Object} options.scheme scheme for which the config is requested
|
|
3132
|
+
* @returns {Object} provider configuration
|
|
3133
|
+
*/
|
|
2538
3134
|
static _registryConfigForBartocApiConfig({ scheme } = {}) {
|
|
2539
3135
|
if (!scheme || !supportedSchemes.find((s) => import_jskos_tools9.default.compare(s, scheme))) {
|
|
2540
3136
|
return null;
|
|
@@ -2543,6 +3139,11 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2543
3139
|
schemes: [scheme]
|
|
2544
3140
|
};
|
|
2545
3141
|
}
|
|
3142
|
+
/**
|
|
3143
|
+
* Returns all concept schemes.
|
|
3144
|
+
*
|
|
3145
|
+
* @returns {Object[]} array of JSKOS concept scheme objects
|
|
3146
|
+
*/
|
|
2546
3147
|
async getSchemes() {
|
|
2547
3148
|
const schemes = [];
|
|
2548
3149
|
for (let scheme of await Promise.all(
|
|
@@ -2567,6 +3168,29 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2567
3168
|
}
|
|
2568
3169
|
return schemes;
|
|
2569
3170
|
}
|
|
3171
|
+
/**
|
|
3172
|
+
* TODO: Possibly reenable for LCC
|
|
3173
|
+
* Returns top concepts for a concept scheme.
|
|
3174
|
+
*
|
|
3175
|
+
* @param {Object} config
|
|
3176
|
+
* @param {Object} config.scheme concept scheme object
|
|
3177
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
3178
|
+
*/
|
|
3179
|
+
// async getTop({ scheme }) {
|
|
3180
|
+
// if (scheme.topConcepts && !scheme.topConcepts.includes(null)) {
|
|
3181
|
+
// return scheme.topConcepts
|
|
3182
|
+
// }
|
|
3183
|
+
// const schemes = await this.getSchemes()
|
|
3184
|
+
// scheme = schemes.find(s => jskos.compare(s, scheme))
|
|
3185
|
+
// return scheme && scheme.topConcepts || []
|
|
3186
|
+
// }
|
|
3187
|
+
/**
|
|
3188
|
+
* Returns details for a list of concepts.
|
|
3189
|
+
*
|
|
3190
|
+
* @param {Object} config
|
|
3191
|
+
* @param {Object[]} config.concepts list of concept objects to load
|
|
3192
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
3193
|
+
*/
|
|
2570
3194
|
async getConcepts({ concepts }) {
|
|
2571
3195
|
if (!Array.isArray(concepts)) {
|
|
2572
3196
|
concepts = [concepts];
|
|
@@ -2590,6 +3214,16 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2590
3214
|
}
|
|
2591
3215
|
return resultConcepts;
|
|
2592
3216
|
}
|
|
3217
|
+
/**
|
|
3218
|
+
* Returns suggestion result in OpenSearch Suggest Format.
|
|
3219
|
+
*
|
|
3220
|
+
* @param {Object} config
|
|
3221
|
+
* @param {string} config.search search string
|
|
3222
|
+
* @param {Object} config.scheme concept scheme to search in
|
|
3223
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
3224
|
+
* @param {number} [config.offset=0] offset
|
|
3225
|
+
* @returns {Array} result in OpenSearch Suggest Format
|
|
3226
|
+
*/
|
|
2593
3227
|
async suggest(config) {
|
|
2594
3228
|
const results = await this.search(config);
|
|
2595
3229
|
return [
|
|
@@ -2601,6 +3235,16 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2601
3235
|
results.map((c) => c.uri)
|
|
2602
3236
|
];
|
|
2603
3237
|
}
|
|
3238
|
+
/**
|
|
3239
|
+
* Returns search results in JSKOS Format.
|
|
3240
|
+
*
|
|
3241
|
+
* @param {Object} config
|
|
3242
|
+
* @param {string} config.search search string
|
|
3243
|
+
* @param {Object} config.scheme concept scheme to search in
|
|
3244
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
3245
|
+
* @param {number} [config.offset=0] offset
|
|
3246
|
+
* @returns {Array} result in JSKOS Format
|
|
3247
|
+
*/
|
|
2604
3248
|
async search({ search, scheme, limit, offset }) {
|
|
2605
3249
|
const schemeUri = import_jskos_tools9.default.getAllUris(scheme).find((uri) => uri.startsWith(locUriPrefix));
|
|
2606
3250
|
if (!schemeUri || !supportedSchemes.find((s) => import_jskos_tools9.default.compare(s, { uri: schemeUri }))) {
|
|
@@ -2672,6 +3316,14 @@ var SkohubProvider = class extends BaseProvider {
|
|
|
2672
3316
|
get _schemeCache() {
|
|
2673
3317
|
return data[this.uri] && data[this.uri].schemeCache;
|
|
2674
3318
|
}
|
|
3319
|
+
/**
|
|
3320
|
+
* Used by `registryForScheme` (see src/lib/CocodaSDK.js) to determine a provider config for a concept schceme.
|
|
3321
|
+
*
|
|
3322
|
+
* @param {Object} options
|
|
3323
|
+
* @param {Object} options.url API URL for BARTOC instance
|
|
3324
|
+
* @param {Object} options.scheme scheme for which the config is requested
|
|
3325
|
+
* @returns {Object} provider configuration
|
|
3326
|
+
*/
|
|
2675
3327
|
static _registryConfigForBartocApiConfig({ url, scheme } = {}) {
|
|
2676
3328
|
if (!url || !scheme) {
|
|
2677
3329
|
return null;
|
|
@@ -2801,6 +3453,15 @@ var SkohubProvider = class extends BaseProvider {
|
|
|
2801
3453
|
concept = await this._loadConcept({ ...config, uri: concept.uri });
|
|
2802
3454
|
return concept.narrower;
|
|
2803
3455
|
}
|
|
3456
|
+
/**
|
|
3457
|
+
* Returns concept search results.
|
|
3458
|
+
*
|
|
3459
|
+
* @param {Object} config
|
|
3460
|
+
* @param {string} config.search search string
|
|
3461
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
3462
|
+
* @param {number} [config.limit=100] maximum number of search results
|
|
3463
|
+
* @returns {Array} array of JSKOS concept objects
|
|
3464
|
+
*/
|
|
2804
3465
|
async search({ search, scheme, limit = 100 }) {
|
|
2805
3466
|
scheme = await this._loadScheme({ scheme });
|
|
2806
3467
|
if (!scheme || !scheme.uri) {
|
|
@@ -2846,6 +3507,15 @@ var SkohubProvider = class extends BaseProvider {
|
|
|
2846
3507
|
const concepts = await this.getConcepts({ concepts: result.map((uri) => ({ uri })) });
|
|
2847
3508
|
return concepts.slice(0, limit);
|
|
2848
3509
|
}
|
|
3510
|
+
/**
|
|
3511
|
+
* Returns suggestion result in OpenSearch Suggest Format.
|
|
3512
|
+
*
|
|
3513
|
+
* @param {Object} config
|
|
3514
|
+
* @param {string} config.search search string
|
|
3515
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
3516
|
+
* @param {number} [config.limit=100] maximum number of search results
|
|
3517
|
+
* @returns {Array} result in OpenSearch Suggest Format
|
|
3518
|
+
*/
|
|
2849
3519
|
async suggest(config) {
|
|
2850
3520
|
config._raw = true;
|
|
2851
3521
|
const concepts = await this.search(config);
|
|
@@ -2868,8 +3538,243 @@ var SkohubProvider = class extends BaseProvider {
|
|
|
2868
3538
|
SkohubProvider.providerName = "Skohub";
|
|
2869
3539
|
SkohubProvider.providerType = "http://bartoc.org/api-type/skohub";
|
|
2870
3540
|
|
|
2871
|
-
// src/providers/
|
|
3541
|
+
// src/providers/lobid-api-provider.js
|
|
2872
3542
|
var import_jskos_tools11 = __toESM(require("jskos-tools"), 1);
|
|
3543
|
+
var import_axios3 = __toESM(require("axios"), 1);
|
|
3544
|
+
var gndJson = {
|
|
3545
|
+
uri: "http://bartoc.org/en/node/430",
|
|
3546
|
+
concepts: [
|
|
3547
|
+
null
|
|
3548
|
+
],
|
|
3549
|
+
topConcepts: [],
|
|
3550
|
+
type: [
|
|
3551
|
+
"http://www.w3.org/2004/02/skos/core#ConceptScheme"
|
|
3552
|
+
],
|
|
3553
|
+
DISPLAY: {
|
|
3554
|
+
hideNotation: true
|
|
3555
|
+
},
|
|
3556
|
+
identifier: [
|
|
3557
|
+
"http://www.wikidata.org/entity/Q36578"
|
|
3558
|
+
],
|
|
3559
|
+
license: [
|
|
3560
|
+
{
|
|
3561
|
+
uri: "http://creativecommons.org/publicdomain/zero/1.0/"
|
|
3562
|
+
}
|
|
3563
|
+
],
|
|
3564
|
+
namespace: "https://d-nb.info/gnd/",
|
|
3565
|
+
notation: [
|
|
3566
|
+
"GND"
|
|
3567
|
+
],
|
|
3568
|
+
notationPattern: "[0-9X-]+",
|
|
3569
|
+
prefLabel: {
|
|
3570
|
+
de: "Gemeinsame Normdatei",
|
|
3571
|
+
en: "Integrated Authority File"
|
|
3572
|
+
},
|
|
3573
|
+
types: [
|
|
3574
|
+
{
|
|
3575
|
+
uri: "https://d-nb.info/standards/elementset/gnd#DifferentiatedPerson",
|
|
3576
|
+
prefLabel: {
|
|
3577
|
+
de: "Person",
|
|
3578
|
+
en: "Person"
|
|
3579
|
+
}
|
|
3580
|
+
},
|
|
3581
|
+
{
|
|
3582
|
+
uri: "https://d-nb.info/standards/elementset/gnd#PlaceOrGeographicName",
|
|
3583
|
+
prefLabel: {
|
|
3584
|
+
de: "Geografikum",
|
|
3585
|
+
en: "Place"
|
|
3586
|
+
}
|
|
3587
|
+
},
|
|
3588
|
+
{
|
|
3589
|
+
uri: "https://d-nb.info/standards/elementset/gnd#CorporateBody",
|
|
3590
|
+
prefLabel: {
|
|
3591
|
+
de: "Organisation",
|
|
3592
|
+
en: "Organization"
|
|
3593
|
+
}
|
|
3594
|
+
},
|
|
3595
|
+
{
|
|
3596
|
+
uri: "https://d-nb.info/standards/elementset/gnd#SubjectHeading",
|
|
3597
|
+
prefLabel: {
|
|
3598
|
+
de: "Sachbegriff",
|
|
3599
|
+
en: "Subject"
|
|
3600
|
+
}
|
|
3601
|
+
},
|
|
3602
|
+
{
|
|
3603
|
+
uri: "https://d-nb.info/standards/elementset/gnd#Work",
|
|
3604
|
+
prefLabel: {
|
|
3605
|
+
de: "Werk",
|
|
3606
|
+
en: "Work"
|
|
3607
|
+
}
|
|
3608
|
+
},
|
|
3609
|
+
{
|
|
3610
|
+
uri: "https://d-nb.info/standards/elementset/gnd#ConferenceOrEvent",
|
|
3611
|
+
prefLabel: {
|
|
3612
|
+
de: "Konferenz oder Veranstaltung",
|
|
3613
|
+
en: "ConferenceOrEvent"
|
|
3614
|
+
}
|
|
3615
|
+
}
|
|
3616
|
+
]
|
|
3617
|
+
};
|
|
3618
|
+
var gndTypeScheme = new import_jskos_tools11.default.ConceptScheme({
|
|
3619
|
+
uri: "https://d-nb.info/standards/elementset/gnd",
|
|
3620
|
+
namespace: "https://d-nb.info/standards/elementset/gnd#"
|
|
3621
|
+
});
|
|
3622
|
+
gndJson.types.forEach((type) => {
|
|
3623
|
+
type.notation = [gndTypeScheme.notationFromUri(type.uri)];
|
|
3624
|
+
});
|
|
3625
|
+
var gnd = new import_jskos_tools11.default.ConceptScheme(gndJson);
|
|
3626
|
+
var broaderProps = [
|
|
3627
|
+
"broaderTerm",
|
|
3628
|
+
"broaderTermGeneral",
|
|
3629
|
+
"broaderTermGeneric",
|
|
3630
|
+
"broaderTermInstantial",
|
|
3631
|
+
"broaderTermPartitive"
|
|
3632
|
+
];
|
|
3633
|
+
function toJSKOS(data3) {
|
|
3634
|
+
const concept = {
|
|
3635
|
+
uri: data3.id,
|
|
3636
|
+
notation: [data3.gndIdentifier],
|
|
3637
|
+
prefLabel: { de: data3.preferredName },
|
|
3638
|
+
inScheme: [{ uri: gndJson.uri }]
|
|
3639
|
+
};
|
|
3640
|
+
if (data3.variantName) {
|
|
3641
|
+
concept.altLabel = { de: data3.variantName };
|
|
3642
|
+
}
|
|
3643
|
+
concept.type = data3.type.map((type) => gndTypeScheme.uriFromNotation(type)).filter(Boolean);
|
|
3644
|
+
concept.broader = [];
|
|
3645
|
+
broaderProps.forEach((prop) => {
|
|
3646
|
+
concept.broader = concept.broader.concat(data3[prop] || []);
|
|
3647
|
+
});
|
|
3648
|
+
concept.broader = concept.broader.map((broader) => ({ uri: broader.id }));
|
|
3649
|
+
concept.identifier = [concept.uri.replace("https://", "http://")];
|
|
3650
|
+
return concept;
|
|
3651
|
+
}
|
|
3652
|
+
function fixURI(uri) {
|
|
3653
|
+
if (uri && uri.startsWith("http://")) {
|
|
3654
|
+
return uri.replace("http://", "https://");
|
|
3655
|
+
}
|
|
3656
|
+
return uri;
|
|
3657
|
+
}
|
|
3658
|
+
var LobidApiProvider = class extends BaseProvider {
|
|
3659
|
+
_prepare() {
|
|
3660
|
+
this.has.schemes = true;
|
|
3661
|
+
this.has.data = true;
|
|
3662
|
+
this.has.concepts = true;
|
|
3663
|
+
this.has.narrower = true;
|
|
3664
|
+
this.has.suggest = true;
|
|
3665
|
+
this.has.search = true;
|
|
3666
|
+
this.has.types = true;
|
|
3667
|
+
listOfCapabilities.filter((c) => !this.has[c]).forEach((c) => {
|
|
3668
|
+
this.has[c] = false;
|
|
3669
|
+
});
|
|
3670
|
+
}
|
|
3671
|
+
/**
|
|
3672
|
+
* Used by `registryForScheme` (see src/lib/CocodaSDK.js) to determine a provider config for a concept schceme.
|
|
3673
|
+
*
|
|
3674
|
+
* @param {Object} options
|
|
3675
|
+
* @param {Object} options.url API URL for server
|
|
3676
|
+
* @returns {Object} provider configuration
|
|
3677
|
+
*/
|
|
3678
|
+
static _registryConfigForBartocApiConfig({ url, scheme } = {}) {
|
|
3679
|
+
if (!url || !scheme || !import_jskos_tools11.default.compare(scheme, gndJson) || url !== "https://lobid.org/gnd/api") {
|
|
3680
|
+
return null;
|
|
3681
|
+
}
|
|
3682
|
+
return {
|
|
3683
|
+
api: "https://lobid.org/gnd/",
|
|
3684
|
+
schemes: [gndJson]
|
|
3685
|
+
};
|
|
3686
|
+
}
|
|
3687
|
+
async getSchemes() {
|
|
3688
|
+
return [gndJson];
|
|
3689
|
+
}
|
|
3690
|
+
async getTop() {
|
|
3691
|
+
return [];
|
|
3692
|
+
}
|
|
3693
|
+
async getConcepts({ concepts }) {
|
|
3694
|
+
if (!concepts) {
|
|
3695
|
+
throw new errors.InvalidOrMissingParameterError({ parameter: "concepts" });
|
|
3696
|
+
}
|
|
3697
|
+
if (!Array.isArray(concepts)) {
|
|
3698
|
+
concepts = [concepts];
|
|
3699
|
+
}
|
|
3700
|
+
const notations = concepts.map((concept) => {
|
|
3701
|
+
if (concept?.notation?.[0]) {
|
|
3702
|
+
return concept?.notation?.[0];
|
|
3703
|
+
}
|
|
3704
|
+
return gnd.notationFromUri(fixURI(concept?.uri));
|
|
3705
|
+
}).filter(Boolean);
|
|
3706
|
+
const errors = [];
|
|
3707
|
+
const results = await Promise.all(notations.map(async (notation) => {
|
|
3708
|
+
try {
|
|
3709
|
+
const result = await import_axios3.default.get(`${this._api.api}${notation}.json`);
|
|
3710
|
+
return toJSKOS(result.data);
|
|
3711
|
+
} catch (error) {
|
|
3712
|
+
errors.push(error);
|
|
3713
|
+
}
|
|
3714
|
+
}));
|
|
3715
|
+
if (errors.length === concepts.length) {
|
|
3716
|
+
throw errors[0];
|
|
3717
|
+
}
|
|
3718
|
+
return results.filter(Boolean);
|
|
3719
|
+
}
|
|
3720
|
+
async getNarrower({ concept, limit = 200, offset = 0 }) {
|
|
3721
|
+
if (!concept || !concept.uri) {
|
|
3722
|
+
throw new InvalidOrMissingParameterError({ parameter: "concept" });
|
|
3723
|
+
}
|
|
3724
|
+
const uri = fixURI(concept.uri);
|
|
3725
|
+
const q = broaderProps.map((prop) => `${prop}.id:"${uri}"`).join(" OR ");
|
|
3726
|
+
const result = await import_axios3.default.get(`${this._api.api}search`, {
|
|
3727
|
+
params: {
|
|
3728
|
+
q,
|
|
3729
|
+
format: "json",
|
|
3730
|
+
size: limit,
|
|
3731
|
+
from: offset
|
|
3732
|
+
}
|
|
3733
|
+
});
|
|
3734
|
+
return result.data.member.map((member) => toJSKOS(member));
|
|
3735
|
+
}
|
|
3736
|
+
async suggest(config) {
|
|
3737
|
+
const results = await this._search({ ...config, format: "json:suggest" });
|
|
3738
|
+
return [
|
|
3739
|
+
config.search,
|
|
3740
|
+
results.map((r) => r.label),
|
|
3741
|
+
[],
|
|
3742
|
+
results.map((r) => r.id)
|
|
3743
|
+
];
|
|
3744
|
+
}
|
|
3745
|
+
async search(config) {
|
|
3746
|
+
const results = await this._search(config);
|
|
3747
|
+
return results.member.map((member) => toJSKOS(member));
|
|
3748
|
+
}
|
|
3749
|
+
async _search({ search, types, limit = 100, offset = 0, format = "json" }) {
|
|
3750
|
+
if (!search) {
|
|
3751
|
+
throw new InvalidOrMissingParameterError({ parameter: "search" });
|
|
3752
|
+
}
|
|
3753
|
+
let filter = "";
|
|
3754
|
+
types = types?.map((type) => gndTypeScheme.notationFromUri(fixURI(type))).filter(Boolean) || [];
|
|
3755
|
+
if (types.length) {
|
|
3756
|
+
filter = types.map((type) => `type:${type}`).join(" OR ");
|
|
3757
|
+
}
|
|
3758
|
+
const results = await import_axios3.default.get(`${this._api.api}search`, { params: {
|
|
3759
|
+
q: search,
|
|
3760
|
+
filter,
|
|
3761
|
+
format,
|
|
3762
|
+
size: limit,
|
|
3763
|
+
from: offset
|
|
3764
|
+
} });
|
|
3765
|
+
return results.data;
|
|
3766
|
+
}
|
|
3767
|
+
async getTypes({ scheme }) {
|
|
3768
|
+
if (!scheme || !import_jskos_tools11.default.compare(scheme, gndJson)) {
|
|
3769
|
+
throw new InvalidOrMissingParameterError({ parameter: "search", message: scheme?.uri ? `scheme ${scheme?.uri} not supported` : "" });
|
|
3770
|
+
}
|
|
3771
|
+
return gndJson.types;
|
|
3772
|
+
}
|
|
3773
|
+
};
|
|
3774
|
+
LobidApiProvider.providerName = "LobidApi";
|
|
3775
|
+
|
|
3776
|
+
// src/providers/mycore-provider.js
|
|
3777
|
+
var import_jskos_tools12 = __toESM(require("jskos-tools"), 1);
|
|
2873
3778
|
var import_flexsearch2 = __toESM(require("flexsearch"), 1);
|
|
2874
3779
|
var data2 = {};
|
|
2875
3780
|
var MyCoReProvider = class extends BaseProvider {
|
|
@@ -2889,6 +3794,14 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
2889
3794
|
_setup() {
|
|
2890
3795
|
this._scheme = null;
|
|
2891
3796
|
}
|
|
3797
|
+
/**
|
|
3798
|
+
* Used by `registryForScheme` (see src/lib/CocodaSDK.js) to determine a provider config for a concept schceme.
|
|
3799
|
+
*
|
|
3800
|
+
* @param {Object} options
|
|
3801
|
+
* @param {Object} options.url API URL for BARTOC instance
|
|
3802
|
+
* @param {Object} options.scheme scheme for which the config is requested
|
|
3803
|
+
* @returns {Object} provider configuration
|
|
3804
|
+
*/
|
|
2892
3805
|
static _registryConfigForBartocApiConfig({ url, scheme } = {}) {
|
|
2893
3806
|
if (!url || !scheme) {
|
|
2894
3807
|
return null;
|
|
@@ -2897,6 +3810,9 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
2897
3810
|
api: url
|
|
2898
3811
|
};
|
|
2899
3812
|
}
|
|
3813
|
+
/**
|
|
3814
|
+
* Converts scheme info (full scheme data that comes from the API) to a JSKOS scheme
|
|
3815
|
+
*/
|
|
2900
3816
|
_schemeInfoToJSKOS(schemeInfo) {
|
|
2901
3817
|
const uri = schemeInfo.labels.find((l) => l.lang === "x-uri").text;
|
|
2902
3818
|
const prefLabel = {};
|
|
@@ -2915,6 +3831,13 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
2915
3831
|
}
|
|
2916
3832
|
return scheme;
|
|
2917
3833
|
}
|
|
3834
|
+
/**
|
|
3835
|
+
* Converts a category to a JSKOS concept.
|
|
3836
|
+
* - Also saves that concept in data
|
|
3837
|
+
* - Also adds the concept's prefLabels to the search index
|
|
3838
|
+
*
|
|
3839
|
+
* ? Question: Should scopeNotes be part of the search index?
|
|
3840
|
+
*/
|
|
2918
3841
|
_categoryToJSKOS(category, { scheme, broader = [] }) {
|
|
2919
3842
|
if (!category || !scheme) {
|
|
2920
3843
|
return null;
|
|
@@ -2947,11 +3870,17 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
2947
3870
|
};
|
|
2948
3871
|
return data2[scheme.uri].concepts[uri];
|
|
2949
3872
|
}
|
|
3873
|
+
/**
|
|
3874
|
+
* Helper function that replaces `narrower` key with [null] if it has values. Use this before returning concepts.
|
|
3875
|
+
*/
|
|
2950
3876
|
_removeNarrower(concept) {
|
|
2951
3877
|
if (!concept)
|
|
2952
3878
|
return concept;
|
|
2953
3879
|
return Object.assign({}, concept, { narrower: concept.narrower && concept.narrower.length ? [null] : [] });
|
|
2954
3880
|
}
|
|
3881
|
+
/**
|
|
3882
|
+
* Loads the data from the API. Only called from getSchemes and only called once.
|
|
3883
|
+
*/
|
|
2955
3884
|
async _loadSchemeData(config) {
|
|
2956
3885
|
const schemeInfo = await this.axios({
|
|
2957
3886
|
...config,
|
|
@@ -2994,7 +3923,7 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
2994
3923
|
if (!this._scheme) {
|
|
2995
3924
|
await this.getSchemes(config);
|
|
2996
3925
|
}
|
|
2997
|
-
if (!
|
|
3926
|
+
if (!import_jskos_tools12.default.compare(scheme, this._scheme)) {
|
|
2998
3927
|
throw new InvalidOrMissingParameterError({ parameter: "scheme", message: "Requested vocabulary seems to be unsupported by this API." });
|
|
2999
3928
|
}
|
|
3000
3929
|
return data2[this._scheme.uri].topConcepts.map(this._removeNarrower);
|
|
@@ -3038,6 +3967,15 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
3038
3967
|
concept = data2[this._scheme.uri].concepts[concept.uri];
|
|
3039
3968
|
return (concept && concept.narrower || []).map((c) => data2[this._scheme.uri].concepts[c.uri]).map(this._removeNarrower);
|
|
3040
3969
|
}
|
|
3970
|
+
/**
|
|
3971
|
+
* Returns concept search results.
|
|
3972
|
+
*
|
|
3973
|
+
* @param {Object} config
|
|
3974
|
+
* @param {string} config.search search string
|
|
3975
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
3976
|
+
* @param {number} [config.limit=100] maximum number of search results
|
|
3977
|
+
* @returns {Array} array of JSKOS concept objects
|
|
3978
|
+
*/
|
|
3041
3979
|
async search({ search, scheme, limit = 100 }) {
|
|
3042
3980
|
if (!scheme || !scheme.uri) {
|
|
3043
3981
|
throw new InvalidOrMissingParameterError({ parameter: "scheme" });
|
|
@@ -3051,19 +3989,28 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
3051
3989
|
if (!this._scheme) {
|
|
3052
3990
|
await this.getSchemes();
|
|
3053
3991
|
}
|
|
3054
|
-
if (!
|
|
3992
|
+
if (!import_jskos_tools12.default.compare(scheme, this._scheme)) {
|
|
3055
3993
|
throw new InvalidOrMissingParameterError({ parameter: "scheme", message: "Requested vocabulary seems to be unsupported by this API." });
|
|
3056
3994
|
}
|
|
3057
3995
|
const result = await data2[this._scheme.uri].searchIndex.search(search);
|
|
3058
3996
|
return result.map((uri) => data2[this._scheme.uri].concepts[uri]).map(this._removeNarrower).slice(0, limit);
|
|
3059
3997
|
}
|
|
3998
|
+
/**
|
|
3999
|
+
* Returns suggestion result in OpenSearch Suggest Format.
|
|
4000
|
+
*
|
|
4001
|
+
* @param {Object} config
|
|
4002
|
+
* @param {string} config.search search string
|
|
4003
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
4004
|
+
* @param {number} [config.limit=100] maximum number of search results
|
|
4005
|
+
* @returns {Array} result in OpenSearch Suggest Format
|
|
4006
|
+
*/
|
|
3060
4007
|
async suggest(config) {
|
|
3061
4008
|
config._raw = true;
|
|
3062
4009
|
const concepts = await this.search(config);
|
|
3063
4010
|
const result = [config.search, [], [], []];
|
|
3064
4011
|
for (let concept of concepts) {
|
|
3065
|
-
const notation =
|
|
3066
|
-
const label =
|
|
4012
|
+
const notation = import_jskos_tools12.default.notation(concept);
|
|
4013
|
+
const label = import_jskos_tools12.default.prefLabel(concept);
|
|
3067
4014
|
result[1].push((notation ? notation + " " : "") + label);
|
|
3068
4015
|
result[2].push("");
|
|
3069
4016
|
result[3].push(concept.uri);
|
|
@@ -3100,16 +4047,37 @@ providers.addProvider(ConceptApiProvider);
|
|
|
3100
4047
|
providers.addProvider(MappingsApiProvider);
|
|
3101
4048
|
var registryCache = {};
|
|
3102
4049
|
var CocodaSDK = class {
|
|
4050
|
+
/**
|
|
4051
|
+
* CDK constructor.
|
|
4052
|
+
*
|
|
4053
|
+
* @param {Object} [config={}] Cocoda-stye config object
|
|
4054
|
+
*/
|
|
3103
4055
|
constructor(config) {
|
|
3104
4056
|
this.config = config;
|
|
3105
|
-
this.axios =
|
|
4057
|
+
this.axios = import_axios4.default.create();
|
|
3106
4058
|
}
|
|
4059
|
+
/**
|
|
4060
|
+
* Method to set the configuration.
|
|
4061
|
+
*
|
|
4062
|
+
* @param {Object} config Cocoda-stye config object
|
|
4063
|
+
*/
|
|
3107
4064
|
setConfig(config) {
|
|
3108
4065
|
this.config = config;
|
|
3109
4066
|
}
|
|
4067
|
+
/**
|
|
4068
|
+
* Current configuration.
|
|
4069
|
+
*
|
|
4070
|
+
* @returns {Object} current configuration
|
|
4071
|
+
*/
|
|
3110
4072
|
get config() {
|
|
3111
4073
|
return this._config;
|
|
3112
4074
|
}
|
|
4075
|
+
/**
|
|
4076
|
+
* Prepares config when set.
|
|
4077
|
+
*
|
|
4078
|
+
* @param {Object} config Cocoda config object
|
|
4079
|
+
* @private
|
|
4080
|
+
*/
|
|
3113
4081
|
set config(config) {
|
|
3114
4082
|
config = config || {};
|
|
3115
4083
|
config.registries = config.registries || [];
|
|
@@ -3119,16 +4087,44 @@ var CocodaSDK = class {
|
|
|
3119
4087
|
});
|
|
3120
4088
|
this._config = config;
|
|
3121
4089
|
}
|
|
4090
|
+
/**
|
|
4091
|
+
* Map of registered providers.
|
|
4092
|
+
*
|
|
4093
|
+
* @returns {Object} map of registered providers (name -> provider)
|
|
4094
|
+
*/
|
|
3122
4095
|
get providers() {
|
|
3123
4096
|
return providers;
|
|
3124
4097
|
}
|
|
4098
|
+
/**
|
|
4099
|
+
* Creates a new CDK instance (same as `new CocodaSDK(config)`).
|
|
4100
|
+
*
|
|
4101
|
+
* @param {Object} config Cocoda config object
|
|
4102
|
+
* @returns {CocodaSDK} new CDK instance
|
|
4103
|
+
*/
|
|
3125
4104
|
createInstance(config) {
|
|
3126
4105
|
return new CocodaSDK(config);
|
|
3127
4106
|
}
|
|
4107
|
+
/**
|
|
4108
|
+
* Offer method to load a config file from URL.
|
|
4109
|
+
*
|
|
4110
|
+
* @param {string} url URL of config as JSON
|
|
4111
|
+
*/
|
|
3128
4112
|
async loadConfig(url) {
|
|
3129
4113
|
const response = await this.axios.get(url);
|
|
3130
4114
|
this.config = response.data;
|
|
3131
4115
|
}
|
|
4116
|
+
/**
|
|
4117
|
+
* Method to load buildInfo.
|
|
4118
|
+
*
|
|
4119
|
+
* Callback will only be called if buildInfo changes; it will not be called when there is no previous value.
|
|
4120
|
+
*
|
|
4121
|
+
* @param {Object} config
|
|
4122
|
+
* @param {string} [config.url] full URL for build-info.json (default is taken from config.cocodaBaseUrl)
|
|
4123
|
+
* @param {Object} [config.buildInfo] current buildInfo
|
|
4124
|
+
* @param {number} [config.interval=60000] interval to load buildInfo in ms
|
|
4125
|
+
* @param {Function} config.callback callback function called with two parameters (error, buildInfo, previousBuildInfo)
|
|
4126
|
+
* @returns {Object} object with two function properties, `stop` to cancel the repeating request, `start` to restart the repeating request, as well as three convenience properties, `isPaused` (whether it is currently paused), `lastResult`, `hasErrored` (whether the last call of the function has errored)
|
|
4127
|
+
*/
|
|
3132
4128
|
loadBuildInfo({ url, buildInfo = null, interval = 6e4, callback, ...config }) {
|
|
3133
4129
|
if (!url && !this.config.cocodaBaseUrl) {
|
|
3134
4130
|
throw new CDKError({ message: "Could not determine URL to load build config." });
|
|
@@ -3155,20 +4151,64 @@ var CocodaSDK = class {
|
|
|
3155
4151
|
}
|
|
3156
4152
|
});
|
|
3157
4153
|
}
|
|
4154
|
+
/**
|
|
4155
|
+
* Method to get a registry by URI.
|
|
4156
|
+
*
|
|
4157
|
+
* @param {string} uri URI of registry in config
|
|
4158
|
+
* @returns {?Object} initialized registry from config if found
|
|
4159
|
+
*/
|
|
3158
4160
|
getRegistryForUri(uri) {
|
|
3159
4161
|
return this.config.registries.find((r) => r.uri == uri);
|
|
3160
4162
|
}
|
|
4163
|
+
/**
|
|
4164
|
+
* Method to initialize registry.
|
|
4165
|
+
*
|
|
4166
|
+
* @param {Object} registry JSKOS registry object
|
|
4167
|
+
* @returns {Object} initialized registry
|
|
4168
|
+
*/
|
|
3161
4169
|
initializeRegistry(registry) {
|
|
3162
4170
|
registry = providers.init(registry);
|
|
3163
4171
|
registry.cdk = this;
|
|
3164
4172
|
return registry;
|
|
3165
4173
|
}
|
|
4174
|
+
/**
|
|
4175
|
+
* Method to add custom provider.
|
|
4176
|
+
*
|
|
4177
|
+
* @param {Object} provider provider class that extends BaseProvider
|
|
4178
|
+
*/
|
|
3166
4179
|
addProvider(provider) {
|
|
3167
4180
|
providers.addProvider(provider);
|
|
3168
4181
|
}
|
|
4182
|
+
/**
|
|
4183
|
+
* Static method to add custom provider.
|
|
4184
|
+
*
|
|
4185
|
+
* @param {Object} provider provider class that extends BaseProvider
|
|
4186
|
+
*/
|
|
3169
4187
|
static addProvider(provider) {
|
|
3170
4188
|
providers.addProvider(provider);
|
|
3171
4189
|
}
|
|
4190
|
+
/**
|
|
4191
|
+
* Repeatedly call a certain function.
|
|
4192
|
+
*
|
|
4193
|
+
* Notes:
|
|
4194
|
+
* - Callback will only be called if the results were changed.
|
|
4195
|
+
* - The function will only be repeated after the previous call is resolved. This means that the total interval duration is (interval + duration of function call).
|
|
4196
|
+
*
|
|
4197
|
+
* Example:
|
|
4198
|
+
* ```js
|
|
4199
|
+
* cdk.repeat({
|
|
4200
|
+
* function: () => registry.getMappings(),
|
|
4201
|
+
* callback: (error, result) => console.log(result),
|
|
4202
|
+
* })
|
|
4203
|
+
* ```
|
|
4204
|
+
*
|
|
4205
|
+
* @param {Object} config
|
|
4206
|
+
* @param {string} config.function a function to be called (can be async)
|
|
4207
|
+
* @param {number} [config.interval=15000] interval in ms
|
|
4208
|
+
* @param {Function} config.callback callback function called with two parameters (error, result, previousResult)
|
|
4209
|
+
* @param {boolean} [config.callImmediately=true] whether to call the function immediately
|
|
4210
|
+
* @returns {Object} object with two function properties, `stop` to cancel the repeating request, `start` to restart the repeating request, as well as three convenience properties, `isPaused` (whether it is currently paused), `lastResult`, `hasErrored` (whether the last call of the function has errored)
|
|
4211
|
+
*/
|
|
3172
4212
|
repeat({ function: func, interval = 15e3, callback, callImmediately = true } = {}) {
|
|
3173
4213
|
if (!func) {
|
|
3174
4214
|
throw new InvalidOrMissingParameterError({ parameter: "function" });
|
|
@@ -3255,6 +4295,12 @@ var CocodaSDK = class {
|
|
|
3255
4295
|
}
|
|
3256
4296
|
};
|
|
3257
4297
|
}
|
|
4298
|
+
/**
|
|
4299
|
+
* Gets schemes from all registries that support schemes and merges the results.
|
|
4300
|
+
*
|
|
4301
|
+
* @param {Object} [config={}] configuration object that will be used as a parameter for internal `getSchemes` calls
|
|
4302
|
+
* @returns {Object[]} array of JSKOS schemes
|
|
4303
|
+
*/
|
|
3258
4304
|
async getSchemes(config = {}) {
|
|
3259
4305
|
let schemes = [], promises = [];
|
|
3260
4306
|
for (let registry of this.config.registries) {
|
|
@@ -3264,7 +4310,7 @@ var CocodaSDK = class {
|
|
|
3264
4310
|
scheme._registry = registry;
|
|
3265
4311
|
scheme.__DETAILSLOADED__ = 1;
|
|
3266
4312
|
scheme.type = scheme.type || ["http://www.w3.org/2004/02/skos/core#ConceptScheme"];
|
|
3267
|
-
let otherScheme = schemes.find((s) =>
|
|
4313
|
+
let otherScheme = schemes.find((s) => import_jskos_tools13.default.compare(s, scheme)), prio, otherPrio, override = false;
|
|
3268
4314
|
if (otherScheme) {
|
|
3269
4315
|
prio = this.config.registries.indexOf(registry);
|
|
3270
4316
|
if (prio != -1) {
|
|
@@ -3286,19 +4332,19 @@ var CocodaSDK = class {
|
|
|
3286
4332
|
}
|
|
3287
4333
|
if (!otherScheme || override) {
|
|
3288
4334
|
if (override) {
|
|
3289
|
-
let otherSchemeIndex = schemes.findIndex((s) =>
|
|
4335
|
+
let otherSchemeIndex = schemes.findIndex((s) => import_jskos_tools13.default.compare(s, otherScheme));
|
|
3290
4336
|
if (otherSchemeIndex != -1) {
|
|
3291
4337
|
schemes.splice(otherSchemeIndex, 1);
|
|
3292
4338
|
}
|
|
3293
|
-
scheme =
|
|
4339
|
+
scheme = import_jskos_tools13.default.merge(scheme, import_omit.default(otherScheme, ["concepts", "topConcepts"]), { mergeUris: true, skipPaths: ["_registry"] });
|
|
3294
4340
|
}
|
|
3295
4341
|
scheme._registry = registry;
|
|
3296
4342
|
schemes.push(scheme);
|
|
3297
4343
|
} else {
|
|
3298
|
-
const index = schemes.findIndex((s) =>
|
|
4344
|
+
const index = schemes.findIndex((s) => import_jskos_tools13.default.compare(s, scheme));
|
|
3299
4345
|
if (index != -1) {
|
|
3300
4346
|
const otherSchemeRegistry = schemes[index]._registry;
|
|
3301
|
-
schemes[index] =
|
|
4347
|
+
schemes[index] = import_jskos_tools13.default.merge(schemes[index], import_omit.default(scheme, ["concepts", "topConcepts"]), { mergeUris: true, skipPaths: ["_registry"] });
|
|
3302
4348
|
schemes[index]._registry = otherSchemeRegistry;
|
|
3303
4349
|
}
|
|
3304
4350
|
}
|
|
@@ -3320,7 +4366,7 @@ var CocodaSDK = class {
|
|
|
3320
4366
|
scheme._registry = newRegistry;
|
|
3321
4367
|
}
|
|
3322
4368
|
});
|
|
3323
|
-
return
|
|
4369
|
+
return import_jskos_tools13.default.sortSchemes(schemes.filter(Boolean));
|
|
3324
4370
|
}
|
|
3325
4371
|
registryForScheme(scheme) {
|
|
3326
4372
|
let registry = scheme._registry;
|
|
@@ -3331,30 +4377,34 @@ var CocodaSDK = class {
|
|
|
3331
4377
|
const url = config.url;
|
|
3332
4378
|
if (registryCache[url]) {
|
|
3333
4379
|
const registry2 = registryCache[url];
|
|
3334
|
-
if (Array.isArray(registry2._jskos.schemes) && !
|
|
4380
|
+
if (Array.isArray(registry2._jskos.schemes) && !import_jskos_tools13.default.isContainedIn(scheme, registry2._jskos.schemes)) {
|
|
3335
4381
|
registry2._jskos.schemes.push(scheme);
|
|
3336
4382
|
}
|
|
3337
4383
|
return registry2;
|
|
3338
4384
|
} else {
|
|
3339
|
-
const provider = Object.values(providers).find((p) => p.providerType === type);
|
|
3340
|
-
if (!provider || !provider._registryConfigForBartocApiConfig) {
|
|
3341
|
-
continue;
|
|
3342
|
-
}
|
|
3343
|
-
const providerName = provider.providerName;
|
|
3344
4385
|
config.scheme = scheme;
|
|
3345
|
-
|
|
3346
|
-
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3351
|
-
|
|
3352
|
-
|
|
3353
|
-
|
|
3354
|
-
|
|
4386
|
+
for (const provider of Object.values(providers)) {
|
|
4387
|
+
if (provider.providerType && provider.providerType !== type) {
|
|
4388
|
+
continue;
|
|
4389
|
+
}
|
|
4390
|
+
if (!provider._registryConfigForBartocApiConfig) {
|
|
4391
|
+
continue;
|
|
4392
|
+
}
|
|
4393
|
+
const providerName = provider.providerName;
|
|
4394
|
+
const registryConfig = providers[providerName]._registryConfigForBartocApiConfig(config);
|
|
4395
|
+
if (!registryConfig) {
|
|
4396
|
+
continue;
|
|
4397
|
+
}
|
|
4398
|
+
registryConfig.provider = providerName;
|
|
4399
|
+
try {
|
|
4400
|
+
registry = this.initializeRegistry(registryConfig);
|
|
4401
|
+
if (registry) {
|
|
4402
|
+
registryCache[url] = registry;
|
|
4403
|
+
return registry;
|
|
4404
|
+
}
|
|
4405
|
+
} catch (error) {
|
|
4406
|
+
continue;
|
|
3355
4407
|
}
|
|
3356
|
-
} catch (error) {
|
|
3357
|
-
continue;
|
|
3358
4408
|
}
|
|
3359
4409
|
}
|
|
3360
4410
|
}
|
|
@@ -3373,6 +4423,7 @@ function addAllProviders(_cdk) {
|
|
|
3373
4423
|
CocodaSDK,
|
|
3374
4424
|
ConceptApiProvider,
|
|
3375
4425
|
LabelSearchSuggestionProvider,
|
|
4426
|
+
LobidApiProvider,
|
|
3376
4427
|
LocApiProvider,
|
|
3377
4428
|
LocalMappingsProvider,
|
|
3378
4429
|
MappingsApiProvider,
|