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