diff --git a/lerna.json b/lerna.json index 1184ffb..aea92b0 100644 --- a/lerna.json +++ b/lerna.json @@ -1,4 +1,4 @@ { "$schema": "node_modules/lerna/schemas/lerna-schema.json", - "version": "0.0.1-alpha.23" + "version": "0.0.1-alpha.28" } diff --git a/package-lock.json b/package-lock.json index f2770f7..fc196ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,75 +50,18 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.25.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.23.5", + "version": "7.25.8", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -194,45 +137,46 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/types": "^7.25.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -259,17 +203,15 @@ "license": "ISC" }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.0", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/traverse": "^7.25.7", "semver": "^6.3.1" }, "engines": { @@ -287,11 +229,11 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.25.7", + "regexpu-core": "^6.1.1", "semver": "^6.3.1" }, "engines": { @@ -337,63 +279,36 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -403,29 +318,29 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", + "version": "7.25.7", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-wrap-function": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -435,12 +350,12 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -450,63 +365,55 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", + "version": "7.25.7", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", + "version": "7.25.7", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", + "version": "7.25.7", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -525,12 +432,13 @@ } }, "node_modules/@babel/highlight": { - "version": "7.23.4", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.25.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -594,8 +502,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.9", + "version": "7.25.8", "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.8" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -603,11 +514,38 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -617,12 +555,12 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -632,11 +570,11 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.7", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -771,19 +709,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-decorators": { "version": "7.24.0", "license": "MIT", @@ -797,26 +722,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-flow": { "version": "7.23.3", "license": "MIT", @@ -831,10 +736,10 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -844,10 +749,10 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -949,19 +854,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "license": "MIT", @@ -1003,10 +895,10 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1016,13 +908,12 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", + "version": "7.25.8", "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1032,12 +923,12 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1047,10 +938,10 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1060,10 +951,10 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1073,11 +964,11 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1087,12 +978,11 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", + "version": "7.25.8", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1102,16 +992,14 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.8", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/traverse": "^7.25.7", "globals": "^11.1.0" }, "engines": { @@ -1129,11 +1017,11 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/template": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1143,10 +1031,10 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1156,11 +1044,11 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1170,10 +1058,10 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1182,12 +1070,25 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.7", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", + "version": "7.25.8", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1197,11 +1098,11 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1211,11 +1112,10 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", + "version": "7.25.8", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1239,11 +1139,11 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1253,12 +1153,12 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1268,11 +1168,10 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", + "version": "7.25.8", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1282,10 +1181,10 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1295,11 +1194,10 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", + "version": "7.25.8", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1309,10 +1207,10 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1322,11 +1220,11 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1336,12 +1234,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1351,13 +1249,13 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.9", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1367,11 +1265,11 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1381,11 +1279,11 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1395,10 +1293,10 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1408,11 +1306,10 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", + "version": "7.25.8", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1422,11 +1319,10 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", + "version": "7.25.8", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1436,14 +1332,12 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.0", + "version": "7.25.8", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-transform-parameters": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1453,11 +1347,11 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1467,11 +1361,10 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", + "version": "7.25.8", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1481,12 +1374,11 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", + "version": "7.25.8", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1496,10 +1388,10 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1509,11 +1401,11 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1523,13 +1415,12 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", + "version": "7.25.8", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1539,10 +1430,10 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1622,10 +1513,10 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.25.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1636,10 +1527,10 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1674,10 +1565,10 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1687,11 +1578,11 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1701,10 +1592,10 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1714,10 +1605,10 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1727,10 +1618,10 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1756,10 +1647,10 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1769,11 +1660,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1783,11 +1674,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1797,11 +1688,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1811,88 +1702,76 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.0", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "version": "7.25.8", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.8", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-import-assertions": "^7.25.7", + "@babel/plugin-syntax-import-attributes": "^7.25.7", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.24.0", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/plugin-transform-arrow-functions": "^7.25.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.8", + "@babel/plugin-transform-async-to-generator": "^7.25.7", + "@babel/plugin-transform-block-scoped-functions": "^7.25.7", + "@babel/plugin-transform-block-scoping": "^7.25.7", + "@babel/plugin-transform-class-properties": "^7.25.7", + "@babel/plugin-transform-class-static-block": "^7.25.8", + "@babel/plugin-transform-classes": "^7.25.7", + "@babel/plugin-transform-computed-properties": "^7.25.7", + "@babel/plugin-transform-destructuring": "^7.25.7", + "@babel/plugin-transform-dotall-regex": "^7.25.7", + "@babel/plugin-transform-duplicate-keys": "^7.25.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-dynamic-import": "^7.25.8", + "@babel/plugin-transform-exponentiation-operator": "^7.25.7", + "@babel/plugin-transform-export-namespace-from": "^7.25.8", + "@babel/plugin-transform-for-of": "^7.25.7", + "@babel/plugin-transform-function-name": "^7.25.7", + "@babel/plugin-transform-json-strings": "^7.25.8", + "@babel/plugin-transform-literals": "^7.25.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.8", + "@babel/plugin-transform-member-expression-literals": "^7.25.7", + "@babel/plugin-transform-modules-amd": "^7.25.7", + "@babel/plugin-transform-modules-commonjs": "^7.25.7", + "@babel/plugin-transform-modules-systemjs": "^7.25.7", + "@babel/plugin-transform-modules-umd": "^7.25.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-new-target": "^7.25.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.8", + "@babel/plugin-transform-numeric-separator": "^7.25.8", + "@babel/plugin-transform-object-rest-spread": "^7.25.8", + "@babel/plugin-transform-object-super": "^7.25.7", + "@babel/plugin-transform-optional-catch-binding": "^7.25.8", + "@babel/plugin-transform-optional-chaining": "^7.25.8", + "@babel/plugin-transform-parameters": "^7.25.7", + "@babel/plugin-transform-private-methods": "^7.25.7", + "@babel/plugin-transform-private-property-in-object": "^7.25.8", + "@babel/plugin-transform-property-literals": "^7.25.7", + "@babel/plugin-transform-regenerator": "^7.25.7", + "@babel/plugin-transform-reserved-words": "^7.25.7", + "@babel/plugin-transform-shorthand-properties": "^7.25.7", + "@babel/plugin-transform-spread": "^7.25.7", + "@babel/plugin-transform-sticky-regex": "^7.25.7", + "@babel/plugin-transform-template-literals": "^7.25.7", + "@babel/plugin-transform-typeof-symbol": "^7.25.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.7", + "@babel/plugin-transform-unicode-property-regex": "^7.25.7", + "@babel/plugin-transform-unicode-regex": "^7.25.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.7", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", - "core-js-compat": "^3.31.0", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.38.1", "semver": "^6.3.1" }, "engines": { @@ -1902,6 +1781,56 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-env/node_modules/resolve": { + "version": "1.22.8", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", "license": "ISC", @@ -1956,10 +1885,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "license": "MIT" - }, "node_modules/@babel/runtime": { "version": "7.23.9", "license": "MIT", @@ -1971,29 +1896,26 @@ } }, "node_modules/@babel/template": { - "version": "7.23.9", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.9", + "version": "7.25.7", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2009,11 +1931,11 @@ } }, "node_modules/@babel/types": { - "version": "7.23.9", + "version": "7.25.8", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2790,30 +2712,6 @@ "sparqlalgebrajs": "^4.2.0" } }, - "node_modules/@comunica/actor-query-operation-sparql-endpoint/node_modules/fetch-sparql-endpoint": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "@smessie/readable-web-to-node-stream": "^3.0.3", - "@types/readable-stream": "^2.3.11", - "@types/sparqljs": "^3.1.3", - "abort-controller": "^3.0.0", - "cross-fetch": "^3.0.6", - "is-stream": "^2.0.0", - "minimist": "^1.2.0", - "n3": "^1.6.3", - "rdf-string": "^1.6.0", - "sparqljs": "^3.1.2", - "sparqljson-parse": "^2.2.0", - "sparqlxml-parse": "^2.1.1", - "stream-to-string": "^1.1.0" - }, - "bin": { - "fetch-sparql-endpoint": "bin/fetch-sparql-endpoint.js" - } - }, "node_modules/@comunica/actor-query-operation-union": { "version": "2.10.1", "dev": true, @@ -4110,30 +4008,6 @@ "sparqlalgebrajs": "^4.2.0" } }, - "node_modules/@comunica/actor-rdf-resolve-hypermedia-sparql/node_modules/fetch-sparql-endpoint": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "@smessie/readable-web-to-node-stream": "^3.0.3", - "@types/readable-stream": "^2.3.11", - "@types/sparqljs": "^3.1.3", - "abort-controller": "^3.0.0", - "cross-fetch": "^3.0.6", - "is-stream": "^2.0.0", - "minimist": "^1.2.0", - "n3": "^1.6.3", - "rdf-string": "^1.6.0", - "sparqljs": "^3.1.2", - "sparqljson-parse": "^2.2.0", - "sparqlxml-parse": "^2.1.1", - "stream-to-string": "^1.1.0" - }, - "bin": { - "fetch-sparql-endpoint": "bin/fetch-sparql-endpoint.js" - } - }, "node_modules/@comunica/actor-rdf-resolve-hypermedia-sparql/node_modules/lru-cache": { "version": "10.2.0", "dev": true, @@ -4525,30 +4399,6 @@ "stream-to-string": "^1.2.0" } }, - "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/fetch-sparql-endpoint": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "@smessie/readable-web-to-node-stream": "^3.0.3", - "@types/readable-stream": "^2.3.11", - "@types/sparqljs": "^3.1.3", - "abort-controller": "^3.0.0", - "cross-fetch": "^3.0.6", - "is-stream": "^2.0.0", - "minimist": "^1.2.0", - "n3": "^1.6.3", - "rdf-string": "^1.6.0", - "sparqljs": "^3.1.2", - "sparqljson-parse": "^2.2.0", - "sparqlxml-parse": "^2.1.1", - "stream-to-string": "^1.1.0" - }, - "bin": { - "fetch-sparql-endpoint": "bin/fetch-sparql-endpoint.js" - } - }, "node_modules/@comunica/actor-rdf-update-quads-hypermedia": { "version": "2.10.2", "dev": true, @@ -5684,14 +5534,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@fastify/busboy": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, "node_modules/@gar/promisify": { "version": "1.1.3", "dev": true, @@ -5784,18 +5626,6 @@ "uuid": "^9.0.1" } }, - "node_modules/@inrupt/oidc-client-ext/node_modules/@inrupt/solid-client-authn-core": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "events": "^3.3.0", - "jose": "^5.1.3", - "uuid": "^9.0.1" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0" - } - }, "node_modules/@inrupt/oidc-client-ext/node_modules/jose": { "version": "5.2.2", "license": "MIT", @@ -5824,18 +5654,6 @@ "uuid": "^9.0.1" } }, - "node_modules/@inrupt/solid-client-authn-browser/node_modules/@inrupt/solid-client-authn-core": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "events": "^3.3.0", - "jose": "^5.1.3", - "uuid": "^9.0.1" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0" - } - }, "node_modules/@inrupt/solid-client-authn-browser/node_modules/jose": { "version": "5.2.2", "license": "MIT", @@ -5844,29 +5662,33 @@ } }, "node_modules/@inrupt/solid-client-authn-core": { - "version": "1.17.5", - "dev": true, + "version": "2.2.6", "license": "MIT", "dependencies": { - "@inrupt/universal-fetch": "^1.0.1", "events": "^3.3.0", - "jose": "^4.15.4", - "uuid": "^9.0.1" + "jose": "^5.1.3", + "uuid": "^10.0.0" }, "engines": { - "node": "^16.0.0 || ^18.0.0 || ^20.0.0" + "node": "^18.0.0 || ^20.0.0 || ^22.0.0" } }, - "node_modules/@inrupt/universal-fetch": { - "version": "1.0.3", - "dev": true, + "node_modules/@inrupt/solid-client-authn-core/node_modules/jose": { + "version": "5.9.4", "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.7", - "undici": "^5.19.1" - }, - "engines": { - "node": "^14.17.0 || ^16.0.0 || ^18.0.0 || ^20.0.0" + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/@inrupt/solid-client-authn-core/node_modules/uuid": { + "version": "10.0.0", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, "node_modules/@ioredis/commands": { @@ -6308,12 +6130,12 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", + "version": "0.3.5", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -6327,7 +6149,7 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", + "version": "1.2.1", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -6346,7 +6168,7 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", + "version": "0.3.25", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -6354,16 +6176,36 @@ } }, "node_modules/@koa/cors": { - "version": "3.4.3", + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@koa/router": { + "version": "12.0.2", "dev": true, "license": "MIT", "dependencies": { - "vary": "^1.1.2" + "debug": "^4.3.4", + "http-errors": "^2.0.0", + "koa-compose": "^4.1.0", + "methods": "^1.1.2", + "path-to-regexp": "^6.3.0" }, "engines": { - "node": ">= 8.0.0" + "node": ">= 12" } }, + "node_modules/@koa/router/node_modules/path-to-regexp": { + "version": "6.3.0", + "dev": true, + "license": "MIT" + }, "node_modules/@ldo/cli": { "resolved": "packages/cli", "link": true @@ -7619,11 +7461,11 @@ "license": "MIT" }, "node_modules/@sindresorhus/is": { - "version": "4.6.0", + "version": "5.6.0", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sindresorhus/is?sponsor=1" @@ -7742,88 +7584,139 @@ } }, "node_modules/@solid/community-server": { - "version": "6.1.0", + "version": "7.1.3", "dev": true, "license": "MIT", "dependencies": { - "@comunica/context-entries": "^2.6.8", - "@comunica/query-sparql": "^2.6.9", + "@comunica/context-entries": "^2.8.2", + "@comunica/query-sparql": "^2.9.0", "@rdfjs/types": "^1.1.0", "@solid/access-control-policy": "^0.1.3", - "@solid/access-token-verifier": "^2.0.5", + "@solid/access-token-verifier": "^2.1.0", "@types/async-lock": "^1.4.0", - "@types/bcryptjs": "^2.4.2", - "@types/cors": "^2.8.12", - "@types/ejs": "^3.1.2", - "@types/end-of-stream": "^1.4.1", - "@types/fs-extra": "^11.0.1", + "@types/bcryptjs": "^2.4.4", + "@types/cookie": "^0.5.2", + "@types/cors": "^2.8.14", + "@types/ejs": "^3.1.3", + "@types/end-of-stream": "^1.4.2", + "@types/fs-extra": "^11.0.2", "@types/lodash.orderby": "^4.6.7", - "@types/marked": "^4.0.8", - "@types/mime-types": "^2.1.1", - "@types/n3": "^1.10.4", - "@types/node": "^14.18.43", - "@types/nodemailer": "^6.4.7", - "@types/oidc-provider": "^7.11.1", + "@types/mime-types": "^2.1.2", + "@types/n3": "^1.16.3", + "@types/node": "^18.18.4", + "@types/nodemailer": "^6.4.11", + "@types/oidc-provider": "^8.4.0", "@types/proper-lockfile": "^4.1.2", "@types/pump": "^1.1.1", "@types/punycode": "^2.1.0", - "@types/rdf-validate-shacl": "^0.4.1", - "@types/sparqljs": "^3.1.4", + "@types/rdf-validate-shacl": "^0.4.4", + "@types/sparqljs": "^3.1.6", "@types/url-join": "^4.0.1", - "@types/uuid": "^9.0.1", - "@types/ws": "^8.5.4", - "@types/yargs": "^17.0.24", + "@types/uuid": "^9.0.5", + "@types/ws": "^8.5.7", + "@types/yargs": "^17.0.28", "arrayify-stream": "^2.0.1", "async-lock": "^1.4.0", "bcryptjs": "^2.4.3", - "componentsjs": "^5.3.2", + "componentsjs": "^5.4.2", + "cookie": "^0.7.0", "cors": "^2.8.5", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "ejs": "^3.1.9", "end-of-stream": "^1.4.4", "escape-string-regexp": "^4.0.0", - "fetch-sparql-endpoint": "^3.2.1", + "fetch-sparql-endpoint": "^4.1.0", "fs-extra": "^11.1.1", - "handlebars": "^4.7.7", + "handlebars": "^4.7.8", "ioredis": "^5.3.2", "iso8601-duration": "^2.1.1", - "jose": "^4.14.1", - "jsonld-context-parser": "^2.3.0", + "jose": "^4.15.2", + "jsonld-context-parser": "^2.3.2", "lodash.orderby": "^4.6.0", - "marked": "^4.3.0", + "marked": "^9.1.0", "mime-types": "^2.1.35", - "n3": "^1.16.4", - "nodemailer": "^6.9.1", - "oidc-provider": "7.10.6", + "n3": "^1.17.1", + "nodemailer": "^6.9.9", + "oidc-provider": "^8.4.0", "proper-lockfile": "^4.1.2", "pump": "^3.0.0", - "punycode": "^2.1.1", - "rdf-dereference": "^2.1.0", + "punycode": "^2.3.0", + "rdf-dereference": "^2.2.0", "rdf-parse": "^2.3.2", "rdf-serialize": "^2.2.2", "rdf-string": "^1.6.3", - "rdf-terms": "^1.9.1", + "rdf-terms": "^1.11.0", "rdf-validate-shacl": "^0.4.5", - "sparqlalgebrajs": "^4.0.5", - "sparqljs": "^3.6.2", + "sparqlalgebrajs": "^4.3.0", + "sparqljs": "^3.7.1", "url-join": "^4.0.1", - "uuid": "^9.0.0", - "winston": "^3.8.2", + "uuid": "^9.0.1", + "winston": "^3.11.0", "winston-transport": "^4.5.0", - "ws": "^8.13.0", - "yargs": "^17.7.1" + "ws": "^8.14.2", + "yargs": "^17.7.2", + "yup": "^1.3.2" }, "bin": { "community-solid-server": "bin/server.js" }, "engines": { - "node": ">=14.14" + "node": ">=18.0" } }, "node_modules/@solid/community-server/node_modules/@types/node": { - "version": "14.18.63", + "version": "18.19.56", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@solid/community-server/node_modules/cookie": { + "version": "0.7.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@solid/community-server/node_modules/cross-fetch": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/@solid/community-server/node_modules/marked": { + "version": "9.1.6", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 16" + } + }, + "node_modules/@solid/community-server/node_modules/node-fetch": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } }, "node_modules/@solid/community-server/node_modules/yargs": { "version": "17.7.2", @@ -8092,14 +7985,14 @@ } }, "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", + "version": "5.0.1", "dev": true, "license": "MIT", "dependencies": { - "defer-to-connect": "^2.0.0" + "defer-to-connect": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=14.16" } }, "node_modules/@testing-library/dom": { @@ -8311,17 +8204,6 @@ "@types/node": "*" } }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, "node_modules/@types/child-process-promise": { "version": "2.2.6", "dev": true, @@ -8366,6 +8248,11 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/cookie": { + "version": "0.5.4", + "dev": true, + "license": "MIT" + }, "node_modules/@types/cookies": { "version": "0.9.0", "dev": true, @@ -8574,14 +8461,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/koa": { "version": "2.15.0", "dev": true, @@ -8618,11 +8497,6 @@ "@types/lodash": "*" } }, - "node_modules/@types/marked": { - "version": "4.3.2", - "dev": true, - "license": "MIT" - }, "node_modules/@types/mime": { "version": "1.3.5", "license": "MIT" @@ -8679,11 +8553,12 @@ "license": "MIT" }, "node_modules/@types/oidc-provider": { - "version": "7.14.0", + "version": "8.5.2", "dev": true, "license": "MIT", "dependencies": { - "@types/koa": "*" + "@types/koa": "*", + "@types/node": "*" } }, "node_modules/@types/parse-json": { @@ -8798,14 +8673,6 @@ "@types/node": "*" } }, - "node_modules/@types/responselike": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/retry": { "version": "0.12.5", "dev": true, @@ -10166,17 +10033,46 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", + "version": "0.4.11", "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", + "@babel/helper-define-polyfill-provider": "^0.6.2", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/resolve": { + "version": "1.22.8", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { "version": "6.3.1", "license": "ISC", @@ -10381,20 +10277,6 @@ "ms": "2.0.0" } }, - "node_modules/body-parser/node_modules/http-errors": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "license": "MIT" @@ -10412,13 +10294,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/body-parser/node_modules/statuses": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/bonjour-service": { "version": "1.2.1", "license": "MIT", @@ -10453,7 +10328,7 @@ "license": "BSD-2-Clause" }, "node_modules/browserslist": { - "version": "4.23.0", + "version": "4.24.2", "funding": [ { "type": "opencollective", @@ -10470,10 +10345,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -10638,39 +10513,47 @@ } }, "node_modules/cacheable-lookup": { - "version": "6.1.0", + "version": "7.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=10.6.0" + "node": ">=14.16" } }, "node_modules/cacheable-request": { - "version": "7.0.4", + "version": "10.2.14", "dev": true, "license": "MIT", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.16" } }, "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", + "version": "6.0.1", "dev": true, "license": "MIT", - "dependencies": { - "pump": "^3.0.0" + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/normalize-url": { + "version": "8.0.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10749,7 +10632,7 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001591", + "version": "1.0.30001669", "funding": [ { "type": "opencollective", @@ -11046,17 +10929,6 @@ "node": ">=0.10.0" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/clownface": { "version": "1.5.1", "dev": true, @@ -11626,10 +11498,10 @@ } }, "node_modules/core-js-compat": { - "version": "3.36.0", + "version": "3.38.1", "license": "MIT", "dependencies": { - "browserslist": "^4.22.3" + "browserslist": "^4.23.3" }, "funding": { "type": "opencollective", @@ -11735,6 +11607,23 @@ "devOptional": true, "license": "MIT" }, + "node_modules/cross-env": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, "node_modules/cross-fetch": { "version": "3.1.8", "license": "MIT", @@ -12733,7 +12622,7 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.681", + "version": "1.5.42", "license": "ISC" }, "node_modules/emittery": { @@ -13023,7 +12912,7 @@ } }, "node_modules/escalade": { - "version": "3.1.2", + "version": "3.2.0", "license": "MIT", "engines": { "node": ">=6" @@ -14018,6 +13907,17 @@ "node": ">=0.10.0" } }, + "node_modules/eta": { + "version": "3.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, "node_modules/etag": { "version": "1.8.1", "license": "MIT", @@ -14175,20 +14075,6 @@ "ms": "2.0.0" } }, - "node_modules/express/node_modules/http-errors": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "license": "MIT" @@ -14321,11 +14207,12 @@ } }, "node_modules/fetch-sparql-endpoint": { - "version": "3.3.3", + "version": "4.2.1", "dev": true, "license": "MIT", "dependencies": { "@rdfjs/types": "*", + "@smessie/readable-web-to-node-stream": "^3.0.3", "@types/readable-stream": "^2.3.11", "@types/sparqljs": "^3.1.3", "abort-controller": "^3.0.0", @@ -14334,7 +14221,6 @@ "minimist": "^1.2.0", "n3": "^1.6.3", "rdf-string": "^1.6.0", - "readable-web-to-node-stream": "^3.0.2", "sparqljs": "^3.1.2", "sparqljson-parse": "^2.2.0", "sparqlxml-parse": "^2.1.1", @@ -14707,6 +14593,14 @@ "node": ">= 6" } }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.17" + } + }, "node_modules/forwarded": { "version": "0.2.0", "license": "MIT", @@ -15148,35 +15042,38 @@ } }, "node_modules/got": { - "version": "11.8.6", + "version": "13.0.0", "dev": true, "license": "MIT", "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" }, "engines": { - "node": ">=10.19.0" + "node": ">=16" }, "funding": { "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/got/node_modules/cacheable-lookup": { - "version": "5.0.4", + "node_modules/got/node_modules/get-stream": { + "version": "6.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=10.6.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/graceful-fs": { @@ -15515,18 +15412,41 @@ "dev": true, "license": "MIT", "dependencies": { - "deep-equal": "~1.0.1", - "http-errors": "~1.8.0" + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-assert/node_modules/deep-equal": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/http-assert/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-assert/node_modules/http-errors": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, - "node_modules/http-assert/node_modules/deep-equal": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, "node_modules/http-basic": { "version": "8.1.3", "license": "MIT", @@ -15591,26 +15511,24 @@ "license": "MIT" }, "node_modules/http-errors": { - "version": "1.8.1", - "dev": true, + "version": "2.0.0", "license": "MIT", "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/http-errors/node_modules/depd": { - "version": "1.1.2", - "dev": true, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/http-link-header": { @@ -15693,12 +15611,12 @@ "license": "MIT" }, "node_modules/http2-wrapper": { - "version": "1.0.3", + "version": "2.2.1", "dev": true, "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "resolve-alpn": "^1.2.0" }, "engines": { "node": ">=10.19.0" @@ -17792,7 +17710,7 @@ } }, "node_modules/jose": { - "version": "4.15.4", + "version": "4.15.9", "dev": true, "license": "MIT", "funding": { @@ -17942,13 +17860,13 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", + "version": "3.0.2", "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -18275,7 +18193,7 @@ } }, "node_modules/koa": { - "version": "2.15.0", + "version": "2.15.3", "dev": true, "license": "MIT", "dependencies": { @@ -18324,6 +18242,29 @@ "node": ">= 10" } }, + "node_modules/koa/node_modules/http-errors": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa/node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/kuler": { "version": "2.0.0", "dev": true, @@ -18935,11 +18876,14 @@ } }, "node_modules/lowercase-keys": { - "version": "2.0.0", + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lru-cache": { @@ -19383,11 +19327,14 @@ } }, "node_modules/mimic-response": { - "version": "1.0.1", + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/min-indent": { @@ -19858,7 +19805,7 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.14", + "version": "2.0.18", "license": "MIT" }, "node_modules/node-version": { @@ -20541,8 +20488,7 @@ } }, "node_modules/object-hash": { - "version": "2.2.0", - "dev": true, + "version": "3.0.0", "license": "MIT", "engines": { "node": ">= 6" @@ -20679,53 +20625,80 @@ "license": "MIT" }, "node_modules/oidc-provider": { - "version": "7.10.6", + "version": "8.5.1", "dev": true, "license": "MIT", "dependencies": { - "@koa/cors": "^3.1.0", - "cacheable-lookup": "^6.0.1", - "debug": "^4.3.2", - "ejs": "^3.1.6", - "got": "^11.8.2", - "jose": "^4.1.4", + "@koa/cors": "^5.0.0", + "@koa/router": "^12.0.1", + "debug": "^4.3.5", + "eta": "^3.4.0", + "got": "^13.0.0", + "jose": "^5.6.2", "jsesc": "^3.0.2", - "koa": "^2.13.3", - "koa-compose": "^4.1.0", - "nanoid": "^3.1.28", - "object-hash": "^2.2.0", - "oidc-token-hash": "^5.0.1", - "paseto2": "npm:paseto@^2.1.3", - "quick-lru": "^5.1.1", - "raw-body": "^2.4.1" + "koa": "^2.15.3", + "nanoid": "^5.0.7", + "object-hash": "^3.0.0", + "oidc-token-hash": "^5.0.3", + "quick-lru": "^7.0.0", + "raw-body": "^2.5.2" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/oidc-provider/node_modules/debug": { + "version": "4.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" }, "engines": { - "node": "^12.19.0 || ^14.15.0 || ^16.13.0" + "node": ">=6.0" }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/oidc-provider/node_modules/jose": { + "version": "5.9.4", + "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" - }, - "optionalDependencies": { - "paseto3": "npm:paseto@^3.0.0" } }, - "node_modules/oidc-provider/node_modules/jsesc": { - "version": "3.0.2", + "node_modules/oidc-provider/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/oidc-provider/node_modules/nanoid": { + "version": "5.0.7", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "bin": { - "jsesc": "bin/jsesc" + "nanoid": "bin/nanoid.js" }, "engines": { - "node": ">=6" + "node": "^18 || >=20" } }, "node_modules/oidc-provider/node_modules/quick-lru": { - "version": "5.1.1", + "version": "7.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -20849,11 +20822,11 @@ } }, "node_modules/p-cancelable": { - "version": "2.1.1", + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12.20" } }, "node_modules/p-finally": { @@ -21292,31 +21265,6 @@ "tslib": "^2.0.3" } }, - "node_modules/paseto2": { - "name": "paseto", - "version": "2.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.19.0 || >=14.15.0" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/paseto3": { - "name": "paseto", - "version": "3.1.4", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/path-exists": { "version": "4.0.0", "license": "MIT", @@ -21397,7 +21345,7 @@ "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", + "version": "1.1.1", "license": "ISC" }, "node_modules/picomatch": { @@ -22858,6 +22806,11 @@ "signal-exit": "^3.0.2" } }, + "node_modules/property-expr": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, "node_modules/protocols": { "version": "2.0.1", "dev": true, @@ -22909,7 +22862,7 @@ "license": "MIT" }, "node_modules/pump": { - "version": "3.0.0", + "version": "3.0.2", "dev": true, "license": "MIT", "dependencies": { @@ -23009,27 +22962,6 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/http-errors": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/statuses": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/rdf-canonize": { "version": "3.4.0", "dev": true, @@ -23994,21 +23926,6 @@ "dev": true, "license": "MIT" }, - "node_modules/readable-web-to-node-stream": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, "node_modules/readdirp": { "version": "3.6.0", "license": "MIT", @@ -24102,7 +24019,7 @@ "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", + "version": "10.2.0", "license": "MIT", "dependencies": { "regenerate": "^1.4.2" @@ -24143,13 +24060,13 @@ } }, "node_modules/regexpu-core": { - "version": "5.3.2", + "version": "6.1.1", "license": "MIT", "dependencies": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, @@ -24157,22 +24074,20 @@ "node": ">=4" } }, + "node_modules/regjsgen": { + "version": "0.8.0", + "license": "MIT" + }, "node_modules/regjsparser": { - "version": "0.9.1", + "version": "0.11.1", "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~0.5.0" + "jsesc": "~3.0.2" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "bin": { - "jsesc": "bin/jsesc" - } - }, "node_modules/relateurl": { "version": "0.2.7", "license": "MIT", @@ -24375,11 +24290,14 @@ } }, "node_modules/responselike": { - "version": "2.0.1", + "version": "3.0.0", "dev": true, "license": "MIT", "dependencies": { - "lowercase-keys": "^2.0.0" + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -24700,20 +24618,6 @@ "version": "2.0.0", "license": "MIT" }, - "node_modules/send/node_modules/http-errors": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "license": "MIT" @@ -26338,13 +26242,6 @@ "node": ">=14.0.0" } }, - "node_modules/tailwindcss/node_modules/object-hash": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/tailwindcss/node_modules/resolve": { "version": "1.22.8", "license": "MIT", @@ -26707,6 +26604,11 @@ "version": "1.1.0", "license": "MIT" }, + "node_modules/tiny-case": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, "node_modules/tmp": { "version": "0.2.1", "dev": true, @@ -26746,6 +26648,11 @@ "node": ">=0.6" } }, + "node_modules/toposort": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, "node_modules/tough-cookie": { "version": "4.1.3", "license": "BSD-3-Clause", @@ -27341,23 +27248,12 @@ "version": "1.12.1", "license": "MIT" }, - "node_modules/undici": { - "version": "5.28.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, "node_modules/undici-types": { "version": "5.26.5", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", + "version": "2.0.1", "license": "MIT", "engines": { "node": ">=4" @@ -27375,7 +27271,7 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", + "version": "2.2.0", "license": "MIT", "engines": { "node": ">=4" @@ -27461,7 +27357,7 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", + "version": "1.1.1", "funding": [ { "type": "opencollective", @@ -27478,8 +27374,8 @@ ], "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -28696,7 +28592,7 @@ } }, "node_modules/ylru": { - "version": "1.3.2", + "version": "1.4.0", "dev": true, "license": "MIT", "engines": { @@ -28721,12 +28617,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yup": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" + } + }, + "node_modules/yup/node_modules/type-fest": { + "version": "2.19.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/cli": { "name": "@ldo/cli", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.28", "license": "MIT", "dependencies": { - "@ldo/schema-converter-shex": "^0.0.1-alpha.23", + "@ldo/schema-converter-shex": "^0.0.1-alpha.24", "@shexjs/parser": "^1.0.0-alpha.24", "child-process-promise": "^2.2.1", "commander": "^9.3.0", @@ -28827,10 +28745,10 @@ }, "packages/dataset": { "name": "@ldo/dataset", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.24", "license": "MIT", "dependencies": { - "@ldo/rdf-utils": "^0.0.1-alpha.23", + "@ldo/rdf-utils": "^0.0.1-alpha.24", "@rdfjs/dataset": "^1.1.0", "buffer": "^6.0.3", "readable-stream": "^4.2.0" @@ -28970,10 +28888,10 @@ }, "packages/demo-react": { "name": "@ldo/demo-react", - "version": "0.0.1-alpha.19", + "version": "0.0.1-alpha.28", "dependencies": { "@inrupt/solid-client-authn-browser": "^2.0.0", - "@ldo/solid-react": "^0.0.1-alpha.19", + "@ldo/solid-react": "^0.0.1-alpha.28", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.15.0", @@ -28982,7 +28900,7 @@ }, "devDependencies": { "@craco/craco": "^7.1.0", - "@ldo/cli": "^0.0.1-alpha.19", + "@ldo/cli": "^0.0.1-alpha.28", "@types/jsonld": "^1.5.9", "@types/react": "^18.2.21", "@types/shexj": "^2.1.4", @@ -29161,11 +29079,11 @@ }, "packages/jsonld-dataset-proxy": { "name": "@ldo/jsonld-dataset-proxy", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.24", "license": "MIT", "dependencies": { - "@ldo/rdf-utils": "^0.0.1-alpha.23", - "@ldo/subscribable-dataset": "^0.0.1-alpha.23", + "@ldo/rdf-utils": "^0.0.1-alpha.24", + "@ldo/subscribable-dataset": "^0.0.1-alpha.24", "@rdfjs/data-model": "^1.2.0", "@rdfjs/dataset": "^1.1.0", "jsonld2graphobject": "^0.0.4" @@ -29241,18 +29159,18 @@ }, "packages/ldo": { "name": "@ldo/ldo", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.28", "license": "MIT", "dependencies": { - "@ldo/dataset": "^0.0.1-alpha.23", - "@ldo/jsonld-dataset-proxy": "^0.0.1-alpha.23", - "@ldo/subscribable-dataset": "^0.0.1-alpha.23", + "@ldo/dataset": "^0.0.1-alpha.24", + "@ldo/jsonld-dataset-proxy": "^0.0.1-alpha.24", + "@ldo/subscribable-dataset": "^0.0.1-alpha.24", "@rdfjs/data-model": "^1.2.0", "buffer": "^6.0.3", "readable-stream": "^4.3.0" }, "devDependencies": { - "@ldo/rdf-utils": "^0.0.1-alpha.23", + "@ldo/rdf-utils": "^0.0.1-alpha.24", "@rdfjs/types": "^1.0.1", "@types/jest": "^27.0.3", "@types/jsonld": "^1.5.6", @@ -29360,7 +29278,7 @@ }, "packages/rdf-utils": { "name": "@ldo/rdf-utils", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.24", "license": "MIT", "dependencies": { "@rdfjs/data-model": "^1.2.0", @@ -29430,10 +29348,10 @@ }, "packages/schema-converter-shex": { "name": "@ldo/schema-converter-shex", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.24", "license": "MIT", "dependencies": { - "@ldo/traverser-shexj": "^0.0.1-alpha.23", + "@ldo/traverser-shexj": "^0.0.1-alpha.24", "dts-dom": "^3.6.0", "jsonld2graphobject": "^0.0.5" }, @@ -29542,22 +29460,23 @@ }, "packages/solid": { "name": "@ldo/solid", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.28", "license": "MIT", "dependencies": { - "@ldo/dataset": "^0.0.1-alpha.23", - "@ldo/ldo": "^0.0.1-alpha.23", - "@ldo/rdf-utils": "^0.0.1-alpha.23", + "@ldo/dataset": "^0.0.1-alpha.24", + "@ldo/ldo": "^0.0.1-alpha.28", + "@ldo/rdf-utils": "^0.0.1-alpha.24", "cross-fetch": "^3.1.6", "http-link-header": "^1.1.1" }, "devDependencies": { - "@inrupt/solid-client-authn-core": "^1.17.1", - "@ldo/cli": "^0.0.1-alpha.23", + "@inrupt/solid-client-authn-core": "^2.2.6", + "@ldo/cli": "^0.0.1-alpha.28", "@rdfjs/data-model": "^1.2.0", "@rdfjs/types": "^1.0.1", - "@solid/community-server": "^6.0.2", + "@solid/community-server": "^7.1.3", "@types/jest": "^27.0.3", + "cross-env": "^7.0.3", "dotenv": "^16.3.1", "jest-rdf": "^1.8.0", "ts-jest": "^27.1.2", @@ -29569,20 +29488,20 @@ }, "packages/solid-react": { "name": "@ldo/solid-react", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.28", "license": "MIT", "dependencies": { "@inrupt/solid-client-authn-browser": "^2.0.0", - "@ldo/dataset": "^0.0.1-alpha.23", - "@ldo/jsonld-dataset-proxy": "^0.0.1-alpha.23", - "@ldo/ldo": "^0.0.1-alpha.23", - "@ldo/solid": "^0.0.1-alpha.23", - "@ldo/subscribable-dataset": "^0.0.1-alpha.23", + "@ldo/dataset": "^0.0.1-alpha.24", + "@ldo/jsonld-dataset-proxy": "^0.0.1-alpha.24", + "@ldo/ldo": "^0.0.1-alpha.28", + "@ldo/solid": "^0.0.1-alpha.28", + "@ldo/subscribable-dataset": "^0.0.1-alpha.24", "@rdfjs/data-model": "^1.2.0", "cross-fetch": "^3.1.6" }, "devDependencies": { - "@ldo/rdf-utils": "^0.0.1-alpha.23", + "@ldo/rdf-utils": "^0.0.1-alpha.24", "@rdfjs/types": "^1.0.1", "@testing-library/react": "^14.1.2", "@types/jest": "^27.0.3", @@ -29704,11 +29623,11 @@ }, "packages/subscribable-dataset": { "name": "@ldo/subscribable-dataset", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.24", "license": "MIT", "dependencies": { - "@ldo/dataset": "^0.0.1-alpha.23", - "@ldo/rdf-utils": "^0.0.1-alpha.23" + "@ldo/dataset": "^0.0.1-alpha.24", + "@ldo/rdf-utils": "^0.0.1-alpha.24" }, "devDependencies": { "@rdfjs/data-model": "^1.2.0", @@ -29809,10 +29728,10 @@ }, "packages/traverser-shexj": { "name": "@ldo/traverser-shexj", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.24", "license": "MIT", "dependencies": { - "@ldo/type-traverser": "^0.0.1-alpha.23" + "@ldo/type-traverser": "^0.0.1-alpha.24" }, "devDependencies": { "@types/jest": "^27.0.3", @@ -29878,7 +29797,7 @@ }, "packages/type-traverser": { "name": "@ldo/type-traverser", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.24", "license": "MIT", "dependencies": { "uuid": "^8.3.2" diff --git a/packages/cli/package.json b/packages/cli/package.json index 763ccbf..80759b4 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/cli", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.28", "description": "A Command Line Interface for Linked Data Objects", "main": "./dist/index.js", "bin": { @@ -19,7 +19,8 @@ "test": "jest --coverage", "test:watch": "jest --watch", "prepublishOnly": "npm run test && npm run build", - "lint": "eslint src/** --fix --no-error-on-unmatched-pattern" + "lint": "eslint src/** --fix --no-error-on-unmatched-pattern", + "build:ldo": "./dist/index.js build --input test/.shapes --output test/.ldo" }, "repository": { "type": "git", @@ -43,7 +44,7 @@ "ts-jest": "^27.0.7" }, "dependencies": { - "@ldo/schema-converter-shex": "^0.0.1-alpha.23", + "@ldo/schema-converter-shex": "^0.0.1-alpha.24", "@shexjs/parser": "^1.0.0-alpha.24", "child-process-promise": "^2.2.1", "commander": "^9.3.0", @@ -59,5 +60,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "d2364cd2f8da5f0b673b1202d29df5b7c071a17c" + "gitHead": "c63f055aab22155b60a5fdee4172979b9c287dfa" } diff --git a/packages/cli/src/build.ts b/packages/cli/src/build.ts index 563fc7c..0aebb7f 100644 --- a/packages/cli/src/build.ts +++ b/packages/cli/src/build.ts @@ -38,9 +38,19 @@ export async function build(options: BuildOptions) { "utf8", ); // Convert to ShexJ - const schema: Schema = parser - .construct("https://ldo.js.org/") - .parse(shexC); + let schema: Schema; + try { + schema = parser.construct("https://ldo.js.org/").parse(shexC); + } catch (err) { + const errMessage = + err instanceof Error + ? err.message + : typeof err === "string" + ? err + : "Unknown Error"; + console.error(`Error processing ${file.name}: ${errMessage}`); + return; + } // Convert the content to types const [typings, context] = await schemaConverterShex(schema); await Promise.all( diff --git a/packages/cli/test/.shapes/foafProfile.shex b/packages/cli/test/.shapes/foafProfile.shex new file mode 100644 index 0000000..95c472b --- /dev/null +++ b/packages/cli/test/.shapes/foafProfile.shex @@ -0,0 +1,19 @@ +# This shape is provided by default as an example +# You can create your own shape to fit your needs using ShEx (https://shex.io) +# Also check out https://shaperepo.com for examples of more shapes. + +PREFIX ex: +PREFIX foaf: +PREFIX rdfs: +PREFIX xsd: + +ex:FoafProfile EXTRA a { + a [ foaf:Person ] + // rdfs:comment "Defines the node as a Person (from foaf)" ; + foaf:name xsd:string ? + // rdfs:comment "Define a person's name." ; + foaf:img xsd:string ? + // rdfs:comment "Photo link but in string form" + foaf:knows @ex:FoafProfile * + // rdfs:comment "A list of WebIds for all the people this user knows." ; +} diff --git a/packages/dataset/example/loadDataExample.ts b/packages/dataset/example/loadDataExample.ts index a3fccf0..6d8b50f 100644 --- a/packages/dataset/example/loadDataExample.ts +++ b/packages/dataset/example/loadDataExample.ts @@ -34,7 +34,7 @@ async function run(): Promise { const jsonLdDataset = await serializedToDataset(JSON.stringify(jsonLdData), { baseIRI: "https://jackson.solidcommunity.net/IndividualChats/jackson.solidcommunity.net/index.ttl#", - format: "application/json-ld", + format: "application/ld+json", }); // Returns true because the input data describes the same triple. console.log(turtleDataset.equals(jsonLdDataset)); diff --git a/packages/dataset/package.json b/packages/dataset/package.json index ae981b1..1d25f2a 100644 --- a/packages/dataset/package.json +++ b/packages/dataset/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/dataset", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.24", "description": "An RDFJS dataset implementation", "main": "dist/index.js", "scripts": { @@ -34,7 +34,7 @@ "ts-node": "^9.1.1" }, "dependencies": { - "@ldo/rdf-utils": "^0.0.1-alpha.23", + "@ldo/rdf-utils": "^0.0.1-alpha.24", "@rdfjs/dataset": "^1.1.0", "buffer": "^6.0.3", "readable-stream": "^4.2.0" diff --git a/packages/dataset/test/createExtendedDatasetFromSerializedInput.test.ts b/packages/dataset/test/createExtendedDatasetFromSerializedInput.test.ts index ef56f4a..2a91f4d 100644 --- a/packages/dataset/test/createExtendedDatasetFromSerializedInput.test.ts +++ b/packages/dataset/test/createExtendedDatasetFromSerializedInput.test.ts @@ -12,7 +12,7 @@ describe("createExtendedDatasetFromSerializedInput", () => { it.skip("creates a dataset with json-ld", async () => { const dataset = await serializedToDataset(JSON.stringify(jsonLdData), { - format: "application/json-ld", + format: "application/ld+json", }); expect(dataset.size).toBe(9); }); @@ -26,7 +26,7 @@ describe("createExtendedDatasetFromSerializedInput", () => { it.skip("Should error when given invalid JSON", async () => { await expect( - serializedToDataset('{ bad" json', { format: "application/json-ld" }), + serializedToDataset('{ bad" json', { format: "application/ld+json" }), ).rejects.toThrow("Unexpected token b in JSON at position 2"); }); }); diff --git a/packages/demo-react/package.json b/packages/demo-react/package.json index 3eaec63..f2dfee2 100644 --- a/packages/demo-react/package.json +++ b/packages/demo-react/package.json @@ -1,9 +1,9 @@ { "name": "@ldo/demo-react", - "version": "0.0.1-alpha.19", + "version": "0.0.1-alpha.28", "dependencies": { "@inrupt/solid-client-authn-browser": "^2.0.0", - "@ldo/solid-react": "^0.0.1-alpha.19", + "@ldo/solid-react": "^0.0.1-alpha.28", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.15.0", @@ -37,13 +37,13 @@ }, "devDependencies": { "@craco/craco": "^7.1.0", - "@ldo/cli": "^0.0.1-alpha.19", + "@ldo/cli": "^0.0.1-alpha.28", "@types/jsonld": "^1.5.9", "@types/react": "^18.2.21", "@types/shexj": "^2.1.4", "tsconfig-paths-webpack-plugin": "^4.1.0" }, - "gitHead": "4548985c0de9b0ec83cf5ee93f2d7c1ca2c1b8d8", + "gitHead": "c63f055aab22155b60a5fdee4172979b9c287dfa", "publishConfig": { "access": "public" } diff --git a/packages/jsonld-dataset-proxy/package.json b/packages/jsonld-dataset-proxy/package.json index 75d680c..c7e3129 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": "0.0.1-alpha.23", + "version": "0.0.1-alpha.24", "description": "", "main": "dist/index.js", "scripts": { @@ -40,8 +40,8 @@ "src" ], "dependencies": { - "@ldo/rdf-utils": "^0.0.1-alpha.23", - "@ldo/subscribable-dataset": "^0.0.1-alpha.23", + "@ldo/rdf-utils": "^0.0.1-alpha.24", + "@ldo/subscribable-dataset": "^0.0.1-alpha.24", "@rdfjs/data-model": "^1.2.0", "@rdfjs/dataset": "^1.1.0", "jsonld2graphobject": "^0.0.4" diff --git a/packages/jsonld-dataset-proxy/src/util/nodeToJsonldRepresentation.ts b/packages/jsonld-dataset-proxy/src/util/nodeToJsonldRepresentation.ts index d1dcd08..62a3093 100644 --- a/packages/jsonld-dataset-proxy/src/util/nodeToJsonldRepresentation.ts +++ b/packages/jsonld-dataset-proxy/src/util/nodeToJsonldRepresentation.ts @@ -34,6 +34,7 @@ export function literalToJsonldRepresentation(literal: Literal) { case "http://www.w3.org/2001/XMLSchema#integer": case "http://www.w3.org/2001/XMLSchema#byte": case "http://www.w3.org/2001/XMLSchema#decimal": + case "http://www.w3.org/2001/XMLSchema#double": case "http://www.w3.org/2001/XMLSchema#int": case "http://www.w3.org/2001/XMLSchema#long": case "http://www.w3.org/2001/XMLSchema#negativeInteger": diff --git a/packages/ldo/package.json b/packages/ldo/package.json index 0220c4a..a2801b7 100644 --- a/packages/ldo/package.json +++ b/packages/ldo/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/ldo", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.28", "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": "^0.0.1-alpha.23", + "@ldo/rdf-utils": "^0.0.1-alpha.24", "@rdfjs/types": "^1.0.1", "@types/jest": "^27.0.3", "@types/jsonld": "^1.5.6", @@ -38,9 +38,9 @@ "typedoc-plugin-markdown": "^3.17.1" }, "dependencies": { - "@ldo/dataset": "^0.0.1-alpha.23", - "@ldo/jsonld-dataset-proxy": "^0.0.1-alpha.23", - "@ldo/subscribable-dataset": "^0.0.1-alpha.23", + "@ldo/dataset": "^0.0.1-alpha.24", + "@ldo/jsonld-dataset-proxy": "^0.0.1-alpha.24", + "@ldo/subscribable-dataset": "^0.0.1-alpha.24", "@rdfjs/data-model": "^1.2.0", "buffer": "^6.0.3", "readable-stream": "^4.3.0" @@ -55,5 +55,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "d2364cd2f8da5f0b673b1202d29df5b7c071a17c" + "gitHead": "c63f055aab22155b60a5fdee4172979b9c287dfa" } diff --git a/packages/ldo/src/parseRdf.ts b/packages/ldo/src/parseRdf.ts index 45925d5..9809436 100644 --- a/packages/ldo/src/parseRdf.ts +++ b/packages/ldo/src/parseRdf.ts @@ -24,7 +24,7 @@ import type { LdoDataset } from "./LdoDataset"; * import { parseRdf } from "ldo"; * * const rawTurtle = "..."; - * const ldoDataset = parseRdf(rawTurtle, { baseIRI: "https://example.com/" }); + * const ldoDataset = await parseRdf(rawTurtle, { baseIRI: "https://example.com/" }); * ``` */ export async function parseRdf( @@ -47,7 +47,7 @@ export async function parseRdf( ldoDatasetFactory, JSON.stringify(data), { - format: "application/json-ld", + format: "application/ld+json", }, ); } diff --git a/packages/rdf-utils/package.json b/packages/rdf-utils/package.json index 408dbe4..745c35f 100644 --- a/packages/rdf-utils/package.json +++ b/packages/rdf-utils/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/rdf-utils", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.24", "description": "Some RDF Utilities to support LDO librariers", "main": "dist/index.js", "scripts": { diff --git a/packages/rdf-utils/src/serializedToQuads.ts b/packages/rdf-utils/src/serializedToQuads.ts index a0b4c0b..8230967 100644 --- a/packages/rdf-utils/src/serializedToQuads.ts +++ b/packages/rdf-utils/src/serializedToQuads.ts @@ -9,7 +9,7 @@ export async function serializedToQuads( options?: ParserOptions, ): Promise { // JSON-LD Parsing - if (options && options.format === "application/json-ld") { + if (options && options.format === "application/ld+json") { throw new Error("Not Implemented"); // return new Promise((resolve, reject) => { // JSON.parse(data); diff --git a/packages/schema-converter-shex/package.json b/packages/schema-converter-shex/package.json index ef51386..f71e73b 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": "0.0.1-alpha.23", + "version": "0.0.1-alpha.24", "description": "", "main": "dist/index.js", "scripts": { @@ -33,7 +33,7 @@ "dist" ], "dependencies": { - "@ldo/traverser-shexj": "^0.0.1-alpha.23", + "@ldo/traverser-shexj": "^0.0.1-alpha.24", "dts-dom": "^3.6.0", "jsonld2graphobject": "^0.0.5" }, diff --git a/packages/solid-react/package.json b/packages/solid-react/package.json index cd07ece..9eac49e 100644 --- a/packages/solid-react/package.json +++ b/packages/solid-react/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/solid-react", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.28", "description": "A React library for LDO and Solid", "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": "^0.0.1-alpha.23", + "@ldo/rdf-utils": "^0.0.1-alpha.24", "@rdfjs/types": "^1.0.1", "@testing-library/react": "^14.1.2", "@types/jest": "^27.0.3", @@ -37,11 +37,11 @@ }, "dependencies": { "@inrupt/solid-client-authn-browser": "^2.0.0", - "@ldo/dataset": "^0.0.1-alpha.23", - "@ldo/jsonld-dataset-proxy": "^0.0.1-alpha.23", - "@ldo/ldo": "^0.0.1-alpha.23", - "@ldo/solid": "^0.0.1-alpha.23", - "@ldo/subscribable-dataset": "^0.0.1-alpha.23", + "@ldo/dataset": "^0.0.1-alpha.24", + "@ldo/jsonld-dataset-proxy": "^0.0.1-alpha.24", + "@ldo/ldo": "^0.0.1-alpha.28", + "@ldo/solid": "^0.0.1-alpha.28", + "@ldo/subscribable-dataset": "^0.0.1-alpha.24", "@rdfjs/data-model": "^1.2.0", "cross-fetch": "^3.1.6" }, @@ -52,5 +52,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "d2364cd2f8da5f0b673b1202d29df5b7c071a17c" + "gitHead": "c63f055aab22155b60a5fdee4172979b9c287dfa" } diff --git a/packages/solid-react/src/BrowserSolidLdoProvider.tsx b/packages/solid-react/src/BrowserSolidLdoProvider.tsx index 8d9d652..6213890 100644 --- a/packages/solid-react/src/BrowserSolidLdoProvider.tsx +++ b/packages/solid-react/src/BrowserSolidLdoProvider.tsx @@ -27,25 +27,31 @@ export const BrowserSolidLdoProvider: FunctionComponent = ({ await handleIncomingRedirect({ restorePreviousSession: true, }); - setSession({ ...getDefaultSession().info }); - window.history.replaceState( - {}, - "", - window.localStorage.getItem(PRE_REDIRECT_URI), - ); - window.localStorage.removeItem(PRE_REDIRECT_URI); + // Set timout to ensure this happens after the redirect + setTimeout(() => { + setSession({ ...getDefaultSession().info }); + window.history.replaceState( + {}, + "", + window.localStorage.getItem(PRE_REDIRECT_URI), + ); + window.localStorage.removeItem(PRE_REDIRECT_URI); - setRanInitialAuthCheck(true); + setRanInitialAuthCheck(true); + }, 0); }, []); const login = useCallback(async (issuer: string, options?: LoginOptions) => { + const cleanUrl = new URL(window.location.href); + cleanUrl.hash = ""; + cleanUrl.search = ""; const fullOptions = { - redirectUrl: window.location.href, + redirectUrl: cleanUrl.toString(), clientName: "Solid App", oidcIssuer: issuer, ...options, }; - window.localStorage.setItem(PRE_REDIRECT_URI, fullOptions.redirectUrl); + window.localStorage.setItem(PRE_REDIRECT_URI, window.location.href); await libraryLogin(fullOptions); setSession({ ...getDefaultSession().info }); }, []); diff --git a/packages/solid-react/test/test-server/configs/components-config/unauthenticatedServer.json b/packages/solid-react/test/test-server/configs/components-config/unauthenticatedServer.json index 56b2a2f..ff01914 100644 --- a/packages/solid-react/test/test-server/configs/components-config/unauthenticatedServer.json +++ b/packages/solid-react/test/test-server/configs/components-config/unauthenticatedServer.json @@ -1,9 +1,8 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^6.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^7.0.0/components/context.jsonld", "import": [ + "css:config/app/init/initialize-intro.json", "css:config/app/main/default.json", - "css:config/app/init/initialize-prefilled-root.json", - "css:config/app/setup/optional.json", "css:config/app/variables/default.json", "css:config/http/handler/default.json", "css:config/http/middleware/default.json", @@ -13,9 +12,9 @@ "css:config/identity/access/public.json", "css:config/identity/email/default.json", "css:config/identity/handler/default.json", + "css:config/identity/oidc/default.json", "css:config/identity/ownership/token.json", "css:config/identity/pod/static.json", - "css:config/identity/registration/enabled.json", "css:config/ldp/authentication/dpop-bearer.json", "css:config/ldp/authorization/webacl.json", "css:config/ldp/handler/default.json", @@ -24,6 +23,7 @@ "css:config/ldp/modes/default.json", "css:config/storage/backend/memory.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", diff --git a/packages/solid-react/test/test-server/configs/solid-css-seed.json b/packages/solid-react/test/test-server/configs/solid-css-seed.json index 0b139ea..5894d0d 100644 --- a/packages/solid-react/test/test-server/configs/solid-css-seed.json +++ b/packages/solid-react/test/test-server/configs/solid-css-seed.json @@ -1,8 +1,9 @@ [ { - "podName": "example", "email": "hello@example.com", "password": "abc123", - "template": "./template" + "pods": [ + { "name": "example" } + ] } ] \ No newline at end of file diff --git a/packages/solid-react/test/test-server/solidServer.helper.ts b/packages/solid-react/test/test-server/solidServer.helper.ts index 3cc66cf..5dd45d8 100644 --- a/packages/solid-react/test/test-server/solidServer.helper.ts +++ b/packages/solid-react/test/test-server/solidServer.helper.ts @@ -12,28 +12,25 @@ export async function createApp(): Promise { } as App; } const appRunner = new AppRunner(); - return appRunner.create( - { + + return appRunner.create({ + loaderProperties: { mainModulePath: resolveModulePath(""), typeChecking: false, }, - path.join( + config: path.join( __dirname, "configs", "components-config", "unauthenticatedServer.json", ), - {}, - { + variableBindings: {}, + shorthand: { port: 3_001, loggingLevel: "off", - seededPodConfigJson: path.join( - __dirname, - "configs", - "solid-css-seed.json", - ), + seedConfig: path.join(__dirname, "configs", "solid-css-seed.json"), }, - ); + }); } export interface ISecretData { diff --git a/packages/solid/babel.config.js b/packages/solid/babel.config.js new file mode 100644 index 0000000..721e8b8 --- /dev/null +++ b/packages/solid/babel.config.js @@ -0,0 +1 @@ +module.exports = { presets: ["@babel/preset-env"] }; diff --git a/packages/solid/jest.config.js b/packages/solid/jest.config.js index 899d6b4..c55a5f7 100644 --- a/packages/solid/jest.config.js +++ b/packages/solid/jest.config.js @@ -4,4 +4,8 @@ module.exports = { ...sharedConfig, rootDir: "./", setupFiles: ["/test/setup-tests.ts"], + transform: { + "^.+\\.(ts|tsx)?$": "ts-jest", + "^.+\\.(js|jsx)$": "babel-jest", + }, }; diff --git a/packages/solid/package.json b/packages/solid/package.json index 548c973..20e8c64 100644 --- a/packages/solid/package.json +++ b/packages/solid/package.json @@ -1,13 +1,13 @@ { "name": "@ldo/solid", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.28", "description": "A library for LDO and Solid", "main": "dist/index.js", "scripts": { "example": "ts-node ./example/example.ts", "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", "build:ldo": "ldo build --input src/.shapes --output src/.ldo", @@ -25,12 +25,13 @@ }, "homepage": "https://github.com/o-development/ldobjects/tree/main/packages/solid#readme", "devDependencies": { - "@inrupt/solid-client-authn-core": "^1.17.1", - "@ldo/cli": "^0.0.1-alpha.23", + "@inrupt/solid-client-authn-core": "^2.2.6", + "@ldo/cli": "^0.0.1-alpha.28", "@rdfjs/data-model": "^1.2.0", "@rdfjs/types": "^1.0.1", - "@solid/community-server": "^6.0.2", + "@solid/community-server": "^7.1.3", "@types/jest": "^27.0.3", + "cross-env": "^7.0.3", "dotenv": "^16.3.1", "jest-rdf": "^1.8.0", "ts-jest": "^27.1.2", @@ -40,9 +41,9 @@ "typedoc-plugin-markdown": "^3.17.1" }, "dependencies": { - "@ldo/dataset": "^0.0.1-alpha.23", - "@ldo/ldo": "^0.0.1-alpha.23", - "@ldo/rdf-utils": "^0.0.1-alpha.23", + "@ldo/dataset": "^0.0.1-alpha.24", + "@ldo/ldo": "^0.0.1-alpha.28", + "@ldo/rdf-utils": "^0.0.1-alpha.24", "cross-fetch": "^3.1.6", "http-link-header": "^1.1.1" }, @@ -53,5 +54,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "d2364cd2f8da5f0b673b1202d29df5b7c071a17c" + "gitHead": "c63f055aab22155b60a5fdee4172979b9c287dfa" } diff --git a/packages/solid/src/.ldo/solid.context.ts b/packages/solid/src/.ldo/solid.context.ts index be97612..8244ade 100644 --- a/packages/solid/src/.ldo/solid.context.ts +++ b/packages/solid/src/.ldo/solid.context.ts @@ -1,4 +1,4 @@ -import type { ContextDefinition } from "jsonld"; +import { ContextDefinition } from "jsonld"; /** * ============================================================================= @@ -15,7 +15,6 @@ export const solidContext: ContextDefinition = { modified: { "@id": "http://purl.org/dc/terms/modified", "@type": "http://www.w3.org/2001/XMLSchema#string", - "@container": "@set", }, contains: { "@id": "http://www.w3.org/ns/ldp#contains", @@ -26,11 +25,14 @@ export const solidContext: ContextDefinition = { mtime: { "@id": "http://www.w3.org/ns/posix/stat#mtime", "@type": "http://www.w3.org/2001/XMLSchema#decimal", - "@container": "@set", }, size: { "@id": "http://www.w3.org/ns/posix/stat#size", "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@type": "@id", "@container": "@set", }, }; diff --git a/packages/solid/src/.ldo/solid.schema.ts b/packages/solid/src/.ldo/solid.schema.ts index dabb685..4d9adc0 100644 --- a/packages/solid/src/.ldo/solid.schema.ts +++ b/packages/solid/src/.ldo/solid.schema.ts @@ -1,4 +1,4 @@ -import type { Schema } from "shexj"; +import { Schema } from "shexj"; /** * ============================================================================= @@ -210,5 +210,24 @@ export const solidSchema: Schema = { extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], }, }, + { + id: "http://www.w3.org/ns/lddps#ProfileWithStorage", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + id: "http://www.w3.org/ns/lddps#ProfileWithStorageShape", + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/pim/space#storage", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, ], }; diff --git a/packages/solid/src/.ldo/solid.shapeTypes.ts b/packages/solid/src/.ldo/solid.shapeTypes.ts index 705e60e..69ddd90 100644 --- a/packages/solid/src/.ldo/solid.shapeTypes.ts +++ b/packages/solid/src/.ldo/solid.shapeTypes.ts @@ -1,7 +1,7 @@ -import type { ShapeType } from "@ldo/ldo"; +import { ShapeType } from "@ldo/ldo"; import { solidSchema } from "./solid.schema"; import { solidContext } from "./solid.context"; -import type { Container, Resource } from "./solid.typings"; +import { Container, Resource, ProfileWithStorage } from "./solid.typings"; /** * ============================================================================= @@ -26,3 +26,12 @@ export const ResourceShapeType: ShapeType = { shape: "http://www.w3.org/ns/lddps#Resource", context: solidContext, }; + +/** + * ProfileWithStorage ShapeType + */ +export const ProfileWithStorageShapeType: ShapeType = { + schema: solidSchema, + shape: "http://www.w3.org/ns/lddps#ProfileWithStorage", + context: solidContext, +}; diff --git a/packages/solid/src/.ldo/solid.typings.ts b/packages/solid/src/.ldo/solid.typings.ts index a9593f5..b5e6276 100644 --- a/packages/solid/src/.ldo/solid.typings.ts +++ b/packages/solid/src/.ldo/solid.typings.ts @@ -1,4 +1,4 @@ -import type { ContextDefinition } from "jsonld"; +import { ContextDefinition } from "jsonld"; /** * ============================================================================= @@ -57,9 +57,6 @@ export interface Resource { | { "@id": "Resource2"; } - | { - "@id": "Container"; - } )[]; /** * Date modified @@ -74,3 +71,14 @@ export interface Resource { */ size?: number; } + +/** + * ProfileWithStorage Type + */ +export interface ProfileWithStorage { + "@id"?: string; + "@context"?: ContextDefinition; + storage?: { + "@id": string; + }[]; +} diff --git a/packages/solid/src/.shapes/solid.shex b/packages/solid/src/.shapes/solid.shex index 67dc06e..f90f1b5 100644 --- a/packages/solid/src/.shapes/solid.shex +++ b/packages/solid/src/.shapes/solid.shex @@ -6,6 +6,7 @@ PREFIX ldps: PREFIX dct: PREFIX stat: PREFIX tur: +PREFIX pim: ldps:Container EXTRA a { $ldps:ContainerShape ( @@ -34,3 +35,9 @@ ldps:Resource EXTRA a { // rdfs:comment "size of this container"; ) } + +ldps:ProfileWithStorage EXTRA a { + $ldps:ProfileWithStorageShape ( + pim:storage IRI *; + ) +} diff --git a/packages/solid/src/SolidLdoDataset.ts b/packages/solid/src/SolidLdoDataset.ts index e3b6a34..034235d 100644 --- a/packages/solid/src/SolidLdoDataset.ts +++ b/packages/solid/src/SolidLdoDataset.ts @@ -10,6 +10,11 @@ import { SolidLdoTransactionDataset } from "./SolidLdoTransactionDataset"; import type { ITransactionDatasetFactory } from "@ldo/subscribable-dataset"; import type { SubjectNode } from "@ldo/rdf-utils"; import type { Resource } from "./resource/Resource"; +import type { CheckRootResultError } from "./requester/requests/checkRootContainer"; +import type { NoRootContainerError } from "./requester/results/error/NoRootContainerError"; +import type { ReadResultError } from "./requester/requests/readResource"; +import { ProfileWithStorageShapeType } from "./.ldo/solid.shapeTypes"; +import type { GetStorageContainerFromWebIdSuccess } from "./requester/results/success/CheckRootContainerSuccess"; /** * A SolidLdoDataset has all the functionality of an LdoDataset with the added @@ -113,4 +118,52 @@ export class SolidLdoDataset extends LdoDataset { startTransaction(linkedDataObject); return linkedDataObject; } + + /** + * Gets a list of root storage containers for a user given their WebId + * @param webId: The webId for the user + * @returns A list of storages if successful, an error if not + * @example + * ```typescript + * const result = await solidLdoDataset + * .getStorageFromWebId("https://example.com/profile/card#me"); + * if (result.isError) { + * // Do something + * } + * console.log(result.storageContainer[0].uri); + * ``` + */ + async getStorageFromWebId( + webId: LeafUri, + ): Promise< + | GetStorageContainerFromWebIdSuccess + | CheckRootResultError + | ReadResultError + | NoRootContainerError + > { + const webIdResource = this.getResource(webId); + const readResult = await webIdResource.readIfUnfetched(); + if (readResult.isError) return readResult; + const profile = this.usingType(ProfileWithStorageShapeType).fromSubject( + webId, + ); + if (profile.storage && profile.storage.length > 0) { + const containers = profile.storage.map((storageNode) => + this.getResource(storageNode["@id"] as ContainerUri), + ); + return { + type: "getStorageContainerFromWebIdSuccess", + isError: false, + storageContainers: containers, + }; + } + const getContainerResult = await webIdResource.getRootContainer(); + if (getContainerResult.type === "container") + return { + type: "getStorageContainerFromWebIdSuccess", + isError: false, + storageContainers: [getContainerResult], + }; + return getContainerResult; + } } diff --git a/packages/solid/src/methods.ts b/packages/solid/src/methods.ts index b1945ba..5fb36a7 100644 --- a/packages/solid/src/methods.ts +++ b/packages/solid/src/methods.ts @@ -22,7 +22,7 @@ import type { SolidLdoTransactionDataset } from "./SolidLdoTransactionDataset"; * * const profile = solidLdoDataset * .using(ProfileShapeType) - * .fromSubject("https://example.com/proifle#me"); + * .fromSubject("https://example.com/profile#me"); * const resource = solidLdoDataset.getResource("https://example.com/profile"); * * const cProfile = changeData(profile, resource); @@ -60,7 +60,7 @@ export function changeData( * * const profile = solidLdoDataset * .using(ProfileShapeType) - * .fromSubject("https://example.com/proifle#me"); + * .fromSubject("https://example.com/profile#me"); * const resource = solidLdoDataset.getResource("https://example.com/profile"); * * const cProfile = changeData(profile, resource); diff --git a/packages/solid/src/requester/requests/checkRootContainer.ts b/packages/solid/src/requester/requests/checkRootContainer.ts index 18f4988..2c8df9f 100644 --- a/packages/solid/src/requester/requests/checkRootContainer.ts +++ b/packages/solid/src/requester/requests/checkRootContainer.ts @@ -1,6 +1,5 @@ import type { BasicRequestOptions } from "./requestOptions"; import { parse as parseLinkHeader } from "http-link-header"; -import { NoncompliantPodError } from "../results/error/NoncompliantPodError"; import type { CheckRootContainerSuccess } from "../results/success/CheckRootContainerSuccess"; import type { HttpErrorResultType, @@ -21,7 +20,6 @@ export type CheckRootResult = CheckRootContainerSuccess | CheckRootResultError; */ export type CheckRootResultError = | HttpErrorResultType - | NoncompliantPodError | UnexpectedHttpError | UnexpectedResourceError; @@ -37,10 +35,15 @@ export type CheckRootResultError = export function checkHeadersForRootContainer( uri: ContainerUri, headers: Headers, -): CheckRootContainerSuccess | NoncompliantPodError { +): CheckRootContainerSuccess { const linkHeader = headers.get("link"); if (!linkHeader) { - return new NoncompliantPodError(uri, "No link header present in request."); + return { + uri, + isRootContainer: false, + type: "checkRootContainerSuccess", + isError: false, + }; } const parsedLinkHeader = parseLinkHeader(linkHeader); const types = parsedLinkHeader.get("rel", "type"); @@ -82,7 +85,10 @@ export async function checkRootContainer( try { const fetch = guaranteeFetch(options?.fetch); // Fetch options to determine the document type - const response = await fetch(uri, { method: "HEAD" }); + // Note cache: "no-store": we don't want to depend on cached results because + // web browsers do not cache link headers + // https://github.com/CommunitySolidServer/CommunitySolidServer/issues/1959 + const response = await fetch(uri, { method: "HEAD", cache: "no-store" }); const httpErrorResult = HttpErrorResult.checkResponse(uri, response); if (httpErrorResult) return httpErrorResult; diff --git a/packages/solid/src/requester/requests/readResource.ts b/packages/solid/src/requester/requests/readResource.ts index fbfb4db..a0a961f 100644 --- a/packages/solid/src/requester/requests/readResource.ts +++ b/packages/solid/src/requester/requests/readResource.ts @@ -99,7 +99,9 @@ export async function readResource( try { const fetch = guaranteeFetch(options?.fetch); // Fetch options to determine the document type - const response = await fetch(uri); + const response = await fetch(uri, { + headers: { accept: "text/turtle, */*" }, + }); if (response.status === 404) { return { isError: false, @@ -124,7 +126,7 @@ export async function readResource( ); } - if (contentType === "text/turtle") { + if (contentType.startsWith("text/turtle")) { // Parse Turtle const rawTurtle = await response.text(); if (options?.dataset) { @@ -137,7 +139,6 @@ export async function readResource( } if (isContainerUri(uri)) { const result = checkHeadersForRootContainer(uri, response.headers); - if (result.isError) return result; return { isError: false, type: "containerReadSuccess", diff --git a/packages/solid/src/requester/results/error/NoRootContainerError.ts b/packages/solid/src/requester/results/error/NoRootContainerError.ts new file mode 100644 index 0000000..8a17f2f --- /dev/null +++ b/packages/solid/src/requester/results/error/NoRootContainerError.ts @@ -0,0 +1,17 @@ +import { ResourceError } from "./ErrorResult"; + +/** + * A NoncompliantPodError is returned when the server responded in a way that is + * not compliant with the Solid specification. + */ +export class NoRootContainerError extends ResourceError { + readonly type = "noRootContainerError" as const; + + /** + * @param uri - the URI of the requested resource + * @param message - a custom message for the error + */ + constructor(uri: string) { + super(uri, `${uri} has not root container.`); + } +} diff --git a/packages/solid/src/requester/results/success/CheckRootContainerSuccess.ts b/packages/solid/src/requester/results/success/CheckRootContainerSuccess.ts index e2e12cb..77a435f 100644 --- a/packages/solid/src/requester/results/success/CheckRootContainerSuccess.ts +++ b/packages/solid/src/requester/results/success/CheckRootContainerSuccess.ts @@ -1,4 +1,5 @@ -import type { ResourceSuccess } from "./SuccessResult"; +import type { Container } from "../../../resource/Container"; +import type { ResourceSuccess, SuccessResult } from "./SuccessResult"; /** * Indicates that the request to check if a resource is the root container was @@ -11,3 +12,8 @@ export interface CheckRootContainerSuccess extends ResourceSuccess { */ isRootContainer: boolean; } + +export interface GetStorageContainerFromWebIdSuccess extends SuccessResult { + type: "getStorageContainerFromWebIdSuccess"; + storageContainers: Container[]; +} diff --git a/packages/solid/src/resource/Container.ts b/packages/solid/src/resource/Container.ts index e21fcde..2670e28 100644 --- a/packages/solid/src/resource/Container.ts +++ b/packages/solid/src/resource/Container.ts @@ -19,7 +19,6 @@ import type { ReadResultError, } from "../requester/requests/readResource"; import { AggregateError } from "../requester/results/error/ErrorResult"; -import { NoncompliantPodError } from "../requester/results/error/NoncompliantPodError"; import type { DeleteSuccess } from "../requester/results/success/DeleteSuccess"; import type { AbsentReadSuccess } from "../requester/results/success/ReadSuccess"; import type { ContainerReadSuccess } from "../requester/results/success/ReadSuccess"; @@ -31,6 +30,7 @@ import type { Leaf } from "./Leaf"; import type { SharedStatuses } from "./Resource"; import { Resource } from "./Resource"; import type { ResourceResult } from "./resourceResult/ResourceResult"; +import { NoRootContainerError } from "../requester/results/error/NoRootContainerError"; /** * Represents the current status of a specific container on a Pod as known by @@ -222,7 +222,8 @@ export class Container extends Resource { /** * Gets the root container of this container. If this container is the root * container, this function returns itself. - * @returns The root container for this container + * @returns The root container for this container or undefined if there is no + * root container. * * @example * Suppose the root container is at `https://example.com/` @@ -237,11 +238,13 @@ export class Container extends Resource { * } * ``` */ - async getRootContainer(): Promise { + async getRootContainer(): Promise< + Container | CheckRootResultError | NoRootContainerError + > { const parentContainerResult = await this.getParentContainer(); if (parentContainerResult?.isError) return parentContainerResult; if (!parentContainerResult) { - return this; + return this.isRootContainer() ? this : new NoRootContainerError(this.uri); } return parentContainerResult.getRootContainer(); } @@ -277,10 +280,7 @@ export class Container extends Resource { if (this.rootContainer) return undefined; const parentUri = getParentUri(this.uri); if (!parentUri) { - return new NoncompliantPodError( - this.uri, - `${this.uri} is not root does not have a parent container`, - ); + return undefined; } return this.context.resourceStore.get(parentUri); } diff --git a/packages/solid/src/resource/Leaf.ts b/packages/solid/src/resource/Leaf.ts index 60fba98..1490a0b 100644 --- a/packages/solid/src/resource/Leaf.ts +++ b/packages/solid/src/resource/Leaf.ts @@ -23,6 +23,7 @@ import type { Container } from "./Container"; import type { SharedStatuses } from "./Resource"; import { Resource } from "./Resource"; import type { ResourceResult } from "./resourceResult/ResourceResult"; +import type { NoRootContainerError } from "../requester/results/error/NoRootContainerError"; /** * Represents the current status of a specific Leaf on a Pod as known by LDO. @@ -77,7 +78,9 @@ export class Leaf extends Resource { */ constructor(uri: LeafUri, context: SolidLdoDatasetContext) { super(context); - this.uri = uri; + const uriObject = new URL(uri); + uriObject.hash = ""; + this.uri = uriObject.toString() as LeafUri; this.requester = new LeafBatchedRequester(uri, context); this.status = { isError: false, type: "unfetched", uri }; } @@ -338,7 +341,12 @@ export class Leaf extends Resource { * } * ``` */ - async getRootContainer(): Promise { + async getRootContainer(): Promise< + Container | CheckRootResultError | NoRootContainerError + > { + // Check to see if this document has a pim:storage if so, use that + + // If not, traverse the tree const parent = await this.getParentContainer(); return parent.getRootContainer(); } diff --git a/packages/solid/src/resource/Resource.ts b/packages/solid/src/resource/Resource.ts index 41bcb51..e52d8d1 100644 --- a/packages/solid/src/resource/Resource.ts +++ b/packages/solid/src/resource/Resource.ts @@ -32,6 +32,7 @@ import { getWacRuleWithAclUri, type GetWacRuleResult } from "./wac/getWacRule"; import { NoncompliantPodError } from "../requester/results/error/NoncompliantPodError"; import { setWacRuleForAclUri, type SetWacRuleResult } from "./wac/setWacRule"; import type { LeafUri } from "../util/uriTypes"; +import type { NoRootContainerError } from "../requester/results/error/NoRootContainerError"; /** * Statuses shared between both Leaf and Container @@ -524,7 +525,9 @@ export abstract class Resource extends (EventEmitter as new () => TypedEmitter<{ * } * ``` */ - abstract getRootContainer(): Promise; + abstract getRootContainer(): Promise< + Container | CheckRootResultError | NoRootContainerError + >; abstract getParentContainer(): Promise< Container | CheckRootResultError | undefined diff --git a/packages/solid/test/Integration.test.ts b/packages/solid/test/Integration.test.ts index 1b3b625..d9cd71d 100644 --- a/packages/solid/test/Integration.test.ts +++ b/packages/solid/test/Integration.test.ts @@ -8,12 +8,7 @@ import type { UpdateResultError, } from "../src"; import { changeData, commitData, createSolidLdoDataset } from "../src"; -import { - ROOT_CONTAINER, - WEB_ID, - createApp, - getAuthenticatedFetch, -} from "./solidServer.helper"; +import { ROOT_CONTAINER, WEB_ID, createApp } from "./solidServer.helper"; import { namedNode, quad as createQuad, @@ -45,6 +40,8 @@ import type { import type { NoncompliantPodError } from "../src/requester/results/error/NoncompliantPodError"; import type { GetWacRuleSuccess } from "../src/resource/wac/results/GetWacRuleSuccess"; import type { WacRule } from "../src/resource/wac/WacRule"; +import type { GetStorageContainerFromWebIdSuccess } from "../src/requester/results/success/CheckRootContainerSuccess"; +import { generateAuthFetch } from "./authFetch.helper"; const TEST_CONTAINER_SLUG = "test_ldo/"; const TEST_CONTAINER_URI = @@ -58,6 +55,7 @@ const SAMPLE2_BINARY_URI = `${TEST_CONTAINER_URI}${SAMPLE2_BINARY_SLUG}` as LeafUri; const SAMPLE_CONTAINER_URI = `${TEST_CONTAINER_URI}sample_container/` as ContainerUri; +const SAMPLE_PROFILE_URI = `${TEST_CONTAINER_URI}profile.ttl` as LeafUri; const SPIDER_MAN_TTL = `@base . @prefix rdf: . @prefix rdfs: . @@ -98,6 +96,11 @@ const TEST_CONTAINER_ACL = `<#b30e3fd1-b5a8-4763-ad9d-e95de9cf7933> a , , , ; <${WEB_ID}>; , .`; +const SAMPLE_PROFILE_TTL = ` +@prefix pim: . + +<${SAMPLE_PROFILE_URI}> pim:storage , . +`; async function testRequestLoads( request: () => Promise, @@ -150,16 +153,25 @@ describe("Integration", () => { >; let solidLdoDataset: SolidLdoDataset; + 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 getAuthenticatedFetch(); + authFetch = await generateAuthFetch(); }); afterAll(async () => { app.stop(); + process.env.JEST_WORKER_ID = previousJestId; + process.env.NODE_ENV = previousNodeEnv; }); beforeEach(async () => { @@ -191,6 +203,11 @@ describe("Integration", () => { 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, + }), ]); }); @@ -208,6 +225,9 @@ describe("Integration", () => { authFetch(SAMPLE2_BINARY_URI, { method: "DELETE", }), + authFetch(SAMPLE_PROFILE_URI, { + method: "DELETE", + }), authFetch(SAMPLE_CONTAINER_URI, { method: "DELETE", }), @@ -217,6 +237,18 @@ describe("Integration", () => { }); }); + /** + * General + */ + describe("General", () => { + it("Does not include the hash when creating a resource", () => { + const resource = solidLdoDataset.getResource( + "https://example.com/thing#hash", + ); + expect(resource.uri).toBe("https://example.com/thing"); + }); + }); + /** * Read */ @@ -271,7 +303,7 @@ describe("Integration", () => { isDoingInitialFetch: true, }); expect(result.type).toBe("containerReadSuccess"); - expect(resource.children().length).toBe(2); + expect(resource.children().length).toBe(3); }); it("Reads a binary leaf", async () => { @@ -385,6 +417,24 @@ describe("Integration", () => { ); }); + it("Parses Turtle even when the content type contains parameters", async () => { + fetchMock.mockResolvedValueOnce( + new Response(SPIDER_MAN_TTL, { + status: 200, + headers: new Headers({ "content-type": "text/turtle;charset=utf-8" }), + }), + ); + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const result = await testRequestLoads(() => resource.read(), resource, { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }); + expect(result.isError).toBe(false); + if (result.isError) return; + expect(result.type).toBe("dataReadSuccess"); + }); + it("Returns an UnexpectedResourceError if an unknown error is triggered", async () => { fetchMock.mockRejectedValueOnce(new Error("Something happened.")); const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); @@ -399,7 +449,7 @@ describe("Integration", () => { expect(result.message).toBe("Something happened."); }); - it("Returns an error if there is no link header for a container request", async () => { + it("Does not return an error if there is no link header for a container request", async () => { fetchMock.mockResolvedValueOnce( new Response(TEST_CONTAINER_TTL, { status: 200, @@ -412,12 +462,9 @@ describe("Integration", () => { isReading: true, isDoingInitialFetch: true, }); - expect(result.isError).toBe(true); - if (!result.isError) return; - expect(result.type).toBe("noncompliantPodError"); - expect(result.message).toMatch( - /\Response from .* is not compliant with the Solid Specification: No link header present in request\./, - ); + expect(result.isError).toBe(false); + if (result.isError) return; + expect(result.resource.isRootContainer()).toBe(false); }); it("knows nothing about a leaf resource if it is not fetched", () => { @@ -470,7 +517,7 @@ describe("Integration", () => { }, ); expect(result.type).toBe("containerReadSuccess"); - expect(resource.children().length).toBe(2); + expect(resource.children().length).toBe(3); }); it("reads an unfetched leaf", async () => { @@ -501,7 +548,7 @@ describe("Integration", () => { const result = await resource.readIfUnfetched(); expect(fetchMock).not.toHaveBeenCalled(); expect(result.type).toBe("containerReadSuccess"); - expect(resource.children().length).toBe(2); + expect(resource.children().length).toBe(3); }); it("returns a cached existing data leaf", async () => { @@ -559,7 +606,19 @@ describe("Integration", () => { expect(result.isRootContainer()).toBe(true); }); - it("Returns an error if there is no link header for a container request", async () => { + it("Returns an error if there is no root container", async () => { + fetchMock.mockResolvedValueOnce( + new Response(TEST_CONTAINER_TTL, { + status: 200, + headers: new Headers({ "content-type": "text/turtle" }), + }), + ); + fetchMock.mockResolvedValueOnce( + new Response(TEST_CONTAINER_TTL, { + status: 200, + headers: new Headers({ "content-type": "text/turtle" }), + }), + ); fetchMock.mockResolvedValueOnce( new Response(TEST_CONTAINER_TTL, { status: 200, @@ -570,10 +629,8 @@ describe("Integration", () => { const result = await resource.getRootContainer(); expect(result.isError).toBe(true); if (!result.isError) return; - expect(result.type).toBe("noncompliantPodError"); - expect(result.message).toMatch( - /\Response from .* is not compliant with the Solid Specification: No link header present in request\./, - ); + expect(result.type).toBe("noRootContainerError"); + expect(result.message).toMatch(/\.* has not root container\./); }); it("An error to be returned if a common http error is encountered", async () => { @@ -611,7 +668,47 @@ describe("Integration", () => { const resource = solidLdoDataset.getResource(ROOT_CONTAINER); const result = await resource.getRootContainer(); expect(result.isError).toBe(true); - expect(result.type).toBe("noncompliantPodError"); + expect(result.type).toBe("noRootContainerError"); + }); + }); + + /** + * Get Storage From WebId + */ + describe("getStorageFromWebId", () => { + it("Gets storage when a pim:storage field isn't present", async () => { + const result = await solidLdoDataset.getStorageFromWebId(SAMPLE_DATA_URI); + expect(result.type).toBe("getStorageContainerFromWebIdSuccess"); + const realResult = result as GetStorageContainerFromWebIdSuccess; + expect(realResult.storageContainers.length).toBe(1); + expect(realResult.storageContainers[0].uri).toBe(ROOT_CONTAINER); + }); + + it("Gets storage when a pim:storage field is present", async () => { + const result = + await solidLdoDataset.getStorageFromWebId(SAMPLE_PROFILE_URI); + expect(result.type).toBe("getStorageContainerFromWebIdSuccess"); + const realResult = result as GetStorageContainerFromWebIdSuccess; + expect(realResult.storageContainers.length).toBe(2); + expect(realResult.storageContainers[0].uri).toBe( + "https://example.com/A/", + ); + expect(realResult.storageContainers[1].uri).toBe( + "https://example.com/B/", + ); + }); + + it("Passes any errors returned from the read method", async () => { + fetchMock.mockRejectedValueOnce(new Error("Something happened.")); + const result = await solidLdoDataset.getStorageFromWebId(SAMPLE_DATA_URI); + expect(result.isError).toBe(true); + }); + + it("Passes any errors returned from the getRootContainer method", async () => { + fetchMock.mockResolvedValueOnce(new Response("")); + fetchMock.mockRejectedValueOnce(new Error("Something happened.")); + const result = await solidLdoDataset.getStorageFromWebId(SAMPLE_DATA_URI); + expect(result.isError).toBe(true); }); }); diff --git a/packages/solid/test/authFetch.helper.ts b/packages/solid/test/authFetch.helper.ts new file mode 100644 index 0000000..fffee6a --- /dev/null +++ b/packages/solid/test/authFetch.helper.ts @@ -0,0 +1,112 @@ +import type { KeyPair } from "@inrupt/solid-client-authn-core"; +import { + buildAuthenticatedFetch, + createDpopHeader, + generateDpopKeyPair, +} from "@inrupt/solid-client-authn-core"; +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", +}; + +async function getAuthorization(): 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 { controls } = await indexResponse.json(); + + // And then we log in to the account API + const response = await fetch(controls.password.login, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ + email: config.email, + password: config.password, + }), + }); + // This authorization value will be used to authenticate in the next step + const result = await response.json(); + return result.authorization; +} + +async function getSecret( + 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/", { + headers: { authorization: `CSS-Account-Token ${authorization}` }, + }); + const { controls } = await indexResponse.json(); + + // Here we request the server to generate a token on our account + const response = await fetch(controls.account.clientCredentials, { + method: "POST", + headers: { + authorization: `CSS-Account-Token ${authorization}`, + "content-type": "application/json", + }, + // The name field will be used when generating the ID of your token. + // The WebID field determines which WebID you will identify as when using the token. + // Only WebIDs linked to your account can be used. + body: JSON.stringify({ + name: "my-token", + webId: `http://localhost:3001/${config.podName}/profile/card#me`, + }), + }); + + // These are the identifier and secret of your token. + // Store the secret somewhere safe as there is no way to request it again from the server! + // The `resource` value can be used to delete the token at a later point in time. + const response2 = await response.json(); + return response2; +} + +async function getAccessToken( + id: string, + secret: string, +): Promise<{ accessToken: string; dpopKey: KeyPair }> { + try { + // A key pair is needed for encryption. + // This function from `solid-client-authn` generates such a pair for you. + const dpopKey = await generateDpopKeyPair(); + + // These are the ID and secret generated in the previous step. + // Both the ID and the secret need to be form-encoded. + const authString = `${encodeURIComponent(id)}:${encodeURIComponent( + secret, + )}`; + // This URL can be found by looking at the "token_endpoint" field at + // http://localhost:3001/.well-known/openid-configuration + // if your server is hosted at http://localhost:3000/. + const tokenUrl = "http://localhost:3001/.oidc/token"; + const response = await fetch(tokenUrl, { + method: "POST", + headers: { + // The header needs to be in base64 encoding. + authorization: `Basic ${Buffer.from(authString).toString("base64")}`, + "content-type": "application/x-www-form-urlencoded", + dpop: await createDpopHeader(tokenUrl, "POST", dpopKey), + }, + body: "grant_type=client_credentials&scope=webid", + }); + + // This is the Access token that will be used to do an authenticated request to the server. + // The JSON also contains an "expires_in" field in seconds, + // which you can use to know when you need request a new Access token. + const response2 = await response.json(); + return { accessToken: response2.access_token, dpopKey }; + } catch (err) { + console.error(err); + throw err; + } +} + +export async function generateAuthFetch() { + const authorization = await getAuthorization(); + const { id, secret } = await getSecret(authorization); + const { accessToken, dpopKey } = await getAccessToken(id, secret); + return await buildAuthenticatedFetch(accessToken, { dpopKey }); +} diff --git a/packages/solid/test/configs/server-config.json b/packages/solid/test/configs/server-config.json new file mode 100644 index 0000000..5e96784 --- /dev/null +++ b/packages/solid/test/configs/server-config.json @@ -0,0 +1,43 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^7.0.0/components/context.jsonld" + ], + "import": [ + "css:config/app/init/static-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/all.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/default.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/memory.json", + "css:config/storage/key-value/resource-store.json", + "css:config/storage/location/pod.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/memory.json", + "css:config/util/variables/default.json" + ], + "@graph": [ + { + "comment": "A Solid server that stores its resources on disk and uses WAC for authorization." + } + ] +} \ No newline at end of file diff --git a/packages/solid/test/configs/solid-css-seed.json b/packages/solid/test/configs/solid-css-seed.json index 1b10b4c..5894d0d 100644 --- a/packages/solid/test/configs/solid-css-seed.json +++ b/packages/solid/test/configs/solid-css-seed.json @@ -1,7 +1,9 @@ [ { - "podName": "example", "email": "hello@example.com", - "password": "abc123" + "password": "abc123", + "pods": [ + { "name": "example" } + ] } ] \ No newline at end of file diff --git a/packages/solid/test/solidServer.helper.ts b/packages/solid/test/solidServer.helper.ts index 3447f96..f16b6cc 100644 --- a/packages/solid/test/solidServer.helper.ts +++ b/packages/solid/test/solidServer.helper.ts @@ -1,24 +1,9 @@ // Taken from https://github.com/comunica/comunica/blob/b237be4265c353a62a876187d9e21e3bc05123a3/engines/query-sparql/test/QuerySparql-solid-test.ts#L9 import * as path from "path"; -import type { KeyPair } from "@inrupt/solid-client-authn-core"; -import { - buildAuthenticatedFetch, - createDpopHeader, - generateDpopKeyPair, -} from "@inrupt/solid-client-authn-core"; import type { App } from "@solid/community-server"; import { AppRunner, resolveModulePath } from "@solid/community-server"; import "jest-rdf"; -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", - }, -]; export const SERVER_DOMAIN = process.env.SERVER || "http://localhost:3001/"; export const ROOT_ROUTE = process.env.ROOT_CONTAINER || ""; @@ -37,88 +22,18 @@ export async function createApp(): Promise { } as App; } const appRunner = new AppRunner(); - return appRunner.create( - { + + return appRunner.create({ + loaderProperties: { mainModulePath: resolveModulePath(""), typeChecking: false, }, - resolveModulePath("config/default.json"), - {}, - { + config: resolveModulePath("config/default.json"), + variableBindings: {}, + shorthand: { port: 3_001, loggingLevel: "off", - seededPodConfigJson: path.join( - __dirname, - "configs", - "solid-css-seed.json", - ), + seedConfig: path.join(__dirname, "configs", "solid-css-seed.json"), }, - ); -} - -export interface ISecretData { - id: string; - secret: string; -} - -// From https://communitysolidserver.github.io/CommunitySolidServer/5.x/usage/client-credentials/ -export async function getSecret(): Promise { - const result = await fetch(`${SERVER_DOMAIN}idp/credentials/`, { - method: "POST", - headers: { "content-type": "application/json" }, - body: JSON.stringify({ - email: config[0].email, - password: config[0].password, - name: config[0].podName, - }), - }); - const json = await result.json(); - return json; -} - -export interface ITokenData { - accessToken: string; - dpopKey: KeyPair; -} - -// From https://communitysolidserver.github.io/CommunitySolidServer/5.x/usage/client-credentials/ -export async function refreshToken({ - id, - secret, -}: ISecretData): Promise { - const dpopKey = await generateDpopKeyPair(); - const authString = `${encodeURIComponent(id)}:${encodeURIComponent(secret)}`; - const tokenUrl = `${SERVER_DOMAIN}.oidc/token`; - const accessToken = await fetch(tokenUrl, { - method: "POST", - headers: { - // The header needs to be in base64 encoding. - authorization: `Basic ${Buffer.from(authString).toString("base64")}`, - "content-type": "application/x-www-form-urlencoded", - dpop: await createDpopHeader(tokenUrl, "POST", dpopKey), - }, - body: "grant_type=client_credentials&scope=webid", - }) - .then((res) => res.json()) - .then((res) => res.access_token); - - return { accessToken, dpopKey }; -} - -export async function getAuthenticatedFetch() { - // Generate secret - const secret = await getSecret(); - - if (!secret) throw new Error("No Secret"); - - // Get token - const token = await refreshToken(secret); - - if (!token) throw new Error("No Token"); - - // Build authenticated fetch - const authFetch = await buildAuthenticatedFetch(fetch, token.accessToken, { - dpopKey: token.dpopKey, }); - return authFetch; } diff --git a/packages/subscribable-dataset/Readme.md b/packages/subscribable-dataset/Readme.md index 39920e8..c01c0c3 100644 --- a/packages/subscribable-dataset/Readme.md +++ b/packages/subscribable-dataset/Readme.md @@ -86,7 +86,7 @@ async function run(): Promise { { baseIRI: "https://jackson.solidcommunity.net/IndividualChats/jackson.solidcommunity.net/index.ttl#", - format: "application/json-ld", + format: "application/ld+json", } ); // Returns true because the input data describes the same triple. diff --git a/packages/subscribable-dataset/package.json b/packages/subscribable-dataset/package.json index a093d73..566ff65 100644 --- a/packages/subscribable-dataset/package.json +++ b/packages/subscribable-dataset/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/subscribable-dataset", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.24", "description": "An RDFJS dataset implementation that can be subscribed to for updates", "main": "dist/index.js", "scripts": { @@ -33,8 +33,8 @@ "ts-node": "^9.1.1" }, "dependencies": { - "@ldo/dataset": "^0.0.1-alpha.23", - "@ldo/rdf-utils": "^0.0.1-alpha.23" + "@ldo/dataset": "^0.0.1-alpha.24", + "@ldo/rdf-utils": "^0.0.1-alpha.24" }, "files": [ "dist", diff --git a/packages/subscribable-dataset/test/createSubscribableDatasetFromSerializedInput.test.ts b/packages/subscribable-dataset/test/createSubscribableDatasetFromSerializedInput.test.ts index 71f6353..5bab149 100644 --- a/packages/subscribable-dataset/test/createSubscribableDatasetFromSerializedInput.test.ts +++ b/packages/subscribable-dataset/test/createSubscribableDatasetFromSerializedInput.test.ts @@ -11,7 +11,7 @@ describe("createExtendedDatasetFromSerializedInput", () => { const dataset = await serializedToSubscribableDataset( JSON.stringify(jsonLdData), { - format: "application/json-ld", + format: "application/ld+json", }, ); expect(dataset.size).toBe(9); diff --git a/packages/traverser-shexj/package.json b/packages/traverser-shexj/package.json index 6fceae7..c53141a 100644 --- a/packages/traverser-shexj/package.json +++ b/packages/traverser-shexj/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/traverser-shexj", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.24", "description": "A type-traverser for ShexJ", "main": "dist/index.js", "scripts": { @@ -30,7 +30,7 @@ "src" ], "dependencies": { - "@ldo/type-traverser": "^0.0.1-alpha.23" + "@ldo/type-traverser": "^0.0.1-alpha.24" }, "publishConfig": { "access": "public" diff --git a/packages/type-traverser/package.json b/packages/type-traverser/package.json index 5ab4239..a497da3 100644 --- a/packages/type-traverser/package.json +++ b/packages/type-traverser/package.json @@ -1,6 +1,6 @@ { "name": "@ldo/type-traverser", - "version": "0.0.1-alpha.23", + "version": "0.0.1-alpha.24", "description": "An organized way to traverse over objects using typescript", "main": "dist/index.js", "scripts": {