@semapps/semantic-data-provider 0.6.4 → 0.6.6

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 CHANGED
@@ -1,6 +1,5 @@
1
1
  var $bkNnK$urljoin = require("url-join");
2
2
  var $bkNnK$jsonld = require("jsonld");
3
- var $bkNnK$isobject = require("isobject");
4
3
  var $bkNnK$rdfjsdatamodel = require("@rdfjs/data-model");
5
4
  var $bkNnK$sparqljs = require("sparqljs");
6
5
  var $bkNnK$cryptojsmd5 = require("crypto-js/md5");
@@ -25,9 +24,10 @@ $parcel$export(module.exports, "buildBlankNodesQuery", () => $64d4ce40c79d1509$e
25
24
  $parcel$export(module.exports, "useGetExternalLink", () => $85e9a897c6d7c14a$export$2e2bcd8739ae039);
26
25
  $parcel$export(module.exports, "useContainers", () => $3158e0dc13ffffaa$export$2e2bcd8739ae039);
27
26
  $parcel$export(module.exports, "useCreateContainer", () => $99ed32cbdb76cb50$export$2e2bcd8739ae039);
27
+ $parcel$export(module.exports, "useCreateContainerUri", () => $298b78bb7d4a3358$export$2e2bcd8739ae039);
28
28
  $parcel$export(module.exports, "useDataModel", () => $63a32f1a35c6f80e$export$2e2bcd8739ae039);
29
- $parcel$export(module.exports, "useDataModels", () => $8d622cbd05acb834$export$2e2bcd8739ae039);
30
- $parcel$export(module.exports, "useDataServers", () => $9b817943cd488c90$export$2e2bcd8739ae039);
29
+ $parcel$export(module.exports, "useDataModels", () => $20621bc841a5205a$export$2e2bcd8739ae039);
30
+ $parcel$export(module.exports, "useDataServers", () => $c9933a88e2acc4da$export$2e2bcd8739ae039);
31
31
  $parcel$export(module.exports, "FilterHandler", () => $f763906f9b20f2d8$export$2e2bcd8739ae039);
32
32
  $parcel$export(module.exports, "GroupedReferenceHandler", () => $b4703fef6d6af456$export$2e2bcd8739ae039);
33
33
  $parcel$export(module.exports, "ReificationArrayInput", () => $030f1232f6810456$export$2e2bcd8739ae039);
@@ -196,7 +196,7 @@ const $047a107b0d203793$var$findContainersWithTypes = (types, serverKeys, dataSe
196
196
  const existingContainers = [];
197
197
  const parsedServerKeys = (0, $982f4f2fb185d606$export$2e2bcd8739ae039)(serverKeys, dataServers);
198
198
  Object.keys(dataServers).filter((dataServerKey)=>dataServers[dataServerKey].containers).forEach((dataServerKey)=>{
199
- Object.keys(dataServers[dataServerKey].containers).forEach((containerKey)=>{
199
+ Object.keys(dataServers[dataServerKey].containers || {}).forEach((containerKey)=>{
200
200
  if (!parsedServerKeys || parsedServerKeys.includes(containerKey)) Object.keys(dataServers[dataServerKey].containers[containerKey]).forEach((type)=>{
201
201
  if (types.includes(type)) dataServers[dataServerKey].containers[containerKey][type].map((path)=>{
202
202
  const containerUri = (0, ($parcel$interopDefault($bkNnK$urljoin)))(dataServers[containerKey].baseUrl, path);
@@ -327,8 +327,7 @@ var $241c41c6f6021c7a$export$2e2bcd8739ae039 = $241c41c6f6021c7a$var$getDataMode
327
327
 
328
328
 
329
329
 
330
-
331
- const $4d160872c02aa8d3$var$arrayOf = (value)=>{
330
+ const $e6fbab1f303bdb93$var$arrayOf = (value)=>{
332
331
  // If the field is null-ish, we suppose there are no values.
333
332
  if (!value) return [];
334
333
  // Return as is.
@@ -338,86 +337,110 @@ const $4d160872c02aa8d3$var$arrayOf = (value)=>{
338
337
  value
339
338
  ];
340
339
  };
341
- var $4d160872c02aa8d3$export$2e2bcd8739ae039 = $4d160872c02aa8d3$var$arrayOf;
340
+ var $e6fbab1f303bdb93$export$2e2bcd8739ae039 = $e6fbab1f303bdb93$var$arrayOf;
342
341
 
343
342
 
344
- const $6e66f3a2f960b9ca$export$26b9f946b448f23e = (type, resource)=>{
345
- const resourceType = resource.type || resource["@type"];
346
- return Array.isArray(resourceType) ? resourceType.includes(type) : resourceType === type;
343
+ const $8c999cc29c8d6a6c$var$isValidLDPContainer = (container)=>{
344
+ const resourceType = container.type || container["@type"];
345
+ return Array.isArray(resourceType) ? resourceType.includes("ldp:Container") : resourceType === "ldp:Container";
347
346
  };
348
- const $6e66f3a2f960b9ca$var$fetchContainers = async (containers, resourceId, params, config)=>{
349
- const { httpClient: httpClient, jsonContext: jsonContext } = config;
350
- // Transform in an containerUri:serverKey object
351
- const containersServers = Object.keys(containers).reduce((acc, serverKey)=>({
352
- ...acc,
353
- ...Object.fromEntries(containers[serverKey].map((containerUri)=>[
354
- containerUri,
355
- serverKey
356
- ]))
357
- }), {});
358
- const fetchPromises = Object.keys(containersServers).map((containerUri)=>httpClient(containerUri).then(({ json: json })=>{
347
+ const $8c999cc29c8d6a6c$var$isObject = (val)=>{
348
+ return val != null && typeof val === "object" && !Array.isArray(val);
349
+ };
350
+ const $8c999cc29c8d6a6c$var$fetchContainers = async (containers, params, { httpClient: httpClient, jsonContext: jsonContext })=>{
351
+ const containersUri = Object.values(containers).flat();
352
+ const fetchPromises = containersUri.map((containerUri)=>httpClient(containerUri).then(async ({ json: json })=>{
353
+ const jsonResponse = json;
359
354
  // If container's context is different, compact it to have an uniform result
360
355
  // TODO deep compare if the context is an object
361
- if (json["@context"] !== jsonContext) return (0, ($parcel$interopDefault($bkNnK$jsonld))).compact(json, jsonContext);
362
- return json;
356
+ if (jsonResponse["@context"] !== jsonContext) return (0, ($parcel$interopDefault($bkNnK$jsonld))).compact(jsonResponse, jsonContext);
357
+ return jsonResponse;
363
358
  }).then((json)=>{
364
- if ($6e66f3a2f960b9ca$export$26b9f946b448f23e("ldp:Container", json)) return (0, $4d160872c02aa8d3$export$2e2bcd8739ae039)(json["ldp:contains"]).map((resource)=>({
359
+ if (!$8c999cc29c8d6a6c$var$isValidLDPContainer(json)) throw new Error(`${containerUri} is not a LDP container`);
360
+ return (0, $e6fbab1f303bdb93$export$2e2bcd8739ae039)(json["ldp:contains"]).map((resource)=>({
365
361
  "@context": json["@context"],
366
362
  ...resource
367
363
  }));
368
- throw new Error(`${containerUri} is not a LDP container`);
369
364
  }));
370
365
  // Fetch simultaneously all containers
371
- let results = await Promise.all(fetchPromises);
372
- if (results.length === 0) return {
373
- data: [],
374
- total: 0
375
- };
376
- // Merge all results in one array
377
- results = [].concat.apply(...results);
378
- let returnData = results.map((item)=>{
379
- item.id = item.id || item["@id"];
380
- return item;
366
+ const results = await Promise.all(fetchPromises);
367
+ let resources = results.flat();
368
+ resources = resources.map((resource)=>{
369
+ resource.id = resource.id || resource["@id"];
370
+ return resource;
381
371
  });
382
372
  // Apply filter to results
383
- if (params.filter) {
384
- // For SPARQL queries, we use "a" to filter types, but in containers it must be "type"
385
- if (params.filter.a) {
386
- params.filter.type = params.filter.a;
387
- delete params.filter.a;
388
- }
389
- if (Object.keys(params.filter).length > 0) returnData = returnData.filter((resource)=>{
390
- return Object.entries(params.filter).every(([k, v])=>{
391
- if (k == "q") return Object.entries(resource).some(([kr, vr])=>{
392
- if (!(0, ($parcel$interopDefault($bkNnK$isobject)))(vr)) {
393
- const arrayValues = Array.isArray(vr) ? vr : [
394
- vr
395
- ];
396
- return arrayValues.some((va)=>{
397
- if (typeof va === "string" || va instanceof String) return va.toLowerCase().normalize("NFD").includes(v.toLowerCase().normalize("NFD"));
398
- });
399
- }
400
- return false;
401
- });
402
- if (resource[k]) return Array.isArray(resource[k]) ? resource[k].some((va)=>va.includes(v)) : resource[k].includes(v);
403
- return false;
373
+ const filters = params.filter;
374
+ // For SPARQL queries, we use "a" to filter types, but in containers it must be "type"
375
+ if (filters.a) {
376
+ filters.type = filters.a;
377
+ delete filters.a;
378
+ }
379
+ // Filter resources attributes according to _predicates list
380
+ if (filters._predicates && Array.isArray(filters._predicates)) {
381
+ const predicates = filters._predicates;
382
+ const mandatoryAttributes = [
383
+ "id"
384
+ ];
385
+ resources = resources.map((resource)=>{
386
+ return Object.keys(resource).filter((key)=>predicates.includes(key) || mandatoryAttributes.includes(key)).reduce((filteredResource, key)=>{
387
+ filteredResource[key] = resource[key];
388
+ return filteredResource;
389
+ }, {
390
+ "@context": []
404
391
  });
405
392
  });
406
393
  }
407
- if (params.sort) returnData = returnData.sort((a, b)=>{
394
+ if (Object.keys(filters).filter((f)=>![
395
+ "_predicates",
396
+ "_servers"
397
+ ].includes(f)).length > 0) resources = resources.filter((resource)=>{
398
+ // Full text filtering
399
+ if (filters.q) return Object.values(resource).some((attributeValue)=>{
400
+ if (!$8c999cc29c8d6a6c$var$isObject(attributeValue)) {
401
+ const arrayValues = Array.isArray(attributeValue) ? attributeValue : [
402
+ attributeValue
403
+ ];
404
+ return arrayValues.some((value)=>{
405
+ if (typeof value === "string") return value.toLowerCase().normalize("NFD").includes(filters.q.toLowerCase().normalize("NFD"));
406
+ return false;
407
+ });
408
+ }
409
+ return false;
410
+ });
411
+ // Attribute filtering
412
+ const attributesFilters = Object.keys(filters).filter((f)=>![
413
+ "_predicates",
414
+ "_servers",
415
+ "q"
416
+ ].includes(f));
417
+ return attributesFilters.every((attribute)=>{
418
+ if (resource[attribute]) {
419
+ const arrayValues = Array.isArray(resource[attribute]) ? resource[attribute] : [
420
+ resource[attribute]
421
+ ];
422
+ return arrayValues.some((value)=>typeof value === "string" && value.includes(filters[attribute]));
423
+ }
424
+ return false;
425
+ });
426
+ });
427
+ // Sorting
428
+ if (params.sort) resources = resources.sort((a, b)=>{
408
429
  if (a[params.sort.field] && b[params.sort.field]) {
409
430
  if (params.sort.order === "ASC") return a[params.sort.field].localeCompare(b[params.sort.field]);
410
431
  return b[params.sort.field].localeCompare(a[params.sort.field]);
411
432
  }
412
433
  return true;
413
434
  });
414
- if (params.pagination) returnData = returnData.slice((params.pagination.page - 1) * params.pagination.perPage, params.pagination.page * params.pagination.perPage);
435
+ // Pagination
436
+ const total = resources.length;
437
+ if (params.pagination) resources = resources.slice((params.pagination.page - 1) * params.pagination.perPage, params.pagination.page * params.pagination.perPage);
415
438
  return {
416
- data: returnData,
417
- total: results.length
439
+ data: resources,
440
+ total: total
418
441
  };
419
442
  };
420
- var $6e66f3a2f960b9ca$export$2e2bcd8739ae039 = $6e66f3a2f960b9ca$var$fetchContainers;
443
+ var $8c999cc29c8d6a6c$export$2e2bcd8739ae039 = $8c999cc29c8d6a6c$var$fetchContainers;
421
444
 
422
445
 
423
446
 
@@ -882,7 +905,7 @@ const $b6ed253f3374f5d4$var$getListMethod = (config)=>async (resourceId, params
882
905
  containers = (0, $e3a78b3d48a0a0fb$export$2e2bcd8739ae039)(dataModel.list.containers, dataServers);
883
906
  } else // Otherwise find the container URIs on the given servers (either in the filter or the data model)
884
907
  containers = (0, $047a107b0d203793$export$2e2bcd8739ae039)(dataModel.types, params.filter?._servers || dataModel.list?.servers, dataServers);
885
- if (dataModel.list?.fetchContainer) return (0, $6e66f3a2f960b9ca$export$2e2bcd8739ae039)(containers, resourceId, params, config);
908
+ if (dataModel.list?.fetchContainer) return (0, $8c999cc29c8d6a6c$export$2e2bcd8739ae039)(containers, params, config);
886
909
  return (0, $1e7a94d745f8597b$export$2e2bcd8739ae039)(containers, resourceId, params, config);
887
910
  };
888
911
  var $b6ed253f3374f5d4$export$2e2bcd8739ae039 = $b6ed253f3374f5d4$var$getListMethod;
@@ -1220,25 +1243,26 @@ var $63a32f1a35c6f80e$export$2e2bcd8739ae039 = $63a32f1a35c6f80e$var$useDataMode
1220
1243
 
1221
1244
 
1222
1245
 
1223
- const $9b817943cd488c90$var$useDataServers = ()=>{
1224
- // Get the raw data provider, since useDataProvider returns a wrapper
1225
- const dataProvider = (0, $bkNnK$react.useContext)((0, $bkNnK$reactadmin.DataProviderContext));
1246
+ const $c9933a88e2acc4da$var$useDataServers = ()=>{
1247
+ const dataProvider = (0, $bkNnK$reactadmin.useDataProvider)();
1226
1248
  const [dataServers, setDataServers] = (0, $bkNnK$react.useState)();
1227
1249
  (0, $bkNnK$react.useEffect)(()=>{
1228
- dataProvider.getDataServers().then((results)=>setDataServers(results));
1250
+ dataProvider.getDataServers().then((results)=>{
1251
+ setDataServers(results);
1252
+ });
1229
1253
  }, [
1230
1254
  dataProvider,
1231
1255
  setDataServers
1232
1256
  ]);
1233
1257
  return dataServers;
1234
1258
  };
1235
- var $9b817943cd488c90$export$2e2bcd8739ae039 = $9b817943cd488c90$var$useDataServers;
1259
+ var $c9933a88e2acc4da$export$2e2bcd8739ae039 = $c9933a88e2acc4da$var$useDataServers;
1236
1260
 
1237
1261
 
1238
1262
 
1239
1263
  const $3158e0dc13ffffaa$var$useContainers = (resourceId, serverKeys = "@all")=>{
1240
1264
  const dataModel = (0, $63a32f1a35c6f80e$export$2e2bcd8739ae039)(resourceId);
1241
- const dataServers = (0, $9b817943cd488c90$export$2e2bcd8739ae039)();
1265
+ const dataServers = (0, $c9933a88e2acc4da$export$2e2bcd8739ae039)();
1242
1266
  const [containers, setContainers] = (0, $bkNnK$react.useState)();
1243
1267
  (0, $bkNnK$react.useEffect)(()=>{
1244
1268
  if (dataModel && dataServers) setContainers((0, $047a107b0d203793$export$2e2bcd8739ae039)(dataModel.types, serverKeys, dataServers));
@@ -1257,10 +1281,10 @@ var $3158e0dc13ffffaa$export$2e2bcd8739ae039 = $3158e0dc13ffffaa$var$useContaine
1257
1281
 
1258
1282
 
1259
1283
 
1260
- const $b32fd11d6aa83d1c$var$findCreateContainerWithTypes = (types, createServerKey, dataServers)=>{
1284
+ const $ff3623bf1421ebcc$var$findCreateContainerWithTypes = (types, createServerKey, dataServers)=>{
1261
1285
  const containers = [];
1262
- if (dataServers[createServerKey].containers?.[createServerKey] && Object.keys(dataServers[createServerKey].containers[createServerKey]).length > 0) Object.keys(dataServers[createServerKey].containers[createServerKey]).forEach((type)=>{
1263
- if (types.includes(type)) dataServers[createServerKey].containers[createServerKey][type].map((path)=>{
1286
+ Object.keys(dataServers[createServerKey].containers?.[createServerKey] || {}).forEach((type)=>{
1287
+ if (types.includes(type)) dataServers[createServerKey].containers[createServerKey][type].forEach((path)=>{
1264
1288
  const containerUri = (0, ($parcel$interopDefault($bkNnK$urljoin)))(dataServers[createServerKey].baseUrl, path);
1265
1289
  if (!containers.includes(containerUri)) containers.push(containerUri);
1266
1290
  });
@@ -1269,13 +1293,13 @@ const $b32fd11d6aa83d1c$var$findCreateContainerWithTypes = (types, createServerK
1269
1293
  else if (containers.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.`);
1270
1294
  return containers[0];
1271
1295
  };
1272
- var $b32fd11d6aa83d1c$export$2e2bcd8739ae039 = $b32fd11d6aa83d1c$var$findCreateContainerWithTypes;
1296
+ var $ff3623bf1421ebcc$export$2e2bcd8739ae039 = $ff3623bf1421ebcc$var$findCreateContainerWithTypes;
1273
1297
 
1274
1298
 
1275
1299
 
1276
- const $99ed32cbdb76cb50$var$useCreateContainer = (resourceId)=>{
1300
+ /** @deprecated Use "useCreateContainerUri" instead */ const $99ed32cbdb76cb50$var$useCreateContainer = (resourceId)=>{
1277
1301
  const dataModel = (0, $63a32f1a35c6f80e$export$2e2bcd8739ae039)(resourceId);
1278
- const dataServers = (0, $9b817943cd488c90$export$2e2bcd8739ae039)();
1302
+ const dataServers = (0, $c9933a88e2acc4da$export$2e2bcd8739ae039)();
1279
1303
  const [createContainer, setCreateContainer] = (0, $bkNnK$react.useState)();
1280
1304
  (0, $bkNnK$react.useEffect)(()=>{
1281
1305
  if (dataModel && dataServers) {
@@ -1283,10 +1307,10 @@ const $99ed32cbdb76cb50$var$useCreateContainer = (resourceId)=>{
1283
1307
  const [serverKey, path] = Object.entries(dataModel.create.container)[0];
1284
1308
  if (!serverKey || !dataServers[serverKey]) throw new Error(`Wrong key for the dataModel.create.container config of resource ${resourceId}`);
1285
1309
  setCreateContainer((0, ($parcel$interopDefault($bkNnK$urljoin)))(dataServers[serverKey].baseUrl, path));
1286
- } else if (dataModel.create?.server) setCreateContainer((0, $b32fd11d6aa83d1c$export$2e2bcd8739ae039)(dataModel.types, dataModel.create?.server, dataServers));
1310
+ } else if (dataModel.create?.server) setCreateContainer((0, $ff3623bf1421ebcc$export$2e2bcd8739ae039)(dataModel.types, dataModel.create?.server, dataServers));
1287
1311
  else {
1288
1312
  const defaultServerKey = (0, $8f44b7c15b8b8e1d$export$2e2bcd8739ae039)("default", dataServers);
1289
- setCreateContainer((0, $b32fd11d6aa83d1c$export$2e2bcd8739ae039)(dataModel.types, defaultServerKey, dataServers));
1313
+ setCreateContainer((0, $ff3623bf1421ebcc$export$2e2bcd8739ae039)(dataModel.types, defaultServerKey, dataServers));
1290
1314
  }
1291
1315
  }
1292
1316
  }, [
@@ -1302,19 +1326,50 @@ var $99ed32cbdb76cb50$export$2e2bcd8739ae039 = $99ed32cbdb76cb50$var$useCreateCo
1302
1326
 
1303
1327
 
1304
1328
 
1305
- const $8d622cbd05acb834$var$useDataModels = ()=>{
1306
- // Get the raw data provider, since useDataProvider returns a wrapper
1307
- const dataProvider = (0, $bkNnK$react.useContext)((0, $bkNnK$reactadmin.DataProviderContext));
1329
+
1330
+
1331
+
1332
+
1333
+ const $20621bc841a5205a$var$useDataModels = ()=>{
1334
+ const dataProvider = (0, $bkNnK$reactadmin.useDataProvider)();
1308
1335
  const [dataModels, setDataModels] = (0, $bkNnK$react.useState)();
1309
1336
  (0, $bkNnK$react.useEffect)(()=>{
1310
- dataProvider.getDataModels().then((results)=>setDataModels(results));
1337
+ dataProvider.getDataModels().then((results)=>{
1338
+ setDataModels(results);
1339
+ });
1311
1340
  }, [
1312
1341
  dataProvider,
1313
1342
  setDataModels
1314
1343
  ]);
1315
1344
  return dataModels;
1316
1345
  };
1317
- var $8d622cbd05acb834$export$2e2bcd8739ae039 = $8d622cbd05acb834$var$useDataModels;
1346
+ var $20621bc841a5205a$export$2e2bcd8739ae039 = $20621bc841a5205a$var$useDataModels;
1347
+
1348
+
1349
+ const $298b78bb7d4a3358$var$useCreateContainerUri = ()=>{
1350
+ const dataModels = (0, $20621bc841a5205a$export$2e2bcd8739ae039)();
1351
+ const dataServers = (0, $c9933a88e2acc4da$export$2e2bcd8739ae039)();
1352
+ const getContainerUri = (0, $bkNnK$react.useCallback)((resourceId)=>{
1353
+ if (!dataModels || !dataServers || !dataModels[resourceId]) return undefined;
1354
+ const dataModel = dataModels[resourceId];
1355
+ if (dataModel.create?.container) {
1356
+ const [serverKey, path] = Object.entries(dataModel.create.container)[0];
1357
+ if (!serverKey || !dataServers[serverKey]) throw new Error(`Wrong key for the dataModel.create.container config of resource ${resourceId}`);
1358
+ return (0, ($parcel$interopDefault($bkNnK$urljoin)))(dataServers[serverKey].baseUrl, path);
1359
+ }
1360
+ if (dataModel.create?.server) return (0, $ff3623bf1421ebcc$export$2e2bcd8739ae039)(dataModel.types, dataModel.create?.server, dataServers);
1361
+ const defaultServerKey = (0, $8f44b7c15b8b8e1d$export$2e2bcd8739ae039)("default", dataServers);
1362
+ if (!defaultServerKey) throw new Error(`No default dataServer found. You can set explicitly one setting the "default" attribute to true`);
1363
+ return (0, $ff3623bf1421ebcc$export$2e2bcd8739ae039)(dataModel.types, defaultServerKey, dataServers);
1364
+ }, [
1365
+ dataModels,
1366
+ dataServers
1367
+ ]);
1368
+ return getContainerUri;
1369
+ };
1370
+ var $298b78bb7d4a3358$export$2e2bcd8739ae039 = $298b78bb7d4a3358$var$useCreateContainerUri;
1371
+
1372
+
1318
1373
 
1319
1374
 
1320
1375