diff --git a/lerna.json b/lerna.json index 5c5c926..7459526 100644 --- a/lerna.json +++ b/lerna.json @@ -1,4 +1,4 @@ { "$schema": "node_modules/lerna/schemas/lerna-schema.json", - "version": "1.0.0-alpha.8" + "version": "1.0.0-alpha.9" } diff --git a/package-lock.json b/package-lock.json index ae84d0b..89f442f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1782,7 +1782,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.1.90" @@ -1792,7 +1791,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-2.10.0.tgz", "integrity": "sha512-0o6WBujsMnIVcwvRJv6Nj+kKPLZzqBS3On48rm01Rh9T1/My0E/buJMXwgcARKCfMonc2mJ9zxpPCh5ilGEU2A==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -1803,7 +1801,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-parse/-/actor-abstract-parse-2.10.0.tgz", "integrity": "sha512-0puCWF+y24EDOOAUUVVbC+tOf4UV+LzEbqi8T5v25jcVGCXyTqfra+bDywfrcv3adrVp18jLCJ46ycaH5xhy9Q==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -1814,7 +1811,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -1831,7 +1827,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-path/-/actor-abstract-path-2.10.1.tgz", "integrity": "sha512-+k1ltuUuIyn4iUm5oRMObyt2zhu68h7ymzxuKU4ezATlgwfwj6EM7/3W2n2/gxjg9tcFMr5GC6aNnFQmq3Iuig==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", @@ -1850,7 +1845,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-context-preprocess-source-to-destination/-/actor-context-preprocess-source-to-destination-2.10.0.tgz", "integrity": "sha512-sQc42Sd4cuVumZ9+PDnWBTBYneqCFShFliK8Et83GR3wBGzu9x0tS/M2o3e63sBbb6ZkWHyO5jl/O8AbrjhcTg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-context-preprocess": "^2.10.0", @@ -1863,7 +1857,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-fallback/-/actor-dereference-fallback-2.10.0.tgz", "integrity": "sha512-RSc/ScPdC7l13aZjz/6r4niWA8WDETbzuESQKKSWXi/HAlFOyOxdrDADdayVY2oyeZHIQibeNRtSi2ItzU7OPQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-dereference": "^2.10.0", @@ -1874,7 +1867,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-file/-/actor-dereference-file-2.10.0.tgz", "integrity": "sha512-WXfAyHm0M3+YbYEtLtasT6YHsrzTAevmH27ex8r51qKNj2LK74llpw4mSeea3xyjQR30jVnKBIJSxuSbN64Now==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-dereference": "^2.10.0", @@ -1885,7 +1877,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-http/-/actor-dereference-http-2.10.2.tgz", "integrity": "sha512-gdDo83W1TAgD2jx0kVbzZKzzt++L4Y4fbyTOH3duy6vx1EMGGZlNCp6I1uguepKEjNX4N0zhAcZzdJcv8A3XMA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-dereference": "^2.10.0", @@ -1900,7 +1891,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", - "dev": true, "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" @@ -1910,7 +1900,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -1931,7 +1920,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-rdf-parse/-/actor-dereference-rdf-parse-2.10.0.tgz", "integrity": "sha512-ANWL6Bv+2WHUjVRS7hfkOfVBNJs8xYZ9KHlgBOQ94CKtQZB9uSMjdb1hLp/cQjiDmFIWLn0+GM5Xi0KFwBkVAw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-dereference": "^2.10.0", @@ -1943,7 +1931,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-hash-bindings-sha1/-/actor-hash-bindings-sha1-2.10.0.tgz", "integrity": "sha512-f981PcCiDWbdZfM1ct1v1q/VII14y18lo1enEdHB25SF0hCkzIDwh9IrfDfJDju5I6luSWNE/MYMMeAAmF9e3g==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-hash-bindings": "^2.10.0", @@ -1957,7 +1944,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-http-fetch/-/actor-http-fetch-2.10.2.tgz", "integrity": "sha512-siHGx0TMVNb2gXvOroq0B3JE6uuS+4s+MsDkntqdBNVigwVYqLpNSKEaL5is8pputFfohJfDQY06lAHbfDNEcw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", @@ -1971,7 +1957,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", - "dev": true, "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" @@ -1981,7 +1966,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -2002,7 +1986,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-http-proxy/-/actor-http-proxy-2.10.2.tgz", "integrity": "sha512-3yUF8BCh4nwq8J6NRILEsyNrQNStkE9ggJ7hYwRfA1XcMgz1pANNaWJ2P2TEKH1jNinr23bL3JeuUZCm9Kz9dA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", @@ -2015,7 +1998,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-http-wayback/-/actor-http-wayback-2.10.2.tgz", "integrity": "sha512-wjYNXRrJvMqt9paO3HawyM+O5/14ofSHFuMAwGr/UyZQ5pCSFkY0YPd+qp9y8C4xvypPgsvT3PtiRyKgjD4FWw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", @@ -2029,7 +2011,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", - "dev": true, "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" @@ -2039,7 +2020,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -2060,7 +2040,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-init-query/-/actor-init-query-2.10.2.tgz", "integrity": "sha512-7A4bXdKCjXRdUThvMOOyg+U17DPeBAsyDYz1SA8F4lPUR06NapcG5TmZF+YWUTN/2EG5fZPUnD3etKuPXreGUw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-http-proxy": "^2.10.2", @@ -2094,7 +2073,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -2113,7 +2091,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -2123,7 +2100,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-bgp-to-join/-/actor-optimize-query-operation-bgp-to-join-2.10.0.tgz", "integrity": "sha512-M9vwM4a3VQA/ir8Q7eGRNzzx52u6RJFIXBW8p+Zkn+zv+4fsket3zLYJGhJU7dcvaSXcOi68rDP/r8KfgNXr4Q==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-optimize-query-operation": "^2.10.0", @@ -2135,7 +2111,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-join-bgp/-/actor-optimize-query-operation-join-bgp-2.10.0.tgz", "integrity": "sha512-tzZojWPbWn/S0DZGjGfV90ZRJVWT/yX3DKGgZ1ur33U5TW8n/fBQxHNMPCLu0GkMQ1dyx6bU+ekILTqm+21Jyw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-optimize-query-operation": "^2.10.0", @@ -2147,7 +2122,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-join-connected/-/actor-optimize-query-operation-join-connected-2.10.0.tgz", "integrity": "sha512-RsbKIAxX1HyoR/AUzqIV++dTcLiEElRIVDHYTaXVVvGgHECYdh9s+oc8cvv/lDbLVpfnc6P9C9BTAfrqOjKkhA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-optimize-query-operation": "^2.10.0", @@ -2159,7 +2133,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-ask/-/actor-query-operation-ask-2.10.1.tgz", "integrity": "sha512-7oktqE4fkMhi6Hs9XCcwwoZRsEismVqJZ5wp9lXXOPaxnHEiFyj5gb/B6baCstoCvCt6LcU8fVvfHSitbFCpeQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2172,7 +2145,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-bgp-join/-/actor-query-operation-bgp-join-2.10.1.tgz", "integrity": "sha512-eNpnvgFyKlZEHkMzubYL8ndADSsAQH4rwXvh22CGnf0FwyndHr6TEpmE6j77m9vXiSJ/lda0U3Zv4vIXvtREOw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2185,7 +2157,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-construct/-/actor-query-operation-construct-2.10.1.tgz", "integrity": "sha512-S+Nt1+1psv01QRnfytZjiog2NBNHIbjr7XIv+MO3p6aVmLCoZ6lmjxSGNdbX+EmcGr7tbbafXK5z3zRM+ke8Mw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2202,7 +2173,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-describe-subject/-/actor-query-operation-describe-subject-2.10.1.tgz", "integrity": "sha512-E8i0M6haJ5iZVeHMn5PbvA4G+l87mcZKqIxVpYAnJVpD667F74Dkx3IMbk+ohRmyRmnkOEmztUrjeyixHHzUEQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-query-operation-union": "^2.10.1", @@ -2218,7 +2188,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-distinct-hash/-/actor-query-operation-distinct-hash-2.10.1.tgz", "integrity": "sha512-exvJbgcJ0Pe4EGbLJD5LuGpvaGcFeckCxwB5pyd9OewNke+tLLP7nbEjB8KFEPpCO9LE7zt4faB1HvpJdEHQKQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-hash-bindings": "^2.10.0", @@ -2232,7 +2201,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-extend/-/actor-query-operation-extend-2.10.1.tgz", "integrity": "sha512-wkZxUfDu8T5lXD+OFLItmjjbnEBqtv0z8pxVKgI/gX8mOeu5KcPWLH0dJODTWoIzIYrJhV25FmCgBks1rt6K8w==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", @@ -2247,7 +2215,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-filter-sparqlee/-/actor-query-operation-filter-sparqlee-2.10.1.tgz", "integrity": "sha512-w2PnDNnlf+9B947ZdeSs7NpW9qGJjRiuODZYwhh0e6cx89GPDhEDVuJwawF6VP3m/oLcgXOAdif0Wwo3d8KNAA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", @@ -2262,7 +2229,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-from-quad/-/actor-query-operation-from-quad-2.10.1.tgz", "integrity": "sha512-7D4R8ONNJJPzoRu96dwIToOEk6/3O/T26FRzCqQKrbjFHNkX2v92KA/SiDzNz59VmDNWjYF1rsV31Ade6J89MA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2276,7 +2242,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-group/-/actor-query-operation-group-2.10.1.tgz", "integrity": "sha512-Od5s9Vb6uDPzXa6OAUC1WSMF96spNPJI2Zqf0Ixejw4zCNevOK/VwHivYfF0vHIUZxjRrOl3Al1ZU9L8n5Wxlw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", @@ -2295,7 +2260,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-join/-/actor-query-operation-join-2.10.1.tgz", "integrity": "sha512-CGed1nSPvKsM8rvj/4KFME0lLnzlDMMEU+xGczu+BZW4FK+Z6RyBtHIUmy8SgFvNP1GXz83q8KnoecF5z8IpjA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2309,7 +2273,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-leftjoin/-/actor-query-operation-leftjoin-2.10.1.tgz", "integrity": "sha512-j0RwdoiV2WsCQnxcSa//m5FZ+ZHDRBm6ObsgpqS44WxzpV8rIB6Dq/3UxGgE7D2vK400JaiiHa3dFiHTwDF18w==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2324,7 +2287,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-minus/-/actor-query-operation-minus-2.10.1.tgz", "integrity": "sha512-rUvHbc5/EUWMSJUgOEtxabCJ9IT9YThuG0FhcQk+BGRPGmsv2oz8uri5urKgCjfVXMH/09hRZksiDMqrmkQmZw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2338,7 +2300,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-nop/-/actor-query-operation-nop-2.10.1.tgz", "integrity": "sha512-l/Z8Uuoq3AlSoxkgYjrP7O7Xc9h8Y3ZOh0f7UKCuAST3U5vPQ3k1YJckrRtdli8s0NHptN9TfZjwviEHuYbDFQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", @@ -2354,7 +2315,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-orderby-sparqlee/-/actor-query-operation-orderby-sparqlee-2.10.1.tgz", "integrity": "sha512-8D2JmCsBtqJC29zfiaAXNzZdsKybhDFo2F8iTHul3nQHxBC2CeKDrBnY70B/HpbWxkDE+pwMfSTEFc/CvNZN6A==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2369,7 +2329,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-alt/-/actor-query-operation-path-alt-2.10.1.tgz", "integrity": "sha512-y1AHtkibThqHve79wAriXqrZ6hdLBhcdwyOpVqqEhY19a32P97Xv58bOwOkNeLguYdn/5CFlCTHz6dnzxUIoXg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", @@ -2384,7 +2343,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-inv/-/actor-query-operation-path-inv-2.10.1.tgz", "integrity": "sha512-pd30Ug7bOAZ5amfA3I6v+cpitlDn2i5fE1BA006LYJISCAHSfKEgLmU2Q4ZPbwi4s1A8WKKLV7Q389Ru3Xtziw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", @@ -2397,7 +2355,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-link/-/actor-query-operation-path-link-2.10.1.tgz", "integrity": "sha512-akujCHvCLmxaZ3gw9b1odDcqqAQnbbr9E8dTWLZyMJ4Mei8q/FmfWTF5MjGuQOas4UmQ3mm6gcqAKRZnJqlXNg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", @@ -2410,7 +2367,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-nps/-/actor-query-operation-path-nps-2.10.1.tgz", "integrity": "sha512-5X3EUzn6Cygz94gNn1XWQQUZVp+de59sw8/rxPQqgwzdi1Y1O9zrLv+/7GqMJoLz6MHmDSgsceTIY4eC1qmmOQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", @@ -2423,7 +2379,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-one-or-more/-/actor-query-operation-path-one-or-more-2.10.1.tgz", "integrity": "sha512-SkQeKESQqZOlzuMIsipcZ3ni7YfeyYMZCOtxC01HFbeyq+SDVbyfYUZ4Dd9uAi/g3InyzJRfou4csxHS8g7sHw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", @@ -2438,7 +2393,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-seq/-/actor-query-operation-path-seq-2.10.1.tgz", "integrity": "sha512-8TYLdVYaq9oMd9cuLFay78103bOfvygQU/C8NtPdLI9kkRWFsBatvaKmykHOHQAvaLgNhniOlrIJNEpepZGnAQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", @@ -2452,7 +2406,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-zero-or-more/-/actor-query-operation-path-zero-or-more-2.10.1.tgz", "integrity": "sha512-DtqBSw4LV1KI3q1YYAwgXlWrz1PO4EUpe/bVri0UB3JSQnxjBMHuJlHn2crC9Z93tmizneXxfvtWlLSXRrehsw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", @@ -2468,7 +2421,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-zero-or-one/-/actor-query-operation-path-zero-or-one-2.10.1.tgz", "integrity": "sha512-qePX+7iW5DXDwaYO210y7jhSU32Zk82S5UHuLLvd4q4HS1Z7j8e4KhukbeZKzQmOsO8S5JOHHM9vwvsOc3GPlw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", @@ -2484,7 +2436,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-project/-/actor-query-operation-project-2.10.1.tgz", "integrity": "sha512-KAaPl4GFIQMWR8I8OoJroktGssPKGbEEJHyGzTuYXrmJrcXgknOxf5IUSVJNpaFfS6dshT6nqW+ciT+wRzz0Tg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2500,7 +2451,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-quadpattern/-/actor-query-operation-quadpattern-2.10.1.tgz", "integrity": "sha512-RZj1TXW+VDU4aYJVnSzgs8q0340e+YUeGLtoY9sl0Xzc8YNaIus4nXRUz/KfOXDknxm1q+a4Bof4yHNgXtb1Hw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", @@ -2521,7 +2471,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-reduced-hash/-/actor-query-operation-reduced-hash-2.10.1.tgz", "integrity": "sha512-9hX25ztkbNxnaUd7Gtilok+9WJkr/s3a3y4axLoYX4/nOogYN+nZRKChvNSn4qn/lWvpG5VWv4+q0en1fP+AGA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-hash-bindings": "^2.10.0", @@ -2536,14 +2485,12 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, "license": "ISC" }, "node_modules/@comunica/actor-query-operation-service": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-service/-/actor-query-operation-service-2.10.1.tgz", "integrity": "sha512-GvpvhUmhkVFOCLrmcblgIPqi91XPRog5WkC9NFMRCToaSNAMQq82DX2dvwzn3IFItcmyZrmy+GYoaQ9miK2uVQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", @@ -2560,7 +2507,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-slice/-/actor-query-operation-slice-2.10.1.tgz", "integrity": "sha512-KOBnTIUvwf28WB7oHevUC/xciEdH5gLg7MN8DvamkAkUiUjviEsRpkswUiD8lFe1dAs0ekA4pC0NoZ8BWp3uqA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2574,7 +2520,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-sparql-endpoint/-/actor-query-operation-sparql-endpoint-2.10.2.tgz", "integrity": "sha512-nbBzVHhYHUu/9qg9ZzTw7rKvsRb3ViBvM+Fye0oMXojZUbyu2WI6eLFUc2Ze1/LYDNf/1KHNpkg6OdsiEi8HFQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", @@ -2598,7 +2543,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-union/-/actor-query-operation-union-2.10.1.tgz", "integrity": "sha512-Ezi2bAa9r6yyffXDDUPLlKoszsXnuhDUeQSQuU3c7JEAcwip3wC3zMNkavowwfRZ/1D5doitmUEdw2lAd+xloA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2615,7 +2559,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-add-rewrite/-/actor-query-operation-update-add-rewrite-2.10.1.tgz", "integrity": "sha512-is3mrCPciExrlny5JbCvB011kUNYE9/fzQc/zmA3h24S5hHZbygA9mSS+dI85IwwqdKPYlrEqfn8c0kCVWMKyw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2629,7 +2572,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-clear/-/actor-query-operation-update-clear-2.10.2.tgz", "integrity": "sha512-+sf6+LvXdKBv2pCuBH/ad5QdpheZSPEvw19UoaPQRQyQVBzIskOtfs4rwJHSn/YmoqhbstKZszakad3oxWwTTg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2645,7 +2587,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-compositeupdate/-/actor-query-operation-update-compositeupdate-2.10.1.tgz", "integrity": "sha512-IVNouBPFQLOczhW3qHyEoyxWrc7wnVT2vPwRHEaGlfnSiYAX42XSNLb9jR0XjB70wh3Civue4Ovs3upOXdrN3Q==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2658,7 +2599,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-copy-rewrite/-/actor-query-operation-update-copy-rewrite-2.10.1.tgz", "integrity": "sha512-l/3AM35hjahyHmiLoB3FPm0Jlhdmd/vqgOGj7V3Ra+TfHo5h8XOB3uzG78Q06HQNw4iyONBZc5lLlYXkzRd5lg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2671,7 +2611,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-create/-/actor-query-operation-update-create-2.10.2.tgz", "integrity": "sha512-g3DwLkYFTU8uZoIOV7oNPWStBmqvnBBPvLngG19MQQezuVoh8w88efxhbN0B/khi5/v4qcLsr7C0ffAaPF8Fbg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2685,7 +2624,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-deleteinsert/-/actor-query-operation-update-deleteinsert-2.10.2.tgz", "integrity": "sha512-FiRCLUAxkDoFpOe9jKC5llI7njbFdb1N8McRvZjBazUS4XDutjTZEkcKLs6AcRyG3esfHt6gNm6PqCuZ+aP8TA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-query-operation-construct": "^2.10.1", @@ -2703,7 +2641,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-drop/-/actor-query-operation-update-drop-2.10.2.tgz", "integrity": "sha512-N/878InwoyQfysjCyo9r+H82eUlNeEGODJ95gCvzF/QGRc11N3dfcd3XijyHQ9OKAoQ9oR5gcS829LB3BDtKHg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2719,7 +2656,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-load/-/actor-query-operation-update-load-2.10.2.tgz", "integrity": "sha512-lQb5fxb1+ZFbQkylmepze+e+LtVmVNvAvFBvjxUSfCT62uIKKHMeh1So5kTrGD0Co4ABCs1h6o9WB+8yQzFtQw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2735,7 +2671,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-move-rewrite/-/actor-query-operation-update-move-rewrite-2.10.1.tgz", "integrity": "sha512-GDLSHG2++EAAyUKhDu+mM6QfMTuzM8dS24HqeQL5Wzbkdc2KTmNKyJuhJw6SfXr6EiF/kxf1GPY6zwjcwACx/w==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -2748,7 +2683,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-values/-/actor-query-operation-values-2.10.1.tgz", "integrity": "sha512-++9IgCVCQPIF8fzZLmrVpxPj8eI9TvkLshHAugQQBnhSijrDMUudW9eoA+eFmCaD/Ru7YtlKe3OJzRGV8FCG+Q==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", @@ -2765,7 +2699,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-parse-graphql/-/actor-query-parse-graphql-2.10.0.tgz", "integrity": "sha512-l3RrkxElDYV4weXt3vpC0Q0She4AhbvPbPDronQulgN9nFAZhz4z9k8800T5uWMsL98wHNNXDFlnFk5S38lsow==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-parse": "^2.10.0", @@ -2778,7 +2711,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-parse-sparql/-/actor-query-parse-sparql-2.10.0.tgz", "integrity": "sha512-DUVAuSSNn0AyvLruOpRpLZBsr96Q4LuV1gcO+alKZALtfOZikRKY/3sXz1NUkaRQc7qDH9xFFTFrfJd0jLvlDA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-parse": "^2.10.0", @@ -2792,7 +2724,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-json/-/actor-query-result-serialize-json-2.10.0.tgz", "integrity": "sha512-GuVcsOEhKgnVPT0AaCn8sJl/Uj5UUjUktEJpuMx1UAYt0//jcQsezJslYWmJrfXE/WJYidynyDxm8z3+jwLF7A==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", @@ -2805,7 +2736,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -2822,7 +2752,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-rdf/-/actor-query-result-serialize-rdf-2.10.0.tgz", "integrity": "sha512-TBXJrDs5brRMFg8UisXS/F1vJw8nUtLhjugNZcd4ST8J965Ho1aNopydp4PMmwINMRxHhHtWJGwIB2Z5xD2lDw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", @@ -2835,7 +2764,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-simple/-/actor-query-result-serialize-simple-2.10.0.tgz", "integrity": "sha512-pS7+aB9Rym1B5oi+O68NFjEq+EwpCRYtTIxGBp39CTQ0F7m4edt9QwqmARqveJPryK5X66ACvjxvutEaTgWI8w==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", @@ -2849,7 +2777,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -2866,7 +2793,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-csv/-/actor-query-result-serialize-sparql-csv-2.10.0.tgz", "integrity": "sha512-Vk+7oTIPigDENK3CnV56vLfvMZVjHc3p2F4a49WDHfMgRrfQKJSQkx603vjW35n3tmUB8JSgRXr/+v7LK83KYQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", @@ -2879,7 +2805,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -2896,7 +2821,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-json/-/actor-query-result-serialize-sparql-json-2.10.2.tgz", "integrity": "sha512-+J7SWXc4nXHzmQMk6q8MScrLNKdqX+/xQe6XCk0zDbDAt3/8EJh/2ROYFp4fEQyPDFWOwN4xpALgHRIh8PQRAQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", @@ -2912,7 +2836,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -2929,7 +2852,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-tsv/-/actor-query-result-serialize-sparql-tsv-2.10.0.tgz", "integrity": "sha512-TgA2WIXKdu/SrbHEP8HvGoLjhDOZnBoHsGsLFSHpxY/Uwk21rZqJLBEkhuhkUtGYzQPJ1n6Wmpjz9lBrUHGJPw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", @@ -2943,7 +2865,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -2960,7 +2881,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-xml/-/actor-query-result-serialize-sparql-xml-2.10.0.tgz", "integrity": "sha512-8RDj5ZN23HnIc6zI5pD5XKi2pyg2cx6DhI7VDRcboi7v0DxfROuQqSEtbQ8m/W6Pngdz01ySogRcIVJCzRzBLQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", @@ -2973,7 +2893,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -2990,7 +2909,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-stats/-/actor-query-result-serialize-stats-2.10.2.tgz", "integrity": "sha512-jhj/vLDRxLuRMonBaqICt4saM9/UO9wJBT3Jxk7Rp73aQWLo+lILXKzcWpuxkh/EFx8raLUBmbjWCduamU1DzQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", @@ -3006,7 +2924,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -3023,7 +2940,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-table/-/actor-query-result-serialize-table-2.10.0.tgz", "integrity": "sha512-AAPrgM/rbsSThRu9jkfJhBUeTUwQTLHNVbIn8El+Akvz+Fueoi6oSi3SslpPMHOvIUiOAgCZ05f2RbBLlhP03g==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", @@ -3039,7 +2955,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -3056,7 +2971,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-tree/-/actor-query-result-serialize-tree-2.10.0.tgz", "integrity": "sha512-sEyIzoSTV11YPY6r4fn6fwrf3WjLD6GrwXMTuevsDAKDYaMYxyriH3T/LMLLBEURy8SLD1I1Fpw/qaZisRmLTg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", @@ -3071,7 +2985,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -3088,7 +3001,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-entries-sort-cardinality/-/actor-rdf-join-entries-sort-cardinality-2.10.0.tgz", "integrity": "sha512-6dd/29q6QuQN2Ap090VA0KUFmmnHalPxFJb4MGh5nIbWZH0F/EvI+uK5vPx29cttr1yXL5u+MbJWaLb3IxwILg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-join-entries-sort": "^2.10.0", @@ -3099,7 +3011,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-hash/-/actor-rdf-join-inner-hash-2.10.1.tgz", "integrity": "sha512-nUtdS3NJGKSJQC8KjDVz4TEDmkXHBYQi0/bwnAXCDl1phhq8lgv+YEmRDNe/kuCze7HyqEt98rlSJ+ZhvcHXVQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", @@ -3112,7 +3023,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-bind/-/actor-rdf-join-inner-multi-bind-2.10.1.tgz", "integrity": "sha512-tNZ2Q7z44Yr0iIFkvtTVAsts4v0IoC4b0FYaIUeYav4y5JOlR74hWWijTAzVfb31dTMsAp3r+y0xGIdd75LRHQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -3129,7 +3039,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-empty/-/actor-rdf-join-inner-multi-empty-2.10.1.tgz", "integrity": "sha512-z6a3qENwuvSU0PvqOySrsHsWSUvzfWd1xIYwEvKuEIJ9vYPoefIUgggx08E95ZF/k+PxZ0vKEywFpBSUKUzGYA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", @@ -3143,7 +3052,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-smallest/-/actor-rdf-join-inner-multi-smallest-2.10.1.tgz", "integrity": "sha512-MXwIvq+viDCmsxJwD4+fwMhwZINWva3jtQ3j5ne6DXgZYUJUFOw3VujvCP4/cl075RuSxYlXgy6ETHLa1TNr7g==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -3158,7 +3066,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-nestedloop/-/actor-rdf-join-inner-nestedloop-2.10.1.tgz", "integrity": "sha512-nFjGMrAIrRjRcsaU8UQXLbsDODVdf4LDpVNVQIrjfoWzhOIy13ApDQrqtuObaGVfryiFgt34zVEOwMWezWzl0A==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", @@ -3171,7 +3078,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-none/-/actor-rdf-join-inner-none-2.10.1.tgz", "integrity": "sha512-4mqsuqvLSuXMbgY0PghqK5hmBGH5YkRTwUOpGpBE0EVQaiAoQOME0uVslkt2TBzUx5IQJC+trr/80sbA9mAhMw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", @@ -3185,7 +3091,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-single/-/actor-rdf-join-inner-single-2.10.1.tgz", "integrity": "sha512-RfnwTEsuXNdR0cNRWaCvNPlfD5KyuScsc/55j/9mr8yqGUTE9h9Om1Is5u7xnpRMxGOEqwVP6apK3ZxsZqlL/w==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", @@ -3196,7 +3101,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-symmetrichash/-/actor-rdf-join-inner-symmetrichash-2.10.1.tgz", "integrity": "sha512-beFGkMUe3pTADtMXXPU8ab/IMULj+Hkg3Iah0zgrVZgwWH1Kgfkj/2qp32Ll5y9qcRbio4ruruKlHNXJJUU46Q==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", @@ -3209,7 +3113,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-minus-hash/-/actor-rdf-join-minus-hash-2.10.1.tgz", "integrity": "sha512-wIaB/EpuySaARhimoLzrE0cTH0TgVkL43IAtYX7ECwH9Qcv8blO4zbL4q2KUkY7OKZRM892aqMfo3kO1vMIK7w==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -3223,7 +3126,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-minus-hash-undef/-/actor-rdf-join-minus-hash-undef-2.10.1.tgz", "integrity": "sha512-tz5LdeAHnylEQIq4bRfFqaH89WZXkkdFxEshqxWijFBp5wprUYiotMDrBo9zDFaPquhs42fILtTzLY9yaalc9w==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -3238,7 +3140,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-optional-bind/-/actor-rdf-join-optional-bind-2.10.1.tgz", "integrity": "sha512-6dOoI/rzRZ0RUyv2WlToClE42Z2YJE5xcSrot7haT2eMdxbzr1KjyasHBcIIkSK+WViDO006lXZ1Hi4tJm9uuA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-rdf-join-inner-multi-bind": "^2.10.1", @@ -3254,7 +3155,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-optional-nestedloop/-/actor-rdf-join-optional-nestedloop-2.10.1.tgz", "integrity": "sha512-d7KUDjEKZszizd4SBvYkK2A6lScrq9ciEgzdrrp6IYZhIGAhJLTgPNg3Js3NEjpE7oj4KWl2WwKJe2sWcJbKJg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", @@ -3267,7 +3167,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-selectivity-variable-counting/-/actor-rdf-join-selectivity-variable-counting-2.10.0.tgz", "integrity": "sha512-D7tdzxA93bpZGXI5emJyvzk6LabeAnzcQMU/V5x2QwJxyoNr+LFbesBHDDP3/u4UJwmeP0a+dU0e5mbpJujSXw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-join-selectivity": "^2.10.0", @@ -3280,7 +3179,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-cancontainundefs/-/actor-rdf-metadata-accumulate-cancontainundefs-2.10.0.tgz", "integrity": "sha512-N3rwX4kT9rkW+89q4xCjO3KKG0DbeNIyeMWDzeh2vTw8nAXYyTiPjHYvx/6VUMzhFUWF+50VtVv8ZJPO6nEapw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", @@ -3291,7 +3189,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-cardinality/-/actor-rdf-metadata-accumulate-cardinality-2.10.0.tgz", "integrity": "sha512-UpC5PbhzEDCAxTUqETH89uRaFRqmP6YuWt67OAPo5wocv2tQDs6/SdLwS695XnfeMJdfDHsXyoUzQg3r8dwydw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", @@ -3303,7 +3200,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-pagesize/-/actor-rdf-metadata-accumulate-pagesize-2.10.0.tgz", "integrity": "sha512-r364CWGr5rMpV2ec3TsD+9Yhvi1JUuRXLBQqtgzjAPbpWjfDSM1Q4h0P1z9h3D+sdUMEX/0iGAY3AH2FjJAxwA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", @@ -3314,7 +3210,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-requesttime/-/actor-rdf-metadata-accumulate-requesttime-2.10.0.tgz", "integrity": "sha512-SpG7gxxAPoW2NbgyZ2UNpwluJ+IvCOYIRDTXmVTAK8bntav+/ZG30yfESFBjB3LmJEwAnktAsTgM6OhldohPKw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", @@ -3325,7 +3220,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-all/-/actor-rdf-metadata-all-2.10.0.tgz", "integrity": "sha512-dHaSxHTdneWVBMAF6WqZrGD+u4TPpHQaJ2WutK1NvQNPIiF0N7249aGTvXBIXZfsKYyQ73PUORDeLEOjX+tT7g==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata": "^2.10.0", @@ -3337,7 +3231,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -3354,7 +3247,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-allow-http-methods/-/actor-rdf-metadata-extract-allow-http-methods-2.10.0.tgz", "integrity": "sha512-aCSX+lWcmz5Q/g34VJEblczqDS6N+gJ3AlcOcGuqhd6qHRU17dMeCIZCk8p6p+AhbJ30w4BTsrZRY2sF0MGCVA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", @@ -3365,7 +3257,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-controls/-/actor-rdf-metadata-extract-hydra-controls-2.10.0.tgz", "integrity": "sha512-T6F5OaQNqrHVIwSGNRX6YPDBoAOYBQj3NTPID7vQae7J80oEX+CLoTkeJJwfHpoUWx0ihs8J0UkABgK3AWeylA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", @@ -3379,7 +3270,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-count/-/actor-rdf-metadata-extract-hydra-count-2.10.0.tgz", "integrity": "sha512-nOMLN+9OSLFOVz6jc9pcyDizhcBBVT2azn7StTMK5ukFCcPCENS4y6lYhC5cijKZY7vUa7U6VzhX2vvw20MKDA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", @@ -3390,7 +3280,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-pagesize/-/actor-rdf-metadata-extract-hydra-pagesize-2.10.0.tgz", "integrity": "sha512-mD8KS2ENr2rbfBWxtVpxkB/Y2LyyAnwQU5UYKkpet8ELhlostdGROzYCNIAgfOgirOAsLgVkbmrX0XBGouI7rA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", @@ -3401,7 +3290,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-patch-sparql-update/-/actor-rdf-metadata-extract-patch-sparql-update-2.10.0.tgz", "integrity": "sha512-U5ARpeWKShbbSfdtJeb6nyPcsdtMwEo2dp56T4aSTNSBKtAhQ78DjOxb23WIU/VR/qpw2yWcsbPnNJvSaLpRVQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", @@ -3412,7 +3300,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-put-accepted/-/actor-rdf-metadata-extract-put-accepted-2.10.0.tgz", "integrity": "sha512-cGJg6tMMCOSGcitkUBN7b9/Sg5zgwWQC52g+Zk22o4i+Zgt24WLjfXXbnGWGoV+h9YZo8pkg7v1cpE5GpapNCg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", @@ -3423,7 +3310,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-request-time/-/actor-rdf-metadata-extract-request-time-2.10.0.tgz", "integrity": "sha512-zh3coTPZMbgF4mXKCO3bzn99INt9HFraKMZWc9s/kwBE6vhNZ5246Ql/6z1v7mccoIbanhI72gtjFTGGHru80Q==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", @@ -3434,7 +3320,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-sparql-service/-/actor-rdf-metadata-extract-sparql-service-2.10.0.tgz", "integrity": "sha512-Xc+id8FURTmY3ccb4hcVuAaOou5UqD+1YkTnGfMWQxVgMlFC1eeBvwWVzvedj0sHhnfbLgDwbCVYLCK1lNndSg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", @@ -3446,7 +3331,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-primary-topic/-/actor-rdf-metadata-primary-topic-2.10.0.tgz", "integrity": "sha512-nabxkiYSPGPRylhYjGxF0KiJ/K8QiG1N/am/t8eaqwyjn/fo2/tHl0yXUaLLx0E8fChfbBv10sVlmLhsLrg8DQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata": "^2.10.0", @@ -3459,7 +3343,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -3476,7 +3359,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-2.10.0.tgz", "integrity": "sha512-zgImXKpc+BN1i6lQiN1Qhlb1HbKdMIeJMOys6qbzRIijdK8GkGGChwhQp7Cso3lY1Nf4K7M3jPLZeQXeED2w7g==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", @@ -3492,7 +3374,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-2.10.0.tgz", "integrity": "sha512-JLfiDauq4SmpI6TDS4HaHzI6iJe1j8lSk5FRRYK6YVEu8eO28jPmxQJiOiwbQiYqsjsV7kON/WIZSoUELoI4Ig==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse-html": "^2.10.0", @@ -3504,7 +3385,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-2.10.0.tgz", "integrity": "sha512-9K3iaws9+FGl50oZi53hqyzhwjNKZ3mIr2zg/TAJZoapKvc14cthH17zKSSJrqI/NgBStRmZhBBkXcwfu1CANw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse-html": "^2.10.0", @@ -3516,7 +3396,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-2.10.0.tgz", "integrity": "sha512-7XYqWchDquWnBLjG7rmmY+tdE81UZ8fPCU0Hn+vI39/MikNOpaiyr/ZYFqhogWFa9SkjmH0a7idVUzmjiwKRZQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", @@ -3533,7 +3412,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -3550,7 +3428,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -3567,7 +3444,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-2.10.2.tgz", "integrity": "sha512-K4fvD0zMU22KkQCqIFVT5Oy2FREEZ9CAo9u6kOcsMxEvg9aHGIM6hkaXR8I+1JCx1mDuEj3zQ8joR4tQh8fYCw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", @@ -3584,7 +3460,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-2.10.0.tgz", "integrity": "sha512-o1MAbwJxW4Br2WCZdhFoRmAiOP4mfogeQqJ4nqlsOkoMtQ45EvLHsotb3Kqhuk5V+vsTxyK5v/a4zylGtcU7VQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", @@ -3596,7 +3471,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-2.10.0.tgz", "integrity": "sha512-HoJN52shXY3cvYtsS0cpin9KXpW3L7g1leebyCRSqnlnHdJv5D6G0Ep8vyt2xhquKNbOQ7LnP5VhiDiqz73XDg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", @@ -3608,7 +3482,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-shaclc/-/actor-rdf-parse-shaclc-2.10.0.tgz", "integrity": "sha512-i6tmuZuS+RtDiSXpQc3s/PxtCqwIguo4ANmVB20PK4VWgQgBwoPG7LlNcJ0xmuH/3Bv6C2Agn18PLF6dZX+fKw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", @@ -3624,7 +3497,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -3641,7 +3513,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-2.10.0.tgz", "integrity": "sha512-68r/6B/fEyA1/OYleVuaPq47J+g4xJcJijpdL1wEj7CqjV+Xa+sDWRpNCyLcD/e1Y/g9UQmLz0ZnSpR00PFddA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", @@ -3653,7 +3524,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-links-next/-/actor-rdf-resolve-hypermedia-links-next-2.10.0.tgz", "integrity": "sha512-SpW46Tx8ksAxotGK2UEpvGcYjKwxB0x2KnbGmKHvo59embRjcUL/bmq3uHqZe7UwfynR2wDaRzMdVVSQccWSyA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-resolve-hypermedia-links": "^2.10.0", @@ -3664,7 +3534,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-links-queue-fifo/-/actor-rdf-resolve-hypermedia-links-queue-fifo-2.10.0.tgz", "integrity": "sha512-Hh53Ts6z6MxKXhZZxgpXfc1hgNzIX/xbA9mD2Au7ZfAa5V5j8zPaVVKe06sxILQBTPMsFh1idP3vIqRwRXpsvg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-resolve-hypermedia-links": "^2.10.0", @@ -3676,7 +3545,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-none/-/actor-rdf-resolve-hypermedia-none-2.10.0.tgz", "integrity": "sha512-C4sJ0QJetq3QxsRkYstK5YXRYDGkcVTfyBOFUMYj7PbVakapnl8qPZkVL7VPMLVLVOfyBQHTT43Yp6Nl8VvmSA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-rdf-resolve-quad-pattern-rdfjs-source": "^2.10.0", @@ -3688,7 +3556,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-qpf/-/actor-rdf-resolve-hypermedia-qpf-2.10.0.tgz", "integrity": "sha512-1iP9xD72bxFBLpbfC7Ev0Xoc+0rwusPFdnoYbEtqMHRfiM0h3nNrsSxyzdGJMAZaJeQzmBZIEiwR5pbo9qpmaQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-rdf-metadata-extract-hydra-controls": "^2.10.0", @@ -3709,7 +3576,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-sparql/-/actor-rdf-resolve-hypermedia-sparql-2.10.2.tgz", "integrity": "sha512-UFsTuzHvjK/XhRGqfHr3WAVr+iBv6XTuU1fV9EuOaB+odclQ+H6TGtmW6/38CSufj86Y691VBXMk29zdWfrmGA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", @@ -3730,14 +3596,12 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, "license": "ISC" }, "node_modules/@comunica/actor-rdf-resolve-quad-pattern-federated": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-federated/-/actor-rdf-resolve-quad-pattern-federated-2.10.1.tgz", "integrity": "sha512-OBRTTUWkXKa0ibDzcYLG7aKf3BfQp2j75xm65brRvwstNLmye9ZEq1PrNhbP5UDqQQeCgzPBrb0eGC8Vxek2RA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -3759,7 +3623,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-hypermedia/-/actor-rdf-resolve-quad-pattern-hypermedia-2.10.1.tgz", "integrity": "sha512-XkJOYu0bizWHsvgiaGyNAnRZsqv2risREK5SY14VCMXDYqmOWJLDppveGEUZAoEKEJuo4ZLDlP2gLDGzc0krxQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-dereference-rdf": "^2.10.0", @@ -3789,14 +3652,12 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, "license": "ISC" }, "node_modules/@comunica/actor-rdf-resolve-quad-pattern-hypermedia/node_modules/readable-stream": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -3813,7 +3674,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-rdfjs-source/-/actor-rdf-resolve-quad-pattern-rdfjs-source-2.10.0.tgz", "integrity": "sha512-d6AlrngvZaVgoiiyMhkf6uiYaFZZdn/UZLo0FhZ++or1NZXo5KxK4UMgdiIygvPEiuuVzy0W1djHgOQ1rgh50g==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-resolve-quad-pattern": "^2.10.0", @@ -3830,7 +3690,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-string-source/-/actor-rdf-resolve-quad-pattern-string-source-2.10.0.tgz", "integrity": "sha512-v6QOBtXTXrDUZRHocrm2OYCsxGpyTScka/n85cewCcInqVGJP9J6zpdwetzvIy7wVJkac7JQabd96OEyDMK3sg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", @@ -3848,14 +3707,12 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, "license": "ISC" }, "node_modules/@comunica/actor-rdf-resolve-quad-pattern-string-source/node_modules/readable-stream": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -3872,7 +3729,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-jsonld/-/actor-rdf-serialize-jsonld-2.10.0.tgz", "integrity": "sha512-u1M5N7BSrkhS461fV6QXKMh6TnvpoEiSHPru7wJg1kGqR9q3reuQeKLf/U23JDYb1kom8uU3R7aBpDIjgVc49Q==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-serialize": "^2.10.0", @@ -3884,7 +3740,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-n3/-/actor-rdf-serialize-n3-2.10.0.tgz", "integrity": "sha512-CoDktUI3YQuI7UBV+fQOdKl+5XjBx0XTOF9XxEDiNg5nwndEmDvq6C23fSHfkqX3/xDlnsuS/YysHAqXCrYoiA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-serialize": "^2.10.0", @@ -3896,7 +3751,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-shaclc/-/actor-rdf-serialize-shaclc-2.10.0.tgz", "integrity": "sha512-gp4bu4+aPtMk4bavXP27uD9X9bpa2F5u6/JtsaX2qwcqVI0x1tkVQOkm2RkUhafcHNj0Fz6lQ3aXmRIAQvaefg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-serialize": "^2.10.0", @@ -3910,7 +3764,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -3927,7 +3780,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-patch-sparql-update/-/actor-rdf-update-hypermedia-patch-sparql-update-2.10.2.tgz", "integrity": "sha512-z/fOzYlA5fPtauTUISYhCWMKtEpkvKkSZIdvcgeGvetLnvw4fytfVHdtPhirZYmPya10GCeTG7m2iHvK53lOsQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", @@ -3946,7 +3798,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", - "dev": true, "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" @@ -3956,7 +3807,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -3977,7 +3827,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -3994,7 +3843,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-put-ldp/-/actor-rdf-update-hypermedia-put-ldp-2.10.2.tgz", "integrity": "sha512-Tof/mU0Lkt7HP3SwHXODczxvAFelWzAHdP+ap4Upr47K6Zg5GRPwJv//2AcPvT3p42Li6wuMz/4nh/A3pcnCKA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", @@ -4012,7 +3860,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", - "dev": true, "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" @@ -4022,7 +3869,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -4043,7 +3889,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-sparql/-/actor-rdf-update-hypermedia-sparql-2.10.2.tgz", "integrity": "sha512-uw1NIAoxuAechsjTQ6b53XpGOMx3Mp5uEL5LtUwNC6COJE6tzWH8wG54Dwj+0VNxsgqsSircKu2xwGl1uOsOPg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", @@ -4062,7 +3907,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-quads-hypermedia/-/actor-rdf-update-quads-hypermedia-2.10.2.tgz", "integrity": "sha512-kzGfDv0PqcOIIULJLG8jtA/dOcrNUodu98J08ruSuYQBbnFgAZ07MG1TkWhEI/AM6D0w7hXkgQaC1sGWn4gVmA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-dereference-rdf": "^2.10.0", @@ -4080,14 +3924,12 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, "license": "ISC" }, "node_modules/@comunica/actor-rdf-update-quads-rdfjs-store": { "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-quads-rdfjs-store/-/actor-rdf-update-quads-rdfjs-store-2.10.2.tgz", "integrity": "sha512-anX3SovvY2H8KwuWu8G9EqtITmCsz12jfqunNn5Efcch/bm4HyHTC1GThx77m6qpCdg4OMx8TLhNrH1II1UM1w==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-update-quads": "^2.10.2", @@ -4103,7 +3945,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/bindings-factory/-/bindings-factory-2.10.1.tgz", "integrity": "sha512-AUD3VWlCYljgk5jfaMejSIL9CiX3aV/cAn314e/dYP/rrnVgachcCwyaD8hKHWTBHDs5rcGxr/iwruBOfsERvQ==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -4116,7 +3957,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-context-preprocess/-/bus-context-preprocess-2.10.0.tgz", "integrity": "sha512-eJ5CkzbnmxB9fkr2F05jnnjcaowp+yxd0+pAtvx5MLl2Kpx3nWLqHPcl4/EVVDPD+i0TEkq4AXQ1BD9BMuXK0A==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4127,7 +3967,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-dereference/-/bus-dereference-2.10.0.tgz", "integrity": "sha512-nWyQXiH7zbiPTVttWVKJHykhV4IuahfhfUwPx3Op+cVsK489Su84dnGeSmPkxTAFFuxe6wU6ZEH4i7PDu48YvQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-abstract-mediatyped": "^2.10.0", @@ -4142,7 +3981,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-dereference-rdf/-/bus-dereference-rdf-2.10.0.tgz", "integrity": "sha512-WY/wPmFpO76wwJ2D5Aus43ZbYnBRLvQ0EOp4yywO0lBiq6F0JisjCVCM4EtWouOEAAfqEoIjHXGyC3gPWqm+SQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-dereference": "^2.10.0", @@ -4155,7 +3993,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -4172,7 +4009,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-hash-bindings/-/bus-hash-bindings-2.10.0.tgz", "integrity": "sha512-EdzIUgpSWMtFVxEJSesuQpMkfgznDap+U0F9epotxXc20Gg/qjTzs1gF6NkpDpaidQ7cFlV16vdbdfi8uiZ+mQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4183,7 +4019,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-2.10.2.tgz", "integrity": "sha512-MAYRF6uEBAuJ9dCPW2Uyne7w3lNwXFXKfa14XuPG5DFTDpgo/Z2pWupPrBsA1eIWMNJ6WOG6QyEv4rllSIBqlg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4197,7 +4032,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-http-invalidate/-/bus-http-invalidate-2.10.0.tgz", "integrity": "sha512-9DevRUzuCOfHFtsryIvTU6rOz6vMbnuDzerloBoNsLFVzQCU4wPNZbxiOn0+GMDXxw7M3KgYd+KFxI2kGObVWA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" @@ -4207,7 +4041,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-2.10.0.tgz", "integrity": "sha512-hJejHa8sLVhQLFlduCVnhOd5aW3FCEz8wmWjyeLI3kiHFaQibnGVMhUuuNRX5f8bnnPuTdEiHc1nnYHuSi+j8A==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4218,7 +4051,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -4235,7 +4067,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-optimize-query-operation/-/bus-optimize-query-operation-2.10.0.tgz", "integrity": "sha512-qawKJprbVc+dfjBgVzV45UEo+jZBzY3dRo0a8UkXSvgSWPcX18SGrURl2VL4sZZSAyXQBMrGUwH2eUD8l26ZJQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4247,7 +4078,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/bus-query-operation/-/bus-query-operation-2.10.1.tgz", "integrity": "sha512-PoUSJeKaMZtZu+ZtB+5ABjPOiW1YjxOdLE1N5znxX2oiDKCQHmAXVaVkbVx1jPDLGYFNcOlOSzpRMqLQ/L4JIw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", @@ -4266,7 +4096,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-query-parse/-/bus-query-parse-2.10.0.tgz", "integrity": "sha512-1LynxACgCYTuBH/JMRG/IGaWtTVwr2O8wxOosCId2W3BDW9nf2DSCyOdnxnCSMSKfnLFWiaVuKybn24OLXW2dQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4278,7 +4107,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-query-result-serialize/-/bus-query-result-serialize-2.10.0.tgz", "integrity": "sha512-9P5KUzmXvjtLbd44UVxYNB0yqAHx7molBUc7aysUQ3pbIcP/A57GXzAfiKueeiZ9cVRRG/BGsVoDGVj59tGWNg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-abstract-mediatyped": "^2.10.0", @@ -4290,7 +4118,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join/-/bus-rdf-join-2.10.1.tgz", "integrity": "sha512-pPFoJVHY5p931jIKt+9sqRCGiuuf8yFqrlOOAd3un72cwuyhwNHvn52xwvcPlNUAySz/kDmW+U0syflqI6VdAw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", @@ -4309,7 +4136,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join-entries-sort/-/bus-rdf-join-entries-sort-2.10.0.tgz", "integrity": "sha512-17FQrdYtzjY84OI/ZvipJKD0ei3IySmsWwaGC9sIJn+1W4LBVKudTu5S0tzGTKTb0URhS4mrCliUBzyINtIZMQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4320,7 +4146,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join-selectivity/-/bus-rdf-join-selectivity-2.10.0.tgz", "integrity": "sha512-YjoygSiH6r4SAYqz6gpvUql2vnznPVE62IsWqYnjFWeH1kBsxO5yEOO01s2FfN3jLcfsytTyG7VNTCN788YbaA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4332,7 +4157,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata/-/bus-rdf-metadata-2.10.0.tgz", "integrity": "sha512-LRUnHVqIzyUlmPKPNAYOusCF53iN8KEX7l/VinlA7NH3XBLhTkFoth26MVqIVtjtdH0hVfUVpkwy2kFEJpGldw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4343,7 +4167,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata-accumulate/-/bus-rdf-metadata-accumulate-2.10.0.tgz", "integrity": "sha512-XG/3s4a3yGpYt4H+sn9T2zTaUxLG+37dmhRhXv2cBmR4gaCXkglERPaOrQygHldEF+4ITF3RmXHCgANsQ1AwQg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4354,7 +4177,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata-extract/-/bus-rdf-metadata-extract-2.10.0.tgz", "integrity": "sha512-KcMZh+7kHjdCIMkLFki99tQH1arVp/evVnk0BGXfWd+ca3eCLrr42tb1tGfN2JkaCSxgtzWO4DRZcSzJ4sI2dQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4365,7 +4187,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-2.10.0.tgz", "integrity": "sha512-EgCMZACfTG/+mayQpExWt0HoBT32BBVC1aS1lC43fXKBTxJ8kYrSrorVUuMACoh4dQVGTb+7j1j4K0hGNVzXGA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-abstract-mediatyped": "^2.10.0", @@ -4378,7 +4199,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-2.10.0.tgz", "integrity": "sha512-RZliz4TtKP63QggoohGuIkGb6lq0BoYJ4aztKtGldWtPAVP/pdEvlDpiZWLB/j19g7S2aDLNY/lJtZ5efM1tHQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4389,7 +4209,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-hypermedia/-/bus-rdf-resolve-hypermedia-2.10.0.tgz", "integrity": "sha512-DjCoAg62pPzEOH5gKM9gaL4CVUmhBsmyOzao0tRu20G7L6RnTIFtRaOwMN2z+2uC7AkJRHZY12bPUb+yM8V0UQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-resolve-quad-pattern": "^2.10.0", @@ -4401,7 +4220,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-hypermedia-links/-/bus-rdf-resolve-hypermedia-links-2.10.0.tgz", "integrity": "sha512-Mcz6bUdZySLK2om0cMt86n5TOThZOTpEFq2M42n7YAE3LL2KMnMDdhkaOC6SyY4tS0HGAuhce21Uq+Gz8Veq2g==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4413,7 +4231,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-hypermedia-links-queue/-/bus-rdf-resolve-hypermedia-links-queue-2.10.0.tgz", "integrity": "sha512-f9amJk7ikktRfOoRnwag1KMTuo9v+PiDEVQA0dijl+jhcispKdjG6XK0MdZ1KSEmtUWejjS6nMRGvfJdM37eog==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-resolve-hypermedia-links": "^2.10.0", @@ -4424,7 +4241,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-quad-pattern/-/bus-rdf-resolve-quad-pattern-2.10.0.tgz", "integrity": "sha512-JEI4DqSprGmrbfmiIwc8PbS+HCoxXwmMtp7gDpoB1HyYKIHzzu9DOIiwmYEDRO5dwV+uTwaYKZz/mUPm2U6EEg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/context-entries": "^2.10.0", @@ -4439,7 +4255,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-serialize/-/bus-rdf-serialize-2.10.0.tgz", "integrity": "sha512-AmbN9MUgw6B6AfrIqR1u7PWHZFgbJz+j1SFJVtnHQ51hEpG+Ig9nNG2IWjHOsFK0xBBQ/wXgNmt/cufEMRM1SQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-abstract-mediatyped": "^2.10.0", @@ -4451,7 +4266,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-update-hypermedia/-/bus-rdf-update-hypermedia-2.10.2.tgz", "integrity": "sha512-GbRMxXN4kx+4UPsnGxWjyn770m675yy2gWK/xy/5qQIxxRTcuGk4wm/994FZQXpwLX1E0xJ+YKxMgXTIlEWmQA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-update-quads": "^2.10.2", @@ -4462,7 +4276,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-update-quads/-/bus-rdf-update-quads-2.10.2.tgz", "integrity": "sha512-+iVpAHps8ytGq8AZF4xTZbLyskS40JPn64MO+OAuYovqXLlezp6vh9eJ5qETuP9NP+BpZDk3nOU3Ky3fb0QCUw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-rdf-resolve-quad-pattern-federated": "^2.10.1", @@ -4479,14 +4292,12 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/@comunica/config-query-sparql/-/config-query-sparql-2.7.0.tgz", "integrity": "sha512-rMnFgT7cz9+0z7wV4OzIMY5qM9/Z0mTGrR8y2JokoHyyTcBGOSajFmy61XCSLMCsLLG8qDXsJ4ClCCky3TGfqA==", - "dev": true, "license": "MIT" }, "node_modules/@comunica/context-entries": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-2.10.0.tgz", "integrity": "sha512-lmCYCcXxW8C6ecFH2whZCt31NT1ejb0P/sbytK7f4ctyA06Q8iYFEcYE4eWOXMdpfkwkcnz31x9XL77OGeSC2Q==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4500,7 +4311,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/core/-/core-2.10.0.tgz", "integrity": "sha512-onsGs2iKHUPRxxMOdx42vdxslk8q9FQZdRjQtHJ6SGiCpJwIL9ciBgPIOl2RL2YfzXHemr/0umeNOppRDcWhJA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/types": "^2.10.0", @@ -4514,7 +4324,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/@comunica/data-factory/-/data-factory-2.7.0.tgz", "integrity": "sha512-dSTzrR1w9SzAWx70ZXKXHUC8f0leUolLZ9TOhGjFhhsBMJ9Pbo0g6vHV8txX5FViShngrg9QNKhsHeQnMk5z6Q==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*" @@ -4524,7 +4333,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/expression-evaluator/-/expression-evaluator-2.10.0.tgz", "integrity": "sha512-gSfiVSAE+SaxpXq3jT5OnyZd+sD9KFaWtTiKT1tDDs8lD7Jj68aRP7VoEhvKwPwRlUx0aoaXUL2MYtV6JsXRbg==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -4545,21 +4353,18 @@ "version": "9.0.8", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "dev": true, "license": "MIT" }, "node_modules/@comunica/expression-evaluator/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, "license": "ISC" }, "node_modules/@comunica/logger-pretty": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/logger-pretty/-/logger-pretty-2.10.0.tgz", "integrity": "sha512-JXkeM5HnbyTPnQTf5/ugRPL9R+vXT7b/hRVYzYmhAGCjkCNL7NJPTBbIgxmZHqZ+UGxprotrvmDQtwHmVA+Ddw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/types": "^2.10.0", @@ -4571,7 +4376,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/logger-void/-/logger-void-2.10.0.tgz", "integrity": "sha512-GFJh9hV8rIC9yXAuLGGKjQRVs8IOQOINBbaTNO+FJUWWWHlo5pDEKAoGYuysz5TBGoT3Lexz8bMfdkuHMa3uIQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/types": "^2.10.0" @@ -4581,7 +4385,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediator-all/-/mediator-all-2.10.0.tgz", "integrity": "sha512-y1+A+sIW462G8iPzi6BSPIb4I9iy08ZruM2Thf1or6sytwLKro7E2RYjS6IdupwfFYafXXCeT85+lrJgTKERhQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" @@ -4591,7 +4394,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-pipeline/-/mediator-combine-pipeline-2.10.0.tgz", "integrity": "sha512-j7+/oUlbhKB4Rq6g9oNKU+e9cQL8U9z8tAUNhoXUSHajcr4huj0t1+riaOD109/DRWhV793ILhBDzgiZbHd7DA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4602,7 +4404,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-2.10.0.tgz", "integrity": "sha512-QbP4zP1i6nMDZ8teC0RoTz5E8pOpxDhWPBr1ylb2jzPUjPpMgrnbHYTondlN0Oau3SMEehItojg/LYDtPOP/GQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" @@ -4612,7 +4413,6 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/mediator-join-coefficients-fixed/-/mediator-join-coefficients-fixed-2.10.1.tgz", "integrity": "sha512-HRvc0e8QDnR3sbRMMCyx9ILFA6KiUxHEqDOpt7BV3kFMWWIpBavFDwPUjLBG6sRA8o0CFu1+oVVh5fAFYZIxzQ==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", @@ -4626,7 +4426,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediator-number/-/mediator-number-2.10.0.tgz", "integrity": "sha512-0T8D1HGTu5Sd8iKb2dBjc6VRc/U4A15TAN6m561ra9pFlP+w31kby0ZYP6WWBHBobbUsX1LCvnbRQaAC4uWwVw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" @@ -4636,7 +4435,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-2.10.0.tgz", "integrity": "sha512-JiEtOLMkPnbjSLabVpE4VqDbu2ZKKnkUdATGBeWX+o+MjPw6c0hhw01RG4WY2rQhDyNl++nLQe3EowQh8xW9TA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" @@ -4646,7 +4444,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediatortype-accuracy/-/mediatortype-accuracy-2.10.0.tgz", "integrity": "sha512-u9Noai4yGACaBRGOoRZ65XoQhazKNx5QaFOX5nJ/p84Qq4g50woC2rpsncuyrXhW1j/rIc2WvIUGUfy/g6CDiw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" @@ -4656,7 +4453,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediatortype-httprequests/-/mediatortype-httprequests-2.10.0.tgz", "integrity": "sha512-uPjs/NdngHZZWomjZor6W29UeOlxganupIOa3Z6H3qdUnsSpxeoS9URXy7BICAX+4PmgebperSn18BRA+PWiSw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" @@ -4666,7 +4462,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediatortype-join-coefficients/-/mediatortype-join-coefficients-2.10.0.tgz", "integrity": "sha512-EPipAV5PDNeEVXbsd+8NsqNKu5ztCAoEJ3azcFAmD9di9ppArNJWU/mxy5yUzcBgMUX4wRp6jCa5rIF5sRHG7g==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4677,7 +4472,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediatortype-time/-/mediatortype-time-2.10.0.tgz", "integrity": "sha512-nBz1exxrja1Tj8KSlSevG4Hw2u09tTh6gtNfVjI76i/e7muu4RUWVhi9b8PcwBNAfuUqRl+5OgOSa2X4W+6QlA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" @@ -4687,7 +4481,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/metadata/-/metadata-2.10.0.tgz", "integrity": "sha512-PF7TKhuDIO4GE9tzuAkTxarQV5cmwXZ64hp0qm8Ql/V+dVHu/3xLL9v/Q67ZX26GF9hOyr7cdpNI08M7DHc86g==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/types": "^2.10.0" @@ -4697,7 +4490,6 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/query-sparql/-/query-sparql-2.10.2.tgz", "integrity": "sha512-bgjQ8N5/vP3Iy71AgDKQc06mXmEBvh7dsenw2VPbvk11iXywec4XCq8TzX+GozL+Zxxl5XyYlBw+nRjvORTGHg==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-context-preprocess-source-to-destination": "^2.10.0", @@ -4843,7 +4635,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/runner/-/runner-2.10.0.tgz", "integrity": "sha512-v/oEKT+IwjO6Y74bCCzlR+ZMI6oykpfz7GQrQbl1oTWQsvBbTdf0omPkoYnk1esEAsFnsJD+NGwAiRiFKeBo0A==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/bus-init": "^2.10.0", @@ -4859,7 +4650,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/runner-cli/-/runner-cli-2.10.0.tgz", "integrity": "sha512-16QI0rWFHURCy5waVFcZ/fhKI/hyzNx5YyCGPaEaUX8MKyamvCCXHSWvPLLbjJbsjGZ9wXrC9dwwhRmbfmidpw==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", @@ -4875,7 +4665,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/types/-/types-2.10.0.tgz", "integrity": "sha512-1UjPGbZcYrapBjMGUZedrIGcn9rOLpEOlJo1ZkWddFUGTwndVg9d4BZnQw+UnQzXMcLJcdKt94Zns8iEmBqARw==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -4912,7 +4701,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dev": true, "license": "MIT", "dependencies": { "colorspace": "1.1.x", @@ -5267,7 +5055,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", - "dev": true, "license": "MIT" }, "node_modules/@isaacs/cliui": { @@ -5839,7 +5626,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jeswr/prefixcc/-/prefixcc-1.2.1.tgz", "integrity": "sha512-kBBXbqsaeh3Irp416h/RbelqJgIOp6X/OJJlYmLyr/9qlBYKTKSCuEv5/xjZ0Yf8Yec+QFRYBaOQ2JkMBSH7KA==", - "dev": true, "license": "MIT", "dependencies": { "cross-fetch": "^3.1.5" @@ -5905,7 +5691,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-5.0.0.tgz", "integrity": "sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==", - "dev": true, "license": "MIT", "dependencies": { "vary": "^1.1.2" @@ -5918,7 +5703,6 @@ "version": "13.1.0", "resolved": "https://registry.npmjs.org/@koa/router/-/router-13.1.0.tgz", "integrity": "sha512-mNVu1nvkpSd8Q8gMebGbCkDWJ51ODetrFvLKYusej+V0ByD4btqHYnPIzTBLXnQMVUlm/oxVwqmWBY3zQfZilw==", - "dev": true, "license": "MIT", "dependencies": { "http-errors": "^2.0.0", @@ -5981,6 +5765,10 @@ "resolved": "packages/subscribable-dataset", "link": true }, + "node_modules/@ldo/test-solid-server": { + "resolved": "packages/test-solid-server", + "link": true + }, "node_modules/@ldo/traverser-shexj": { "resolved": "packages/traverser-shexj", "link": true @@ -7133,7 +6921,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rdfjs/namespace/-/namespace-1.1.0.tgz", "integrity": "sha512-utO5rtaOKxk8B90qzaQ0N+J5WrCI28DtfAY/zExCmXE7cOfC5uRI/oMKbLaVEPj2P7uArekt/T4IPATtj7Tjug==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/data-model": "^1.1.0" @@ -7146,7 +6933,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rdfjs/term-set/-/term-set-1.1.0.tgz", "integrity": "sha512-QQ4yzVe1Rvae/GN9SnOhweHNpaxQtnAjeOVciP/yJ0Gfxtbphy2tM56ZsRLV04Qq5qMcSclZIe6irYyEzx/UwQ==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/to-ntriples": "^2.0.0" @@ -7156,7 +6942,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-2.0.0.tgz", "integrity": "sha512-nDhpfhx6W6HKsy4HjyLp3H1nbrX1CiUCWhWQwKcYZX1s9GOjcoQTwY7GUUbVec0hzdJDQBR6gnjxtENBDt482Q==", - "dev": true, "license": "MIT" }, "node_modules/@rdfjs/types": { @@ -7172,7 +6957,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/@rubensworks/saxes/-/saxes-6.0.1.tgz", "integrity": "sha512-UW4OTIsOtJ5KSXo2Tchi4lhZqu+tlHrOAs4nNti7CrtB53kAZl3/hyrTi6HkMihxdbDM6m2Zc3swc/ZewEe1xw==", - "dev": true, "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" @@ -7574,7 +7358,6 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "dev": true, "license": "MIT", "engines": { "node": ">=14.16" @@ -7607,7 +7390,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@smessie/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.3.tgz", "integrity": "sha512-8FFE7psRtRWQT31/duqbmgnSf2++QLR2YH9kj5iwsHhnoqSvHdOY3SAN5e7dhc+60p2cNk7rv3HYOiXOapTEXQ==", - "dev": true, "license": "MIT", "dependencies": { "process": "^0.11.10", @@ -7625,7 +7407,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -7670,14 +7451,12 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@solid/access-control-policy/-/access-control-policy-0.1.3.tgz", "integrity": "sha512-LTxfN8N5hNBNYfuwJr0nyfxlp2P0+GeK+biCa1FQgIqska3wXpTgYaxjVgsw27mKx4N1FOlaGwG+nXdLnl9ykg==", - "dev": true, "license": "MIT" }, "node_modules/@solid/access-token-verifier": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@solid/access-token-verifier/-/access-token-verifier-2.1.0.tgz", "integrity": "sha512-79u92GD1SBTxjYghg2ta6cfoBNZ5ljz/9zE6RmXUypTXW7oI18DTWiSrEjWwI4njW+OMh+4ih+sAR6AkI1IFxg==", - "dev": true, "license": "MIT", "dependencies": { "jose": "^5.1.3", @@ -7691,7 +7470,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -7704,7 +7482,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -7725,14 +7502,12 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, "license": "ISC" }, "node_modules/@solid/community-server": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/@solid/community-server/-/community-server-7.1.6.tgz", "integrity": "sha512-nLBR3cSMcKb+wUjBgs0I/EDIPBvz4UAAzhynx1S6nP5bUSEr5ii95meVKlEnBcRI6b2jqdyHk9WRa8V4v8V8GA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/context-entries": "^2.8.2", @@ -7815,7 +7590,6 @@ "version": "11.0.4", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/jsonfile": "*", @@ -7826,7 +7600,6 @@ "version": "18.19.83", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.83.tgz", "integrity": "sha512-D69JeR5SfFS5H6FLbUaS0vE4r1dGhmMBbG4Ed6BNS4wkDK8GZjsdCShT5LCN59vOHEUHnFCY9J4aclXlIphMkA==", - "dev": true, "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -7836,14 +7609,12 @@ "version": "9.0.8", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "dev": true, "license": "MIT" }, "node_modules/@solid/community-server/node_modules/cross-fetch": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", - "dev": true, "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" @@ -7853,7 +7624,6 @@ "version": "11.3.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", - "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -7868,7 +7638,6 @@ "version": "4.15.9", "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" @@ -7878,7 +7647,6 @@ "version": "9.1.6", "resolved": "https://registry.npmjs.org/marked/-/marked-9.1.6.tgz", "integrity": "sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==", - "dev": true, "license": "MIT", "bin": { "marked": "bin/marked.js" @@ -7891,7 +7659,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -7912,14 +7679,12 @@ "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true, "license": "MIT" }, "node_modules/@solid/community-server/node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -7938,7 +7703,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -7948,7 +7712,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.1" @@ -8113,7 +7876,6 @@ "version": "1.3.7", "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", "integrity": "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -8130,7 +7892,6 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@types/async-lock/-/async-lock-1.4.2.tgz", "integrity": "sha512-HlZ6Dcr205BmNhwkdXqrg2vkFMN2PluI7Lgr8In3B3wE5PiQHhjRqtW/lGdVU9gw+sM0JcIDx2AN+cW8oSWIcw==", - "dev": true, "license": "MIT" }, "node_modules/@types/babel__core": { @@ -8182,14 +7943,12 @@ "version": "2.4.6", "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.6.tgz", "integrity": "sha512-9xlo6R2qDs5uixm0bcIqCeMCE6HiQsIyel9KQySStiyqNl2tnj2mP3DX1Nf56MD6KMenNNlBBsy3LJ7gUEQPXQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, "license": "MIT", "dependencies": { "@types/connect": "*", @@ -8210,7 +7969,6 @@ "version": "2.0.10", "resolved": "https://registry.npmjs.org/@types/clownface/-/clownface-2.0.10.tgz", "integrity": "sha512-Vz48oQux0YArQ66wfRp54NlxvEmpyTqbFIH435AsgN7C+p4MXao/rjXUisULL6436bxjFk4VluZr7J2HQkBHmQ==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": ">=1", @@ -8230,7 +7988,6 @@ "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -8240,21 +7997,18 @@ "version": "0.5.8", "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.8.tgz", "integrity": "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==", - "dev": true, "license": "MIT" }, "node_modules/@types/cookie": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.4.tgz", "integrity": "sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==", - "dev": true, "license": "MIT" }, "node_modules/@types/cookies": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.9.0.tgz", "integrity": "sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==", - "dev": true, "license": "MIT", "dependencies": { "@types/connect": "*", @@ -8267,7 +8021,6 @@ "version": "2.8.17", "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -8277,14 +8030,12 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", - "dev": true, "license": "MIT" }, "node_modules/@types/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/@types/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-StWAwZWMI5cK5wBKJHK/0MBJaZKMlN78EeDhBhBz6eEK51StnQzwERHG438/ToRJ/2CGaBW8TpyYxjkB1v9whA==", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -8294,7 +8045,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.1.tgz", "integrity": "sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/body-parser": "*", @@ -8306,7 +8056,6 @@ "version": "5.0.6", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -8348,21 +8097,18 @@ "version": "1.5.6", "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.6.tgz", "integrity": "sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==", - "dev": true, "license": "MIT" }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true, "license": "MIT" }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true, "license": "MIT" }, "node_modules/@types/http-link-header": { @@ -8435,7 +8181,6 @@ "version": "6.1.4", "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -8451,14 +8196,12 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz", "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/koa": { "version": "2.15.0", "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.15.0.tgz", "integrity": "sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==", - "dev": true, "license": "MIT", "dependencies": { "@types/accepts": "*", @@ -8475,7 +8218,6 @@ "version": "3.2.8", "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.8.tgz", "integrity": "sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==", - "dev": true, "license": "MIT", "dependencies": { "@types/koa": "*" @@ -8485,14 +8227,12 @@ "version": "4.17.16", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.16.tgz", "integrity": "sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==", - "dev": true, "license": "MIT" }, "node_modules/@types/lodash.orderby": { "version": "4.6.9", "resolved": "https://registry.npmjs.org/@types/lodash.orderby/-/lodash.orderby-4.6.9.tgz", "integrity": "sha512-T9o2wkIJOmxXwVTPTmwJ59W6eTi2FseiLR369fxszG649Po/xe9vqFNhf/MtnvT5jrbDiyWKxPFPZbpSVK0SVQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/lodash": "*" @@ -8502,14 +8242,12 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true, "license": "MIT" }, "node_modules/@types/mime-types": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", - "dev": true, "license": "MIT" }, "node_modules/@types/minimatch": { @@ -8523,14 +8261,12 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true, "license": "MIT" }, "node_modules/@types/n3": { "version": "1.24.2", "resolved": "https://registry.npmjs.org/@types/n3/-/n3-1.24.2.tgz", "integrity": "sha512-clurEPFqgx68kQxCBCrAUppsvZyyj/uVEgbhquYaawTZuDptrRrnFsHIWd4PubwWCfFgyrHBgaB2Tt09TTYLWw==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -8550,7 +8286,6 @@ "version": "6.4.17", "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.17.tgz", "integrity": "sha512-I9CCaIp6DTldEg7vyUTZi8+9Vo0hi1/T8gv3C89yk1rSAAzoKQ8H8ki/jBYJSFoH/BisgLP8tkZMlQ91CIquww==", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -8567,7 +8302,6 @@ "version": "8.8.1", "resolved": "https://registry.npmjs.org/@types/oidc-provider/-/oidc-provider-8.8.1.tgz", "integrity": "sha512-Yi/OJ7s0CFJ1AWAQrY2EO/zkV9uppLtiGAzrA07lBDveUOvxtYh7GflnHFXcgufVaPxVAjdykizjTYTMNVhdJw==", - "dev": true, "license": "MIT", "dependencies": { "@types/keygrip": "*", @@ -8598,7 +8332,6 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/@types/proper-lockfile/-/proper-lockfile-4.1.4.tgz", "integrity": "sha512-uo2ABllncSqg9F1D4nugVl9v93RmjxF6LJzQLMLDdPaXCUIDPeOJ21Gbqi43xNKzBi/WQ0Q0dICqufzQbMjipQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/retry": "*" @@ -8608,7 +8341,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/pump/-/pump-1.1.3.tgz", "integrity": "sha512-ZyooTTivmOwPfOwLVaszkF8Zq6mvavgjuHYitZhrIjfQAJDH+kIP3N+MzpG1zDAslsHvVz6Q8ECfivix3qLJaQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -8618,7 +8350,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@types/punycode/-/punycode-2.1.4.tgz", "integrity": "sha512-trzh6NzBnq8yw5e35f8xe8VTYjqM3NE7bohBtvDVf/dtUer3zYTLK1Ka3DG3p7bdtoaOHZucma6FfVKlQ134pQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/qs": { @@ -8631,14 +8362,12 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/rdf-validate-shacl": { "version": "0.4.9", "resolved": "https://registry.npmjs.org/@types/rdf-validate-shacl/-/rdf-validate-shacl-0.4.9.tgz", "integrity": "sha512-mjWwr+/7p2NPmJThB0nS1N7HWTrPAP5MFOVjEChiy2/e9mNH7WxtkMAEro00Ew/prcf6pw5ke1dzq/vkhBh7+A==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -8660,7 +8389,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/rdfjs__environment/-/rdfjs__environment-1.0.0.tgz", "integrity": "sha512-MDcnv3qfJvbHoEpUQXj5muT8g3e+xz1D8sGevrq3+Q4TzeEvQf5ijGX5l8485XFYrN/OBApgzXkHMZC04/kd5w==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -8703,21 +8431,18 @@ "version": "0.12.5", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==", - "dev": true, "license": "MIT" }, "node_modules/@types/semver": { "version": "7.7.0", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", - "dev": true, "license": "MIT" }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, "license": "MIT", "dependencies": { "@types/mime": "^1", @@ -8728,7 +8453,6 @@ "version": "1.15.7", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dev": true, "license": "MIT", "dependencies": { "@types/http-errors": "*", @@ -8746,14 +8470,12 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/spark-md5/-/spark-md5-3.0.5.tgz", "integrity": "sha512-lWf05dnD42DLVKQJZrDHtWFidcLrHuip01CtnC2/S6AMhX4t9ZlEUj4iuRlAnts0PQk7KESOqKxeGE/b6sIPGg==", - "dev": true, "license": "MIT" }, "node_modules/@types/sparqljs": { "version": "3.1.12", "resolved": "https://registry.npmjs.org/@types/sparqljs/-/sparqljs-3.1.12.tgz", "integrity": "sha512-zg/sdKKtYI0845wKPSuSgunyU1o/+7tRzMw85lHsf4p/0UbA6+65MXAyEtv1nkaqSqrq/bXm7+bqXas+Xo5dpQ==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": ">=1.0.0" @@ -8777,21 +8499,18 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "dev": true, "license": "MIT" }, "node_modules/@types/uritemplate": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/@types/uritemplate/-/uritemplate-0.3.6.tgz", "integrity": "sha512-31BMGZ8GgLxgXxLnqg4KbbyYJjU1flhTTD2+PVQStVUPXSk0IIpK0zt+tH3eLT7ZRwLnzQw6JhYx69qza3U0wg==", - "dev": true, "license": "MIT" }, "node_modules/@types/url-join": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.3.tgz", "integrity": "sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww==", - "dev": true, "license": "MIT" }, "node_modules/@types/uuid": { @@ -8805,7 +8524,6 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -8815,7 +8533,6 @@ "version": "17.0.33", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -8825,7 +8542,6 @@ "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { @@ -9207,7 +8923,6 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, "license": "MIT", "dependencies": { "mime-types": "~2.1.34", @@ -9221,7 +8936,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -9378,7 +9092,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9633,7 +9346,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrayify-stream/-/arrayify-stream-2.0.1.tgz", "integrity": "sha512-z8fB6PtmnewQpFB53piS2d1KlUi3BPMICH2h7leCOUXpQcwvZ4GbHHSpdKoUrgLMR6b4Qan/uDe1St3Ao3yIHg==", - "dev": true, "license": "MIT" }, "node_modules/arrify": { @@ -9687,21 +9399,18 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", - "dev": true, "license": "MIT" }, "node_modules/asynciterator": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/asynciterator/-/asynciterator-3.9.0.tgz", "integrity": "sha512-bwLLTAnoE6Ap6XdjK/j8vDk2Vi9p3ojk0PFwM0SwktAG1k8pfRJF9ng+mmkaRFKdZCQQlOxcWnvOmX2NQ1HV0g==", - "dev": true, "license": "MIT" }, "node_modules/asyncjoin": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/asyncjoin/-/asyncjoin-1.2.4.tgz", "integrity": "sha512-7/1g5uV2/iTDQteJ/pxqZq6qkO5406V+vNyOCYtHJ+mo6bmvvQHHrZgd7AtU/rx+cnz08NPWlwk8daW61thnlA==", - "dev": true, "license": "MIT", "dependencies": { "asynciterator": "^3.9.0" @@ -9929,7 +9638,6 @@ "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", - "dev": true, "license": "MIT" }, "node_modules/before-after-hook": { @@ -9943,7 +9651,6 @@ "version": "9.1.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", - "dev": true, "license": "MIT", "engines": { "node": "*" @@ -10138,7 +9845,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -10222,7 +9928,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", - "dev": true, "license": "MIT", "dependencies": { "mime-types": "^2.1.18", @@ -10236,7 +9941,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "dev": true, "license": "MIT", "engines": { "node": ">=14.16" @@ -10246,7 +9950,6 @@ "version": "10.2.14", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/http-cache-semantics": "^4.0.2", @@ -10372,7 +10075,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.1.0.tgz", "integrity": "sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==", - "dev": true, "license": "Apache-2.0", "bin": { "canonicalize": "bin/canonicalize.js" @@ -10575,7 +10277,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -10590,7 +10291,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -10646,7 +10346,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/clownface/-/clownface-1.5.1.tgz", "integrity": "sha512-Ko8N/UFsnhEGmPlyE1bUFhbRhVgDbxqlIjcqxtLysc4dWaY0A7iCdg3savhAxs7Lheb7FCygIyRh7ADYZWVIng==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/data-model": "^1.1.0", @@ -10657,7 +10356,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "dev": true, "license": "Apache-2.0", "engines": { "node": ">=0.10.0" @@ -10677,7 +10375,6 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, "license": "MIT", "engines": { "iojs": ">= 1.0.0", @@ -10711,7 +10408,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.3", @@ -10740,7 +10436,6 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "^1.0.0", @@ -10761,7 +10456,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -10771,7 +10465,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, "license": "MIT" }, "node_modules/colors": { @@ -10799,7 +10492,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dev": true, "license": "MIT", "dependencies": { "color": "^3.1.3", @@ -10856,7 +10548,6 @@ "version": "5.5.1", "resolved": "https://registry.npmjs.org/componentsjs/-/componentsjs-5.5.1.tgz", "integrity": "sha512-hmqq+ZUa98t9CoeWPGwE14I18aXQFAt66HRd8DaZCNggcSr82vhlyrjeXX0JAUMgr2MyQzwKstkv4INRAREguA==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -10882,7 +10573,6 @@ "version": "18.19.83", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.83.tgz", "integrity": "sha512-D69JeR5SfFS5H6FLbUaS0vE4r1dGhmMBbG4Ed6BNS4wkDK8GZjsdCShT5LCN59vOHEUHnFCY9J4aclXlIphMkA==", - "dev": true, "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -10892,7 +10582,6 @@ "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -10905,7 +10594,6 @@ "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true, "license": "MIT" }, "node_modules/concat-map": { @@ -10941,7 +10629,6 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -10954,7 +10641,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -10975,7 +10661,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -11128,7 +10813,6 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -11138,7 +10822,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", - "dev": true, "license": "MIT", "dependencies": { "depd": "~2.0.0", @@ -11227,7 +10910,6 @@ "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, "license": "MIT", "dependencies": { "object-assign": "^4", @@ -11310,7 +10992,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, "license": "MIT", "dependencies": { "cross-spawn": "^7.0.1" @@ -11358,7 +11039,6 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -11550,7 +11230,6 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -11612,7 +11291,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" @@ -11628,7 +11306,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -11719,7 +11396,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -11784,14 +11460,12 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true, "license": "MIT" }, "node_modules/denque": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "dev": true, "license": "Apache-2.0", "engines": { "node": ">=0.10" @@ -11801,7 +11475,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -11818,7 +11491,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8", @@ -11902,7 +11574,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", @@ -11917,7 +11588,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, "funding": [ { "type": "github", @@ -11954,7 +11624,6 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" @@ -11970,7 +11639,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", @@ -12055,7 +11723,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, "license": "MIT" }, "node_modules/ejs": { @@ -12097,21 +11764,18 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "dev": true, "license": "MIT" }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -12144,7 +11808,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -12167,7 +11830,6 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -12411,7 +12073,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -12421,14 +12082,12 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -12823,7 +12482,6 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/eta/-/eta-3.5.0.tgz", "integrity": "sha512-e3x3FBvGzeCIHhF+zhK8FZA2vC5uFn6b4HJjegUbIWrDb4mJ7JjTGMJY9VGIbRVpmSwHopNiaJibhjIr+HfLug==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -13062,7 +12720,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, "license": "MIT" }, "node_modules/fast-diff": { @@ -13140,7 +12797,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "dev": true, "license": "MIT" }, "node_modules/fetch-blob": { @@ -13162,7 +12818,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/fetch-sparql-endpoint/-/fetch-sparql-endpoint-4.2.1.tgz", "integrity": "sha512-nRaexc3QCO95bjESf4ngNQ1J+qNtVzxFGlPUopqOIVHm/j6IDhWg996kk7fBM98Mmo0uM9b6uiTbXmJHOrnqYA==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -13310,7 +12965,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "dev": true, "license": "MIT" }, "node_modules/follow-redirects": { @@ -13400,7 +13054,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 14.17" @@ -13419,7 +13072,6 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -13477,7 +13129,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -13563,7 +13214,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -13652,7 +13302,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -13905,7 +13554,6 @@ "version": "13.0.0", "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", - "dev": true, "license": "MIT", "dependencies": { "@sindresorhus/is": "^5.2.0", @@ -13944,7 +13592,6 @@ "version": "15.10.1", "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.10.1.tgz", "integrity": "sha512-BL/Xd/T9baO6NFzoMpiMD7YUZ62R6viR5tp/MULVEnbYJXZA//kRNW7J0j1w/wXArgL0sCxhDfK5dczSKn3+cg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 10.x" @@ -13954,7 +13601,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/graphql-to-sparql/-/graphql-to-sparql-3.0.1.tgz", "integrity": "sha512-A+RwB99o66CUj+XuqtP/u3P7fGS/qF6P+/jhNl1BE/JZ2SCnkrODvV0LADuJeCDmPh45fDhq+GTDVoN1ZQHYFw==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -13972,7 +13618,6 @@ "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dev": true, "license": "MIT", "dependencies": { "minimist": "^1.2.5", @@ -14089,7 +13734,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -14171,7 +13815,6 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", - "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -14191,7 +13834,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", - "dev": true, "license": "MIT", "dependencies": { "deep-equal": "~1.0.1", @@ -14205,14 +13847,12 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", - "dev": true, "license": "MIT" }, "node_modules/http-assert/node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -14222,7 +13862,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dev": true, "license": "MIT", "dependencies": { "depd": "~1.1.2", @@ -14239,7 +13878,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -14309,14 +13947,12 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true, "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -14372,7 +14008,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "dev": true, "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", @@ -14386,7 +14021,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -14502,7 +14136,6 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "dev": true, "license": "MIT" }, "node_modules/import-fresh": { @@ -14711,7 +14344,6 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.6.0.tgz", "integrity": "sha512-tBZlIIWbndeWBWCXWZiqtOF/yxf6yZX3tAlTJ7nfo5jhd6dctNxF7QnYlZLZ1a0o0pDoen7CgZqO+zjNaFbJAg==", - "dev": true, "license": "MIT", "dependencies": { "@ioredis/commands": "^1.1.1", @@ -14964,7 +14596,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -14984,7 +14615,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -15120,7 +14750,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -15178,7 +14807,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -15340,7 +14968,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/iso8601-duration/-/iso8601-duration-2.1.2.tgz", "integrity": "sha512-yXteYUiKv6x8seaDzyBwnZtPpmx766KfvQuaVNyPifYOjmPdOo3ajd4phDNa7Y5mTQGnXsNEcXFtVun1FjYXxQ==", - "dev": true, "license": "MIT" }, "node_modules/isobject": { @@ -16663,7 +16290,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -16676,7 +16302,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, "license": "MIT" }, "node_modules/json-parse-better-errors": { @@ -16837,7 +16462,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/jsonld-streaming-serializer/-/jsonld-streaming-serializer-2.1.0.tgz", "integrity": "sha512-COHdLoeMTnrqHMoFhN3PoAwqnrKrpPC7/ACb0WbELYvt+HSOIFN3v4IJP7fOtLNQ4GeaeYkvbeWJ7Jo4EjxMDw==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -16851,7 +16475,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -16959,7 +16582,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", - "dev": true, "license": "MIT", "dependencies": { "tsscmp": "1.0.6" @@ -16972,7 +16594,6 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, "license": "MIT", "dependencies": { "json-buffer": "3.0.1" @@ -17001,7 +16622,6 @@ "version": "2.16.0", "resolved": "https://registry.npmjs.org/koa/-/koa-2.16.0.tgz", "integrity": "sha512-Afhqq0Vq3W7C+/rW6IqHVBDLzqObwZ07JaUNUEF8yCQ6afiyFE3RAy+i7V0E46XOWlH7vPWn/x0vsZwNy6PWxw==", - "dev": true, "license": "MIT", "dependencies": { "accepts": "^1.3.5", @@ -17036,14 +16656,12 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", - "dev": true, "license": "MIT" }, "node_modules/koa-convert": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", - "dev": true, "license": "MIT", "dependencies": { "co": "^4.6.0", @@ -17057,7 +16675,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dev": true, "license": "MIT", "dependencies": { "depd": "~1.1.2", @@ -17074,7 +16691,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -17084,7 +16700,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -17094,7 +16709,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "dev": true, "license": "MIT" }, "node_modules/ky": { @@ -17865,14 +17479,12 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true, "license": "MIT" }, "node_modules/lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "dev": true, "license": "MIT" }, "node_modules/lodash.ismatch": { @@ -17900,7 +17512,6 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.orderby/-/lodash.orderby-4.6.0.tgz", "integrity": "sha512-T0rZxKmghOOf5YPnn8EY5iLYeWCpZq8G41FfqoVHH5QDTAFaghJRmAdLiadEDq+ztgM2q5PjA+Z1fOwGrLgmtg==", - "dev": true, "license": "MIT" }, "node_modules/log-symbols": { @@ -17924,7 +17535,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "dev": true, "license": "MIT", "dependencies": { "@colors/colors": "1.6.0", @@ -17955,7 +17565,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -18120,7 +17729,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -18326,7 +17934,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/microdata-rdf-streaming-parser/-/microdata-rdf-streaming-parser-2.0.1.tgz", "integrity": "sha512-oEEYP3OwPGOtoE4eIyJvX1eJXI7VkGR4gKYqpEufaRXc2ele/Tkid/KMU3Los13wGrOq6woSxLEGOYSHzpRvwA==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -18340,7 +17947,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -18360,7 +17966,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -18422,7 +18027,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -18445,7 +18049,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true, "license": "ISC" }, "node_modules/minimatch": { @@ -18468,7 +18071,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -18638,7 +18240,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/multimatch": { @@ -18736,7 +18337,6 @@ "version": "5.1.5", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", - "dev": true, "funding": [ { "type": "github", @@ -18761,8 +18361,7 @@ "node_modules/negotiate": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/negotiate/-/negotiate-1.0.1.tgz", - "integrity": "sha512-KBCIM4dAIT9j/pSXLHHQbZG74NmKNXTtxU2zHN0HG6uzzuFE01m1UdGoUmVHmACiBuCAOL7KwfqSW1oUQBj/vg==", - "dev": true + "integrity": "sha512-KBCIM4dAIT9j/pSXLHHQbZG74NmKNXTtxU2zHN0HG6uzzuFE01m1UdGoUmVHmACiBuCAOL7KwfqSW1oUQBj/vg==" }, "node_modules/negotiator": { "version": "0.6.4", @@ -18778,7 +18377,6 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, "license": "MIT" }, "node_modules/nextgraph": { @@ -18908,7 +18506,6 @@ "version": "6.10.0", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.0.tgz", "integrity": "sha512-SQ3wZCExjeSatLE/HBaXS5vqUOQk6GtBdIIKxiFdmm01mOQZX/POJkO3SUX1wDiYcwUOJwT23scFSC9fY2H8IA==", - "dev": true, "license": "MIT-0", "engines": { "node": ">=6.0.0" @@ -19011,7 +18608,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", - "dev": true, "license": "MIT", "engines": { "node": ">=14.16" @@ -19872,7 +19468,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -19882,7 +19477,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -20006,7 +19600,6 @@ "version": "8.8.1", "resolved": "https://registry.npmjs.org/oidc-provider/-/oidc-provider-8.8.1.tgz", "integrity": "sha512-qVChpayTwojUREJxLkFofUSK8kiSRIdzPrVSsoGibqRHl/YO60ege94OZS8vh7zaK+zxcG/Gu8UMaYB5ulohCQ==", - "dev": true, "license": "MIT", "dependencies": { "@koa/cors": "^5.0.0", @@ -20031,7 +19624,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-7.0.0.tgz", "integrity": "sha512-MX8gB7cVYTrYcFfAnfLlhRd0+Toyl8yX8uBx1MrX7K0jegiz9TumwOK27ldXrgDlHRdVi+MqU9Ssw6dr4BNreg==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -20044,7 +19636,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.1.0.tgz", "integrity": "sha512-y0W+X7Ppo7oZX6eovsRkuzcSM40Bicg2JEJkDJ4irIt1wsYAP5MLSNv+QAogO8xivMffw/9OvV3um1pxXgt1uA==", - "dev": true, "license": "MIT", "engines": { "node": "^10.13.0 || >=12.0.0" @@ -20054,7 +19645,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -20067,7 +19657,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -20077,7 +19666,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dev": true, "license": "MIT", "dependencies": { "fn.name": "1.x.x" @@ -20102,8 +19690,7 @@ "node_modules/only": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==", - "dev": true + "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" }, "node_modules/open": { "version": "8.4.2", @@ -20197,7 +19784,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.20" @@ -20725,7 +20311,6 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -20761,7 +20346,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -20812,7 +20396,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true, "license": "MIT" }, "node_modules/path-type": { @@ -21159,7 +20742,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -21171,7 +20753,6 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", - "dev": true, "license": "MIT" }, "node_modules/protocols": { @@ -21227,7 +20808,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "dev": true, "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -21238,7 +20818,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -21346,7 +20925,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", - "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -21362,7 +20940,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -21397,7 +20974,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/rdf-dereference/-/rdf-dereference-2.2.0.tgz", "integrity": "sha512-6geM3CSUlXTK3n4OoKsL95M7XwKXoxiwK7cf4e/+Dj0X/ll77ihFN5j9VhLGXNYbMXDlm30kBg/VU6ymMv6o/Q==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-dereference-fallback": "^2.0.2", @@ -21441,7 +21017,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/rdf-isomorphic/-/rdf-isomorphic-1.3.1.tgz", "integrity": "sha512-6uIhsXTVp2AtO6f41PdnRV5xZsa0zVZQDTBdn0br+DZuFf5M/YD+T6m8hKDUnALI6nFL/IujTMLgEs20MlNidQ==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -21465,7 +21040,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/rdf-literal/-/rdf-literal-1.3.2.tgz", "integrity": "sha512-79Stlu3sXy0kq9/decHFLf3xNPuY6sfhFPhd/diWErgaFr0Ekyg38Vh9bnVcqDYu48CFRi0t+hrFii49n92Hbw==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -21476,7 +21050,6 @@ "version": "1.14.0", "resolved": "https://registry.npmjs.org/rdf-object/-/rdf-object-1.14.0.tgz", "integrity": "sha512-/KSUWr7onDtL7d81kOpcUzJ2vHYOYJc2KU9WzBZRYydBhK0Sksh5Hg4VCQNaxUEvYEgdrrTuq9SLpOOCmag0rQ==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -21490,7 +21063,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/rdf-parse/-/rdf-parse-2.3.3.tgz", "integrity": "sha512-N5XEHm+ajFzwo/vVNzB4tDtvqMwBosbVJmZl5DlzplQM9ejlJBlN/43i0ImAb/NMtJJgQPC3jYnkCKGA7wdo/w==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-http-fetch": "^2.0.1", @@ -21523,7 +21095,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -21540,7 +21111,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/rdf-quad/-/rdf-quad-1.5.0.tgz", "integrity": "sha512-LnCYx8XbRVW1wr6UiZPSy2Tv7bXAtEwuyck/68dANhFu8VMnGS+QfUNP3b9YI6p4Bfd/fyDx5E3x81IxGV6BzA==", - "dev": true, "license": "MIT", "dependencies": { "rdf-data-factory": "^1.0.1", @@ -21552,7 +21122,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/rdf-serialize/-/rdf-serialize-2.2.3.tgz", "integrity": "sha512-t3AvH3lw1NUufCUjf6/pxOyU/cPBJ0J3TkMP+FuUJKMmsJ1FzFdNkpsIMp9QFmWtqUYijyhYpVfJ4Tqprl+1RA==", - "dev": true, "license": "MIT", "dependencies": { "@comunica/actor-rdf-serialize-jsonld": "^2.6.6", @@ -21574,7 +21143,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -21591,7 +21159,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/rdf-store-stream/-/rdf-store-stream-2.0.1.tgz", "integrity": "sha512-znGaibHLvbRE0BrDcXHRleRcLKlHYP6ADr1RFJ3yA28QBmhOjxxgbBFTvCMzgsxvBIqdaFS8Vd2FG4NefJL4Mg==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -21602,7 +21169,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/rdf-stores/-/rdf-stores-1.0.0.tgz", "integrity": "sha512-wqp7M5409rbhpWQE0C1vyVysbz++aD2vEkZ6yueSxhDtyLvznS41R3cKiuUpm3ikc/yTpaCZwPo4iyKEaAwBIg==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -21616,7 +21182,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/rdf-streaming-store/-/rdf-streaming-store-1.1.5.tgz", "integrity": "sha512-Rfd3qo1otF/Jfau/lAFX8J1ZPorN0eaHoIkAlenIIcdZjq9AoIP85rEa4Sn+yMZOqNU1Kc4cCPUv5CFHhpAT2Q==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -21632,7 +21197,6 @@ "version": "4.0.18", "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -21643,7 +21207,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -21670,7 +21233,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/rdf-string-ttl/-/rdf-string-ttl-1.3.2.tgz", "integrity": "sha512-yqolaVoUvTaSC5aaQuMcB4BL54G/pCGsV4jQH87f0TvAx8zHZG0koh7XWrjva/IPGcVb1QTtaeEdfda5mcddJg==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -21681,7 +21243,6 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-1.11.0.tgz", "integrity": "sha512-iKlVgnMopRKl9pHVNrQrax7PtZKRCT/uJIgYqvuw1VVQb88zDvurtDr1xp0rt7N9JtKtFwUXoIQoEsjyRo20qQ==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -21693,7 +21254,6 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/rdf-validate-datatype/-/rdf-validate-datatype-0.1.5.tgz", "integrity": "sha512-gU+cD+AT1LpFwbemuEmTDjwLyFwJDiw21XHyIofKhFnEpXODjShBuxhgDGnZqW3qIEwu/vECjOecuD60e5ngiQ==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/namespace": "^1.1.0", @@ -21707,7 +21267,6 @@ "version": "0.4.5", "resolved": "https://registry.npmjs.org/rdf-validate-shacl/-/rdf-validate-shacl-0.4.5.tgz", "integrity": "sha512-tGYnssuPzmsPua1dju4hEtGkT1zouvwzVTNrFhNiqj2aZFO5pQ7lvLd9Cv9H9vKAlpIdC/x0zL6btxG3PCss0w==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/dataset": "^1.1.1", @@ -21723,7 +21282,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/rdfa-streaming-parser/-/rdfa-streaming-parser-2.0.1.tgz", "integrity": "sha512-7Yyaj030LO7iQ38Wh/RNLVeYrVFJeyx3dpCK7C1nvX55eIN/gE4HWfbg4BYI9X7Bd+eUIUMVeiKYLmYjV6apow==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -21737,7 +21295,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -21757,7 +21314,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -21774,7 +21330,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-2.4.0.tgz", "integrity": "sha512-f+tdI1wxOiPzMbFWRtOwinwPsqac0WIN80668yFKcVdFCSTGOWTM70ucQGUSdDZZo7pce/UvZgV0C3LDj0P7tg==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -21791,7 +21346,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -22242,7 +21796,6 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -22257,7 +21810,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz", "integrity": "sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ==", - "dev": true, "license": "MIT" }, "node_modules/redent": { @@ -22278,7 +21830,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -22288,7 +21839,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", - "dev": true, "license": "MIT", "dependencies": { "redis-errors": "^1.0.0" @@ -22445,7 +21995,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -22483,7 +22032,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true, "license": "MIT" }, "node_modules/resolve-cwd": { @@ -22533,7 +22081,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "dev": true, "license": "MIT", "dependencies": { "lowercase-keys": "^3.0.0" @@ -22563,7 +22110,6 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -22688,7 +22234,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -22706,7 +22251,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -22716,7 +22260,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true, "license": "MIT" }, "node_modules/saxes": { @@ -22829,14 +22372,12 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, "license": "ISC" }, "node_modules/shaclc-parse": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/shaclc-parse/-/shaclc-parse-1.4.0.tgz", "integrity": "sha512-zyxjIYQH2ghg/wtMvOp+4Nr6aK8j9bqFiVT3w47K8WHPYN+S3Zgnh2ybT+dGgMwo9KjiOoywxhjC7d8Z6GCmfA==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "^1.1.0", @@ -22847,7 +22388,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/shaclc-write/-/shaclc-write-1.4.3.tgz", "integrity": "sha512-dtJ6LokIluzQuHRWCFvNnmGyh07FxBK2L4utkOQn/wYD9eNamUUCt7sDBcuFDyD3jAGv0Ipmv0EitTyKcM1f/w==", - "dev": true, "license": "MIT", "dependencies": { "@jeswr/prefixcc": "^1.2.1", @@ -22872,7 +22412,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -22885,7 +22424,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -23004,7 +22542,6 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, "license": "ISC" }, "node_modules/sigstore": { @@ -23285,7 +22822,6 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" @@ -23295,7 +22831,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true, "license": "MIT" }, "node_modules/sisteransi": { @@ -23372,7 +22907,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -23393,14 +22927,12 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, "license": "(WTFPL OR MIT)" }, "node_modules/sparqlalgebrajs": { "version": "4.3.8", "resolved": "https://registry.npmjs.org/sparqlalgebrajs/-/sparqlalgebrajs-4.3.8.tgz", "integrity": "sha512-Xo1/5icRtVk2N38BrY9NXN8N/ZPjULlns7sDHv0nlcGOsOediBLWVy8LmV+Q90RHvb3atZZbrFy3VqrM4iXciA==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -23421,7 +22953,6 @@ "version": "3.7.3", "resolved": "https://registry.npmjs.org/sparqljs/-/sparqljs-3.7.3.tgz", "integrity": "sha512-FQfHUhfwn5PD9WH6xPU7DhFfXMgqK/XoDrYDVxz/grhw66Il0OjRg3JBgwuEvwHnQt7oSTiKWEiCZCPNaUbqgg==", - "dev": true, "license": "MIT", "dependencies": { "rdf-data-factory": "^1.1.2" @@ -23437,7 +22968,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-2.2.0.tgz", "integrity": "sha512-2TfvNvUsaJyWfCrq3ExdDdbF9LBLzIUCricg+D1YCYbbmyTzscgCtRk4KcIyJF178DtfCt4BkKzbKl8IXMHp8w==", - "dev": true, "license": "MIT", "dependencies": { "@bergos/jsonparse": "^1.4.1", @@ -23451,7 +22981,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -23468,7 +22997,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/sparqljson-to-tree/-/sparqljson-to-tree-3.0.2.tgz", "integrity": "sha512-8h/ZEPPBhBlMbgMX1TOumJQku2mLYYdwd/octsDa/bdqdNcMeAcB7S2Qh4SEZ+0pPNed9CBk1d5TEUpwJlcdmw==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -23480,7 +23008,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-2.1.1.tgz", "integrity": "sha512-71sltShF6gDAzuKWEHNeij7r0Mv5VqRrvJing6W4WHJ12GRe6+t1IRTv6MeqxYN3XJmKevs7B3HCBUo7wceeJQ==", - "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", @@ -23495,7 +23022,6 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -23609,7 +23135,6 @@ "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true, "license": "MIT", "engines": { "node": "*" @@ -23642,7 +23167,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", - "dev": true, "license": "MIT" }, "node_modules/start-server-and-test": { @@ -23681,7 +23205,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -23715,7 +23238,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/stream-to-string/-/stream-to-string-1.2.1.tgz", "integrity": "sha512-WsvTDNF8UYs369Yko3pcdTducQtYpzEZeOV7cTuReyFvOoA9S/DLJ6sYK+xPafSPHhUMpaxiljKYnT6JSFztIA==", - "dev": true, "license": "MIT", "dependencies": { "promise-polyfill": "^1.1.6" @@ -23725,21 +23247,18 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-1.1.6.tgz", "integrity": "sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg==", - "dev": true, "license": "MIT" }, "node_modules/streamify-array": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/streamify-array/-/streamify-array-1.0.1.tgz", "integrity": "sha512-ZnswaBcC6B1bhPLSQOlC6CdaDUSzU0wr2lvvHpbHNms8V7+DLd8uEAzDAWpsjxbFkijBHhuObFO/qqu52DZUMA==", - "dev": true, "license": "MIT" }, "node_modules/streamify-string": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/streamify-string/-/streamify-string-1.0.1.tgz", "integrity": "sha512-RXvBglotrvSIuQQ7oC55pdV40wZ/17gTb68ipMC4LA0SqMN4Sqfsf31Dpei7qXpYqZQ8ueVnPglUvtep3tlhqw==", - "dev": true, "license": "MIT" }, "node_modules/string_decoder": { @@ -23799,7 +23318,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -23928,7 +23446,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -24201,7 +23718,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true, "license": "MIT" }, "node_modules/text-table": { @@ -24375,7 +23891,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==", - "dev": true, "license": "MIT" }, "node_modules/tinyglobby": { @@ -24454,7 +23969,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.6" @@ -24464,7 +23978,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", - "dev": true, "license": "MIT" }, "node_modules/tough-cookie": { @@ -24513,7 +24026,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 14.0.0" @@ -24536,13 +24048,12 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/ts-guards/-/ts-guards-0.5.1.tgz", "integrity": "sha512-Y6P/VJnwARiPMfxO7rvaYaz5tGQ5TQ0Wnb2cWIxMpFOioYkhsT8XaCrJX6wYPNFACa4UOrN5SPqhwpM8NolAhQ==", - "dev": true, "license": "MIT" }, "node_modules/ts-jest": { - "version": "29.3.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.0.tgz", - "integrity": "sha512-4bfGBX7Gd1Aqz3SyeDS9O276wEU/BInZxskPrbhZLyv+c1wskDCqDFMJQJLWrIr/fKoAH4GE5dKUlrdyvo+39A==", + "version": "29.3.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.2.tgz", + "integrity": "sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==", "dev": true, "license": "MIT", "dependencies": { @@ -24554,7 +24065,7 @@ "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", "semver": "^7.7.1", - "type-fest": "^4.37.0", + "type-fest": "^4.39.1", "yargs-parser": "^21.1.1" }, "bin": { @@ -24603,9 +24114,9 @@ } }, "node_modules/ts-jest/node_modules/type-fest": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", - "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.40.1.tgz", + "integrity": "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -24737,7 +24248,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.6.x" @@ -25052,7 +24562,6 @@ "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -25209,7 +24718,6 @@ "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "dev": true, "license": "BSD-2-Clause", "optional": true, "bin": { @@ -25344,7 +24852,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -25415,14 +24922,12 @@ "node_modules/uritemplate": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/uritemplate/-/uritemplate-0.3.4.tgz", - "integrity": "sha512-enADBvHfhjrwxFMTVWeIIYz51SZ91uC6o2MR/NQTVljJB6HTZ8eQL3Q7JBj3RxNISA14MOwJaU3vpf5R6dyxHA==", - "dev": true + "integrity": "sha512-enADBvHfhjrwxFMTVWeIIYz51SZ91uC6o2MR/NQTVljJB6HTZ8eQL3Q7JBj3RxNISA14MOwJaU3vpf5R6dyxHA==" }, "node_modules/url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true, "license": "MIT" }, "node_modules/url-parse": { @@ -25460,7 +24965,6 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -25503,7 +25007,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/validate-iri/-/validate-iri-1.0.1.tgz", "integrity": "sha512-gLXi7351CoyVVQw8XE5sgpYawRKatxE7kj/xmCxXOZS1kMdtcqC0ILIqLuVEVnAUQSL/evOGG3eQ+8VgbdnstA==", - "dev": true, "license": "MIT" }, "node_modules/validate-npm-package-license": { @@ -25534,7 +25037,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -25647,7 +25149,6 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz", "integrity": "sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA==", - "dev": true, "license": "MIT" }, "node_modules/webcrypto-core": { @@ -25727,7 +25228,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -25842,7 +25342,6 @@ "version": "3.17.0", "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", - "dev": true, "license": "MIT", "dependencies": { "@colors/colors": "^1.6.0", @@ -25865,7 +25364,6 @@ "version": "4.9.0", "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", - "dev": true, "license": "MIT", "dependencies": { "logform": "^2.7.0", @@ -25890,7 +25388,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true, "license": "MIT" }, "node_modules/wrap-ansi": { @@ -25931,7 +25428,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { @@ -26095,7 +25591,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true, "license": "MIT" }, "node_modules/xtend": { @@ -26112,7 +25607,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -26188,7 +25682,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz", "integrity": "sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 4.0.0" @@ -26221,7 +25714,6 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/yup/-/yup-1.6.1.tgz", "integrity": "sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==", - "dev": true, "license": "MIT", "dependencies": { "property-expr": "^2.0.5", @@ -26234,7 +25726,6 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" @@ -26245,11 +25736,11 @@ }, "packages/cli": { "name": "@ldo/cli", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { - "@ldo/ldo": "^1.0.0-alpha.3", - "@ldo/schema-converter-shex": "^1.0.0-alpha.3", + "@ldo/ldo": "^1.0.0-alpha.9", + "@ldo/schema-converter-shex": "^1.0.0-alpha.9", "@shexjs/parser": "^1.0.0-alpha.24", "child-process-promise": "^2.2.1", "commander": "^9.3.0", @@ -26431,33 +25922,37 @@ }, "packages/connected": { "name": "@ldo/connected", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { - "@ldo/dataset": "^1.0.0-alpha.3", - "@ldo/ldo": "^1.0.0-alpha.3", - "@ldo/rdf-utils": "^1.0.0-alpha.3" + "@ldo/dataset": "^1.0.0-alpha.9", + "@ldo/ldo": "^1.0.0-alpha.9", + "@ldo/rdf-utils": "^1.0.0-alpha.9" }, "devDependencies": { + "@ldo/connected-solid": "^1.0.0-alpha.9", + "@ldo/test-solid-server": "^1.0.0-alpha.9", "@rdfjs/data-model": "^1.2.0", "@rdfjs/types": "^1.0.1", "cross-env": "^7.0.3", "jest-rdf": "^1.8.0", + "ts-jest": "^29.3.2", "ts-node": "^10.9.1", "typed-emitter": "^2.1.0", "typedoc": "^0.25.4", - "typedoc-plugin-markdown": "^3.17.1" + "typedoc-plugin-markdown": "^3.17.1", + "uuid": "^11.1.0" } }, "packages/connected-nextgraph": { "name": "@ldo/connected-nextgraph", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { - "@ldo/connected": "^1.0.0-alpha.3", - "@ldo/dataset": "^1.0.0-alpha.3", - "@ldo/ldo": "^1.0.0-alpha.3", - "@ldo/rdf-utils": "^1.0.0-alpha.3", + "@ldo/connected": "^1.0.0-alpha.9", + "@ldo/dataset": "^1.0.0-alpha.9", + "@ldo/ldo": "^1.0.0-alpha.9", + "@ldo/rdf-utils": "^1.0.0-alpha.9", "@solid-notifications/subscription": "^0.1.2", "cross-fetch": "^3.1.6", "http-link-header": "^1.1.1", @@ -26465,7 +25960,7 @@ }, "devDependencies": { "@inrupt/solid-client-authn-core": "^2.2.6", - "@ldo/cli": "^1.0.0-alpha.3", + "@ldo/cli": "^1.0.0-alpha.9", "@rdfjs/data-model": "^1.2.0", "@rdfjs/types": "^1.0.1", "@solid-notifications/types": "^0.1.2", @@ -26483,12 +25978,12 @@ }, "packages/connected-solid": { "name": "@ldo/connected-solid", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { - "@ldo/dataset": "^1.0.0-alpha.3", - "@ldo/ldo": "^1.0.0-alpha.3", - "@ldo/rdf-utils": "^1.0.0-alpha.3", + "@ldo/dataset": "^1.0.0-alpha.9", + "@ldo/ldo": "^1.0.0-alpha.9", + "@ldo/rdf-utils": "^1.0.0-alpha.9", "@solid-notifications/subscription": "^0.1.2", "cross-fetch": "^3.1.6", "http-link-header": "^1.1.1", @@ -26496,7 +25991,8 @@ }, "devDependencies": { "@inrupt/solid-client-authn-core": "^2.2.6", - "@ldo/cli": "^1.0.0-alpha.3", + "@ldo/cli": "^1.0.0-alpha.9", + "@ldo/test-solid-server": "^1.0.0-alpha.9", "@rdfjs/data-model": "^1.2.0", "@rdfjs/types": "^1.0.1", "@solid-notifications/types": "^0.1.2", @@ -26509,12 +26005,26 @@ "typedoc-plugin-markdown": "^3.17.1" } }, + "packages/connected/node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "packages/dataset": { "name": "@ldo/dataset", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { - "@ldo/rdf-utils": "^1.0.0-alpha.3", + "@ldo/rdf-utils": "^1.0.0-alpha.9", "@rdfjs/dataset": "^1.1.0", "buffer": "^6.0.3", "readable-stream": "^4.2.0" @@ -26580,11 +26090,11 @@ }, "packages/jsonld-dataset-proxy": { "name": "@ldo/jsonld-dataset-proxy", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { - "@ldo/rdf-utils": "^1.0.0-alpha.3", - "@ldo/subscribable-dataset": "^1.0.0-alpha.3", + "@ldo/rdf-utils": "^1.0.0-alpha.9", + "@ldo/subscribable-dataset": "^1.0.0-alpha.9", "@rdfjs/data-model": "^1.2.0", "@rdfjs/dataset": "^1.1.0", "jsonld2graphobject": "^0.0.4" @@ -26607,18 +26117,18 @@ }, "packages/ldo": { "name": "@ldo/ldo", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { - "@ldo/dataset": "^1.0.0-alpha.3", - "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.3", - "@ldo/subscribable-dataset": "^1.0.0-alpha.3", + "@ldo/dataset": "^1.0.0-alpha.9", + "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.9", + "@ldo/subscribable-dataset": "^1.0.0-alpha.9", "@rdfjs/data-model": "^1.2.0", "buffer": "^6.0.3", "readable-stream": "^4.3.0" }, "devDependencies": { - "@ldo/rdf-utils": "^1.0.0-alpha.3", + "@ldo/rdf-utils": "^1.0.0-alpha.9", "@rdfjs/types": "^1.0.1", "@types/jsonld": "^1.5.6", "@types/n3": "^1.10.4", @@ -26652,7 +26162,7 @@ }, "packages/rdf-utils": { "name": "@ldo/rdf-utils", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { "@rdfjs/data-model": "^1.2.0", @@ -26666,14 +26176,14 @@ }, "packages/react": { "name": "@ldo/react", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { - "@ldo/connected": "^1.0.0-alpha.3", - "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.3", - "@ldo/ldo": "^1.0.0-alpha.3", - "@ldo/rdf-utils": "^1.0.0-alpha.3", - "@ldo/subscribable-dataset": "^1.0.0-alpha.3", + "@ldo/connected": "^1.0.0-alpha.9", + "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.9", + "@ldo/ldo": "^1.0.0-alpha.9", + "@ldo/rdf-utils": "^1.0.0-alpha.9", + "@ldo/subscribable-dataset": "^1.0.0-alpha.9", "@rdfjs/data-model": "^1.2.0", "cross-fetch": "^3.1.6" }, @@ -26686,15 +26196,15 @@ }, "packages/schema-converter-shex": { "name": "@ldo/schema-converter-shex", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { - "@ldo/traverser-shexj": "^1.0.0-alpha.3", + "@ldo/traverser-shexj": "^1.0.0-alpha.9", "dts-dom": "~3.6.0", "jsonld2graphobject": "^0.0.5" }, "devDependencies": { - "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.3", + "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.9", "@shexjs/parser": "^1.0.0-alpha.24", "@types/jsonld": "^1.5.6", "@types/shexj": "^2.1.3", @@ -26745,13 +26255,13 @@ }, "packages/solid-react": { "name": "@ldo/solid-react", - "version": "1.0.0-alpha.5", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { "@inrupt/solid-client-authn-browser": "2.3.0", - "@ldo/connected": "^1.0.0-alpha.3", - "@ldo/connected-solid": "^1.0.0-alpha.3", - "@ldo/react": "^1.0.0-alpha.3", + "@ldo/connected": "^1.0.0-alpha.9", + "@ldo/connected-solid": "^1.0.0-alpha.9", + "@ldo/react": "^1.0.0-alpha.9", "@rdfjs/data-model": "^1.2.0", "cross-fetch": "^3.1.6" }, @@ -26759,7 +26269,7 @@ "@babel/core": "^7.26.10", "@babel/preset-env": "^7.26.9", "@inrupt/jest-jsdom-polyfills": "^3.2.6", - "@ldo/rdf-utils": "^1.0.0-alpha.3", + "@ldo/rdf-utils": "^1.0.0-alpha.9", "@rdfjs/types": "^1.0.1", "@testing-library/react": "^14.1.2", "babel-jest": "^29.7.0", @@ -26772,14 +26282,14 @@ }, "packages/solid-type-index": { "name": "@ldo/solid-type-index", - "version": "1.0.0-alpha.5", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { - "@ldo/connected-solid": "^1.0.0-alpha.3", - "@ldo/solid-react": "^1.0.0-alpha.5" + "@ldo/connected-solid": "^1.0.0-alpha.9", + "@ldo/solid-react": "^1.0.0-alpha.9" }, "devDependencies": { - "@ldo/rdf-utils": "^1.0.0-alpha.3", + "@ldo/rdf-utils": "^1.0.0-alpha.9", "@rdfjs/types": "^1.0.1", "@testing-library/react": "^14.1.2", "jest-environment-jsdom": "^29.7.0", @@ -26789,11 +26299,12 @@ }, "packages/subscribable-dataset": { "name": "@ldo/subscribable-dataset", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { - "@ldo/dataset": "^1.0.0-alpha.3", - "@ldo/rdf-utils": "^1.0.0-alpha.3" + "@ldo/dataset": "^1.0.0-alpha.9", + "@ldo/rdf-utils": "^1.0.0-alpha.9", + "uuid": "^11.1.0" }, "devDependencies": { "@rdfjs/data-model": "^1.2.0", @@ -26801,9 +26312,17 @@ "@rdfjs/types": "^1.0.1", "@types/jsonld": "^1.5.6", "@types/rdfjs__dataset": "^1.0.4", + "@types/uuid": "^10.0.0", "ts-node": "^9.1.1" } }, + "packages/subscribable-dataset/node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true, + "license": "MIT" + }, "packages/subscribable-dataset/node_modules/source-map-support": { "version": "0.5.21", "dev": true, @@ -26838,17 +26357,40 @@ "typescript": ">=2.7" } }, + "packages/subscribable-dataset/node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "packages/test-solid-server": { + "name": "@ldo/test-solid-server", + "version": "1.0.0-alpha.9", + "license": "MIT", + "dependencies": { + "@inrupt/solid-client-authn-core": "^2.2.6", + "@solid/community-server": "^7.1.3", + "cross-env": "^7.0.3" + } + }, "packages/traverser-shexj": { "name": "@ldo/traverser-shexj", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { - "@ldo/type-traverser": "^1.0.0-alpha.3" + "@ldo/type-traverser": "^1.0.0-alpha.9" } }, "packages/type-traverser": { "name": "@ldo/type-traverser", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "license": "MIT", "dependencies": { "uuid": "^8.3.2" diff --git a/packages/cli/package.json b/packages/cli/package.json index 070e095..e20f764 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/cli", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "description": "A Command Line Interface for Linked Data Objects", "main": "./dist/index.js", "bin": { @@ -40,8 +40,8 @@ "rimraf": "^3.0.2" }, "dependencies": { - "@ldo/ldo": "^1.0.0-alpha.3", - "@ldo/schema-converter-shex": "^1.0.0-alpha.3", + "@ldo/ldo": "^1.0.0-alpha.9", + "@ldo/schema-converter-shex": "^1.0.0-alpha.9", "@shexjs/parser": "^1.0.0-alpha.24", "child-process-promise": "^2.2.1", "commander": "^9.3.0", diff --git a/packages/connected-nextgraph/package.json b/packages/connected-nextgraph/package.json index b68e3a4..0f5a3cf 100644 --- a/packages/connected-nextgraph/package.json +++ b/packages/connected-nextgraph/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/connected-nextgraph", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "description": "A plugin for @ldo/connected to work with the Solid ecosystem.", "main": "dist/index.js", "scripts": { @@ -26,7 +26,7 @@ "homepage": "https://github.com/o-development/ldobjects/tree/main/packages/solid#readme", "devDependencies": { "@inrupt/solid-client-authn-core": "^2.2.6", - "@ldo/cli": "^1.0.0-alpha.3", + "@ldo/cli": "^1.0.0-alpha.9", "@rdfjs/data-model": "^1.2.0", "@rdfjs/types": "^1.0.1", "@solid-notifications/types": "^0.1.2", @@ -42,10 +42,10 @@ "typedoc-plugin-markdown": "^3.17.1" }, "dependencies": { - "@ldo/connected": "^1.0.0-alpha.3", - "@ldo/dataset": "^1.0.0-alpha.3", - "@ldo/ldo": "^1.0.0-alpha.3", - "@ldo/rdf-utils": "^1.0.0-alpha.3", + "@ldo/connected": "^1.0.0-alpha.9", + "@ldo/dataset": "^1.0.0-alpha.9", + "@ldo/ldo": "^1.0.0-alpha.9", + "@ldo/rdf-utils": "^1.0.0-alpha.9", "@solid-notifications/subscription": "^0.1.2", "cross-fetch": "^3.1.6", "http-link-header": "^1.1.1", diff --git a/packages/connected-solid/jest.config.js b/packages/connected-solid/jest.config.js index c55a5f7..9bfe763 100644 --- a/packages/connected-solid/jest.config.js +++ b/packages/connected-solid/jest.config.js @@ -3,7 +3,6 @@ const sharedConfig = require("../../jest.config.js"); module.exports = { ...sharedConfig, rootDir: "./", - setupFiles: ["/test/setup-tests.ts"], transform: { "^.+\\.(ts|tsx)?$": "ts-jest", "^.+\\.(js|jsx)$": "babel-jest", diff --git a/packages/connected-solid/package.json b/packages/connected-solid/package.json index d485103..9f358d6 100644 --- a/packages/connected-solid/package.json +++ b/packages/connected-solid/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/connected-solid", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "description": "A plugin for @ldo/connected to work with the Solid ecosystem.", "main": "dist/index.js", "scripts": { @@ -25,7 +25,8 @@ "homepage": "https://github.com/o-development/ldobjects/tree/main/packages/solid#readme", "devDependencies": { "@inrupt/solid-client-authn-core": "^2.2.6", - "@ldo/cli": "^1.0.0-alpha.3", + "@ldo/cli": "^1.0.0-alpha.9", + "@ldo/test-solid-server": "^1.0.0-alpha.9", "@rdfjs/data-model": "^1.2.0", "@rdfjs/types": "^1.0.1", "@solid-notifications/types": "^0.1.2", @@ -38,9 +39,9 @@ "typedoc-plugin-markdown": "^3.17.1" }, "dependencies": { - "@ldo/dataset": "^1.0.0-alpha.3", - "@ldo/ldo": "^1.0.0-alpha.3", - "@ldo/rdf-utils": "^1.0.0-alpha.3", + "@ldo/dataset": "^1.0.0-alpha.9", + "@ldo/ldo": "^1.0.0-alpha.9", + "@ldo/rdf-utils": "^1.0.0-alpha.9", "@solid-notifications/subscription": "^0.1.2", "cross-fetch": "^3.1.6", "http-link-header": "^1.1.1", diff --git a/packages/connected-solid/src/SolidConnectedPlugin.ts b/packages/connected-solid/src/SolidConnectedPlugin.ts index 7e19817..632df97 100644 --- a/packages/connected-solid/src/SolidConnectedPlugin.ts +++ b/packages/connected-solid/src/SolidConnectedPlugin.ts @@ -80,4 +80,11 @@ export const solidConnectedPlugin: SolidConnectedPlugin = { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore "Types" only exists for the typing system types: {}, + + normalizeUri(uri: SolidUri): SolidUri { + const url = new URL(uri); + url.hash = ""; + url.search = ""; + return url.toString() as SolidUri; + }, }; diff --git a/packages/connected-solid/test/Integration.test.ts b/packages/connected-solid/test/Integration.test.ts index 20146d2..2bf2bae 100644 --- a/packages/connected-solid/test/Integration.test.ts +++ b/packages/connected-solid/test/Integration.test.ts @@ -1,5 +1,3 @@ -import type { App } from "@solid/community-server"; -import { ROOT_CONTAINER, WEB_ID, createApp } from "./solidServer.helper"; import { namedNode, quad as createQuad, @@ -16,9 +14,7 @@ import type { } from "../src/requester/results/error/HttpErrorResult"; import type { NoncompliantPodError } from "../src/requester/results/error/NoncompliantPodError"; import type { GetStorageContainerFromWebIdSuccess } from "../src/requester/results/success/CheckRootContainerSuccess"; -import { generateAuthFetch } from "./authFetch.helper"; import { wait } from "./utils.helper"; -import fs from "fs/promises"; import path from "path"; import type { GetWacRuleSuccess, UpdateResultError, WacRule } from "../src"; import { @@ -45,7 +41,11 @@ import { ConnectedLdoTransactionDataset, } from "@ldo/connected"; import { getStorageFromWebId } from "../src/getStorageFromWebId"; +import type { ResourceInfo } from "@ldo/test-solid-server"; +import { createApp, setupServer } from "@ldo/test-solid-server"; +const ROOT_CONTAINER = "http://localhost:3001/"; +const WEB_ID = "http://localhost:3001/example/profile/card#me"; const TEST_CONTAINER_SLUG = "test_ldo/"; const TEST_CONTAINER_URI = `${ROOT_CONTAINER}${TEST_CONTAINER_SLUG}` as SolidContainerUri; @@ -93,7 +93,7 @@ const TEST_CONTAINER_TTL = `@prefix dc: . posix:size 522. posix:mtime 1697810234; posix:size 10.`; -const TEST_CONTAINER_ACL_URI = `${TEST_CONTAINER_URI}.acl`; +const _TEST_CONTAINER_ACL_URI = `${TEST_CONTAINER_URI}.acl`; const TEST_CONTAINER_ACL = `<#b30e3fd1-b5a8-4763-ad9d-e95de9cf7933> a ; <${TEST_CONTAINER_URI}>; <${TEST_CONTAINER_URI}>; @@ -106,6 +106,57 @@ const SAMPLE_PROFILE_TTL = ` <${SAMPLE_PROFILE_URI}> pim:storage , . `; +const resourceInfo: ResourceInfo = { + slug: TEST_CONTAINER_SLUG, + isContainer: true, + contains: [ + { + slug: ".acl", + isContainer: false, + mimeType: "text/turtle", + data: TEST_CONTAINER_ACL, + }, + { + slug: "sample.ttl", + isContainer: false, + mimeType: "text/turtle", + data: SPIDER_MAN_TTL, + }, + { + slug: "sample.txt", + isContainer: false, + mimeType: "text/plain", + data: "some text.", + }, + { + slug: "profile.ttl", + isContainer: false, + mimeType: "text/turtle", + data: SAMPLE_PROFILE_TTL, + }, + { + slug: "sample_container/", + isContainer: true, + shouldNotInit: true, + contains: [], + }, + { + slug: SAMPLE2_DATA_SLUG, + isContainer: false, + shouldNotInit: true, + mimeType: "text/turtle", + data: "", + }, + { + slug: SAMPLE2_BINARY_SLUG, + isContainer: false, + shouldNotInit: true, + mimeType: "text/plain", + data: "", + }, + ], +}; + async function testRequestLoads( request: () => Promise, loadingResource: SolidLeaf | SolidContainer, @@ -149,98 +200,13 @@ async function testRequestLoads( } describe("Integration", () => { - let app: App; - let authFetch: typeof fetch; - let fetchMock: jest.Mock< - Promise, - [input: RequestInfo | URL, init?: RequestInit | undefined] - >; let solidLdoDataset: ConnectedLdoDataset; - let previousJestId: string | undefined; - let previousNodeEnv: string | undefined; - beforeAll(async () => { - // Remove Jest ID so that community solid server doesn't use the Jest Import - previousJestId = process.env.JEST_WORKER_ID; - previousNodeEnv = process.env.NODE_ENV; - delete process.env.JEST_WORKER_ID; - process.env.NODE_ENV = "other_test"; - // Start up the server - app = await createApp(); - await app.start(); - authFetch = await generateAuthFetch(); - }); - - afterAll(async () => { - app.stop(); - process.env.JEST_WORKER_ID = previousJestId; - process.env.NODE_ENV = previousNodeEnv; - const testDataPath = path.join(__dirname, "./data"); - await fs.rm(testDataPath, { recursive: true, force: true }); - }); + const s = setupServer(3001, resourceInfo); beforeEach(async () => { - fetchMock = jest.fn(authFetch); solidLdoDataset = createSolidLdoDataset(); - solidLdoDataset.setContext("solid", { fetch: fetchMock }); - // Create a new document called sample.ttl - await authFetch(ROOT_CONTAINER, { - method: "POST", - headers: { - link: '; rel="type"', - slug: TEST_CONTAINER_SLUG, - }, - }); - await authFetch(TEST_CONTAINER_ACL_URI, { - method: "PUT", - headers: { - "content-type": "text/turtle", - }, - body: TEST_CONTAINER_ACL, - }); - await Promise.all([ - authFetch(TEST_CONTAINER_URI, { - method: "POST", - headers: { "content-type": "text/turtle", slug: "sample.ttl" }, - body: SPIDER_MAN_TTL, - }), - authFetch(TEST_CONTAINER_URI, { - method: "POST", - headers: { "content-type": "text/plain", slug: "sample.txt" }, - body: "some text.", - }), - authFetch(TEST_CONTAINER_URI, { - method: "POST", - headers: { "content-type": "text/turtle", slug: "profile.ttl" }, - body: SAMPLE_PROFILE_TTL, - }), - ]); - }); - - afterEach(async () => { - await Promise.all([ - authFetch(SAMPLE_DATA_URI, { - method: "DELETE", - }), - authFetch(SAMPLE2_DATA_URI, { - method: "DELETE", - }), - authFetch(SAMPLE_BINARY_URI, { - method: "DELETE", - }), - authFetch(SAMPLE2_BINARY_URI, { - method: "DELETE", - }), - authFetch(SAMPLE_PROFILE_URI, { - method: "DELETE", - }), - authFetch(SAMPLE_CONTAINER_URI, { - method: "DELETE", - }), - ]); - await authFetch(TEST_CONTAINER_URI, { - method: "DELETE", - }); + solidLdoDataset.setContext("solid", { fetch: s.fetchMock }); }); /** @@ -338,7 +304,7 @@ describe("Integration", () => { }); it("Returns an ServerError when an 500 error is returned", async () => { - fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); const result = await testRequestLoads(() => resource.read(), resource, { isLoading: true, @@ -350,7 +316,7 @@ describe("Integration", () => { }); it("Returns an Unauthorized error if a 403 error is returned", async () => { - fetchMock.mockResolvedValueOnce(new Response("Error", { status: 403 })); + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 403 })); const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); const result = await testRequestLoads(() => resource.read(), resource, { isLoading: true, @@ -362,7 +328,7 @@ describe("Integration", () => { }); it("Returns an UnauthenticatedError on an 401 error is returned", async () => { - fetchMock.mockResolvedValueOnce(new Response("Error", { status: 401 })); + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 401 })); const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); const result = await testRequestLoads(() => resource.read(), resource, { isLoading: true, @@ -374,7 +340,7 @@ describe("Integration", () => { }); it("Returns an UnexpectedHttpError on a strange number error is returned", async () => { - fetchMock.mockResolvedValueOnce(new Response("Error", { status: 399 })); + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 399 })); const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); const result = await testRequestLoads(() => resource.read(), resource, { isLoading: true, @@ -386,7 +352,7 @@ describe("Integration", () => { }); it("Returns a NoncompliantPod error when no content type is returned", async () => { - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(undefined, { status: 200, headers: {} }), ); const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); @@ -404,7 +370,7 @@ describe("Integration", () => { }); it("Returns a NoncompliantPod error if invalid turtle is provided", async () => { - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response("Error", { status: 200, headers: new Headers({ "content-type": "text/turtle" }), @@ -425,7 +391,7 @@ describe("Integration", () => { }); it("Parses Turtle even when the content type contains parameters", async () => { - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(SPIDER_MAN_TTL, { status: 200, headers: new Headers({ "content-type": "text/turtle;charset=utf-8" }), @@ -443,7 +409,7 @@ describe("Integration", () => { }); it("Returns an UnexpectedResourceError if an unknown error is triggered", async () => { - fetchMock.mockRejectedValueOnce(new Error("Something happened.")); + s.fetchMock.mockRejectedValueOnce(new Error("Something happened.")); const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); const result = await testRequestLoads(() => resource.read(), resource, { isLoading: true, @@ -457,7 +423,7 @@ describe("Integration", () => { }); it("Does not return an error if there is no link header for a container request", async () => { - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(TEST_CONTAINER_TTL, { status: 200, headers: new Headers({ "content-type": "text/turtle" }), @@ -489,7 +455,7 @@ describe("Integration", () => { resource.read(), ]); - expect(fetchMock).toHaveBeenCalledTimes(1); + expect(s.fetchMock).toHaveBeenCalledTimes(1); expect(result.type).toBe("dataReadSuccess"); expect(result1.type).toBe("dataReadSuccess"); }); @@ -502,7 +468,7 @@ describe("Integration", () => { resource.read(), ]); - expect(fetchMock).toHaveBeenCalledTimes(3); + expect(s.fetchMock).toHaveBeenCalledTimes(3); expect(result.type).toBe("dataReadSuccess"); expect(result1.type).toBe("dataReadSuccess"); }); @@ -551,9 +517,9 @@ describe("Integration", () => { it("returns a cached existing container", async () => { const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); await resource.read(); - fetchMock.mockClear(); + s.fetchMock.mockClear(); const result = await resource.readIfUnfetched(); - expect(fetchMock).not.toHaveBeenCalled(); + expect(s.fetchMock).not.toHaveBeenCalled(); expect(result.type).toBe("containerReadSuccess"); expect(resource.children().length).toBe(3); }); @@ -561,7 +527,7 @@ describe("Integration", () => { it("returns a cached existing data leaf", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); await resource.read(); - fetchMock.mockClear(); + s.fetchMock.mockClear(); const result = await resource.readIfUnfetched(); expect(result.type).toBe("dataReadSuccess"); expect( @@ -576,7 +542,7 @@ describe("Integration", () => { it("returns a cached existing binary leaf", async () => { const resource = solidLdoDataset.getResource(SAMPLE_BINARY_URI); await resource.read(); - fetchMock.mockClear(); + s.fetchMock.mockClear(); const result = await resource.readIfUnfetched(); expect(result.type).toBe("binaryReadSuccess"); }); @@ -584,18 +550,18 @@ describe("Integration", () => { it("returns a cached absent container", async () => { const resource = solidLdoDataset.getResource(SAMPLE_CONTAINER_URI); await resource.read(); - fetchMock.mockClear(); + s.fetchMock.mockClear(); const result = await resource.readIfUnfetched(); - expect(fetchMock).not.toHaveBeenCalled(); + expect(s.fetchMock).not.toHaveBeenCalled(); expect(result.type).toBe("absentReadSuccess"); }); it("returns a cached absent leaf", async () => { const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); await resource.read(); - fetchMock.mockClear(); + s.fetchMock.mockClear(); const result = await resource.readIfUnfetched(); - expect(fetchMock).not.toHaveBeenCalled(); + expect(s.fetchMock).not.toHaveBeenCalled(); expect(result.type).toBe("absentReadSuccess"); }); }); @@ -614,19 +580,19 @@ describe("Integration", () => { }); it("Returns an error if there is no root container", async () => { - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(TEST_CONTAINER_TTL, { status: 200, headers: new Headers({ "content-type": "text/turtle" }), }), ); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(TEST_CONTAINER_TTL, { status: 200, headers: new Headers({ "content-type": "text/turtle" }), }), ); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(TEST_CONTAINER_TTL, { status: 200, headers: new Headers({ "content-type": "text/turtle" }), @@ -641,7 +607,7 @@ describe("Integration", () => { }); it("An error to be returned if a common http error is encountered", async () => { - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(TEST_CONTAINER_TTL, { status: 500, }), @@ -653,7 +619,7 @@ describe("Integration", () => { }); it("Returns an UnexpectedResourceError if an unknown error is triggered", async () => { - fetchMock.mockRejectedValueOnce(new Error("Something happened.")); + s.fetchMock.mockRejectedValueOnce(new Error("Something happened.")); const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); const result = await resource.getRootContainer(); expect(result.isError).toBe(true); @@ -663,7 +629,7 @@ describe("Integration", () => { }); it("returns a NonCompliantPodError when there is no root", async () => { - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(TEST_CONTAINER_TTL, { status: 200, headers: new Headers({ @@ -711,7 +677,7 @@ describe("Integration", () => { }); it("Passes any errors returned from the read method", async () => { - fetchMock.mockRejectedValueOnce(new Error("Something happened.")); + s.fetchMock.mockRejectedValueOnce(new Error("Something happened.")); const result = await getStorageFromWebId( SAMPLE_DATA_URI, solidLdoDataset, @@ -720,8 +686,8 @@ describe("Integration", () => { }); it("Passes any errors returned from the getRootContainer method", async () => { - fetchMock.mockResolvedValueOnce(new Response("")); - fetchMock.mockRejectedValueOnce(new Error("Something happened.")); + s.fetchMock.mockResolvedValueOnce(new Response("")); + s.fetchMock.mockRejectedValueOnce(new Error("Something happened.")); const result = await getStorageFromWebId( SAMPLE_DATA_URI, solidLdoDataset, @@ -828,7 +794,7 @@ describe("Integration", () => { it("returns and error if creating a container", async () => { const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(TEST_CONTAINER_TTL, { status: 500, }), @@ -840,7 +806,7 @@ describe("Integration", () => { it("returns a delete error if delete failed", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(TEST_CONTAINER_TTL, { status: 500, }), @@ -852,10 +818,10 @@ describe("Integration", () => { it("returns an error if the create fetch fails", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); - fetchMock.mockImplementationOnce(async (...args) => { - return authFetch(...args); + s.fetchMock.mockImplementationOnce(async (...args) => { + return s.authFetch(...args); }); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(TEST_CONTAINER_TTL, { status: 500, }), @@ -867,10 +833,10 @@ describe("Integration", () => { it("returns an unexpected error if some unknown error is triggered", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); - fetchMock.mockImplementationOnce(async (...args) => { - return authFetch(...args); + s.fetchMock.mockImplementationOnce(async (...args) => { + return s.authFetch(...args); }); - fetchMock.mockImplementationOnce(async () => { + s.fetchMock.mockImplementationOnce(async () => { throw new Error("Some Unknown"); }); const result = await resource.createAndOverwrite(); @@ -889,7 +855,7 @@ describe("Integration", () => { expect(result1.type).toBe("createSuccess"); expect(result2.type).toBe("createSuccess"); // 1 for read, 1 for delete in createAndOverwrite, 1 for create - expect(fetchMock).toHaveBeenCalledTimes(3); + expect(s.fetchMock).toHaveBeenCalledTimes(3); }); it("batches the create request while waiting on a similar request", async () => { @@ -902,7 +868,7 @@ describe("Integration", () => { expect(result1.type).toBe("createSuccess"); expect(result2.type).toBe("createSuccess"); // 1 for delete in createAndOverwrite, 1 for create - expect(fetchMock).toHaveBeenCalledTimes(2); + expect(s.fetchMock).toHaveBeenCalledTimes(2); }); }); @@ -999,7 +965,7 @@ describe("Integration", () => { it("returns an error if creating a container", async () => { const resource = solidLdoDataset.getResource(SAMPLE_CONTAINER_URI); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(SAMPLE_CONTAINER_URI, { status: 500, }), @@ -1011,7 +977,7 @@ describe("Integration", () => { it("returns an error if creating a leaf", async () => { const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(SAMPLE2_DATA_URI, { status: 500, }), @@ -1028,7 +994,7 @@ describe("Integration", () => { describe("deleteResource", () => { it("returns an unexpected http error if an unexpected value is returned", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(TEST_CONTAINER_TTL, { status: 214, }), @@ -1040,7 +1006,7 @@ describe("Integration", () => { it("returns an unexpected resource error if an unknown error is triggered", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); - fetchMock.mockImplementationOnce(async () => { + s.fetchMock.mockImplementationOnce(async () => { throw new Error("Some unknwon"); }); const result = await resource.delete(); @@ -1056,7 +1022,7 @@ describe("Integration", () => { it("returns an error on container read when deleting a container", async () => { const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); - fetchMock.mockImplementation(async (input, init) => { + s.fetchMock.mockImplementation(async (input, init) => { if ( (init?.method === "get" || !init?.method) && input === TEST_CONTAINER_URI @@ -1065,7 +1031,7 @@ describe("Integration", () => { status: 500, }); } - return authFetch(input, init); + return s.authFetch(input, init); }); const result = await resource.delete(); expect(result.isError).toBe(true); @@ -1082,13 +1048,13 @@ describe("Integration", () => { it("returns an error on child delete when deleting a container", async () => { const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); - fetchMock.mockImplementation(async (input, init) => { + s.fetchMock.mockImplementation(async (input, init) => { if (init?.method === "delete" && input === SAMPLE_DATA_URI) { return new Response(SAMPLE_DATA_URI, { status: 500, }); } - return authFetch(input, init); + return s.authFetch(input, init); }); const result = await resource.delete(); expect(result.isError).toBe(true); @@ -1105,13 +1071,13 @@ describe("Integration", () => { it("returns an error on container delete when deleting a container", async () => { const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); - fetchMock.mockImplementation(async (input, init) => { + s.fetchMock.mockImplementation(async (input, init) => { if (init?.method === "delete" && input === TEST_CONTAINER_URI) { return new Response(SAMPLE_DATA_URI, { status: 500, }); } - return authFetch(input, init); + return s.authFetch(input, init); }); const result = await resource.delete(); expect(result.isError).toBe(true); @@ -1184,7 +1150,7 @@ describe("Integration", () => { }); it("handles an HTTP error", async () => { - fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); const transaction = solidLdoDataset.startTransaction(); transaction.add(normanQuad); @@ -1202,7 +1168,7 @@ describe("Integration", () => { }); it("handles an unknown request", async () => { - fetchMock.mockImplementationOnce(() => { + s.fetchMock.mockImplementationOnce(() => { throw new Error("Some Error"); }); const transaction = solidLdoDataset.startTransaction(); @@ -1286,7 +1252,7 @@ describe("Integration", () => { ]); expect(updateResult1.type).toBe("aggregateSuccess"); expect(updateResult2.type).toBe("aggregateSuccess"); - expect(fetchMock).toHaveBeenCalledTimes(2); + expect(s.fetchMock).toHaveBeenCalledTimes(2); expect( solidLdoDataset.has( createQuad( @@ -1394,7 +1360,7 @@ describe("Integration", () => { it("returns a delete error if delete failed", async () => { const resource = solidLdoDataset.getResource(SAMPLE_BINARY_URI); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(TEST_CONTAINER_TTL, { status: 500, }), @@ -1409,10 +1375,10 @@ describe("Integration", () => { it("returns an error if the create fetch fails", async () => { const resource = solidLdoDataset.getResource(SAMPLE_BINARY_URI); - fetchMock.mockImplementationOnce(async (...args) => { - return authFetch(...args); + s.fetchMock.mockImplementationOnce(async (...args) => { + return s.authFetch(...args); }); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(TEST_CONTAINER_TTL, { status: 500, }), @@ -1427,10 +1393,10 @@ describe("Integration", () => { it("returns an unexpected error if some unknown error is triggered", async () => { const resource = solidLdoDataset.getResource(SAMPLE_BINARY_URI); - fetchMock.mockImplementationOnce(async (...args) => { - return authFetch(...args); + s.fetchMock.mockImplementationOnce(async (...args) => { + return s.authFetch(...args); }); - fetchMock.mockImplementationOnce(async () => { + s.fetchMock.mockImplementationOnce(async () => { throw new Error("Some Unknown"); }); const result = await resource.uploadAndOverwrite( @@ -1458,7 +1424,7 @@ describe("Integration", () => { expect(result1.type).toBe("createSuccess"); expect(result2.type).toBe("createSuccess"); // 1 for read, 1 for delete in createAndOverwrite, 1 for create - expect(fetchMock).toHaveBeenCalledTimes(3); + expect(s.fetchMock).toHaveBeenCalledTimes(3); expect(resource.getBlob()?.toString()).toBe("some text 2."); }); @@ -1478,7 +1444,7 @@ describe("Integration", () => { expect(result1.type).toBe("createSuccess"); expect(result2.type).toBe("createSuccess"); // 1 for delete in createAndOverwrite, 1 for create - expect(fetchMock).toHaveBeenCalledTimes(2); + expect(s.fetchMock).toHaveBeenCalledTimes(2); expect(resource.getBlob()?.toString()).toBe("some text 2."); }); }); @@ -1552,7 +1518,7 @@ describe("Integration", () => { it("returns an error if an error is encountered", async () => { const resource = solidLdoDataset.getResource(SAMPLE2_BINARY_URI); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(SAMPLE2_BINARY_URI, { status: 500, }), @@ -1596,7 +1562,7 @@ describe("Integration", () => { }); it("handles an error when committing data", async () => { - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response(SAMPLE_DATA_URI, { status: 500, }), @@ -1847,7 +1813,7 @@ describe("Integration", () => { it("returns an error when an error is encountered fetching the aclUri", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); - fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); const wacResult = await resource.getWac(); expect(wacResult.isError).toBe(true); expect(wacResult.type).toBe("serverError"); @@ -1862,7 +1828,7 @@ describe("Integration", () => { it("returns a non-compliant error if a response is returned without a link header", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response("Error", { status: 200, }), @@ -1879,7 +1845,7 @@ describe("Integration", () => { it("returns a non-compliant error if a response is returned without an ACL link", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response("Error", { status: 200, headers: { link: `; rel="describedBy"` }, @@ -1896,7 +1862,7 @@ describe("Integration", () => { }); it("Returns an UnexpectedResourceError if an unknown error is triggered while getting the wac URI", async () => { - fetchMock.mockRejectedValueOnce(new Error("Something happened.")); + s.fetchMock.mockRejectedValueOnce(new Error("Something happened.")); const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); const result = await resource.getWac(); expect(result.isError).toBe(true); @@ -1907,13 +1873,13 @@ describe("Integration", () => { it("Returns an error if the request to get the ACL fails", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response("", { status: 200, headers: { link: `; rel="acl"` }, }), ); - fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); const wacResult = await resource.getWac(); expect(wacResult.isError).toBe(true); expect(wacResult.type).toBe("serverError"); @@ -1923,13 +1889,13 @@ describe("Integration", () => { it("Returns an error if the request to the ACL resource returns invalid turtle", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response("", { status: 200, headers: { link: `; rel="acl"` }, }), ); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response("BAD TURTLE", { status: 200 }), ); const wacResult = await resource.getWac(); @@ -1944,14 +1910,14 @@ describe("Integration", () => { it("Returns an error if there was a problem getting the parent resource", async () => { const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response("", { status: 200, headers: { link: `; rel="acl"` }, }), ); - fetchMock.mockResolvedValueOnce(new Response("", { status: 404 })); - fetchMock.mockResolvedValueOnce(new Response("", { status: 500 })); + s.fetchMock.mockResolvedValueOnce(new Response("", { status: 404 })); + s.fetchMock.mockResolvedValueOnce(new Response("", { status: 500 })); const wacResult = await resource.getWac(); expect(wacResult.isError).toBe(true); expect(wacResult.type).toBe("serverError"); @@ -1959,13 +1925,13 @@ describe("Integration", () => { it("returns a NonCompliantPodError when this is the root resource and it doesn't have an ACL", async () => { const resource = solidLdoDataset.getResource(ROOT_CONTAINER); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response("", { status: 200, headers: { link: `; rel="acl"` }, }), ); - fetchMock.mockResolvedValueOnce(new Response("", { status: 404 })); + s.fetchMock.mockResolvedValueOnce(new Response("", { status: 404 })); const wacResult = await resource.getWac(); expect(wacResult.isError).toBe(true); expect(wacResult.type).toBe("noncompliantPodError"); @@ -2039,7 +2005,7 @@ describe("Integration", () => { it("returns an error when an error is encountered fetching the aclUri", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); - fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); const wacResult = await resource.setWac(newRules); expect(wacResult.isError).toBe(true); expect(wacResult.type).toBe("serverError"); @@ -2047,13 +2013,13 @@ describe("Integration", () => { it("Returns an error when the request to write the access rules throws an error", async () => { const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); - fetchMock.mockResolvedValueOnce( + s.fetchMock.mockResolvedValueOnce( new Response("", { status: 200, headers: { link: `; rel="acl"` }, }), ); - fetchMock.mockResolvedValueOnce(new Response("", { status: 500 })); + s.fetchMock.mockResolvedValueOnce(new Response("", { status: 500 })); const wacResult = await resource.setWac(newRules); expect(wacResult.isError).toBe(true); expect(wacResult.type).toBe("serverError"); @@ -2083,7 +2049,7 @@ describe("Integration", () => { expect(resource.isSubscribedToNotifications()).toBe(true); - await authFetch(SAMPLE_DATA_URI, { + await s.authFetch(SAMPLE_DATA_URI, { method: "PATCH", body: 'INSERT DATA { "Peter Parker" . }', headers: { @@ -2105,7 +2071,7 @@ describe("Integration", () => { spidermanCallback.mockClear(); await resource.unsubscribeFromNotifications(subscriptionId); expect(resource.isSubscribedToNotifications()).toBe(false); - await authFetch(SAMPLE_DATA_URI, { + await s.authFetch(SAMPLE_DATA_URI, { method: "PATCH", body: 'INSERT DATA { "Miles Morales" . }', headers: { @@ -2143,7 +2109,7 @@ describe("Integration", () => { await resource.subscribeToNotifications(); - await authFetch(SAMPLE_DATA_URI, { + await s.authFetch(SAMPLE_DATA_URI, { method: "DELETE", }); await wait(1000); @@ -2177,7 +2143,7 @@ describe("Integration", () => { await testContainer.subscribeToNotifications(); - await authFetch(SAMPLE_DATA_URI, { + await s.authFetch(SAMPLE_DATA_URI, { method: "DELETE", }); await wait(1000); @@ -2211,7 +2177,7 @@ describe("Integration", () => { await testContainer.subscribeToNotifications(); - await authFetch(TEST_CONTAINER_URI, { + await s.authFetch(TEST_CONTAINER_URI, { method: "POST", headers: { "content-type": "text/turtle", slug: "sample2.ttl" }, body: SPIDER_MAN_TTL, @@ -2230,22 +2196,25 @@ describe("Integration", () => { await testContainer.unsubscribeFromAllNotifications(); }); - it("returns an error when it cannot subscribe to a notification", async () => { + it.skip("returns an error when it cannot subscribe to a notification", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); const onError = jest.fn(); - await app.stop(); - await resource.subscribeToNotifications({ onNotificationError: onError }); + await s.app.stop(); + await resource.subscribeToNotifications({ + onNotificationError: onError, + }); expect(onError).toHaveBeenCalledTimes(2); - await app.start(); + await s.app.start(); }); - it("returns an error when the server doesnt support websockets", async () => { + it.skip("returns an error when the server doesnt support websockets", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); const onError = jest.fn(); - await app.stop(); + await s.app.stop(); const disabledWebsocketsApp = await createApp( + 3001, path.join(__dirname, "./configs/server-config-without-websocket.json"), ); await disabledWebsocketsApp.start(); @@ -2254,15 +2223,16 @@ describe("Integration", () => { expect(onError).toHaveBeenCalledTimes(2); await disabledWebsocketsApp.stop(); - await app.start(); + await s.app.start(); }); - it("attempts to reconnect multiple times before giving up.", async () => { + it.skip("attempts to reconnect multiple times before giving up.", async () => { const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); const onError = jest.fn(); - await app.stop(); + await s.app.stop(); const disabledWebsocketsApp = await createApp( + 3001, path.join(__dirname, "./configs/server-config-without-websocket.json"), ); await disabledWebsocketsApp.start(); @@ -2282,7 +2252,7 @@ describe("Integration", () => { ); await disabledWebsocketsApp.stop(); - await app.start(); + await s.app.start(); }); it("causes no problems when unsubscribing when not subscribed", async () => { diff --git a/packages/connected-solid/test/setup-tests.ts b/packages/connected-solid/test/setup-tests.ts deleted file mode 100644 index f4378ae..0000000 --- a/packages/connected-solid/test/setup-tests.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { config } from "dotenv"; - -config(); diff --git a/packages/connected/jest.config.js b/packages/connected/jest.config.js index 9bfe763..ffe0a9e 100644 --- a/packages/connected/jest.config.js +++ b/packages/connected/jest.config.js @@ -5,6 +5,6 @@ module.exports = { rootDir: "./", transform: { "^.+\\.(ts|tsx)?$": "ts-jest", - "^.+\\.(js|jsx)$": "babel-jest", }, + coveragePathIgnorePatterns: ["/node_modules/", "/dist/"], }; diff --git a/packages/connected/package.json b/packages/connected/package.json index 7e328dd..8aaa654 100644 --- a/packages/connected/package.json +++ b/packages/connected/package.json @@ -1,16 +1,17 @@ { "name": "@ldo/connected", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "description": "A library for connecting LDO to resources outside the LDO environment", "main": "dist/index.js", "scripts": { "build": "tsc --project tsconfig.build.json", "watch": "tsc --watch", - "test": "jest --coverage", + "test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --coverage", "test:watch": "jest --watch", "prepublishOnly": "npm run test && npm run build", "lint": "eslint src/** --fix --no-error-on-unmatched-pattern", - "docs": "typedoc --plugin typedoc-plugin-markdown" + "docs": "typedoc --plugin typedoc-plugin-markdown", + "build:ldo": "ldo build --input test/.shapes --output test/.ldo" }, "repository": { "type": "git", @@ -23,19 +24,23 @@ }, "homepage": "https://github.com/o-development/ldobjects/tree/main/packages/solid#readme", "devDependencies": { + "@ldo/connected-solid": "^1.0.0-alpha.9", + "@ldo/test-solid-server": "^1.0.0-alpha.9", "@rdfjs/data-model": "^1.2.0", "@rdfjs/types": "^1.0.1", "cross-env": "^7.0.3", "jest-rdf": "^1.8.0", + "ts-jest": "^29.3.2", "ts-node": "^10.9.1", "typed-emitter": "^2.1.0", "typedoc": "^0.25.4", - "typedoc-plugin-markdown": "^3.17.1" + "typedoc-plugin-markdown": "^3.17.1", + "uuid": "^11.1.0" }, "dependencies": { - "@ldo/dataset": "^1.0.0-alpha.3", - "@ldo/ldo": "^1.0.0-alpha.3", - "@ldo/rdf-utils": "^1.0.0-alpha.3" + "@ldo/dataset": "^1.0.0-alpha.9", + "@ldo/ldo": "^1.0.0-alpha.9", + "@ldo/rdf-utils": "^1.0.0-alpha.9" }, "files": [ "dist", diff --git a/packages/connected/src/ConnectedLdoBuilder.ts b/packages/connected/src/ConnectedLdoBuilder.ts new file mode 100644 index 0000000..2a9b833 --- /dev/null +++ b/packages/connected/src/ConnectedLdoBuilder.ts @@ -0,0 +1,43 @@ +import type { LdoBase, ShapeType } from "@ldo/ldo"; +import { LdoBuilder } from "@ldo/ldo"; +import type { IConnectedLdoBuilder } from "./types/IConnectedLdoBuilder"; +import type { JsonldDatasetProxyBuilder } from "@ldo/jsonld-dataset-proxy"; +import type { SubjectNode } from "@ldo/rdf-utils"; +import type { LQInput } from "./types/ILinkQuery"; +import { ResourceLinkQuery } from "./linkTraversal/ResourceLinkQuery"; +import type { ConnectedPlugin } from "./types/ConnectedPlugin"; +import type { IConnectedLdoDataset } from "./types/IConnectedLdoDataset"; + +export class ConnectedLdoBuilder< + Type extends LdoBase, + Plugins extends ConnectedPlugin[], + > + extends LdoBuilder + implements IConnectedLdoBuilder +{ + protected parentDataset: IConnectedLdoDataset; + + constructor( + parentDataset: IConnectedLdoDataset, + jsonldDatasetProxyBuilder: JsonldDatasetProxyBuilder, + shapeType: ShapeType, + ) { + super(jsonldDatasetProxyBuilder, shapeType); + this.parentDataset = parentDataset; + } + + startLinkQuery>( + startingResource: Plugins[number]["types"]["resource"], + startingSubject: SubjectNode | string, + linkQueryInput: Input, + ): ResourceLinkQuery { + return new ResourceLinkQuery( + this.parentDataset, + this.shapeType, + this, + startingResource, + startingSubject, + linkQueryInput, + ); + } +} diff --git a/packages/connected/src/ConnectedLdoDataset.ts b/packages/connected/src/ConnectedLdoDataset.ts index e9a043f..ffc2856 100644 --- a/packages/connected/src/ConnectedLdoDataset.ts +++ b/packages/connected/src/ConnectedLdoDataset.ts @@ -1,17 +1,19 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import type { LdoBase, ShapeType } from "@ldo/ldo"; import { LdoDataset, startTransaction } from "@ldo/ldo"; -import type { ConnectedPlugin } from "./ConnectedPlugin"; +import type { ConnectedPlugin } from "./types/ConnectedPlugin"; import type { Dataset, DatasetFactory, Quad } from "@rdfjs/types"; import type { ITransactionDatasetFactory } from "@ldo/subscribable-dataset"; import { InvalidIdentifierResource } from "./InvalidIdentifierResource"; -import type { ConnectedContext } from "./ConnectedContext"; +import type { ConnectedContext } from "./types/ConnectedContext"; import type { GetResourceReturnType, IConnectedLdoDataset, -} from "./IConnectedLdoDataset"; +} from "./types/IConnectedLdoDataset"; import { ConnectedLdoTransactionDataset } from "./ConnectedLdoTransactionDataset"; import type { SubjectNode } from "@ldo/rdf-utils"; +import { ConnectedLdoBuilder } from "./ConnectedLdoBuilder"; +import jsonldDatasetProxy from "@ldo/jsonld-dataset-proxy"; /** * A ConnectedLdoDataset has all the functionality of a LdoDataset with the @@ -160,6 +162,14 @@ export class ConnectedLdoDataset< return resource as any; } + getResources(): GetResourceReturnType[] { + return Array.from(this.resourceMap.values()); + } + + getFetchedResources(): GetResourceReturnType[] { + return this.getResources().filter((resource) => resource.isFetched()); + } + /** * Generates a random uri and creates a resource. * @@ -277,6 +287,13 @@ export class ConnectedLdoDataset< this.context[pluginName] = { ...this.context[pluginName], ...context }; } + public usingType( + shapeType: ShapeType, + ): ConnectedLdoBuilder { + const proxyBuilder = jsonldDatasetProxy(this, shapeType.context); + return new ConnectedLdoBuilder(this, proxyBuilder, shapeType); + } + public startTransaction(): ConnectedLdoTransactionDataset { return new ConnectedLdoTransactionDataset( this, diff --git a/packages/connected/src/ConnectedLdoTransactionDataset.ts b/packages/connected/src/ConnectedLdoTransactionDataset.ts index f3e8155..34339b6 100644 --- a/packages/connected/src/ConnectedLdoTransactionDataset.ts +++ b/packages/connected/src/ConnectedLdoTransactionDataset.ts @@ -1,4 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ +import type { LdoBase, ShapeType } from "@ldo/ldo"; import { LdoTransactionDataset } from "@ldo/ldo"; import type { DatasetFactory, Quad } from "@rdfjs/types"; import { @@ -6,12 +7,12 @@ import { type ITransactionDatasetFactory, } from "@ldo/subscribable-dataset"; import type { DatasetChanges, GraphNode } from "@ldo/rdf-utils"; -import type { ConnectedPlugin } from "./ConnectedPlugin"; -import type { ConnectedContext } from "./ConnectedContext"; +import type { ConnectedPlugin } from "./types/ConnectedPlugin"; +import type { ConnectedContext } from "./types/ConnectedContext"; import type { GetResourceReturnType, IConnectedLdoDataset, -} from "./IConnectedLdoDataset"; +} from "./types/IConnectedLdoDataset"; import { splitChangesByGraph } from "./util/splitChangesByGraph"; import type { IgnoredInvalidUpdateSuccess } from "./results/success/UpdateSuccess"; import { UpdateDefaultGraphSuccess } from "./results/success/UpdateSuccess"; @@ -21,6 +22,8 @@ import type { AggregateSuccess, SuccessResult, } from "./results/success/SuccessResult"; +import { ConnectedLdoBuilder } from "./ConnectedLdoBuilder"; +import jsonldDatasetProxy from "@ldo/jsonld-dataset-proxy"; /** * A ConnectedLdoTransactionDataset has all the functionality of a @@ -98,6 +101,14 @@ export class ConnectedLdoTransactionDataset return this.context.dataset.getResource(uri, pluginName); } + getResources(): Plugins[number]["types"]["resource"][] { + return this.context.dataset.getResources(); + } + + getFetchedResources(): Plugins[number]["types"]["resource"][] { + return this.context.dataset.getFetchedResources(); + } + createResource< Name extends Plugins[number]["name"], Plugin extends Extract, @@ -225,4 +236,11 @@ export class ConnectedLdoTransactionDataset results: results.map((result) => result[2]) as any, }; } + + public usingType( + shapeType: ShapeType, + ): ConnectedLdoBuilder { + const proxyBuilder = jsonldDatasetProxy(this, shapeType.context); + return new ConnectedLdoBuilder(this, proxyBuilder, shapeType); + } } diff --git a/packages/connected/src/createConntectedLdoDataset.ts b/packages/connected/src/createConntectedLdoDataset.ts index d42df33..d67e815 100644 --- a/packages/connected/src/createConntectedLdoDataset.ts +++ b/packages/connected/src/createConntectedLdoDataset.ts @@ -1,6 +1,6 @@ import { createDatasetFactory } from "@ldo/dataset"; import { ConnectedLdoDataset } from "./ConnectedLdoDataset"; -import type { ConnectedPlugin } from "./ConnectedPlugin"; +import type { ConnectedPlugin } from "./types/ConnectedPlugin"; import { createTransactionDatasetFactory } from "@ldo/subscribable-dataset"; /** diff --git a/packages/connected/src/index.ts b/packages/connected/src/index.ts index f822389..d50f77e 100644 --- a/packages/connected/src/index.ts +++ b/packages/connected/src/index.ts @@ -1,13 +1,17 @@ -export * from "./IConnectedLdoDataset"; +export * from "./ConnectedLdoBuilder"; export * from "./ConnectedLdoDataset"; export * from "./ConnectedLdoTransactionDataset"; -export * from "./ConnectedPlugin"; + export * from "./Resource"; export * from "./InvalidIdentifierResource"; -export * from "./ConnectedContext"; export * from "./methods"; export * from "./createConntectedLdoDataset"; -export * from "./SubscriptionCallbacks"; + +export * from "./types/ConnectedContext"; +export * from "./types/ConnectedPlugin"; +export * from "./types/IConnectedLdoDataset"; +export * from "./types/IConnectedLdoBuilder"; +export * from "./types/ILinkQuery"; export * from "./util/splitChangesByGraph"; @@ -21,3 +25,12 @@ export * from "./results/success/ReadSuccess"; export * from "./results/success/UpdateSuccess"; export * from "./notifications/NotificationSubscription"; +export * from "./notifications/SubscriptionCallbacks"; + +export * from "./trackingProxy/TrackingProxyContext"; +export * from "./trackingProxy/TrackingSetProxy"; +export * from "./trackingProxy/TrackingSubjectProxy"; +export * from "./trackingProxy/createTrackingProxy"; + +export * from "./linkTraversal/ResourceLinkQuery"; +export * from "./linkTraversal/exploreLinks"; diff --git a/packages/connected/src/linkTraversal/ResourceLinkQuery.ts b/packages/connected/src/linkTraversal/ResourceLinkQuery.ts new file mode 100644 index 0000000..544ece2 --- /dev/null +++ b/packages/connected/src/linkTraversal/ResourceLinkQuery.ts @@ -0,0 +1,287 @@ +import type { LdoBase, ShapeType } from "@ldo/ldo"; +import type { + ExpandDeep, + ILinkQuery, + LQInput, + LQReturn, +} from "../types/ILinkQuery"; +import type { ConnectedPlugin } from "../types/ConnectedPlugin"; +import type { SubjectNode } from "@ldo/rdf-utils"; +import { exploreLinks } from "./exploreLinks"; +import type { IConnectedLdoDataset } from "../types/IConnectedLdoDataset"; +import type { IConnectedLdoBuilder } from "../types/IConnectedLdoBuilder"; +import { v4 } from "uuid"; +import type { nodeEventListener } from "@ldo/subscribable-dataset"; +import type { Quad } from "@rdfjs/types"; + +/** + * Represents a query over multiple datasources and constituting muliple + * resources. + * + * @example + * ```typescript + * import { ProfileShapeType } from "./.ldo/Profile.shapeType.ts"; + * + * // Create a link query + * const linkQuery = ldoDataset + * .usingType(ProfileShapeType) + * .startLinkQuery( + * "http://example.com/profile/card", + * "http://example.com/profile/card#me", + * { + * name: true, + * knows: { + * name: true, + * }, + * }, + * } + * ); + * // Susbscribe to this link query, automaticically updating the dataset when + * // something from the link query is changed. + * await linkQuery.subscribe(); + * ``` + */ +export class ResourceLinkQuery< + Type extends LdoBase, + QueryInput extends LQInput, + Plugins extends ConnectedPlugin[], +> implements ILinkQuery +{ + protected previousTransactionId: string = "INIT"; + + // Resource Subscriptions uri -> unsubscribeId + protected activeResourceSubscriptions: Record = {}; + // Unsubscribe IDs for this ResourceLinkQuery + protected thisUnsubscribeIds = new Set(); + + protected curOnDataChanged: nodeEventListener | undefined; + + protected resourcesWithSubscriptionInProgress: Record< + string, + Promise | undefined + > = {}; + + /** + * @internal + * @param parentDataset The dataset for which this link query is a part + * @param shapeType A ShapeType for the link query to follow + * @param ldoBuilder An LdoBuilder associated with the dataset + * @param startingResource The resource to explore first in the link query + * @param startingSubject The starting point of the link query + * @param linkQueryInput A definition of the link query + */ + constructor( + protected parentDataset: IConnectedLdoDataset, + protected shapeType: ShapeType, + protected ldoBuilder: IConnectedLdoBuilder, + protected startingResource: Plugins[number]["types"]["resource"], + protected startingSubject: SubjectNode | string, + protected linkQueryInput: QueryInput, + ) {} + + /** + * Runs this link query, returning the result + * @param options Options for how to run the link query + * @returns A subset of the ShapeType as defined by the LinkQuery + * + * @example + * ``` + * import { ProfileShapeType } from "./.ldo/Profile.shapeType.ts"; + * + * // Create a link query + * const linkQuery = ldoDataset + * .usingType(ProfileShapeType) + * .startLinkQuery( + * "http://example.com/profile/card", + * "http://example.com/profile/card#me", + * { + * name: true, + * knows: { + * name: true, + * }, + * }, + * } + * ); + * // Susbscribe to this link query, automaticically updating the dataset when + * // something from the link query is changed. + * const result = await linkQuery.read(); + * console.log(result.name); + * result.knows.forEach((person) => console.log(person.name)); + * // The following will type-error. Despite "phone" existing on a Profile, + * // it was not covered by the link query. + * console.log(result.phone); + * ``` + */ + async run(options?: { + reload?: boolean; + }): Promise>> { + await exploreLinks( + this.parentDataset, + this.shapeType, + this.startingResource, + this.startingSubject, + this.linkQueryInput, + { shouldRefreshResources: options?.reload }, + ); + return this.fromSubject(); + } + + /** + * Subscribes to the data defined by the link query, updating the dataset if + * any changes are made. + * @returns An unsubscribeId + * + * @example + * ``` + * import { ProfileShapeType } from "./.ldo/Profile.shapeType.ts"; + * + * // Create a link query + * const linkQuery = ldoDataset + * .usingType(ProfileShapeType) + * .startLinkQuery( + * "http://example.com/profile/card", + * "http://example.com/profile/card#me", + * { + * name: true, + * knows: { + * name: true, + * }, + * }, + * } + * ); + * // Susbscribe to this link query, automaticically updating the dataset when + * // something from the link query is changed. + * const unsubscribeId = await linkQuery.subscribe(); + * + * // Now, let's imagine the following triple was added to + * "http://example.com/profile/card": + * + * Because you're subscribed, the dataset will automatically be updated. + * + * // End subscription + * linkQuery.unsubscribe(unsubscribeId); + * ``` + */ + async subscribe(): Promise { + const subscriptionId = v4(); + this.thisUnsubscribeIds.add(subscriptionId); + // If there's already a registered onDataChange, we don't need to make a new + // on for this new subscription + if (this.curOnDataChanged) { + return subscriptionId; + } + this.curOnDataChanged = async ( + _changes, + transactionId: string, + _triggering, + ) => { + // Set a transaction Id, so that we only trigger one re-render + if (transactionId === this.previousTransactionId) return; + this.previousTransactionId = transactionId; + // Remove previous registration + this.parentDataset.removeListenerFromAllEvents(this.curOnDataChanged!); + + // Explore the links, with a subscription to re-explore the links if any + // covered information changes + const resourcesToUnsubscribeFrom = new Set( + Object.keys(this.activeResourceSubscriptions), + ); + + // Only add the listeners if we're currently subscribed + const exploreOptions = this.curOnDataChanged + ? { + onCoveredDataChanged: this.curOnDataChanged, + onResourceEncountered: async (resource) => { + // Wait for the the in progress registration to complete. Once it + // is complete, you're subscribed, so we can remove this from the + // resources to unsubscribe from. + if (this.resourcesWithSubscriptionInProgress[resource.uri]) { + await this.resourcesWithSubscriptionInProgress[resource.uri]; + resourcesToUnsubscribeFrom.delete(resource.uri); + return; + } + // No need to do anything if we're already subscribed + if (resourcesToUnsubscribeFrom.has(resource.uri)) { + resourcesToUnsubscribeFrom.delete(resource.uri); + return; + } + // Otherwise begin the subscription + let resolve; + this.resourcesWithSubscriptionInProgress[resource.uri] = + new Promise((res) => { + resolve = res; + }); + const unsubscribeId = await resource.subscribeToNotifications(); + this.activeResourceSubscriptions[resource.uri] = unsubscribeId; + // Unsubscribe in case unsubscribe call came in mid subscription + if (!this.curOnDataChanged) { + await this.unsubscribeFromResource(resource.uri); + } + resolve(); + this.resourcesWithSubscriptionInProgress[resource.uri] = + undefined; + }, + } + : {}; + await exploreLinks( + this.parentDataset, + this.shapeType, + this.startingResource, + this.startingSubject, + this.linkQueryInput, + exploreOptions, + ); + // Clean up unused subscriptions + await Promise.all( + Array.from(resourcesToUnsubscribeFrom).map(async (uri) => + this.unsubscribeFromResource(uri), + ), + ); + }; + await this.curOnDataChanged({}, "BEGIN_SUB", [null, null, null, null]); + return subscriptionId; + } + + private async unsubscribeFromResource(uri) { + const resource = this.parentDataset.getResource(uri); + const unsubscribeId = this.activeResourceSubscriptions[uri]; + delete this.activeResourceSubscriptions[uri]; + await resource.unsubscribeFromNotifications(unsubscribeId); + } + + private async fullUnsubscribe(): Promise { + if (this.curOnDataChanged) { + this.parentDataset.removeListenerFromAllEvents(this.curOnDataChanged); + this.curOnDataChanged = undefined; + } + await Promise.all( + Object.keys(this.activeResourceSubscriptions).map(async (uri) => { + this.unsubscribeFromResource(uri); + }), + ); + } + + async unsubscribe(unsubscribeId: string): Promise { + this.thisUnsubscribeIds.delete(unsubscribeId); + if (this.thisUnsubscribeIds.size === 0) { + await this.fullUnsubscribe(); + } + } + + async unsubscribeAll() { + this.thisUnsubscribeIds.clear(); + await this.fullUnsubscribe(); + } + + fromSubject(): ExpandDeep> { + return this.ldoBuilder.fromSubject( + this.startingSubject, + ) as unknown as ExpandDeep>; + } + + getSubscribedResources(): Plugins[number]["types"]["resource"][] { + return Object.keys(this.activeResourceSubscriptions).map((uri) => + this.parentDataset.getResource(uri), + ); + } +} diff --git a/packages/connected/src/linkTraversal/exploreLinks.ts b/packages/connected/src/linkTraversal/exploreLinks.ts new file mode 100644 index 0000000..6871dc8 --- /dev/null +++ b/packages/connected/src/linkTraversal/exploreLinks.ts @@ -0,0 +1,162 @@ +import type { LdoBase, ShapeType } from "@ldo/ldo"; +import type { ConnectedPlugin } from "../types/ConnectedPlugin"; +import type { SubjectNode } from "@ldo/rdf-utils"; +import type { LQInput } from "../types/ILinkQuery"; +import { BasicLdSet } from "@ldo/jsonld-dataset-proxy"; +import type { IConnectedLdoDataset } from "../types/IConnectedLdoDataset"; +import { createTrackingProxyBuilder } from "../trackingProxy/createTrackingProxy"; +import type { nodeEventListener } from "@ldo/subscribable-dataset"; +import type { Quad } from "@rdfjs/types"; + +/** + * @internal + */ +interface ExploreLinksOptions { + onResourceEncountered?: ( + resource: Plugins[number]["types"]["resource"], + ) => Promise; + onCoveredDataChanged?: nodeEventListener; + shouldRefreshResources?: boolean; +} + +/** + * @internal + */ +export async function exploreLinks< + Type extends LdoBase, + Plugins extends ConnectedPlugin[], +>( + dataset: IConnectedLdoDataset, + shapeType: ShapeType, + startingResource: Plugins[number]["types"]["resource"], + startingSubject: SubjectNode | string, + queryInput: LQInput, + options?: ExploreLinksOptions, +): Promise { + // Do an initial check of the resources. + const readResult = options?.shouldRefreshResources + ? await startingResource.read() + : await startingResource.readIfUnfetched(); + if (readResult.isError) return; + + if (options?.onResourceEncountered) + await options?.onResourceEncountered(startingResource); + + const proxyBuilder = options?.onCoveredDataChanged + ? createTrackingProxyBuilder( + dataset, + shapeType, + options?.onCoveredDataChanged, + ) + : dataset.usingType(shapeType); + const ldObject = proxyBuilder.fromSubject(startingSubject); + + const encounteredDuringThisExploration = new Set([ + startingResource.uri, + ]); + + // Recursively explore the rest + await exploreLinksRecursive( + dataset, + ldObject, + queryInput, + encounteredDuringThisExploration, + options, + ); +} + +export async function exploreLinksRecursive< + Type extends LdoBase, + Plugins extends ConnectedPlugin[], +>( + dataset: IConnectedLdoDataset, + ldObject: Type, + queryInput: LQInput, + encounteredDuringThisExploration: Set, + options?: ExploreLinksOptions, +): Promise { + const shouldFetch = shouldFetchResource( + dataset, + ldObject, + queryInput, + encounteredDuringThisExploration, + ); + const resourceToFetch = dataset.getResource(ldObject["@id"]); + if (shouldFetch) { + const readResult = options?.shouldRefreshResources + ? await resourceToFetch.read() + : await resourceToFetch.readIfUnfetched(); + // If there was an error with the read, the traversal is done. + if (readResult.isError) { + return; + } + } + if (!encounteredDuringThisExploration.has(resourceToFetch.uri)) { + encounteredDuringThisExploration.add(resourceToFetch.uri); + if (options?.onResourceEncountered) + await options.onResourceEncountered(resourceToFetch); + } + // Recurse through the other elemenets + await Promise.all( + Object.entries(queryInput).map(async ([queryKey, queryValue]) => { + if ( + queryValue != undefined && + queryValue !== true && + ldObject[queryKey] != undefined + ) { + if (ldObject[queryKey] instanceof BasicLdSet) { + await Promise.all( + ldObject[queryKey].map(async (item) => { + await exploreLinksRecursive( + dataset, + item, + queryValue, + encounteredDuringThisExploration, + options, + ); + }), + ); + } else { + await exploreLinksRecursive( + dataset, + ldObject[queryKey], + queryValue, + encounteredDuringThisExploration, + options, + ); + } + } + }), + ); +} + +/** + * Determines if a resource needs to be fetched based on given data + */ +export function shouldFetchResource< + Type extends LdoBase, + Plugins extends ConnectedPlugin[], +>( + dataset: IConnectedLdoDataset, + ldObject: Type, + queryInput: LQInput, + encounteredDuringThisExploration: Set, +): boolean { + const linkedResourceUri: string | undefined = ldObject["@id"]; + // If it's a blank node, no need to fetch + if (!linkedResourceUri) return false; + const linkedResource = dataset.getResource(linkedResourceUri); + // If we've already explored the resource in this exporation, do not fetch + if (encounteredDuringThisExploration.has(linkedResource.uri)) return false; + + return Object.entries(queryInput).some(([queryKey, queryValue]) => { + // If value is undefined then no need to fetch + if (!queryValue) return false; + // Always fetch if there's a set in the object + if (ldObject[queryKey] instanceof BasicLdSet) return true; + // Fetch if a singleton set is not present + if (ldObject[queryKey] == undefined) return true; + // Otherwise no need t to fetch + return false; + }); +} diff --git a/packages/connected/src/notifications/NotificationSubscription.ts b/packages/connected/src/notifications/NotificationSubscription.ts index b23d682..0945aa4 100644 --- a/packages/connected/src/notifications/NotificationSubscription.ts +++ b/packages/connected/src/notifications/NotificationSubscription.ts @@ -1,7 +1,7 @@ import { v4 } from "uuid"; -import type { ConnectedPlugin } from "../ConnectedPlugin"; -import type { ConnectedContext } from "../ConnectedContext"; -import type { SubscriptionCallbacks } from "../SubscriptionCallbacks"; +import type { ConnectedPlugin } from "../types/ConnectedPlugin"; +import type { ConnectedContext } from "../types/ConnectedContext"; +import type { SubscriptionCallbacks } from "./SubscriptionCallbacks"; import type { NotificationCallbackError } from "../results/error/NotificationErrors"; /** diff --git a/packages/connected/src/SubscriptionCallbacks.ts b/packages/connected/src/notifications/SubscriptionCallbacks.ts similarity index 100% rename from packages/connected/src/SubscriptionCallbacks.ts rename to packages/connected/src/notifications/SubscriptionCallbacks.ts diff --git a/packages/react/src/util/TrackingProxyContext.ts b/packages/connected/src/trackingProxy/TrackingProxyContext.ts similarity index 84% rename from packages/react/src/util/TrackingProxyContext.ts rename to packages/connected/src/trackingProxy/TrackingProxyContext.ts index 3bbd84a..16aa8cf 100644 --- a/packages/react/src/util/TrackingProxyContext.ts +++ b/packages/connected/src/trackingProxy/TrackingProxyContext.ts @@ -5,7 +5,10 @@ import type { } from "@ldo/jsonld-dataset-proxy"; import { ProxyContext } from "@ldo/jsonld-dataset-proxy"; import type { QuadMatch } from "@ldo/rdf-utils"; -import type { SubscribableDataset } from "@ldo/subscribable-dataset"; +import type { + nodeEventListener, + SubscribableDataset, +} from "@ldo/subscribable-dataset"; import type { BlankNode, NamedNode, Quad } from "@rdfjs/types"; import { createTrackingSubjectProxy } from "./TrackingSubjectProxy"; import { createTrackingSetProxy } from "./TrackingSetProxy"; @@ -18,6 +21,11 @@ export interface TrackingProxyContextOptions extends ProxyContextOptions { dataset: SubscribableDataset; } +/** + * @internal + * A listener that gets triggered whenever there's an update + */ + /** * @internal * This proxy exists to ensure react components rerender at the right time. It @@ -25,10 +33,13 @@ export interface TrackingProxyContextOptions extends ProxyContextOptions { * dataset is updated with that key does it rerender the react component. */ export class TrackingProxyContext extends ProxyContext { - private listener: () => void; + private listener: nodeEventListener; private subscribableDataset: SubscribableDataset; - constructor(options: TrackingProxyContextOptions, listener: () => void) { + constructor( + options: TrackingProxyContextOptions, + listener: nodeEventListener, + ) { super(options); this.subscribableDataset = options.dataset; this.listener = listener; diff --git a/packages/react/src/util/TrackingSetProxy.ts b/packages/connected/src/trackingProxy/TrackingSetProxy.ts similarity index 100% rename from packages/react/src/util/TrackingSetProxy.ts rename to packages/connected/src/trackingProxy/TrackingSetProxy.ts diff --git a/packages/react/src/util/TrackingSubjectProxy.ts b/packages/connected/src/trackingProxy/TrackingSubjectProxy.ts similarity index 100% rename from packages/react/src/util/TrackingSubjectProxy.ts rename to packages/connected/src/trackingProxy/TrackingSubjectProxy.ts diff --git a/packages/connected/src/trackingProxy/createTrackingProxy.ts b/packages/connected/src/trackingProxy/createTrackingProxy.ts new file mode 100644 index 0000000..8fb2059 --- /dev/null +++ b/packages/connected/src/trackingProxy/createTrackingProxy.ts @@ -0,0 +1,42 @@ +import { + ContextUtil, + JsonldDatasetProxyBuilder, +} from "@ldo/jsonld-dataset-proxy"; +import { LdoBuilder } from "@ldo/ldo"; +import type { LdoBase, LdoDataset, ShapeType } from "@ldo/ldo"; +import { TrackingProxyContext } from "./TrackingProxyContext"; +import { defaultGraph } from "@rdfjs/data-model"; +import type { nodeEventListener } from "@ldo/subscribable-dataset"; +import type { Quad } from "@rdfjs/types"; + +/** + * @internal + * Creates a Linked Data Object builder that when creating linked data objects + * it tracks when something that was read from it is updated and triggers some + * action based on that. + */ +export function createTrackingProxyBuilder( + dataset: LdoDataset, + shapeType: ShapeType, + onUpdate: nodeEventListener, +): LdoBuilder { + // Remove all current subscriptions + // dataset.removeListenerFromAllEvents(onUpdate); + + // Rebuild the LdoBuilder from scratch to inject TrackingProxyContext + const contextUtil = new ContextUtil(shapeType.context); + const proxyContext = new TrackingProxyContext( + { + dataset, + contextUtil, + writeGraphs: [defaultGraph()], + languageOrdering: ["none", "en", "other"], + }, + onUpdate, + ); + const builder = new LdoBuilder( + new JsonldDatasetProxyBuilder(proxyContext), + shapeType, + ); + return builder; +} diff --git a/packages/connected/src/ConnectedContext.ts b/packages/connected/src/types/ConnectedContext.ts similarity index 80% rename from packages/connected/src/ConnectedContext.ts rename to packages/connected/src/types/ConnectedContext.ts index 92aea64..d3f5fc6 100644 --- a/packages/connected/src/ConnectedContext.ts +++ b/packages/connected/src/types/ConnectedContext.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { ConnectedLdoDataset } from "./ConnectedLdoDataset"; import type { ConnectedPlugin } from "./ConnectedPlugin"; +import type { IConnectedLdoDataset } from "./IConnectedLdoDataset"; /** * Each Plugin comes with a context. This is the aggregate of all those contexts @@ -9,7 +9,7 @@ import type { ConnectedPlugin } from "./ConnectedPlugin"; export type ConnectedContext< Plugins extends ConnectedPlugin[], > = { - dataset: ConnectedLdoDataset; + dataset: IConnectedLdoDataset; } & { [P in Plugins[number] as P["name"]]: P["types"]["context"]; }; diff --git a/packages/connected/src/ConnectedPlugin.ts b/packages/connected/src/types/ConnectedPlugin.ts similarity index 94% rename from packages/connected/src/ConnectedPlugin.ts rename to packages/connected/src/types/ConnectedPlugin.ts index 4ed7306..760e7e5 100644 --- a/packages/connected/src/ConnectedPlugin.ts +++ b/packages/connected/src/types/ConnectedPlugin.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import type { ConnectedContext } from "./ConnectedContext"; -import type { Resource } from "./Resource"; -import type { ErrorResult } from "./results/error/ErrorResult"; +import type { Resource } from "../Resource"; +import type { ErrorResult } from "../results/error/ErrorResult"; /** * A ConnectedPlugin can be passed to a ConnectedDataset to allow it to connect diff --git a/packages/connected/src/types/IConnectedLdoBuilder.ts b/packages/connected/src/types/IConnectedLdoBuilder.ts new file mode 100644 index 0000000..126e014 --- /dev/null +++ b/packages/connected/src/types/IConnectedLdoBuilder.ts @@ -0,0 +1,15 @@ +import type { LdoBase, LdoBuilder } from "@ldo/ldo"; +import type { ConnectedPlugin } from "./ConnectedPlugin"; +import type { SubjectNode } from "@ldo/rdf-utils"; +import type { ILinkQuery, LQInput } from "./ILinkQuery"; + +export interface IConnectedLdoBuilder< + Type extends LdoBase, + Plugins extends ConnectedPlugin[], +> extends LdoBuilder { + startLinkQuery>( + startingResource: Plugins[number]["types"]["resource"], + startingSubject: SubjectNode | string, + linkQueryInput: Input, + ): ILinkQuery; +} diff --git a/packages/connected/src/IConnectedLdoDataset.ts b/packages/connected/src/types/IConnectedLdoDataset.ts similarity index 79% rename from packages/connected/src/IConnectedLdoDataset.ts rename to packages/connected/src/types/IConnectedLdoDataset.ts index 73c99a9..5724058 100644 --- a/packages/connected/src/IConnectedLdoDataset.ts +++ b/packages/connected/src/types/IConnectedLdoDataset.ts @@ -1,7 +1,8 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { LdoDataset } from "@ldo/ldo"; +import type { LdoBase, LdoDataset, ShapeType } from "@ldo/ldo"; import type { ConnectedPlugin } from "./ConnectedPlugin"; -import type { InvalidIdentifierResource } from "./InvalidIdentifierResource"; +import type { InvalidIdentifierResource } from "../InvalidIdentifierResource"; +import type { IConnectedLdoBuilder } from "./IConnectedLdoBuilder"; export type ReturnTypeFromArgs = Func extends ( arg: Arg, @@ -78,6 +79,33 @@ export interface IConnectedLdoDataset pluginName?: Name, ): GetResourceReturnType; + /** + * Retireves a representation of all Resources referenced by this dataset + * This does not necessarily mean that it's been fetched (use the + * `getFetchedResources` method for that). It simply means that at one point + * it was referenced. + * + * @returns a Resource array + * + * @example + * ```typescript + * const allResources = connectedLdoDataset.getResources(); + * ``` + */ + getResources(): Plugins[number]["types"]["resource"][]; + + /** + * Retireves a representation of all Resources that have been fetched. + * + * @returns a Resource array + * + * @example + * ```typescript + * const allResources = connectedLdoDataset.getFetchedResources(); + * ``` + */ + getFetchedResources(): Plugins[number]["types"]["resource"][]; + /** * Generates a random uri and creates a resource. * @@ -136,4 +164,8 @@ export interface IConnectedLdoDataset name: Name, context: Plugin["types"]["context"], ); + + usingType( + shapeType: ShapeType, + ): IConnectedLdoBuilder; } diff --git a/packages/connected/src/types/ILinkQuery.ts b/packages/connected/src/types/ILinkQuery.ts new file mode 100644 index 0000000..1cfc189 --- /dev/null +++ b/packages/connected/src/types/ILinkQuery.ts @@ -0,0 +1,126 @@ +// This file is a stripped down version of a full-implmentation of a global +// query interface found here https://github.com/o-development/ldo-query/blob/main/lib/ShapeQuery.ts +// If I ever want to implement a global query interface, this is a good place +// to start. + +import type { LdoBase, LdSet } from "@ldo/ldo"; +// import { SolidProfileShapeShapeType } from "../../test/.ldo/solidProfile.shapeTypes"; +// import type { SolidProfileShape } from "../../test/.ldo/solidProfile.typings"; + +/** + * Link Query Input + */ +export type LQInput = LQInputObject; + +export type LQInputObject = Partial<{ + [key in Exclude]: LQInputFlattenSet; +}>; + +export type LQInputSubSet = Type extends object + ? LQInputObject + : true; + +export type LQInputFlattenSet = Type extends LdSet + ? LQInputSubSet + : LQInputSubSet; + +/** + * Link Query Input Default + */ +// TODO: I don't remember why I need this. Delete if unneeded +// export type LQInputDefaultType = { +// [key in keyof Type]: Type[key] extends object ? undefined : true; +// }; + +// export type LQInputDefault = +// LQInputDefaultType extends LQInput +// ? LQInputDefaultType +// : never; + +/** + * Link Query Return + */ +export type LQReturn> = LQReturnObject< + Type, + Input +>; + +export type LQReturnObject> = { + [key in Exclude< + keyof Required, + "@context" + > as undefined extends Input[key] + ? never + : key]: Input[key] extends LQInputFlattenSet + ? undefined extends Type[key] + ? LQReturnExpandSet | undefined + : LQReturnExpandSet + : never; +}; + +export type LQReturnSubSet = Input extends LQInputSubSet + ? Input extends LQInputObject + ? Input extends true + ? Type + : LQReturnObject + : Type + : never; + +export type LQReturnExpandSet< + Type, + Input extends LQInputFlattenSet, +> = NonNullable extends LdSet + ? LdSet> + : LQReturnSubSet; + +export type ExpandDeep = T extends LdSet + ? LdSet> // recursively expand sets + : T extends object + ? { [K in keyof T]: ExpandDeep } // recursively expand objects + : T; // base case (primitive types) + +/** + * ILinkQuery: Manages resources in a link query + */ +export interface LinkQueryRunOptions { + reload?: boolean; +} + +export interface ILinkQuery> { + run( + options?: LinkQueryRunOptions, + ): Promise>>; + subscribe(): Promise; + unsubscribe(subscriptionId: string): Promise; + unsubscribeAll(): Promise; + fromSubject(): ExpandDeep>; +} + +// function test>( +// shapeType: ShapeType, +// input: Input, +// ): ExpandDeep> { +// throw new Error("Not Implemented"); +// } + +// type TestLQInput = { +// name: true; +// knows: { +// name: true; +// }; +// }; + +// type testReturn = LQReturn; + +// type test2 = LQReturnSubSet; + +// type lqInputObject = LQInputObject; + +// type meh = TestLQInput extends true ? true : false; + +// const thing = test(SolidProfileShapeShapeType, { +// name: true, +// knows: { +// name: true, +// }, +// }); diff --git a/packages/connected/test/.ldo/solidProfile.context.ts b/packages/connected/test/.ldo/solidProfile.context.ts new file mode 100644 index 0000000..9fdffc3 --- /dev/null +++ b/packages/connected/test/.ldo/solidProfile.context.ts @@ -0,0 +1,459 @@ +import { LdoJsonldContext } from "@ldo/ldo"; + +/** + * ============================================================================= + * solidProfileContext: JSONLD Context for solidProfile + * ============================================================================= + */ +export const solidProfileContext: LdoJsonldContext = { + type: { + "@id": "@type", + }, + Person: { + "@id": "http://schema.org/Person", + "@context": { + type: { + "@id": "@type", + }, + fn: { + "@id": "http://www.w3.org/2006/vcard/ns#fn", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#hasAddress", + "@type": "@id", + "@isCollection": true, + }, + hasEmail: { + "@id": "http://www.w3.org/2006/vcard/ns#hasEmail", + "@type": "@id", + "@isCollection": true, + }, + hasPhoto: { + "@id": "http://www.w3.org/2006/vcard/ns#hasPhoto", + "@type": "@id", + }, + img: { + "@id": "http://xmlns.com/foaf/0.1/img", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasTelephone: { + "@id": "http://www.w3.org/2006/vcard/ns#hasTelephone", + "@type": "@id", + "@isCollection": true, + }, + phone: { + "@id": "http://www.w3.org/2006/vcard/ns#phone", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + organizationName: { + "@id": "http://www.w3.org/2006/vcard/ns#organization-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + role: { + "@id": "http://www.w3.org/2006/vcard/ns#role", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + trustedApp: { + "@id": "http://www.w3.org/ns/auth/acl#trustedApp", + "@type": "@id", + "@isCollection": true, + }, + key: { + "@id": "http://www.w3.org/ns/auth/cert#key", + "@type": "@id", + "@isCollection": true, + }, + inbox: { + "@id": "http://www.w3.org/ns/ldp#inbox", + "@type": "@id", + }, + preferencesFile: { + "@id": "http://www.w3.org/ns/pim/space#preferencesFile", + "@type": "@id", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@type": "@id", + "@isCollection": true, + }, + account: { + "@id": "http://www.w3.org/ns/solid/terms#account", + "@type": "@id", + }, + privateTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#privateTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + publicTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#publicTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + knows: { + "@id": "http://xmlns.com/foaf/0.1/knows", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Person2: { + "@id": "http://xmlns.com/foaf/0.1/Person", + "@context": { + type: { + "@id": "@type", + }, + fn: { + "@id": "http://www.w3.org/2006/vcard/ns#fn", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#hasAddress", + "@type": "@id", + "@isCollection": true, + }, + hasEmail: { + "@id": "http://www.w3.org/2006/vcard/ns#hasEmail", + "@type": "@id", + "@isCollection": true, + }, + hasPhoto: { + "@id": "http://www.w3.org/2006/vcard/ns#hasPhoto", + "@type": "@id", + }, + img: { + "@id": "http://xmlns.com/foaf/0.1/img", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasTelephone: { + "@id": "http://www.w3.org/2006/vcard/ns#hasTelephone", + "@type": "@id", + "@isCollection": true, + }, + phone: { + "@id": "http://www.w3.org/2006/vcard/ns#phone", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + organizationName: { + "@id": "http://www.w3.org/2006/vcard/ns#organization-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + role: { + "@id": "http://www.w3.org/2006/vcard/ns#role", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + trustedApp: { + "@id": "http://www.w3.org/ns/auth/acl#trustedApp", + "@type": "@id", + "@isCollection": true, + }, + key: { + "@id": "http://www.w3.org/ns/auth/cert#key", + "@type": "@id", + "@isCollection": true, + }, + inbox: { + "@id": "http://www.w3.org/ns/ldp#inbox", + "@type": "@id", + }, + preferencesFile: { + "@id": "http://www.w3.org/ns/pim/space#preferencesFile", + "@type": "@id", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@type": "@id", + "@isCollection": true, + }, + account: { + "@id": "http://www.w3.org/ns/solid/terms#account", + "@type": "@id", + }, + privateTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#privateTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + publicTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#publicTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + knows: { + "@id": "http://xmlns.com/foaf/0.1/knows", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + fn: { + "@id": "http://www.w3.org/2006/vcard/ns#fn", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#hasAddress", + "@type": "@id", + "@isCollection": true, + }, + countryName: { + "@id": "http://www.w3.org/2006/vcard/ns#country-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + locality: { + "@id": "http://www.w3.org/2006/vcard/ns#locality", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + postalCode: { + "@id": "http://www.w3.org/2006/vcard/ns#postal-code", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + region: { + "@id": "http://www.w3.org/2006/vcard/ns#region", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + streetAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#street-address", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasEmail: { + "@id": "http://www.w3.org/2006/vcard/ns#hasEmail", + "@type": "@id", + "@isCollection": true, + }, + Dom: { + "@id": "http://www.w3.org/2006/vcard/ns#Dom", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Home: { + "@id": "http://www.w3.org/2006/vcard/ns#Home", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + ISDN: { + "@id": "http://www.w3.org/2006/vcard/ns#ISDN", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Internet: { + "@id": "http://www.w3.org/2006/vcard/ns#Internet", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Intl: { + "@id": "http://www.w3.org/2006/vcard/ns#Intl", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Label: { + "@id": "http://www.w3.org/2006/vcard/ns#Label", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Parcel: { + "@id": "http://www.w3.org/2006/vcard/ns#Parcel", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Postal: { + "@id": "http://www.w3.org/2006/vcard/ns#Postal", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Pref: { + "@id": "http://www.w3.org/2006/vcard/ns#Pref", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Work: { + "@id": "http://www.w3.org/2006/vcard/ns#Work", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + X400: { + "@id": "http://www.w3.org/2006/vcard/ns#X400", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + hasPhoto: { + "@id": "http://www.w3.org/2006/vcard/ns#hasPhoto", + "@type": "@id", + }, + img: { + "@id": "http://xmlns.com/foaf/0.1/img", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasTelephone: { + "@id": "http://www.w3.org/2006/vcard/ns#hasTelephone", + "@type": "@id", + "@isCollection": true, + }, + phone: { + "@id": "http://www.w3.org/2006/vcard/ns#phone", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + organizationName: { + "@id": "http://www.w3.org/2006/vcard/ns#organization-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + role: { + "@id": "http://www.w3.org/2006/vcard/ns#role", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + trustedApp: { + "@id": "http://www.w3.org/ns/auth/acl#trustedApp", + "@type": "@id", + "@isCollection": true, + }, + mode: { + "@id": "http://www.w3.org/ns/auth/acl#mode", + "@isCollection": true, + }, + Append: "http://www.w3.org/ns/auth/acl#Append", + Control: "http://www.w3.org/ns/auth/acl#Control", + Read: "http://www.w3.org/ns/auth/acl#Read", + Write: "http://www.w3.org/ns/auth/acl#Write", + origin: { + "@id": "http://www.w3.org/ns/auth/acl#origin", + "@type": "@id", + }, + key: { + "@id": "http://www.w3.org/ns/auth/cert#key", + "@type": "@id", + "@isCollection": true, + }, + modulus: { + "@id": "http://www.w3.org/ns/auth/cert#modulus", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + exponent: { + "@id": "http://www.w3.org/ns/auth/cert#exponent", + "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, + inbox: { + "@id": "http://www.w3.org/ns/ldp#inbox", + "@type": "@id", + }, + preferencesFile: { + "@id": "http://www.w3.org/ns/pim/space#preferencesFile", + "@type": "@id", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@type": "@id", + "@isCollection": true, + }, + account: { + "@id": "http://www.w3.org/ns/solid/terms#account", + "@type": "@id", + }, + privateTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#privateTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + publicTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#publicTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + knows: { + "@id": "http://xmlns.com/foaf/0.1/knows", + "@type": "@id", + "@isCollection": true, + }, +}; diff --git a/packages/connected/test/.ldo/solidProfile.schema.ts b/packages/connected/test/.ldo/solidProfile.schema.ts new file mode 100644 index 0000000..69466fc --- /dev/null +++ b/packages/connected/test/.ldo/solidProfile.schema.ts @@ -0,0 +1,749 @@ +import { Schema } from "shexj"; + +/** + * ============================================================================= + * solidProfileSchema: ShexJ Schema for solidProfile + * ============================================================================= + */ +export const solidProfileSchema: Schema = { + type: "Schema", + shapes: [ + { + id: "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["http://schema.org/Person"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the node as a Person (from Schema.org)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["http://xmlns.com/foaf/0.1/Person"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the node as a Person (from foaf)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#fn", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The formatted name of a person. Example: John Smith", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "An alternate way to define a person's name.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasAddress", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#AddressShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The person's street address.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasEmail", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#EmailShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The person's email.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasPhoto", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "A link to the person's photo", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/img", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Photo link but in string form", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasTelephone", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Person's telephone number", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#phone", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "An alternative way to define a person's telephone number using a string", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#organization-name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the organization with which the person is affiliated", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#role", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the person's role in their organization", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#trustedApp", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of app origins that are trusted by this user", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#key", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of RSA public keys that are associated with private keys the user holds.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/ldp#inbox", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The user's LDP inbox to which apps can post notifications", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/pim/space#preferencesFile", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's preferences", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/pim/space#storage", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The location of a Solid storage server related to this WebId", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#account", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's account", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#privateTypeIndex", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A registry of all types used on the user's Pod (for private access only)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#publicTypeIndex", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A registry of all types used on the user's Pod (for public access)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/knows", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of WebIds for all the people this user knows.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#AddressShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#country-name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The name of the user's country of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#locality", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the user's locality (City, Town etc.) of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#postal-code", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's postal code", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#region", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the user's region (State, Province etc.) of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#street-address", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's street address", + }, + }, + ], + }, + ], + }, + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#EmailShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/2006/vcard/ns#Dom", + "http://www.w3.org/2006/vcard/ns#Home", + "http://www.w3.org/2006/vcard/ns#ISDN", + "http://www.w3.org/2006/vcard/ns#Internet", + "http://www.w3.org/2006/vcard/ns#Intl", + "http://www.w3.org/2006/vcard/ns#Label", + "http://www.w3.org/2006/vcard/ns#Parcel", + "http://www.w3.org/2006/vcard/ns#Postal", + "http://www.w3.org/2006/vcard/ns#Pref", + "http://www.w3.org/2006/vcard/ns#Work", + "http://www.w3.org/2006/vcard/ns#X400", + ], + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The type of email.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#value", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The value of an email as a mailto link (Example )", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/2006/vcard/ns#Dom", + "http://www.w3.org/2006/vcard/ns#Home", + "http://www.w3.org/2006/vcard/ns#ISDN", + "http://www.w3.org/2006/vcard/ns#Internet", + "http://www.w3.org/2006/vcard/ns#Intl", + "http://www.w3.org/2006/vcard/ns#Label", + "http://www.w3.org/2006/vcard/ns#Parcel", + "http://www.w3.org/2006/vcard/ns#Postal", + "http://www.w3.org/2006/vcard/ns#Pref", + "http://www.w3.org/2006/vcard/ns#Work", + "http://www.w3.org/2006/vcard/ns#X400", + ], + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "They type of Phone Number", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#value", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The value of a phone number as a tel link (Example )", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#mode", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/ns/auth/acl#Append", + "http://www.w3.org/ns/auth/acl#Control", + "http://www.w3.org/ns/auth/acl#Read", + "http://www.w3.org/ns/auth/acl#Write", + ], + }, + min: 1, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The level of access provided to this origin", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#origin", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The app origin the user trusts", + }, + }, + ], + }, + ], + }, + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#modulus", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "RSA Modulus", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#exponent", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#integer", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "RSA Exponent", + }, + }, + ], + }, + ], + }, + }, + }, + ], +}; diff --git a/packages/connected/test/.ldo/solidProfile.shapeTypes.ts b/packages/connected/test/.ldo/solidProfile.shapeTypes.ts new file mode 100644 index 0000000..71426e4 --- /dev/null +++ b/packages/connected/test/.ldo/solidProfile.shapeTypes.ts @@ -0,0 +1,71 @@ +import { ShapeType } from "@ldo/ldo"; +import { solidProfileSchema } from "./solidProfile.schema"; +import { solidProfileContext } from "./solidProfile.context"; +import { + SolidProfileShape, + AddressShape, + EmailShape, + PhoneNumberShape, + TrustedAppShape, + RSAPublicKeyShape, +} from "./solidProfile.typings"; + +/** + * ============================================================================= + * LDO ShapeTypes solidProfile + * ============================================================================= + */ + +/** + * SolidProfileShape ShapeType + */ +export const SolidProfileShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + context: solidProfileContext, +}; + +/** + * AddressShape ShapeType + */ +export const AddressShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#AddressShape", + context: solidProfileContext, +}; + +/** + * EmailShape ShapeType + */ +export const EmailShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#EmailShape", + context: solidProfileContext, +}; + +/** + * PhoneNumberShape ShapeType + */ +export const PhoneNumberShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + context: solidProfileContext, +}; + +/** + * TrustedAppShape ShapeType + */ +export const TrustedAppShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + context: solidProfileContext, +}; + +/** + * RSAPublicKeyShape ShapeType + */ +export const RSAPublicKeyShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + context: solidProfileContext, +}; diff --git a/packages/connected/test/.ldo/solidProfile.typings.ts b/packages/connected/test/.ldo/solidProfile.typings.ts new file mode 100644 index 0000000..95dbaef --- /dev/null +++ b/packages/connected/test/.ldo/solidProfile.typings.ts @@ -0,0 +1,293 @@ +import { LdoJsonldContext, LdSet } from "@ldo/ldo"; + +/** + * ============================================================================= + * Typescript Typings for solidProfile + * ============================================================================= + */ + +/** + * SolidProfileShape Type + */ +export interface SolidProfileShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * Defines the node as a Person (from Schema.org) | Defines the node as a Person (from foaf) + */ + type: LdSet< + | { + "@id": "Person"; + } + | { + "@id": "Person2"; + } + >; + /** + * The formatted name of a person. Example: John Smith + */ + fn?: string; + /** + * An alternate way to define a person's name. + */ + name?: string; + /** + * The person's street address. + */ + hasAddress?: LdSet; + /** + * The person's email. + */ + hasEmail?: LdSet; + /** + * A link to the person's photo + */ + hasPhoto?: { + "@id": string; + }; + /** + * Photo link but in string form + */ + img?: string; + /** + * Person's telephone number + */ + hasTelephone?: LdSet; + /** + * An alternative way to define a person's telephone number using a string + */ + phone?: string; + /** + * The name of the organization with which the person is affiliated + */ + organizationName?: string; + /** + * The name of the person's role in their organization + */ + role?: string; + /** + * A list of app origins that are trusted by this user + */ + trustedApp?: LdSet; + /** + * A list of RSA public keys that are associated with private keys the user holds. + */ + key?: LdSet; + /** + * The user's LDP inbox to which apps can post notifications + */ + inbox: { + "@id": string; + }; + /** + * The user's preferences + */ + preferencesFile?: { + "@id": string; + }; + /** + * The location of a Solid storage server related to this WebId + */ + storage?: LdSet<{ + "@id": string; + }>; + /** + * The user's account + */ + account?: { + "@id": string; + }; + /** + * A registry of all types used on the user's Pod (for private access only) + */ + privateTypeIndex?: LdSet<{ + "@id": string; + }>; + /** + * A registry of all types used on the user's Pod (for public access) + */ + publicTypeIndex?: LdSet<{ + "@id": string; + }>; + /** + * A list of WebIds for all the people this user knows. + */ + knows?: LdSet; +} + +/** + * AddressShape Type + */ +export interface AddressShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * The name of the user's country of residence + */ + countryName?: string; + /** + * The name of the user's locality (City, Town etc.) of residence + */ + locality?: string; + /** + * The user's postal code + */ + postalCode?: string; + /** + * The name of the user's region (State, Province etc.) of residence + */ + region?: string; + /** + * The user's street address + */ + streetAddress?: string; +} + +/** + * EmailShape Type + */ +export interface EmailShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * The type of email. + */ + type?: + | { + "@id": "Dom"; + } + | { + "@id": "Home"; + } + | { + "@id": "ISDN"; + } + | { + "@id": "Internet"; + } + | { + "@id": "Intl"; + } + | { + "@id": "Label"; + } + | { + "@id": "Parcel"; + } + | { + "@id": "Postal"; + } + | { + "@id": "Pref"; + } + | { + "@id": "Work"; + } + | { + "@id": "X400"; + }; + /** + * The value of an email as a mailto link (Example ) + */ + value: { + "@id": string; + }; +} + +/** + * PhoneNumberShape Type + */ +export interface PhoneNumberShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * They type of Phone Number + */ + type?: + | { + "@id": "Dom"; + } + | { + "@id": "Home"; + } + | { + "@id": "ISDN"; + } + | { + "@id": "Internet"; + } + | { + "@id": "Intl"; + } + | { + "@id": "Label"; + } + | { + "@id": "Parcel"; + } + | { + "@id": "Postal"; + } + | { + "@id": "Pref"; + } + | { + "@id": "Work"; + } + | { + "@id": "X400"; + }; + /** + * The value of a phone number as a tel link (Example ) + */ + value: { + "@id": string; + }; +} + +/** + * TrustedAppShape Type + */ +export interface TrustedAppShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * The level of access provided to this origin + */ + mode: LdSet< + | { + "@id": "Append"; + } + | { + "@id": "Control"; + } + | { + "@id": "Read"; + } + | { + "@id": "Write"; + } + >; + /** + * The app origin the user trusts + */ + origin: { + "@id": string; + }; +} + +/** + * RSAPublicKeyShape Type + */ +export interface RSAPublicKeyShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * RSA Modulus + */ + modulus: string; + /** + * RSA Exponent + */ + exponent: number; +} diff --git a/packages/connected/test/.shapes/solidProfile.shex b/packages/connected/test/.shapes/solidProfile.shex new file mode 100644 index 0000000..cbc068c --- /dev/null +++ b/packages/connected/test/.shapes/solidProfile.shex @@ -0,0 +1,121 @@ +PREFIX srs: +PREFIX foaf: +PREFIX rdfs: +PREFIX schem: +PREFIX vcard: +PREFIX xsd: +PREFIX acl: +PREFIX cert: +PREFIX ldp: +PREFIX sp: +PREFIX solid: + +srs:SolidProfileShape EXTRA a { + a [ schem:Person ] + // rdfs:comment "Defines the node as a Person (from Schema.org)" ; + a [ foaf:Person ] + // rdfs:comment "Defines the node as a Person (from foaf)" ; + vcard:fn xsd:string ? + // rdfs:comment "The formatted name of a person. Example: John Smith" ; + foaf:name xsd:string ? + // rdfs:comment "An alternate way to define a person's name." ; + vcard:hasAddress @srs:AddressShape * + // rdfs:comment "The person's street address." ; + vcard:hasEmail @srs:EmailShape * + // rdfs:comment "The person's email." ; + vcard:hasPhoto IRI ? + // rdfs:comment "A link to the person's photo" ; + foaf:img xsd:string ? + // rdfs:comment "Photo link but in string form" ; + vcard:hasTelephone @srs:PhoneNumberShape * + // rdfs:comment "Person's telephone number" ; + vcard:phone xsd:string ? + // rdfs:comment "An alternative way to define a person's telephone number using a string" ; + vcard:organization-name xsd:string ? + // rdfs:comment "The name of the organization with which the person is affiliated" ; + vcard:role xsd:string ? + // rdfs:comment "The name of the person's role in their organization" ; + acl:trustedApp @srs:TrustedAppShape * + // rdfs:comment "A list of app origins that are trusted by this user" ; + cert:key @srs:RSAPublicKeyShape * + // rdfs:comment "A list of RSA public keys that are associated with private keys the user holds." ; + ldp:inbox IRI + // rdfs:comment "The user's LDP inbox to which apps can post notifications" ; + sp:preferencesFile IRI ? + // rdfs:comment "The user's preferences" ; + sp:storage IRI * + // rdfs:comment "The location of a Solid storage server related to this WebId" ; + solid:account IRI ? + // rdfs:comment "The user's account" ; + solid:privateTypeIndex IRI * + // rdfs:comment "A registry of all types used on the user's Pod (for private access only)" ; + solid:publicTypeIndex IRI * + // rdfs:comment "A registry of all types used on the user's Pod (for public access)" ; + foaf:knows @srs:SolidProfileShape * + // rdfs:comment "A list of WebIds for all the people this user knows." ; +} + +srs:AddressShape { + vcard:country-name xsd:string ? + // rdfs:comment "The name of the user's country of residence" ; + vcard:locality xsd:string ? + // rdfs:comment "The name of the user's locality (City, Town etc.) of residence" ; + vcard:postal-code xsd:string ? + // rdfs:comment "The user's postal code" ; + vcard:region xsd:string ? + // rdfs:comment "The name of the user's region (State, Province etc.) of residence" ; + vcard:street-address xsd:string ? + // rdfs:comment "The user's street address" ; +} + +srs:EmailShape EXTRA a { + a [ + vcard:Dom + vcard:Home + vcard:ISDN + vcard:Internet + vcard:Intl + vcard:Label + vcard:Parcel + vcard:Postal + vcard:Pref + vcard:Work + vcard:X400 + ] ? + // rdfs:comment "The type of email." ; + vcard:value IRI + // rdfs:comment "The value of an email as a mailto link (Example )" ; +} + +srs:PhoneNumberShape EXTRA a { + a [ + vcard:Dom + vcard:Home + vcard:ISDN + vcard:Internet + vcard:Intl + vcard:Label + vcard:Parcel + vcard:Postal + vcard:Pref + vcard:Work + vcard:X400 + ] ? + // rdfs:comment "They type of Phone Number" ; + vcard:value IRI + // rdfs:comment "The value of a phone number as a tel link (Example )" ; +} + +srs:TrustedAppShape { + acl:mode [acl:Append acl:Control acl:Read acl:Write] + + // rdfs:comment "The level of access provided to this origin" ; + acl:origin IRI + // rdfs:comment "The app origin the user trusts" +} + +srs:RSAPublicKeyShape { + cert:modulus xsd:string + // rdfs:comment "RSA Modulus" ; + cert:exponent xsd:integer + // rdfs:comment "RSA Exponent" ; +} \ No newline at end of file diff --git a/packages/connected/test/ErrorResult.test.ts b/packages/connected/test/ErrorResult.test.ts index 273f541..d7323cf 100644 --- a/packages/connected/test/ErrorResult.test.ts +++ b/packages/connected/test/ErrorResult.test.ts @@ -5,9 +5,9 @@ import { UnexpectedResourceError, } from "../src/results/error/ErrorResult"; import { InvalidUriError } from "../src/results/error/InvalidUriError"; -import { MockResouce } from "./MockResource"; +import { MockResource } from "./mocks/MockResource"; -const mockResource = new MockResouce("https://example.com/"); +const mockResource = new MockResource("https://example.com/"); describe("ErrorResult", () => { describe("fromThrown", () => { @@ -38,7 +38,7 @@ describe("ErrorResult", () => { }); describe("default messages", () => { - class ConcreteResourceError extends ResourceError { + class ConcreteResourceError extends ResourceError { readonly type = "concreteResourceError" as const; } class ConcreteErrorResult extends ErrorResult { diff --git a/packages/connected/test/LinkTraversalData.ts b/packages/connected/test/LinkTraversalData.ts new file mode 100644 index 0000000..d81879b --- /dev/null +++ b/packages/connected/test/LinkTraversalData.ts @@ -0,0 +1,58 @@ +import type { ResourceInfo } from "@ldo/test-solid-server"; + +export const BASE_CONTAINER = "http://localhost:3005/test-container/"; +export const MAIN_PROFILE_URI = `${BASE_CONTAINER}mainProfile.ttl`; +export const MAIN_PROFILE_SUBJECT = `${MAIN_PROFILE_URI}#me`; +export const OTHER_PROFILE_URI = `${BASE_CONTAINER}otherProfile.ttl`; +export const OTHER_PROFILE_SUBJECT = `${OTHER_PROFILE_URI}#me`; +export const THIRD_PROFILE_URI = `${BASE_CONTAINER}thirdProfile.ttl`; +export const THIRD_PROFILE_SUBJECT = `${THIRD_PROFILE_URI}#me`; + +export const linkTraversalData: ResourceInfo = { + slug: "test-container/", + isContainer: true, + contains: [ + { + slug: "mainProfile.ttl", + isContainer: false, + mimeType: "text/turtle", + data: ` + @prefix foaf: . + @prefix : <#> . + + :me a foaf:Person ; + foaf:name "Main User" ; + foaf:mbox ; + foaf:knows . + `, + }, + { + slug: "otherProfile.ttl", + isContainer: false, + mimeType: "text/turtle", + data: ` + @prefix foaf: . + @prefix : <#> . + + :me a foaf:Person ; + foaf:name "Other User" ; + foaf:mbox ; + foaf:knows . + `, + }, + { + slug: "thirdProfile.ttl", + isContainer: false, + mimeType: "text/turtle", + data: ` + @prefix foaf: . + @prefix : <#> . + + :me a foaf:Person ; + foaf:name "Third User" ; + foaf:mbox ; + foaf:knows . + `, + }, + ], +}; diff --git a/packages/connected/test/LinkTraversalIntegration.test.ts b/packages/connected/test/LinkTraversalIntegration.test.ts new file mode 100644 index 0000000..dde16c5 --- /dev/null +++ b/packages/connected/test/LinkTraversalIntegration.test.ts @@ -0,0 +1,216 @@ +import type { ConnectedLdoDataset } from "../src/ConnectedLdoDataset"; +import { changeData, commitData, createConnectedLdoDataset } from "../src"; +import { + solidConnectedPlugin, + type SolidConnectedPlugin, +} from "@ldo/connected-solid"; +import { setupServer } from "@ldo/test-solid-server"; +import { + linkTraversalData, + MAIN_PROFILE_SUBJECT, + MAIN_PROFILE_URI, + OTHER_PROFILE_URI, + THIRD_PROFILE_SUBJECT, + THIRD_PROFILE_URI, +} from "./LinkTraversalData"; +import { SolidProfileShapeShapeType } from "./.ldo/solidProfile.shapeTypes"; +import { wait } from "./util/wait"; + +describe("Link Traversal", () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + let solidLdoDataset: ConnectedLdoDataset; + + const s = setupServer(3005, linkTraversalData); + + beforeEach(async () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + solidLdoDataset = createConnectedLdoDataset([solidConnectedPlugin]); + solidLdoDataset.setContext("solid", { fetch: s.fetchMock }); + }); + + it("does a simple run to traverse data", async () => { + const mainProfileResource = solidLdoDataset.getResource(MAIN_PROFILE_URI); + const data = await solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .startLinkQuery(mainProfileResource, MAIN_PROFILE_SUBJECT, { + name: true, + knows: { + name: true, + }, + }) + .run(); + const resourceUris = solidLdoDataset + .getResources() + .map((resource) => resource.uri); + expect(resourceUris.length).toBe(3); + expect(resourceUris).toContain(MAIN_PROFILE_URI); + expect(resourceUris).toContain(OTHER_PROFILE_URI); + expect(data.name).toBe("Main User"); + expect(data.knows?.toArray()[0].name).toBe("Other User"); + }); + + it("handles subscriptions if data changes locally", async () => { + const mainProfileResource = solidLdoDataset.getResource(MAIN_PROFILE_URI); + const linkQuery = solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .startLinkQuery(mainProfileResource, MAIN_PROFILE_SUBJECT, { + name: true, + knows: { + name: true, + }, + }); + await linkQuery.subscribe(); + + // Should have regular information + let mainProfile = solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .fromSubject(MAIN_PROFILE_SUBJECT); + let resourceUris = solidLdoDataset + .getResources() + .map((resource) => resource.uri); + expect(resourceUris.length).toBe(3); + expect(resourceUris).toContain(MAIN_PROFILE_URI); + expect(resourceUris).toContain(OTHER_PROFILE_URI); + expect(mainProfile.name).toBe("Main User"); + expect(mainProfile.knows?.size).toBe(1); + expect(mainProfile.knows?.toArray()[0].name).toBe("Other User"); + + // Update to include a new document + const cMainProfile = changeData(mainProfile, mainProfileResource); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + cMainProfile.knows?.add({ "@id": THIRD_PROFILE_SUBJECT }); + await commitData(cMainProfile); + + // Wait for 200ms to allow the other file to be fetched + await wait(200); + + // After the data is committed, the third profile should be present + mainProfile = solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .fromSubject(MAIN_PROFILE_SUBJECT); + resourceUris = solidLdoDataset + .getResources() + .map((resource) => resource.uri); + expect(resourceUris.length).toBe(4); + expect(resourceUris).toContain(MAIN_PROFILE_URI); + expect(resourceUris).toContain(OTHER_PROFILE_URI); + expect(resourceUris).toContain(THIRD_PROFILE_URI); + expect(mainProfile.name).toBe("Main User"); + expect(mainProfile.knows?.size).toBe(2); + const knowNames = mainProfile.knows?.map((knowsPerson) => knowsPerson.name); + expect(knowNames).toContain("Other User"); + expect(knowNames).toContain("Third User"); + + // Unsubscribe + }); + + it.only("handles subscriptions if data changes on the Pod", async () => { + const mainProfileResource = solidLdoDataset.getResource(MAIN_PROFILE_URI); + const linkQuery = solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .startLinkQuery(mainProfileResource, MAIN_PROFILE_SUBJECT, { + name: true, + knows: { + name: true, + }, + }); + + const unsubscribeId = await linkQuery.subscribe(); + + // Should have regular information + let mainProfile = solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .fromSubject(MAIN_PROFILE_SUBJECT); + let resourceUris = solidLdoDataset + .getResources() + .map((resource) => resource.uri); + expect(resourceUris.length).toBe(3); + expect(resourceUris).toContain(MAIN_PROFILE_URI); + expect(resourceUris).toContain(OTHER_PROFILE_URI); + expect(mainProfile.name).toBe("Main User"); + expect(mainProfile.knows?.size).toBe(1); + expect(mainProfile.knows?.toArray()[0].name).toBe("Other User"); + + let subscribedResources = linkQuery + .getSubscribedResources() + .map((resource) => resource.uri); + expect(subscribedResources.length).toBe(2); + expect(subscribedResources).toContain(MAIN_PROFILE_URI); + expect(subscribedResources).toContain(OTHER_PROFILE_URI); + + // Update data on the Pod + await s.authFetch(MAIN_PROFILE_URI, { + method: "PATCH", + body: "INSERT DATA { . }", + headers: { + "Content-Type": "application/sparql-update", + }, + }); + await wait(1000); + + // After the data is committed, the third profile should be present + mainProfile = solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .fromSubject(MAIN_PROFILE_SUBJECT); + resourceUris = solidLdoDataset + .getResources() + .map((resource) => resource.uri); + expect(resourceUris.length).toBe(4); + expect(resourceUris).toContain(MAIN_PROFILE_URI); + expect(resourceUris).toContain(OTHER_PROFILE_URI); + expect(resourceUris).toContain(THIRD_PROFILE_URI); + expect(mainProfile.name).toBe("Main User"); + expect(mainProfile.knows?.size).toBe(2); + const knowNames = mainProfile.knows?.map((knowsPerson) => knowsPerson.name); + expect(knowNames).toContain("Other User"); + expect(knowNames).toContain("Third User"); + + subscribedResources = linkQuery + .getSubscribedResources() + .map((resource) => resource.uri); + expect(subscribedResources.length).toBe(3); + expect(subscribedResources).toContain(MAIN_PROFILE_URI); + expect(subscribedResources).toContain(OTHER_PROFILE_URI); + expect(subscribedResources).toContain(THIRD_PROFILE_URI); + + // Unsubscribe + await linkQuery.unsubscribe(unsubscribeId); + + await wait(200); + + s.fetchMock.mockClear(); + + // Does not update when unsubscribed + await s.authFetch(MAIN_PROFILE_URI, { + method: "PATCH", + body: "INSERT DATA { . }", + headers: { + "Content-Type": "application/sparql-update", + }, + }); + await wait(1000); + + expect(s.fetchMock).not.toHaveBeenCalled(); + subscribedResources = linkQuery + .getSubscribedResources() + .map((resource) => resource.uri); + expect(subscribedResources.length).toBe(0); + + // Check that all resources are unsubscribed from notifications + const resources = solidLdoDataset.getResources(); + resources.forEach((resource) => { + expect(resource.isSubscribedToNotifications()).toBe(false); + }); + + const cMainProfile = changeData(mainProfile, mainProfileResource); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + cMainProfile.knows?.add({ + "@id": "http://localhost:3005/test-container/fifthProfile.ttl#me", + }); + await commitData(cMainProfile); + }); +}); diff --git a/packages/connected/test/MockResource.ts b/packages/connected/test/MockResource.ts deleted file mode 100644 index e84b0b3..0000000 --- a/packages/connected/test/MockResource.ts +++ /dev/null @@ -1,73 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import EventEmitter from "events"; -import type { ResourceError } from "../src"; -import { - Unfetched, - type ConnectedResult, - type Resource, - type ResourceEventEmitter, -} from "../src"; -import type { DatasetChanges } from "@ldo/rdf-utils"; -import type { ReadSuccess } from "../src/results/success/ReadSuccess"; -import type { UpdateSuccess } from "../src/results/success/UpdateSuccess"; - -export class MockResouce - extends (EventEmitter as new () => ResourceEventEmitter) - implements Resource -{ - isError = false as const; - uri: string; - type = "mock" as const; - status: ConnectedResult; - - constructor(uri: string) { - super(); - this.uri = uri; - this.status = new Unfetched(this); - } - - isLoading(): boolean { - throw new Error("Method not implemented."); - } - isFetched(): boolean { - throw new Error("Method not implemented."); - } - isUnfetched(): boolean { - throw new Error("Method not implemented."); - } - isDoingInitialFetch(): boolean { - throw new Error("Method not implemented."); - } - isPresent(): boolean | undefined { - throw new Error("Method not implemented."); - } - isAbsent(): boolean | undefined { - throw new Error("Method not implemented."); - } - isSubscribedToNotifications(): boolean { - throw new Error("Method not implemented."); - } - read(): Promise | ResourceError> { - throw new Error("Method not implemented."); - } - readIfUnfetched(): Promise | ResourceError> { - throw new Error("Method not implemented."); - } - update( - _datasetChanges: DatasetChanges, - ): Promise | ResourceError> { - throw new Error("Method not implemented."); - } - subscribeToNotifications(_callbacks?: { - onNotification: (message: any) => void; - onNotificationError: (err: Error) => void; - }): Promise { - throw new Error("Method not implemented."); - } - unsubscribeFromNotifications(_subscriptionId: string): Promise { - throw new Error("Method not implemented."); - } - unsubscribeFromAllNotifications(): Promise { - throw new Error("Method not implemented."); - } -} diff --git a/packages/connected/test/mocks/MockResource.ts b/packages/connected/test/mocks/MockResource.ts new file mode 100644 index 0000000..7bac2c5 --- /dev/null +++ b/packages/connected/test/mocks/MockResource.ts @@ -0,0 +1,59 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import EventEmitter from "events"; +import type { ResourceError } from "../../src"; +import { + Unfetched, + type ConnectedResult, + type Resource, + type ResourceEventEmitter, +} from "../../src"; +import type { DatasetChanges } from "@ldo/rdf-utils"; +import type { ReadSuccess } from "../../src/results/success/ReadSuccess"; +import type { UpdateSuccess } from "../../src/results/success/UpdateSuccess"; + +export class MockResource + extends (EventEmitter as new () => ResourceEventEmitter) + implements Resource +{ + isError = false as const; + uri: string; + type = "mock" as const; + status: ConnectedResult; + + constructor(uri: string) { + super(); + this.uri = uri; + this.status = new Unfetched(this); + } + + isLoading = jest.fn(); + isFetched = jest.fn(); + isUnfetched = jest.fn(); + isDoingInitialFetch = jest.fn(); + isPresent = jest.fn(); + isAbsent = jest.fn(); + isSubscribedToNotifications = jest.fn(); + + read = jest.fn | ResourceError>, []>(); + readIfUnfetched = jest.fn< + Promise | ResourceError>, + [] + >(); + update = jest.fn< + Promise | ResourceError>, + [DatasetChanges] + >(); + + subscribeToNotifications = jest.fn< + Promise, + [ + { + onNotification: (message: any) => void; + onNotificationError: (err: Error) => void; + }?, + ] + >(); + + unsubscribeFromNotifications = jest.fn, [string]>(); + unsubscribeFromAllNotifications = jest.fn, []>(); +} diff --git a/packages/connected/test/util/wait.ts b/packages/connected/test/util/wait.ts new file mode 100644 index 0000000..be2bee6 --- /dev/null +++ b/packages/connected/test/util/wait.ts @@ -0,0 +1,3 @@ +export async function wait(time: number) { + return new Promise((resolve) => setTimeout(resolve, time)); +} diff --git a/packages/dataset/package.json b/packages/dataset/package.json index 44919cc..8d33caf 100644 --- a/packages/dataset/package.json +++ b/packages/dataset/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/dataset", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "description": "An RDFJS dataset implementation", "main": "dist/index.js", "scripts": { @@ -31,7 +31,7 @@ "ts-node": "^9.1.1" }, "dependencies": { - "@ldo/rdf-utils": "^1.0.0-alpha.3", + "@ldo/rdf-utils": "^1.0.0-alpha.9", "@rdfjs/dataset": "^1.1.0", "buffer": "^6.0.3", "readable-stream": "^4.2.0" diff --git a/packages/jsonld-dataset-proxy/package.json b/packages/jsonld-dataset-proxy/package.json index 691e3a7..77d4fcc 100644 --- a/packages/jsonld-dataset-proxy/package.json +++ b/packages/jsonld-dataset-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/jsonld-dataset-proxy", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "description": "", "main": "dist/index.js", "scripts": { @@ -37,8 +37,8 @@ "src" ], "dependencies": { - "@ldo/rdf-utils": "^1.0.0-alpha.3", - "@ldo/subscribable-dataset": "^1.0.0-alpha.3", + "@ldo/rdf-utils": "^1.0.0-alpha.9", + "@ldo/subscribable-dataset": "^1.0.0-alpha.9", "@rdfjs/data-model": "^1.2.0", "@rdfjs/dataset": "^1.1.0", "jsonld2graphobject": "^0.0.4" diff --git a/packages/ldo/package.json b/packages/ldo/package.json index 89ef9f1..49a136c 100644 --- a/packages/ldo/package.json +++ b/packages/ldo/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/ldo", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "description": "", "main": "dist/index.js", "scripts": { @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/o-development/ldobjects/tree/main/packages/ldo#readme", "devDependencies": { - "@ldo/rdf-utils": "^1.0.0-alpha.3", + "@ldo/rdf-utils": "^1.0.0-alpha.9", "@rdfjs/types": "^1.0.1", "@types/jsonld": "^1.5.6", "@types/n3": "^1.10.4", @@ -34,9 +34,9 @@ "typedoc-plugin-markdown": "^3.17.1" }, "dependencies": { - "@ldo/dataset": "^1.0.0-alpha.3", - "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.3", - "@ldo/subscribable-dataset": "^1.0.0-alpha.3", + "@ldo/dataset": "^1.0.0-alpha.9", + "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.9", + "@ldo/subscribable-dataset": "^1.0.0-alpha.9", "@rdfjs/data-model": "^1.2.0", "buffer": "^6.0.3", "readable-stream": "^4.3.0" diff --git a/packages/ldo/src/LdoBuilder.ts b/packages/ldo/src/LdoBuilder.ts index b20fa0a..63a148a 100644 --- a/packages/ldo/src/LdoBuilder.ts +++ b/packages/ldo/src/LdoBuilder.ts @@ -31,8 +31,8 @@ export class LdoBuilder { /** * @internal */ - private jsonldDatasetProxyBuilder: JsonldDatasetProxyBuilder; - private shapeType: ShapeType; + protected jsonldDatasetProxyBuilder: JsonldDatasetProxyBuilder; + protected shapeType: ShapeType; /** * Initializes the LdoBuilder diff --git a/packages/ldo/test/profileData.ts b/packages/ldo/test/profileData.ts index 74d823d..a58570c 100644 --- a/packages/ldo/test/profileData.ts +++ b/packages/ldo/test/profileData.ts @@ -974,7 +974,6 @@ export interface RSAPublicKeyShape { export interface SolidProfileShape { "@id"?: string; - "@context"?: ContextDefinition; /** * Defines the node as a Person (from Schema.org) | Defines the node as a Person (from foaf) */ diff --git a/packages/rdf-utils/package.json b/packages/rdf-utils/package.json index 4795202..eb80141 100644 --- a/packages/rdf-utils/package.json +++ b/packages/rdf-utils/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/rdf-utils", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "description": "Some RDF Utilities to support LDO librariers", "main": "dist/index.js", "scripts": { diff --git a/packages/react/README.md b/packages/react/README.md index 1eb1bbf..f5eff87 100644 --- a/packages/react/README.md +++ b/packages/react/README.md @@ -127,6 +127,7 @@ Hooks - [useMatchSubject](https://ldo.js.org/latest/api/react/useMatchSubject/) - [useMatchObject](https://ldo.js.org/latest/api/react/useMatchSubject/) - [useSubscribeToResource](https://ldo.js.org/latest/api/react/useMatchSubject/) + - [useLinkQuery](https://ldo.js.org/latest/api/react/useLinkQuery/) ## Sponsorship This project was made possible by a grant from NGI Zero Entrust via nlnet. Learn more on the [NLnet project page](https://nlnet.nl/project/SolidUsableApps/). diff --git a/packages/react/package.json b/packages/react/package.json index bfa7c0c..0131bc0 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/react", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "description": "A React library for LDO.", "main": "dist/index.js", "scripts": { @@ -29,11 +29,11 @@ "ts-node": "^10.9.2" }, "dependencies": { - "@ldo/connected": "^1.0.0-alpha.3", - "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.3", - "@ldo/ldo": "^1.0.0-alpha.3", - "@ldo/rdf-utils": "^1.0.0-alpha.3", - "@ldo/subscribable-dataset": "^1.0.0-alpha.3", + "@ldo/connected": "^1.0.0-alpha.9", + "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.9", + "@ldo/ldo": "^1.0.0-alpha.9", + "@ldo/rdf-utils": "^1.0.0-alpha.9", + "@ldo/subscribable-dataset": "^1.0.0-alpha.9", "@rdfjs/data-model": "^1.2.0", "cross-fetch": "^3.1.6" }, diff --git a/packages/react/src/createLdoReactMethods.tsx b/packages/react/src/createLdoReactMethods.tsx index eee6e21..6747a82 100644 --- a/packages/react/src/createLdoReactMethods.tsx +++ b/packages/react/src/createLdoReactMethods.tsx @@ -9,6 +9,7 @@ import { createUseMatchSubject } from "./methods/useMatchSubject"; import { createUseResource } from "./methods/useResource"; import { createUseSubject } from "./methods/useSubject"; import { createUseSubscribeToResource } from "./methods/useSubscribeToResource"; +import { createUseLinkQuery } from "./methods/useLinkQuery"; /** * A function that creates all common react functions given specific plugin. @@ -29,6 +30,7 @@ import { createUseSubscribeToResource } from "./methods/useSubscribeToResource"; * useResource, * useSubject, * useSubscribeToResource, + * useLinkQuery, * } = createLdoReactMethods([ * solidConnectedPlugin, * nextGraphConnectedPlugin @@ -70,5 +72,6 @@ export function createLdoReactMethods< useResource: createUseResource(dataset), useSubject: createUseSubject(dataset), useSubscribeToResource: createUseSubscribeToResource(dataset), + useLinkQuery: createUseLinkQuery(dataset), }; } diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index 05d1868..ca9d962 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -6,8 +6,6 @@ export * from "./methods/useMatchSubject"; export * from "./methods/useResource"; export * from "./methods/useSubject"; export * from "./methods/useSubscribeToResource"; +export * from "./methods/useLinkQuery"; -export * from "./util/TrackingProxyContext"; -export * from "./util/TrackingSetProxy"; -export * from "./util/TrackingSubjectProxy"; export * from "./util/useTrackingProxy"; diff --git a/packages/react/src/methods/useLinkQuery.ts b/packages/react/src/methods/useLinkQuery.ts new file mode 100644 index 0000000..1accb78 --- /dev/null +++ b/packages/react/src/methods/useLinkQuery.ts @@ -0,0 +1,72 @@ +import type { + ConnectedLdoDataset, + ConnectedPlugin, + ExpandDeep, + LQInput, + LQReturn, + ResourceLinkQuery, +} from "@ldo/connected"; +import type { LdoBase, LdoBuilder, ShapeType } from "@ldo/ldo"; +import type { SubjectNode } from "@ldo/rdf-utils"; +import { useCallback, useEffect, useRef, useState } from "react"; +import { useTrackingProxy } from "../util/useTrackingProxy"; + +/** + * @internal + * + * Creates a useMatchSubject function. + */ +export function createUseLinkQuery( + dataset: ConnectedLdoDataset, +) { + /** + * Returns an array of matching linked data objects. Triggers a rerender if + * the data is updated. + */ + return function useQueryLink< + Type extends LdoBase, + QueryInput extends LQInput, + >( + shapeType: ShapeType, + startingResource: string, + startingSubject: SubjectNode | string, + linkQuery: QueryInput, + ): ExpandDeep> | undefined { + const linkQueryRef = useRef< + ResourceLinkQuery | undefined + >(); + + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + if (linkQueryRef.current) { + linkQueryRef.current.unsubscribeAll(); + } + const resource = dataset.getResource(startingResource); + setIsLoading(true); + linkQueryRef.current = dataset + .usingType(shapeType) + .startLinkQuery(resource, startingSubject, linkQuery); + + linkQueryRef.current.subscribe().then(() => setIsLoading(false)); + + return () => { + linkQueryRef.current?.unsubscribeAll(); + }; + }, [shapeType, startingResource, startingSubject, linkQuery]); + + const fromSubject = useCallback( + (builder: LdoBuilder) => { + if (!startingSubject) return; + return builder.fromSubject(startingSubject); + }, + [startingSubject], + ); + + const linkedDataObject = useTrackingProxy(shapeType, fromSubject, dataset); + + return isLoading + ? undefined + : (linkedDataObject as unknown as ExpandDeep>); + }; +} diff --git a/packages/react/src/util/useTrackingProxy.ts b/packages/react/src/util/useTrackingProxy.ts index 33d39e1..d0c993a 100644 --- a/packages/react/src/util/useTrackingProxy.ts +++ b/packages/react/src/util/useTrackingProxy.ts @@ -1,12 +1,7 @@ -import { - ContextUtil, - JsonldDatasetProxyBuilder, -} from "@ldo/jsonld-dataset-proxy"; -import { LdoBuilder } from "@ldo/ldo"; +import type { LdoBuilder } from "@ldo/ldo"; import type { LdoBase, LdoDataset, ShapeType } from "@ldo/ldo"; import { useCallback, useEffect, useMemo, useState } from "react"; -import { TrackingProxyContext } from "./TrackingProxyContext"; -import { defaultGraph } from "@rdfjs/data-model"; +import { createTrackingProxyBuilder } from "@ldo/connected"; /** * @internal @@ -28,22 +23,7 @@ export function useTrackingProxy( const linkedDataObject = useMemo(() => { // Remove all current subscriptions dataset.removeListenerFromAllEvents(forceUpdate); - - // Rebuild the LdoBuilder from scratch to inject TrackingProxyContext - const contextUtil = new ContextUtil(shapeType.context); - const proxyContext = new TrackingProxyContext( - { - dataset, - contextUtil, - writeGraphs: [defaultGraph()], - languageOrdering: ["none", "en", "other"], - }, - forceUpdate, - ); - const builder = new LdoBuilder( - new JsonldDatasetProxyBuilder(proxyContext), - shapeType, - ); + const builder = createTrackingProxyBuilder(dataset, shapeType, forceUpdate); return createLdo(builder); }, [shapeType, dataset, forceUpdateCounter, forceUpdate, createLdo]); diff --git a/packages/schema-converter-shex/package.json b/packages/schema-converter-shex/package.json index 5d36918..9ce9a2c 100644 --- a/packages/schema-converter-shex/package.json +++ b/packages/schema-converter-shex/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/schema-converter-shex", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "description": "", "main": "dist/index.js", "scripts": { @@ -20,7 +20,7 @@ }, "homepage": "https://github.com/o-development/ldobjects/tree/main/packages/schema-converter-shex#readme", "devDependencies": { - "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.3", + "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.9", "@shexjs/parser": "^1.0.0-alpha.24", "@types/jsonld": "^1.5.6", "@types/shexj": "^2.1.3", @@ -31,7 +31,7 @@ "dist" ], "dependencies": { - "@ldo/traverser-shexj": "^1.0.0-alpha.3", + "@ldo/traverser-shexj": "^1.0.0-alpha.9", "dts-dom": "~3.6.0", "jsonld2graphobject": "^0.0.5" }, diff --git a/packages/solid-react/README.md b/packages/solid-react/README.md index 1458af6..663b5ed 100644 --- a/packages/solid-react/README.md +++ b/packages/solid-react/README.md @@ -20,17 +20,13 @@ Now install the @ldo/solid library npm i @ldo/solid @ldo/solid-react ``` -
- -Manual Installation - +### Manual Installation If you already have generated ShapeTypes, you may install the `@ldo/ldo` and `@ldo/solid` libraries independently. ``` npm i @ldo/ldo @ldo/solid @ldo/solid-react ``` -
## Simple Example @@ -115,18 +111,19 @@ export default App; Providers - - [BrowserSolidLdoProvider](https://ldo.js.org/latest/api/react/BrowserSolidLdoProvider/) - - [SolidLdoProvider](https://ldo.js.org/latest/api/react/SolidLdoProvider/) + - [BrowserSolidLdoProvider](https://ldo.js.org/latest/api/solid-react/BrowserSolidLdoProvider/) + - [SolidLdoProvider](https://ldo.js.org/latest/api/solid-react/SolidLdoProvider/) Hooks - - [useLdo](https://ldo.js.org/latest/api/react/useLdo/) - - [useResource](https://ldo.js.org/latest/api/react/useResource/) - - [useRootContainer](https://ldo.js.org/latest/api/react/useRootContainer/) - - [useSolidAuth](https://ldo.js.org/latest/api/react/useSolidAuth/) - - [useSubject](https://ldo.js.org/latest/api/react/useSubject/) - - [useMatchSubject](https://ldo.js.org/latest/api/react/useMatchSubject/) - - [useMatchObject](https://ldo.js.org/latest/api/react/useMatchSubject/) - - [useSubscribeToResource](https://ldo.js.org/latest/api/react/useMatchSubject/) + - [useLdo](https://ldo.js.org/latest/api/solid-react/useLdo/) + - [useResource](https://ldo.js.org/latest/api/solid-react/useResource/) + - [useRootContainer](https://ldo.js.org/latest/api/solid-react/useRootContainer/) + - [useSolidAuth](https://ldo.js.org/latest/api/solid-react/useSolidAuth/) + - [useSubject](https://ldo.js.org/latest/api/solid-react/useSubject/) + - [useMatchSubject](https://ldo.js.org/latest/api/solid-react/useMatchSubject/) + - [useMatchObject](https://ldo.js.org/latest/api/solid-react/useMatchSubject/) + - [useSubscribeToResource](https://ldo.js.org/latest/api/solid-react/useMatchSubject/) + - [useLinkQUery](https://ldo.js.org/latest/api/solid-react/useLinkQuery/) ## Sponsorship This project was made possible by a grant from NGI Zero Entrust via nlnet. Learn more on the [NLnet project page](https://nlnet.nl/project/SolidUsableApps/). diff --git a/packages/solid-react/package.json b/packages/solid-react/package.json index 6bb839c..c119a82 100644 --- a/packages/solid-react/package.json +++ b/packages/solid-react/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/solid-react", - "version": "1.0.0-alpha.5", + "version": "1.0.0-alpha.9", "description": "A React library for LDO and Solid", "main": "dist/index.js", "scripts": { @@ -29,7 +29,7 @@ "@babel/core": "^7.26.10", "@babel/preset-env": "^7.26.9", "@inrupt/jest-jsdom-polyfills": "^3.2.6", - "@ldo/rdf-utils": "^1.0.0-alpha.3", + "@ldo/rdf-utils": "^1.0.0-alpha.9", "@rdfjs/types": "^1.0.1", "@testing-library/react": "^14.1.2", "babel-jest": "^29.7.0", @@ -41,9 +41,9 @@ }, "dependencies": { "@inrupt/solid-client-authn-browser": "2.3.0", - "@ldo/connected": "^1.0.0-alpha.3", - "@ldo/connected-solid": "^1.0.0-alpha.3", - "@ldo/react": "^1.0.0-alpha.3", + "@ldo/connected": "^1.0.0-alpha.9", + "@ldo/connected-solid": "^1.0.0-alpha.9", + "@ldo/react": "^1.0.0-alpha.9", "@rdfjs/data-model": "^1.2.0", "cross-fetch": "^3.1.6" }, diff --git a/packages/solid-react/src/defaultIntance.ts b/packages/solid-react/src/defaultIntance.ts index 10f80fa..b72c746 100644 --- a/packages/solid-react/src/defaultIntance.ts +++ b/packages/solid-react/src/defaultIntance.ts @@ -13,6 +13,7 @@ export const { useResource, useSubject, useSubscribeToResource, + useLinkQuery, } = createLdoReactMethods([solidConnectedPlugin]); export const { BrowserSolidLdoProvider, useSolidAuth, useRootContainerFor } = diff --git a/packages/solid-react/test/.ldo/solidProfile.context.ts b/packages/solid-react/test/.ldo/solidProfile.context.ts new file mode 100644 index 0000000..9fdffc3 --- /dev/null +++ b/packages/solid-react/test/.ldo/solidProfile.context.ts @@ -0,0 +1,459 @@ +import { LdoJsonldContext } from "@ldo/ldo"; + +/** + * ============================================================================= + * solidProfileContext: JSONLD Context for solidProfile + * ============================================================================= + */ +export const solidProfileContext: LdoJsonldContext = { + type: { + "@id": "@type", + }, + Person: { + "@id": "http://schema.org/Person", + "@context": { + type: { + "@id": "@type", + }, + fn: { + "@id": "http://www.w3.org/2006/vcard/ns#fn", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#hasAddress", + "@type": "@id", + "@isCollection": true, + }, + hasEmail: { + "@id": "http://www.w3.org/2006/vcard/ns#hasEmail", + "@type": "@id", + "@isCollection": true, + }, + hasPhoto: { + "@id": "http://www.w3.org/2006/vcard/ns#hasPhoto", + "@type": "@id", + }, + img: { + "@id": "http://xmlns.com/foaf/0.1/img", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasTelephone: { + "@id": "http://www.w3.org/2006/vcard/ns#hasTelephone", + "@type": "@id", + "@isCollection": true, + }, + phone: { + "@id": "http://www.w3.org/2006/vcard/ns#phone", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + organizationName: { + "@id": "http://www.w3.org/2006/vcard/ns#organization-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + role: { + "@id": "http://www.w3.org/2006/vcard/ns#role", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + trustedApp: { + "@id": "http://www.w3.org/ns/auth/acl#trustedApp", + "@type": "@id", + "@isCollection": true, + }, + key: { + "@id": "http://www.w3.org/ns/auth/cert#key", + "@type": "@id", + "@isCollection": true, + }, + inbox: { + "@id": "http://www.w3.org/ns/ldp#inbox", + "@type": "@id", + }, + preferencesFile: { + "@id": "http://www.w3.org/ns/pim/space#preferencesFile", + "@type": "@id", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@type": "@id", + "@isCollection": true, + }, + account: { + "@id": "http://www.w3.org/ns/solid/terms#account", + "@type": "@id", + }, + privateTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#privateTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + publicTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#publicTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + knows: { + "@id": "http://xmlns.com/foaf/0.1/knows", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Person2: { + "@id": "http://xmlns.com/foaf/0.1/Person", + "@context": { + type: { + "@id": "@type", + }, + fn: { + "@id": "http://www.w3.org/2006/vcard/ns#fn", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#hasAddress", + "@type": "@id", + "@isCollection": true, + }, + hasEmail: { + "@id": "http://www.w3.org/2006/vcard/ns#hasEmail", + "@type": "@id", + "@isCollection": true, + }, + hasPhoto: { + "@id": "http://www.w3.org/2006/vcard/ns#hasPhoto", + "@type": "@id", + }, + img: { + "@id": "http://xmlns.com/foaf/0.1/img", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasTelephone: { + "@id": "http://www.w3.org/2006/vcard/ns#hasTelephone", + "@type": "@id", + "@isCollection": true, + }, + phone: { + "@id": "http://www.w3.org/2006/vcard/ns#phone", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + organizationName: { + "@id": "http://www.w3.org/2006/vcard/ns#organization-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + role: { + "@id": "http://www.w3.org/2006/vcard/ns#role", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + trustedApp: { + "@id": "http://www.w3.org/ns/auth/acl#trustedApp", + "@type": "@id", + "@isCollection": true, + }, + key: { + "@id": "http://www.w3.org/ns/auth/cert#key", + "@type": "@id", + "@isCollection": true, + }, + inbox: { + "@id": "http://www.w3.org/ns/ldp#inbox", + "@type": "@id", + }, + preferencesFile: { + "@id": "http://www.w3.org/ns/pim/space#preferencesFile", + "@type": "@id", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@type": "@id", + "@isCollection": true, + }, + account: { + "@id": "http://www.w3.org/ns/solid/terms#account", + "@type": "@id", + }, + privateTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#privateTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + publicTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#publicTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + knows: { + "@id": "http://xmlns.com/foaf/0.1/knows", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + fn: { + "@id": "http://www.w3.org/2006/vcard/ns#fn", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#hasAddress", + "@type": "@id", + "@isCollection": true, + }, + countryName: { + "@id": "http://www.w3.org/2006/vcard/ns#country-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + locality: { + "@id": "http://www.w3.org/2006/vcard/ns#locality", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + postalCode: { + "@id": "http://www.w3.org/2006/vcard/ns#postal-code", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + region: { + "@id": "http://www.w3.org/2006/vcard/ns#region", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + streetAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#street-address", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasEmail: { + "@id": "http://www.w3.org/2006/vcard/ns#hasEmail", + "@type": "@id", + "@isCollection": true, + }, + Dom: { + "@id": "http://www.w3.org/2006/vcard/ns#Dom", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Home: { + "@id": "http://www.w3.org/2006/vcard/ns#Home", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + ISDN: { + "@id": "http://www.w3.org/2006/vcard/ns#ISDN", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Internet: { + "@id": "http://www.w3.org/2006/vcard/ns#Internet", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Intl: { + "@id": "http://www.w3.org/2006/vcard/ns#Intl", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Label: { + "@id": "http://www.w3.org/2006/vcard/ns#Label", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Parcel: { + "@id": "http://www.w3.org/2006/vcard/ns#Parcel", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Postal: { + "@id": "http://www.w3.org/2006/vcard/ns#Postal", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Pref: { + "@id": "http://www.w3.org/2006/vcard/ns#Pref", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Work: { + "@id": "http://www.w3.org/2006/vcard/ns#Work", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + X400: { + "@id": "http://www.w3.org/2006/vcard/ns#X400", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + hasPhoto: { + "@id": "http://www.w3.org/2006/vcard/ns#hasPhoto", + "@type": "@id", + }, + img: { + "@id": "http://xmlns.com/foaf/0.1/img", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasTelephone: { + "@id": "http://www.w3.org/2006/vcard/ns#hasTelephone", + "@type": "@id", + "@isCollection": true, + }, + phone: { + "@id": "http://www.w3.org/2006/vcard/ns#phone", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + organizationName: { + "@id": "http://www.w3.org/2006/vcard/ns#organization-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + role: { + "@id": "http://www.w3.org/2006/vcard/ns#role", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + trustedApp: { + "@id": "http://www.w3.org/ns/auth/acl#trustedApp", + "@type": "@id", + "@isCollection": true, + }, + mode: { + "@id": "http://www.w3.org/ns/auth/acl#mode", + "@isCollection": true, + }, + Append: "http://www.w3.org/ns/auth/acl#Append", + Control: "http://www.w3.org/ns/auth/acl#Control", + Read: "http://www.w3.org/ns/auth/acl#Read", + Write: "http://www.w3.org/ns/auth/acl#Write", + origin: { + "@id": "http://www.w3.org/ns/auth/acl#origin", + "@type": "@id", + }, + key: { + "@id": "http://www.w3.org/ns/auth/cert#key", + "@type": "@id", + "@isCollection": true, + }, + modulus: { + "@id": "http://www.w3.org/ns/auth/cert#modulus", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + exponent: { + "@id": "http://www.w3.org/ns/auth/cert#exponent", + "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, + inbox: { + "@id": "http://www.w3.org/ns/ldp#inbox", + "@type": "@id", + }, + preferencesFile: { + "@id": "http://www.w3.org/ns/pim/space#preferencesFile", + "@type": "@id", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@type": "@id", + "@isCollection": true, + }, + account: { + "@id": "http://www.w3.org/ns/solid/terms#account", + "@type": "@id", + }, + privateTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#privateTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + publicTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#publicTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + knows: { + "@id": "http://xmlns.com/foaf/0.1/knows", + "@type": "@id", + "@isCollection": true, + }, +}; diff --git a/packages/solid-react/test/.ldo/solidProfile.schema.ts b/packages/solid-react/test/.ldo/solidProfile.schema.ts new file mode 100644 index 0000000..69466fc --- /dev/null +++ b/packages/solid-react/test/.ldo/solidProfile.schema.ts @@ -0,0 +1,749 @@ +import { Schema } from "shexj"; + +/** + * ============================================================================= + * solidProfileSchema: ShexJ Schema for solidProfile + * ============================================================================= + */ +export const solidProfileSchema: Schema = { + type: "Schema", + shapes: [ + { + id: "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["http://schema.org/Person"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the node as a Person (from Schema.org)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["http://xmlns.com/foaf/0.1/Person"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the node as a Person (from foaf)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#fn", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The formatted name of a person. Example: John Smith", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "An alternate way to define a person's name.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasAddress", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#AddressShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The person's street address.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasEmail", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#EmailShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The person's email.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasPhoto", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "A link to the person's photo", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/img", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Photo link but in string form", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasTelephone", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Person's telephone number", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#phone", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "An alternative way to define a person's telephone number using a string", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#organization-name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the organization with which the person is affiliated", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#role", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the person's role in their organization", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#trustedApp", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of app origins that are trusted by this user", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#key", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of RSA public keys that are associated with private keys the user holds.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/ldp#inbox", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The user's LDP inbox to which apps can post notifications", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/pim/space#preferencesFile", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's preferences", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/pim/space#storage", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The location of a Solid storage server related to this WebId", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#account", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's account", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#privateTypeIndex", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A registry of all types used on the user's Pod (for private access only)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#publicTypeIndex", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A registry of all types used on the user's Pod (for public access)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/knows", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of WebIds for all the people this user knows.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#AddressShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#country-name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The name of the user's country of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#locality", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the user's locality (City, Town etc.) of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#postal-code", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's postal code", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#region", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the user's region (State, Province etc.) of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#street-address", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's street address", + }, + }, + ], + }, + ], + }, + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#EmailShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/2006/vcard/ns#Dom", + "http://www.w3.org/2006/vcard/ns#Home", + "http://www.w3.org/2006/vcard/ns#ISDN", + "http://www.w3.org/2006/vcard/ns#Internet", + "http://www.w3.org/2006/vcard/ns#Intl", + "http://www.w3.org/2006/vcard/ns#Label", + "http://www.w3.org/2006/vcard/ns#Parcel", + "http://www.w3.org/2006/vcard/ns#Postal", + "http://www.w3.org/2006/vcard/ns#Pref", + "http://www.w3.org/2006/vcard/ns#Work", + "http://www.w3.org/2006/vcard/ns#X400", + ], + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The type of email.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#value", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The value of an email as a mailto link (Example )", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/2006/vcard/ns#Dom", + "http://www.w3.org/2006/vcard/ns#Home", + "http://www.w3.org/2006/vcard/ns#ISDN", + "http://www.w3.org/2006/vcard/ns#Internet", + "http://www.w3.org/2006/vcard/ns#Intl", + "http://www.w3.org/2006/vcard/ns#Label", + "http://www.w3.org/2006/vcard/ns#Parcel", + "http://www.w3.org/2006/vcard/ns#Postal", + "http://www.w3.org/2006/vcard/ns#Pref", + "http://www.w3.org/2006/vcard/ns#Work", + "http://www.w3.org/2006/vcard/ns#X400", + ], + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "They type of Phone Number", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#value", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The value of a phone number as a tel link (Example )", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#mode", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/ns/auth/acl#Append", + "http://www.w3.org/ns/auth/acl#Control", + "http://www.w3.org/ns/auth/acl#Read", + "http://www.w3.org/ns/auth/acl#Write", + ], + }, + min: 1, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The level of access provided to this origin", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#origin", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The app origin the user trusts", + }, + }, + ], + }, + ], + }, + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#modulus", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "RSA Modulus", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#exponent", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#integer", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "RSA Exponent", + }, + }, + ], + }, + ], + }, + }, + }, + ], +}; diff --git a/packages/solid-react/test/.ldo/solidProfile.shapeTypes.ts b/packages/solid-react/test/.ldo/solidProfile.shapeTypes.ts new file mode 100644 index 0000000..71426e4 --- /dev/null +++ b/packages/solid-react/test/.ldo/solidProfile.shapeTypes.ts @@ -0,0 +1,71 @@ +import { ShapeType } from "@ldo/ldo"; +import { solidProfileSchema } from "./solidProfile.schema"; +import { solidProfileContext } from "./solidProfile.context"; +import { + SolidProfileShape, + AddressShape, + EmailShape, + PhoneNumberShape, + TrustedAppShape, + RSAPublicKeyShape, +} from "./solidProfile.typings"; + +/** + * ============================================================================= + * LDO ShapeTypes solidProfile + * ============================================================================= + */ + +/** + * SolidProfileShape ShapeType + */ +export const SolidProfileShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + context: solidProfileContext, +}; + +/** + * AddressShape ShapeType + */ +export const AddressShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#AddressShape", + context: solidProfileContext, +}; + +/** + * EmailShape ShapeType + */ +export const EmailShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#EmailShape", + context: solidProfileContext, +}; + +/** + * PhoneNumberShape ShapeType + */ +export const PhoneNumberShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + context: solidProfileContext, +}; + +/** + * TrustedAppShape ShapeType + */ +export const TrustedAppShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + context: solidProfileContext, +}; + +/** + * RSAPublicKeyShape ShapeType + */ +export const RSAPublicKeyShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + context: solidProfileContext, +}; diff --git a/packages/solid-react/test/.ldo/solidProfile.typings.ts b/packages/solid-react/test/.ldo/solidProfile.typings.ts new file mode 100644 index 0000000..95dbaef --- /dev/null +++ b/packages/solid-react/test/.ldo/solidProfile.typings.ts @@ -0,0 +1,293 @@ +import { LdoJsonldContext, LdSet } from "@ldo/ldo"; + +/** + * ============================================================================= + * Typescript Typings for solidProfile + * ============================================================================= + */ + +/** + * SolidProfileShape Type + */ +export interface SolidProfileShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * Defines the node as a Person (from Schema.org) | Defines the node as a Person (from foaf) + */ + type: LdSet< + | { + "@id": "Person"; + } + | { + "@id": "Person2"; + } + >; + /** + * The formatted name of a person. Example: John Smith + */ + fn?: string; + /** + * An alternate way to define a person's name. + */ + name?: string; + /** + * The person's street address. + */ + hasAddress?: LdSet; + /** + * The person's email. + */ + hasEmail?: LdSet; + /** + * A link to the person's photo + */ + hasPhoto?: { + "@id": string; + }; + /** + * Photo link but in string form + */ + img?: string; + /** + * Person's telephone number + */ + hasTelephone?: LdSet; + /** + * An alternative way to define a person's telephone number using a string + */ + phone?: string; + /** + * The name of the organization with which the person is affiliated + */ + organizationName?: string; + /** + * The name of the person's role in their organization + */ + role?: string; + /** + * A list of app origins that are trusted by this user + */ + trustedApp?: LdSet; + /** + * A list of RSA public keys that are associated with private keys the user holds. + */ + key?: LdSet; + /** + * The user's LDP inbox to which apps can post notifications + */ + inbox: { + "@id": string; + }; + /** + * The user's preferences + */ + preferencesFile?: { + "@id": string; + }; + /** + * The location of a Solid storage server related to this WebId + */ + storage?: LdSet<{ + "@id": string; + }>; + /** + * The user's account + */ + account?: { + "@id": string; + }; + /** + * A registry of all types used on the user's Pod (for private access only) + */ + privateTypeIndex?: LdSet<{ + "@id": string; + }>; + /** + * A registry of all types used on the user's Pod (for public access) + */ + publicTypeIndex?: LdSet<{ + "@id": string; + }>; + /** + * A list of WebIds for all the people this user knows. + */ + knows?: LdSet; +} + +/** + * AddressShape Type + */ +export interface AddressShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * The name of the user's country of residence + */ + countryName?: string; + /** + * The name of the user's locality (City, Town etc.) of residence + */ + locality?: string; + /** + * The user's postal code + */ + postalCode?: string; + /** + * The name of the user's region (State, Province etc.) of residence + */ + region?: string; + /** + * The user's street address + */ + streetAddress?: string; +} + +/** + * EmailShape Type + */ +export interface EmailShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * The type of email. + */ + type?: + | { + "@id": "Dom"; + } + | { + "@id": "Home"; + } + | { + "@id": "ISDN"; + } + | { + "@id": "Internet"; + } + | { + "@id": "Intl"; + } + | { + "@id": "Label"; + } + | { + "@id": "Parcel"; + } + | { + "@id": "Postal"; + } + | { + "@id": "Pref"; + } + | { + "@id": "Work"; + } + | { + "@id": "X400"; + }; + /** + * The value of an email as a mailto link (Example ) + */ + value: { + "@id": string; + }; +} + +/** + * PhoneNumberShape Type + */ +export interface PhoneNumberShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * They type of Phone Number + */ + type?: + | { + "@id": "Dom"; + } + | { + "@id": "Home"; + } + | { + "@id": "ISDN"; + } + | { + "@id": "Internet"; + } + | { + "@id": "Intl"; + } + | { + "@id": "Label"; + } + | { + "@id": "Parcel"; + } + | { + "@id": "Postal"; + } + | { + "@id": "Pref"; + } + | { + "@id": "Work"; + } + | { + "@id": "X400"; + }; + /** + * The value of a phone number as a tel link (Example ) + */ + value: { + "@id": string; + }; +} + +/** + * TrustedAppShape Type + */ +export interface TrustedAppShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * The level of access provided to this origin + */ + mode: LdSet< + | { + "@id": "Append"; + } + | { + "@id": "Control"; + } + | { + "@id": "Read"; + } + | { + "@id": "Write"; + } + >; + /** + * The app origin the user trusts + */ + origin: { + "@id": string; + }; +} + +/** + * RSAPublicKeyShape Type + */ +export interface RSAPublicKeyShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * RSA Modulus + */ + modulus: string; + /** + * RSA Exponent + */ + exponent: number; +} diff --git a/packages/solid-react/test/Solid-Integration.test.tsx b/packages/solid-react/test/Solid-Integration.test.tsx index e500871..95b167d 100644 --- a/packages/solid-react/test/Solid-Integration.test.tsx +++ b/packages/solid-react/test/Solid-Integration.test.tsx @@ -2,10 +2,14 @@ import React, { useCallback, useEffect, useState } from "react"; import type { FunctionComponent } from "react"; import { render, screen, fireEvent, act } from "@testing-library/react"; import { + MAIN_PROFILE_SUBJECT, + MAIN_PROFILE_URI, + OTHER_PROFILE_URI, SAMPLE_BINARY_URI, SAMPLE_DATA_URI, SERVER_DOMAIN, setUpServer, + THIRD_PROFILE_SUBJECT, } from "./setUpServer"; import { UnauthenticatedSolidLdoProvider } from "../src/UnauthenticatedSolidLdoProvider"; import { @@ -17,9 +21,13 @@ import { useRootContainerFor, useSubject, useSubscribeToResource, + useLinkQuery, } from "../src"; import { PostShShapeType } from "./.ldo/post.shapeTypes"; import type { PostSh } from "./.ldo/post.typings"; +import { SolidProfileShapeShapeType } from "./.ldo/solidProfile.shapeTypes"; +import { changeData, commitData } from "@ldo/connected"; +import type { SolidProfileShape } from "./.ldo/solidProfile.typings"; // Use an increased timeout, since the CSS server takes too much setup time. jest.setTimeout(40_000); @@ -650,4 +658,86 @@ describe("Integration Tests", () => { unmount(); }); }); + + /** + * =========================================================================== + * useLinkQuery + * =========================================================================== + */ + describe("useLinkQuery", () => { + const linkQuery = { + name: true, + knows: { + name: true, + }, + } as const; + + it("Fetches a resource using useLinkQuery", async () => { + const UseLinkQueryTest: FunctionComponent = () => { + const profile = useLinkQuery( + SolidProfileShapeShapeType, + MAIN_PROFILE_URI, + MAIN_PROFILE_SUBJECT, + linkQuery, + ); + const addProfile = useCallback(async () => { + const cProfile = changeData( + profile as SolidProfileShape, + dataset.getResource(MAIN_PROFILE_URI), + ); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + cProfile.knows?.add({ "@id": THIRD_PROFILE_SUBJECT }); + await commitData(cProfile); + }, [profile]); + if (!profile) return

