cocoda-sdk 3.3.2 → 3.3.4
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/dist/cjs/index.cjs +824 -1
- 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 +99 -0
- package/dist/esm/providers/base-provider.js +88 -0
- package/dist/esm/providers/concept-api-provider.js +108 -0
- package/dist/esm/providers/label-search-suggestion-provider.js +54 -1
- package/dist/esm/providers/loc-api-provider.js +58 -0
- package/dist/esm/providers/local-mappings-provider.js +57 -0
- 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 +9 -9
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
|
));
|
|
@@ -58,6 +62,14 @@ __export(errors_exports, {
|
|
|
58
62
|
NetworkError: () => NetworkError
|
|
59
63
|
});
|
|
60
64
|
var CDKError = class extends Error {
|
|
65
|
+
/**
|
|
66
|
+
* CDKError constructor.
|
|
67
|
+
*
|
|
68
|
+
* @param {Object} options
|
|
69
|
+
* @param {string} [options.message=""] message for the error
|
|
70
|
+
* @param {Error} [options.relatedError=null] related error
|
|
71
|
+
* @param {number} [options.code] HTTP status code for the error
|
|
72
|
+
*/
|
|
61
73
|
constructor({ message = "", relatedError = null, code = null } = {}) {
|
|
62
74
|
if (!message && relatedError && relatedError.message) {
|
|
63
75
|
message = relatedError.message;
|
|
@@ -69,12 +81,26 @@ var CDKError = class extends Error {
|
|
|
69
81
|
}
|
|
70
82
|
};
|
|
71
83
|
var MethodNotImplementedError = class extends CDKError {
|
|
84
|
+
/**
|
|
85
|
+
* MethodNotImplementedError constructor.
|
|
86
|
+
*
|
|
87
|
+
* @param {Object} config
|
|
88
|
+
* @param {string} config.method method that this error refers to
|
|
89
|
+
* @param {string} [config.message=""] message for the error
|
|
90
|
+
*/
|
|
72
91
|
constructor({ method, message = "", ...options }) {
|
|
73
92
|
options.message = `Method not implemented: ${method} (${message})`;
|
|
74
93
|
super(options);
|
|
75
94
|
}
|
|
76
95
|
};
|
|
77
96
|
var InvalidOrMissingParameterError = class extends CDKError {
|
|
97
|
+
/**
|
|
98
|
+
* InvalidOrMissingParameterError constructor.
|
|
99
|
+
*
|
|
100
|
+
* @param {Object} config
|
|
101
|
+
* @param {string} config.parameter parameter that this error refers to
|
|
102
|
+
* @param {string} [config.message=""] message for the error
|
|
103
|
+
*/
|
|
78
104
|
constructor({ parameter, message = "", ...options }) {
|
|
79
105
|
options.message = `Invalid or missing parameter: ${parameter} (${message})`;
|
|
80
106
|
super(options);
|
|
@@ -145,6 +171,7 @@ __export(utils_exports, {
|
|
|
145
171
|
withCustomProps: () => withCustomProps
|
|
146
172
|
});
|
|
147
173
|
var requestMethods = [
|
|
174
|
+
// General
|
|
148
175
|
{
|
|
149
176
|
method: "getRegistries",
|
|
150
177
|
fallback: [],
|
|
@@ -183,6 +210,7 @@ var requestMethods = [
|
|
|
183
210
|
fallback: [],
|
|
184
211
|
type: "Occurrences"
|
|
185
212
|
},
|
|
213
|
+
// Concepts
|
|
186
214
|
{
|
|
187
215
|
method: "getTop",
|
|
188
216
|
fallback: [],
|
|
@@ -208,6 +236,7 @@ var requestMethods = [
|
|
|
208
236
|
fallback: [],
|
|
209
237
|
type: "Concepts"
|
|
210
238
|
},
|
|
239
|
+
// Mappings
|
|
211
240
|
{
|
|
212
241
|
method: "getMapping",
|
|
213
242
|
fallback: null,
|
|
@@ -246,6 +275,11 @@ var requestMethods = [
|
|
|
246
275
|
method: "deleteMappings",
|
|
247
276
|
fallback: []
|
|
248
277
|
},
|
|
278
|
+
// Annotations
|
|
279
|
+
// {
|
|
280
|
+
// method: "getAnnotation",
|
|
281
|
+
// fallback: "",
|
|
282
|
+
// },
|
|
249
283
|
{
|
|
250
284
|
method: "getAnnotations",
|
|
251
285
|
fallback: [],
|
|
@@ -308,9 +342,15 @@ var listOfCapabilities = [
|
|
|
308
342
|
|
|
309
343
|
// src/providers/base-provider.js
|
|
310
344
|
var BaseProvider = class {
|
|
345
|
+
/**
|
|
346
|
+
* Provider constructor.
|
|
347
|
+
*
|
|
348
|
+
* @param {Object} registry the registry for this provider
|
|
349
|
+
*/
|
|
311
350
|
constructor(registry = {}) {
|
|
312
351
|
this._jskos = registry;
|
|
313
352
|
this.axios = import_axios.default.create({
|
|
353
|
+
// TODO: Decide on timeout value
|
|
314
354
|
timeout: 2e4
|
|
315
355
|
});
|
|
316
356
|
this._path = typeof window !== "undefined" && window.location.pathname;
|
|
@@ -324,6 +364,7 @@ var BaseProvider = class {
|
|
|
324
364
|
this._repeating = [];
|
|
325
365
|
this._api = {
|
|
326
366
|
status: registry.status,
|
|
367
|
+
// If `schemes` on registry is an array, remove it because we're only keeping it in this._jskos.schemes
|
|
327
368
|
schemes: Array.isArray(registry.schemes) ? void 0 : registry.schemes,
|
|
328
369
|
top: registry.top,
|
|
329
370
|
data: registry.data,
|
|
@@ -469,6 +510,7 @@ var BaseProvider = class {
|
|
|
469
510
|
};
|
|
470
511
|
}
|
|
471
512
|
}
|
|
513
|
+
// Expose some properties from original registry object as getters
|
|
472
514
|
get uri() {
|
|
473
515
|
return this._jskos.uri;
|
|
474
516
|
}
|
|
@@ -490,6 +532,11 @@ var BaseProvider = class {
|
|
|
490
532
|
get stored() {
|
|
491
533
|
return this._jskos.stored !== void 0 ? this._jskos.stored : this.constructor.stored;
|
|
492
534
|
}
|
|
535
|
+
/**
|
|
536
|
+
* Load data about registry via the status endpoint.
|
|
537
|
+
*
|
|
538
|
+
* @returns {Promise} Promise that resolves when initialization is complete.
|
|
539
|
+
*/
|
|
493
540
|
async init() {
|
|
494
541
|
if (this._init) {
|
|
495
542
|
return this._init;
|
|
@@ -523,17 +570,48 @@ var BaseProvider = class {
|
|
|
523
570
|
})();
|
|
524
571
|
return this._init;
|
|
525
572
|
}
|
|
573
|
+
/**
|
|
574
|
+
* Preparation to be executed before init. Should be overwritten by subclasses.
|
|
575
|
+
*
|
|
576
|
+
* @private
|
|
577
|
+
*/
|
|
526
578
|
_prepare() {
|
|
527
579
|
}
|
|
580
|
+
/**
|
|
581
|
+
* Setup to be executed after init. Should be overwritten by subclasses.
|
|
582
|
+
*
|
|
583
|
+
* @private
|
|
584
|
+
*/
|
|
528
585
|
_setup() {
|
|
529
586
|
}
|
|
587
|
+
/**
|
|
588
|
+
* Returns a source for a axios cancel token.
|
|
589
|
+
*
|
|
590
|
+
* @returns {Object} axios cancel token source
|
|
591
|
+
*/
|
|
530
592
|
getCancelTokenSource() {
|
|
531
593
|
return import_axios.default.CancelToken.source();
|
|
532
594
|
}
|
|
595
|
+
/**
|
|
596
|
+
* Sets authentication credentials.
|
|
597
|
+
*
|
|
598
|
+
* @param {Object} options
|
|
599
|
+
* @param {string} options.key public key of login-server instance the user is authorized for
|
|
600
|
+
* @param {string} options.bearerToken token that is sent with each request
|
|
601
|
+
*/
|
|
533
602
|
setAuth({ key = this._auth.key, bearerToken = this._auth.bearerToken }) {
|
|
534
603
|
this._auth.key = key;
|
|
535
604
|
this._auth.bearerToken = bearerToken;
|
|
536
605
|
}
|
|
606
|
+
/**
|
|
607
|
+
* Sets retry configuration.
|
|
608
|
+
*
|
|
609
|
+
* @param {Object} config
|
|
610
|
+
* @param {string[]} [config.methods=["get", "head", "options"]] HTTP methods to retry (lowercase)
|
|
611
|
+
* @param {number[]} [config.statusCodes=[401, 403]] status codes to retry
|
|
612
|
+
* @param {number} [config.count=3] maximum number of retries
|
|
613
|
+
* @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
|
|
614
|
+
*/
|
|
537
615
|
setRetryConfig(config = {}) {
|
|
538
616
|
this._retryConfig = Object.assign({
|
|
539
617
|
methods: ["get", "head", "options"],
|
|
@@ -544,6 +622,16 @@ var BaseProvider = class {
|
|
|
544
622
|
}
|
|
545
623
|
}, config);
|
|
546
624
|
}
|
|
625
|
+
/**
|
|
626
|
+
* Returns whether a user is authorized for a certain request.
|
|
627
|
+
*
|
|
628
|
+
* @param {Object} options
|
|
629
|
+
* @param {string} options.type type of item (e.g. mappings)
|
|
630
|
+
* @param {string} options.action action to be performed (read/create/update/delete)
|
|
631
|
+
* @param {Object} options.user user object
|
|
632
|
+
* @param {boolean} [options.crossUser] whether the request is a crossUser request (i.e. updading/deleting another user's item)
|
|
633
|
+
* @returns {boolean}
|
|
634
|
+
*/
|
|
547
635
|
isAuthorizedFor({ type, action, user, crossUser }) {
|
|
548
636
|
if (action == "read" && this.has[type] === true) {
|
|
549
637
|
return true;
|
|
@@ -578,6 +666,12 @@ var BaseProvider = class {
|
|
|
578
666
|
}
|
|
579
667
|
return !!this.has[type][action];
|
|
580
668
|
}
|
|
669
|
+
/**
|
|
670
|
+
* Returns a boolean whether a certain target scheme is supported or not.
|
|
671
|
+
*
|
|
672
|
+
* @param {Object} scheme
|
|
673
|
+
* @returns {boolean}
|
|
674
|
+
*/
|
|
581
675
|
supportsScheme(scheme) {
|
|
582
676
|
if (!scheme) {
|
|
583
677
|
return false;
|
|
@@ -671,6 +765,13 @@ var BaseProvider = class {
|
|
|
671
765
|
adjustMappings(mappings) {
|
|
672
766
|
return withCustomProps(mappings.map((mapping) => this.adjustMapping(mapping)), mappings);
|
|
673
767
|
}
|
|
768
|
+
/**
|
|
769
|
+
* POSTs multiple mappings. Do not override in subclass!
|
|
770
|
+
*
|
|
771
|
+
* @param {Object} config
|
|
772
|
+
* @param {Array} config.mappings array of mapping objects
|
|
773
|
+
* @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
|
|
774
|
+
*/
|
|
674
775
|
async postMappings({ mappings, ...config } = {}) {
|
|
675
776
|
if (!mappings || !mappings.length) {
|
|
676
777
|
throw new InvalidOrMissingParameterError({ parameter: "mappings" });
|
|
@@ -682,6 +783,13 @@ var BaseProvider = class {
|
|
|
682
783
|
config
|
|
683
784
|
});
|
|
684
785
|
}
|
|
786
|
+
/**
|
|
787
|
+
* DELETEs multiple mappings. Do not override in subclass!
|
|
788
|
+
*
|
|
789
|
+
* @param {Object} config
|
|
790
|
+
* @param {Array} config.mappings array of mapping objects
|
|
791
|
+
* @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
|
|
792
|
+
*/
|
|
685
793
|
async deleteMappings({ mappings, ...config } = {}) {
|
|
686
794
|
if (!mappings || !mappings.length) {
|
|
687
795
|
throw new InvalidOrMissingParameterError({ parameter: "mappings" });
|
|
@@ -693,6 +801,20 @@ var BaseProvider = class {
|
|
|
693
801
|
config
|
|
694
802
|
});
|
|
695
803
|
}
|
|
804
|
+
/**
|
|
805
|
+
* Calls a method that is for only one item for an array of items. Returns an array of results.
|
|
806
|
+
*
|
|
807
|
+
* 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.
|
|
808
|
+
*
|
|
809
|
+
* @param {Object} options
|
|
810
|
+
* @param {string} options.method instance method to call (e.g. `postMapping`)
|
|
811
|
+
* @param {Object[]} options.items items to call the method for
|
|
812
|
+
* @param {string} options.itemProperty the property name for the item when calling the method (e.g. `mapping`)
|
|
813
|
+
* @param {Object} options.config other properties to pass to the method call
|
|
814
|
+
* @returns {any[]} result array with values returned from individual method calls
|
|
815
|
+
*
|
|
816
|
+
* @private
|
|
817
|
+
*/
|
|
696
818
|
async _callHelperForArrayWrappers({ method, items, itemProperty, config }) {
|
|
697
819
|
const errors = [];
|
|
698
820
|
const resultItems = await Promise.all(items.map(async (item) => {
|
|
@@ -716,6 +838,9 @@ var import_localforage = __toESM(require("localforage"), 1);
|
|
|
716
838
|
var import_uuid = require("uuid");
|
|
717
839
|
var uriPrefix = "urn:uuid:";
|
|
718
840
|
var LocalMappingsProvider = class extends BaseProvider {
|
|
841
|
+
/**
|
|
842
|
+
* @private
|
|
843
|
+
*/
|
|
719
844
|
_prepare() {
|
|
720
845
|
this.has.mappings = {
|
|
721
846
|
read: true,
|
|
@@ -727,6 +852,9 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
727
852
|
this.has[c] = false;
|
|
728
853
|
});
|
|
729
854
|
}
|
|
855
|
+
/**
|
|
856
|
+
* @private
|
|
857
|
+
*/
|
|
730
858
|
_setup() {
|
|
731
859
|
this.queue = [];
|
|
732
860
|
this.localStorageKey = "cocoda-mappings--" + this._path;
|
|
@@ -768,6 +896,14 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
768
896
|
}
|
|
769
897
|
return false;
|
|
770
898
|
}
|
|
899
|
+
/**
|
|
900
|
+
* 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.
|
|
901
|
+
* This prevents conflicts when saveMapping is called multiple times simultaneously.
|
|
902
|
+
*
|
|
903
|
+
* TODO: There might be a better solution for this...
|
|
904
|
+
*
|
|
905
|
+
* @private
|
|
906
|
+
*/
|
|
771
907
|
_getMappingsQueue() {
|
|
772
908
|
let last2 = import_last.default(this.queue) || Promise.resolve();
|
|
773
909
|
return new Promise((resolve) => {
|
|
@@ -793,6 +929,13 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
793
929
|
});
|
|
794
930
|
});
|
|
795
931
|
}
|
|
932
|
+
/**
|
|
933
|
+
* Returns a single mapping.
|
|
934
|
+
*
|
|
935
|
+
* @param {Object} config
|
|
936
|
+
* @param {Object} config.mapping JSKOS mapping
|
|
937
|
+
* @returns {Object} JSKOS mapping object
|
|
938
|
+
*/
|
|
796
939
|
async getMapping({ mapping, ...config }) {
|
|
797
940
|
config._raw = true;
|
|
798
941
|
if (!mapping || !mapping.uri) {
|
|
@@ -800,6 +943,14 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
800
943
|
}
|
|
801
944
|
return (await this.getMappings({ ...config, uri: mapping.uri }))[0];
|
|
802
945
|
}
|
|
946
|
+
/**
|
|
947
|
+
* Returns a list of local mappings.
|
|
948
|
+
*
|
|
949
|
+
* TODO: Add support for sort (`created` or `modified`) and order (`asc` or `desc`).
|
|
950
|
+
* TODO: Clean up and use async/await
|
|
951
|
+
*
|
|
952
|
+
* @returns {Object[]} array of JSKOS mapping objects
|
|
953
|
+
*/
|
|
803
954
|
async getMappings({ from, fromScheme, to, toScheme, creator, type, partOf, offset, limit, direction, mode, identifier, uri } = {}) {
|
|
804
955
|
let params = {};
|
|
805
956
|
if (from) {
|
|
@@ -945,6 +1096,13 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
945
1096
|
return mappings;
|
|
946
1097
|
});
|
|
947
1098
|
}
|
|
1099
|
+
/**
|
|
1100
|
+
* Creates a mapping.
|
|
1101
|
+
*
|
|
1102
|
+
* @param {Object} config
|
|
1103
|
+
* @param {Object} config.mapping JSKOS mapping
|
|
1104
|
+
* @returns {Object} JSKOS mapping object
|
|
1105
|
+
*/
|
|
948
1106
|
async postMapping({ mapping }) {
|
|
949
1107
|
if (!mapping) {
|
|
950
1108
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -980,6 +1138,13 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
980
1138
|
throw error;
|
|
981
1139
|
}
|
|
982
1140
|
}
|
|
1141
|
+
/**
|
|
1142
|
+
* Overwrites a mapping.
|
|
1143
|
+
*
|
|
1144
|
+
* @param {Object} config
|
|
1145
|
+
* @param {Object} config.mapping JSKOS mapping
|
|
1146
|
+
* @returns {Object} JSKOS mapping object
|
|
1147
|
+
*/
|
|
983
1148
|
async putMapping({ mapping }) {
|
|
984
1149
|
if (!mapping) {
|
|
985
1150
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1005,6 +1170,13 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
1005
1170
|
throw error;
|
|
1006
1171
|
}
|
|
1007
1172
|
}
|
|
1173
|
+
/**
|
|
1174
|
+
* Patches a mapping.
|
|
1175
|
+
*
|
|
1176
|
+
* @param {Object} config
|
|
1177
|
+
* @param {Object} mapping JSKOS mapping (or part of mapping)
|
|
1178
|
+
* @returns {Object} JSKOS mapping object
|
|
1179
|
+
*/
|
|
1008
1180
|
async patchMapping({ mapping }) {
|
|
1009
1181
|
if (!mapping) {
|
|
1010
1182
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1030,6 +1202,13 @@ var LocalMappingsProvider = class extends BaseProvider {
|
|
|
1030
1202
|
throw error;
|
|
1031
1203
|
}
|
|
1032
1204
|
}
|
|
1205
|
+
/**
|
|
1206
|
+
* Removes a mapping from local storage.
|
|
1207
|
+
*
|
|
1208
|
+
* @param {Object} config
|
|
1209
|
+
* @param {Object} mapping JSKOS mapping
|
|
1210
|
+
* @returns {boolean} boolean whether deleting the mapping was successful
|
|
1211
|
+
*/
|
|
1033
1212
|
async deleteMapping({ mapping }) {
|
|
1034
1213
|
if (!mapping) {
|
|
1035
1214
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1053,6 +1232,9 @@ LocalMappingsProvider.stored = true;
|
|
|
1053
1232
|
// src/providers/mappings-api-provider.js
|
|
1054
1233
|
var import_jskos_tools3 = __toESM(require("jskos-tools"), 1);
|
|
1055
1234
|
var MappingsApiProvider = class extends BaseProvider {
|
|
1235
|
+
/**
|
|
1236
|
+
* @private
|
|
1237
|
+
*/
|
|
1056
1238
|
_prepare() {
|
|
1057
1239
|
if (this._api.api && this._api.status === void 0) {
|
|
1058
1240
|
this._api.status = concatUrl(this._api.api, "/status");
|
|
@@ -1064,6 +1246,9 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1064
1246
|
this.has[c] = false;
|
|
1065
1247
|
});
|
|
1066
1248
|
}
|
|
1249
|
+
/**
|
|
1250
|
+
* @private
|
|
1251
|
+
*/
|
|
1067
1252
|
_setup() {
|
|
1068
1253
|
if (this._api.api) {
|
|
1069
1254
|
const endpoints = {
|
|
@@ -1104,6 +1289,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1104
1289
|
properties: "annotations"
|
|
1105
1290
|
};
|
|
1106
1291
|
}
|
|
1292
|
+
/**
|
|
1293
|
+
* Returns a single mapping.
|
|
1294
|
+
*
|
|
1295
|
+
* @param {Object} config
|
|
1296
|
+
* @param {Object} config.mapping JSKOS mapping
|
|
1297
|
+
* @returns {Object} JSKOS mapping object
|
|
1298
|
+
*/
|
|
1107
1299
|
async getMapping({ mapping, ...config }) {
|
|
1108
1300
|
if (!mapping) {
|
|
1109
1301
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1127,6 +1319,12 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1127
1319
|
throw error;
|
|
1128
1320
|
}
|
|
1129
1321
|
}
|
|
1322
|
+
/**
|
|
1323
|
+
* Returns a list of mappings.
|
|
1324
|
+
*
|
|
1325
|
+
* @param {Object} config request config with parameters
|
|
1326
|
+
* @returns {Object[]} array of JSKOS mapping objects
|
|
1327
|
+
*/
|
|
1130
1328
|
async getMappings({ from, fromScheme, to, toScheme, creator, type, partOf, offset, limit, direction, mode, identifier, cardinality, annotatedBy, annotatedFor, annotatedWith, sort, order, ...config }) {
|
|
1131
1329
|
let params = {}, url = this._api.mappings;
|
|
1132
1330
|
if (from) {
|
|
@@ -1194,6 +1392,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1194
1392
|
}
|
|
1195
1393
|
});
|
|
1196
1394
|
}
|
|
1395
|
+
/**
|
|
1396
|
+
* Creates a mapping.
|
|
1397
|
+
*
|
|
1398
|
+
* @param {Object} config
|
|
1399
|
+
* @param {Object} config.mapping JSKOS mapping
|
|
1400
|
+
* @returns {Object} JSKOS mapping object
|
|
1401
|
+
*/
|
|
1197
1402
|
async postMapping({ mapping, ...config }) {
|
|
1198
1403
|
if (!mapping) {
|
|
1199
1404
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1211,6 +1416,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1211
1416
|
}
|
|
1212
1417
|
});
|
|
1213
1418
|
}
|
|
1419
|
+
/**
|
|
1420
|
+
* Overwrites a mapping.
|
|
1421
|
+
*
|
|
1422
|
+
* @param {Object} config
|
|
1423
|
+
* @param {Object} config.mapping JSKOS mapping
|
|
1424
|
+
* @returns {Object} JSKOS mapping object
|
|
1425
|
+
*/
|
|
1214
1426
|
async putMapping({ mapping, ...config }) {
|
|
1215
1427
|
if (!mapping) {
|
|
1216
1428
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1232,6 +1444,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1232
1444
|
}
|
|
1233
1445
|
});
|
|
1234
1446
|
}
|
|
1447
|
+
/**
|
|
1448
|
+
* Patches a mapping.
|
|
1449
|
+
*
|
|
1450
|
+
* @param {Object} config
|
|
1451
|
+
* @param {Object} config.mapping JSKOS mapping (or part of mapping)
|
|
1452
|
+
* @returns {Object} JSKOS mapping object
|
|
1453
|
+
*/
|
|
1235
1454
|
async patchMapping({ mapping, ...config }) {
|
|
1236
1455
|
if (!mapping) {
|
|
1237
1456
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1251,6 +1470,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1251
1470
|
}
|
|
1252
1471
|
});
|
|
1253
1472
|
}
|
|
1473
|
+
/**
|
|
1474
|
+
* Deletes a mapping.
|
|
1475
|
+
*
|
|
1476
|
+
* @param {Object} config
|
|
1477
|
+
* @param {Object} config.mapping JSKOS mapping
|
|
1478
|
+
* @returns {boolean} `true` if deletion was successful
|
|
1479
|
+
*/
|
|
1254
1480
|
async deleteMapping({ mapping, ...config }) {
|
|
1255
1481
|
if (!mapping) {
|
|
1256
1482
|
throw new InvalidOrMissingParameterError({ parameter: "mapping" });
|
|
@@ -1266,6 +1492,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1266
1492
|
});
|
|
1267
1493
|
return true;
|
|
1268
1494
|
}
|
|
1495
|
+
/**
|
|
1496
|
+
* Returns a list of annotations.
|
|
1497
|
+
*
|
|
1498
|
+
* @param {Object} config
|
|
1499
|
+
* @param {string} [config.target] target URI
|
|
1500
|
+
* @returns {Object[]} array of JSKOS annotation objects
|
|
1501
|
+
*/
|
|
1269
1502
|
async getAnnotations({ target, ...config }) {
|
|
1270
1503
|
if (target) {
|
|
1271
1504
|
import_set.default(config, "params.target", target);
|
|
@@ -1276,6 +1509,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1276
1509
|
url: this._api.annotations
|
|
1277
1510
|
});
|
|
1278
1511
|
}
|
|
1512
|
+
/**
|
|
1513
|
+
* Creates an annotation.
|
|
1514
|
+
*
|
|
1515
|
+
* @param {Object} config
|
|
1516
|
+
* @param {Object} config.annotation JSKOS annotation
|
|
1517
|
+
* @returns {Object} JSKOS annotation object
|
|
1518
|
+
*/
|
|
1279
1519
|
async postAnnotation({ annotation, ...config }) {
|
|
1280
1520
|
return this.axios({
|
|
1281
1521
|
...config,
|
|
@@ -1284,6 +1524,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1284
1524
|
data: annotation
|
|
1285
1525
|
});
|
|
1286
1526
|
}
|
|
1527
|
+
/**
|
|
1528
|
+
* Overwrites an annotation.
|
|
1529
|
+
*
|
|
1530
|
+
* @param {Object} config
|
|
1531
|
+
* @param {Object} config.annotation JSKOS annotation
|
|
1532
|
+
* @returns {Object} JSKOS annotation object
|
|
1533
|
+
*/
|
|
1287
1534
|
async putAnnotation({ annotation, ...config }) {
|
|
1288
1535
|
const uri = annotation.id;
|
|
1289
1536
|
if (!uri || !uri.startsWith(this._api.annotations)) {
|
|
@@ -1296,6 +1543,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1296
1543
|
data: annotation
|
|
1297
1544
|
});
|
|
1298
1545
|
}
|
|
1546
|
+
/**
|
|
1547
|
+
* Patches an annotation.
|
|
1548
|
+
*
|
|
1549
|
+
* @param {Object} config
|
|
1550
|
+
* @param {Object} config.annotation JSKOS annotation
|
|
1551
|
+
* @returns {Object} JSKOS annotation object
|
|
1552
|
+
*/
|
|
1299
1553
|
async patchAnnotation({ annotation, ...config }) {
|
|
1300
1554
|
const uri = annotation.id;
|
|
1301
1555
|
if (!uri || !uri.startsWith(this._api.annotations)) {
|
|
@@ -1308,6 +1562,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1308
1562
|
data: annotation
|
|
1309
1563
|
});
|
|
1310
1564
|
}
|
|
1565
|
+
/**
|
|
1566
|
+
* Deletes an annotation.
|
|
1567
|
+
*
|
|
1568
|
+
* @param {Object} config
|
|
1569
|
+
* @param {Object} config.annotation JSKOS annotation
|
|
1570
|
+
* @returns {boolean} `true` if deletion was successful
|
|
1571
|
+
*/
|
|
1311
1572
|
async deleteAnnotation({ annotation, ...config }) {
|
|
1312
1573
|
const uri = annotation.id;
|
|
1313
1574
|
if (!uri || !uri.startsWith(this._api.annotations)) {
|
|
@@ -1320,6 +1581,12 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1320
1581
|
});
|
|
1321
1582
|
return true;
|
|
1322
1583
|
}
|
|
1584
|
+
/**
|
|
1585
|
+
* Returns a list of concordances.
|
|
1586
|
+
*
|
|
1587
|
+
* @param {Object} config
|
|
1588
|
+
* @returns {Object[]} array of JSKOS concordance objects
|
|
1589
|
+
*/
|
|
1323
1590
|
async getConcordances(config) {
|
|
1324
1591
|
return this.axios({
|
|
1325
1592
|
...config,
|
|
@@ -1327,6 +1594,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1327
1594
|
url: this._api.concordances
|
|
1328
1595
|
});
|
|
1329
1596
|
}
|
|
1597
|
+
/**
|
|
1598
|
+
* Creates a concordance.
|
|
1599
|
+
*
|
|
1600
|
+
* @param {Object} config
|
|
1601
|
+
* @param {Object} config.concordance JSKOS concordance
|
|
1602
|
+
* @returns {Object} JSKOS concordance object
|
|
1603
|
+
*/
|
|
1330
1604
|
async postConcordance({ concordance, ...config }) {
|
|
1331
1605
|
if (!concordance) {
|
|
1332
1606
|
throw new InvalidOrMissingParameterError({ parameter: "concordance" });
|
|
@@ -1342,6 +1616,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1342
1616
|
}
|
|
1343
1617
|
});
|
|
1344
1618
|
}
|
|
1619
|
+
/**
|
|
1620
|
+
* Overwrites a concordance.
|
|
1621
|
+
*
|
|
1622
|
+
* @param {Object} config
|
|
1623
|
+
* @param {Object} config.concordance JSKOS concordance
|
|
1624
|
+
* @returns {Object} JSKOS concordance object
|
|
1625
|
+
*/
|
|
1345
1626
|
async putConcordance({ concordance, ...config }) {
|
|
1346
1627
|
if (!concordance) {
|
|
1347
1628
|
throw new InvalidOrMissingParameterError({ parameter: "concordance" });
|
|
@@ -1361,6 +1642,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1361
1642
|
}
|
|
1362
1643
|
});
|
|
1363
1644
|
}
|
|
1645
|
+
/**
|
|
1646
|
+
* Patches a concordance.
|
|
1647
|
+
*
|
|
1648
|
+
* @param {Object} config
|
|
1649
|
+
* @param {Object} config.concordance JSKOS concordance (or part of concordance)
|
|
1650
|
+
* @returns {Object} JSKOS concordance object
|
|
1651
|
+
*/
|
|
1364
1652
|
async patchConcordance({ concordance, ...config }) {
|
|
1365
1653
|
if (!concordance) {
|
|
1366
1654
|
throw new InvalidOrMissingParameterError({ parameter: "concordance" });
|
|
@@ -1380,6 +1668,13 @@ var MappingsApiProvider = class extends BaseProvider {
|
|
|
1380
1668
|
}
|
|
1381
1669
|
});
|
|
1382
1670
|
}
|
|
1671
|
+
/**
|
|
1672
|
+
* Deletes a concordance.
|
|
1673
|
+
*
|
|
1674
|
+
* @param {Object} config
|
|
1675
|
+
* @param {Object} config.concordance JSKOS concordance
|
|
1676
|
+
* @returns {boolean} `true` if deletion was successful
|
|
1677
|
+
*/
|
|
1383
1678
|
async deleteConcordance({ concordance, ...config }) {
|
|
1384
1679
|
if (!concordance) {
|
|
1385
1680
|
throw new InvalidOrMissingParameterError({ parameter: "concordance" });
|
|
@@ -1406,6 +1701,9 @@ var OccurrencesApiProvider = class extends BaseProvider {
|
|
|
1406
1701
|
get _cache() {
|
|
1407
1702
|
return cache[this.uri];
|
|
1408
1703
|
}
|
|
1704
|
+
/**
|
|
1705
|
+
* @private
|
|
1706
|
+
*/
|
|
1409
1707
|
_prepare() {
|
|
1410
1708
|
cache[this.uri] = [];
|
|
1411
1709
|
this._occurrencesSupportedSchemes = [];
|
|
@@ -1415,6 +1713,13 @@ var OccurrencesApiProvider = class extends BaseProvider {
|
|
|
1415
1713
|
this.has[c] = false;
|
|
1416
1714
|
});
|
|
1417
1715
|
}
|
|
1716
|
+
/**
|
|
1717
|
+
* Returns whether a concept scheme is supported for occurrences.
|
|
1718
|
+
*
|
|
1719
|
+
* @private
|
|
1720
|
+
*
|
|
1721
|
+
* @param {Object} scheme JSKOS scheme to query
|
|
1722
|
+
*/
|
|
1418
1723
|
async _occurrencesIsSupported(scheme) {
|
|
1419
1724
|
if (this._occurrencesSupportedSchemes && this._occurrencesSupportedSchemes.length) {
|
|
1420
1725
|
} else {
|
|
@@ -1436,6 +1741,12 @@ var OccurrencesApiProvider = class extends BaseProvider {
|
|
|
1436
1741
|
}
|
|
1437
1742
|
return supported;
|
|
1438
1743
|
}
|
|
1744
|
+
/**
|
|
1745
|
+
* Wrapper around getOccurrences that converts occurrences into mappings.
|
|
1746
|
+
*
|
|
1747
|
+
* @param {Object} config config object for getOccurrences request
|
|
1748
|
+
* @returns {Object[]} array of JSKOS mapping objects
|
|
1749
|
+
*/
|
|
1439
1750
|
async getMappings(config) {
|
|
1440
1751
|
const occurrences = await this.getOccurrences(config);
|
|
1441
1752
|
const from = config.from;
|
|
@@ -1479,6 +1790,15 @@ var OccurrencesApiProvider = class extends BaseProvider {
|
|
|
1479
1790
|
mappings._url = occurrences._url;
|
|
1480
1791
|
return mappings;
|
|
1481
1792
|
}
|
|
1793
|
+
/**
|
|
1794
|
+
* Returns a list of occurrences.
|
|
1795
|
+
*
|
|
1796
|
+
* @param {Object} config
|
|
1797
|
+
* @param {Object} [config.from] JSKOS concept to load occurrences for (from side)
|
|
1798
|
+
* @param {Object} [config.to] JSKOS concept to load occurrences for (to side)
|
|
1799
|
+
* @param {Object[]} [config.concepts] list of JSKOS concepts to load occurrences for
|
|
1800
|
+
* @returns {Object[]} array of JSKOS occurrence objects
|
|
1801
|
+
*/
|
|
1482
1802
|
async getOccurrences({ from, to, concepts, threshold = 0, ...config }) {
|
|
1483
1803
|
let promises = [];
|
|
1484
1804
|
concepts = (concepts || []).concat([from, to]).filter((c) => !!c);
|
|
@@ -1531,6 +1851,13 @@ var OccurrencesApiProvider = class extends BaseProvider {
|
|
|
1531
1851
|
occurrences._url = results.map((result) => result._url);
|
|
1532
1852
|
return occurrences;
|
|
1533
1853
|
}
|
|
1854
|
+
/**
|
|
1855
|
+
* Internal function for getOccurrences that either makes an API request or uses a local cache.
|
|
1856
|
+
*
|
|
1857
|
+
* @private
|
|
1858
|
+
*
|
|
1859
|
+
* @param {Object} config passthrough of config parameter for axios request
|
|
1860
|
+
*/
|
|
1534
1861
|
async _getOccurrences(config) {
|
|
1535
1862
|
let resultsFromCache = this._cache.find((item) => {
|
|
1536
1863
|
return import_isEqual.default(item.config.params, config.params);
|
|
@@ -1559,6 +1886,9 @@ OccurrencesApiProvider.stored = false;
|
|
|
1559
1886
|
// src/providers/concept-api-provider.js
|
|
1560
1887
|
var import_jskos_tools5 = __toESM(require("jskos-tools"), 1);
|
|
1561
1888
|
var ConceptApiProvider = class extends BaseProvider {
|
|
1889
|
+
/**
|
|
1890
|
+
* @private
|
|
1891
|
+
*/
|
|
1562
1892
|
_prepare() {
|
|
1563
1893
|
if (this._api.api && this._api.status === void 0) {
|
|
1564
1894
|
this._api.status = concatUrl(this._api.api, "/status");
|
|
@@ -1577,6 +1907,9 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1577
1907
|
this.has[c] = false;
|
|
1578
1908
|
});
|
|
1579
1909
|
}
|
|
1910
|
+
/**
|
|
1911
|
+
* @private
|
|
1912
|
+
*/
|
|
1580
1913
|
_setup() {
|
|
1581
1914
|
if (this._api.api) {
|
|
1582
1915
|
const endpoints = {
|
|
@@ -1610,9 +1943,17 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1610
1943
|
this.has.search = !!this._api.search;
|
|
1611
1944
|
this.has.auth = import_get.default(this._config, "auth.key") != null;
|
|
1612
1945
|
this._defaultParams = {
|
|
1946
|
+
// Default parameters mostly for DANTE
|
|
1613
1947
|
properties: "+created,issued,modified,editorialNote,scopeNote"
|
|
1614
1948
|
};
|
|
1615
1949
|
}
|
|
1950
|
+
/**
|
|
1951
|
+
* Used by `registryForScheme` (see src/lib/CocodaSDK.js) to determine a provider config for a concept schceme.
|
|
1952
|
+
*
|
|
1953
|
+
* @param {Object} options
|
|
1954
|
+
* @param {Object} options.url API URL for server
|
|
1955
|
+
* @returns {Object} provider configuration
|
|
1956
|
+
*/
|
|
1616
1957
|
static _registryConfigForBartocApiConfig({ url, scheme } = {}) {
|
|
1617
1958
|
if (!url || !scheme) {
|
|
1618
1959
|
return null;
|
|
@@ -1622,6 +1963,11 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1622
1963
|
schemes: [scheme]
|
|
1623
1964
|
};
|
|
1624
1965
|
}
|
|
1966
|
+
/**
|
|
1967
|
+
* Returns the main vocabulary URI by requesting the scheme info and saving it in a cache.
|
|
1968
|
+
*
|
|
1969
|
+
* @private
|
|
1970
|
+
*/
|
|
1625
1971
|
async _getSchemeUri(scheme) {
|
|
1626
1972
|
this._approvedSchemes = this._approvedSchemes || [];
|
|
1627
1973
|
this._rejectedSchemes = this._rejectedSchemes || [];
|
|
@@ -1650,6 +1996,12 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1650
1996
|
return null;
|
|
1651
1997
|
}
|
|
1652
1998
|
}
|
|
1999
|
+
/**
|
|
2000
|
+
* Returns all concept schemes.
|
|
2001
|
+
*
|
|
2002
|
+
* @param {Object} config
|
|
2003
|
+
* @returns {Object[]} array of JSKOS concept scheme objects
|
|
2004
|
+
*/
|
|
1653
2005
|
async getSchemes(config) {
|
|
1654
2006
|
if (!this._api.schemes) {
|
|
1655
2007
|
if (Array.isArray(this.schemes)) {
|
|
@@ -1663,6 +2015,7 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1663
2015
|
url: this._api.schemes,
|
|
1664
2016
|
params: {
|
|
1665
2017
|
...this._defaultParams,
|
|
2018
|
+
// ? What should the default limit be?
|
|
1666
2019
|
limit: 500,
|
|
1667
2020
|
...config.params || {}
|
|
1668
2021
|
}
|
|
@@ -1673,6 +2026,13 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1673
2026
|
return schemes;
|
|
1674
2027
|
}
|
|
1675
2028
|
}
|
|
2029
|
+
/**
|
|
2030
|
+
* Returns top concepts for a concept scheme.
|
|
2031
|
+
*
|
|
2032
|
+
* @param {Object} config
|
|
2033
|
+
* @param {Object} config.scheme concept scheme object
|
|
2034
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
2035
|
+
*/
|
|
1676
2036
|
async getTop({ scheme, ...config }) {
|
|
1677
2037
|
if (!this._api.top) {
|
|
1678
2038
|
throw new MissingApiUrlError();
|
|
@@ -1693,12 +2053,20 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1693
2053
|
url: this._api.top,
|
|
1694
2054
|
params: {
|
|
1695
2055
|
...this._defaultParams,
|
|
2056
|
+
// ? What should the default limit be?
|
|
1696
2057
|
limit: 1e4,
|
|
1697
2058
|
...config.params || {},
|
|
1698
2059
|
uri: schemeUri
|
|
1699
2060
|
}
|
|
1700
2061
|
});
|
|
1701
2062
|
}
|
|
2063
|
+
/**
|
|
2064
|
+
* Returns details for a list of concepts.
|
|
2065
|
+
*
|
|
2066
|
+
* @param {Object} config
|
|
2067
|
+
* @param {Object[]} config.concepts list of concept objects to load
|
|
2068
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
2069
|
+
*/
|
|
1702
2070
|
async getConcepts({ concepts, ...config }) {
|
|
1703
2071
|
if (this.has.data === false) {
|
|
1704
2072
|
throw new MissingApiUrlError();
|
|
@@ -1716,12 +2084,20 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1716
2084
|
url: this._api.data,
|
|
1717
2085
|
params: {
|
|
1718
2086
|
...this._defaultParams,
|
|
2087
|
+
// ? What should the default limit be?
|
|
1719
2088
|
limit: 500,
|
|
1720
2089
|
...config.params || {},
|
|
1721
2090
|
uri: uris.join("|")
|
|
1722
2091
|
}
|
|
1723
2092
|
});
|
|
1724
2093
|
}
|
|
2094
|
+
/**
|
|
2095
|
+
* Returns narrower concepts for a concept.
|
|
2096
|
+
*
|
|
2097
|
+
* @param {Object} config
|
|
2098
|
+
* @param {Object} config.concept concept object
|
|
2099
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
2100
|
+
*/
|
|
1725
2101
|
async getNarrower({ concept, ...config }) {
|
|
1726
2102
|
if (!this._api.narrower) {
|
|
1727
2103
|
throw new MissingApiUrlError();
|
|
@@ -1735,12 +2111,20 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1735
2111
|
url: this._api.narrower,
|
|
1736
2112
|
params: {
|
|
1737
2113
|
...this._defaultParams,
|
|
2114
|
+
// ? What should the default limit be?
|
|
1738
2115
|
limit: 1e4,
|
|
1739
2116
|
...config.params || {},
|
|
1740
2117
|
uri: concept.uri
|
|
1741
2118
|
}
|
|
1742
2119
|
});
|
|
1743
2120
|
}
|
|
2121
|
+
/**
|
|
2122
|
+
* Returns ancestor concepts for a concept.
|
|
2123
|
+
*
|
|
2124
|
+
* @param {Object} config
|
|
2125
|
+
* @param {Object} config.concept concept object
|
|
2126
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
2127
|
+
*/
|
|
1744
2128
|
async getAncestors({ concept, ...config }) {
|
|
1745
2129
|
if (!this._api.ancestors) {
|
|
1746
2130
|
throw new MissingApiUrlError();
|
|
@@ -1754,12 +2138,25 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1754
2138
|
url: this._api.ancestors,
|
|
1755
2139
|
params: {
|
|
1756
2140
|
...this._defaultParams,
|
|
2141
|
+
// ? What should the default limit be?
|
|
1757
2142
|
limit: 1e4,
|
|
1758
2143
|
...config.params || {},
|
|
1759
2144
|
uri: concept.uri
|
|
1760
2145
|
}
|
|
1761
2146
|
});
|
|
1762
2147
|
}
|
|
2148
|
+
/**
|
|
2149
|
+
* Returns suggestion result in OpenSearch Suggest Format.
|
|
2150
|
+
*
|
|
2151
|
+
* @param {Object} config
|
|
2152
|
+
* @param {string} config.search search string
|
|
2153
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
2154
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
2155
|
+
* @param {string} [config.use=notation,label] which fields to search ("notation", "label" or "notation,label")
|
|
2156
|
+
* @param {string[]} [config.types=[]] list of type URIs
|
|
2157
|
+
* @param {string} [config.sort=score] sorting parameter
|
|
2158
|
+
* @returns {Array} result in OpenSearch Suggest Format
|
|
2159
|
+
*/
|
|
1763
2160
|
async suggest({ use = "notation,label", types = [], sort = "score", params = {}, ...config }) {
|
|
1764
2161
|
return this._search({
|
|
1765
2162
|
...config,
|
|
@@ -1772,6 +2169,17 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1772
2169
|
}
|
|
1773
2170
|
});
|
|
1774
2171
|
}
|
|
2172
|
+
/**
|
|
2173
|
+
* Returns search results in JSKOS Format.
|
|
2174
|
+
*
|
|
2175
|
+
* @param {Object} config
|
|
2176
|
+
* @param {string} config.search search string
|
|
2177
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
2178
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
2179
|
+
* @param {number} [config.offset=0] offset
|
|
2180
|
+
* @param {string[]} [config.types=[]] list of type URIs
|
|
2181
|
+
* @returns {Array} result in JSKOS Format
|
|
2182
|
+
*/
|
|
1775
2183
|
async search({ types = [], params = {}, ...config }) {
|
|
1776
2184
|
return this._search({
|
|
1777
2185
|
...config,
|
|
@@ -1782,6 +2190,16 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1782
2190
|
}
|
|
1783
2191
|
});
|
|
1784
2192
|
}
|
|
2193
|
+
/**
|
|
2194
|
+
* Returns concept scheme suggestion result in OpenSearch Suggest Format.
|
|
2195
|
+
*
|
|
2196
|
+
* @param {Object} config
|
|
2197
|
+
* @param {string} config.search search string
|
|
2198
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
2199
|
+
* @param {string} [config.use=notation,label] which fields to search ("notation", "label" or "notation,label")
|
|
2200
|
+
* @param {string} [config.sort=score] sorting parameter
|
|
2201
|
+
* @returns {Array} result in OpenSearch Suggest Format
|
|
2202
|
+
*/
|
|
1785
2203
|
async vocSuggest({ use = "notation,label", sort = "score", params = {}, ...config }) {
|
|
1786
2204
|
return this._search({
|
|
1787
2205
|
...config,
|
|
@@ -1793,6 +2211,15 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1793
2211
|
}
|
|
1794
2212
|
});
|
|
1795
2213
|
}
|
|
2214
|
+
/**
|
|
2215
|
+
* Returns concept scheme search results in JSKOS Format.
|
|
2216
|
+
*
|
|
2217
|
+
* @param {Object} config
|
|
2218
|
+
* @param {string} config.search search string
|
|
2219
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
2220
|
+
* @param {number} [config.offset=0] offset
|
|
2221
|
+
* @returns {Array} result in JSKOS Format
|
|
2222
|
+
*/
|
|
1796
2223
|
async vocSearch(config) {
|
|
1797
2224
|
return this._search({
|
|
1798
2225
|
...config,
|
|
@@ -1818,6 +2245,7 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1818
2245
|
...params,
|
|
1819
2246
|
limit,
|
|
1820
2247
|
count: limit,
|
|
2248
|
+
// Some endpoints use count instead of limit
|
|
1821
2249
|
offset,
|
|
1822
2250
|
search,
|
|
1823
2251
|
query: search,
|
|
@@ -1827,6 +2255,13 @@ var ConceptApiProvider = class extends BaseProvider {
|
|
|
1827
2255
|
url
|
|
1828
2256
|
});
|
|
1829
2257
|
}
|
|
2258
|
+
/**
|
|
2259
|
+
* Returns a list of types.
|
|
2260
|
+
*
|
|
2261
|
+
* @param {Object} config
|
|
2262
|
+
* @param {Object} [config.scheme] concept scheme to load types for
|
|
2263
|
+
* @returns {Object[]} array of JSKOS type objects
|
|
2264
|
+
*/
|
|
1830
2265
|
async getTypes({ scheme, ...config }) {
|
|
1831
2266
|
if (!this._api.types) {
|
|
1832
2267
|
throw new MissingApiUrlError();
|
|
@@ -1855,6 +2290,9 @@ var ReconciliationApiProvider = class extends BaseProvider {
|
|
|
1855
2290
|
get _cache() {
|
|
1856
2291
|
return cache2[this.uri];
|
|
1857
2292
|
}
|
|
2293
|
+
/**
|
|
2294
|
+
* @private
|
|
2295
|
+
*/
|
|
1858
2296
|
_prepare() {
|
|
1859
2297
|
cache2[this.uri] = [];
|
|
1860
2298
|
this.has.mappings = true;
|
|
@@ -1862,6 +2300,15 @@ var ReconciliationApiProvider = class extends BaseProvider {
|
|
|
1862
2300
|
this.has[c] = false;
|
|
1863
2301
|
});
|
|
1864
2302
|
}
|
|
2303
|
+
/**
|
|
2304
|
+
* Returns a list of mappings suggestions.
|
|
2305
|
+
*
|
|
2306
|
+
* @param {Object} config
|
|
2307
|
+
* @param {Object} config.from JSKOS concept on from side
|
|
2308
|
+
* @param {Object} config.to JSKOS concept on to side
|
|
2309
|
+
* @param {Object} config.mode mappings mode
|
|
2310
|
+
* @returns {Object[]} array of JSKOS mapping objects
|
|
2311
|
+
*/
|
|
1865
2312
|
async getMappings({ from, to, mode, ...config }) {
|
|
1866
2313
|
let schemes = [];
|
|
1867
2314
|
if (import_isArray.default(this.schemes)) {
|
|
@@ -1946,6 +2393,15 @@ var ReconciliationApiProvider = class extends BaseProvider {
|
|
|
1946
2393
|
mappings._url = url;
|
|
1947
2394
|
return mappings;
|
|
1948
2395
|
}
|
|
2396
|
+
/**
|
|
2397
|
+
* Internal function that either makes an API request or uses a local cache.
|
|
2398
|
+
*
|
|
2399
|
+
* @private
|
|
2400
|
+
*
|
|
2401
|
+
* @param {Object} config passthrough of config object for axios request
|
|
2402
|
+
* @param {string[]} labels list of labels to get results for
|
|
2403
|
+
* @param {string} language language of labels
|
|
2404
|
+
*/
|
|
1949
2405
|
async _getReconciliationResults({ labels, language, ...config }) {
|
|
1950
2406
|
labels = labels.sort();
|
|
1951
2407
|
let resultsFromCache = this._cache.find((item) => {
|
|
@@ -1994,6 +2450,9 @@ ReconciliationApiProvider.stored = false;
|
|
|
1994
2450
|
// src/providers/label-search-suggestion-provider.js
|
|
1995
2451
|
var import_jskos_tools7 = __toESM(require("jskos-tools"), 1);
|
|
1996
2452
|
var LabelSearchSuggestionProvider = class extends BaseProvider {
|
|
2453
|
+
/**
|
|
2454
|
+
* @private
|
|
2455
|
+
*/
|
|
1997
2456
|
_prepare() {
|
|
1998
2457
|
this._cache = [];
|
|
1999
2458
|
this.has.mappings = true;
|
|
@@ -2001,9 +2460,25 @@ var LabelSearchSuggestionProvider = class extends BaseProvider {
|
|
|
2001
2460
|
this.has[c] = false;
|
|
2002
2461
|
});
|
|
2003
2462
|
}
|
|
2463
|
+
/**
|
|
2464
|
+
* Override `supportsScheme` to check whether a search URI is available for the scheme's registry.
|
|
2465
|
+
*
|
|
2466
|
+
* @param {Object} scheme - target scheme to check for support
|
|
2467
|
+
* @returns {boolean}
|
|
2468
|
+
*/
|
|
2004
2469
|
supportsScheme(scheme) {
|
|
2005
2470
|
return super.supportsScheme(scheme) && import_get.default(scheme, "_registry.has.search", false);
|
|
2006
2471
|
}
|
|
2472
|
+
/**
|
|
2473
|
+
* Returns a list of mappings.
|
|
2474
|
+
*
|
|
2475
|
+
* @param {Object} config
|
|
2476
|
+
* @param {Object} config.from JSKOS concept on from side
|
|
2477
|
+
* @param {Object} config.to JSKOS concept on to side
|
|
2478
|
+
* @param {Object} config.mode mappings mode
|
|
2479
|
+
* @param {Object} config.selected selected mappings in Cocoda
|
|
2480
|
+
* @returns {Object[]} array of JSKOS mapping objects
|
|
2481
|
+
*/
|
|
2007
2482
|
async getMappings({ from, to, mode, selected, limit = 10, ...config }) {
|
|
2008
2483
|
if (mode != "or") {
|
|
2009
2484
|
return [];
|
|
@@ -2033,6 +2508,17 @@ var LabelSearchSuggestionProvider = class extends BaseProvider {
|
|
|
2033
2508
|
}
|
|
2034
2509
|
return import_union.default(fromResult, toResult);
|
|
2035
2510
|
}
|
|
2511
|
+
/**
|
|
2512
|
+
* Internal function to get mapping recommendations for a certain concept with sourceScheme and targetScheme.
|
|
2513
|
+
*
|
|
2514
|
+
* @private
|
|
2515
|
+
*
|
|
2516
|
+
* @param {Object} config
|
|
2517
|
+
* @param {Object} config.concept
|
|
2518
|
+
* @param {Object} config.sourceScheme
|
|
2519
|
+
* @param {Pbject} config.targetScheme
|
|
2520
|
+
* @param {boolean} config.swap - whether to reverse the direction of the mappings
|
|
2521
|
+
*/
|
|
2036
2522
|
async _getMappings({ concept, sourceScheme, targetScheme, limit, swap = false, ...config }) {
|
|
2037
2523
|
if (!concept || !sourceScheme || !targetScheme) {
|
|
2038
2524
|
return [];
|
|
@@ -2050,7 +2536,21 @@ var LabelSearchSuggestionProvider = class extends BaseProvider {
|
|
|
2050
2536
|
}
|
|
2051
2537
|
const regexResult = /^[\s\wäüöÄÜÖß]*\w/.exec(label);
|
|
2052
2538
|
label = regexResult ? regexResult[0] : label;
|
|
2053
|
-
|
|
2539
|
+
let results = await this._getResults({ ...config, label, targetScheme, limit });
|
|
2540
|
+
if (!results.length && concept.broader?.length) {
|
|
2541
|
+
for (const broader of concept.broader) {
|
|
2542
|
+
const label2 = import_jskos_tools7.default.prefLabel(broader, {
|
|
2543
|
+
fallbackToUri: false,
|
|
2544
|
+
language
|
|
2545
|
+
});
|
|
2546
|
+
if (!label2)
|
|
2547
|
+
continue;
|
|
2548
|
+
results = await this._getResults({ ...config, label: label2, targetScheme, limit });
|
|
2549
|
+
if (results.length) {
|
|
2550
|
+
break;
|
|
2551
|
+
}
|
|
2552
|
+
}
|
|
2553
|
+
}
|
|
2054
2554
|
let mappings = results.map((result) => ({
|
|
2055
2555
|
fromScheme: sourceScheme,
|
|
2056
2556
|
from: { memberSet: [concept] },
|
|
@@ -2068,6 +2568,15 @@ var LabelSearchSuggestionProvider = class extends BaseProvider {
|
|
|
2068
2568
|
}
|
|
2069
2569
|
return mappings;
|
|
2070
2570
|
}
|
|
2571
|
+
/**
|
|
2572
|
+
* Internal function that either makes an API request or uses a local cache.
|
|
2573
|
+
*
|
|
2574
|
+
* @private
|
|
2575
|
+
*
|
|
2576
|
+
* @param {Object} config
|
|
2577
|
+
* @param {string} config.label
|
|
2578
|
+
* @param {Object} config.targetScheme
|
|
2579
|
+
*/
|
|
2071
2580
|
async _getResults({ label, targetScheme, limit, ...config }) {
|
|
2072
2581
|
let resultsFromCache = (this._cache[targetScheme.uri] || {})[label];
|
|
2073
2582
|
if (resultsFromCache && resultsFromCache._limit >= limit) {
|
|
@@ -2099,6 +2608,9 @@ LabelSearchSuggestionProvider.stored = false;
|
|
|
2099
2608
|
// src/providers/skosmos-api-provider.js
|
|
2100
2609
|
var import_jskos_tools8 = __toESM(require("jskos-tools"), 1);
|
|
2101
2610
|
var SkosmosApiProvider = class extends BaseProvider {
|
|
2611
|
+
/**
|
|
2612
|
+
* @private
|
|
2613
|
+
*/
|
|
2102
2614
|
_prepare() {
|
|
2103
2615
|
this.has.schemes = true;
|
|
2104
2616
|
this.has.top = true;
|
|
@@ -2113,6 +2625,14 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2113
2625
|
this.has[c] = false;
|
|
2114
2626
|
});
|
|
2115
2627
|
}
|
|
2628
|
+
/**
|
|
2629
|
+
* Used by `registryForScheme` (see src/lib/CocodaSDK.js) to determine a provider config for a concept schceme.
|
|
2630
|
+
*
|
|
2631
|
+
* @param {Object} options
|
|
2632
|
+
* @param {Object} options.url API URL for BARTOC instance
|
|
2633
|
+
* @param {Object} options.scheme scheme for which the config is requested
|
|
2634
|
+
* @returns {Object} provider configuration
|
|
2635
|
+
*/
|
|
2116
2636
|
static _registryConfigForBartocApiConfig({ url, scheme } = {}) {
|
|
2117
2637
|
if (!url || !scheme) {
|
|
2118
2638
|
return null;
|
|
@@ -2127,9 +2647,15 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2127
2647
|
config.schemes = [scheme];
|
|
2128
2648
|
return config;
|
|
2129
2649
|
}
|
|
2650
|
+
/**
|
|
2651
|
+
* @private
|
|
2652
|
+
*/
|
|
2130
2653
|
get _language() {
|
|
2131
2654
|
return this.languages[0] || this._defaultLanguages[0] || "en";
|
|
2132
2655
|
}
|
|
2656
|
+
/**
|
|
2657
|
+
* @private
|
|
2658
|
+
*/
|
|
2133
2659
|
_getApiUrl(scheme, endpoint, params) {
|
|
2134
2660
|
const VOCID = scheme && scheme.VOCID || import_get.default(this.schemes.find((s) => import_jskos_tools8.default.compare(s, scheme)), "VOCID");
|
|
2135
2661
|
if (!VOCID) {
|
|
@@ -2143,6 +2669,9 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2143
2669
|
const paramString = Object.keys(params).map((k) => `${k}=${encodeURIComponent(params[k])}`).join("&");
|
|
2144
2670
|
return `${this._api.api}${VOCID}${endpoint}${paramString ? "?" + paramString : ""}`;
|
|
2145
2671
|
}
|
|
2672
|
+
/**
|
|
2673
|
+
* @private
|
|
2674
|
+
*/
|
|
2146
2675
|
_getDataUrl(concept, { addFormatParameter = true } = {}) {
|
|
2147
2676
|
const scheme = import_get.default(concept, "inScheme[0]");
|
|
2148
2677
|
if (!concept || !concept.uri) {
|
|
@@ -2150,6 +2679,11 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2150
2679
|
}
|
|
2151
2680
|
return this._getApiUrl(scheme, "/data", addFormatParameter ? { format: "application/json" } : {});
|
|
2152
2681
|
}
|
|
2682
|
+
/**
|
|
2683
|
+
* Returns the main vocabulary URI by requesting the scheme info and saving it in a cache.
|
|
2684
|
+
*
|
|
2685
|
+
* @private
|
|
2686
|
+
*/
|
|
2153
2687
|
async _getSchemeUri(scheme) {
|
|
2154
2688
|
this._approvedSchemes = this._approvedSchemes || [];
|
|
2155
2689
|
this._rejectedSchemes = this._rejectedSchemes || [];
|
|
@@ -2180,6 +2714,9 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2180
2714
|
return null;
|
|
2181
2715
|
}
|
|
2182
2716
|
}
|
|
2717
|
+
/**
|
|
2718
|
+
* @private
|
|
2719
|
+
*/
|
|
2183
2720
|
_toJskosConcept(skosmosConcept, { concept, scheme, result, language } = {}) {
|
|
2184
2721
|
if (!skosmosConcept) {
|
|
2185
2722
|
return null;
|
|
@@ -2252,6 +2789,12 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2252
2789
|
}
|
|
2253
2790
|
return concept;
|
|
2254
2791
|
}
|
|
2792
|
+
/**
|
|
2793
|
+
* Returns all concept schemes.
|
|
2794
|
+
*
|
|
2795
|
+
* @param {Object} config
|
|
2796
|
+
* @returns {Object[]} array of JSKOS concept scheme objects
|
|
2797
|
+
*/
|
|
2255
2798
|
async getSchemes({ ...config }) {
|
|
2256
2799
|
const schemes = [];
|
|
2257
2800
|
for (let scheme of this.schemes || []) {
|
|
@@ -2277,6 +2820,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2277
2820
|
}
|
|
2278
2821
|
return schemes;
|
|
2279
2822
|
}
|
|
2823
|
+
/**
|
|
2824
|
+
* Returns top concepts.
|
|
2825
|
+
*
|
|
2826
|
+
* @param {Object} config
|
|
2827
|
+
* @param {Object} config.scheme concept scheme
|
|
2828
|
+
* @returns {Object[]} array of JSKOS concept scheme objects
|
|
2829
|
+
*/
|
|
2280
2830
|
async getTop({ scheme, ...config }) {
|
|
2281
2831
|
const url = this._getApiUrl(scheme, "/topConcepts");
|
|
2282
2832
|
const schemeUri = await this._getSchemeUri(scheme);
|
|
@@ -2300,6 +2850,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2300
2850
|
}
|
|
2301
2851
|
return concepts;
|
|
2302
2852
|
}
|
|
2853
|
+
/**
|
|
2854
|
+
* Returns details for a list of concepts.
|
|
2855
|
+
*
|
|
2856
|
+
* @param {Object} config
|
|
2857
|
+
* @param {Object[]} config.concepts list of concept objects to load
|
|
2858
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
2859
|
+
*/
|
|
2303
2860
|
async getConcepts({ concepts, ...config }) {
|
|
2304
2861
|
if (!import_isArray.default(concepts)) {
|
|
2305
2862
|
concepts = [concepts];
|
|
@@ -2339,6 +2896,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2339
2896
|
}
|
|
2340
2897
|
return newConcepts;
|
|
2341
2898
|
}
|
|
2899
|
+
/**
|
|
2900
|
+
* Returns narrower concepts for a concept.
|
|
2901
|
+
*
|
|
2902
|
+
* @param {Object} config
|
|
2903
|
+
* @param {Object} config.concept concept object
|
|
2904
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
2905
|
+
*/
|
|
2342
2906
|
async getNarrower({ concept, ...config }) {
|
|
2343
2907
|
if (!concept || !concept.uri) {
|
|
2344
2908
|
throw new InvalidOrMissingParameterError({ parameter: "concept" });
|
|
@@ -2354,6 +2918,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2354
2918
|
const concepts = (response.narrower || []).map((c) => this._toJskosConcept(c, { scheme }));
|
|
2355
2919
|
return concepts;
|
|
2356
2920
|
}
|
|
2921
|
+
/**
|
|
2922
|
+
* Returns ancestor concepts for a concept.
|
|
2923
|
+
*
|
|
2924
|
+
* @param {Object} config
|
|
2925
|
+
* @param {Object} config.concept concept object
|
|
2926
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
2927
|
+
*/
|
|
2357
2928
|
async getAncestors({ concept, ...config }) {
|
|
2358
2929
|
if (!concept || !concept.uri) {
|
|
2359
2930
|
throw new InvalidOrMissingParameterError({ parameter: "concept" });
|
|
@@ -2378,6 +2949,16 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2378
2949
|
const concepts = ancestors.map((c) => this._toJskosConcept(c, { scheme })).filter((c) => c.uri != concept.uri);
|
|
2379
2950
|
return concepts;
|
|
2380
2951
|
}
|
|
2952
|
+
/**
|
|
2953
|
+
* Returns suggestion result in OpenSearch Suggest Format.
|
|
2954
|
+
*
|
|
2955
|
+
* @param {Object} config
|
|
2956
|
+
* @param {string} config.search search string
|
|
2957
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
2958
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
2959
|
+
* @param {string[]} [config.types=[]] list of type URIs
|
|
2960
|
+
* @returns {Array} result in OpenSearch Suggest Format
|
|
2961
|
+
*/
|
|
2381
2962
|
async suggest(config) {
|
|
2382
2963
|
config._raw = true;
|
|
2383
2964
|
const concepts = await this.search(config);
|
|
@@ -2396,6 +2977,16 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2396
2977
|
}
|
|
2397
2978
|
return result;
|
|
2398
2979
|
}
|
|
2980
|
+
/**
|
|
2981
|
+
* Returns concept search results.
|
|
2982
|
+
*
|
|
2983
|
+
* @param {Object} config
|
|
2984
|
+
* @param {string} config.search search string
|
|
2985
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
2986
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
2987
|
+
* @param {string[]} [config.types=[]] list of type URIs
|
|
2988
|
+
* @returns {Array} array of JSKOS concept objects
|
|
2989
|
+
*/
|
|
2399
2990
|
async search({ search, scheme, limit, types = [], ...config }) {
|
|
2400
2991
|
const url = this._getApiUrl(scheme, "/search");
|
|
2401
2992
|
import_set.default(config, "params.query", `${search}*`);
|
|
@@ -2410,6 +3001,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2410
3001
|
const concepts = (response.results || []).map((c) => this._toJskosConcept(c, { scheme }));
|
|
2411
3002
|
return concepts;
|
|
2412
3003
|
}
|
|
3004
|
+
/**
|
|
3005
|
+
* Returns a list of types.
|
|
3006
|
+
*
|
|
3007
|
+
* @param {Object} config
|
|
3008
|
+
* @param {Object} [config.scheme] concept scheme to load types for
|
|
3009
|
+
* @returns {Object[]} array of JSKOS type objects
|
|
3010
|
+
*/
|
|
2413
3011
|
async getTypes({ scheme, ...config }) {
|
|
2414
3012
|
const url = this._getApiUrl(scheme, "/types");
|
|
2415
3013
|
const types = [];
|
|
@@ -2508,6 +3106,9 @@ function madsToJskosConcept(data3, { scheme }) {
|
|
|
2508
3106
|
return concept;
|
|
2509
3107
|
}
|
|
2510
3108
|
var LocApiProvider = class extends BaseProvider {
|
|
3109
|
+
/**
|
|
3110
|
+
* @private
|
|
3111
|
+
*/
|
|
2511
3112
|
_prepare() {
|
|
2512
3113
|
this.has.schemes = true;
|
|
2513
3114
|
this.has.top = false;
|
|
@@ -2521,6 +3122,13 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2521
3122
|
this.has[c] = false;
|
|
2522
3123
|
});
|
|
2523
3124
|
}
|
|
3125
|
+
/**
|
|
3126
|
+
* Used by `registryForScheme` (see src/lib/CocodaSDK.js) to determine a provider config for a concept schceme.
|
|
3127
|
+
*
|
|
3128
|
+
* @param {Object} options
|
|
3129
|
+
* @param {Object} options.scheme scheme for which the config is requested
|
|
3130
|
+
* @returns {Object} provider configuration
|
|
3131
|
+
*/
|
|
2524
3132
|
static _registryConfigForBartocApiConfig({ scheme } = {}) {
|
|
2525
3133
|
if (!scheme || !supportedSchemes.find((s) => import_jskos_tools9.default.compare(s, scheme))) {
|
|
2526
3134
|
return null;
|
|
@@ -2529,6 +3137,11 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2529
3137
|
schemes: [scheme]
|
|
2530
3138
|
};
|
|
2531
3139
|
}
|
|
3140
|
+
/**
|
|
3141
|
+
* Returns all concept schemes.
|
|
3142
|
+
*
|
|
3143
|
+
* @returns {Object[]} array of JSKOS concept scheme objects
|
|
3144
|
+
*/
|
|
2532
3145
|
async getSchemes() {
|
|
2533
3146
|
const schemes = [];
|
|
2534
3147
|
for (let scheme of await Promise.all(
|
|
@@ -2553,6 +3166,29 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2553
3166
|
}
|
|
2554
3167
|
return schemes;
|
|
2555
3168
|
}
|
|
3169
|
+
/**
|
|
3170
|
+
* TODO: Possibly reenable for LCC
|
|
3171
|
+
* Returns top concepts for a concept scheme.
|
|
3172
|
+
*
|
|
3173
|
+
* @param {Object} config
|
|
3174
|
+
* @param {Object} config.scheme concept scheme object
|
|
3175
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
3176
|
+
*/
|
|
3177
|
+
// async getTop({ scheme }) {
|
|
3178
|
+
// if (scheme.topConcepts && !scheme.topConcepts.includes(null)) {
|
|
3179
|
+
// return scheme.topConcepts
|
|
3180
|
+
// }
|
|
3181
|
+
// const schemes = await this.getSchemes()
|
|
3182
|
+
// scheme = schemes.find(s => jskos.compare(s, scheme))
|
|
3183
|
+
// return scheme && scheme.topConcepts || []
|
|
3184
|
+
// }
|
|
3185
|
+
/**
|
|
3186
|
+
* Returns details for a list of concepts.
|
|
3187
|
+
*
|
|
3188
|
+
* @param {Object} config
|
|
3189
|
+
* @param {Object[]} config.concepts list of concept objects to load
|
|
3190
|
+
* @returns {Object[]} array of JSKOS concept objects
|
|
3191
|
+
*/
|
|
2556
3192
|
async getConcepts({ concepts }) {
|
|
2557
3193
|
if (!Array.isArray(concepts)) {
|
|
2558
3194
|
concepts = [concepts];
|
|
@@ -2576,6 +3212,16 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2576
3212
|
}
|
|
2577
3213
|
return resultConcepts;
|
|
2578
3214
|
}
|
|
3215
|
+
/**
|
|
3216
|
+
* Returns suggestion result in OpenSearch Suggest Format.
|
|
3217
|
+
*
|
|
3218
|
+
* @param {Object} config
|
|
3219
|
+
* @param {string} config.search search string
|
|
3220
|
+
* @param {Object} config.scheme concept scheme to search in
|
|
3221
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
3222
|
+
* @param {number} [config.offset=0] offset
|
|
3223
|
+
* @returns {Array} result in OpenSearch Suggest Format
|
|
3224
|
+
*/
|
|
2579
3225
|
async suggest(config) {
|
|
2580
3226
|
const results = await this.search(config);
|
|
2581
3227
|
return [
|
|
@@ -2587,6 +3233,16 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2587
3233
|
results.map((c) => c.uri)
|
|
2588
3234
|
];
|
|
2589
3235
|
}
|
|
3236
|
+
/**
|
|
3237
|
+
* Returns search results in JSKOS Format.
|
|
3238
|
+
*
|
|
3239
|
+
* @param {Object} config
|
|
3240
|
+
* @param {string} config.search search string
|
|
3241
|
+
* @param {Object} config.scheme concept scheme to search in
|
|
3242
|
+
* @param {number} [config.limit=100] maximum number of search results (default might be overridden by registry)
|
|
3243
|
+
* @param {number} [config.offset=0] offset
|
|
3244
|
+
* @returns {Array} result in JSKOS Format
|
|
3245
|
+
*/
|
|
2590
3246
|
async search({ search, scheme, limit, offset }) {
|
|
2591
3247
|
const schemeUri = import_jskos_tools9.default.getAllUris(scheme).find((uri) => uri.startsWith(locUriPrefix));
|
|
2592
3248
|
if (!schemeUri || !supportedSchemes.find((s) => import_jskos_tools9.default.compare(s, { uri: schemeUri }))) {
|
|
@@ -2658,6 +3314,14 @@ var SkohubProvider = class extends BaseProvider {
|
|
|
2658
3314
|
get _schemeCache() {
|
|
2659
3315
|
return data[this.uri] && data[this.uri].schemeCache;
|
|
2660
3316
|
}
|
|
3317
|
+
/**
|
|
3318
|
+
* Used by `registryForScheme` (see src/lib/CocodaSDK.js) to determine a provider config for a concept schceme.
|
|
3319
|
+
*
|
|
3320
|
+
* @param {Object} options
|
|
3321
|
+
* @param {Object} options.url API URL for BARTOC instance
|
|
3322
|
+
* @param {Object} options.scheme scheme for which the config is requested
|
|
3323
|
+
* @returns {Object} provider configuration
|
|
3324
|
+
*/
|
|
2661
3325
|
static _registryConfigForBartocApiConfig({ url, scheme } = {}) {
|
|
2662
3326
|
if (!url || !scheme) {
|
|
2663
3327
|
return null;
|
|
@@ -2787,6 +3451,15 @@ var SkohubProvider = class extends BaseProvider {
|
|
|
2787
3451
|
concept = await this._loadConcept({ ...config, uri: concept.uri });
|
|
2788
3452
|
return concept.narrower;
|
|
2789
3453
|
}
|
|
3454
|
+
/**
|
|
3455
|
+
* Returns concept search results.
|
|
3456
|
+
*
|
|
3457
|
+
* @param {Object} config
|
|
3458
|
+
* @param {string} config.search search string
|
|
3459
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
3460
|
+
* @param {number} [config.limit=100] maximum number of search results
|
|
3461
|
+
* @returns {Array} array of JSKOS concept objects
|
|
3462
|
+
*/
|
|
2790
3463
|
async search({ search, scheme, limit = 100 }) {
|
|
2791
3464
|
scheme = await this._loadScheme({ scheme });
|
|
2792
3465
|
if (!scheme || !scheme.uri) {
|
|
@@ -2832,6 +3505,15 @@ var SkohubProvider = class extends BaseProvider {
|
|
|
2832
3505
|
const concepts = await this.getConcepts({ concepts: result.map((uri) => ({ uri })) });
|
|
2833
3506
|
return concepts.slice(0, limit);
|
|
2834
3507
|
}
|
|
3508
|
+
/**
|
|
3509
|
+
* Returns suggestion result in OpenSearch Suggest Format.
|
|
3510
|
+
*
|
|
3511
|
+
* @param {Object} config
|
|
3512
|
+
* @param {string} config.search search string
|
|
3513
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
3514
|
+
* @param {number} [config.limit=100] maximum number of search results
|
|
3515
|
+
* @returns {Array} result in OpenSearch Suggest Format
|
|
3516
|
+
*/
|
|
2835
3517
|
async suggest(config) {
|
|
2836
3518
|
config._raw = true;
|
|
2837
3519
|
const concepts = await this.search(config);
|
|
@@ -2875,6 +3557,14 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
2875
3557
|
_setup() {
|
|
2876
3558
|
this._scheme = null;
|
|
2877
3559
|
}
|
|
3560
|
+
/**
|
|
3561
|
+
* Used by `registryForScheme` (see src/lib/CocodaSDK.js) to determine a provider config for a concept schceme.
|
|
3562
|
+
*
|
|
3563
|
+
* @param {Object} options
|
|
3564
|
+
* @param {Object} options.url API URL for BARTOC instance
|
|
3565
|
+
* @param {Object} options.scheme scheme for which the config is requested
|
|
3566
|
+
* @returns {Object} provider configuration
|
|
3567
|
+
*/
|
|
2878
3568
|
static _registryConfigForBartocApiConfig({ url, scheme } = {}) {
|
|
2879
3569
|
if (!url || !scheme) {
|
|
2880
3570
|
return null;
|
|
@@ -2883,6 +3573,9 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
2883
3573
|
api: url
|
|
2884
3574
|
};
|
|
2885
3575
|
}
|
|
3576
|
+
/**
|
|
3577
|
+
* Converts scheme info (full scheme data that comes from the API) to a JSKOS scheme
|
|
3578
|
+
*/
|
|
2886
3579
|
_schemeInfoToJSKOS(schemeInfo) {
|
|
2887
3580
|
const uri = schemeInfo.labels.find((l) => l.lang === "x-uri").text;
|
|
2888
3581
|
const prefLabel = {};
|
|
@@ -2901,6 +3594,13 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
2901
3594
|
}
|
|
2902
3595
|
return scheme;
|
|
2903
3596
|
}
|
|
3597
|
+
/**
|
|
3598
|
+
* Converts a category to a JSKOS concept.
|
|
3599
|
+
* - Also saves that concept in data
|
|
3600
|
+
* - Also adds the concept's prefLabels to the search index
|
|
3601
|
+
*
|
|
3602
|
+
* ? Question: Should scopeNotes be part of the search index?
|
|
3603
|
+
*/
|
|
2904
3604
|
_categoryToJSKOS(category, { scheme, broader = [] }) {
|
|
2905
3605
|
if (!category || !scheme) {
|
|
2906
3606
|
return null;
|
|
@@ -2933,11 +3633,17 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
2933
3633
|
};
|
|
2934
3634
|
return data2[scheme.uri].concepts[uri];
|
|
2935
3635
|
}
|
|
3636
|
+
/**
|
|
3637
|
+
* Helper function that replaces `narrower` key with [null] if it has values. Use this before returning concepts.
|
|
3638
|
+
*/
|
|
2936
3639
|
_removeNarrower(concept) {
|
|
2937
3640
|
if (!concept)
|
|
2938
3641
|
return concept;
|
|
2939
3642
|
return Object.assign({}, concept, { narrower: concept.narrower && concept.narrower.length ? [null] : [] });
|
|
2940
3643
|
}
|
|
3644
|
+
/**
|
|
3645
|
+
* Loads the data from the API. Only called from getSchemes and only called once.
|
|
3646
|
+
*/
|
|
2941
3647
|
async _loadSchemeData(config) {
|
|
2942
3648
|
const schemeInfo = await this.axios({
|
|
2943
3649
|
...config,
|
|
@@ -3024,6 +3730,15 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
3024
3730
|
concept = data2[this._scheme.uri].concepts[concept.uri];
|
|
3025
3731
|
return (concept && concept.narrower || []).map((c) => data2[this._scheme.uri].concepts[c.uri]).map(this._removeNarrower);
|
|
3026
3732
|
}
|
|
3733
|
+
/**
|
|
3734
|
+
* Returns concept search results.
|
|
3735
|
+
*
|
|
3736
|
+
* @param {Object} config
|
|
3737
|
+
* @param {string} config.search search string
|
|
3738
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
3739
|
+
* @param {number} [config.limit=100] maximum number of search results
|
|
3740
|
+
* @returns {Array} array of JSKOS concept objects
|
|
3741
|
+
*/
|
|
3027
3742
|
async search({ search, scheme, limit = 100 }) {
|
|
3028
3743
|
if (!scheme || !scheme.uri) {
|
|
3029
3744
|
throw new InvalidOrMissingParameterError({ parameter: "scheme" });
|
|
@@ -3043,6 +3758,15 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
3043
3758
|
const result = await data2[this._scheme.uri].searchIndex.search(search);
|
|
3044
3759
|
return result.map((uri) => data2[this._scheme.uri].concepts[uri]).map(this._removeNarrower).slice(0, limit);
|
|
3045
3760
|
}
|
|
3761
|
+
/**
|
|
3762
|
+
* Returns suggestion result in OpenSearch Suggest Format.
|
|
3763
|
+
*
|
|
3764
|
+
* @param {Object} config
|
|
3765
|
+
* @param {string} config.search search string
|
|
3766
|
+
* @param {Object} [config.scheme] concept scheme to search in
|
|
3767
|
+
* @param {number} [config.limit=100] maximum number of search results
|
|
3768
|
+
* @returns {Array} result in OpenSearch Suggest Format
|
|
3769
|
+
*/
|
|
3046
3770
|
async suggest(config) {
|
|
3047
3771
|
config._raw = true;
|
|
3048
3772
|
const concepts = await this.search(config);
|
|
@@ -3086,16 +3810,37 @@ providers.addProvider(ConceptApiProvider);
|
|
|
3086
3810
|
providers.addProvider(MappingsApiProvider);
|
|
3087
3811
|
var registryCache = {};
|
|
3088
3812
|
var CocodaSDK = class {
|
|
3813
|
+
/**
|
|
3814
|
+
* CDK constructor.
|
|
3815
|
+
*
|
|
3816
|
+
* @param {Object} [config={}] Cocoda-stye config object
|
|
3817
|
+
*/
|
|
3089
3818
|
constructor(config) {
|
|
3090
3819
|
this.config = config;
|
|
3091
3820
|
this.axios = import_axios3.default.create();
|
|
3092
3821
|
}
|
|
3822
|
+
/**
|
|
3823
|
+
* Method to set the configuration.
|
|
3824
|
+
*
|
|
3825
|
+
* @param {Object} config Cocoda-stye config object
|
|
3826
|
+
*/
|
|
3093
3827
|
setConfig(config) {
|
|
3094
3828
|
this.config = config;
|
|
3095
3829
|
}
|
|
3830
|
+
/**
|
|
3831
|
+
* Current configuration.
|
|
3832
|
+
*
|
|
3833
|
+
* @returns {Object} current configuration
|
|
3834
|
+
*/
|
|
3096
3835
|
get config() {
|
|
3097
3836
|
return this._config;
|
|
3098
3837
|
}
|
|
3838
|
+
/**
|
|
3839
|
+
* Prepares config when set.
|
|
3840
|
+
*
|
|
3841
|
+
* @param {Object} config Cocoda config object
|
|
3842
|
+
* @private
|
|
3843
|
+
*/
|
|
3099
3844
|
set config(config) {
|
|
3100
3845
|
config = config || {};
|
|
3101
3846
|
config.registries = config.registries || [];
|
|
@@ -3105,16 +3850,44 @@ var CocodaSDK = class {
|
|
|
3105
3850
|
});
|
|
3106
3851
|
this._config = config;
|
|
3107
3852
|
}
|
|
3853
|
+
/**
|
|
3854
|
+
* Map of registered providers.
|
|
3855
|
+
*
|
|
3856
|
+
* @returns {Object} map of registered providers (name -> provider)
|
|
3857
|
+
*/
|
|
3108
3858
|
get providers() {
|
|
3109
3859
|
return providers;
|
|
3110
3860
|
}
|
|
3861
|
+
/**
|
|
3862
|
+
* Creates a new CDK instance (same as `new CocodaSDK(config)`).
|
|
3863
|
+
*
|
|
3864
|
+
* @param {Object} config Cocoda config object
|
|
3865
|
+
* @returns {CocodaSDK} new CDK instance
|
|
3866
|
+
*/
|
|
3111
3867
|
createInstance(config) {
|
|
3112
3868
|
return new CocodaSDK(config);
|
|
3113
3869
|
}
|
|
3870
|
+
/**
|
|
3871
|
+
* Offer method to load a config file from URL.
|
|
3872
|
+
*
|
|
3873
|
+
* @param {string} url URL of config as JSON
|
|
3874
|
+
*/
|
|
3114
3875
|
async loadConfig(url) {
|
|
3115
3876
|
const response = await this.axios.get(url);
|
|
3116
3877
|
this.config = response.data;
|
|
3117
3878
|
}
|
|
3879
|
+
/**
|
|
3880
|
+
* Method to load buildInfo.
|
|
3881
|
+
*
|
|
3882
|
+
* Callback will only be called if buildInfo changes; it will not be called when there is no previous value.
|
|
3883
|
+
*
|
|
3884
|
+
* @param {Object} config
|
|
3885
|
+
* @param {string} [config.url] full URL for build-info.json (default is taken from config.cocodaBaseUrl)
|
|
3886
|
+
* @param {Object} [config.buildInfo] current buildInfo
|
|
3887
|
+
* @param {number} [config.interval=60000] interval to load buildInfo in ms
|
|
3888
|
+
* @param {Function} config.callback callback function called with two parameters (error, buildInfo, previousBuildInfo)
|
|
3889
|
+
* @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)
|
|
3890
|
+
*/
|
|
3118
3891
|
loadBuildInfo({ url, buildInfo = null, interval = 6e4, callback, ...config }) {
|
|
3119
3892
|
if (!url && !this.config.cocodaBaseUrl) {
|
|
3120
3893
|
throw new CDKError({ message: "Could not determine URL to load build config." });
|
|
@@ -3141,20 +3914,64 @@ var CocodaSDK = class {
|
|
|
3141
3914
|
}
|
|
3142
3915
|
});
|
|
3143
3916
|
}
|
|
3917
|
+
/**
|
|
3918
|
+
* Method to get a registry by URI.
|
|
3919
|
+
*
|
|
3920
|
+
* @param {string} uri URI of registry in config
|
|
3921
|
+
* @returns {?Object} initialized registry from config if found
|
|
3922
|
+
*/
|
|
3144
3923
|
getRegistryForUri(uri) {
|
|
3145
3924
|
return this.config.registries.find((r) => r.uri == uri);
|
|
3146
3925
|
}
|
|
3926
|
+
/**
|
|
3927
|
+
* Method to initialize registry.
|
|
3928
|
+
*
|
|
3929
|
+
* @param {Object} registry JSKOS registry object
|
|
3930
|
+
* @returns {Object} initialized registry
|
|
3931
|
+
*/
|
|
3147
3932
|
initializeRegistry(registry) {
|
|
3148
3933
|
registry = providers.init(registry);
|
|
3149
3934
|
registry.cdk = this;
|
|
3150
3935
|
return registry;
|
|
3151
3936
|
}
|
|
3937
|
+
/**
|
|
3938
|
+
* Method to add custom provider.
|
|
3939
|
+
*
|
|
3940
|
+
* @param {Object} provider provider class that extends BaseProvider
|
|
3941
|
+
*/
|
|
3152
3942
|
addProvider(provider) {
|
|
3153
3943
|
providers.addProvider(provider);
|
|
3154
3944
|
}
|
|
3945
|
+
/**
|
|
3946
|
+
* Static method to add custom provider.
|
|
3947
|
+
*
|
|
3948
|
+
* @param {Object} provider provider class that extends BaseProvider
|
|
3949
|
+
*/
|
|
3155
3950
|
static addProvider(provider) {
|
|
3156
3951
|
providers.addProvider(provider);
|
|
3157
3952
|
}
|
|
3953
|
+
/**
|
|
3954
|
+
* Repeatedly call a certain function.
|
|
3955
|
+
*
|
|
3956
|
+
* Notes:
|
|
3957
|
+
* - Callback will only be called if the results were changed.
|
|
3958
|
+
* - 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).
|
|
3959
|
+
*
|
|
3960
|
+
* Example:
|
|
3961
|
+
* ```js
|
|
3962
|
+
* cdk.repeat({
|
|
3963
|
+
* function: () => registry.getMappings(),
|
|
3964
|
+
* callback: (error, result) => console.log(result),
|
|
3965
|
+
* })
|
|
3966
|
+
* ```
|
|
3967
|
+
*
|
|
3968
|
+
* @param {Object} config
|
|
3969
|
+
* @param {string} config.function a function to be called (can be async)
|
|
3970
|
+
* @param {number} [config.interval=15000] interval in ms
|
|
3971
|
+
* @param {Function} config.callback callback function called with two parameters (error, result, previousResult)
|
|
3972
|
+
* @param {boolean} [config.callImmediately=true] whether to call the function immediately
|
|
3973
|
+
* @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)
|
|
3974
|
+
*/
|
|
3158
3975
|
repeat({ function: func, interval = 15e3, callback, callImmediately = true } = {}) {
|
|
3159
3976
|
if (!func) {
|
|
3160
3977
|
throw new InvalidOrMissingParameterError({ parameter: "function" });
|
|
@@ -3241,6 +4058,12 @@ var CocodaSDK = class {
|
|
|
3241
4058
|
}
|
|
3242
4059
|
};
|
|
3243
4060
|
}
|
|
4061
|
+
/**
|
|
4062
|
+
* Gets schemes from all registries that support schemes and merges the results.
|
|
4063
|
+
*
|
|
4064
|
+
* @param {Object} [config={}] configuration object that will be used as a parameter for internal `getSchemes` calls
|
|
4065
|
+
* @returns {Object[]} array of JSKOS schemes
|
|
4066
|
+
*/
|
|
3244
4067
|
async getSchemes(config = {}) {
|
|
3245
4068
|
let schemes = [], promises = [];
|
|
3246
4069
|
for (let registry of this.config.registries) {
|