@semapps/semantic-data-provider 1.0.3 → 1.1.0-patch.1
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/index.cjs.js +965 -562
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +95 -27
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +953 -562
- package/dist/index.es.js.map +1 -1
- package/package.json +7 -2
package/dist/index.es.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import $fj9kP$
|
|
1
|
+
import $fj9kP$speakingurl from "speakingurl";
|
|
2
2
|
import $fj9kP$jsonld from "jsonld";
|
|
3
3
|
import $fj9kP$rdfjsdatamodel, {triple as $fj9kP$triple, variable as $fj9kP$variable, namedNode as $fj9kP$namedNode} from "@rdfjs/data-model";
|
|
4
4
|
import {Generator as $fj9kP$Generator} from "sparqljs";
|
|
5
5
|
import $fj9kP$cryptojsmd5 from "crypto-js/md5";
|
|
6
|
+
import {fetchUtils as $fj9kP$fetchUtils, useDataProvider as $fj9kP$useDataProvider, DataProviderContext as $fj9kP$DataProviderContext, useRecordContext as $fj9kP$useRecordContext, useGetList as $fj9kP$useGetList, ArrayInput as $fj9kP$ArrayInput, SimpleFormIterator as $fj9kP$SimpleFormIterator, TextInput as $fj9kP$TextInput} from "react-admin";
|
|
7
|
+
import $fj9kP$urljoin from "url-join";
|
|
6
8
|
import $fj9kP$jwtdecode from "jwt-decode";
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
+
import $fj9kP$httplinkheader from "http-link-header";
|
|
10
|
+
import {capitalCase as $fj9kP$capitalCase} from "change-case";
|
|
11
|
+
import $fj9kP$react, {useState as $fj9kP$useState, useEffect as $fj9kP$useEffect, useMemo as $fj9kP$useMemo, useCallback as $fj9kP$useCallback, useContext as $fj9kP$useContext} from "react";
|
|
9
12
|
import {jsx as $fj9kP$jsx, Fragment as $fj9kP$Fragment, jsxs as $fj9kP$jsxs} from "react/jsx-runtime";
|
|
10
13
|
import $fj9kP$muistylesmakeStyles from "@mui/styles/makeStyles";
|
|
11
14
|
|
|
@@ -18,10 +21,10 @@ const $336b7edf722fe53e$var$fetchResource = async (resourceUri, config)=>{
|
|
|
18
21
|
const { httpClient: httpClient, jsonContext: jsonContext } = config;
|
|
19
22
|
let { json: data } = await httpClient(resourceUri);
|
|
20
23
|
if (!data) throw new Error(`Not a valid JSON: ${resourceUri}`);
|
|
21
|
-
data.id = data.id || data[
|
|
24
|
+
data.id = data.id || data['@id'];
|
|
22
25
|
// We compact only if the context is different between the frontend and the middleware
|
|
23
26
|
// TODO deep compare if the context is an object
|
|
24
|
-
if (data[
|
|
27
|
+
if (data['@context'] !== jsonContext) data = await (0, $fj9kP$jsonld).compact(data, jsonContext);
|
|
25
28
|
return data;
|
|
26
29
|
};
|
|
27
30
|
var $336b7edf722fe53e$export$2e2bcd8739ae039 = $336b7edf722fe53e$var$fetchResource;
|
|
@@ -63,36 +66,40 @@ const $ed447224dd38ce82$var$getOneMethod = (config)=>async (resourceId, params)=
|
|
|
63
66
|
var $ed447224dd38ce82$export$2e2bcd8739ae039 = $ed447224dd38ce82$var$getOneMethod;
|
|
64
67
|
|
|
65
68
|
|
|
69
|
+
const $c35ffbda15247c32$var$getUploadsContainerUri = (config, serverKey)=>{
|
|
70
|
+
// If no server key is defined or if the server has no uploads container, find any server with a uploads container
|
|
71
|
+
if (!serverKey || !config.dataServers[serverKey].containers || !config.dataServers[serverKey].containers?.find((c)=>c.binaryResources)) serverKey = Object.keys(config.dataServers).find((key)=>config.dataServers[key].containers?.find((c)=>c.binaryResources));
|
|
72
|
+
if (serverKey) return config.dataServers[serverKey].containers?.find((c)=>c.binaryResources)?.uri;
|
|
73
|
+
else // No server has an uploads container
|
|
74
|
+
return null;
|
|
75
|
+
};
|
|
76
|
+
var $c35ffbda15247c32$export$2e2bcd8739ae039 = $c35ffbda15247c32$var$getUploadsContainerUri;
|
|
77
|
+
|
|
66
78
|
|
|
67
79
|
const $b17c43e3301545ca$var$isFile = (o)=>o?.rawFile && o.rawFile instanceof File;
|
|
68
80
|
const $b17c43e3301545ca$var$isFileToDelete = (o)=>o?.fileToDelete !== undefined && o?.fileToDelete !== null;
|
|
69
|
-
const $b17c43e3301545ca$
|
|
70
|
-
const
|
|
71
|
-
if (
|
|
72
|
-
return null;
|
|
73
|
-
};
|
|
74
|
-
const $b17c43e3301545ca$export$a5575dbeeffdad98 = async (rawFile, config)=>{
|
|
75
|
-
const uploadsContainerUri = $b17c43e3301545ca$var$getUploadsContainerUri(config);
|
|
76
|
-
if (!uploadsContainerUri) throw new Error("You must define an uploadsContainer in one of the server's configuration");
|
|
81
|
+
const $b17c43e3301545ca$export$a5575dbeeffdad98 = async (rawFile, config, serverKey)=>{
|
|
82
|
+
const uploadsContainerUri = (0, $c35ffbda15247c32$export$2e2bcd8739ae039)(config, serverKey);
|
|
83
|
+
if (!uploadsContainerUri) throw new Error("You must define an container with binaryResources in one of the server's configuration");
|
|
77
84
|
const response = await config.httpClient(uploadsContainerUri, {
|
|
78
|
-
method:
|
|
85
|
+
method: 'POST',
|
|
79
86
|
body: rawFile,
|
|
80
87
|
headers: new Headers({
|
|
81
|
-
|
|
88
|
+
'Content-Type': rawFile.type
|
|
82
89
|
})
|
|
83
90
|
});
|
|
84
|
-
if (response.status === 201) return response.headers.get(
|
|
91
|
+
if (response.status === 201) return response.headers.get('Location');
|
|
85
92
|
return null;
|
|
86
93
|
};
|
|
87
94
|
const $b17c43e3301545ca$var$deleteFiles = async (filesToDelete, config)=>{
|
|
88
95
|
return Promise.all(filesToDelete.map((file)=>config.httpClient(file, {
|
|
89
|
-
method:
|
|
96
|
+
method: 'DELETE'
|
|
90
97
|
})));
|
|
91
98
|
};
|
|
92
99
|
/*
|
|
93
100
|
* Look for raw files in the record data.
|
|
94
101
|
* If there are any, upload them and replace the file by its URL.
|
|
95
|
-
*/ const $b17c43e3301545ca$var$uploadAllFiles = async (record, config)=>{
|
|
102
|
+
*/ const $b17c43e3301545ca$var$uploadAllFiles = async (record, config, serverKey)=>{
|
|
96
103
|
const filesToDelete = [];
|
|
97
104
|
const updatedRecord = {
|
|
98
105
|
...record
|
|
@@ -103,7 +110,7 @@ const $b17c43e3301545ca$var$deleteFiles = async (filesToDelete, config)=>{
|
|
|
103
110
|
const itemValue = value[i];
|
|
104
111
|
if ($b17c43e3301545ca$var$isFile(itemValue)) {
|
|
105
112
|
if ($b17c43e3301545ca$var$isFileToDelete(itemValue)) filesToDelete.push(itemValue.fileToDelete);
|
|
106
|
-
updatedRecord[property][i] = await $b17c43e3301545ca$export$a5575dbeeffdad98(itemValue.rawFile, config);
|
|
113
|
+
updatedRecord[property][i] = await $b17c43e3301545ca$export$a5575dbeeffdad98(itemValue.rawFile, config, serverKey);
|
|
107
114
|
} else if ($b17c43e3301545ca$var$isFileToDelete(itemValue)) {
|
|
108
115
|
filesToDelete.push(itemValue.fileToDelete);
|
|
109
116
|
updatedRecord[property][i] = null;
|
|
@@ -111,7 +118,7 @@ const $b17c43e3301545ca$var$deleteFiles = async (filesToDelete, config)=>{
|
|
|
111
118
|
}
|
|
112
119
|
else if ($b17c43e3301545ca$var$isFile(value)) {
|
|
113
120
|
if ($b17c43e3301545ca$var$isFileToDelete(value)) filesToDelete.push(value.fileToDelete);
|
|
114
|
-
updatedRecord[property] = await $b17c43e3301545ca$export$a5575dbeeffdad98(value.rawFile, config);
|
|
121
|
+
updatedRecord[property] = await $b17c43e3301545ca$export$a5575dbeeffdad98(value.rawFile, config, serverKey);
|
|
115
122
|
} else if ($b17c43e3301545ca$var$isFileToDelete(value)) {
|
|
116
123
|
filesToDelete.push(value.fileToDelete);
|
|
117
124
|
updatedRecord[property] = null;
|
|
@@ -128,74 +135,72 @@ var $b17c43e3301545ca$export$2e2bcd8739ae039 = {
|
|
|
128
135
|
};
|
|
129
136
|
|
|
130
137
|
|
|
131
|
-
|
|
132
138
|
const $8326b88c1a913ca9$var$getServerKeyFromType = (type, dataServers)=>{
|
|
133
|
-
return Object.keys(dataServers).find((key)=>{
|
|
139
|
+
return dataServers && Object.keys(dataServers).find((key)=>{
|
|
134
140
|
return dataServers[key][type];
|
|
135
141
|
});
|
|
136
142
|
};
|
|
137
143
|
var $8326b88c1a913ca9$export$2e2bcd8739ae039 = $8326b88c1a913ca9$var$getServerKeyFromType;
|
|
138
144
|
|
|
139
145
|
|
|
140
|
-
const $
|
|
146
|
+
const $99cc2e4a2a3c100b$var$parseServerKey = (serverKey, dataServers)=>{
|
|
141
147
|
switch(serverKey){
|
|
142
|
-
case
|
|
143
|
-
return (0, $8326b88c1a913ca9$export$2e2bcd8739ae039)(
|
|
144
|
-
case
|
|
145
|
-
return (0, $8326b88c1a913ca9$export$2e2bcd8739ae039)(
|
|
146
|
-
case
|
|
147
|
-
return (0, $8326b88c1a913ca9$export$2e2bcd8739ae039)(
|
|
148
|
+
case '@default':
|
|
149
|
+
return (0, $8326b88c1a913ca9$export$2e2bcd8739ae039)('default', dataServers);
|
|
150
|
+
case '@pod':
|
|
151
|
+
return (0, $8326b88c1a913ca9$export$2e2bcd8739ae039)('pod', dataServers);
|
|
152
|
+
case '@authServer':
|
|
153
|
+
return (0, $8326b88c1a913ca9$export$2e2bcd8739ae039)('authServer', dataServers);
|
|
148
154
|
default:
|
|
149
155
|
return serverKey;
|
|
150
156
|
}
|
|
151
157
|
};
|
|
152
158
|
// Return the list of servers keys in an array
|
|
153
159
|
// parsing keywords like @all, @default, @pod and @authServer
|
|
154
|
-
const $
|
|
160
|
+
const $99cc2e4a2a3c100b$var$parseServerKeys = (serverKeys, dataServers)=>{
|
|
155
161
|
if (Array.isArray(serverKeys)) {
|
|
156
|
-
if (serverKeys.includes(
|
|
157
|
-
return serverKeys.map((serverKey)=>$
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
if (serverKeys ===
|
|
161
|
-
|
|
162
|
-
const defaultServerKey = (0, $8326b88c1a913ca9$export$2e2bcd8739ae039)("default", dataServers);
|
|
162
|
+
if (serverKeys.includes('@all')) return Object.keys(dataServers);
|
|
163
|
+
else return serverKeys.map((serverKey)=>$99cc2e4a2a3c100b$var$parseServerKey(serverKey, dataServers));
|
|
164
|
+
} else if (typeof serverKeys === 'string') {
|
|
165
|
+
if (serverKeys === '@all') return Object.keys(dataServers);
|
|
166
|
+
else if (serverKeys === '@remote') {
|
|
167
|
+
const defaultServerKey = (0, $8326b88c1a913ca9$export$2e2bcd8739ae039)('default', dataServers);
|
|
163
168
|
return Object.keys(dataServers).filter((serverKey)=>serverKey !== defaultServerKey);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
$64441f6e76bd15b6$var$parseServerKey(serverKeys, dataServers)
|
|
169
|
+
} else return [
|
|
170
|
+
$99cc2e4a2a3c100b$var$parseServerKey(serverKeys, dataServers)
|
|
167
171
|
];
|
|
168
|
-
}
|
|
169
|
-
// If server key is empty
|
|
170
|
-
return false;
|
|
172
|
+
} else throw new Error(`The parseServerKeys expect a list of server keys, or keywords`);
|
|
171
173
|
};
|
|
172
|
-
var $
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
const
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
const containerUri = (0, $fj9kP$urljoin)(dataServers[containerKey].baseUrl, path);
|
|
184
|
-
// Avoid returning the same container several times
|
|
185
|
-
if (!existingContainers.includes(containerUri)) {
|
|
186
|
-
existingContainers.push(containerUri);
|
|
187
|
-
if (!containers[dataServerKey]) containers[dataServerKey] = [];
|
|
188
|
-
containers[dataServerKey].push(containerUri);
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
});
|
|
174
|
+
var $99cc2e4a2a3c100b$export$2e2bcd8739ae039 = $99cc2e4a2a3c100b$var$parseServerKeys;
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Return all containers matching the given types
|
|
179
|
+
*/ const $15b841e67a1ba752$var$findContainersWithTypes = (types, serverKeys, dataServers)=>{
|
|
180
|
+
const matchingContainers = [];
|
|
181
|
+
const parsedServerKeys = (0, $99cc2e4a2a3c100b$export$2e2bcd8739ae039)(serverKeys || '@all', dataServers);
|
|
182
|
+
Object.keys(dataServers).forEach((dataServerKey)=>{
|
|
183
|
+
if (parsedServerKeys.includes(dataServerKey)) dataServers[dataServerKey].containers?.forEach((container)=>{
|
|
184
|
+
if (container.types?.some((t)=>types.includes(t))) matchingContainers.push(container);
|
|
192
185
|
});
|
|
193
186
|
});
|
|
194
|
-
return
|
|
187
|
+
return matchingContainers;
|
|
195
188
|
};
|
|
196
189
|
var $15b841e67a1ba752$export$2e2bcd8739ae039 = $15b841e67a1ba752$var$findContainersWithTypes;
|
|
197
190
|
|
|
198
191
|
|
|
192
|
+
const $7c772a9c0c25a69d$var$findContainersWithURIs = (containersUris, dataServers)=>{
|
|
193
|
+
const matchingContainers = [];
|
|
194
|
+
Object.keys(dataServers).forEach((serverKey)=>{
|
|
195
|
+
dataServers[serverKey].containers?.forEach((container)=>{
|
|
196
|
+
if (container.uri && containersUris.includes(container.uri)) matchingContainers.push(container);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
return matchingContainers;
|
|
200
|
+
};
|
|
201
|
+
var $7c772a9c0c25a69d$export$2e2bcd8739ae039 = $7c772a9c0c25a69d$var$findContainersWithURIs;
|
|
202
|
+
|
|
203
|
+
|
|
199
204
|
const $5a7a2f7583392866$var$createMethod = (config)=>async (resourceId, params)=>{
|
|
200
205
|
const { dataServers: dataServers, resources: resources, httpClient: httpClient, jsonContext: jsonContext } = config;
|
|
201
206
|
const dataModel = resources[resourceId];
|
|
@@ -204,47 +209,49 @@ const $5a7a2f7583392866$var$createMethod = (config)=>async (resourceId, params)=
|
|
|
204
209
|
let containerUri;
|
|
205
210
|
let serverKey;
|
|
206
211
|
if (dataModel.create?.container) {
|
|
207
|
-
|
|
208
|
-
|
|
212
|
+
const [container] = (0, $7c772a9c0c25a69d$export$2e2bcd8739ae039)([
|
|
213
|
+
dataModel.create?.container
|
|
214
|
+
], dataServers);
|
|
215
|
+
serverKey = container.server;
|
|
216
|
+
containerUri = container.uri;
|
|
209
217
|
} else {
|
|
210
218
|
serverKey = dataModel.create?.server || Object.keys(dataServers).find((key)=>dataServers[key].default === true);
|
|
211
|
-
if (!serverKey) throw new Error(
|
|
219
|
+
if (!serverKey) throw new Error('You must define a server for the creation, or a container, or a default server');
|
|
212
220
|
const containers = (0, $15b841e67a1ba752$export$2e2bcd8739ae039)(dataModel.types, [
|
|
213
221
|
serverKey
|
|
214
222
|
], dataServers);
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
if (serverKeys.length > 1 || containers[serverKeys[0]].length > 1) throw new Error(`More than one container detected with types ${JSON.stringify(dataModel.types)} on server ${serverKey}`);
|
|
219
|
-
containerUri = containers[serverKeys[0]][0];
|
|
223
|
+
if (!containers || containers.length === 0) throw new Error(`No container with types ${JSON.stringify(dataModel.types)} found on server ${serverKey}`);
|
|
224
|
+
if (containers.length > 1) throw new Error(`More than one container detected with types ${JSON.stringify(dataModel.types)} on server ${serverKey}`);
|
|
225
|
+
containerUri = containers[0].uri;
|
|
220
226
|
}
|
|
221
227
|
if (params.data) {
|
|
222
228
|
if (dataModel.fieldsMapping?.title) {
|
|
223
|
-
|
|
224
|
-
|
|
229
|
+
const slug = Array.isArray(dataModel.fieldsMapping.title) ? dataModel.fieldsMapping.title.map((f)=>params.data[f]).join(' ') : params.data[dataModel.fieldsMapping.title];
|
|
230
|
+
// Generate slug here, otherwise we may get errors with special characters
|
|
231
|
+
headers.set('Slug', (0, $fj9kP$speakingurl)(slug));
|
|
225
232
|
}
|
|
226
233
|
// Upload files, if there are any
|
|
227
|
-
const { updatedRecord: updatedRecord } = await (0, $b17c43e3301545ca$export$2e2bcd8739ae039).upload(params.data, config);
|
|
234
|
+
const { updatedRecord: updatedRecord } = await (0, $b17c43e3301545ca$export$2e2bcd8739ae039).upload(params.data, config, serverKey);
|
|
228
235
|
params.data = updatedRecord;
|
|
229
236
|
const { headers: responseHeaders } = await httpClient(containerUri, {
|
|
230
|
-
method:
|
|
237
|
+
method: 'POST',
|
|
231
238
|
headers: headers,
|
|
232
239
|
body: JSON.stringify({
|
|
233
|
-
|
|
234
|
-
|
|
240
|
+
'@context': jsonContext,
|
|
241
|
+
'@type': dataModel.types,
|
|
235
242
|
...params.data
|
|
236
243
|
})
|
|
237
244
|
});
|
|
238
245
|
// Retrieve newly-created resource
|
|
239
|
-
const resourceUri = responseHeaders.get(
|
|
246
|
+
const resourceUri = responseHeaders.get('Location');
|
|
240
247
|
return await (0, $ed447224dd38ce82$export$2e2bcd8739ae039)(config)(resourceId, {
|
|
241
248
|
id: resourceUri
|
|
242
249
|
});
|
|
243
250
|
}
|
|
244
251
|
if (params.id) {
|
|
245
|
-
headers.set(
|
|
252
|
+
headers.set('Content-Type', 'application/sparql-update');
|
|
246
253
|
await httpClient(containerUri, {
|
|
247
|
-
method:
|
|
254
|
+
method: 'PATCH',
|
|
248
255
|
headers: headers,
|
|
249
256
|
body: `
|
|
250
257
|
PREFIX ldp: <http://www.w3.org/ns/ldp#>
|
|
@@ -264,7 +271,7 @@ var $5a7a2f7583392866$export$2e2bcd8739ae039 = $5a7a2f7583392866$var$createMetho
|
|
|
264
271
|
const $9510970b8e7eb9e2$var$deleteMethod = (config)=>async (resourceId, params)=>{
|
|
265
272
|
const { httpClient: httpClient } = config;
|
|
266
273
|
await httpClient(`${params.id}`, {
|
|
267
|
-
method:
|
|
274
|
+
method: 'DELETE'
|
|
268
275
|
});
|
|
269
276
|
if (params.meta?.filesToDelete) await (0, $b17c43e3301545ca$export$2e2bcd8739ae039).delete(params.meta.filesToDelete, config);
|
|
270
277
|
return {
|
|
@@ -281,7 +288,7 @@ const $298dd1ae21173ea0$var$deleteManyMethod = (config)=>async (resourceId, para
|
|
|
281
288
|
const ids = [];
|
|
282
289
|
for (const id of params.ids)try {
|
|
283
290
|
await httpClient(id, {
|
|
284
|
-
method:
|
|
291
|
+
method: 'DELETE'
|
|
285
292
|
});
|
|
286
293
|
ids.push(id);
|
|
287
294
|
} catch (e) {
|
|
@@ -322,24 +329,23 @@ var $cc8adac4b83414eb$export$2e2bcd8739ae039 = $cc8adac4b83414eb$var$arrayOf;
|
|
|
322
329
|
|
|
323
330
|
|
|
324
331
|
const $aba124ea15ea8bc6$var$isValidLDPContainer = (container)=>{
|
|
325
|
-
const resourceType = container.type || container[
|
|
326
|
-
return Array.isArray(resourceType) ? resourceType.includes(
|
|
332
|
+
const resourceType = container.type || container['@type'];
|
|
333
|
+
return Array.isArray(resourceType) ? resourceType.includes('ldp:Container') : resourceType === 'ldp:Container';
|
|
327
334
|
};
|
|
328
335
|
const $aba124ea15ea8bc6$var$isObject = (val)=>{
|
|
329
|
-
return val != null && typeof val ===
|
|
336
|
+
return val != null && typeof val === 'object' && !Array.isArray(val);
|
|
330
337
|
};
|
|
331
338
|
const $aba124ea15ea8bc6$var$fetchContainers = async (containers, params, { httpClient: httpClient, jsonContext: jsonContext })=>{
|
|
332
|
-
const
|
|
333
|
-
const fetchPromises = containersUri.map((containerUri)=>httpClient(containerUri).then(async ({ json: json })=>{
|
|
339
|
+
const fetchPromises = containers.map((container)=>httpClient(container.uri).then(async ({ json: json })=>{
|
|
334
340
|
const jsonResponse = json;
|
|
335
341
|
// If container's context is different, compact it to have an uniform result
|
|
336
342
|
// TODO deep compare if the context is an object
|
|
337
|
-
if (jsonResponse[
|
|
343
|
+
if (jsonResponse['@context'] !== jsonContext) return (0, $fj9kP$jsonld).compact(jsonResponse, jsonContext);
|
|
338
344
|
return jsonResponse;
|
|
339
345
|
}).then((json)=>{
|
|
340
|
-
if (!$aba124ea15ea8bc6$var$isValidLDPContainer(json)) throw new Error(`${
|
|
341
|
-
return (0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(json[
|
|
342
|
-
|
|
346
|
+
if (!$aba124ea15ea8bc6$var$isValidLDPContainer(json)) throw new Error(`${container.uri} is not a LDP container`);
|
|
347
|
+
return (0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(json['ldp:contains']).map((resource)=>({
|
|
348
|
+
'@context': json['@context'],
|
|
343
349
|
...resource
|
|
344
350
|
}));
|
|
345
351
|
}));
|
|
@@ -347,7 +353,7 @@ const $aba124ea15ea8bc6$var$fetchContainers = async (containers, params, { httpC
|
|
|
347
353
|
const results = await Promise.all(fetchPromises);
|
|
348
354
|
let resources = results.flat();
|
|
349
355
|
resources = resources.map((resource)=>{
|
|
350
|
-
resource.id = resource.id || resource[
|
|
356
|
+
resource.id = resource.id || resource['@id'];
|
|
351
357
|
return resource;
|
|
352
358
|
});
|
|
353
359
|
// Apply filter to results
|
|
@@ -361,20 +367,20 @@ const $aba124ea15ea8bc6$var$fetchContainers = async (containers, params, { httpC
|
|
|
361
367
|
if (filters._predicates && Array.isArray(filters._predicates)) {
|
|
362
368
|
const predicates = filters._predicates;
|
|
363
369
|
const mandatoryAttributes = [
|
|
364
|
-
|
|
370
|
+
'id'
|
|
365
371
|
];
|
|
366
372
|
resources = resources.map((resource)=>{
|
|
367
373
|
return Object.keys(resource).filter((key)=>predicates.includes(key) || mandatoryAttributes.includes(key)).reduce((filteredResource, key)=>{
|
|
368
374
|
filteredResource[key] = resource[key];
|
|
369
375
|
return filteredResource;
|
|
370
376
|
}, {
|
|
371
|
-
|
|
377
|
+
'@context': []
|
|
372
378
|
});
|
|
373
379
|
});
|
|
374
380
|
}
|
|
375
381
|
if (Object.keys(filters).filter((f)=>![
|
|
376
|
-
|
|
377
|
-
|
|
382
|
+
'_predicates',
|
|
383
|
+
'_servers'
|
|
378
384
|
].includes(f)).length > 0) resources = resources.filter((resource)=>{
|
|
379
385
|
// Full text filtering
|
|
380
386
|
if (filters.q) return Object.values(resource).some((attributeValue)=>{
|
|
@@ -383,7 +389,7 @@ const $aba124ea15ea8bc6$var$fetchContainers = async (containers, params, { httpC
|
|
|
383
389
|
attributeValue
|
|
384
390
|
];
|
|
385
391
|
return arrayValues.some((value)=>{
|
|
386
|
-
if (typeof value ===
|
|
392
|
+
if (typeof value === 'string') return value.toLowerCase().normalize('NFD').includes(filters.q.toLowerCase().normalize('NFD'));
|
|
387
393
|
return false;
|
|
388
394
|
});
|
|
389
395
|
}
|
|
@@ -391,27 +397,24 @@ const $aba124ea15ea8bc6$var$fetchContainers = async (containers, params, { httpC
|
|
|
391
397
|
});
|
|
392
398
|
// Attribute filtering
|
|
393
399
|
const attributesFilters = Object.keys(filters).filter((f)=>![
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
400
|
+
'_predicates',
|
|
401
|
+
'_servers',
|
|
402
|
+
'q'
|
|
397
403
|
].includes(f));
|
|
398
404
|
return attributesFilters.every((attribute)=>{
|
|
399
405
|
if (resource[attribute]) {
|
|
400
406
|
const arrayValues = Array.isArray(resource[attribute]) ? resource[attribute] : [
|
|
401
407
|
resource[attribute]
|
|
402
408
|
];
|
|
403
|
-
return arrayValues.some((value)=>typeof value ===
|
|
409
|
+
return arrayValues.some((value)=>typeof value === 'string' && value.includes(filters[attribute]));
|
|
404
410
|
}
|
|
405
411
|
return false;
|
|
406
412
|
});
|
|
407
413
|
});
|
|
408
414
|
// Sorting
|
|
409
415
|
if (params.sort) resources = resources.sort((a, b)=>{
|
|
410
|
-
if (a[params.sort.field]
|
|
411
|
-
|
|
412
|
-
return b[params.sort.field].localeCompare(a[params.sort.field]);
|
|
413
|
-
}
|
|
414
|
-
return true;
|
|
416
|
+
if (params.sort.order === 'ASC') return (a[params.sort.field] ?? '').localeCompare(b[params.sort.field] ?? '');
|
|
417
|
+
return (b[params.sort.field] ?? '').localeCompare(a[params.sort.field] ?? '');
|
|
415
418
|
});
|
|
416
419
|
// Pagination
|
|
417
420
|
const total = resources.length;
|
|
@@ -430,7 +433,7 @@ const $3007d5479dd82d51$var$getEmbedFrame = (blankNodes)=>{
|
|
|
430
433
|
let predicates;
|
|
431
434
|
if (blankNodes) {
|
|
432
435
|
for (const blankNode of blankNodes){
|
|
433
|
-
if (blankNode.includes(
|
|
436
|
+
if (blankNode.includes('/')) predicates = blankNode.split('/').reverse();
|
|
434
437
|
else predicates = [
|
|
435
438
|
blankNode
|
|
436
439
|
];
|
|
@@ -438,7 +441,7 @@ const $3007d5479dd82d51$var$getEmbedFrame = (blankNodes)=>{
|
|
|
438
441
|
...embedFrame,
|
|
439
442
|
...predicates.reduce((accumulator, predicate)=>({
|
|
440
443
|
[predicate]: {
|
|
441
|
-
|
|
444
|
+
'@embed': '@last',
|
|
442
445
|
...accumulator
|
|
443
446
|
}
|
|
444
447
|
}), {})
|
|
@@ -452,30 +455,31 @@ var $3007d5479dd82d51$export$2e2bcd8739ae039 = $3007d5479dd82d51$var$getEmbedFra
|
|
|
452
455
|
|
|
453
456
|
|
|
454
457
|
|
|
455
|
-
const $
|
|
456
|
-
if (item.startsWith(
|
|
458
|
+
const $4872a1c30c1fc60e$var$getUriFromPrefix = (item, ontologies)=>{
|
|
459
|
+
if (item.startsWith('http://') || item.startsWith('https://')) // Already resolved, return the URI
|
|
457
460
|
return item;
|
|
458
|
-
if (item ===
|
|
459
|
-
return
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
461
|
+
else if (item === 'a') // Special case
|
|
462
|
+
return 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';
|
|
463
|
+
else {
|
|
464
|
+
const [prefix, value] = item.split(':');
|
|
465
|
+
if (value) {
|
|
466
|
+
if (ontologies[prefix]) return ontologies[prefix] + value;
|
|
467
|
+
else throw new Error(`No ontology found with prefix ${prefix}`);
|
|
468
|
+
} else throw new Error(`The value "${item}" is not correct. It must include a prefix or be a full URI.`);
|
|
469
|
+
}
|
|
466
470
|
};
|
|
467
|
-
var $
|
|
471
|
+
var $4872a1c30c1fc60e$export$2e2bcd8739ae039 = $4872a1c30c1fc60e$var$getUriFromPrefix;
|
|
468
472
|
|
|
469
473
|
|
|
470
474
|
const $47d734d7812e6861$var$defaultToArray = (value)=>!value ? [] : Array.isArray(value) ? value : [
|
|
471
475
|
value
|
|
472
476
|
];
|
|
473
477
|
// We need to always include the type or React-Admin will not work properly
|
|
474
|
-
const $47d734d7812e6861$var$typeQuery = (0, $fj9kP$triple)((0, $fj9kP$variable)(
|
|
478
|
+
const $47d734d7812e6861$var$typeQuery = (0, $fj9kP$triple)((0, $fj9kP$variable)('s1'), (0, $fj9kP$namedNode)('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), (0, $fj9kP$variable)('type'));
|
|
475
479
|
const $47d734d7812e6861$var$buildBaseQuery = (predicates, ontologies)=>{
|
|
476
480
|
let baseTriples;
|
|
477
481
|
if (predicates) {
|
|
478
|
-
baseTriples = $47d734d7812e6861$var$defaultToArray(predicates).map((predicate, i)=>(0, $fj9kP$triple)((0, $fj9kP$variable)(
|
|
482
|
+
baseTriples = $47d734d7812e6861$var$defaultToArray(predicates).map((predicate, i)=>(0, $fj9kP$triple)((0, $fj9kP$variable)('s1'), (0, $fj9kP$namedNode)((0, $4872a1c30c1fc60e$export$2e2bcd8739ae039)(predicate, ontologies)), (0, $fj9kP$variable)(`o${i + 1}`)));
|
|
479
483
|
return {
|
|
480
484
|
construct: [
|
|
481
485
|
$47d734d7812e6861$var$typeQuery,
|
|
@@ -484,7 +488,7 @@ const $47d734d7812e6861$var$buildBaseQuery = (predicates, ontologies)=>{
|
|
|
484
488
|
where: [
|
|
485
489
|
$47d734d7812e6861$var$typeQuery,
|
|
486
490
|
...baseTriples.map((triple)=>({
|
|
487
|
-
type:
|
|
491
|
+
type: 'optional',
|
|
488
492
|
patterns: [
|
|
489
493
|
triple
|
|
490
494
|
]
|
|
@@ -493,7 +497,7 @@ const $47d734d7812e6861$var$buildBaseQuery = (predicates, ontologies)=>{
|
|
|
493
497
|
};
|
|
494
498
|
}
|
|
495
499
|
baseTriples = [
|
|
496
|
-
(0, $fj9kP$triple)((0, $fj9kP$variable)(
|
|
500
|
+
(0, $fj9kP$triple)((0, $fj9kP$variable)('s1'), (0, $fj9kP$variable)('p1'), (0, $fj9kP$variable)('o1'))
|
|
497
501
|
];
|
|
498
502
|
return {
|
|
499
503
|
construct: baseTriples,
|
|
@@ -510,22 +514,22 @@ var $47d734d7812e6861$export$2e2bcd8739ae039 = $47d734d7812e6861$var$buildBaseQu
|
|
|
510
514
|
const $865f630cc944e818$var$extractNodes = (blankNodes)=>{
|
|
511
515
|
const nodes = [];
|
|
512
516
|
if (blankNodes) {
|
|
513
|
-
for (const predicate of blankNodes)if (predicate.includes(
|
|
514
|
-
const nodeNames = predicate.split(
|
|
515
|
-
for(let i = 1; i <= nodeNames.length; i++)nodes.push(nodeNames.slice(0, i).join(
|
|
517
|
+
for (const predicate of blankNodes)if (predicate.includes('/')) {
|
|
518
|
+
const nodeNames = predicate.split('/');
|
|
519
|
+
for(let i = 1; i <= nodeNames.length; i++)nodes.push(nodeNames.slice(0, i).join('/'));
|
|
516
520
|
} else nodes.push(predicate);
|
|
517
521
|
}
|
|
518
522
|
return nodes;
|
|
519
523
|
};
|
|
520
524
|
const $865f630cc944e818$var$generateSparqlVarName = (node)=>(0, $fj9kP$cryptojsmd5)(node);
|
|
521
|
-
const $865f630cc944e818$var$getParentNode = (node)=>node.includes(
|
|
522
|
-
const $865f630cc944e818$var$getPredicate = (node)=>node.includes(
|
|
525
|
+
const $865f630cc944e818$var$getParentNode = (node)=>node.includes('/') && node.split('/')[0];
|
|
526
|
+
const $865f630cc944e818$var$getPredicate = (node)=>node.includes('/') ? node.split('/')[1] : node;
|
|
523
527
|
const $865f630cc944e818$var$buildUnionQuery = (queries)=>queries.map((q)=>{
|
|
524
528
|
let triples = q.query;
|
|
525
529
|
const firstTriple = queries.find((q2)=>q.parentNode === q2.node);
|
|
526
530
|
if (firstTriple !== undefined) triples = triples.concat(firstTriple.query[0]);
|
|
527
531
|
return {
|
|
528
|
-
type:
|
|
532
|
+
type: 'bgp',
|
|
529
533
|
triples: triples
|
|
530
534
|
};
|
|
531
535
|
});
|
|
@@ -537,22 +541,22 @@ const $865f630cc944e818$var$buildBlankNodesQuery = (blankNodes, baseQuery, ontol
|
|
|
537
541
|
const parentNode = $865f630cc944e818$var$getParentNode(node);
|
|
538
542
|
const predicate = $865f630cc944e818$var$getPredicate(node);
|
|
539
543
|
const varName = $865f630cc944e818$var$generateSparqlVarName(node);
|
|
540
|
-
const parentVarName = parentNode ? $865f630cc944e818$var$generateSparqlVarName(parentNode) :
|
|
544
|
+
const parentVarName = parentNode ? $865f630cc944e818$var$generateSparqlVarName(parentNode) : '1';
|
|
541
545
|
const query = [
|
|
542
|
-
(0, $fj9kP$triple)((0, $fj9kP$variable)(`s${parentVarName}`), (0, $fj9kP$namedNode)((0, $
|
|
546
|
+
(0, $fj9kP$triple)((0, $fj9kP$variable)(`s${parentVarName}`), (0, $fj9kP$namedNode)((0, $4872a1c30c1fc60e$export$2e2bcd8739ae039)(predicate, ontologies)), (0, $fj9kP$variable)(`s${varName}`)),
|
|
543
547
|
(0, $fj9kP$triple)((0, $fj9kP$variable)(`s${varName}`), (0, $fj9kP$variable)(`p${varName}`), (0, $fj9kP$variable)(`o${varName}`))
|
|
544
548
|
];
|
|
545
549
|
queries.push({
|
|
546
550
|
node: node,
|
|
547
551
|
parentNode: parentNode,
|
|
548
552
|
query: query,
|
|
549
|
-
filter:
|
|
553
|
+
filter: '' // `FILTER(isBLANK(?s${varName})) .`
|
|
550
554
|
});
|
|
551
555
|
}
|
|
552
556
|
return {
|
|
553
557
|
construct: queries.length > 0 ? queries.map((q)=>q.query).reduce((pre, cur)=>pre.concat(cur)) : null,
|
|
554
558
|
where: {
|
|
555
|
-
type:
|
|
559
|
+
type: 'union',
|
|
556
560
|
patterns: [
|
|
557
561
|
baseQuery.where,
|
|
558
562
|
...$865f630cc944e818$var$buildUnionQuery(queries)
|
|
@@ -561,8 +565,8 @@ const $865f630cc944e818$var$buildBlankNodesQuery = (blankNodes, baseQuery, ontol
|
|
|
561
565
|
};
|
|
562
566
|
}
|
|
563
567
|
return {
|
|
564
|
-
construct:
|
|
565
|
-
where:
|
|
568
|
+
construct: '',
|
|
569
|
+
where: ''
|
|
566
570
|
};
|
|
567
571
|
};
|
|
568
572
|
var $865f630cc944e818$export$2e2bcd8739ae039 = $865f630cc944e818$var$buildBlankNodesQuery;
|
|
@@ -584,10 +588,10 @@ const $efbe3fa6f1479c06$var$buildAutoDetectBlankNodesQuery = (depth, baseQuery)=
|
|
|
584
588
|
whereQueries.push([
|
|
585
589
|
...whereQueries[whereQueries.length - 1],
|
|
586
590
|
{
|
|
587
|
-
type:
|
|
591
|
+
type: 'filter',
|
|
588
592
|
expression: {
|
|
589
|
-
type:
|
|
590
|
-
operator:
|
|
593
|
+
type: 'operation',
|
|
594
|
+
operator: 'isblank',
|
|
591
595
|
args: [
|
|
592
596
|
(0, $fj9kP$variable)(`o${i}`)
|
|
593
597
|
]
|
|
@@ -597,11 +601,11 @@ const $efbe3fa6f1479c06$var$buildAutoDetectBlankNodesQuery = (depth, baseQuery)=
|
|
|
597
601
|
]);
|
|
598
602
|
}
|
|
599
603
|
where = {
|
|
600
|
-
type:
|
|
604
|
+
type: 'union',
|
|
601
605
|
patterns: whereQueries
|
|
602
606
|
};
|
|
603
607
|
} else if (depth === 0) where = baseQuery.where;
|
|
604
|
-
else throw new Error(
|
|
608
|
+
else throw new Error('The depth of buildAutoDetectBlankNodesQuery should be 0 or more');
|
|
605
609
|
return {
|
|
606
610
|
construct: construct,
|
|
607
611
|
where: where
|
|
@@ -617,14 +621,14 @@ const { literal: $6cde9a8fbbde3ffb$var$literal, namedNode: $6cde9a8fbbde3ffb$var
|
|
|
617
621
|
const $6cde9a8fbbde3ffb$var$generator = new $6cde9a8fbbde3ffb$require$SparqlGenerator({
|
|
618
622
|
});
|
|
619
623
|
const $6cde9a8fbbde3ffb$var$reservedFilterKeys = [
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
624
|
+
'q',
|
|
625
|
+
'sparqlWhere',
|
|
626
|
+
'blankNodes',
|
|
627
|
+
'blankNodesDepth',
|
|
628
|
+
'_servers',
|
|
629
|
+
'_predicates'
|
|
626
630
|
];
|
|
627
|
-
const $6cde9a8fbbde3ffb$var$buildSparqlQuery = ({
|
|
631
|
+
const $6cde9a8fbbde3ffb$var$buildSparqlQuery = ({ containersUris: containersUris, params: params, dataModel: dataModel, ontologies: ontologies })=>{
|
|
628
632
|
const blankNodes = params.filter?.blankNodes || dataModel.list?.blankNodes;
|
|
629
633
|
const predicates = params.filter?._predicates || dataModel.list?.predicates;
|
|
630
634
|
const blankNodesDepth = params.filter?.blankNodesDepth ?? dataModel.list?.blankNodesDepth ?? 2;
|
|
@@ -634,99 +638,97 @@ const $6cde9a8fbbde3ffb$var$buildSparqlQuery = ({ containers: containers, params
|
|
|
634
638
|
};
|
|
635
639
|
const baseQuery = (0, $47d734d7812e6861$export$2e2bcd8739ae039)(predicates, ontologies);
|
|
636
640
|
const sparqlJsParams = {
|
|
637
|
-
queryType:
|
|
641
|
+
queryType: 'CONSTRUCT',
|
|
638
642
|
template: baseQuery.construct,
|
|
639
643
|
where: [],
|
|
640
|
-
type:
|
|
641
|
-
prefixes:
|
|
642
|
-
ontology.prefix,
|
|
643
|
-
ontology.url
|
|
644
|
-
]))
|
|
644
|
+
type: 'query',
|
|
645
|
+
prefixes: ontologies
|
|
645
646
|
};
|
|
646
647
|
const containerWhere = [
|
|
647
648
|
{
|
|
648
|
-
type:
|
|
649
|
-
values:
|
|
650
|
-
|
|
649
|
+
type: 'values',
|
|
650
|
+
values: containersUris.map((containerUri)=>({
|
|
651
|
+
'?containerUri': $6cde9a8fbbde3ffb$var$namedNode(containerUri)
|
|
651
652
|
}))
|
|
652
653
|
},
|
|
653
|
-
$6cde9a8fbbde3ffb$var$triple($6cde9a8fbbde3ffb$var$variable(
|
|
654
|
+
$6cde9a8fbbde3ffb$var$triple($6cde9a8fbbde3ffb$var$variable('containerUri'), $6cde9a8fbbde3ffb$var$namedNode('http://www.w3.org/ns/ldp#contains'), $6cde9a8fbbde3ffb$var$variable('s1')),
|
|
654
655
|
{
|
|
655
|
-
type:
|
|
656
|
+
type: 'filter',
|
|
656
657
|
expression: {
|
|
657
|
-
type:
|
|
658
|
-
operator:
|
|
658
|
+
type: 'operation',
|
|
659
|
+
operator: 'isiri',
|
|
659
660
|
args: [
|
|
660
|
-
$6cde9a8fbbde3ffb$var$variable(
|
|
661
|
+
$6cde9a8fbbde3ffb$var$variable('s1')
|
|
661
662
|
]
|
|
662
663
|
}
|
|
663
664
|
}
|
|
664
665
|
];
|
|
665
666
|
let resourceWhere = [];
|
|
666
667
|
if (filter && Object.keys(filter).length > 0) {
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
"
|
|
673
|
-
"
|
|
674
|
-
"
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
"object": {"termType": "Literal", "value": "My Organization"}
|
|
678
|
-
}]
|
|
679
|
-
}
|
|
668
|
+
/*
|
|
669
|
+
Example of usage :
|
|
670
|
+
{
|
|
671
|
+
"sparqlWhere": {
|
|
672
|
+
"type": "bgp",
|
|
673
|
+
"triples": [{
|
|
674
|
+
"subject": {"termType": "Variable", "value": "s1"},
|
|
675
|
+
"predicate": {"termType": "NameNode", "value": "http://virtual-assembly.org/ontologies/pair#label"},
|
|
676
|
+
"object": {"termType": "Literal", "value": "My Organization"}
|
|
677
|
+
}]
|
|
680
678
|
}
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
679
|
+
}
|
|
680
|
+
*/ if (filter.sparqlWhere) {
|
|
681
|
+
// When the SPARQL request comes from the browser's URL, it is a JSON string that must be parsed
|
|
682
|
+
const sparqlWhere = filter.sparqlWhere && (typeof filter.sparqlWhere === 'string' || filter.sparqlWhere instanceof String) ? JSON.parse(decodeURIComponent(filter.sparqlWhere)) : filter.sparqlWhere;
|
|
683
|
+
if (Object.keys(sparqlWhere).length > 0) [].concat(sparqlWhere).forEach((sw)=>{
|
|
684
|
+
resourceWhere.push(sw);
|
|
685
|
+
});
|
|
686
|
+
}
|
|
687
|
+
if (filter.q && filter.q.length > 0) resourceWhere.push({
|
|
688
|
+
type: 'group',
|
|
687
689
|
patterns: [
|
|
688
690
|
{
|
|
689
|
-
queryType:
|
|
691
|
+
queryType: 'SELECT',
|
|
690
692
|
variables: [
|
|
691
|
-
$6cde9a8fbbde3ffb$var$variable(
|
|
693
|
+
$6cde9a8fbbde3ffb$var$variable('s1')
|
|
692
694
|
],
|
|
693
695
|
where: [
|
|
694
|
-
$6cde9a8fbbde3ffb$var$triple($6cde9a8fbbde3ffb$var$variable(
|
|
696
|
+
$6cde9a8fbbde3ffb$var$triple($6cde9a8fbbde3ffb$var$variable('s1'), $6cde9a8fbbde3ffb$var$variable('p1'), $6cde9a8fbbde3ffb$var$variable('o1')),
|
|
695
697
|
{
|
|
696
|
-
type:
|
|
698
|
+
type: 'filter',
|
|
697
699
|
expression: {
|
|
698
|
-
type:
|
|
699
|
-
operator:
|
|
700
|
+
type: 'operation',
|
|
701
|
+
operator: 'isliteral',
|
|
700
702
|
args: [
|
|
701
|
-
$6cde9a8fbbde3ffb$var$variable(
|
|
703
|
+
$6cde9a8fbbde3ffb$var$variable('o1')
|
|
702
704
|
]
|
|
703
705
|
}
|
|
704
706
|
},
|
|
705
707
|
{
|
|
706
|
-
type:
|
|
708
|
+
type: 'filter',
|
|
707
709
|
expression: {
|
|
708
|
-
type:
|
|
709
|
-
operator:
|
|
710
|
+
type: 'operation',
|
|
711
|
+
operator: 'regex',
|
|
710
712
|
args: [
|
|
711
713
|
{
|
|
712
|
-
type:
|
|
713
|
-
operator:
|
|
714
|
+
type: 'operation',
|
|
715
|
+
operator: 'lcase',
|
|
714
716
|
args: [
|
|
715
717
|
{
|
|
716
|
-
type:
|
|
717
|
-
operator:
|
|
718
|
+
type: 'operation',
|
|
719
|
+
operator: 'str',
|
|
718
720
|
args: [
|
|
719
|
-
$6cde9a8fbbde3ffb$var$variable(
|
|
721
|
+
$6cde9a8fbbde3ffb$var$variable('o1')
|
|
720
722
|
]
|
|
721
723
|
}
|
|
722
724
|
]
|
|
723
725
|
},
|
|
724
|
-
$6cde9a8fbbde3ffb$var$literal(filter.q.toLowerCase(),
|
|
726
|
+
$6cde9a8fbbde3ffb$var$literal(filter.q.toLowerCase(), '', $6cde9a8fbbde3ffb$var$namedNode('http://www.w3.org/2001/XMLSchema#string'))
|
|
725
727
|
]
|
|
726
728
|
}
|
|
727
729
|
}
|
|
728
730
|
],
|
|
729
|
-
type:
|
|
731
|
+
type: 'query'
|
|
730
732
|
}
|
|
731
733
|
]
|
|
732
734
|
});
|
|
@@ -734,7 +736,7 @@ const $6cde9a8fbbde3ffb$var$buildSparqlQuery = ({ containers: containers, params
|
|
|
734
736
|
// SPARQL keyword a = filter based on the class of a resource (example => 'a': 'pair:OrganizationType')
|
|
735
737
|
// Other filters are based on a value (example => 'petr:hasAudience': 'http://localhost:3000/audiences/tout-public')
|
|
736
738
|
Object.entries(filter).forEach(([predicate, object])=>{
|
|
737
|
-
if (!$6cde9a8fbbde3ffb$var$reservedFilterKeys.includes(predicate)) resourceWhere.unshift($6cde9a8fbbde3ffb$var$triple($6cde9a8fbbde3ffb$var$variable(
|
|
739
|
+
if (!$6cde9a8fbbde3ffb$var$reservedFilterKeys.includes(predicate)) resourceWhere.unshift($6cde9a8fbbde3ffb$var$triple($6cde9a8fbbde3ffb$var$variable('s1'), $6cde9a8fbbde3ffb$var$namedNode((0, $4872a1c30c1fc60e$export$2e2bcd8739ae039)(predicate, ontologies)), $6cde9a8fbbde3ffb$var$namedNode((0, $4872a1c30c1fc60e$export$2e2bcd8739ae039)(object, ontologies))));
|
|
738
740
|
});
|
|
739
741
|
}
|
|
740
742
|
// Blank nodes
|
|
@@ -743,27 +745,7 @@ const $6cde9a8fbbde3ffb$var$buildSparqlQuery = ({ containers: containers, params
|
|
|
743
745
|
resourceWhere = resourceWhere.concat(blankNodesQuery.where);
|
|
744
746
|
sparqlJsParams.template = sparqlJsParams.template.concat(blankNodesQuery.construct);
|
|
745
747
|
} else resourceWhere.push(baseQuery.where);
|
|
746
|
-
sparqlJsParams.where.push(
|
|
747
|
-
type: "union",
|
|
748
|
-
patterns: [
|
|
749
|
-
containerWhere,
|
|
750
|
-
{
|
|
751
|
-
type: "graph",
|
|
752
|
-
name: $6cde9a8fbbde3ffb$var$namedNode("http://semapps.org/mirror"),
|
|
753
|
-
patterns: containerWhere
|
|
754
|
-
}
|
|
755
|
-
]
|
|
756
|
-
}, {
|
|
757
|
-
type: "union",
|
|
758
|
-
patterns: [
|
|
759
|
-
resourceWhere,
|
|
760
|
-
{
|
|
761
|
-
type: "graph",
|
|
762
|
-
name: $6cde9a8fbbde3ffb$var$namedNode("http://semapps.org/mirror"),
|
|
763
|
-
patterns: resourceWhere
|
|
764
|
-
}
|
|
765
|
-
]
|
|
766
|
-
});
|
|
748
|
+
sparqlJsParams.where.push(containerWhere, resourceWhere);
|
|
767
749
|
return $6cde9a8fbbde3ffb$var$generator.stringify(sparqlJsParams);
|
|
768
750
|
};
|
|
769
751
|
var $6cde9a8fbbde3ffb$export$2e2bcd8739ae039 = $6cde9a8fbbde3ffb$var$buildSparqlQuery;
|
|
@@ -771,10 +753,9 @@ var $6cde9a8fbbde3ffb$export$2e2bcd8739ae039 = $6cde9a8fbbde3ffb$var$buildSparql
|
|
|
771
753
|
|
|
772
754
|
const $05a1b4063d50f1b7$var$compare = (a, b)=>{
|
|
773
755
|
switch(typeof a){
|
|
774
|
-
case
|
|
756
|
+
case 'string':
|
|
775
757
|
return a.localeCompare(b);
|
|
776
|
-
case
|
|
777
|
-
case "bigint":
|
|
758
|
+
case 'number':
|
|
778
759
|
return a - b;
|
|
779
760
|
default:
|
|
780
761
|
return 0;
|
|
@@ -783,48 +764,50 @@ const $05a1b4063d50f1b7$var$compare = (a, b)=>{
|
|
|
783
764
|
const $05a1b4063d50f1b7$var$fetchSparqlEndpoints = async (containers, resourceId, params, config)=>{
|
|
784
765
|
const { dataServers: dataServers, resources: resources, httpClient: httpClient, jsonContext: jsonContext, ontologies: ontologies } = config;
|
|
785
766
|
const dataModel = resources[resourceId];
|
|
786
|
-
const
|
|
767
|
+
const serversToQuery = containers.reduce((acc, cur)=>{
|
|
768
|
+
if (!acc.includes(cur.server)) acc.push(cur.server);
|
|
769
|
+
return acc;
|
|
770
|
+
}, []);
|
|
771
|
+
const sparqlQueryPromises = serversToQuery.map((serverKey)=>new Promise((resolve, reject)=>{
|
|
787
772
|
const blankNodes = params.filter?.blankNodes || dataModel.list?.blankNodes;
|
|
788
|
-
// When the SPARQL request comes from the browser's URL, it comes as JSON string which must must be parsed
|
|
789
|
-
if (params.filter?.sparqlWhere && (typeof params.filter.sparqlWhere === "string" || params.filter.sparqlWhere instanceof String)) params.filter.sparqlWhere = JSON.parse(decodeURIComponent(params.filter.sparqlWhere));
|
|
790
773
|
const sparqlQuery = (0, $6cde9a8fbbde3ffb$export$2e2bcd8739ae039)({
|
|
791
|
-
|
|
774
|
+
containersUris: containers.filter((c)=>c.server === serverKey).map((c)=>c.uri),
|
|
792
775
|
params: params,
|
|
793
776
|
dataModel: dataModel,
|
|
794
777
|
ontologies: ontologies
|
|
795
778
|
});
|
|
796
779
|
httpClient(dataServers[serverKey].sparqlEndpoint, {
|
|
797
|
-
method:
|
|
780
|
+
method: 'POST',
|
|
798
781
|
body: sparqlQuery
|
|
799
782
|
}).then(({ json: json })=>{
|
|
800
783
|
// If we declared the blank nodes to dereference, embed only those blank nodes
|
|
801
784
|
// This solve problems which can occur when same-type resources are embedded in other resources
|
|
802
785
|
// To increase performances, you can set explicitEmbedOnFraming to false (make sure the result is still OK)
|
|
803
786
|
const frame = blankNodes && dataModel.list?.explicitEmbedOnFraming !== false ? {
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
787
|
+
'@context': jsonContext,
|
|
788
|
+
'@type': dataModel.types,
|
|
789
|
+
'@embed': '@never',
|
|
807
790
|
...(0, $3007d5479dd82d51$export$2e2bcd8739ae039)(blankNodes)
|
|
808
791
|
} : {
|
|
809
|
-
|
|
810
|
-
|
|
792
|
+
'@context': jsonContext,
|
|
793
|
+
'@type': dataModel.types
|
|
811
794
|
};
|
|
812
795
|
// omitGraph option force results to be in a @graph, even if we have a single result
|
|
813
796
|
return (0, $fj9kP$jsonld).frame(json, frame, {
|
|
814
797
|
omitGraph: false
|
|
815
798
|
});
|
|
816
799
|
}).then((compactJson)=>{
|
|
817
|
-
if (compactJson[
|
|
818
|
-
const {
|
|
800
|
+
if (compactJson['@id']) {
|
|
801
|
+
const { '@context': context, ...rest } = compactJson;
|
|
819
802
|
compactJson = {
|
|
820
|
-
|
|
821
|
-
|
|
803
|
+
'@context': context,
|
|
804
|
+
'@graph': [
|
|
822
805
|
rest
|
|
823
806
|
]
|
|
824
807
|
};
|
|
825
808
|
}
|
|
826
|
-
resolve(compactJson[
|
|
827
|
-
|
|
809
|
+
resolve(compactJson['@graph']?.map((resource)=>({
|
|
810
|
+
'@context': compactJson['@context'],
|
|
828
811
|
...resource
|
|
829
812
|
})) || []);
|
|
830
813
|
}).catch((e)=>reject(e));
|
|
@@ -839,13 +822,13 @@ const $05a1b4063d50f1b7$var$fetchSparqlEndpoints = async (containers, resourceId
|
|
|
839
822
|
results = [].concat(...results);
|
|
840
823
|
// Add id in addition to @id, as this is what React-Admin expects
|
|
841
824
|
let returnData = results.map((item)=>{
|
|
842
|
-
item.id = item.id || item[
|
|
825
|
+
item.id = item.id || item['@id'];
|
|
843
826
|
return item;
|
|
844
827
|
});
|
|
845
828
|
// TODO sort and paginate the results in the SPARQL query to improve performances
|
|
846
829
|
if (params.sort) returnData = returnData.sort((a, b)=>{
|
|
847
830
|
if (a[params.sort.field] !== undefined && b[params.sort.field] !== undefined) {
|
|
848
|
-
if (params.sort.order ===
|
|
831
|
+
if (params.sort.order === 'ASC') return $05a1b4063d50f1b7$var$compare(a[params.sort.field], b[params.sort.field]);
|
|
849
832
|
return $05a1b4063d50f1b7$var$compare(b[params.sort.field], a[params.sort.field]);
|
|
850
833
|
}
|
|
851
834
|
return 0;
|
|
@@ -860,43 +843,46 @@ var $05a1b4063d50f1b7$export$2e2bcd8739ae039 = $05a1b4063d50f1b7$var$fetchSparql
|
|
|
860
843
|
|
|
861
844
|
|
|
862
845
|
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
846
|
+
|
|
847
|
+
/**
|
|
848
|
+
* Return all containers matching the given shape tree
|
|
849
|
+
*/ const $3bcb3ff5a72a9185$var$findContainersWithShapeTree = (shapeTreeUri, serverKeys, dataServers)=>{
|
|
850
|
+
const matchingContainers = [];
|
|
851
|
+
const parsedServerKeys = (0, $99cc2e4a2a3c100b$export$2e2bcd8739ae039)(serverKeys || '@all', dataServers);
|
|
852
|
+
Object.keys(dataServers).forEach((dataServerKey)=>{
|
|
853
|
+
if (parsedServerKeys.includes(dataServerKey)) dataServers[dataServerKey].containers?.forEach((container)=>{
|
|
854
|
+
if (container.shapeTreeUri === shapeTreeUri) matchingContainers.push(container);
|
|
855
|
+
});
|
|
872
856
|
});
|
|
873
|
-
return
|
|
857
|
+
return matchingContainers;
|
|
874
858
|
};
|
|
875
|
-
var $
|
|
859
|
+
var $3bcb3ff5a72a9185$export$2e2bcd8739ae039 = $3bcb3ff5a72a9185$var$findContainersWithShapeTree;
|
|
860
|
+
|
|
876
861
|
|
|
877
862
|
|
|
878
|
-
const $
|
|
863
|
+
const $1caf729dc3ce856d$var$getListMethod = (config)=>async (resourceId, params)=>{
|
|
879
864
|
const { dataServers: dataServers, resources: resources } = config;
|
|
880
865
|
const dataModel = resources[resourceId];
|
|
881
866
|
if (!dataModel) throw new Error(`Resource ${resourceId} is not mapped in resources file`);
|
|
882
|
-
let containers;
|
|
867
|
+
let containers = [];
|
|
883
868
|
if (!params.filter?._servers && dataModel.list?.containers) {
|
|
884
869
|
if (Array.isArray(dataModel.list?.containers)) throw new Error(`The list.containers property of ${resourceId} dataModel must be of type object ({ serverKey: [containerUri] })`);
|
|
885
870
|
// If containers are set explicitly, use them
|
|
886
|
-
containers = (0, $
|
|
887
|
-
} else
|
|
888
|
-
|
|
871
|
+
containers = (0, $7c772a9c0c25a69d$export$2e2bcd8739ae039)(dataModel.list.containers, dataServers);
|
|
872
|
+
} else if (dataModel.shapeTreeUri) containers = (0, $3bcb3ff5a72a9185$export$2e2bcd8739ae039)(dataModel.shapeTreeUri, params?.filter?._servers || dataModel.list?.servers, dataServers);
|
|
873
|
+
else // Otherwise find the container URIs on the given servers (either in the filter or the data model)
|
|
874
|
+
containers = (0, $15b841e67a1ba752$export$2e2bcd8739ae039)((0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(dataModel.types), params?.filter?._servers || dataModel.list?.servers, dataServers);
|
|
889
875
|
if (dataModel.list?.fetchContainer) return (0, $aba124ea15ea8bc6$export$2e2bcd8739ae039)(containers, params, config);
|
|
890
|
-
return (0, $05a1b4063d50f1b7$export$2e2bcd8739ae039)(containers, resourceId, params, config);
|
|
876
|
+
else return (0, $05a1b4063d50f1b7$export$2e2bcd8739ae039)(containers, resourceId, params, config);
|
|
891
877
|
};
|
|
892
|
-
var $
|
|
878
|
+
var $1caf729dc3ce856d$export$2e2bcd8739ae039 = $1caf729dc3ce856d$var$getListMethod;
|
|
893
879
|
|
|
894
880
|
|
|
895
881
|
|
|
896
882
|
const $f1e05270f9a21255$var$getManyMethod = (config)=>async (resourceId, params)=>{
|
|
897
883
|
const { returnFailedResources: returnFailedResources } = config;
|
|
898
884
|
let returnData = await Promise.all(params.ids.map((id)=>(0, $ed447224dd38ce82$export$2e2bcd8739ae039)(config)(resourceId, {
|
|
899
|
-
id: typeof id ===
|
|
885
|
+
id: typeof id === 'object' ? id['@id'] : id
|
|
900
886
|
}).then(({ data: data })=>data).catch(()=>{
|
|
901
887
|
// Catch if one resource fails to load
|
|
902
888
|
// Otherwise no references will be show if only one is missing
|
|
@@ -923,7 +909,7 @@ const $b5979a9678f57756$var$getManyReferenceMethod = (config)=>async (resourceId
|
|
|
923
909
|
[params.target]: params.id
|
|
924
910
|
};
|
|
925
911
|
delete params.target;
|
|
926
|
-
return await (0, $
|
|
912
|
+
return await (0, $1caf729dc3ce856d$export$2e2bcd8739ae039)(config)(resourceId, params);
|
|
927
913
|
};
|
|
928
914
|
var $b5979a9678f57756$export$2e2bcd8739ae039 = $b5979a9678f57756$var$getManyReferenceMethod;
|
|
929
915
|
|
|
@@ -934,32 +920,32 @@ const $cdfdce6efa87baab$var$generator = new (0, $fj9kP$Generator)();
|
|
|
934
920
|
const $cdfdce6efa87baab$var$patchMethod = (config)=>async (resourceId, params)=>{
|
|
935
921
|
const { httpClient: httpClient } = config;
|
|
936
922
|
const sparqlUpdate = {
|
|
937
|
-
type:
|
|
923
|
+
type: 'update',
|
|
938
924
|
prefixes: {},
|
|
939
925
|
updates: []
|
|
940
926
|
};
|
|
941
927
|
if (params.triplesToAdd) sparqlUpdate.updates.push({
|
|
942
|
-
updateType:
|
|
928
|
+
updateType: 'insert',
|
|
943
929
|
insert: [
|
|
944
930
|
{
|
|
945
|
-
type:
|
|
931
|
+
type: 'bgp',
|
|
946
932
|
triples: params.triplesToAdd
|
|
947
933
|
}
|
|
948
934
|
]
|
|
949
935
|
});
|
|
950
936
|
if (params.triplesToRemove) sparqlUpdate.updates.push({
|
|
951
|
-
updateType:
|
|
937
|
+
updateType: 'delete',
|
|
952
938
|
delete: [
|
|
953
939
|
{
|
|
954
|
-
type:
|
|
940
|
+
type: 'bgp',
|
|
955
941
|
triples: params.triplesToRemove
|
|
956
942
|
}
|
|
957
943
|
]
|
|
958
944
|
});
|
|
959
945
|
await httpClient(`${params.id}`, {
|
|
960
|
-
method:
|
|
946
|
+
method: 'PATCH',
|
|
961
947
|
headers: new Headers({
|
|
962
|
-
|
|
948
|
+
'Content-Type': 'application/sparql-update'
|
|
963
949
|
}),
|
|
964
950
|
body: $cdfdce6efa87baab$var$generator.stringify(sparqlUpdate)
|
|
965
951
|
});
|
|
@@ -968,15 +954,28 @@ var $cdfdce6efa87baab$export$2e2bcd8739ae039 = $cdfdce6efa87baab$var$patchMethod
|
|
|
968
954
|
|
|
969
955
|
|
|
970
956
|
|
|
957
|
+
// Return the first server matching with the baseUrl
|
|
958
|
+
const $47e21ee81eed09a6$var$getServerKeyFromUri = (uri, dataServers)=>{
|
|
959
|
+
if (!uri) throw Error(`No URI provided to getServerKeyFromUri`);
|
|
960
|
+
return dataServers && Object.keys(dataServers).find((key)=>{
|
|
961
|
+
if (dataServers[key].pod) // The baseUrl ends with /data so remove this part to match with the webId and webId-related URLs (/inbox, /outbox...)
|
|
962
|
+
return dataServers[key].baseUrl && uri.startsWith(dataServers[key].baseUrl.replace('/data', ''));
|
|
963
|
+
return uri.startsWith(dataServers[key].baseUrl);
|
|
964
|
+
});
|
|
965
|
+
};
|
|
966
|
+
var $47e21ee81eed09a6$export$2e2bcd8739ae039 = $47e21ee81eed09a6$var$getServerKeyFromUri;
|
|
967
|
+
|
|
968
|
+
|
|
971
969
|
const $c5031381f4dfc62d$var$updateMethod = (config)=>async (resourceId, params)=>{
|
|
972
|
-
const { httpClient: httpClient, jsonContext: jsonContext } = config;
|
|
970
|
+
const { httpClient: httpClient, jsonContext: jsonContext, dataServers: dataServers } = config;
|
|
971
|
+
const serverKey = (0, $47e21ee81eed09a6$export$2e2bcd8739ae039)(params.id, dataServers);
|
|
973
972
|
// Upload files, if there are any
|
|
974
|
-
const { updatedRecord: updatedRecord, filesToDelete: filesToDelete } = await (0, $b17c43e3301545ca$export$2e2bcd8739ae039).upload(params.data, config);
|
|
973
|
+
const { updatedRecord: updatedRecord, filesToDelete: filesToDelete } = await (0, $b17c43e3301545ca$export$2e2bcd8739ae039).upload(params.data, config, serverKey);
|
|
975
974
|
params.data = updatedRecord;
|
|
976
975
|
await httpClient(`${params.id}`, {
|
|
977
|
-
method:
|
|
976
|
+
method: 'PUT',
|
|
978
977
|
body: JSON.stringify({
|
|
979
|
-
|
|
978
|
+
'@context': jsonContext,
|
|
980
979
|
...params.data
|
|
981
980
|
})
|
|
982
981
|
});
|
|
@@ -992,152 +991,51 @@ var $c5031381f4dfc62d$export$2e2bcd8739ae039 = $c5031381f4dfc62d$var$updateMetho
|
|
|
992
991
|
|
|
993
992
|
|
|
994
993
|
|
|
995
|
-
const $81a8da127161495a$var$fetchUserConfig = async (config)=>{
|
|
996
|
-
const { dataServers: dataServers, httpClient: httpClient } = config;
|
|
997
|
-
const token = localStorage.getItem("token");
|
|
998
|
-
const podKey = (0, $8326b88c1a913ca9$export$2e2bcd8739ae039)("pod", dataServers);
|
|
999
|
-
const authServerKey = (0, $8326b88c1a913ca9$export$2e2bcd8739ae039)("authServer", dataServers);
|
|
1000
|
-
// If the user is logged in
|
|
1001
|
-
if (token) {
|
|
1002
|
-
const payload = (0, $fj9kP$jwtdecode)(token);
|
|
1003
|
-
const webId = payload.webId || payload.webid; // Currently we must deal with both formats
|
|
1004
|
-
let userData;
|
|
1005
|
-
try {
|
|
1006
|
-
const { json: json } = await httpClient(webId);
|
|
1007
|
-
userData = json;
|
|
1008
|
-
} catch (e) {
|
|
1009
|
-
console.error(e);
|
|
1010
|
-
// If the webId cannot be fetched, assume an invalid token and disconnect the user
|
|
1011
|
-
localStorage.clear();
|
|
1012
|
-
window.location.reload();
|
|
1013
|
-
return;
|
|
1014
|
-
}
|
|
1015
|
-
// If we have a POD server
|
|
1016
|
-
if (podKey) {
|
|
1017
|
-
// Fill the config provided to the data provider
|
|
1018
|
-
// We must modify the config object directly
|
|
1019
|
-
config.dataServers[podKey].name = "My Pod";
|
|
1020
|
-
config.dataServers[podKey].baseUrl = userData["pim:storage"] || (0, $fj9kP$urljoin)(webId, "data");
|
|
1021
|
-
config.dataServers[podKey].sparqlEndpoint = userData.endpoints?.["void:sparqlEndpoint"] || (0, $fj9kP$urljoin)(webId, "sparql");
|
|
1022
|
-
}
|
|
1023
|
-
if (authServerKey) // Fill the config provided to the data provider
|
|
1024
|
-
// We must modify the config object directly
|
|
1025
|
-
config.dataServers[authServerKey].proxyUrl = userData.endpoints?.proxyUrl;
|
|
1026
|
-
} else if (podKey) // If the user is not logged in, ignore the POD server
|
|
1027
|
-
delete config.dataServers[podKey];
|
|
1028
|
-
};
|
|
1029
|
-
var $81a8da127161495a$export$2e2bcd8739ae039 = $81a8da127161495a$var$fetchUserConfig;
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
const $31a4627920feab4a$var$defaultToArray = (value)=>!value ? undefined : Array.isArray(value) ? value : [
|
|
1033
|
-
value
|
|
1034
|
-
];
|
|
1035
|
-
const $31a4627920feab4a$var$fetchVoidEndpoints = async (config)=>{
|
|
1036
|
-
const fetchPromises = Object.entries(config.dataServers).filter(([key, server])=>server.pod !== true && server.void !== false).map(([key, server])=>config.httpClient(new URL("/.well-known/void", server.baseUrl).toString()).then((result)=>({
|
|
1037
|
-
key: key,
|
|
1038
|
-
datasets: result.json["@graph"]
|
|
1039
|
-
})).catch((e)=>{
|
|
1040
|
-
if (e.status === 404 || e.status === 401 || e.status === 500) return {
|
|
1041
|
-
key: key,
|
|
1042
|
-
error: e
|
|
1043
|
-
};
|
|
1044
|
-
throw e;
|
|
1045
|
-
}));
|
|
1046
|
-
let results = [];
|
|
1047
|
-
try {
|
|
1048
|
-
results = await Promise.all(fetchPromises);
|
|
1049
|
-
} catch (e) {
|
|
1050
|
-
// Do not throw error if no endpoint found
|
|
1051
|
-
}
|
|
1052
|
-
for (const result of results){
|
|
1053
|
-
config.dataServers[result.key].containers = config.dataServers[result.key].containers || {};
|
|
1054
|
-
config.dataServers[result.key].blankNodes = config.dataServers[result.key].blankNodes || {};
|
|
1055
|
-
// Ignore unfetchable endpoints
|
|
1056
|
-
if (result.datasets) for (const dataset of result.datasets){
|
|
1057
|
-
const datasetServerKey = Object.keys(config.dataServers).find((key)=>dataset["void:uriSpace"] === config.dataServers[key].baseUrl);
|
|
1058
|
-
// If the dataset is not part of a server mapped in the dataServers, ignore it
|
|
1059
|
-
if (datasetServerKey) {
|
|
1060
|
-
// If this is the local dataset, add the base information
|
|
1061
|
-
if (datasetServerKey === result.key) {
|
|
1062
|
-
config.dataServers[result.key].name = config.dataServers[result.key].name || dataset["dc:title"];
|
|
1063
|
-
config.dataServers[result.key].description = config.dataServers[result.key].description || dataset["dc:description"];
|
|
1064
|
-
config.dataServers[result.key].sparqlEndpoint = config.dataServers[result.key].sparqlEndpoint || dataset["void:sparqlEndpoint"];
|
|
1065
|
-
}
|
|
1066
|
-
config.dataServers[result.key].containers[datasetServerKey] = config.dataServers[result.key].containers[datasetServerKey] || {};
|
|
1067
|
-
for (const partition of $31a4627920feab4a$var$defaultToArray(dataset["void:classPartition"]))for (const type of $31a4627920feab4a$var$defaultToArray(partition["void:class"])){
|
|
1068
|
-
// Set containers by type
|
|
1069
|
-
const path = partition["void:uriSpace"].replace(dataset["void:uriSpace"], "/");
|
|
1070
|
-
if (config.dataServers[result.key].containers[datasetServerKey][type]) config.dataServers[result.key].containers[datasetServerKey][type].push(path);
|
|
1071
|
-
else config.dataServers[result.key].containers[datasetServerKey][type] = [
|
|
1072
|
-
path
|
|
1073
|
-
];
|
|
1074
|
-
}
|
|
1075
|
-
}
|
|
1076
|
-
}
|
|
1077
|
-
}
|
|
1078
|
-
};
|
|
1079
|
-
var $31a4627920feab4a$export$2e2bcd8739ae039 = $31a4627920feab4a$var$fetchVoidEndpoints;
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
// Return the first server matching with the baseUrl
|
|
1085
|
-
const $47e21ee81eed09a6$var$getServerKeyFromUri = (uri, dataServers)=>{
|
|
1086
|
-
if (!uri) throw Error(`No URI provided to getServerKeyFromUri`);
|
|
1087
|
-
return Object.keys(dataServers).find((key)=>{
|
|
1088
|
-
if (dataServers[key].pod) // The baseUrl ends with /data so remove this part to match with the webId and webId-related URLs (/inbox, /outbox...)
|
|
1089
|
-
return dataServers[key].baseUrl && uri.startsWith(dataServers[key].baseUrl.replace("/data", ""));
|
|
1090
|
-
return uri.startsWith(dataServers[key].baseUrl);
|
|
1091
|
-
});
|
|
1092
|
-
};
|
|
1093
|
-
var $47e21ee81eed09a6$export$2e2bcd8739ae039 = $47e21ee81eed09a6$var$getServerKeyFromUri;
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
994
|
/*
|
|
1098
995
|
* HTTP client used by all calls in data provider and auth provider
|
|
1099
996
|
* Do proxy calls if a proxy endpoint is available and the server is different from the auth server
|
|
1100
997
|
*/ const $22b4895a4ca7d626$var$httpClient = (dataServers)=>(url, options = {})=>{
|
|
1101
|
-
|
|
998
|
+
if (!url) throw new Error(`No URL provided on httpClient call`);
|
|
999
|
+
const authServerKey = (0, $8326b88c1a913ca9$export$2e2bcd8739ae039)('authServer', dataServers);
|
|
1102
1000
|
const serverKey = (0, $47e21ee81eed09a6$export$2e2bcd8739ae039)(url, dataServers);
|
|
1103
|
-
const useProxy = serverKey !== authServerKey && dataServers
|
|
1001
|
+
const useProxy = serverKey !== authServerKey && dataServers.user?.proxyUrl && dataServers[serverKey]?.noProxy !== true;
|
|
1104
1002
|
if (!options.headers) options.headers = new Headers();
|
|
1105
1003
|
switch(options.method){
|
|
1106
|
-
case
|
|
1107
|
-
case
|
|
1108
|
-
case
|
|
1109
|
-
if (!options.headers.has(
|
|
1110
|
-
if (!options.headers.has(
|
|
1004
|
+
case 'POST':
|
|
1005
|
+
case 'PATCH':
|
|
1006
|
+
case 'PUT':
|
|
1007
|
+
if (!options.headers.has('Accept')) options.headers.set('Accept', 'application/ld+json');
|
|
1008
|
+
if (!options.headers.has('Content-Type')) options.headers.set('Content-Type', 'application/ld+json');
|
|
1111
1009
|
break;
|
|
1112
|
-
case
|
|
1010
|
+
case 'DELETE':
|
|
1113
1011
|
break;
|
|
1114
|
-
case
|
|
1012
|
+
case 'GET':
|
|
1115
1013
|
default:
|
|
1116
|
-
if (!options.headers.has(
|
|
1014
|
+
if (!options.headers.has('Accept')) options.headers.set('Accept', 'application/ld+json');
|
|
1117
1015
|
break;
|
|
1118
1016
|
}
|
|
1119
1017
|
if (useProxy) {
|
|
1120
1018
|
const formData = new FormData();
|
|
1121
|
-
formData.append(
|
|
1122
|
-
formData.append(
|
|
1123
|
-
formData.append(
|
|
1019
|
+
formData.append('id', url);
|
|
1020
|
+
formData.append('method', options.method || 'GET');
|
|
1021
|
+
formData.append('headers', JSON.stringify(Object.fromEntries(options.headers.entries())));
|
|
1124
1022
|
if (options.body) {
|
|
1125
|
-
if (options.body instanceof File) formData.append(
|
|
1126
|
-
else formData.append(
|
|
1023
|
+
if (options.body instanceof File) formData.append('body', options.body, options.body.name);
|
|
1024
|
+
else formData.append('body', options.body);
|
|
1127
1025
|
}
|
|
1128
1026
|
// Post to proxy endpoint with multipart/form-data format
|
|
1129
|
-
return (0, $fj9kP$fetchUtils).fetchJson(dataServers
|
|
1130
|
-
method:
|
|
1027
|
+
return (0, $fj9kP$fetchUtils).fetchJson(dataServers.user.proxyUrl, {
|
|
1028
|
+
method: 'POST',
|
|
1131
1029
|
headers: new Headers({
|
|
1132
|
-
Authorization: `Bearer ${localStorage.getItem(
|
|
1030
|
+
Authorization: `Bearer ${localStorage.getItem('token')}`
|
|
1133
1031
|
}),
|
|
1134
1032
|
body: formData
|
|
1135
1033
|
});
|
|
1136
1034
|
}
|
|
1137
1035
|
// Add token if the server is the same as the auth server
|
|
1138
1036
|
if (serverKey === authServerKey) {
|
|
1139
|
-
const token = localStorage.getItem(
|
|
1140
|
-
if (token) options.headers.set(
|
|
1037
|
+
const token = localStorage.getItem('token');
|
|
1038
|
+
if (token) options.headers.set('Authorization', `Bearer ${token}`);
|
|
1141
1039
|
}
|
|
1142
1040
|
return (0, $fj9kP$fetchUtils).fetchJson(url, options);
|
|
1143
1041
|
};
|
|
@@ -1145,54 +1043,171 @@ var $22b4895a4ca7d626$export$2e2bcd8739ae039 = $22b4895a4ca7d626$var$httpClient;
|
|
|
1145
1043
|
|
|
1146
1044
|
|
|
1147
1045
|
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
if (
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1046
|
+
|
|
1047
|
+
|
|
1048
|
+
|
|
1049
|
+
|
|
1050
|
+
const $36aa010ec46eaf45$var$isURL = (value)=>(typeof value === 'string' || value instanceof String) && value.startsWith('http');
|
|
1051
|
+
const $36aa010ec46eaf45$var$expandTypes = async (types, context)=>{
|
|
1052
|
+
// If types are already full URIs, return them immediately
|
|
1053
|
+
if (types.every((type)=>$36aa010ec46eaf45$var$isURL(type))) return types;
|
|
1054
|
+
const result = await (0, $fj9kP$jsonld).expand({
|
|
1055
|
+
'@context': context,
|
|
1056
|
+
'@type': types
|
|
1057
|
+
});
|
|
1058
|
+
const expandedTypes = (0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(result[0]['@type']);
|
|
1059
|
+
if (!expandedTypes.every((type)=>$36aa010ec46eaf45$var$isURL(type))) throw new Error(`
|
|
1060
|
+
Could not expand all types (${expandedTypes.join(', ')}).
|
|
1061
|
+
Is an ontology missing or not registered yet on the local context ?
|
|
1062
|
+
`);
|
|
1063
|
+
return expandedTypes;
|
|
1064
|
+
};
|
|
1065
|
+
var $36aa010ec46eaf45$export$2e2bcd8739ae039 = $36aa010ec46eaf45$var$expandTypes;
|
|
1066
|
+
|
|
1067
|
+
|
|
1068
|
+
|
|
1069
|
+
|
|
1070
|
+
const $ab7d38fd091ff1b6$var$getTypesFromShapeTree = async (shapeTreeUri)=>{
|
|
1071
|
+
let { json: shapeTree } = await (0, $fj9kP$fetchUtils).fetchJson(shapeTreeUri, {
|
|
1072
|
+
headers: new Headers({
|
|
1073
|
+
Accept: 'application/ld+json'
|
|
1074
|
+
})
|
|
1075
|
+
});
|
|
1076
|
+
shapeTree = await (0, $fj9kP$jsonld).compact(shapeTree, {
|
|
1077
|
+
st: 'http://www.w3.org/ns/shapetrees#',
|
|
1078
|
+
skos: 'http://www.w3.org/2004/02/skos/core#',
|
|
1079
|
+
expectsType: {
|
|
1080
|
+
'@id': 'st:expectsType',
|
|
1081
|
+
'@type': '@id'
|
|
1082
|
+
},
|
|
1083
|
+
shape: {
|
|
1084
|
+
'@id': 'st:shape',
|
|
1085
|
+
'@type': '@id'
|
|
1086
|
+
},
|
|
1087
|
+
describesInstance: {
|
|
1088
|
+
'@id': 'st:describesInstance',
|
|
1089
|
+
'@type': '@id'
|
|
1090
|
+
},
|
|
1091
|
+
label: {
|
|
1092
|
+
'@id': 'skos:prefLabel',
|
|
1093
|
+
'@container': '@language'
|
|
1094
|
+
}
|
|
1095
|
+
});
|
|
1096
|
+
if (shapeTree.shape) {
|
|
1097
|
+
const { json: shape } = await (0, $fj9kP$fetchUtils).fetchJson(shapeTree.shape, {
|
|
1098
|
+
headers: new Headers({
|
|
1099
|
+
Accept: 'application/ld+json'
|
|
1100
|
+
})
|
|
1101
|
+
});
|
|
1102
|
+
return shape?.[0]?.['http://www.w3.org/ns/shacl#targetClass']?.map((node)=>node?.['@id']) || [];
|
|
1103
|
+
} else return [];
|
|
1104
|
+
};
|
|
1105
|
+
var $ab7d38fd091ff1b6$export$2e2bcd8739ae039 = $ab7d38fd091ff1b6$var$getTypesFromShapeTree;
|
|
1106
|
+
|
|
1107
|
+
|
|
1108
|
+
const $33bf2a661b5c0cbd$var$normalizeConfig = async (config)=>{
|
|
1109
|
+
const newConfig = {
|
|
1160
1110
|
...config
|
|
1161
1111
|
};
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1112
|
+
// Add server and uri key to servers' containers
|
|
1113
|
+
for (const serverKey of Object.keys(newConfig.dataServers))if (newConfig.dataServers[serverKey].containers) newConfig.dataServers[serverKey].containers = await Promise.all(newConfig.dataServers[serverKey].containers?.map(async (container)=>{
|
|
1114
|
+
return {
|
|
1115
|
+
...container,
|
|
1116
|
+
types: container.types && await (0, $36aa010ec46eaf45$export$2e2bcd8739ae039)(container.types, config.jsonContext),
|
|
1117
|
+
server: serverKey,
|
|
1118
|
+
uri: (0, $fj9kP$urljoin)(config.dataServers[serverKey].baseUrl, container.path)
|
|
1119
|
+
};
|
|
1120
|
+
}));
|
|
1121
|
+
// Expand types in data models
|
|
1122
|
+
for (const resourceId of Object.keys(newConfig.resources)){
|
|
1123
|
+
if (!newConfig.resources[resourceId].types && newConfig.resources[resourceId].shapeTreeUri) newConfig.resources[resourceId].types = await (0, $ab7d38fd091ff1b6$export$2e2bcd8739ae039)(newConfig.resources[resourceId].shapeTreeUri);
|
|
1124
|
+
newConfig.resources[resourceId].types = await (0, $36aa010ec46eaf45$export$2e2bcd8739ae039)((0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(newConfig.resources[resourceId].types), config.jsonContext);
|
|
1125
|
+
}
|
|
1126
|
+
return newConfig;
|
|
1127
|
+
};
|
|
1128
|
+
var $33bf2a661b5c0cbd$export$2e2bcd8739ae039 = $33bf2a661b5c0cbd$var$normalizeConfig;
|
|
1129
|
+
|
|
1130
|
+
|
|
1131
|
+
|
|
1132
|
+
|
|
1133
|
+
const $143de1c1f21344e7$var$isURL = (value)=>(typeof value === 'string' || value instanceof String) && value.startsWith('http');
|
|
1134
|
+
const $143de1c1f21344e7$var$getOntologiesFromContextJson = (contextJson)=>{
|
|
1135
|
+
const ontologies = {};
|
|
1136
|
+
for (const [key, value] of Object.entries(contextJson))if ($143de1c1f21344e7$var$isURL(value)) ontologies[key] = value;
|
|
1137
|
+
return ontologies;
|
|
1138
|
+
};
|
|
1139
|
+
const $143de1c1f21344e7$var$getOntologiesFromContextUrl = async (contextUrl)=>{
|
|
1140
|
+
const { json: json } = await (0, $fj9kP$fetchUtils).fetchJson(contextUrl, {
|
|
1141
|
+
headers: new Headers({
|
|
1142
|
+
Accept: 'application/ld+json'
|
|
1143
|
+
})
|
|
1144
|
+
});
|
|
1145
|
+
return $143de1c1f21344e7$var$getOntologiesFromContextJson(json['@context']);
|
|
1146
|
+
};
|
|
1147
|
+
const $143de1c1f21344e7$var$getOntologiesFromContext = async (context)=>{
|
|
1148
|
+
let ontologies = {};
|
|
1149
|
+
if (Array.isArray(context)) for (const contextUrl of context)ontologies = {
|
|
1150
|
+
...ontologies,
|
|
1151
|
+
...await $143de1c1f21344e7$var$getOntologiesFromContextUrl(contextUrl)
|
|
1152
|
+
};
|
|
1153
|
+
else if (typeof context === 'string') ontologies = await $143de1c1f21344e7$var$getOntologiesFromContextUrl(context);
|
|
1154
|
+
else ontologies = $143de1c1f21344e7$var$getOntologiesFromContextJson(context);
|
|
1155
|
+
return ontologies;
|
|
1156
|
+
};
|
|
1157
|
+
var $143de1c1f21344e7$export$2e2bcd8739ae039 = $143de1c1f21344e7$var$getOntologiesFromContext;
|
|
1158
|
+
|
|
1159
|
+
|
|
1160
|
+
/** @type {(originalConfig: Configuration) => SemanticDataProvider} */ const $243bf28fbb1b868f$var$dataProvider = (originalConfig)=>{
|
|
1161
|
+
// Keep in memory for refresh
|
|
1162
|
+
let config = {
|
|
1163
|
+
...originalConfig
|
|
1164
|
+
};
|
|
1165
|
+
const prepareConfig = async ()=>{
|
|
1166
|
+
config.dataServers ??= {};
|
|
1167
|
+
// Configure httpClient with initial data servers, so that plugins may use it
|
|
1168
|
+
config.httpClient = (0, $22b4895a4ca7d626$export$2e2bcd8739ae039)(config.dataServers);
|
|
1169
|
+
for (const plugin of config.plugins)if (plugin.transformConfig) config = await plugin.transformConfig(config);
|
|
1170
|
+
// Configure again httpClient with possibly updated data servers
|
|
1171
|
+
config.httpClient = (0, $22b4895a4ca7d626$export$2e2bcd8739ae039)(config.dataServers);
|
|
1172
|
+
if (!config.ontologies && config.jsonContext) config.ontologies = await (0, $143de1c1f21344e7$export$2e2bcd8739ae039)(config.jsonContext);
|
|
1173
|
+
else if (!config.jsonContext && config.ontologies) config.jsonContext = config.ontologies;
|
|
1174
|
+
else if (!config.jsonContext && !config.ontologies) throw new Error(`Either the JSON context or the ontologies must be set`);
|
|
1175
|
+
if (!config.returnFailedResources) config.returnFailedResources = false;
|
|
1176
|
+
config = await (0, $33bf2a661b5c0cbd$export$2e2bcd8739ae039)(config);
|
|
1177
|
+
console.log('Config after plugins', config);
|
|
1178
|
+
};
|
|
1179
|
+
// Immediately call the preload plugins
|
|
1180
|
+
const prepareConfigPromise = prepareConfig();
|
|
1181
|
+
const waitForPrepareConfig = (method)=>async (...arg)=>{
|
|
1182
|
+
await prepareConfigPromise; // Return immediately if plugins have already been loaded
|
|
1183
|
+
return method(config)(...arg);
|
|
1168
1184
|
};
|
|
1169
1185
|
return {
|
|
1170
|
-
getList:
|
|
1171
|
-
getMany:
|
|
1172
|
-
getManyReference:
|
|
1173
|
-
getOne:
|
|
1174
|
-
create:
|
|
1175
|
-
update:
|
|
1186
|
+
getList: waitForPrepareConfig((0, $1caf729dc3ce856d$export$2e2bcd8739ae039)),
|
|
1187
|
+
getMany: waitForPrepareConfig((0, $f1e05270f9a21255$export$2e2bcd8739ae039)),
|
|
1188
|
+
getManyReference: waitForPrepareConfig((0, $b5979a9678f57756$export$2e2bcd8739ae039)),
|
|
1189
|
+
getOne: waitForPrepareConfig((0, $ed447224dd38ce82$export$2e2bcd8739ae039)),
|
|
1190
|
+
create: waitForPrepareConfig((0, $5a7a2f7583392866$export$2e2bcd8739ae039)),
|
|
1191
|
+
update: waitForPrepareConfig((0, $c5031381f4dfc62d$export$2e2bcd8739ae039)),
|
|
1176
1192
|
updateMany: ()=>{
|
|
1177
|
-
throw new Error(
|
|
1193
|
+
throw new Error('updateMany is not implemented yet');
|
|
1178
1194
|
},
|
|
1179
|
-
delete:
|
|
1180
|
-
deleteMany:
|
|
1195
|
+
delete: waitForPrepareConfig((0, $9510970b8e7eb9e2$export$2e2bcd8739ae039)),
|
|
1196
|
+
deleteMany: waitForPrepareConfig((0, $298dd1ae21173ea0$export$2e2bcd8739ae039)),
|
|
1181
1197
|
// Custom methods
|
|
1182
|
-
patch:
|
|
1183
|
-
getDataModels:
|
|
1184
|
-
getDataServers:
|
|
1185
|
-
getLocalDataServers: (0, $7dd5bf9323d2d9c1$export$2e2bcd8739ae039)(
|
|
1186
|
-
fetch:
|
|
1187
|
-
uploadFile:
|
|
1198
|
+
patch: waitForPrepareConfig((0, $cdfdce6efa87baab$export$2e2bcd8739ae039)),
|
|
1199
|
+
getDataModels: waitForPrepareConfig((0, $54a3fa40eed06111$export$2e2bcd8739ae039)),
|
|
1200
|
+
getDataServers: waitForPrepareConfig((0, $7dd5bf9323d2d9c1$export$2e2bcd8739ae039)),
|
|
1201
|
+
getLocalDataServers: (0, $7dd5bf9323d2d9c1$export$2e2bcd8739ae039)(originalConfig),
|
|
1202
|
+
fetch: waitForPrepareConfig((c)=>(0, $22b4895a4ca7d626$export$2e2bcd8739ae039)(c.dataServers)),
|
|
1203
|
+
uploadFile: waitForPrepareConfig((c)=>(rawFile)=>(0, $b17c43e3301545ca$export$a5575dbeeffdad98)(rawFile, c)),
|
|
1204
|
+
expandTypes: waitForPrepareConfig((c)=>(types)=>(0, $36aa010ec46eaf45$export$2e2bcd8739ae039)(types, c.jsonContext)),
|
|
1205
|
+
getConfig: waitForPrepareConfig((c)=>()=>c),
|
|
1188
1206
|
refreshConfig: async ()=>{
|
|
1189
1207
|
config = {
|
|
1190
1208
|
...originalConfig
|
|
1191
1209
|
};
|
|
1192
|
-
|
|
1193
|
-
fetchVoidEndpointsPromise = (0, $31a4627920feab4a$export$2e2bcd8739ae039)(config);
|
|
1194
|
-
await fetchUserConfigPromise;
|
|
1195
|
-
await fetchVoidEndpointsPromise;
|
|
1210
|
+
await prepareConfig();
|
|
1196
1211
|
return config;
|
|
1197
1212
|
}
|
|
1198
1213
|
};
|
|
@@ -1203,95 +1218,403 @@ var $243bf28fbb1b868f$export$2e2bcd8739ae039 = $243bf28fbb1b868f$var$dataProvide
|
|
|
1203
1218
|
|
|
1204
1219
|
|
|
1205
1220
|
|
|
1221
|
+
const $861da9be2c0e62eb$var$getPrefixFromUri = (uri, ontologies)=>{
|
|
1222
|
+
for (const [prefix, namespace] of Object.entries(ontologies)){
|
|
1223
|
+
if (uri.startsWith(namespace)) return uri.replace(namespace, `${prefix}:`);
|
|
1224
|
+
}
|
|
1225
|
+
return uri;
|
|
1226
|
+
};
|
|
1227
|
+
var $861da9be2c0e62eb$export$2e2bcd8739ae039 = $861da9be2c0e62eb$var$getPrefixFromUri;
|
|
1206
1228
|
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1229
|
+
|
|
1230
|
+
|
|
1231
|
+
|
|
1232
|
+
const $cdd3c71a628eeefe$var$configureUserStorage = ()=>({
|
|
1233
|
+
transformConfig: async (config)=>{
|
|
1234
|
+
const token = localStorage.getItem('token');
|
|
1235
|
+
// If the user is logged in
|
|
1236
|
+
if (token) {
|
|
1237
|
+
const payload = (0, $fj9kP$jwtdecode)(token);
|
|
1238
|
+
const webId = payload.webId || payload.webid; // Currently we must deal with both formats
|
|
1239
|
+
const { json: user } = await config.httpClient(webId);
|
|
1240
|
+
if (user) {
|
|
1241
|
+
const newConfig = {
|
|
1242
|
+
...config
|
|
1243
|
+
};
|
|
1244
|
+
newConfig.dataServers.user = {
|
|
1245
|
+
pod: true,
|
|
1246
|
+
default: true,
|
|
1247
|
+
authServer: true,
|
|
1248
|
+
baseUrl: user['pim:storage'] || (0, $fj9kP$urljoin)(webId, 'data'),
|
|
1249
|
+
sparqlEndpoint: user.endpoints?.['void:sparqlEndpoint'] || (0, $fj9kP$urljoin)(webId, 'sparql'),
|
|
1250
|
+
proxyUrl: user.endpoints?.proxyUrl,
|
|
1251
|
+
containers: []
|
|
1252
|
+
};
|
|
1253
|
+
if (!newConfig.jsonContext) newConfig.jsonContext = [
|
|
1254
|
+
'https://www.w3.org/ns/activitystreams',
|
|
1255
|
+
(0, $fj9kP$urljoin)(new URL(webId).origin, '/.well-known/context.jsonld')
|
|
1256
|
+
];
|
|
1257
|
+
return newConfig;
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
// Nothing to change
|
|
1261
|
+
return config;
|
|
1262
|
+
}
|
|
1263
|
+
});
|
|
1264
|
+
var $cdd3c71a628eeefe$export$2e2bcd8739ae039 = $cdd3c71a628eeefe$var$configureUserStorage;
|
|
1265
|
+
|
|
1266
|
+
|
|
1267
|
+
|
|
1268
|
+
|
|
1269
|
+
|
|
1270
|
+
|
|
1271
|
+
|
|
1272
|
+
const $d7a7484a035f15cd$var$getContainerFromDataRegistration = async (dataRegistrationUri, config)=>{
|
|
1273
|
+
const { json: dataRegistration } = await config.httpClient(dataRegistrationUri, {
|
|
1274
|
+
headers: new Headers({
|
|
1275
|
+
Accept: 'application/ld+json',
|
|
1276
|
+
Prefer: 'return=representation; include="http://www.w3.org/ns/ldp#PreferMinimalContainer"'
|
|
1277
|
+
})
|
|
1278
|
+
});
|
|
1279
|
+
const shapeTreeUri = dataRegistration['interop:registeredShapeTree'];
|
|
1280
|
+
let { json: shapeTree } = await (0, $fj9kP$fetchUtils).fetchJson(shapeTreeUri, {
|
|
1281
|
+
headers: new Headers({
|
|
1282
|
+
Accept: 'application/ld+json'
|
|
1283
|
+
})
|
|
1284
|
+
});
|
|
1285
|
+
shapeTree = await (0, $fj9kP$jsonld).compact(shapeTree, {
|
|
1286
|
+
st: 'http://www.w3.org/ns/shapetrees#',
|
|
1287
|
+
skos: 'http://www.w3.org/2004/02/skos/core#',
|
|
1288
|
+
expectsType: {
|
|
1289
|
+
'@id': 'st:expectsType',
|
|
1290
|
+
'@type': '@id'
|
|
1291
|
+
},
|
|
1292
|
+
shape: {
|
|
1293
|
+
'@id': 'st:shape',
|
|
1294
|
+
'@type': '@id'
|
|
1295
|
+
},
|
|
1296
|
+
describesInstance: {
|
|
1297
|
+
'@id': 'st:describesInstance',
|
|
1298
|
+
'@type': '@id'
|
|
1299
|
+
},
|
|
1300
|
+
label: {
|
|
1301
|
+
'@id': 'skos:prefLabel',
|
|
1302
|
+
'@container': '@language'
|
|
1303
|
+
}
|
|
1304
|
+
});
|
|
1305
|
+
const { baseUrl: baseUrl } = config.dataServers.user;
|
|
1306
|
+
const containerPath = dataRegistration.id.replace(baseUrl, '');
|
|
1307
|
+
const container = {
|
|
1308
|
+
path: containerPath,
|
|
1309
|
+
shapeTreeUri: shapeTreeUri,
|
|
1310
|
+
label: shapeTree.label,
|
|
1311
|
+
labelPredicate: shapeTree.describesInstance,
|
|
1312
|
+
binaryResources: shapeTree.expectsType === 'st:NonRDFResource'
|
|
1313
|
+
};
|
|
1314
|
+
if (shapeTree.shape) {
|
|
1315
|
+
const { json: shape } = await (0, $fj9kP$fetchUtils).fetchJson(shapeTree.shape, {
|
|
1316
|
+
headers: new Headers({
|
|
1317
|
+
Accept: 'application/ld+json'
|
|
1318
|
+
})
|
|
1319
|
+
});
|
|
1320
|
+
container.types = shape?.[0]?.['http://www.w3.org/ns/shacl#targetClass']?.map((node)=>node?.['@id']);
|
|
1321
|
+
}
|
|
1322
|
+
return container;
|
|
1243
1323
|
};
|
|
1244
|
-
var $
|
|
1324
|
+
var $d7a7484a035f15cd$export$2e2bcd8739ae039 = $d7a7484a035f15cd$var$getContainerFromDataRegistration;
|
|
1245
1325
|
|
|
1246
1326
|
|
|
1327
|
+
/**
|
|
1328
|
+
* Return a function that look if an app (clientId) is registered with an user (webId)
|
|
1329
|
+
* If not, it redirects to the endpoint provided by the user's authorization agent
|
|
1330
|
+
* See https://solid.github.io/data-interoperability-panel/specification/#authorization-agent
|
|
1331
|
+
*/ const $2c257b4237cb14ca$var$fetchAppRegistration = ()=>({
|
|
1332
|
+
transformConfig: async (config)=>{
|
|
1333
|
+
const token = localStorage.getItem('token');
|
|
1334
|
+
// If the user is logged in
|
|
1335
|
+
if (token) {
|
|
1336
|
+
const payload = (0, $fj9kP$jwtdecode)(token);
|
|
1337
|
+
const webId = payload.webId || payload.webid; // Currently we must deal with both formats
|
|
1338
|
+
const { json: user } = await config.httpClient(webId);
|
|
1339
|
+
const authAgentUri = user['interop:hasAuthorizationAgent'];
|
|
1340
|
+
if (authAgentUri) {
|
|
1341
|
+
// Find if an application registration is linked to this user
|
|
1342
|
+
// See https://solid.github.io/data-interoperability-panel/specification/#agent-registration-discovery
|
|
1343
|
+
const { headers: headers } = await config.httpClient(authAgentUri);
|
|
1344
|
+
if (headers.has('Link')) {
|
|
1345
|
+
const linkHeader = (0, $fj9kP$httplinkheader).parse(headers.get('Link'));
|
|
1346
|
+
const registeredAgentLinkHeader = linkHeader.rel('http://www.w3.org/ns/solid/interop#registeredAgent');
|
|
1347
|
+
if (registeredAgentLinkHeader.length > 0) {
|
|
1348
|
+
const appRegistrationUri = registeredAgentLinkHeader[0].anchor;
|
|
1349
|
+
const { json: appRegistration } = await config.httpClient(appRegistrationUri);
|
|
1350
|
+
const newConfig = {
|
|
1351
|
+
...config
|
|
1352
|
+
};
|
|
1353
|
+
// Load data grants concurrently to improve performances
|
|
1354
|
+
const results = await Promise.all((0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(appRegistration['interop:hasAccessGrant']).map(async (accessGrantUri)=>{
|
|
1355
|
+
const { json: accessGrant } = await config.httpClient(accessGrantUri);
|
|
1356
|
+
return Promise.all((0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(accessGrant['interop:hasDataGrant']).map(async (dataGrantUri)=>{
|
|
1357
|
+
const { json: dataGrant } = await config.httpClient(dataGrantUri);
|
|
1358
|
+
return (0, $d7a7484a035f15cd$export$2e2bcd8739ae039)(dataGrant['interop:hasDataRegistration'], config);
|
|
1359
|
+
}));
|
|
1360
|
+
}));
|
|
1361
|
+
newConfig.dataServers.user.containers = results.flat();
|
|
1362
|
+
return newConfig;
|
|
1363
|
+
}
|
|
1364
|
+
}
|
|
1365
|
+
}
|
|
1366
|
+
}
|
|
1367
|
+
return config;
|
|
1368
|
+
}
|
|
1369
|
+
});
|
|
1370
|
+
var $2c257b4237cb14ca$export$2e2bcd8739ae039 = $2c257b4237cb14ca$var$fetchAppRegistration;
|
|
1371
|
+
|
|
1372
|
+
|
|
1373
|
+
|
|
1374
|
+
|
|
1375
|
+
const $91255e144bb55afc$var$fetchDataRegistry = ()=>({
|
|
1376
|
+
transformConfig: async (config)=>{
|
|
1377
|
+
const token = localStorage.getItem('token');
|
|
1378
|
+
// If the user is logged in
|
|
1379
|
+
if (token) {
|
|
1380
|
+
if (!config.dataServers.user) throw new Error(`You must configure the user storage first with the configureUserStorage plugin`);
|
|
1381
|
+
const payload = (0, $fj9kP$jwtdecode)(token);
|
|
1382
|
+
const webId = payload.webId || payload.webid; // Currently we must deal with both formats
|
|
1383
|
+
const { json: user } = await config.httpClient(webId);
|
|
1384
|
+
const { json: registrySet } = await config.httpClient(user['interop:hasRegistrySet']);
|
|
1385
|
+
const { json: dataRegistry } = await config.httpClient(registrySet['interop:hasDataRegistry']);
|
|
1386
|
+
if (dataRegistry['interop:hasDataRegistration']) {
|
|
1387
|
+
const results = await Promise.all(dataRegistry['interop:hasDataRegistration'].map((dataRegistrationUri)=>{
|
|
1388
|
+
return (0, $d7a7484a035f15cd$export$2e2bcd8739ae039)(dataRegistrationUri, config);
|
|
1389
|
+
}));
|
|
1390
|
+
const newConfig = {
|
|
1391
|
+
...config
|
|
1392
|
+
};
|
|
1393
|
+
newConfig.dataServers.user.containers?.push(...results.flat());
|
|
1394
|
+
return newConfig;
|
|
1395
|
+
}
|
|
1396
|
+
}
|
|
1397
|
+
// Nothing to change
|
|
1398
|
+
return config;
|
|
1399
|
+
}
|
|
1400
|
+
});
|
|
1401
|
+
var $91255e144bb55afc$export$2e2bcd8739ae039 = $91255e144bb55afc$var$fetchDataRegistry;
|
|
1247
1402
|
|
|
1248
1403
|
|
|
1249
1404
|
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1405
|
+
|
|
1406
|
+
|
|
1407
|
+
|
|
1408
|
+
const $2d5f75df63129ebc$var$fetchTypeIndexes = ()=>({
|
|
1409
|
+
transformConfig: async (config)=>{
|
|
1410
|
+
const token = localStorage.getItem('token');
|
|
1411
|
+
// If the user is logged in
|
|
1412
|
+
if (token) {
|
|
1413
|
+
if (!config.dataServers.user) throw new Error(`You must configure the user storage first with the configureUserStorage plugin`);
|
|
1414
|
+
const payload = (0, $fj9kP$jwtdecode)(token);
|
|
1415
|
+
const webId = payload.webId || payload.webid; // Currently we must deal with both formats
|
|
1416
|
+
const { json: user } = await config.httpClient(webId);
|
|
1417
|
+
const typeRegistrations = {
|
|
1418
|
+
public: [],
|
|
1419
|
+
private: []
|
|
1420
|
+
};
|
|
1421
|
+
if (user['solid:publicTypeIndex']) {
|
|
1422
|
+
const { json: publicTypeIndex } = await config.httpClient(user['solid:publicTypeIndex']);
|
|
1423
|
+
if (publicTypeIndex) typeRegistrations.public = (0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(publicTypeIndex['solid:hasTypeRegistration']);
|
|
1424
|
+
}
|
|
1425
|
+
if (user['pim:preferencesFile']) {
|
|
1426
|
+
const { json: preferencesFile } = await config.httpClient(user['pim:preferencesFile']);
|
|
1427
|
+
if (preferencesFile?.['solid:privateTypeIndex']) {
|
|
1428
|
+
const { json: privateTypeIndex } = await config.httpClient(preferencesFile['solid:privateTypeIndex']);
|
|
1429
|
+
typeRegistrations.private = (0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(privateTypeIndex['solid:hasTypeRegistration']);
|
|
1430
|
+
}
|
|
1431
|
+
}
|
|
1432
|
+
if (typeRegistrations.public.length > 0 || typeRegistrations.private.length > 0) {
|
|
1433
|
+
const newConfig = {
|
|
1434
|
+
...config
|
|
1435
|
+
};
|
|
1436
|
+
for (const mode of Object.keys(typeRegistrations))for (const typeRegistration of typeRegistrations[mode]){
|
|
1437
|
+
const types = (0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(typeRegistration['solid:forClass']);
|
|
1438
|
+
const container = {
|
|
1439
|
+
label: {
|
|
1440
|
+
en: (0, $fj9kP$capitalCase)(types[0].split(':')[1], {
|
|
1441
|
+
separateNumbers: true
|
|
1442
|
+
})
|
|
1443
|
+
},
|
|
1444
|
+
path: typeRegistration['solid:instanceContainer'].replace(newConfig.dataServers.user.baseUrl, ''),
|
|
1445
|
+
types: await (0, $36aa010ec46eaf45$export$2e2bcd8739ae039)(types, user['@context']),
|
|
1446
|
+
private: mode === 'private'
|
|
1447
|
+
};
|
|
1448
|
+
const containerIndex = newConfig.dataServers.user.containers.findIndex((c)=>c.path === container.path);
|
|
1449
|
+
if (containerIndex !== -1) // If a container with this URI already exist, add type registration information if they are not set
|
|
1450
|
+
newConfig.dataServers.user.containers[containerIndex] = {
|
|
1451
|
+
...container,
|
|
1452
|
+
...newConfig.dataServers.user.containers[containerIndex]
|
|
1453
|
+
};
|
|
1454
|
+
else newConfig.dataServers.user.containers.push(container);
|
|
1455
|
+
}
|
|
1456
|
+
return newConfig;
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1459
|
+
return config;
|
|
1460
|
+
}
|
|
1461
|
+
});
|
|
1462
|
+
var $2d5f75df63129ebc$export$2e2bcd8739ae039 = $2d5f75df63129ebc$var$fetchTypeIndexes;
|
|
1463
|
+
|
|
1464
|
+
|
|
1465
|
+
|
|
1466
|
+
|
|
1467
|
+
const $a87fd63d8fca0380$var$fetchVoidEndpoints = ()=>({
|
|
1468
|
+
transformConfig: async (config)=>{
|
|
1469
|
+
let results = [];
|
|
1470
|
+
try {
|
|
1471
|
+
results = await Promise.all(Object.entries(config.dataServers).filter(([_, server])=>server.pod !== true && server.void !== false).map(async ([key, server])=>config.httpClient(new URL('/.well-known/void', server.baseUrl).toString()).then((result)=>({
|
|
1472
|
+
key: key,
|
|
1473
|
+
context: result.json?.['@context'],
|
|
1474
|
+
datasets: result.json?.['@graph']
|
|
1475
|
+
})).catch((e)=>{
|
|
1476
|
+
if (e.status === 404 || e.status === 401 || e.status === 500) return {
|
|
1477
|
+
key: key,
|
|
1478
|
+
error: e.message
|
|
1479
|
+
};
|
|
1480
|
+
throw e;
|
|
1481
|
+
})));
|
|
1482
|
+
} catch (e) {
|
|
1483
|
+
// Do not throw error if no endpoint found
|
|
1484
|
+
}
|
|
1485
|
+
results = results.filter((result)=>result.datasets);
|
|
1486
|
+
if (results.length > 0) {
|
|
1487
|
+
const newConfig = {
|
|
1488
|
+
...config
|
|
1489
|
+
};
|
|
1490
|
+
for (const result of results){
|
|
1491
|
+
// Ignore unfetchable endpoints
|
|
1492
|
+
if (result.datasets) for (const dataset of result.datasets){
|
|
1493
|
+
newConfig.dataServers[result.key].name ??= dataset['dc:title'];
|
|
1494
|
+
newConfig.dataServers[result.key].description ??= dataset['dc:description'];
|
|
1495
|
+
newConfig.dataServers[result.key].sparqlEndpoint ??= dataset['void:sparqlEndpoint'];
|
|
1496
|
+
newConfig.dataServers[result.key].containers ??= [];
|
|
1497
|
+
for (const partition of (0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(dataset['void:classPartition']))for (const type of (0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(partition['void:class'])){
|
|
1498
|
+
const path = partition['void:uriSpace'].replace(dataset['void:uriSpace'], '/');
|
|
1499
|
+
const expandedTypes = await (0, $36aa010ec46eaf45$export$2e2bcd8739ae039)([
|
|
1500
|
+
type
|
|
1501
|
+
], result.context);
|
|
1502
|
+
const containerIndex = newConfig.dataServers[result.key].containers.findIndex((c)=>c.types?.some((t)=>expandedTypes.includes(t)));
|
|
1503
|
+
if (containerIndex && containerIndex !== -1) // If a container with this type already exist, overwrite path and types
|
|
1504
|
+
newConfig.dataServers[result.key].containers[containerIndex] = {
|
|
1505
|
+
...newConfig.dataServers[result.key].containers[containerIndex],
|
|
1506
|
+
path: path,
|
|
1507
|
+
types: expandedTypes
|
|
1508
|
+
};
|
|
1509
|
+
else newConfig.dataServers[result.key].containers.push({
|
|
1510
|
+
path: path,
|
|
1511
|
+
types: expandedTypes
|
|
1512
|
+
});
|
|
1513
|
+
}
|
|
1514
|
+
}
|
|
1515
|
+
}
|
|
1516
|
+
return newConfig;
|
|
1517
|
+
} else return config;
|
|
1518
|
+
}
|
|
1519
|
+
});
|
|
1520
|
+
var $a87fd63d8fca0380$export$2e2bcd8739ae039 = $a87fd63d8fca0380$var$fetchVoidEndpoints;
|
|
1521
|
+
|
|
1522
|
+
|
|
1523
|
+
|
|
1524
|
+
|
|
1525
|
+
|
|
1526
|
+
const $3677b4de74c3d10d$var$useDataProviderConfig = ()=>{
|
|
1527
|
+
const dataProvider = (0, $fj9kP$useDataProvider)();
|
|
1528
|
+
const [config, setConfig] = (0, $fj9kP$useState)();
|
|
1529
|
+
const [isLoading, setIsLoading] = (0, $fj9kP$useState)(false);
|
|
1254
1530
|
(0, $fj9kP$useEffect)(()=>{
|
|
1255
|
-
|
|
1531
|
+
if (!isLoading && !config) {
|
|
1532
|
+
setIsLoading(true);
|
|
1533
|
+
dataProvider.getConfig().then((c)=>{
|
|
1534
|
+
setConfig(c);
|
|
1535
|
+
setIsLoading(false);
|
|
1536
|
+
});
|
|
1537
|
+
}
|
|
1256
1538
|
}, [
|
|
1257
1539
|
dataProvider,
|
|
1258
|
-
|
|
1259
|
-
|
|
1540
|
+
setConfig,
|
|
1541
|
+
config,
|
|
1542
|
+
setIsLoading,
|
|
1543
|
+
isLoading
|
|
1260
1544
|
]);
|
|
1261
|
-
return
|
|
1545
|
+
return config;
|
|
1262
1546
|
};
|
|
1263
|
-
var $
|
|
1547
|
+
var $3677b4de74c3d10d$export$2e2bcd8739ae039 = $3677b4de74c3d10d$var$useDataProviderConfig;
|
|
1264
1548
|
|
|
1265
1549
|
|
|
1266
1550
|
|
|
1551
|
+
const $52b38c5b114c348c$var$compactPredicate = async (predicate, context)=>{
|
|
1552
|
+
const result = await (0, $fj9kP$jsonld).compact({
|
|
1553
|
+
[predicate]: ''
|
|
1554
|
+
}, context);
|
|
1555
|
+
return Object.keys(result).find((key)=>key !== '@context');
|
|
1556
|
+
};
|
|
1557
|
+
var $52b38c5b114c348c$export$2e2bcd8739ae039 = $52b38c5b114c348c$var$compactPredicate;
|
|
1267
1558
|
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
const
|
|
1559
|
+
|
|
1560
|
+
const $72db0904d77f0f1e$var$useCompactPredicate = (predicate, context)=>{
|
|
1561
|
+
const config = (0, $3677b4de74c3d10d$export$2e2bcd8739ae039)();
|
|
1562
|
+
const [result, setResult] = (0, $fj9kP$useState)();
|
|
1271
1563
|
(0, $fj9kP$useEffect)(()=>{
|
|
1272
|
-
|
|
1273
|
-
|
|
1564
|
+
if (config && predicate) (0, $52b38c5b114c348c$export$2e2bcd8739ae039)(predicate, context || config.jsonContext).then((r)=>{
|
|
1565
|
+
setResult(r);
|
|
1274
1566
|
});
|
|
1275
1567
|
}, [
|
|
1276
|
-
|
|
1277
|
-
|
|
1568
|
+
predicate,
|
|
1569
|
+
setResult,
|
|
1570
|
+
config,
|
|
1571
|
+
context
|
|
1278
1572
|
]);
|
|
1279
|
-
return
|
|
1573
|
+
return result;
|
|
1574
|
+
};
|
|
1575
|
+
var $72db0904d77f0f1e$export$2e2bcd8739ae039 = $72db0904d77f0f1e$var$useCompactPredicate;
|
|
1576
|
+
|
|
1577
|
+
|
|
1578
|
+
|
|
1579
|
+
|
|
1580
|
+
const $3a9656756670cb78$var$useDataModels = ()=>{
|
|
1581
|
+
const config = (0, $3677b4de74c3d10d$export$2e2bcd8739ae039)();
|
|
1582
|
+
return config?.resources;
|
|
1583
|
+
};
|
|
1584
|
+
var $3a9656756670cb78$export$2e2bcd8739ae039 = $3a9656756670cb78$var$useDataModels;
|
|
1585
|
+
|
|
1586
|
+
|
|
1587
|
+
|
|
1588
|
+
const $4daf4cf698ee4eed$var$useDataServers = ()=>{
|
|
1589
|
+
const config = (0, $3677b4de74c3d10d$export$2e2bcd8739ae039)();
|
|
1590
|
+
return config?.dataServers;
|
|
1280
1591
|
};
|
|
1281
1592
|
var $4daf4cf698ee4eed$export$2e2bcd8739ae039 = $4daf4cf698ee4eed$var$useDataServers;
|
|
1282
1593
|
|
|
1283
1594
|
|
|
1284
1595
|
|
|
1285
|
-
|
|
1286
|
-
|
|
1596
|
+
|
|
1597
|
+
|
|
1598
|
+
const $586fa0ea9d02fa12$var$useContainers = (resourceId, serverKeys)=>{
|
|
1599
|
+
const dataModels = (0, $3a9656756670cb78$export$2e2bcd8739ae039)();
|
|
1287
1600
|
const dataServers = (0, $4daf4cf698ee4eed$export$2e2bcd8739ae039)();
|
|
1288
|
-
const [containers, setContainers] = (0, $fj9kP$useState)();
|
|
1601
|
+
const [containers, setContainers] = (0, $fj9kP$useState)([]);
|
|
1602
|
+
// Warning: if serverKeys change, the containers list will not be updated (otherwise we have an infinite re-render loop)
|
|
1289
1603
|
(0, $fj9kP$useEffect)(()=>{
|
|
1290
|
-
if (
|
|
1604
|
+
if (dataServers && dataModels) {
|
|
1605
|
+
if (resourceId) {
|
|
1606
|
+
const dataModel = dataModels[resourceId];
|
|
1607
|
+
setContainers((0, $15b841e67a1ba752$export$2e2bcd8739ae039)((0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(dataModel.types), serverKeys, dataServers));
|
|
1608
|
+
} else {
|
|
1609
|
+
const parsedServerKeys = (0, $99cc2e4a2a3c100b$export$2e2bcd8739ae039)(serverKeys || '@all', dataServers);
|
|
1610
|
+
setContainers(parsedServerKeys.map((serverKey)=>dataServers[serverKey].containers).flat());
|
|
1611
|
+
}
|
|
1612
|
+
}
|
|
1291
1613
|
}, [
|
|
1292
|
-
|
|
1614
|
+
dataModels,
|
|
1293
1615
|
dataServers,
|
|
1294
|
-
|
|
1616
|
+
setContainers,
|
|
1617
|
+
resourceId
|
|
1295
1618
|
]);
|
|
1296
1619
|
return containers;
|
|
1297
1620
|
};
|
|
@@ -1303,96 +1626,164 @@ var $586fa0ea9d02fa12$export$2e2bcd8739ae039 = $586fa0ea9d02fa12$var$useContaine
|
|
|
1303
1626
|
|
|
1304
1627
|
|
|
1305
1628
|
|
|
1306
|
-
const $
|
|
1307
|
-
const
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1629
|
+
const $9d2c669bd52faa31$var$useContainersByTypes = (types)=>{
|
|
1630
|
+
const dataServers = (0, $4daf4cf698ee4eed$export$2e2bcd8739ae039)();
|
|
1631
|
+
const dataProvider = (0, $fj9kP$useDataProvider)();
|
|
1632
|
+
const [containers, setContainers] = (0, $fj9kP$useState)([]);
|
|
1633
|
+
(0, $fj9kP$useEffect)(()=>{
|
|
1634
|
+
if (dataServers && types) dataProvider.expandTypes((0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(types)).then((expandedTypes)=>{
|
|
1635
|
+
setContainers((0, $15b841e67a1ba752$export$2e2bcd8739ae039)(expandedTypes, '@all', dataServers));
|
|
1636
|
+
}).catch(()=>{
|
|
1637
|
+
// Ignore errors
|
|
1312
1638
|
});
|
|
1313
|
-
}
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1639
|
+
}, [
|
|
1640
|
+
dataServers,
|
|
1641
|
+
dataProvider,
|
|
1642
|
+
setContainers,
|
|
1643
|
+
types
|
|
1644
|
+
]);
|
|
1645
|
+
return containers;
|
|
1317
1646
|
};
|
|
1318
|
-
var $
|
|
1647
|
+
var $9d2c669bd52faa31$export$2e2bcd8739ae039 = $9d2c669bd52faa31$var$useContainersByTypes;
|
|
1648
|
+
|
|
1319
1649
|
|
|
1320
1650
|
|
|
1321
1651
|
|
|
1322
|
-
|
|
1323
|
-
const dataModel = (0, $e5a0eacd756fd1d5$export$2e2bcd8739ae039)(resourceId);
|
|
1652
|
+
const $43097d0b613bd4db$var$useContainerByUri = (containerUri)=>{
|
|
1324
1653
|
const dataServers = (0, $4daf4cf698ee4eed$export$2e2bcd8739ae039)();
|
|
1325
|
-
const [
|
|
1654
|
+
const [container, setContainer] = (0, $fj9kP$useState)();
|
|
1326
1655
|
(0, $fj9kP$useEffect)(()=>{
|
|
1327
|
-
if (
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
} else if (dataModel.create?.server) setCreateContainer((0, $7d9911a250866af6$export$2e2bcd8739ae039)(dataModel.types, dataModel.create?.server, dataServers));
|
|
1333
|
-
else {
|
|
1334
|
-
const defaultServerKey = (0, $8326b88c1a913ca9$export$2e2bcd8739ae039)("default", dataServers);
|
|
1335
|
-
setCreateContainer((0, $7d9911a250866af6$export$2e2bcd8739ae039)(dataModel.types, defaultServerKey, dataServers));
|
|
1336
|
-
}
|
|
1337
|
-
}
|
|
1656
|
+
if (dataServers && containerUri) Object.keys(dataServers).forEach((serverKey)=>{
|
|
1657
|
+
dataServers[serverKey].containers?.forEach((c)=>{
|
|
1658
|
+
if (c.uri === containerUri) setContainer(c);
|
|
1659
|
+
});
|
|
1660
|
+
});
|
|
1338
1661
|
}, [
|
|
1339
|
-
dataModel,
|
|
1340
1662
|
dataServers,
|
|
1341
|
-
|
|
1663
|
+
setContainer,
|
|
1664
|
+
containerUri
|
|
1342
1665
|
]);
|
|
1343
|
-
return
|
|
1666
|
+
return container;
|
|
1344
1667
|
};
|
|
1345
|
-
var $
|
|
1346
|
-
|
|
1668
|
+
var $43097d0b613bd4db$export$2e2bcd8739ae039 = $43097d0b613bd4db$var$useContainerByUri;
|
|
1347
1669
|
|
|
1348
1670
|
|
|
1349
1671
|
|
|
1350
1672
|
|
|
1351
1673
|
|
|
1352
1674
|
|
|
1675
|
+
const $7d9911a250866af6$var$findCreateContainerWithTypes = (types, createServerKey, dataServers)=>{
|
|
1676
|
+
if (!dataServers[createServerKey].containers) throw new Error(`Data server ${createServerKey} has no declared containers`);
|
|
1677
|
+
const matchingContainers = dataServers[createServerKey].containers.filter((container)=>container.types?.some((t)=>types.includes(t)));
|
|
1678
|
+
if (matchingContainers.length === 0) throw new Error(`No container found matching with types ${JSON.stringify(types)}. You can set explicitly the create.container property of the resource.`);
|
|
1679
|
+
else if (matchingContainers.length > 1) throw new Error(`More than one container found matching with types ${JSON.stringify(types)}. You must set the create.server or create.container property for the resource.`);
|
|
1680
|
+
return matchingContainers[0].uri;
|
|
1681
|
+
};
|
|
1682
|
+
var $7d9911a250866af6$export$2e2bcd8739ae039 = $7d9911a250866af6$var$findCreateContainerWithTypes;
|
|
1353
1683
|
|
|
1354
1684
|
|
|
1355
|
-
const $3a9656756670cb78$var$useDataModels = ()=>{
|
|
1356
|
-
const dataProvider = (0, $fj9kP$useDataProvider)();
|
|
1357
|
-
const [dataModels, setDataModels] = (0, $fj9kP$useState)();
|
|
1358
|
-
(0, $fj9kP$useEffect)(()=>{
|
|
1359
|
-
dataProvider.getDataModels().then((results)=>{
|
|
1360
|
-
setDataModels(results);
|
|
1361
|
-
});
|
|
1362
|
-
}, [
|
|
1363
|
-
dataProvider,
|
|
1364
|
-
setDataModels
|
|
1365
|
-
]);
|
|
1366
|
-
return dataModels;
|
|
1367
|
-
};
|
|
1368
|
-
var $3a9656756670cb78$export$2e2bcd8739ae039 = $3a9656756670cb78$var$useDataModels;
|
|
1369
1685
|
|
|
1370
1686
|
|
|
1371
|
-
const $
|
|
1687
|
+
const $8dbb0c8c3814e663$var$useGetCreateContainerUri = ()=>{
|
|
1372
1688
|
const dataModels = (0, $3a9656756670cb78$export$2e2bcd8739ae039)();
|
|
1373
1689
|
const dataServers = (0, $4daf4cf698ee4eed$export$2e2bcd8739ae039)();
|
|
1374
|
-
const
|
|
1690
|
+
const getCreateContainerUri = (0, $fj9kP$useCallback)((resourceId)=>{
|
|
1375
1691
|
if (!dataModels || !dataServers || !dataModels[resourceId]) return undefined;
|
|
1376
1692
|
const dataModel = dataModels[resourceId];
|
|
1377
1693
|
if (dataModel.create?.container) {
|
|
1378
1694
|
const [serverKey, path] = Object.entries(dataModel.create.container)[0];
|
|
1379
1695
|
if (!serverKey || !dataServers[serverKey]) throw new Error(`Wrong key for the dataModel.create.container config of resource ${resourceId}`);
|
|
1380
1696
|
return (0, $fj9kP$urljoin)(dataServers[serverKey].baseUrl, path);
|
|
1697
|
+
} else if (dataModel.create?.server) return (0, $7d9911a250866af6$export$2e2bcd8739ae039)(dataModel.types, dataModel.create?.server, dataServers);
|
|
1698
|
+
else {
|
|
1699
|
+
const defaultServerKey = (0, $8326b88c1a913ca9$export$2e2bcd8739ae039)('default', dataServers);
|
|
1700
|
+
if (!defaultServerKey) throw new Error(`No default dataServer found. You can set explicitly one setting the "default" attribute to true`);
|
|
1701
|
+
return (0, $7d9911a250866af6$export$2e2bcd8739ae039)(dataModel.types, defaultServerKey, dataServers);
|
|
1381
1702
|
}
|
|
1382
|
-
if (dataModel.create?.server) return (0, $7d9911a250866af6$export$2e2bcd8739ae039)(dataModel.types, dataModel.create?.server, dataServers);
|
|
1383
|
-
const defaultServerKey = (0, $8326b88c1a913ca9$export$2e2bcd8739ae039)("default", dataServers);
|
|
1384
|
-
if (!defaultServerKey) throw new Error(`No default dataServer found. You can set explicitly one setting the "default" attribute to true`);
|
|
1385
|
-
return (0, $7d9911a250866af6$export$2e2bcd8739ae039)(dataModel.types, defaultServerKey, dataServers);
|
|
1386
1703
|
}, [
|
|
1387
1704
|
dataModels,
|
|
1388
1705
|
dataServers
|
|
1389
1706
|
]);
|
|
1390
|
-
return
|
|
1707
|
+
return getCreateContainerUri;
|
|
1708
|
+
};
|
|
1709
|
+
var $8dbb0c8c3814e663$export$2e2bcd8739ae039 = $8dbb0c8c3814e663$var$useGetCreateContainerUri;
|
|
1710
|
+
|
|
1711
|
+
|
|
1712
|
+
const $35f3e75c86e51f35$var$useCreateContainerUri = (resourceId)=>{
|
|
1713
|
+
const getCreateContainerUri = (0, $8dbb0c8c3814e663$export$2e2bcd8739ae039)();
|
|
1714
|
+
const createContainerUri = (0, $fj9kP$useMemo)(()=>getCreateContainerUri(resourceId), [
|
|
1715
|
+
getCreateContainerUri,
|
|
1716
|
+
resourceId
|
|
1717
|
+
]);
|
|
1718
|
+
return createContainerUri;
|
|
1391
1719
|
};
|
|
1392
1720
|
var $35f3e75c86e51f35$export$2e2bcd8739ae039 = $35f3e75c86e51f35$var$useCreateContainerUri;
|
|
1393
1721
|
|
|
1394
1722
|
|
|
1395
1723
|
|
|
1724
|
+
const $e5a0eacd756fd1d5$var$useDataModel = (resourceId)=>{
|
|
1725
|
+
const config = (0, $3677b4de74c3d10d$export$2e2bcd8739ae039)();
|
|
1726
|
+
return config?.resources[resourceId];
|
|
1727
|
+
};
|
|
1728
|
+
var $e5a0eacd756fd1d5$export$2e2bcd8739ae039 = $e5a0eacd756fd1d5$var$useDataModel;
|
|
1729
|
+
|
|
1730
|
+
|
|
1731
|
+
|
|
1732
|
+
|
|
1733
|
+
|
|
1734
|
+
|
|
1735
|
+
|
|
1736
|
+
|
|
1737
|
+
const $87656edf926c0f1f$var$compute = (externalLinks, record)=>typeof externalLinks === 'function' ? externalLinks(record) : externalLinks;
|
|
1738
|
+
const $87656edf926c0f1f$var$isURL = (url)=>typeof url === 'string' && url.startsWith('http');
|
|
1739
|
+
const $87656edf926c0f1f$var$useGetExternalLink = (componentExternalLinks)=>{
|
|
1740
|
+
// Since the externalLinks config is defined only locally, we don't need to wait for VOID endpoints fetching
|
|
1741
|
+
const dataProvider = (0, $fj9kP$useContext)((0, $fj9kP$DataProviderContext));
|
|
1742
|
+
const dataServers = dataProvider.getLocalDataServers();
|
|
1743
|
+
const serversExternalLinks = (0, $fj9kP$useMemo)(()=>{
|
|
1744
|
+
if (dataServers) return Object.fromEntries(Object.values(dataServers).map((server)=>{
|
|
1745
|
+
// If externalLinks is not defined in the data server, use external links for non-default servers
|
|
1746
|
+
const externalLinks = server.externalLinks !== undefined ? server.externalLinks : !server.default;
|
|
1747
|
+
return [
|
|
1748
|
+
server.baseUrl,
|
|
1749
|
+
externalLinks
|
|
1750
|
+
];
|
|
1751
|
+
}));
|
|
1752
|
+
}, [
|
|
1753
|
+
dataServers
|
|
1754
|
+
]);
|
|
1755
|
+
return (0, $fj9kP$useCallback)((record)=>{
|
|
1756
|
+
const computedComponentExternalLinks = $87656edf926c0f1f$var$compute(componentExternalLinks, record);
|
|
1757
|
+
// If the component explicitly asks not to display as external links, use an internal link
|
|
1758
|
+
if (computedComponentExternalLinks === false) return false;
|
|
1759
|
+
if (!record?.id) return false;
|
|
1760
|
+
const serverBaseUrl = Object.keys(serversExternalLinks).find((baseUrl)=>record?.id.startsWith(baseUrl));
|
|
1761
|
+
// If no matching data servers could be found, assume we have an internal link
|
|
1762
|
+
if (!serverBaseUrl) return false;
|
|
1763
|
+
const computedServerExternalLinks = $87656edf926c0f1f$var$compute(serversExternalLinks[serverBaseUrl], record);
|
|
1764
|
+
// If the data server explicitly asks not to display as external links, use an internal link
|
|
1765
|
+
if (computedServerExternalLinks === false) return false;
|
|
1766
|
+
if ($87656edf926c0f1f$var$isURL(computedComponentExternalLinks)) return computedComponentExternalLinks;
|
|
1767
|
+
if ($87656edf926c0f1f$var$isURL(computedServerExternalLinks)) return computedServerExternalLinks;
|
|
1768
|
+
return record.id;
|
|
1769
|
+
}, [
|
|
1770
|
+
serversExternalLinks,
|
|
1771
|
+
componentExternalLinks
|
|
1772
|
+
]);
|
|
1773
|
+
};
|
|
1774
|
+
var $87656edf926c0f1f$export$2e2bcd8739ae039 = $87656edf926c0f1f$var$useGetExternalLink;
|
|
1775
|
+
|
|
1776
|
+
|
|
1777
|
+
|
|
1778
|
+
|
|
1779
|
+
|
|
1780
|
+
const $487567a146508c4e$var$useGetPrefixFromUri = ()=>{
|
|
1781
|
+
const config = (0, $3677b4de74c3d10d$export$2e2bcd8739ae039)();
|
|
1782
|
+
return (0, $fj9kP$useCallback)((uri)=>(0, $861da9be2c0e62eb$export$2e2bcd8739ae039)(uri, config.ontologies), [
|
|
1783
|
+
config?.ontologies
|
|
1784
|
+
]);
|
|
1785
|
+
};
|
|
1786
|
+
var $487567a146508c4e$export$2e2bcd8739ae039 = $487567a146508c4e$var$useGetPrefixFromUri;
|
|
1396
1787
|
|
|
1397
1788
|
|
|
1398
1789
|
|
|
@@ -1547,15 +1938,15 @@ var $1d8c1cbe606a94ae$export$2e2bcd8739ae039 = $1d8c1cbe606a94ae$var$GroupedRefe
|
|
|
1547
1938
|
|
|
1548
1939
|
const $6844bbce0ad66151$var$useReferenceInputStyles = (0, $fj9kP$muistylesmakeStyles)({
|
|
1549
1940
|
form: {
|
|
1550
|
-
display:
|
|
1941
|
+
display: 'flex'
|
|
1551
1942
|
},
|
|
1552
1943
|
input: {
|
|
1553
|
-
paddingRight:
|
|
1944
|
+
paddingRight: '20px'
|
|
1554
1945
|
}
|
|
1555
1946
|
});
|
|
1556
1947
|
const $6844bbce0ad66151$var$useHideInputStyles = (0, $fj9kP$muistylesmakeStyles)({
|
|
1557
1948
|
root: {
|
|
1558
|
-
display:
|
|
1949
|
+
display: 'none'
|
|
1559
1950
|
}
|
|
1560
1951
|
});
|
|
1561
1952
|
const $6844bbce0ad66151$var$ReificationArrayInput = (props)=>{
|
|
@@ -1591,21 +1982,21 @@ var $6844bbce0ad66151$export$2e2bcd8739ae039 = $6844bbce0ad66151$var$Reification
|
|
|
1591
1982
|
* Find the solid notification description resource for a given resource URI.
|
|
1592
1983
|
*/ const $03d52e691e8dc945$var$findDescriptionResource = async (authenticatedFetch, resourceUri)=>{
|
|
1593
1984
|
const { headers: headers } = await authenticatedFetch(resourceUri, {
|
|
1594
|
-
method:
|
|
1985
|
+
method: 'HEAD'
|
|
1595
1986
|
});
|
|
1596
|
-
const linkHeader = headers.get(
|
|
1987
|
+
const linkHeader = headers.get('Link');
|
|
1597
1988
|
const matches = linkHeader?.match(/<([^>]+)>;\s*rel="(?:describedby|http:\/\/www\.w3\.org\/ns\/solid\/terms#storageDescription)"/);
|
|
1598
1989
|
if (!matches?.[1]) return undefined;
|
|
1599
1990
|
// Don't use authenticatedFetch to get this endpoint
|
|
1600
1991
|
const response = await fetch(matches[1], {
|
|
1601
1992
|
headers: new Headers({
|
|
1602
|
-
Accept:
|
|
1993
|
+
Accept: 'application/ld+json'
|
|
1603
1994
|
})
|
|
1604
1995
|
});
|
|
1605
1996
|
return await response.json();
|
|
1606
1997
|
};
|
|
1607
1998
|
const $03d52e691e8dc945$export$3edfe18db119b920 = async (authenticatedFetch, resourceUri, options = {
|
|
1608
|
-
type:
|
|
1999
|
+
type: 'WebSocketChannel2023'
|
|
1609
2000
|
})=>{
|
|
1610
2001
|
const { type: type, closeAfter: closeAfter, startIn: startIn, rate: rate } = options;
|
|
1611
2002
|
let { startAt: startAt, endAt: endAt } = options;
|
|
@@ -1615,13 +2006,13 @@ const $03d52e691e8dc945$export$3edfe18db119b920 = async (authenticatedFetch, res
|
|
|
1615
2006
|
// TODO: use a json-ld parser / ldo in the future for this...
|
|
1616
2007
|
// Get solid notification subscription service for the given type.
|
|
1617
2008
|
const subscriptionService = (await Promise.all(// Get the subscription service resources (that describe a channel type).
|
|
1618
|
-
(0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(descriptionResource.subscription || descriptionResource[
|
|
2009
|
+
(0, $cc8adac4b83414eb$export$2e2bcd8739ae039)(descriptionResource.subscription || descriptionResource['notify:subscription']).map(async (subscriptionServiceOrUri)=>{
|
|
1619
2010
|
// They might not be resolved...
|
|
1620
|
-
if (typeof subscriptionServiceOrUri ===
|
|
2011
|
+
if (typeof subscriptionServiceOrUri === 'string') {
|
|
1621
2012
|
// Don't use authenticatedFetch to get this endpoint
|
|
1622
2013
|
const response = await fetch(subscriptionServiceOrUri, {
|
|
1623
2014
|
headers: new Headers({
|
|
1624
|
-
Accept:
|
|
2015
|
+
Accept: 'application/ld+json'
|
|
1625
2016
|
})
|
|
1626
2017
|
});
|
|
1627
2018
|
return await response.json();
|
|
@@ -1629,16 +2020,16 @@ const $03d52e691e8dc945$export$3edfe18db119b920 = async (authenticatedFetch, res
|
|
|
1629
2020
|
return subscriptionServiceOrUri;
|
|
1630
2021
|
}))).find((service)=>{
|
|
1631
2022
|
// Find for the correct channel type (e.g. web socket).
|
|
1632
|
-
const channelType = service.channelType ?? service[
|
|
2023
|
+
const channelType = service.channelType ?? service['notify:channelType'];
|
|
1633
2024
|
return channelType === type || channelType === `notify:${type}`;
|
|
1634
2025
|
});
|
|
1635
2026
|
if (!subscriptionService) throw new Error(`No solid notification subscription service found for type ${type}`);
|
|
1636
2027
|
// Create a new channel.
|
|
1637
|
-
const { json: channel } = await authenticatedFetch(subscriptionService.id || subscriptionService[
|
|
1638
|
-
method:
|
|
2028
|
+
const { json: channel } = await authenticatedFetch(subscriptionService.id || subscriptionService['@id'], {
|
|
2029
|
+
method: 'POST',
|
|
1639
2030
|
body: JSON.stringify({
|
|
1640
|
-
|
|
1641
|
-
type:
|
|
2031
|
+
'@context': 'https://www.w3.org/ns/solid/notifications-context/v1',
|
|
2032
|
+
type: 'WebSocketChannel2023',
|
|
1642
2033
|
topic: resourceUri,
|
|
1643
2034
|
startAt: startAt,
|
|
1644
2035
|
endAt: endAt,
|
|
@@ -1649,7 +2040,7 @@ const $03d52e691e8dc945$export$3edfe18db119b920 = async (authenticatedFetch, res
|
|
|
1649
2040
|
};
|
|
1650
2041
|
const $03d52e691e8dc945$export$28772ab4c256e709 = async (authenticatedFetch, resourceUri, options)=>{
|
|
1651
2042
|
const channel = await $03d52e691e8dc945$export$3edfe18db119b920(authenticatedFetch, resourceUri, options);
|
|
1652
|
-
const receiveFrom = channel.receiveFrom || channel[
|
|
2043
|
+
const receiveFrom = channel.receiveFrom || channel['notify:receiveFrom'];
|
|
1653
2044
|
return new WebSocket(receiveFrom);
|
|
1654
2045
|
};
|
|
1655
2046
|
const $03d52e691e8dc945$var$registeredWebSockets = new Map();
|
|
@@ -1659,7 +2050,7 @@ const $03d52e691e8dc945$var$registeredWebSockets = new Map();
|
|
|
1659
2050
|
* @param options Options to pass to @see createSolidNotificationChannel, if the channel does not exist yet.
|
|
1660
2051
|
* @returns {WebSocket} A new or existing web socket that subscribed to the given resource.
|
|
1661
2052
|
*/ const $03d52e691e8dc945$export$8d60734939c59ced = async (authenticatedFetch, resourceUri, options = {
|
|
1662
|
-
type:
|
|
2053
|
+
type: 'WebSocketChannel2023',
|
|
1663
2054
|
closeAfter: 3600000
|
|
1664
2055
|
})=>{
|
|
1665
2056
|
const socket = $03d52e691e8dc945$var$registeredWebSockets.get(resourceUri);
|
|
@@ -1669,10 +2060,10 @@ const $03d52e691e8dc945$var$registeredWebSockets = new Map();
|
|
|
1669
2060
|
// This prevents racing conditions that create multiple channels.
|
|
1670
2061
|
const wsPromise = $03d52e691e8dc945$export$28772ab4c256e709(authenticatedFetch, resourceUri, {
|
|
1671
2062
|
...options,
|
|
1672
|
-
type:
|
|
2063
|
+
type: 'WebSocketChannel2023'
|
|
1673
2064
|
}).then((ws)=>{
|
|
1674
2065
|
// Remove the promise from the cache, if it closes.
|
|
1675
|
-
ws.addEventListener(
|
|
2066
|
+
ws.addEventListener('close', (e)=>{
|
|
1676
2067
|
$03d52e691e8dc945$var$registeredWebSockets.delete(resourceUri);
|
|
1677
2068
|
});
|
|
1678
2069
|
// Close the socket, if the endAt / closeAfter time is reached.
|
|
@@ -1690,5 +2081,5 @@ const $03d52e691e8dc945$var$registeredWebSockets = new Map();
|
|
|
1690
2081
|
|
|
1691
2082
|
|
|
1692
2083
|
|
|
1693
|
-
export {$243bf28fbb1b868f$export$2e2bcd8739ae039 as dataProvider, $6cde9a8fbbde3ffb$export$2e2bcd8739ae039 as buildSparqlQuery, $865f630cc944e818$export$2e2bcd8739ae039 as buildBlankNodesQuery, $
|
|
2084
|
+
export {$243bf28fbb1b868f$export$2e2bcd8739ae039 as dataProvider, $6cde9a8fbbde3ffb$export$2e2bcd8739ae039 as buildSparqlQuery, $865f630cc944e818$export$2e2bcd8739ae039 as buildBlankNodesQuery, $4872a1c30c1fc60e$export$2e2bcd8739ae039 as getUriFromPrefix, $861da9be2c0e62eb$export$2e2bcd8739ae039 as getPrefixFromUri, $cdd3c71a628eeefe$export$2e2bcd8739ae039 as configureUserStorage, $2c257b4237cb14ca$export$2e2bcd8739ae039 as fetchAppRegistration, $91255e144bb55afc$export$2e2bcd8739ae039 as fetchDataRegistry, $2d5f75df63129ebc$export$2e2bcd8739ae039 as fetchTypeIndexes, $a87fd63d8fca0380$export$2e2bcd8739ae039 as fetchVoidEndpoints, $72db0904d77f0f1e$export$2e2bcd8739ae039 as useCompactPredicate, $586fa0ea9d02fa12$export$2e2bcd8739ae039 as useContainers, $9d2c669bd52faa31$export$2e2bcd8739ae039 as useContainersByTypes, $43097d0b613bd4db$export$2e2bcd8739ae039 as useContainerByUri, $35f3e75c86e51f35$export$2e2bcd8739ae039 as useCreateContainerUri, $e5a0eacd756fd1d5$export$2e2bcd8739ae039 as useDataModel, $3a9656756670cb78$export$2e2bcd8739ae039 as useDataModels, $3677b4de74c3d10d$export$2e2bcd8739ae039 as useDataProviderConfig, $4daf4cf698ee4eed$export$2e2bcd8739ae039 as useDataServers, $8dbb0c8c3814e663$export$2e2bcd8739ae039 as useGetCreateContainerUri, $87656edf926c0f1f$export$2e2bcd8739ae039 as useGetExternalLink, $487567a146508c4e$export$2e2bcd8739ae039 as useGetPrefixFromUri, $406574efa35ec6f1$export$2e2bcd8739ae039 as FilterHandler, $1d8c1cbe606a94ae$export$2e2bcd8739ae039 as GroupedReferenceHandler, $6844bbce0ad66151$export$2e2bcd8739ae039 as ReificationArrayInput, $03d52e691e8dc945$export$28772ab4c256e709 as createWsChannel, $03d52e691e8dc945$export$8d60734939c59ced as getOrCreateWsChannel, $03d52e691e8dc945$export$3edfe18db119b920 as createSolidNotificationChannel};
|
|
1694
2085
|
//# sourceMappingURL=index.es.js.map
|