Loading

; + return ( +
+

{profile.name}

+
    + {profile.knows?.map((nestedProfile) => ( +
  • {nestedProfile.name}
  • + ))} +
+ +
+ ); + }; + const { unmount } = render( + + + , + ); + await screen.findByText("Loading"); + + let profileNameElement = await screen.findByRole("profile-name"); + + expect(profileNameElement.textContent).toBe("Main User"); + + let list = await screen.findByRole("list"); + expect(list.children[0].innerHTML).toBe("Other User"); + expect(list.children.length).toBe(1); + + // Click button to add a publisher + await fireEvent.click(screen.getByText("Add Profile")); + + // Give some time for notifications to propogate + await act(async () => { + await new Promise((resolve) => setTimeout(resolve, 2000)); + }); + + profileNameElement = await screen.findByRole("profile-name"); + expect(profileNameElement.textContent).toBe("Main User"); + + list = await screen.findByRole("list"); + expect(list.children[0].innerHTML).toBe("Other User"); + expect(list.children[1].innerHTML).toBe("Third User"); + + expect(list.children.length).toBe(2); + + unmount(); + }); + }); }); diff --git a/packages/solid-react/test/setUpServer.ts b/packages/solid-react/test/setUpServer.ts index b1f73d2..390b92b 100644 --- a/packages/solid-react/test/setUpServer.ts +++ b/packages/solid-react/test/setUpServer.ts @@ -20,6 +20,20 @@ export const SAMPLE2_BINARY_URI = `${TEST_CONTAINER_URI}${SAMPLE2_BINARY_SLUG}` as SolidLeafUri; export const SAMPLE_CONTAINER_URI = `${TEST_CONTAINER_URI}sample_container/` as SolidContainerUri; +export const LINK_QUERY_CONTAINER = `${ROOT_CONTAINER}link-query/`; +export const MAIN_PROFILE_URI = + `${LINK_QUERY_CONTAINER}main-profile.ttl` as SolidContainerUri; +export const MAIN_PROFILE_SUBJECT = + `${MAIN_PROFILE_URI}#me` as SolidContainerUri; +export const OTHER_PROFILE_URI = + `${LINK_QUERY_CONTAINER}other-profile.ttl` as SolidContainerUri; +export const OTHER_PROFILE_SUBJECT = + `${OTHER_PROFILE_URI}#me` as SolidContainerUri; +export const THIRD_PROFILE_URI = + `${LINK_QUERY_CONTAINER}third-profile.ttl` as SolidContainerUri; +export const THIRD_PROFILE_SUBJECT = + `${THIRD_PROFILE_URI}#me` as SolidContainerUri; + export const EXAMPLE_POST_TTL = `@prefix schema: . <#Post1> diff --git a/packages/solid-react/test/test-server/configs/template/wac/link-query/main-profile.ttl b/packages/solid-react/test/test-server/configs/template/wac/link-query/main-profile.ttl new file mode 100644 index 0000000..5a1891b --- /dev/null +++ b/packages/solid-react/test/test-server/configs/template/wac/link-query/main-profile.ttl @@ -0,0 +1,7 @@ +@prefix foaf: . +@prefix : <#> . + +:me a foaf:Person ; + foaf:name "Main User" ; + foaf:mbox ; + foaf:knows . \ No newline at end of file diff --git a/packages/solid-react/test/test-server/configs/template/wac/link-query/other-profile.ttl b/packages/solid-react/test/test-server/configs/template/wac/link-query/other-profile.ttl new file mode 100644 index 0000000..bf3b3b8 --- /dev/null +++ b/packages/solid-react/test/test-server/configs/template/wac/link-query/other-profile.ttl @@ -0,0 +1,7 @@ +@prefix foaf: . +@prefix : <#> . + +:me a foaf:Person ; + foaf:name "Other User" ; + foaf:mbox ; + foaf:knows . \ No newline at end of file diff --git a/packages/solid-react/test/test-server/configs/template/wac/link-query/third-profile.ttl b/packages/solid-react/test/test-server/configs/template/wac/link-query/third-profile.ttl new file mode 100644 index 0000000..e6dc8ce --- /dev/null +++ b/packages/solid-react/test/test-server/configs/template/wac/link-query/third-profile.ttl @@ -0,0 +1,7 @@ +@prefix foaf: . +@prefix : <#> . + +:me a foaf:Person ; + foaf:name "Third User" ; + foaf:mbox ; + foaf:knows . \ No newline at end of file diff --git a/packages/solid-type-index/package.json b/packages/solid-type-index/package.json index 51163dc..e63da3e 100644 --- a/packages/solid-type-index/package.json +++ b/packages/solid-type-index/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/solid-type-index", - "version": "1.0.0-alpha.5", + "version": "1.0.0-alpha.9", "description": "Solid Type Index support for LDO", "main": "dist/index.js", "scripts": { @@ -26,7 +26,7 @@ }, "homepage": "https://github.com/o-development/ldobjects/tree/main/packages/solid-react#readme", "devDependencies": { - "@ldo/rdf-utils": "^1.0.0-alpha.3", + "@ldo/rdf-utils": "^1.0.0-alpha.9", "@rdfjs/types": "^1.0.1", "@testing-library/react": "^14.1.2", "jest-environment-jsdom": "^29.7.0", @@ -34,8 +34,8 @@ "ts-node": "^10.9.2" }, "dependencies": { - "@ldo/connected-solid": "^1.0.0-alpha.3", - "@ldo/solid-react": "^1.0.0-alpha.5" + "@ldo/connected-solid": "^1.0.0-alpha.9", + "@ldo/solid-react": "^1.0.0-alpha.9" }, "files": [ "dist", diff --git a/packages/solid-type-index/src/react/useInstanceUris.ts b/packages/solid-type-index/src/react/useInstanceUris.ts index 8501a60..c842f99 100644 --- a/packages/solid-type-index/src/react/useInstanceUris.ts +++ b/packages/solid-type-index/src/react/useInstanceUris.ts @@ -37,6 +37,8 @@ export function useInstanceUris(classUri: string): SolidLeafUri[] { useEffect(() => { getInstanceUris(classUri, typeRegistrations.toArray(), { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore TODO: come back and see if we can fix this solidLdoDataset: dataset, }).then(setLeafUris); }, [typeRegistrations]); diff --git a/packages/solid-type-index/src/util/Options.ts b/packages/solid-type-index/src/util/Options.ts index 9d6d54b..b357ccc 100644 --- a/packages/solid-type-index/src/util/Options.ts +++ b/packages/solid-type-index/src/util/Options.ts @@ -4,8 +4,6 @@ import type { SolidConnectedPlugin } from "@ldo/connected-solid"; import { createSolidLdoDataset, guaranteeFetch } from "@ldo/connected-solid"; export interface Options { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore I'm honestly just tired of dealing with this at this point solidLdoDataset?: IConnectedLdoDataset; fetch?: typeof fetch; } diff --git a/packages/solid-type-index/test/General.test.tsx b/packages/solid-type-index/test/General.test.tsx index a3adb45..150dc95 100644 --- a/packages/solid-type-index/test/General.test.tsx +++ b/packages/solid-type-index/test/General.test.tsx @@ -35,11 +35,15 @@ describe("General Tests", () => { const solidLdoDataset = createSolidLdoDataset(); const typeRegistrations = await getTypeRegistrations(WEB_ID, { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore TODO: come back and see if we can fix this solidLdoDataset, }); const addressBookUris = await getInstanceUris( ADDRESS_BOOK, typeRegistrations.toArray(), + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore TODO: come back and see if we can fix this { solidLdoDataset }, ); expect(addressBookUris).toEqual( @@ -52,6 +56,8 @@ describe("General Tests", () => { BOOKMARK, typeRegistrations.toArray(), { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore TODO: come back and see if we can fix this solidLdoDataset, }, ); @@ -65,6 +71,8 @@ describe("General Tests", () => { const solidLdoDataset = createSolidLdoDataset(); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore TODO: come back and see if we can fix this await initTypeIndex(WEB_ID, { solidLdoDataset }); const profile = solidLdoDataset @@ -80,6 +88,8 @@ describe("General Tests", () => { const solidLdoDataset = createSolidLdoDataset(); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore TODO: come back and see if we can fix this await getTypeRegistrations(WEB_ID, { solidLdoDataset }); const transaction = solidLdoDataset.startTransaction(); @@ -119,6 +129,8 @@ describe("General Tests", () => { const solidLdoDataset = createSolidLdoDataset(); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore TODO: come back and see if we can fix this await getTypeRegistrations(WEB_ID, { solidLdoDataset }); const transaction = solidLdoDataset.startTransaction(); diff --git a/packages/subscribable-dataset/package.json b/packages/subscribable-dataset/package.json index d5ed917..be5fdd2 100644 --- a/packages/subscribable-dataset/package.json +++ b/packages/subscribable-dataset/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/subscribable-dataset", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "description": "An RDFJS dataset implementation that can be subscribed to for updates", "main": "dist/index.js", "scripts": { @@ -27,11 +27,13 @@ "@rdfjs/types": "^1.0.1", "@types/jsonld": "^1.5.6", "@types/rdfjs__dataset": "^1.0.4", + "@types/uuid": "^10.0.0", "ts-node": "^9.1.1" }, "dependencies": { - "@ldo/dataset": "^1.0.0-alpha.3", - "@ldo/rdf-utils": "^1.0.0-alpha.3" + "@ldo/dataset": "^1.0.0-alpha.9", + "@ldo/rdf-utils": "^1.0.0-alpha.9", + "uuid": "^11.1.0" }, "files": [ "dist", diff --git a/packages/subscribable-dataset/src/SubscribableDataset.ts b/packages/subscribable-dataset/src/SubscribableDataset.ts index c2f99dd..bb39b51 100644 --- a/packages/subscribable-dataset/src/SubscribableDataset.ts +++ b/packages/subscribable-dataset/src/SubscribableDataset.ts @@ -16,6 +16,7 @@ import type { ITransactionDatasetFactory, } from "./types"; import { ExtendedDataset } from "@ldo/dataset"; +import { v4 } from "uuid"; /** * A wrapper for a dataset that allows subscriptions to be made on nodes to @@ -175,7 +176,10 @@ export class SubscribableDataset // A mapping of serialized QuadMatches to the changed quads const matchingDatasetChanges: Record< string, - DatasetChanges + { + changes: DatasetChanges; + triggerQuadMatch: QuadMatch; + } > = {}; // Population MatchingDatasetChanges @@ -217,13 +221,18 @@ export class SubscribableDataset if (this.eventEmitter.listenerCount(eventName) > 0) { // Set matchingDatasetChanges to include data to emit if (!matchingDatasetChanges[eventName]) { - matchingDatasetChanges[eventName] = {}; + matchingDatasetChanges[eventName] = { + triggerQuadMatch: quadMatch, + changes: {}, + }; } - if (!matchingDatasetChanges[eventName][changeType]) { - matchingDatasetChanges[eventName][changeType] = + if (!matchingDatasetChanges[eventName].changes[changeType]) { + matchingDatasetChanges[eventName].changes[changeType] = this.datasetFactory.dataset(); } - matchingDatasetChanges[eventName][changeType]?.add(changedQuad); + matchingDatasetChanges[eventName].changes[changeType]?.add( + changedQuad, + ); } }); }); @@ -231,10 +240,16 @@ export class SubscribableDataset populateMatchingDatasetChanges("added"); populateMatchingDatasetChanges("removed"); + const transactionId = v4(); // Alert all listeners Object.entries(matchingDatasetChanges).forEach( - ([quadMatchString, changes]) => { - this.eventEmitter.emit(quadMatchString, changes); + ([quadMatchString, info]) => { + this.eventEmitter.emit( + quadMatchString, + info.changes, + transactionId, + info.triggerQuadMatch, + ); }, ); } diff --git a/packages/subscribable-dataset/src/types.ts b/packages/subscribable-dataset/src/types.ts index 055ed21..ce3d64d 100644 --- a/packages/subscribable-dataset/src/types.ts +++ b/packages/subscribable-dataset/src/types.ts @@ -6,6 +6,8 @@ import type { Dataset, BaseQuad, DatasetFactory } from "@rdfjs/types"; */ export type nodeEventListener = ( changes: DatasetChanges, + transactionId: string, + triggeringQuadMatch: QuadMatch, ) => void; /** diff --git a/packages/subscribable-dataset/test/SubscribableDataset.test.ts b/packages/subscribable-dataset/test/SubscribableDataset.test.ts index 84a707d..5454c18 100644 --- a/packages/subscribable-dataset/test/SubscribableDataset.test.ts +++ b/packages/subscribable-dataset/test/SubscribableDataset.test.ts @@ -62,6 +62,12 @@ describe("SubscribableDataset", () => { expect(callbackFunc).toBeCalledTimes(1); expect(callbackFunc.mock.calls[0][0].added.size).toBe(1); expect(callbackFunc.mock.calls[0][0].added.has(tomColorQuad)).toBe(true); + expect(callbackFunc.mock.calls[0][2]).toEqual([ + namedNode("http://example.org/cartoons#Tom"), + null, + null, + null, + ]); }); it("Alerts when a node is removed", () => { @@ -74,6 +80,12 @@ describe("SubscribableDataset", () => { expect(callbackFunc).toBeCalledTimes(1); expect(callbackFunc.mock.calls[0][0].removed.size).toBe(1); expect(callbackFunc.mock.calls[0][0].removed.has(tomTypeQuad)).toBe(true); + expect(callbackFunc.mock.calls[0][2]).toEqual([ + namedNode("http://example.org/cartoons#Tom"), + null, + null, + null, + ]); }); it("Alerts when multiple quads are added", () => { @@ -87,6 +99,12 @@ describe("SubscribableDataset", () => { expect(callbackFunc.mock.calls[0][0].added.size).toBe(2); expect(callbackFunc.mock.calls[0][0].added.has(lickyNameQuad)).toBe(true); expect(callbackFunc.mock.calls[0][0].added.has(lickyTypeQuad)).toBe(true); + expect(callbackFunc.mock.calls[0][2]).toEqual([ + namedNode("http://example.org/cartoons#Licky"), + null, + null, + null, + ]); }); it("Alerts when bulk updated by only adding", () => { @@ -105,6 +123,12 @@ describe("SubscribableDataset", () => { ), ).toBe(true); expect(callbackFuncLicky.mock.calls[0][0].removed).toBe(undefined); + expect(callbackFuncLicky.mock.calls[0][2]).toEqual([ + namedNode("http://example.org/cartoons#Licky"), + null, + null, + null, + ]); }); it("Alerts when bulk updated by only removing", () => { @@ -123,6 +147,12 @@ describe("SubscribableDataset", () => { ), ).toBe(true); expect(callbackFuncTom.mock.calls[0][0].added).toBe(undefined); + expect(callbackFuncTom.mock.calls[0][2]).toEqual([ + namedNode("http://example.org/cartoons#Tom"), + null, + null, + null, + ]); }); it("Alerts when emit is called", () => { diff --git a/packages/test-solid-server/.eslintrc b/packages/test-solid-server/.eslintrc new file mode 100644 index 0000000..04abf47 --- /dev/null +++ b/packages/test-solid-server/.eslintrc @@ -0,0 +1,5 @@ +{ + "extends": [ + "../../.eslintrc" + ] +} \ No newline at end of file diff --git a/packages/test-solid-server/.gitignore b/packages/test-solid-server/.gitignore new file mode 100644 index 0000000..f81e057 --- /dev/null +++ b/packages/test-solid-server/.gitignore @@ -0,0 +1,2 @@ +node_modules +*/data \ No newline at end of file diff --git a/packages/test-solid-server/LICENSE.txt b/packages/test-solid-server/LICENSE.txt new file mode 100644 index 0000000..b87e67e --- /dev/null +++ b/packages/test-solid-server/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Jackson Morgan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/test-solid-server/Readme.md b/packages/test-solid-server/Readme.md new file mode 100644 index 0000000..01ef5e9 --- /dev/null +++ b/packages/test-solid-server/Readme.md @@ -0,0 +1,17 @@ +# @ldo/test-solid-server + +This is a reusable Solid Server to be used in Jest integration tests. + +## Setup + +Install cross-env + +``` +npm i --save-dev cross-env +``` + +Use the following to run your tests + +``` +"test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --coverage", +``` \ No newline at end of file diff --git a/packages/test-solid-server/package.json b/packages/test-solid-server/package.json new file mode 100644 index 0000000..294f428 --- /dev/null +++ b/packages/test-solid-server/package.json @@ -0,0 +1,34 @@ +{ + "name": "@ldo/test-solid-server", + "version": "1.0.0-alpha.9", + "description": "A solid server to be used in jest tests", + "main": "dist/index.js", + "scripts": { + "build": "tsc --project tsconfig.build.json && npm run copy-configs", + "prepublishOnly": "npm run build", + "copy-configs": "cp -r src/configs dist/configs", + "lint": "eslint src/** --fix --no-error-on-unmatched-pattern" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/o-development/ldo.git" + }, + "author": "Jackson Morgan", + "license": "MIT", + "bugs": { + "url": "https://github.com/o-development/ldo/issues" + }, + "homepage": "https://github.com/o-development/ldo/tree/main/packages/solid#readme", + "dependencies": { + "@inrupt/solid-client-authn-core": "^2.2.6", + "@solid/community-server": "^7.1.3", + "cross-env": "^7.0.3" + }, + "files": [ + "dist", + "src" + ], + "publishConfig": { + "access": "public" + } +} diff --git a/packages/connected-solid/test/authFetch.helper.ts b/packages/test-solid-server/src/authFetch.ts similarity index 82% rename from packages/connected-solid/test/authFetch.helper.ts rename to packages/test-solid-server/src/authFetch.ts index fffee6a..7a2838e 100644 --- a/packages/connected-solid/test/authFetch.helper.ts +++ b/packages/test-solid-server/src/authFetch.ts @@ -7,14 +7,14 @@ import { import fetch from "cross-fetch"; const config = { - podName: process.env.USER_NAME || "example", - email: process.env.EMAIL || "hello@example.com", - password: process.env.PASSWORD || "abc123", + podName: "example", + email: "hello@example.com", + password: "abc123", }; -async function getAuthorization(): Promise { +async function getAuthorization(port: number): Promise { // First we request the account API controls to find out where we can log in - const indexResponse = await fetch("http://localhost:3001/.account/"); + const indexResponse = await fetch(`http://localhost:${port}/.account/`); const { controls } = await indexResponse.json(); // And then we log in to the account API @@ -32,11 +32,12 @@ async function getAuthorization(): Promise { } async function getSecret( + port: number, authorization: string, ): Promise<{ id: string; secret: string; resource: string }> { // Now that we are logged in, we need to request the updated controls from the server. // These will now have more values than in the previous example. - const indexResponse = await fetch("http://localhost:3001/.account/", { + const indexResponse = await fetch(`http://localhost:${port}/.account/`, { headers: { authorization: `CSS-Account-Token ${authorization}` }, }); const { controls } = await indexResponse.json(); @@ -53,7 +54,7 @@ async function getSecret( // Only WebIDs linked to your account can be used. body: JSON.stringify({ name: "my-token", - webId: `http://localhost:3001/${config.podName}/profile/card#me`, + webId: `http://localhost:${port}/${config.podName}/profile/card#me`, }), }); @@ -65,6 +66,7 @@ async function getSecret( } async function getAccessToken( + port: number, id: string, secret: string, ): Promise<{ accessToken: string; dpopKey: KeyPair }> { @@ -79,9 +81,9 @@ async function getAccessToken( secret, )}`; // This URL can be found by looking at the "token_endpoint" field at - // http://localhost:3001/.well-known/openid-configuration + // http://localhost:PORT/.well-known/openid-configuration // if your server is hosted at http://localhost:3000/. - const tokenUrl = "http://localhost:3001/.oidc/token"; + const tokenUrl = `http://localhost:${port}/.oidc/token`; const response = await fetch(tokenUrl, { method: "POST", headers: { @@ -104,9 +106,9 @@ async function getAccessToken( } } -export async function generateAuthFetch() { - const authorization = await getAuthorization(); - const { id, secret } = await getSecret(authorization); - const { accessToken, dpopKey } = await getAccessToken(id, secret); +export async function generateAuthFetch(port: number) { + const authorization = await getAuthorization(port); + const { id, secret } = await getSecret(port, authorization); + const { accessToken, dpopKey } = await getAccessToken(port, id, secret); return await buildAuthenticatedFetch(accessToken, { dpopKey }); } diff --git a/packages/test-solid-server/src/configs/server-config-without-websocket.json b/packages/test-solid-server/src/configs/server-config-without-websocket.json new file mode 100644 index 0000000..626d082 --- /dev/null +++ b/packages/test-solid-server/src/configs/server-config-without-websocket.json @@ -0,0 +1,44 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^7.0.0/components/context.jsonld", + "import": [ + "css:config/app/init/initialize-root.json", + "css:config/app/main/default.json", + "css:config/app/variables/default.json", + "css:config/http/handler/default.json", + "css:config/http/middleware/default.json", + "css:config/http/notifications/webhooks.json", + "css:config/http/server-factory/http.json", + "css:config/http/static/default.json", + "css:config/identity/access/public.json", + "css:config/identity/email/default.json", + "css:config/identity/handler/no-accounts.json", + "css:config/identity/oidc/default.json", + "css:config/identity/ownership/token.json", + "css:config/identity/pod/static.json", + "css:config/ldp/authentication/dpop-bearer.json", + "css:config/ldp/authorization/webacl.json", + "css:config/ldp/handler/default.json", + "css:config/ldp/metadata-parser/default.json", + "css:config/ldp/metadata-writer/default.json", + "css:config/ldp/modes/default.json", + "css:config/storage/backend/file.json", + "css:config/storage/key-value/resource-store.json", + "css:config/storage/location/root.json", + "css:config/storage/middleware/default.json", + "css:config/util/auxiliary/acl.json", + "css:config/util/identifiers/suffix.json", + "css:config/util/index/default.json", + "css:config/util/logging/winston.json", + "css:config/util/representation-conversion/default.json", + "css:config/util/resource-locker/file.json", + "css:config/util/variables/default.json" + ], + "@graph": [ + { + "comment": [ + "A Solid server that stores its resources on disk and uses WAC for authorization.", + "No registration and the root container is initialized to allow full access for everyone so make sure to change this." + ] + } + ] +} \ No newline at end of file diff --git a/packages/connected-solid/test/configs/server-config.json b/packages/test-solid-server/src/configs/server-config.json similarity index 100% rename from packages/connected-solid/test/configs/server-config.json rename to packages/test-solid-server/src/configs/server-config.json diff --git a/packages/connected-solid/test/configs/solid-css-seed.json b/packages/test-solid-server/src/configs/solid-css-seed.json similarity index 100% rename from packages/connected-solid/test/configs/solid-css-seed.json rename to packages/test-solid-server/src/configs/solid-css-seed.json diff --git a/packages/connected-solid/test/solidServer.helper.ts b/packages/test-solid-server/src/createServer.ts similarity index 68% rename from packages/connected-solid/test/solidServer.helper.ts rename to packages/test-solid-server/src/createServer.ts index 848abc1..19c8e3d 100644 --- a/packages/connected-solid/test/solidServer.helper.ts +++ b/packages/test-solid-server/src/createServer.ts @@ -4,19 +4,14 @@ import * as path from "path"; import type { App } from "@solid/community-server"; import { AppRunner, resolveModulePath } from "@solid/community-server"; import "jest-rdf"; -import type { SolidContainerUri } from "../src"; - -export const SERVER_DOMAIN = process.env.SERVER || "http://localhost:3001/"; -export const ROOT_ROUTE = process.env.ROOT_CONTAINER || ""; -export const ROOT_CONTAINER = - `${SERVER_DOMAIN}${ROOT_ROUTE}` as SolidContainerUri; -export const WEB_ID = - process.env.WEB_ID || `${SERVER_DOMAIN}example/profile/card#me`; // Use an increased timeout, since the CSS server takes too much setup time. jest.setTimeout(40_000); -export async function createApp(customConfigPath?: string): Promise { +export async function createApp( + port: number, + customConfigPath?: string, +): Promise { if (process.env.SERVER) { return { start: () => {}, @@ -33,7 +28,7 @@ export async function createApp(customConfigPath?: string): Promise { config: customConfigPath ?? resolveModulePath("config/file-root.json"), variableBindings: {}, shorthand: { - port: 3_001, + port: port, loggingLevel: "off", seedConfig: path.join(__dirname, "configs", "solid-css-seed.json"), rootFilePath: path.join(__dirname, "./data"), diff --git a/packages/test-solid-server/src/index.ts b/packages/test-solid-server/src/index.ts new file mode 100644 index 0000000..c019d75 --- /dev/null +++ b/packages/test-solid-server/src/index.ts @@ -0,0 +1,3 @@ +export * from "./createServer"; +export * from "./setupTestServer"; +export * from "./resourceUtils"; diff --git a/packages/test-solid-server/src/resourceUtils.ts b/packages/test-solid-server/src/resourceUtils.ts new file mode 100644 index 0000000..868919c --- /dev/null +++ b/packages/test-solid-server/src/resourceUtils.ts @@ -0,0 +1,75 @@ +export type ResourceInfo = ContainerInfo | LeafInfo; + +interface ContainerInfo { + slug: string; + isContainer: true; + shouldNotInit?: boolean; + contains: (ContainerInfo | LeafInfo)[]; +} + +interface LeafInfo { + slug: string; + isContainer: false; + data: string; + shouldNotInit?: boolean; + mimeType: string; +} + +export async function initResources( + rootUri: string, + resourceInfo: ResourceInfo, + authFetch: typeof fetch, +): Promise { + if (resourceInfo?.shouldNotInit) return; + if (resourceInfo.isContainer) { + await authFetch(rootUri, { + method: "POST", + headers: { + link: '; rel="type"', + slug: resourceInfo.slug, + }, + }); + await Promise.all( + resourceInfo.contains.map((subResourceInfo) => + initResources( + `${rootUri}${resourceInfo.slug}`, + subResourceInfo, + authFetch, + ), + ), + ); + } else { + await authFetch(`${rootUri}${resourceInfo.slug}`, { + method: "PUT", + headers: { + "content-type": resourceInfo.mimeType, + }, + body: resourceInfo.data, + }); + } +} + +export async function cleanResources( + rootUri: string, + resourceInfo: ResourceInfo, + authFetch: typeof fetch, +): Promise { + if (resourceInfo.isContainer) { + await Promise.all( + resourceInfo.contains.map((subResourceInfo) => + cleanResources( + `${rootUri}${resourceInfo.slug}`, + subResourceInfo, + authFetch, + ), + ), + ); + await authFetch(`${rootUri}${resourceInfo.slug}`, { + method: "DELETE", + }); + } else { + await authFetch(`${rootUri}${resourceInfo.slug}`, { + method: "DELETE", + }); + } +} diff --git a/packages/test-solid-server/src/setupTestServer.ts b/packages/test-solid-server/src/setupTestServer.ts new file mode 100644 index 0000000..ccbf7da --- /dev/null +++ b/packages/test-solid-server/src/setupTestServer.ts @@ -0,0 +1,60 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { App } from "@solid/community-server"; +import { createApp } from "./createServer"; +import path from "path"; +import type { ResourceInfo } from "./resourceUtils"; +import { cleanResources, initResources } from "./resourceUtils"; +import { generateAuthFetch } from "./authFetch"; +import fs from "fs/promises"; + +export function setupServer( + port: number, + resourceInfo: ResourceInfo, + customConfigPath?: string, +) { + const data: { + app: App; + fetchMock: jest.Mock< + Promise, + [input: RequestInfo | URL, init?: RequestInit | undefined] + >; + authFetch: typeof fetch; + rootUri: string; + } = { + rootUri: `http://localhost:${port}/`, + } as any; + + let previousJestId: string | undefined; + let previousNodeEnv: string | undefined; + beforeAll(async () => { + // Remove Jest ID so that community solid server doesn't use the Jest Import + previousJestId = process.env.JEST_WORKER_ID; + previousNodeEnv = process.env.NODE_ENV; + delete process.env.JEST_WORKER_ID; + process.env.NODE_ENV = "other_test"; + // Start up the server + data.app = await createApp(port, customConfigPath); + await data.app.start(); + data.authFetch = await generateAuthFetch(port); + }); + + afterAll(async () => { + data.app.stop(); + process.env.JEST_WORKER_ID = previousJestId; + process.env.NODE_ENV = previousNodeEnv; + const testDataPath = path.join(__dirname, "./data"); + await fs.rm(testDataPath, { recursive: true, force: true }); + }); + + beforeEach(async () => { + data.fetchMock = jest.fn(data.authFetch); + // Create a new document called sample.ttl + await initResources(data.rootUri, resourceInfo, data.authFetch); + }); + + afterEach(async () => { + await cleanResources(data.rootUri, resourceInfo, data.authFetch); + }); + + return data; +} diff --git a/packages/test-solid-server/tsconfig.build.json b/packages/test-solid-server/tsconfig.build.json new file mode 100644 index 0000000..2787d93 --- /dev/null +++ b/packages/test-solid-server/tsconfig.build.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist" + }, + "include": [ + "./src" + ], + "exclude": [ + "./dist", + "./coverage" + ] +} \ No newline at end of file diff --git a/packages/traverser-shexj/package.json b/packages/traverser-shexj/package.json index 417bfc0..70b6af9 100644 --- a/packages/traverser-shexj/package.json +++ b/packages/traverser-shexj/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/traverser-shexj", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "description": "A type-traverser for ShexJ", "main": "dist/index.js", "scripts": { @@ -24,7 +24,7 @@ "src" ], "dependencies": { - "@ldo/type-traverser": "^1.0.0-alpha.3" + "@ldo/type-traverser": "^1.0.0-alpha.9" }, "publishConfig": { "access": "public" diff --git a/packages/type-traverser/package.json b/packages/type-traverser/package.json index 6c0f21f..89865b8 100644 --- a/packages/type-traverser/package.json +++ b/packages/type-traverser/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/type-traverser", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.9", "description": "An organized way to traverse over objects using typescript", "main": "dist/index.js", "scripts": { diff --git a/tsconfig.json b/tsconfig.json index 7c40b21..a571c61 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,9 @@ "extends": "./tsconfig.base.json", "compilerOptions": { "paths": { - "@ldo/*": ["packages/*/src"] + "@ldo/*": [ + "packages/*/src" + ] }, "allowJs": true }