cocoda-sdk 3.3.3 → 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 +809 -0
- package/dist/cocoda-sdk.js +16 -11
- package/dist/cocoda-sdk.js.LICENSES.txt +177 -3
- 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 +39 -0
- 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 +5 -5
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 [];
|
|
@@ -2082,6 +2568,15 @@ var LabelSearchSuggestionProvider = class extends BaseProvider {
|
|
|
2082
2568
|
}
|
|
2083
2569
|
return mappings;
|
|
2084
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
|
+
*/
|
|
2085
2580
|
async _getResults({ label, targetScheme, limit, ...config }) {
|
|
2086
2581
|
let resultsFromCache = (this._cache[targetScheme.uri] || {})[label];
|
|
2087
2582
|
if (resultsFromCache && resultsFromCache._limit >= limit) {
|
|
@@ -2113,6 +2608,9 @@ LabelSearchSuggestionProvider.stored = false;
|
|
|
2113
2608
|
// src/providers/skosmos-api-provider.js
|
|
2114
2609
|
var import_jskos_tools8 = __toESM(require("jskos-tools"), 1);
|
|
2115
2610
|
var SkosmosApiProvider = class extends BaseProvider {
|
|
2611
|
+
/**
|
|
2612
|
+
* @private
|
|
2613
|
+
*/
|
|
2116
2614
|
_prepare() {
|
|
2117
2615
|
this.has.schemes = true;
|
|
2118
2616
|
this.has.top = true;
|
|
@@ -2127,6 +2625,14 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2127
2625
|
this.has[c] = false;
|
|
2128
2626
|
});
|
|
2129
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
|
+
*/
|
|
2130
2636
|
static _registryConfigForBartocApiConfig({ url, scheme } = {}) {
|
|
2131
2637
|
if (!url || !scheme) {
|
|
2132
2638
|
return null;
|
|
@@ -2141,9 +2647,15 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2141
2647
|
config.schemes = [scheme];
|
|
2142
2648
|
return config;
|
|
2143
2649
|
}
|
|
2650
|
+
/**
|
|
2651
|
+
* @private
|
|
2652
|
+
*/
|
|
2144
2653
|
get _language() {
|
|
2145
2654
|
return this.languages[0] || this._defaultLanguages[0] || "en";
|
|
2146
2655
|
}
|
|
2656
|
+
/**
|
|
2657
|
+
* @private
|
|
2658
|
+
*/
|
|
2147
2659
|
_getApiUrl(scheme, endpoint, params) {
|
|
2148
2660
|
const VOCID = scheme && scheme.VOCID || import_get.default(this.schemes.find((s) => import_jskos_tools8.default.compare(s, scheme)), "VOCID");
|
|
2149
2661
|
if (!VOCID) {
|
|
@@ -2157,6 +2669,9 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2157
2669
|
const paramString = Object.keys(params).map((k) => `${k}=${encodeURIComponent(params[k])}`).join("&");
|
|
2158
2670
|
return `${this._api.api}${VOCID}${endpoint}${paramString ? "?" + paramString : ""}`;
|
|
2159
2671
|
}
|
|
2672
|
+
/**
|
|
2673
|
+
* @private
|
|
2674
|
+
*/
|
|
2160
2675
|
_getDataUrl(concept, { addFormatParameter = true } = {}) {
|
|
2161
2676
|
const scheme = import_get.default(concept, "inScheme[0]");
|
|
2162
2677
|
if (!concept || !concept.uri) {
|
|
@@ -2164,6 +2679,11 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2164
2679
|
}
|
|
2165
2680
|
return this._getApiUrl(scheme, "/data", addFormatParameter ? { format: "application/json" } : {});
|
|
2166
2681
|
}
|
|
2682
|
+
/**
|
|
2683
|
+
* Returns the main vocabulary URI by requesting the scheme info and saving it in a cache.
|
|
2684
|
+
*
|
|
2685
|
+
* @private
|
|
2686
|
+
*/
|
|
2167
2687
|
async _getSchemeUri(scheme) {
|
|
2168
2688
|
this._approvedSchemes = this._approvedSchemes || [];
|
|
2169
2689
|
this._rejectedSchemes = this._rejectedSchemes || [];
|
|
@@ -2194,6 +2714,9 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2194
2714
|
return null;
|
|
2195
2715
|
}
|
|
2196
2716
|
}
|
|
2717
|
+
/**
|
|
2718
|
+
* @private
|
|
2719
|
+
*/
|
|
2197
2720
|
_toJskosConcept(skosmosConcept, { concept, scheme, result, language } = {}) {
|
|
2198
2721
|
if (!skosmosConcept) {
|
|
2199
2722
|
return null;
|
|
@@ -2266,6 +2789,12 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2266
2789
|
}
|
|
2267
2790
|
return concept;
|
|
2268
2791
|
}
|
|
2792
|
+
/**
|
|
2793
|
+
* Returns all concept schemes.
|
|
2794
|
+
*
|
|
2795
|
+
* @param {Object} config
|
|
2796
|
+
* @returns {Object[]} array of JSKOS concept scheme objects
|
|
2797
|
+
*/
|
|
2269
2798
|
async getSchemes({ ...config }) {
|
|
2270
2799
|
const schemes = [];
|
|
2271
2800
|
for (let scheme of this.schemes || []) {
|
|
@@ -2291,6 +2820,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2291
2820
|
}
|
|
2292
2821
|
return schemes;
|
|
2293
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
|
+
*/
|
|
2294
2830
|
async getTop({ scheme, ...config }) {
|
|
2295
2831
|
const url = this._getApiUrl(scheme, "/topConcepts");
|
|
2296
2832
|
const schemeUri = await this._getSchemeUri(scheme);
|
|
@@ -2314,6 +2850,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2314
2850
|
}
|
|
2315
2851
|
return concepts;
|
|
2316
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
|
+
*/
|
|
2317
2860
|
async getConcepts({ concepts, ...config }) {
|
|
2318
2861
|
if (!import_isArray.default(concepts)) {
|
|
2319
2862
|
concepts = [concepts];
|
|
@@ -2353,6 +2896,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2353
2896
|
}
|
|
2354
2897
|
return newConcepts;
|
|
2355
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
|
+
*/
|
|
2356
2906
|
async getNarrower({ concept, ...config }) {
|
|
2357
2907
|
if (!concept || !concept.uri) {
|
|
2358
2908
|
throw new InvalidOrMissingParameterError({ parameter: "concept" });
|
|
@@ -2368,6 +2918,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2368
2918
|
const concepts = (response.narrower || []).map((c) => this._toJskosConcept(c, { scheme }));
|
|
2369
2919
|
return concepts;
|
|
2370
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
|
+
*/
|
|
2371
2928
|
async getAncestors({ concept, ...config }) {
|
|
2372
2929
|
if (!concept || !concept.uri) {
|
|
2373
2930
|
throw new InvalidOrMissingParameterError({ parameter: "concept" });
|
|
@@ -2392,6 +2949,16 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2392
2949
|
const concepts = ancestors.map((c) => this._toJskosConcept(c, { scheme })).filter((c) => c.uri != concept.uri);
|
|
2393
2950
|
return concepts;
|
|
2394
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
|
+
*/
|
|
2395
2962
|
async suggest(config) {
|
|
2396
2963
|
config._raw = true;
|
|
2397
2964
|
const concepts = await this.search(config);
|
|
@@ -2410,6 +2977,16 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2410
2977
|
}
|
|
2411
2978
|
return result;
|
|
2412
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
|
+
*/
|
|
2413
2990
|
async search({ search, scheme, limit, types = [], ...config }) {
|
|
2414
2991
|
const url = this._getApiUrl(scheme, "/search");
|
|
2415
2992
|
import_set.default(config, "params.query", `${search}*`);
|
|
@@ -2424,6 +3001,13 @@ var SkosmosApiProvider = class extends BaseProvider {
|
|
|
2424
3001
|
const concepts = (response.results || []).map((c) => this._toJskosConcept(c, { scheme }));
|
|
2425
3002
|
return concepts;
|
|
2426
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
|
+
*/
|
|
2427
3011
|
async getTypes({ scheme, ...config }) {
|
|
2428
3012
|
const url = this._getApiUrl(scheme, "/types");
|
|
2429
3013
|
const types = [];
|
|
@@ -2522,6 +3106,9 @@ function madsToJskosConcept(data3, { scheme }) {
|
|
|
2522
3106
|
return concept;
|
|
2523
3107
|
}
|
|
2524
3108
|
var LocApiProvider = class extends BaseProvider {
|
|
3109
|
+
/**
|
|
3110
|
+
* @private
|
|
3111
|
+
*/
|
|
2525
3112
|
_prepare() {
|
|
2526
3113
|
this.has.schemes = true;
|
|
2527
3114
|
this.has.top = false;
|
|
@@ -2535,6 +3122,13 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2535
3122
|
this.has[c] = false;
|
|
2536
3123
|
});
|
|
2537
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
|
+
*/
|
|
2538
3132
|
static _registryConfigForBartocApiConfig({ scheme } = {}) {
|
|
2539
3133
|
if (!scheme || !supportedSchemes.find((s) => import_jskos_tools9.default.compare(s, scheme))) {
|
|
2540
3134
|
return null;
|
|
@@ -2543,6 +3137,11 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2543
3137
|
schemes: [scheme]
|
|
2544
3138
|
};
|
|
2545
3139
|
}
|
|
3140
|
+
/**
|
|
3141
|
+
* Returns all concept schemes.
|
|
3142
|
+
*
|
|
3143
|
+
* @returns {Object[]} array of JSKOS concept scheme objects
|
|
3144
|
+
*/
|
|
2546
3145
|
async getSchemes() {
|
|
2547
3146
|
const schemes = [];
|
|
2548
3147
|
for (let scheme of await Promise.all(
|
|
@@ -2567,6 +3166,29 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2567
3166
|
}
|
|
2568
3167
|
return schemes;
|
|
2569
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
|
+
*/
|
|
2570
3192
|
async getConcepts({ concepts }) {
|
|
2571
3193
|
if (!Array.isArray(concepts)) {
|
|
2572
3194
|
concepts = [concepts];
|
|
@@ -2590,6 +3212,16 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2590
3212
|
}
|
|
2591
3213
|
return resultConcepts;
|
|
2592
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
|
+
*/
|
|
2593
3225
|
async suggest(config) {
|
|
2594
3226
|
const results = await this.search(config);
|
|
2595
3227
|
return [
|
|
@@ -2601,6 +3233,16 @@ var LocApiProvider = class extends BaseProvider {
|
|
|
2601
3233
|
results.map((c) => c.uri)
|
|
2602
3234
|
];
|
|
2603
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
|
+
*/
|
|
2604
3246
|
async search({ search, scheme, limit, offset }) {
|
|
2605
3247
|
const schemeUri = import_jskos_tools9.default.getAllUris(scheme).find((uri) => uri.startsWith(locUriPrefix));
|
|
2606
3248
|
if (!schemeUri || !supportedSchemes.find((s) => import_jskos_tools9.default.compare(s, { uri: schemeUri }))) {
|
|
@@ -2672,6 +3314,14 @@ var SkohubProvider = class extends BaseProvider {
|
|
|
2672
3314
|
get _schemeCache() {
|
|
2673
3315
|
return data[this.uri] && data[this.uri].schemeCache;
|
|
2674
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
|
+
*/
|
|
2675
3325
|
static _registryConfigForBartocApiConfig({ url, scheme } = {}) {
|
|
2676
3326
|
if (!url || !scheme) {
|
|
2677
3327
|
return null;
|
|
@@ -2801,6 +3451,15 @@ var SkohubProvider = class extends BaseProvider {
|
|
|
2801
3451
|
concept = await this._loadConcept({ ...config, uri: concept.uri });
|
|
2802
3452
|
return concept.narrower;
|
|
2803
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
|
+
*/
|
|
2804
3463
|
async search({ search, scheme, limit = 100 }) {
|
|
2805
3464
|
scheme = await this._loadScheme({ scheme });
|
|
2806
3465
|
if (!scheme || !scheme.uri) {
|
|
@@ -2846,6 +3505,15 @@ var SkohubProvider = class extends BaseProvider {
|
|
|
2846
3505
|
const concepts = await this.getConcepts({ concepts: result.map((uri) => ({ uri })) });
|
|
2847
3506
|
return concepts.slice(0, limit);
|
|
2848
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
|
+
*/
|
|
2849
3517
|
async suggest(config) {
|
|
2850
3518
|
config._raw = true;
|
|
2851
3519
|
const concepts = await this.search(config);
|
|
@@ -2889,6 +3557,14 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
2889
3557
|
_setup() {
|
|
2890
3558
|
this._scheme = null;
|
|
2891
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
|
+
*/
|
|
2892
3568
|
static _registryConfigForBartocApiConfig({ url, scheme } = {}) {
|
|
2893
3569
|
if (!url || !scheme) {
|
|
2894
3570
|
return null;
|
|
@@ -2897,6 +3573,9 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
2897
3573
|
api: url
|
|
2898
3574
|
};
|
|
2899
3575
|
}
|
|
3576
|
+
/**
|
|
3577
|
+
* Converts scheme info (full scheme data that comes from the API) to a JSKOS scheme
|
|
3578
|
+
*/
|
|
2900
3579
|
_schemeInfoToJSKOS(schemeInfo) {
|
|
2901
3580
|
const uri = schemeInfo.labels.find((l) => l.lang === "x-uri").text;
|
|
2902
3581
|
const prefLabel = {};
|
|
@@ -2915,6 +3594,13 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
2915
3594
|
}
|
|
2916
3595
|
return scheme;
|
|
2917
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
|
+
*/
|
|
2918
3604
|
_categoryToJSKOS(category, { scheme, broader = [] }) {
|
|
2919
3605
|
if (!category || !scheme) {
|
|
2920
3606
|
return null;
|
|
@@ -2947,11 +3633,17 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
2947
3633
|
};
|
|
2948
3634
|
return data2[scheme.uri].concepts[uri];
|
|
2949
3635
|
}
|
|
3636
|
+
/**
|
|
3637
|
+
* Helper function that replaces `narrower` key with [null] if it has values. Use this before returning concepts.
|
|
3638
|
+
*/
|
|
2950
3639
|
_removeNarrower(concept) {
|
|
2951
3640
|
if (!concept)
|
|
2952
3641
|
return concept;
|
|
2953
3642
|
return Object.assign({}, concept, { narrower: concept.narrower && concept.narrower.length ? [null] : [] });
|
|
2954
3643
|
}
|
|
3644
|
+
/**
|
|
3645
|
+
* Loads the data from the API. Only called from getSchemes and only called once.
|
|
3646
|
+
*/
|
|
2955
3647
|
async _loadSchemeData(config) {
|
|
2956
3648
|
const schemeInfo = await this.axios({
|
|
2957
3649
|
...config,
|
|
@@ -3038,6 +3730,15 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
3038
3730
|
concept = data2[this._scheme.uri].concepts[concept.uri];
|
|
3039
3731
|
return (concept && concept.narrower || []).map((c) => data2[this._scheme.uri].concepts[c.uri]).map(this._removeNarrower);
|
|
3040
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
|
+
*/
|
|
3041
3742
|
async search({ search, scheme, limit = 100 }) {
|
|
3042
3743
|
if (!scheme || !scheme.uri) {
|
|
3043
3744
|
throw new InvalidOrMissingParameterError({ parameter: "scheme" });
|
|
@@ -3057,6 +3758,15 @@ var MyCoReProvider = class extends BaseProvider {
|
|
|
3057
3758
|
const result = await data2[this._scheme.uri].searchIndex.search(search);
|
|
3058
3759
|
return result.map((uri) => data2[this._scheme.uri].concepts[uri]).map(this._removeNarrower).slice(0, limit);
|
|
3059
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
|
+
*/
|
|
3060
3770
|
async suggest(config) {
|
|
3061
3771
|
config._raw = true;
|
|
3062
3772
|
const concepts = await this.search(config);
|
|
@@ -3100,16 +3810,37 @@ providers.addProvider(ConceptApiProvider);
|
|
|
3100
3810
|
providers.addProvider(MappingsApiProvider);
|
|
3101
3811
|
var registryCache = {};
|
|
3102
3812
|
var CocodaSDK = class {
|
|
3813
|
+
/**
|
|
3814
|
+
* CDK constructor.
|
|
3815
|
+
*
|
|
3816
|
+
* @param {Object} [config={}] Cocoda-stye config object
|
|
3817
|
+
*/
|
|
3103
3818
|
constructor(config) {
|
|
3104
3819
|
this.config = config;
|
|
3105
3820
|
this.axios = import_axios3.default.create();
|
|
3106
3821
|
}
|
|
3822
|
+
/**
|
|
3823
|
+
* Method to set the configuration.
|
|
3824
|
+
*
|
|
3825
|
+
* @param {Object} config Cocoda-stye config object
|
|
3826
|
+
*/
|
|
3107
3827
|
setConfig(config) {
|
|
3108
3828
|
this.config = config;
|
|
3109
3829
|
}
|
|
3830
|
+
/**
|
|
3831
|
+
* Current configuration.
|
|
3832
|
+
*
|
|
3833
|
+
* @returns {Object} current configuration
|
|
3834
|
+
*/
|
|
3110
3835
|
get config() {
|
|
3111
3836
|
return this._config;
|
|
3112
3837
|
}
|
|
3838
|
+
/**
|
|
3839
|
+
* Prepares config when set.
|
|
3840
|
+
*
|
|
3841
|
+
* @param {Object} config Cocoda config object
|
|
3842
|
+
* @private
|
|
3843
|
+
*/
|
|
3113
3844
|
set config(config) {
|
|
3114
3845
|
config = config || {};
|
|
3115
3846
|
config.registries = config.registries || [];
|
|
@@ -3119,16 +3850,44 @@ var CocodaSDK = class {
|
|
|
3119
3850
|
});
|
|
3120
3851
|
this._config = config;
|
|
3121
3852
|
}
|
|
3853
|
+
/**
|
|
3854
|
+
* Map of registered providers.
|
|
3855
|
+
*
|
|
3856
|
+
* @returns {Object} map of registered providers (name -> provider)
|
|
3857
|
+
*/
|
|
3122
3858
|
get providers() {
|
|
3123
3859
|
return providers;
|
|
3124
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
|
+
*/
|
|
3125
3867
|
createInstance(config) {
|
|
3126
3868
|
return new CocodaSDK(config);
|
|
3127
3869
|
}
|
|
3870
|
+
/**
|
|
3871
|
+
* Offer method to load a config file from URL.
|
|
3872
|
+
*
|
|
3873
|
+
* @param {string} url URL of config as JSON
|
|
3874
|
+
*/
|
|
3128
3875
|
async loadConfig(url) {
|
|
3129
3876
|
const response = await this.axios.get(url);
|
|
3130
3877
|
this.config = response.data;
|
|
3131
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
|
+
*/
|
|
3132
3891
|
loadBuildInfo({ url, buildInfo = null, interval = 6e4, callback, ...config }) {
|
|
3133
3892
|
if (!url && !this.config.cocodaBaseUrl) {
|
|
3134
3893
|
throw new CDKError({ message: "Could not determine URL to load build config." });
|
|
@@ -3155,20 +3914,64 @@ var CocodaSDK = class {
|
|
|
3155
3914
|
}
|
|
3156
3915
|
});
|
|
3157
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
|
+
*/
|
|
3158
3923
|
getRegistryForUri(uri) {
|
|
3159
3924
|
return this.config.registries.find((r) => r.uri == uri);
|
|
3160
3925
|
}
|
|
3926
|
+
/**
|
|
3927
|
+
* Method to initialize registry.
|
|
3928
|
+
*
|
|
3929
|
+
* @param {Object} registry JSKOS registry object
|
|
3930
|
+
* @returns {Object} initialized registry
|
|
3931
|
+
*/
|
|
3161
3932
|
initializeRegistry(registry) {
|
|
3162
3933
|
registry = providers.init(registry);
|
|
3163
3934
|
registry.cdk = this;
|
|
3164
3935
|
return registry;
|
|
3165
3936
|
}
|
|
3937
|
+
/**
|
|
3938
|
+
* Method to add custom provider.
|
|
3939
|
+
*
|
|
3940
|
+
* @param {Object} provider provider class that extends BaseProvider
|
|
3941
|
+
*/
|
|
3166
3942
|
addProvider(provider) {
|
|
3167
3943
|
providers.addProvider(provider);
|
|
3168
3944
|
}
|
|
3945
|
+
/**
|
|
3946
|
+
* Static method to add custom provider.
|
|
3947
|
+
*
|
|
3948
|
+
* @param {Object} provider provider class that extends BaseProvider
|
|
3949
|
+
*/
|
|
3169
3950
|
static addProvider(provider) {
|
|
3170
3951
|
providers.addProvider(provider);
|
|
3171
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
|
+
*/
|
|
3172
3975
|
repeat({ function: func, interval = 15e3, callback, callImmediately = true } = {}) {
|
|
3173
3976
|
if (!func) {
|
|
3174
3977
|
throw new InvalidOrMissingParameterError({ parameter: "function" });
|
|
@@ -3255,6 +4058,12 @@ var CocodaSDK = class {
|
|
|
3255
4058
|
}
|
|
3256
4059
|
};
|
|
3257
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
|
+
*/
|
|
3258
4067
|
async getSchemes(config = {}) {
|
|
3259
4068
|
let schemes = [], promises = [];
|
|
3260
4069
|
for (let registry of this.config.registries) {
|