From 02f97e34f4df523cf609c10304e2367924568e91 Mon Sep 17 00:00:00 2001 From: jaxoncreed Date: Thu, 31 Aug 2023 16:21:40 -0400 Subject: [PATCH] Added traversers --- package-lock.json | 9139 ++++++++++------- package.json | 3 +- packages/traverser-shexj/.eslintrc | 3 + packages/traverser-shexj/README.md | 879 ++ packages/traverser-shexj/jest.config.js | 6 + packages/traverser-shexj/package.json | 34 + .../traverser-shexj/src/ShexJTraverser.ts | 7 + .../src/ShexJTraverserDefinition.ts | 303 + .../src/ShexJTraverserTypes.ts | 375 + packages/traverser-shexj/src/index.ts | 5 + .../test/traverseSchema.test.ts | 5 + packages/traverser-shexj/tsconfig.build.json | 7 + packages/type-traverser/.eslintrc | 3 + packages/type-traverser/README.md | 674 ++ packages/type-traverser/example/example.ts | 246 + packages/type-traverser/jest.config.js | 6 + packages/type-traverser/package.json | 35 + packages/type-traverser/src/Transformer.ts | 243 + .../src/TransformerReturnTypes.ts | 75 + .../src/TransformerReturnTypesDefaults.ts | 215 + packages/type-traverser/src/Transformers.ts | 244 + packages/type-traverser/src/Traverser.ts | 36 + .../type-traverser/src/TraverserDefinition.ts | 35 + packages/type-traverser/src/TraverserTypes.ts | 33 + packages/type-traverser/src/UtilTypes.ts | 6 + packages/type-traverser/src/Visitor.ts | 145 + packages/type-traverser/src/Visitors.ts | 126 + packages/type-traverser/src/index.ts | 9 + .../TransformerInterfaceSubTraverser.ts | 123 + .../TransformerParentSubTraverser.ts | 59 + .../TransformerPrimitiveSubTraverser.ts | 28 + .../TransformerUnionSubTraverser.ts | 78 + .../util/CircularDependencyAwaiter.ts | 71 + .../transformerSubTraversers/util/MultiMap.ts | 63 + .../transformerSubTraversers/util/MultiSet.ts | 68 + .../util/SuperPromise.ts | 31 + .../transformerSubTraversers/util/timeout.ts | 3 + .../util/transformerSubTraverserTypes.ts | 43 + .../VisitorInterfaceSubTraverser.ts | 61 + .../VisitorParentSubTraverser.ts | 35 + .../VisitorPrimitiveSubTraverser.ts | 21 + .../VisitorUnionSubTraverser.ts | 32 + .../util/visitorSubTraverserTypes.ts | 29 + .../avatar/AvatarBrokenTransformer.ts | 69 + .../avatar/AvatarErroringTransformer.ts | 64 + .../avatar/AvatarTraverserDefinition.ts | 28 + .../avatar/AvatarTraverserTypes.ts | 46 + .../test/integration/avatar/avatar.test.ts | 19 + .../test/integration/avatar/sampleData.ts | 21 + .../test/integration/shexj/ShexJSimplifier.ts | 39 + .../test/integration/shexj/ShexJTraverser.ts | 7 + .../shexj/ShexJTraverserDefinition.ts | 296 + .../integration/shexj/ShexJTraverserTypes.ts | 333 + .../test/integration/shexj/shexj.test.ts | 48 + .../test/integration/shexj/testShapes.ts | 4836 +++++++++ packages/type-traverser/tsconfig.build.json | 7 + .../tutorialImages/ReturnTypeTooltip.png | Bin 0 -> 36344 bytes .../TraveserDefinitionIntellisense.png | Bin 0 -> 33278 bytes .../ValidateTraverserTypesExample.png | Bin 0 -> 48680 bytes 59 files changed, 15954 insertions(+), 3501 deletions(-) create mode 100644 packages/traverser-shexj/.eslintrc create mode 100644 packages/traverser-shexj/README.md create mode 100644 packages/traverser-shexj/jest.config.js create mode 100644 packages/traverser-shexj/package.json create mode 100644 packages/traverser-shexj/src/ShexJTraverser.ts create mode 100644 packages/traverser-shexj/src/ShexJTraverserDefinition.ts create mode 100644 packages/traverser-shexj/src/ShexJTraverserTypes.ts create mode 100644 packages/traverser-shexj/src/index.ts create mode 100644 packages/traverser-shexj/test/traverseSchema.test.ts create mode 100644 packages/traverser-shexj/tsconfig.build.json create mode 100644 packages/type-traverser/.eslintrc create mode 100644 packages/type-traverser/README.md create mode 100644 packages/type-traverser/example/example.ts create mode 100644 packages/type-traverser/jest.config.js create mode 100644 packages/type-traverser/package.json create mode 100644 packages/type-traverser/src/Transformer.ts create mode 100644 packages/type-traverser/src/TransformerReturnTypes.ts create mode 100644 packages/type-traverser/src/TransformerReturnTypesDefaults.ts create mode 100644 packages/type-traverser/src/Transformers.ts create mode 100644 packages/type-traverser/src/Traverser.ts create mode 100644 packages/type-traverser/src/TraverserDefinition.ts create mode 100644 packages/type-traverser/src/TraverserTypes.ts create mode 100644 packages/type-traverser/src/UtilTypes.ts create mode 100644 packages/type-traverser/src/Visitor.ts create mode 100644 packages/type-traverser/src/Visitors.ts create mode 100644 packages/type-traverser/src/index.ts create mode 100644 packages/type-traverser/src/transformerSubTraversers/TransformerInterfaceSubTraverser.ts create mode 100644 packages/type-traverser/src/transformerSubTraversers/TransformerParentSubTraverser.ts create mode 100644 packages/type-traverser/src/transformerSubTraversers/TransformerPrimitiveSubTraverser.ts create mode 100644 packages/type-traverser/src/transformerSubTraversers/TransformerUnionSubTraverser.ts create mode 100644 packages/type-traverser/src/transformerSubTraversers/util/CircularDependencyAwaiter.ts create mode 100644 packages/type-traverser/src/transformerSubTraversers/util/MultiMap.ts create mode 100644 packages/type-traverser/src/transformerSubTraversers/util/MultiSet.ts create mode 100644 packages/type-traverser/src/transformerSubTraversers/util/SuperPromise.ts create mode 100644 packages/type-traverser/src/transformerSubTraversers/util/timeout.ts create mode 100644 packages/type-traverser/src/transformerSubTraversers/util/transformerSubTraverserTypes.ts create mode 100644 packages/type-traverser/src/visitorSubTraversers/VisitorInterfaceSubTraverser.ts create mode 100644 packages/type-traverser/src/visitorSubTraversers/VisitorParentSubTraverser.ts create mode 100644 packages/type-traverser/src/visitorSubTraversers/VisitorPrimitiveSubTraverser.ts create mode 100644 packages/type-traverser/src/visitorSubTraversers/VisitorUnionSubTraverser.ts create mode 100644 packages/type-traverser/src/visitorSubTraversers/util/visitorSubTraverserTypes.ts create mode 100644 packages/type-traverser/test/integration/avatar/AvatarBrokenTransformer.ts create mode 100644 packages/type-traverser/test/integration/avatar/AvatarErroringTransformer.ts create mode 100644 packages/type-traverser/test/integration/avatar/AvatarTraverserDefinition.ts create mode 100644 packages/type-traverser/test/integration/avatar/AvatarTraverserTypes.ts create mode 100644 packages/type-traverser/test/integration/avatar/avatar.test.ts create mode 100644 packages/type-traverser/test/integration/avatar/sampleData.ts create mode 100644 packages/type-traverser/test/integration/shexj/ShexJSimplifier.ts create mode 100644 packages/type-traverser/test/integration/shexj/ShexJTraverser.ts create mode 100644 packages/type-traverser/test/integration/shexj/ShexJTraverserDefinition.ts create mode 100644 packages/type-traverser/test/integration/shexj/ShexJTraverserTypes.ts create mode 100644 packages/type-traverser/test/integration/shexj/shexj.test.ts create mode 100644 packages/type-traverser/test/integration/shexj/testShapes.ts create mode 100644 packages/type-traverser/tsconfig.build.json create mode 100644 packages/type-traverser/tutorialImages/ReturnTypeTooltip.png create mode 100644 packages/type-traverser/tutorialImages/TraveserDefinitionIntellisense.png create mode 100644 packages/type-traverser/tutorialImages/ValidateTraverserTypesExample.png diff --git a/package-lock.json b/package-lock.json index b1c6ee0..c5b31c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,6 @@ "packages": { "": { "name": "root", - "hasInstallScript": true, "workspaces": [ "packages/*" ], @@ -4623,7 +4622,6 @@ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", "dev": true, - "peer": true, "dependencies": { "expect": "^29.6.4", "jest-snapshot": "^29.6.4" @@ -4658,7 +4656,6 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", "dev": true, - "peer": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -4685,7 +4682,6 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, - "peer": true, "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -4703,7 +4699,6 @@ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", "dev": true, - "peer": true, "dependencies": { "@types/yargs-parser": "*" } @@ -4713,7 +4708,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "peer": true, "engines": { "node": ">=10" }, @@ -4725,15 +4719,13 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@jest/expect/node_modules/expect": { "version": "29.6.4", "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", "dev": true, - "peer": true, "dependencies": { "@jest/expect-utils": "^29.6.4", "jest-get-type": "^29.6.3", @@ -4750,7 +4742,6 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "peer": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -4760,7 +4751,6 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", "dev": true, - "peer": true, "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -4786,7 +4776,6 @@ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", "dev": true, - "peer": true, "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.6.4", @@ -4802,7 +4791,6 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", "dev": true, - "peer": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -4823,7 +4811,6 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, - "peer": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -4833,7 +4820,6 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", "dev": true, - "peer": true, "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -4865,7 +4851,6 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", "dev": true, - "peer": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -4883,7 +4868,6 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", "dev": true, - "peer": true, "dependencies": { "@types/node": "*", "jest-util": "^29.6.3", @@ -4899,7 +4883,6 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", "dev": true, - "peer": true, "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -4913,15 +4896,13 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@jest/expect/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4937,7 +4918,6 @@ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, - "peer": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -5205,6 +5185,14 @@ "resolved": "packages/subscribable-dataset", "link": true }, + "node_modules/@ldo/traverser-shexj": { + "resolved": "packages/traverser-shexj", + "link": true + }, + "node_modules/@ldo/type-traverser": { + "resolved": "packages/type-traverser", + "link": true + }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", @@ -24601,8 +24589,7 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ], - "peer": true + ] }, "node_modules/q": { "version": "1.5.1", @@ -32525,3355 +32512,5696 @@ "engines": { "node": ">=4.2.0" } - } - }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==" - }, - "@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==" }, - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "packages/traverser-shexj": { + "version": "0.0.0", + "license": "MIT", + "dependencies": { + "@ldo/type-traverser": "^0.0.0" + }, + "devDependencies": { + "@types/jest": "^29.0.3", + "@types/shexj": "^2.1.3", + "jest": "^29.0.3", + "ts-jest": "^29.0.2" } }, - "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "packages/traverser-shexj/node_modules/@jest/console": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", + "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "slash": "^3.0.0" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/traverser-shexj/node_modules/@jest/core": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", + "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } + "@jest/console": "^29.6.4", + "@jest/reporters": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.6.3", + "jest-config": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-resolve-dependencies": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "jest-watcher": "^29.6.4", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true } } }, - "@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==" - }, - "@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" + "packages/traverser-shexj/node_modules/@jest/environment": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", + "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.6.3" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/traverser-shexj/node_modules/@jest/fake-timers": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", + "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", + "dev": true, "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/eslint-parser": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.11.tgz", - "integrity": "sha512-YjOYZ3j7TjV8OhLW6NCtyg8G04uStATEUe5eiLuCZaXz2VSDQ3dsAtm2D+TuQyAqNMUK2WacGo0/uma9Pein1w==", - "requires": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" + "packages/traverser-shexj/node_modules/@jest/globals": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", + "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/types": "^29.6.3", + "jest-mock": "^29.6.3" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/traverser-shexj/node_modules/@jest/reporters": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", + "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", + "dev": true, "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true } } }, - "@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", - "requires": { - "@babel/types": "^7.22.10", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "packages/traverser-shexj/node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "requires": { - "@babel/types": "^7.22.5" + "packages/traverser-shexj/node_modules/@jest/test-result": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", + "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", - "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", - "requires": { - "@babel/types": "^7.22.10" + "packages/traverser-shexj/node_modules/@jest/test-sequencer": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", + "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.6.4", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, + "packages/traverser-shexj/node_modules/@jest/transform": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", + "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", + "dev": true, "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", - "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, + "packages/traverser-shexj/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, + "packages/traverser-shexj/node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } + "type-detect": "4.0.8" } }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "requires": { - "@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" - }, + "packages/traverser-shexj/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, "dependencies": { - "resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } + "@sinonjs/commons": "^3.0.0" } }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==" - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "packages/traverser-shexj/node_modules/@types/jest": { + "version": "29.5.4", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.4.tgz", + "integrity": "sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "requires": { - "@babel/types": "^7.22.5" + "packages/traverser-shexj/node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "requires": { - "@babel/types": "^7.22.5" + "packages/traverser-shexj/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "requires": { - "@babel/types": "^7.22.5" + "packages/traverser-shexj/node_modules/babel-jest": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", + "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.6.4", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "packages/traverser-shexj/node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "requires": { - "@babel/types": "^7.22.5" + "packages/traverser-shexj/node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" + "packages/traverser-shexj/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" + "packages/traverser-shexj/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "requires": { - "@babel/types": "^7.22.5" - } + "packages/traverser-shexj/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "requires": { - "@babel/types": "^7.22.5" + "packages/traverser-shexj/node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } } }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "requires": { - "@babel/types": "^7.22.5" + "packages/traverser-shexj/node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==" - }, - "@babel/helper-wrap-function": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", - "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.10" + "packages/traverser-shexj/node_modules/expect": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" + "packages/traverser-shexj/node_modules/istanbul-lib-instrument": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", + "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" } }, - "@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, + "packages/traverser-shexj/node_modules/jest": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", + "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } + "@jest/core": "^29.6.4", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.6.4" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true } } }, - "@babel/parser": { - "version": "7.22.14", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.14.tgz", - "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "packages/traverser-shexj/node_modules/jest-changed-files": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", + "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.6.3", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" + "packages/traverser-shexj/node_modules/jest-circus": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", + "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "p-limit": "^3.1.0", + "pretty-format": "^29.6.3", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "packages/traverser-shexj/node_modules/jest-cli": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", + "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", + "dev": true, + "dependencies": { + "@jest/core": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "packages/traverser-shexj/node_modules/jest-config": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", + "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-jest": "^29.6.4", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.6.4", + "jest-environment-node": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "@babel/plugin-proposal-decorators": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.10.tgz", - "integrity": "sha512-KxN6TqZzcFi4uD3UifqXElBTBNLAEH1l3vzMQj6JwJZbL2sZlThxSViOKCYY+4Ah4V4JhQ95IVB7s/Y6SJSlMQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.10", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/plugin-syntax-decorators": "^7.22.10" + "packages/traverser-shexj/node_modules/jest-docblock": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", + "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.22.5.tgz", - "integrity": "sha512-UCe1X/hplyv6A5g2WnQ90tnHRvYL29dabCWww92lO7VdfMVTVReBTRrhiMrKQejHD9oVkdnRdwYuzUZkBVQisg==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-default-from": "^7.22.5" + "packages/traverser-shexj/node_modules/jest-each": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", + "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "packages/traverser-shexj/node_modules/jest-environment-node": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", + "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "packages/traverser-shexj/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "packages/traverser-shexj/node_modules/jest-haste-map": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", + "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "peer": true, - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" + "packages/traverser-shexj/node_modules/jest-leak-detector": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", + "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "packages/traverser-shexj/node_modules/jest-matcher-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", + "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "packages/traverser-shexj/node_modules/jest-message-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", + "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "packages/traverser-shexj/node_modules/jest-mock": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", + "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "requires": {} - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "packages/traverser-shexj/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "packages/traverser-shexj/node_modules/jest-resolve": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", + "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "packages/traverser-shexj/node_modules/jest-resolve-dependencies": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", + "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.6.4" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "packages/traverser-shexj/node_modules/jest-runner": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", + "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.4", + "@jest/environment": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.6.3", + "jest-environment-node": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-leak-detector": "^29.6.3", + "jest-message-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-util": "^29.6.3", + "jest-watcher": "^29.6.4", + "jest-worker": "^29.6.4", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-syntax-decorators": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz", - "integrity": "sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "packages/traverser-shexj/node_modules/jest-runtime": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", + "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/globals": "^29.6.4", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "packages/traverser-shexj/node_modules/jest-snapshot": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", + "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.6.4", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "natural-compare": "^1.4.0", + "pretty-format": "^29.6.3", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.22.5.tgz", - "integrity": "sha512-ODAqWWXB/yReh/jVQDag/3/tl6lgBueQkk/TcfW/59Oykm4c8a55XloX0CTk2k2VJiFWMgHby9xNX29IbCv9dQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "packages/traverser-shexj/node_modules/jest-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", + "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "packages/traverser-shexj/node_modules/jest-validate": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", + "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-syntax-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", - "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "packages/traverser-shexj/node_modules/jest-watcher": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", + "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.6.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "packages/traverser-shexj/node_modules/jest-worker": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", + "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.6.3", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "packages/traverser-shexj/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "packages/traverser-shexj/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "packages/traverser-shexj/node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "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" } }, - "@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "packages/traverser-shexj/node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" } }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "packages/traverser-shexj/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "packages/traverser-shexj/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "packages/traverser-shexj/node_modules/ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "packages/traverser-shexj/node_modules/v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" } }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "packages/traverser-shexj/node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "packages/traverser-shexj/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "packages/traverser-shexj/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "packages/traverser-shexj/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "packages/traverser-shexj/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "packages/traverser-shexj/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "packages/type-traverser": { + "version": "0.0.0", + "license": "MIT", + "dependencies": { + "uuid": "^8.3.2" + }, + "devDependencies": { + "@types/jest": "^27.4.0", + "@types/shexj": "^2.1.1", + "@types/uuid": "^8.3.4", + "jest": "^27.4.7", + "jsonld2graphobject": "^0.0.3", + "ts-jest": "^27.1.2", + "ts-node": "^10.4.0" + } + }, + "packages/type-traverser/node_modules/jsonld2graphobject": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/jsonld2graphobject/-/jsonld2graphobject-0.0.3.tgz", + "integrity": "sha512-Jn3Zdh5zfzsGZvDZVindwpY/W3cdFJ3l1FNB0ngBa79i1tcLGP7QxBYlUoA4zbjzBSJlK4X6/qicy2zF9cS/IA==", + "dev": true, + "dependencies": { + "@rdfjs/types": "^1.0.1", + "@types/jsonld": "^1.5.6", + "jsonld": "^5.2.0", + "jsonld-context-parser": "^2.1.5", + "uuid": "^8.3.2" + } + }, + "packages/type-traverser/node_modules/ts-jest": { + "version": "27.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", + "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": ">=27.0.0 <28", + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "packages/type-traverser/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "packages/type-traverser/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==" + }, + "@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==" + }, + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==" + }, + "@babel/core": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", + "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.11", + "@babel/parser": "^7.22.11", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } } }, - "@babel/plugin-transform-async-generator-functions": { + "@babel/eslint-parser": { "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz", - "integrity": "sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw==", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.11.tgz", + "integrity": "sha512-YjOYZ3j7TjV8OhLW6NCtyg8G04uStATEUe5eiLuCZaXz2VSDQ3dsAtm2D+TuQyAqNMUK2WacGo0/uma9Pein1w==", "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "@babel/generator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" + "@babel/types": "^7.22.10", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" } }, - "@babel/plugin-transform-block-scoped-functions": { + "@babel/helper-annotate-as-pure": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/types": "^7.22.5" } }, - "@babel/plugin-transform-block-scoping": { + "@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", - "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", + "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/types": "^7.22.10" } }, - "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "@babel/helper-compilation-targets": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } } }, - "@babel/plugin-transform-class-static-block": { + "@babel/helper-create-class-features-plugin": { "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", + "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" + "semver": "^6.3.1" }, "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } } }, - "@babel/plugin-transform-destructuring": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", - "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@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" + }, + "dependencies": { + "resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } } }, - "@babel/plugin-transform-dotall-regex": { + "@babel/helper-environment-visitor": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==" + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" } }, - "@babel/plugin-transform-duplicate-keys": { + "@babel/helper-hoist-variables": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/types": "^7.22.5" } }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/types": "^7.22.5" } }, - "@babel/plugin-transform-exponentiation-operator": { + "@babel/helper-module-imports": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/types": "^7.22.5" } }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" } }, - "@babel/plugin-transform-flow-strip-types": { + "@babel/helper-optimise-call-expression": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", - "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" + "@babel/types": "^7.22.5" } }, - "@babel/plugin-transform-for-of": { + "@babel/helper-plugin-utils": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" } }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" } }, - "@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/types": "^7.22.5" } }, - "@babel/plugin-transform-literals": { + "@babel/helper-skip-transparent-expression-wrappers": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/types": "^7.22.5" } }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/types": "^7.22.5" } }, - "@babel/plugin-transform-member-expression-literals": { + "@babel/helper-string-parser": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" }, - "@babel/plugin-transform-modules-amd": { + "@babel/helper-validator-identifier": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz", - "integrity": "sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==", + "@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==" + }, + "@babel/helper-wrap-function": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", + "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", "requires": { - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.10" } }, - "@babel/plugin-transform-modules-systemjs": { + "@babel/helpers": { "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", - "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", + "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "@babel/highlight": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "@babel/plugin-transform-named-capturing-groups-regex": { + "@babel/parser": { + "version": "7.22.14", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.14.tgz", + "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" } }, - "@babel/plugin-transform-new-target": { + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" } }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz", - "integrity": "sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw==", + "@babel/plugin-proposal-decorators": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.10.tgz", + "integrity": "sha512-KxN6TqZzcFi4uD3UifqXElBTBNLAEH1l3vzMQj6JwJZbL2sZlThxSViOKCYY+4Ah4V4JhQ95IVB7s/Y6SJSlMQ==", "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-create-class-features-plugin": "^7.22.10", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/plugin-syntax-decorators": "^7.22.10" } }, - "@babel/plugin-transform-object-super": { + "@babel/plugin-proposal-export-default-from": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.22.5.tgz", + "integrity": "sha512-UCe1X/hplyv6A5g2WnQ90tnHRvYL29dabCWww92lO7VdfMVTVReBTRrhiMrKQejHD9oVkdnRdwYuzUZkBVQisg==", + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" + "@babel/plugin-syntax-export-default-from": "^7.22.5" } }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.22.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz", - "integrity": "sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw==", + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "requires": { - "@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.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, - "@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, - "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "peer": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" } }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "peer": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz", - "integrity": "sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==", + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", - "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "requires": {} }, - "@babel/plugin-transform-react-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", - "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", - "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "requires": { - "@babel/plugin-transform-react-jsx": "^7.22.5" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", - "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", - "peer": true, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.12.13" } }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", - "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", - "peer": true, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", - "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", + "@babel/plugin-syntax-decorators": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz", + "integrity": "sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" } }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-transform-reserved-words": { + "@babel/plugin-syntax-export-default-from": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.22.5.tgz", + "integrity": "sha512-ODAqWWXB/yReh/jVQDag/3/tl6lgBueQkk/TcfW/59Oykm4c8a55XloX0CTk2k2VJiFWMgHby9xNX29IbCv9dQ==", + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, - "@babel/plugin-transform-runtime": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz", - "integrity": "sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA==", + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } + "@babel/helper-plugin-utils": "^7.8.3" } }, - "@babel/plugin-transform-shorthand-properties": { + "@babel/plugin-syntax-flow": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", + "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { + "@babel/plugin-syntax-import-assertions": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, - "@babel/plugin-transform-template-literals": { + "@babel/plugin-syntax-import-attributes": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@babel/plugin-transform-typescript": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.11.tgz", - "integrity": "sha512-0E4/L+7gfvHub7wsbTv03oRtD69X31LByy44fGmFzbZScpupFByMcgCJ0VbBTkzyjSJKuRoGN8tcijOWKTmqOA==", + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@babel/plugin-transform-unicode-regex": { + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz", + "integrity": "sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw==", + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", + "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", + "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + } + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", + "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" } }, - "@babel/plugin-transform-unicode-sets-regex": { + "@babel/plugin-transform-duplicate-keys": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", + "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", + "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", + "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.22.5" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "requires": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", + "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", + "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz", + "integrity": "sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==", + "requires": { + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", + "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" } }, - "@babel/preset-env": { - "version": "7.22.14", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.14.tgz", - "integrity": "sha512-daodMIoVo+ol/g+//c/AH+szBkFj4STQUikvBijRGL72Ph+w+AMTSh55DUETe8KJlPlDT1k/mp7NBfOuiWmoig==", + "@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", + "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", + "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz", + "integrity": "sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw==", "requires": { "@babel/compat-data": "^7.22.9", "@babel/helper-compilation-targets": "^7.22.10", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@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.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@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-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.11", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.10", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.10", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.11", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.11", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.11", - "@babel/plugin-transform-modules-systemjs": "^7.22.11", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-numeric-separator": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.22.11", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.22.12", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.11", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" + "@babel/plugin-transform-parameters": "^7.22.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", + "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.22.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz", + "integrity": "sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw==", + "requires": { + "@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/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", + "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz", + "integrity": "sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", + "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", + "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "requires": { + "@babel/plugin-transform-react-jsx": "^7.22.5" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", + "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", + "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", + "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz", + "integrity": "sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA==", + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.11.tgz", + "integrity": "sha512-0E4/L+7gfvHub7wsbTv03oRtD69X31LByy44fGmFzbZScpupFByMcgCJ0VbBTkzyjSJKuRoGN8tcijOWKTmqOA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.22.14", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.14.tgz", + "integrity": "sha512-daodMIoVo+ol/g+//c/AH+szBkFj4STQUikvBijRGL72Ph+w+AMTSh55DUETe8KJlPlDT1k/mp7NBfOuiWmoig==", + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@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.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@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-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.11", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.10", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.10", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.11", + "@babel/plugin-transform-modules-systemjs": "^7.22.11", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.11", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.22.12", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.22.11", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + }, + "@babel/preset-flow": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.5.tgz", + "integrity": "sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-flow-strip-types": "^7.22.5" + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", + "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.22.5" + } + }, + "@babel/preset-typescript": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.11.tgz", + "integrity": "sha512-tWY5wyCZYBGY7IlalfKI1rLiGlIfnwsRHZqlky0HVv8qviwQ1Uo/05M6+s+TcTCVa6Bmoo2uJW5TMFX6Wa4qVg==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.11", + "@babel/plugin-transform-typescript": "^7.22.11" + } + }, + "@babel/register": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz", + "integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==", + "peer": true, + "requires": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "peer": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "peer": true + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "peer": true + } + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, + "@babel/runtime": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz", + "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==", + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/traverse": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", + "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", + "requires": { + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.11", + "@babel/types": "^7.22.11", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + } + } + }, + "@babel/types": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", + "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "@bergos/jsonparse": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@bergos/jsonparse/-/jsonparse-1.4.1.tgz", + "integrity": "sha512-vXIT0nzZGX/+yMD5bx2VhTzc92H55tPoehh1BW/FZHOndWGFddrH3MAfdx39FRc7irABirW6EQaGxIJYV6CGuA==", + "requires": { + "buffer": "^6.0.3" + } + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "devOptional": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "devOptional": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@csstools/normalize.css": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", + "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" + }, + "@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "requires": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + } + }, + "@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "requires": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + } + }, + "@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "requires": {} + }, + "@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "requires": {} + }, + "@digitalbazaar/http-client": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-1.2.0.tgz", + "integrity": "sha512-W9KQQ5pUJcaR0I4c2HPJC0a7kRbZApIorZgPnEDwMBgj16iQzutGLrCXYaZOmxqVLVNqqlQ4aUJh+HBQZy4W6Q==", + "dev": true, + "requires": { + "esm": "^3.2.22", + "ky": "^0.25.1", + "ky-universal": "^0.8.2" + } + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", + "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==" + }, + "@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@eslint/js": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", + "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==" + }, + "@expo/bunyan": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", + "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", + "peer": true, + "requires": { + "mv": "~2", + "safe-json-stringify": "~1", + "uuid": "^8.0.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "peer": true + } + } + }, + "@expo/cli": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.10.11.tgz", + "integrity": "sha512-ehaAOw4SwkJ9uL5z9c3RD4LJpmMDCXZBCWZG4fonUGutks4t/GLoNRcdENkWsf6NSgkdPNgNl8KwphU1p083PQ==", + "peer": true, + "requires": { + "@babel/runtime": "^7.20.0", + "@expo/code-signing-certificates": "0.0.5", + "@expo/config": "~8.1.0", + "@expo/config-plugins": "~7.2.0", + "@expo/dev-server": "0.5.5", + "@expo/devcert": "^1.0.0", + "@expo/env": "0.0.5", + "@expo/json-file": "^8.2.37", + "@expo/metro-config": "~0.10.0", + "@expo/osascript": "^2.0.31", + "@expo/package-manager": "~1.0.0", + "@expo/plist": "^0.0.20", + "@expo/prebuild-config": "6.2.6", + "@expo/rudder-sdk-node": "1.1.1", + "@expo/spawn-async": "1.5.0", + "@expo/xcpretty": "^4.2.1", + "@urql/core": "2.3.6", + "@urql/exchange-retry": "0.3.0", + "accepts": "^1.3.8", + "arg": "4.1.0", + "better-opn": "~3.0.2", + "bplist-parser": "^0.3.1", + "cacache": "^15.3.0", + "chalk": "^4.0.0", + "ci-info": "^3.3.0", + "debug": "^4.3.4", + "env-editor": "^0.4.1", + "form-data": "^3.0.1", + "freeport-async": "2.0.0", + "fs-extra": "~8.1.0", + "getenv": "^1.0.0", + "graphql": "15.8.0", + "graphql-tag": "^2.10.1", + "https-proxy-agent": "^5.0.1", + "internal-ip": "4.3.0", + "is-root": "^2.1.0", + "js-yaml": "^3.13.1", + "json-schema-deref-sync": "^0.13.0", + "md5-file": "^3.2.3", + "md5hex": "^1.0.0", + "minipass": "3.1.6", + "node-fetch": "^2.6.7", + "node-forge": "^1.3.1", + "npm-package-arg": "^7.0.0", + "ora": "3.4.0", + "pretty-bytes": "5.6.0", + "progress": "2.0.3", + "prompts": "^2.3.2", + "qrcode-terminal": "0.11.0", + "require-from-string": "^2.0.2", + "requireg": "^0.2.2", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "send": "^0.18.0", + "slugify": "^1.3.4", + "structured-headers": "^0.4.1", + "tar": "^6.0.5", + "tempy": "^0.7.1", + "terminal-link": "^2.1.1", + "text-table": "^0.2.0", + "url-join": "4.0.0", + "wrap-ansi": "^7.0.0", + "ws": "^8.12.1" + }, + "dependencies": { + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "peer": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "peer": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "peer": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "peer": true + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "peer": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "peer": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "peer": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "peer": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "peer": true + }, + "hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "peer": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "peer": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "peer": true, + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "peer": true + }, + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "npm-package-arg": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", + "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", + "peer": true, + "requires": { + "hosted-git-info": "^3.0.2", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "peer": true + } + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "peer": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "peer": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "peer": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "peer": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "peer": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "peer": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "peer": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "peer": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "peer": true + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "peer": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "peer": true, + "requires": {} + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true + } + } + }, + "@expo/code-signing-certificates": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", + "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", + "peer": true, + "requires": { + "node-forge": "^1.2.1", + "nullthrows": "^1.1.1" + } + }, + "@expo/config": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-8.1.2.tgz", + "integrity": "sha512-4e7hzPj50mQIlsrzOH6XZ36O094mPfPTIDIH4yv49bWNMc7GFLTofB/lcT+QyxiLaJuC0Wlk9yOLB8DIqmtwug==", + "peer": true, + "requires": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~7.2.0", + "@expo/config-types": "^49.0.0-alpha.1", + "@expo/json-file": "^8.2.37", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "7.5.3", + "slugify": "^1.3.4", + "sucrase": "^3.20.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "peer": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "peer": true + }, + "semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true + } + } + }, + "@expo/config-plugins": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.2.5.tgz", + "integrity": "sha512-w+5ccu1IxBHgyQk9CPFKLZOk8yZQEyTjbJwOzESK1eR7QwosbcsLkN1c1WWUZYiCXwORu3UTwJYll4+X2xxJhQ==", + "peer": true, + "requires": { + "@expo/config-types": "^49.0.0-alpha.1", + "@expo/json-file": "~8.2.37", + "@expo/plist": "^0.0.20", + "@expo/sdk-runtime-versions": "^1.0.0", + "@react-native/normalize-color": "^2.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "slash": "^3.0.0", + "xcode": "^3.0.1", + "xml2js": "0.6.0" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "peer": true + } + } + }, + "@expo/config-types": { + "version": "49.0.0", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-49.0.0.tgz", + "integrity": "sha512-8eyREVi+K2acnMBe/rTIu1dOfyR2+AMnTLHlut+YpMV9OZPdeKV0Bs9BxAewGqBA2slslbQ9N39IS2CuTKpXkA==", + "peer": true + }, + "@expo/dev-server": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@expo/dev-server/-/dev-server-0.5.5.tgz", + "integrity": "sha512-t0fT8xH1exwYsH5hh7bAt85VF+gXxg24qrbny2rR/iKoPTWFCd2JNQV8pvfLg51hvrywQ3YCBuT3lU1w7aZxFA==", + "peer": true, + "requires": { + "@expo/bunyan": "4.0.0", + "@expo/metro-config": "~0.10.0", + "@expo/osascript": "2.0.33", + "@expo/spawn-async": "^1.5.0", + "body-parser": "^1.20.1", + "chalk": "^4.0.0", + "connect": "^3.7.0", + "fs-extra": "9.0.0", + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1", + "node-fetch": "^2.6.0", + "open": "^8.3.0", + "resolve-from": "^5.0.0", + "serialize-error": "6.0.0", + "temp-dir": "^2.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "peer": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "peer": true + }, + "temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "peer": true + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "peer": true + } + } + }, + "@expo/devcert": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.0.tgz", + "integrity": "sha512-ghUVhNJQOCTdQckSGTHctNp/0jzvVoMMkVh+6SHn+TZj8sU15U/npXIDt8NtQp0HedlPaCgkVdMu8Sacne0aEA==", + "peer": true, + "requires": { + "application-config-path": "^0.1.0", + "command-exists": "^1.2.4", + "debug": "^3.1.0", + "eol": "^0.9.1", + "get-port": "^3.2.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "password-prompt": "^1.0.4", + "rimraf": "^2.6.2", + "sudo-prompt": "^8.2.0", + "tmp": "^0.0.33", + "tslib": "^2.4.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "peer": true, + "requires": { + "ms": "^2.1.1" + } + }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "peer": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "peer": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "peer": true, + "requires": { + "glob": "^7.1.3" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "peer": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "@expo/env": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.0.5.tgz", + "integrity": "sha512-UXuKAqyXfhMQC3gP0OyjXmFX08Z1fkVWiGBN7bYzfoX8LHatjeHrDtI6w5nDvd8XPxPvmqaZoEDw1lW3+dz3oQ==", + "peer": true, + "requires": { + "chalk": "^4.0.0", + "debug": "^4.3.4", + "dotenv": "~16.0.3", + "dotenv-expand": "~10.0.0", + "getenv": "^1.0.0" + }, + "dependencies": { + "dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "peer": true + } + } + }, + "@expo/image-utils": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.22.tgz", + "integrity": "sha512-uzq+RERAtkWypOFOLssFnXXqEqKjNj9eXN7e97d/EXUAojNcLDoXc0sL+F5B1I4qtlsnhX01kcpoIBBZD8wZNQ==", + "peer": true, + "requires": { + "@expo/spawn-async": "1.5.0", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp-compact": "0.16.1", + "mime": "^2.4.4", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "tempy": "0.3.0" }, "dependencies": { + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", + "peer": true + }, + "fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "peer": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "peer": true + }, "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "peer": true + }, + "tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "peer": true, + "requires": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + } + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "peer": true + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", + "peer": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "peer": true } } }, - "@babel/preset-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.5.tgz", - "integrity": "sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==", + "@expo/json-file": { + "version": "8.2.37", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.37.tgz", + "integrity": "sha512-YaH6rVg11JoTS2P6LsW7ybS2CULjf40AbnAHw2F1eDPuheprNjARZMnyHFPkKv7GuxCy+B9GPcbOKgc4cgA80Q==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-transform-flow-strip-types": "^7.22.5" - } - }, - "@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.2", + "write-file-atomic": "^2.3.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "peer": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "peer": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + } } }, - "@babel/preset-react": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", - "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", + "@expo/metro-config": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.10.7.tgz", + "integrity": "sha512-uACymEiyX0447hI4unt+2cemLQkTZXKvTev936NhtsgVnql45EP0V0pzmo/0H0WlHaAGXgvOBZJl8wFqcJ3CbQ==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-transform-react-display-name": "^7.22.5", - "@babel/plugin-transform-react-jsx": "^7.22.5", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.22.5" + "@expo/config": "~8.1.0", + "@expo/env": "0.0.5", + "@expo/json-file": "~8.2.37", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "find-yarn-workspace-root": "~2.0.0", + "getenv": "^1.0.0", + "jsc-safe-url": "^0.2.4", + "lightningcss": "~1.19.0", + "postcss": "~8.4.21", + "resolve-from": "^5.0.0", + "sucrase": "^3.20.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "peer": true + } } }, - "@babel/preset-typescript": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.11.tgz", - "integrity": "sha512-tWY5wyCZYBGY7IlalfKI1rLiGlIfnwsRHZqlky0HVv8qviwQ1Uo/05M6+s+TcTCVa6Bmoo2uJW5TMFX6Wa4qVg==", + "@expo/osascript": { + "version": "2.0.33", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.0.33.tgz", + "integrity": "sha512-FQinlwHrTlJbntp8a7NAlCKedVXe06Va/0DSLXRO8lZVtgbEMrYYSUZWQNcOlNtc58c2elNph6z9dMOYwSo3JQ==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.11", - "@babel/plugin-transform-typescript": "^7.22.11" + "@expo/spawn-async": "^1.5.0", + "exec-async": "^2.2.0" } }, - "@babel/register": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz", - "integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==", + "@expo/package-manager": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.0.2.tgz", + "integrity": "sha512-dlUp6o8qs1mi3/+l3y7cY3oMoqQVVzvH18cUTi6+t4ob8XwTpaeP2SwOP+obwZN29dMg9YzZAv4eQz+mshAbQA==", "peer": true, "requires": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" + "@expo/json-file": "^8.2.37", + "@expo/spawn-async": "^1.5.0", + "ansi-regex": "^5.0.0", + "chalk": "^4.0.0", + "find-up": "^5.0.0", + "find-yarn-workspace-root": "~2.0.0", + "js-yaml": "^3.13.1", + "micromatch": "^4.0.2", + "npm-package-arg": "^7.0.0", + "split": "^1.0.1", + "sudo-prompt": "9.1.1" }, "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "peer": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "sprintf-js": "~1.0.2" } }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", "peer": true }, + "hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "peer": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "npm-package-arg": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", + "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", + "peer": true, + "requires": { + "hosted-git-info": "^3.0.2", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, "semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "peer": true + }, + "sudo-prompt": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", + "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==", + "peer": true + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "peer": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true } } }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, - "@babel/runtime": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz", - "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==", - "requires": { - "regenerator-runtime": "^0.14.0" - } - }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "@expo/plist": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.20.tgz", + "integrity": "sha512-UXQ4LXCfTZ580LDHGJ5q62jSTwJFFJ1GqBu8duQMThiHKWbMJ+gajJh6rsB6EJ3aLUr9wcauxneL5LVRFxwBEA==", + "peer": true, "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@xmldom/xmldom": "~0.7.7", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" } }, - "@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", + "@expo/prebuild-config": { + "version": "6.2.6", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-6.2.6.tgz", + "integrity": "sha512-uFVvDAm9dPg9p1qpnr4CVnpo2hmkZIL5FQz+VlIdXXJpe7ySh/qTGHtKWY/lWUshQkAJ0nwbKGPztGWdABns/Q==", + "peer": true, "requires": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.11", - "@babel/types": "^7.22.11", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@expo/config": "~8.1.0", + "@expo/config-plugins": "~7.2.0", + "@expo/config-types": "^49.0.0-alpha.1", + "@expo/image-utils": "0.3.22", + "@expo/json-file": "^8.2.37", + "debug": "^4.3.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0", + "semver": "7.5.3", + "xml2js": "0.6.0" }, "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "peer": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "peer": true + }, + "semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true } } }, - "@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "@expo/rudder-sdk-node": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", + "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", + "peer": true, "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" + "@expo/bunyan": "^4.0.0", + "@segment/loosely-validate-event": "^2.0.0", + "fetch-retry": "^4.1.1", + "md5": "^2.2.1", + "node-fetch": "^2.6.1", + "remove-trailing-slash": "^0.1.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "peer": true + } } }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - }, - "@bergos/jsonparse": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@bergos/jsonparse/-/jsonparse-1.4.1.tgz", - "integrity": "sha512-vXIT0nzZGX/+yMD5bx2VhTzc92H55tPoehh1BW/FZHOndWGFddrH3MAfdx39FRc7irABirW6EQaGxIJYV6CGuA==", - "requires": { - "buffer": "^6.0.3" - } + "@expo/sdk-runtime-versions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", + "peer": true }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "devOptional": true, + "@expo/spawn-async": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", + "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", + "peer": true, "requires": { - "@jridgewell/trace-mapping": "0.3.9" + "cross-spawn": "^6.0.5" }, "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "devOptional": true, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "peer": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "peer": true + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "peer": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "peer": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "peer": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "requires": { + "isexe": "^2.0.0" } } } }, - "@csstools/normalize.css": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", - "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" - }, - "@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "requires": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - } - }, - "@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } + "@expo/vector-icons": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-13.0.0.tgz", + "integrity": "sha512-TI+l71+5aSKnShYclFa14Kum+hQMZ86b95SH6tQUG3qZEmLTarvWpKwqtTwQKqvlJSJrpFiSFu3eCuZokY6zWA==", + "peer": true }, - "@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "@expo/xcpretty": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.2.2.tgz", + "integrity": "sha512-Lke/geldJqUV0Dfxg5/QIOugOzdqZ/rQ9yHKSgGbjZtG1uiSqWyFwWvXmrdd3/sIdX33eykGvIcf+OrvvcXVUw==", + "peer": true, "requires": { - "postcss-value-parser": "^4.2.0" + "@babel/code-frame": "7.10.4", + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "js-yaml": "^4.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "peer": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + } } }, - "@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "requires": { - "postcss-value-parser": "^4.2.0" - } + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "peer": true }, - "@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } + "@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "peer": true, + "requires": {} }, - "@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "peer": true + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "peer": true, "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" + "@hapi/hoek": "^9.0.0" } }, - "@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "@humanwhocodes/config-array": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "requires": { - "postcss-value-parser": "^4.2.0" + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" } }, - "@csstools/postcss-normalize-display-values": { + "@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "requires": { - "postcss-value-parser": "^4.2.0" - } + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" }, - "@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, - "@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } + "@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true }, - "@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "@inrupt/oidc-client": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@inrupt/oidc-client/-/oidc-client-1.11.6.tgz", + "integrity": "sha512-1rCTk1T6pdm/7gKozutZutk7jwmYBADlnkGGoI5ypke099NOCa5KFXjkQpbjsps0PRkKZ+0EaR70XN5+xqmViA==", "requires": { - "postcss-value-parser": "^4.2.0" + "acorn": "^7.4.1", + "base64-js": "^1.5.1", + "core-js": "^3.8.3", + "crypto-js": "^4.0.0", + "serialize-javascript": "^4.0.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } } }, - "@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "@inrupt/oidc-client-ext": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@inrupt/oidc-client-ext/-/oidc-client-ext-1.17.1.tgz", + "integrity": "sha512-uh8ecf4xALoel6Yxlg8srsGO44JhQLjE++mdM13Fniy6TwCU+odHSnMny9afpO/HBZ6abQ02mCFiLtrufczzaA==", "requires": { - "postcss-value-parser": "^4.2.0" + "@inrupt/oidc-client": "^1.11.6", + "@inrupt/solid-client-authn-core": "^1.17.1", + "@inrupt/universal-fetch": "^1.0.1", + "jose": "^4.10.0", + "uuid": "^9.0.0" } }, - "@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "@inrupt/solid-client": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@inrupt/solid-client/-/solid-client-1.30.0.tgz", + "integrity": "sha512-iRyLqM9k5W0IiRHZz+dGsa+94pu8cGqjRB5B8s+YhLlNQH/fY6Xmu21f1zl1uKWebc4PBlAJPcBcR46RVXlCJQ==", "requires": { - "postcss-value-parser": "^4.2.0" + "@inrupt/universal-fetch": "^1.0.1", + "@rdfjs/dataset": "^1.1.0", + "@types/rdfjs__dataset": "^1.0.4", + "buffer": "^6.0.3", + "fsevents": "^2.3.2", + "http-link-header": "^1.1.0", + "jsonld-context-parser": "^2.3.0", + "jsonld-streaming-parser": "^3.2.0", + "n3": "^1.10.0", + "uuid": "^9.0.0" } }, - "@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "requires": {} - }, - "@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", - "requires": {} - }, - "@digitalbazaar/http-client": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-1.2.0.tgz", - "integrity": "sha512-W9KQQ5pUJcaR0I4c2HPJC0a7kRbZApIorZgPnEDwMBgj16iQzutGLrCXYaZOmxqVLVNqqlQ4aUJh+HBQZy4W6Q==", - "dev": true, + "@inrupt/solid-client-authn-browser": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/@inrupt/solid-client-authn-browser/-/solid-client-authn-browser-1.12.3.tgz", + "integrity": "sha512-13w9iQPOl9bzL46AXRKt9R2A0lJbotMFJM754j4CTBNRpCphb49Gd/Q2hQqjSFB++oOVNxfl1dhpT+x13libjw==", "requires": { - "esm": "^3.2.22", - "ky": "^0.25.1", - "ky-universal": "^0.8.2" + "@inrupt/oidc-client-ext": "^1.12.3", + "@inrupt/solid-client-authn-core": "^1.12.3", + "@types/lodash.clonedeep": "^4.5.6", + "@types/node": "^18.0.3", + "@types/uuid": "^8.3.0", + "events": "^3.3.0", + "jose": "^4.3.7", + "lodash.clonedeep": "^4.5.0", + "uuid": "^9.0.0" + }, + "dependencies": { + "@types/node": { + "version": "18.17.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.12.tgz", + "integrity": "sha512-d6xjC9fJ/nSnfDeU0AMDsaJyb1iHsqCSOdi84w4u+SlN/UgQdY5tRhpMzaFYsI4mnpvgTivEaQd0yOUhAtOnEQ==" + } } }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "@inrupt/solid-client-authn-core": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@inrupt/solid-client-authn-core/-/solid-client-authn-core-1.17.1.tgz", + "integrity": "sha512-UKTtZH0lISgWaiUYRr0zRkvFHIjYzVaWEC0IJoLUFIEfJdYogMXmPKoHyJEw7MdJ6qVYMLdPo9k2OSLfdUfYjA==", "requires": { - "eslint-visitor-keys": "^3.3.0" + "@inrupt/universal-fetch": "^1.0.1", + "events": "^3.3.0", + "jose": "^4.10.0", + "uuid": "^9.0.0" } }, - "@eslint-community/regexpp": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", - "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==" - }, - "@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "@inrupt/solid-client-authn-node": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/@inrupt/solid-client-authn-node/-/solid-client-authn-node-1.12.3.tgz", + "integrity": "sha512-8uKsRZY6nyuCJEgvmeo28IAL6yL4E6lmpPYlxAPa/0uYm29Ubb3kl+QknbAjBW/p672nc0JEdEu8CiOZLh80Ew==", "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@inrupt/solid-client-authn-core": "^1.12.3", + "cross-fetch": "^3.1.5", + "jose": "^4.3.7", + "openid-client": "^5.1.0", + "uuid": "^9.0.0" } }, - "@eslint/js": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", - "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==" - }, - "@expo/bunyan": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", - "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", - "peer": true, + "@inrupt/universal-fetch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inrupt/universal-fetch/-/universal-fetch-1.0.3.tgz", + "integrity": "sha512-AP/nMOuuKvR2YoQkdS77ntuuq5ZYDGStI8Uirp1MCsyPSoBLyNnRjMLjlGqIlaC+5Xp7TYZJ9z/Kl2uUEpXUFw==", "requires": { - "mv": "~2", - "safe-json-stringify": "~1", - "uuid": "^8.0.0" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "peer": true - } + "node-fetch": "^2.6.7", + "undici": "^5.19.1" } }, - "@expo/cli": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.10.11.tgz", - "integrity": "sha512-ehaAOw4SwkJ9uL5z9c3RD4LJpmMDCXZBCWZG4fonUGutks4t/GLoNRcdENkWsf6NSgkdPNgNl8KwphU1p083PQ==", - "peer": true, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "requires": { - "@babel/runtime": "^7.20.0", - "@expo/code-signing-certificates": "0.0.5", - "@expo/config": "~8.1.0", - "@expo/config-plugins": "~7.2.0", - "@expo/dev-server": "0.5.5", - "@expo/devcert": "^1.0.0", - "@expo/env": "0.0.5", - "@expo/json-file": "^8.2.37", - "@expo/metro-config": "~0.10.0", - "@expo/osascript": "^2.0.31", - "@expo/package-manager": "~1.0.0", - "@expo/plist": "^0.0.20", - "@expo/prebuild-config": "6.2.6", - "@expo/rudder-sdk-node": "1.1.1", - "@expo/spawn-async": "1.5.0", - "@expo/xcpretty": "^4.2.1", - "@urql/core": "2.3.6", - "@urql/exchange-retry": "0.3.0", - "accepts": "^1.3.8", - "arg": "4.1.0", - "better-opn": "~3.0.2", - "bplist-parser": "^0.3.1", - "cacache": "^15.3.0", - "chalk": "^4.0.0", - "ci-info": "^3.3.0", - "debug": "^4.3.4", - "env-editor": "^0.4.1", - "form-data": "^3.0.1", - "freeport-async": "2.0.0", - "fs-extra": "~8.1.0", - "getenv": "^1.0.0", - "graphql": "15.8.0", - "graphql-tag": "^2.10.1", - "https-proxy-agent": "^5.0.1", - "internal-ip": "4.3.0", - "is-root": "^2.1.0", - "js-yaml": "^3.13.1", - "json-schema-deref-sync": "^0.13.0", - "md5-file": "^3.2.3", - "md5hex": "^1.0.0", - "minipass": "3.1.6", - "node-fetch": "^2.6.7", - "node-forge": "^1.3.1", - "npm-package-arg": "^7.0.0", - "ora": "3.4.0", - "pretty-bytes": "5.6.0", - "progress": "2.0.3", - "prompts": "^2.3.2", - "qrcode-terminal": "0.11.0", - "require-from-string": "^2.0.2", - "requireg": "^0.2.2", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "send": "^0.18.0", - "slugify": "^1.3.4", - "structured-headers": "^0.4.1", - "tar": "^6.0.5", - "tempy": "^0.7.1", - "terminal-link": "^2.1.1", - "text-table": "^0.2.0", - "url-join": "4.0.0", - "wrap-ansi": "^7.0.0", - "ws": "^8.12.1" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "dependencies": { - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "peer": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "peer": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "peer": true, - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "peer": true + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "peer": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "peer": true, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "peer": true, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "requires": { - "color-name": "1.1.3" + "ansi-regex": "^6.0.1" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "peer": true - }, - "fs-extra": { + "wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "peer": true, + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "peer": true, + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "minipass": "^3.0.0" + "sprintf-js": "~1.0.2" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "peer": true - }, - "hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "peer": true, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { - "lru-cache": "^6.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "peer": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "peer": true, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { - "graceful-fs": "^4.1.6" + "p-locate": "^4.1.0" } }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "peer": true, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { - "chalk": "^2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } + "p-try": "^2.0.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "peer": true, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { - "yallist": "^4.0.0" + "p-limit": "^2.2.0" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "peer": true - }, - "minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + }, + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/create-cache-key-function": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.6.3.tgz", + "integrity": "sha512-kzSK9XAxtD1kRPJKxsmD0YKw2fyXveP+5ikeQkCYCHeacWW1EGYMTgjDIM/Di4Uhttx7lnHwrNpz2xn+0rTp8g==", + "peer": true, + "requires": { + "@jest/types": "^29.6.3" + }, + "dependencies": { + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "peer": true, "requires": { - "yallist": "^4.0.0" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" } }, - "npm-package-arg": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", - "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", + "@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", "peer": true, "requires": { - "hosted-git-info": "^3.0.2", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - }, - "dependencies": { - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "peer": true - } + "@types/yargs-parser": "*" + } + } + } + }, + "@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/expect": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", + "dev": true, + "requires": { + "expect": "^29.6.4", + "jest-snapshot": "^29.6.4" + }, + "dependencies": { + "@jest/transform": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", + "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "peer": true, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" } }, - "ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", - "peer": true, + "@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dev": true, "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "peer": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "@types/yargs-parser": "*" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "peer": true + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true }, - "restore-cursor": { + "convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "peer": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "peer": true, + "expect": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", + "dev": true, "requires": { - "minipass": "^3.1.1" + "@jest/expect-utils": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "peer": true, + "jest-haste-map": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", + "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", + "dev": true, "requires": { - "unique-slug": "^2.0.0" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", + "micromatch": "^4.0.4", + "walker": "^1.0.8" } }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "peer": true, + "jest-matcher-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", + "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", + "dev": true, "requires": { - "imurmurhash": "^0.1.4" + "chalk": "^4.0.0", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "peer": true - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "peer": true, + "jest-message-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", + "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", + "dev": true, "requires": { - "builtins": "^1.0.3" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" } }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "peer": true, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true + }, + "jest-snapshot": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", + "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", + "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.6.4", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "natural-compare": "^1.4.0", + "pretty-format": "^29.6.3", + "semver": "^7.5.3" } }, - "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "peer": true, - "requires": {} - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "peer": true - } - } - }, - "@expo/code-signing-certificates": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", - "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", - "peer": true, - "requires": { - "node-forge": "^1.2.1", - "nullthrows": "^1.1.1" - } - }, - "@expo/config": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-8.1.2.tgz", - "integrity": "sha512-4e7hzPj50mQIlsrzOH6XZ36O094mPfPTIDIH4yv49bWNMc7GFLTofB/lcT+QyxiLaJuC0Wlk9yOLB8DIqmtwug==", - "peer": true, - "requires": { - "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~7.2.0", - "@expo/config-types": "^49.0.0-alpha.1", - "@expo/json-file": "^8.2.37", - "getenv": "^1.0.0", - "glob": "7.1.6", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0", - "semver": "7.5.3", - "slugify": "^1.3.4", - "sucrase": "^3.20.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "peer": true, + "jest-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", + "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", + "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" } }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "peer": true, + "jest-worker": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", + "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", + "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@types/node": "*", + "jest-util": "^29.6.3", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "peer": true, + "pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dev": true, "requires": { - "yallist": "^4.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "peer": true + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, - "semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "peer": true, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "requires": { - "lru-cache": "^6.0.0" + "has-flag": "^4.0.0" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "peer": true + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } } } }, - "@expo/config-plugins": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.2.5.tgz", - "integrity": "sha512-w+5ccu1IxBHgyQk9CPFKLZOk8yZQEyTjbJwOzESK1eR7QwosbcsLkN1c1WWUZYiCXwORu3UTwJYll4+X2xxJhQ==", - "peer": true, + "@jest/expect-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz", + "integrity": "sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==", + "dev": true, "requires": { - "@expo/config-types": "^49.0.0-alpha.1", - "@expo/json-file": "~8.2.37", - "@expo/plist": "^0.0.20", - "@expo/sdk-runtime-versions": "^1.0.0", - "@react-native/normalize-color": "^2.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.1", - "find-up": "~5.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "slash": "^3.0.0", - "xcode": "^3.0.1", - "xml2js": "0.6.0" + "jest-get-type": "^29.6.3" }, "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "peer": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "peer": true + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true } } }, - "@expo/config-types": { - "version": "49.0.0", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-49.0.0.tgz", - "integrity": "sha512-8eyREVi+K2acnMBe/rTIu1dOfyR2+AMnTLHlut+YpMV9OZPdeKV0Bs9BxAewGqBA2slslbQ9N39IS2CuTKpXkA==", - "peer": true + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } }, - "@expo/dev-server": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@expo/dev-server/-/dev-server-0.5.5.tgz", - "integrity": "sha512-t0fT8xH1exwYsH5hh7bAt85VF+gXxg24qrbny2rR/iKoPTWFCd2JNQV8pvfLg51hvrywQ3YCBuT3lU1w7aZxFA==", - "peer": true, + "@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", "requires": { - "@expo/bunyan": "4.0.0", - "@expo/metro-config": "~0.10.0", - "@expo/osascript": "2.0.33", - "@expo/spawn-async": "^1.5.0", - "body-parser": "^1.20.1", - "chalk": "^4.0.0", - "connect": "^3.7.0", - "fs-extra": "9.0.0", - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1", - "node-fetch": "^2.6.0", - "open": "^8.3.0", - "resolve-from": "^5.0.0", - "serialize-error": "6.0.0", - "temp-dir": "^2.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", - "peer": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "peer": true - }, - "temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "peer": true - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "peer": true - } + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" } }, - "@expo/devcert": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.0.tgz", - "integrity": "sha512-ghUVhNJQOCTdQckSGTHctNp/0jzvVoMMkVh+6SHn+TZj8sU15U/npXIDt8NtQp0HedlPaCgkVdMu8Sacne0aEA==", - "peer": true, + "@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", "requires": { - "application-config-path": "^0.1.0", - "command-exists": "^1.2.4", - "debug": "^3.1.0", - "eol": "^0.9.1", - "get-port": "^3.2.0", + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", "glob": "^7.1.2", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "password-prompt": "^1.0.4", - "rimraf": "^2.6.2", - "sudo-prompt": "^8.2.0", - "tmp": "^0.0.33", - "tslib": "^2.4.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "peer": true, - "requires": { - "ms": "^2.1.1" - } - }, - "get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "peer": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "peer": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "peer": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - } + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" } }, - "@expo/env": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.0.5.tgz", - "integrity": "sha512-UXuKAqyXfhMQC3gP0OyjXmFX08Z1fkVWiGBN7bYzfoX8LHatjeHrDtI6w5nDvd8XPxPvmqaZoEDw1lW3+dz3oQ==", - "peer": true, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "requires": { - "chalk": "^4.0.0", - "debug": "^4.3.4", - "dotenv": "~16.0.3", - "dotenv-expand": "~10.0.0", - "getenv": "^1.0.0" - }, - "dependencies": { - "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "peer": true - } + "@sinclair/typebox": "^0.27.8" } }, - "@expo/image-utils": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.22.tgz", - "integrity": "sha512-uzq+RERAtkWypOFOLssFnXXqEqKjNj9eXN7e97d/EXUAojNcLDoXc0sL+F5B1I4qtlsnhX01kcpoIBBZD8wZNQ==", - "peer": true, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", "requires": { - "@expo/spawn-async": "1.5.0", - "chalk": "^4.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "jimp-compact": "0.16.1", - "mime": "^2.4.4", - "node-fetch": "^2.6.0", - "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "tempy": "0.3.0" - }, - "dependencies": { - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", - "peer": true - }, - "fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", - "peer": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "peer": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "peer": true - }, - "tempy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", - "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", - "peer": true, - "requires": { - "temp-dir": "^1.0.0", - "type-fest": "^0.3.1", - "unique-string": "^1.0.0" - } - }, - "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "peer": true - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", - "peer": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "peer": true - } + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" } }, - "@expo/json-file": { - "version": "8.2.37", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.37.tgz", - "integrity": "sha512-YaH6rVg11JoTS2P6LsW7ybS2CULjf40AbnAHw2F1eDPuheprNjARZMnyHFPkKv7GuxCy+B9GPcbOKgc4cgA80Q==", - "peer": true, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", "requires": { - "@babel/code-frame": "~7.10.4", - "json5": "^2.2.2", - "write-file-atomic": "^2.3.0" + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + } + }, + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "peer": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "peer": true, + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "requires": { - "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } } } }, - "@expo/metro-config": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.10.7.tgz", - "integrity": "sha512-uACymEiyX0447hI4unt+2cemLQkTZXKvTev936NhtsgVnql45EP0V0pzmo/0H0WlHaAGXgvOBZJl8wFqcJ3CbQ==", - "peer": true, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "requires": { - "@expo/config": "~8.1.0", - "@expo/env": "0.0.5", - "@expo/json-file": "~8.2.37", - "chalk": "^4.1.0", - "debug": "^4.3.2", - "find-yarn-workspace-root": "~2.0.0", - "getenv": "^1.0.0", - "jsc-safe-url": "^0.2.4", - "lightningcss": "~1.19.0", - "postcss": "~8.4.21", - "resolve-from": "^5.0.0", - "sucrase": "^3.20.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "peer": true - } + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "@expo/osascript": { - "version": "2.0.33", - "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.0.33.tgz", - "integrity": "sha512-FQinlwHrTlJbntp8a7NAlCKedVXe06Va/0DSLXRO8lZVtgbEMrYYSUZWQNcOlNtc58c2elNph6z9dMOYwSo3JQ==", - "peer": true, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "requires": { - "@expo/spawn-async": "^1.5.0", - "exec-async": "^2.2.0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "@expo/package-manager": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.0.2.tgz", - "integrity": "sha512-dlUp6o8qs1mi3/+l3y7cY3oMoqQVVzvH18cUTi6+t4ob8XwTpaeP2SwOP+obwZN29dMg9YzZAv4eQz+mshAbQA==", - "peer": true, + "@ldo/cli": { + "version": "file:packages/cli", "requires": { - "@expo/json-file": "^8.2.37", - "@expo/spawn-async": "^1.5.0", - "ansi-regex": "^5.0.0", - "chalk": "^4.0.0", - "find-up": "^5.0.0", - "find-yarn-workspace-root": "~2.0.0", - "js-yaml": "^3.13.1", - "micromatch": "^4.0.2", - "npm-package-arg": "^7.0.0", - "split": "^1.0.1", - "sudo-prompt": "9.1.1" + "@ldo/schema-converter-shex": "^0.0.0", + "@shexjs/parser": "^1.0.0-alpha.24", + "@types/child-process-promise": "^2.2.2", + "@types/ejs": "^3.1.1", + "@types/fs-extra": "^9.0.13", + "@types/jest": "^27.0.3", + "@types/shexj": "2.1.4", + "child-process-promise": "^2.2.1", + "commander": "^9.3.0", + "copyfiles": "^2.4.1", + "ejs": "^3.1.8", + "fs-extra": "^10.1.0", + "jest": "^27.4.2", + "loading-cli": "^1.1.0", + "rimraf": "^3.0.2", + "ts-jest": "^27.0.7" }, "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "peer": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "peer": true - }, - "hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "peer": true, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "requires": { - "lru-cache": "^6.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "peer": true, + "ts-jest": { + "version": "27.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", + "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "peer": true, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "peer": true + } + } + }, + "@ldo/dataset": { + "version": "file:packages/dataset", + "requires": { + "@rdfjs/data-model": "^1.2.0", + "@rdfjs/dataset": "^1.1.0", + "@rdfjs/types": "^1.0.1", + "@types/jest": "^27.0.3", + "@types/jsonld": "^1.5.6", + "@types/n3": "^1.10.4", + "@types/rdfjs__dataset": "^1.0.4", + "@types/readable-stream": "^2.3.13", + "buffer": "^6.0.3", + "jest": "^27.4.5", + "n3": "^1.10.0", + "readable-stream": "^4.2.0", + "ts-jest": "^27.1.2", + "ts-node": "^9.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", "requires": { - "yallist": "^4.0.0" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" } }, - "npm-package-arg": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", - "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", - "peer": true, + "ts-jest": { + "version": "27.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", + "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "dev": true, "requires": { - "hosted-git-info": "^3.0.2", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" } }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "peer": true - }, - "sudo-prompt": { + "ts-node": { "version": "9.1.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", - "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==", - "peer": true - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "peer": true, + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, "requires": { - "builtins": "^1.0.3" + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, "peer": true } } }, - "@expo/plist": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.20.tgz", - "integrity": "sha512-UXQ4LXCfTZ580LDHGJ5q62jSTwJFFJ1GqBu8duQMThiHKWbMJ+gajJh6rsB6EJ3aLUr9wcauxneL5LVRFxwBEA==", - "peer": true, - "requires": { - "@xmldom/xmldom": "~0.7.7", - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0" - } - }, - "@expo/prebuild-config": { - "version": "6.2.6", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-6.2.6.tgz", - "integrity": "sha512-uFVvDAm9dPg9p1qpnr4CVnpo2hmkZIL5FQz+VlIdXXJpe7ySh/qTGHtKWY/lWUshQkAJ0nwbKGPztGWdABns/Q==", - "peer": true, + "@ldo/demo-react": { + "version": "file:packages/demo-react", "requires": { - "@expo/config": "~8.1.0", - "@expo/config-plugins": "~7.2.0", - "@expo/config-types": "^49.0.0-alpha.1", - "@expo/image-utils": "0.3.22", - "@expo/json-file": "^8.2.37", - "debug": "^4.3.1", - "fs-extra": "^9.0.0", - "resolve-from": "^5.0.0", - "semver": "7.5.3", - "xml2js": "0.6.0" + "@craco/craco": "^7.1.0", + "@ldo/cli": "^0.0.0", + "@ldo/solid-react": "^0.0.0", + "@types/jsonld": "^1.5.9", + "@types/shexj": "^2.1.4", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-scripts": "5.0.1", + "solid-authn-react-native": "^2.0.3", + "tsconfig-paths-webpack-plugin": "^4.1.0" }, "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "peer": true, + "@craco/craco": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@craco/craco/-/craco-7.1.0.tgz", + "integrity": "sha512-oRAcPIKYrfPXp9rSzlsDNeOaVtDiKhoyqSXUoqiK24jCkHr4T8m/a2f74yXIzCbIheoUWDOIfWZyRgFgT+cpqA==", + "dev": true, "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "autoprefixer": "^10.4.12", + "cosmiconfig": "^7.0.1", + "cosmiconfig-typescript-loader": "^1.0.0", + "cross-spawn": "^7.0.3", + "lodash": "^4.17.21", + "semver": "^7.3.7", + "webpack-merge": "^5.8.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "peer": true, + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", + "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", "requires": { - "yallist": "^4.0.0" + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "peer": true + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" }, - "semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "peer": true, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, "requires": { - "lru-cache": "^6.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "peer": true - } - } - }, - "@expo/rudder-sdk-node": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", - "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", - "peer": true, - "requires": { - "@expo/bunyan": "^4.0.0", - "@segment/loosely-validate-event": "^2.0.0", - "fetch-retry": "^4.1.1", - "md5": "^2.2.1", - "node-fetch": "^2.6.1", - "remove-trailing-slash": "^0.1.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "peer": true - } - } - }, - "@expo/sdk-runtime-versions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", - "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", - "peer": true - }, - "@expo/spawn-async": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", - "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", - "peer": true, - "requires": { - "cross-spawn": "^6.0.5" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "peer": true, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "peer": true - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "peer": true + "react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==" }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "peer": true, + "react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", "requires": { - "shebang-regex": "^1.0.0" + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "fsevents": "^2.3.2", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "peer": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "peer": true, + "resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "requires": { - "isexe": "^2.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } - } - } - }, - "@expo/vector-icons": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-13.0.0.tgz", - "integrity": "sha512-TI+l71+5aSKnShYclFa14Kum+hQMZ86b95SH6tQUG3qZEmLTarvWpKwqtTwQKqvlJSJrpFiSFu3eCuZokY6zWA==", - "peer": true - }, - "@expo/xcpretty": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.2.2.tgz", - "integrity": "sha512-Lke/geldJqUV0Dfxg5/QIOugOzdqZ/rQ9yHKSgGbjZtG1uiSqWyFwWvXmrdd3/sIdX33eykGvIcf+OrvvcXVUw==", - "peer": true, - "requires": { - "@babel/code-frame": "7.10.4", - "chalk": "^4.1.0", - "find-up": "^5.0.0", - "js-yaml": "^4.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "peer": true, + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "requires": { - "@babel/highlight": "^7.10.4" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "optional": true, + "peer": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true } } }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "peer": true - }, - "@graphql-typed-document-node/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "peer": true, - "requires": {} - }, - "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "peer": true - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "peer": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - }, - "@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true - }, - "@inrupt/oidc-client": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@inrupt/oidc-client/-/oidc-client-1.11.6.tgz", - "integrity": "sha512-1rCTk1T6pdm/7gKozutZutk7jwmYBADlnkGGoI5ypke099NOCa5KFXjkQpbjsps0PRkKZ+0EaR70XN5+xqmViA==", + "@ldo/jsonld-dataset-proxy": { + "version": "file:packages/jsonld-dataset-proxy", "requires": { - "acorn": "^7.4.1", - "base64-js": "^1.5.1", - "core-js": "^3.8.3", - "crypto-js": "^4.0.0", - "serialize-javascript": "^4.0.0" + "@ldo/dataset": "^0.0.0", + "@ldo/subscribable-dataset": "^0.0.0", + "@rdfjs/data-model": "^1.2.0", + "@rdfjs/types": "^1.0.1", + "@types/jest": "^27.0.3", + "@types/jsonld": "^1.5.6", + "@types/n3": "^1.10.4", + "@types/rdfjs__dataset": "^1.0.5", + "@types/shexj": "2.1.4", + "jest": "^27.4.5", + "jsonld2graphobject": "^0.0.4", + "shex-test": "^0.5.5", + "ts-jest": "^27.1.2", + "ts-node": "^10.4.0", + "tsc-watch": "^6.0.0" }, "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "n3": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/n3/-/n3-0.4.5.tgz", + "integrity": "sha512-sv4bFeqVTTj9hT/OAdndpHpECxlkmpHxdnHUkhNgx3P3Tnw2WqpTUzMEeY+ELEoeW1q6Xqq9LNO0lu/zqogIZA==", + "dev": true + }, + "shex-test": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/shex-test/-/shex-test-0.5.8.tgz", + "integrity": "sha512-wfrhu/lb2zrr4MANpoGbqLbPaoL0yOoDTJp6n/Ewtk2iEeVQD8RLYXVCMLYdmo6ccue/I/yubcIqv4p2uarCbg==", + "dev": true, + "requires": { + "n3": "^0.4.5", + "xlsx": "^0.8.0" + } + }, + "ts-jest": { + "version": "27.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", + "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + } + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "peer": true } } }, - "@inrupt/oidc-client-ext": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@inrupt/oidc-client-ext/-/oidc-client-ext-1.17.1.tgz", - "integrity": "sha512-uh8ecf4xALoel6Yxlg8srsGO44JhQLjE++mdM13Fniy6TwCU+odHSnMny9afpO/HBZ6abQ02mCFiLtrufczzaA==", - "requires": { - "@inrupt/oidc-client": "^1.11.6", - "@inrupt/solid-client-authn-core": "^1.17.1", - "@inrupt/universal-fetch": "^1.0.1", - "jose": "^4.10.0", - "uuid": "^9.0.0" - } - }, - "@inrupt/solid-client": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/@inrupt/solid-client/-/solid-client-1.30.0.tgz", - "integrity": "sha512-iRyLqM9k5W0IiRHZz+dGsa+94pu8cGqjRB5B8s+YhLlNQH/fY6Xmu21f1zl1uKWebc4PBlAJPcBcR46RVXlCJQ==", + "@ldo/ldo": { + "version": "file:packages/ldo", "requires": { - "@inrupt/universal-fetch": "^1.0.1", - "@rdfjs/dataset": "^1.1.0", - "@types/rdfjs__dataset": "^1.0.4", + "@ldo/dataset": "^0.0.0", + "@ldo/jsonld-dataset-proxy": "^0.0.0", + "@ldo/subscribable-dataset": "^0.0.0", + "@rdfjs/data-model": "^1.2.0", + "@rdfjs/types": "^1.1.0", + "@types/jest": "^27.0.3", + "@types/jsonld": "^1.5.6", + "@types/n3": "^1.10.4", + "@types/readable-stream": "^2.3.13", + "@types/shexj": "2.1.4", "buffer": "^6.0.3", - "fsevents": "^2.3.2", - "http-link-header": "^1.1.0", - "jsonld-context-parser": "^2.3.0", - "jsonld-streaming-parser": "^3.2.0", - "n3": "^1.10.0", - "uuid": "^9.0.0" - } - }, - "@inrupt/solid-client-authn-browser": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/@inrupt/solid-client-authn-browser/-/solid-client-authn-browser-1.12.3.tgz", - "integrity": "sha512-13w9iQPOl9bzL46AXRKt9R2A0lJbotMFJM754j4CTBNRpCphb49Gd/Q2hQqjSFB++oOVNxfl1dhpT+x13libjw==", - "requires": { - "@inrupt/oidc-client-ext": "^1.12.3", - "@inrupt/solid-client-authn-core": "^1.12.3", - "@types/lodash.clonedeep": "^4.5.6", - "@types/node": "^18.0.3", - "@types/uuid": "^8.3.0", - "events": "^3.3.0", - "jose": "^4.3.7", - "lodash.clonedeep": "^4.5.0", - "uuid": "^9.0.0" + "cross-fetch": "^3.1.5", + "jest": "^27.4.5", + "n3": "^1.16.2", + "readable-stream": "^4.3.0", + "ts-jest": "^27.1.2", + "ts-node": "^10.4.0" }, "dependencies": { - "@types/node": { - "version": "18.17.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.12.tgz", - "integrity": "sha512-d6xjC9fJ/nSnfDeU0AMDsaJyb1iHsqCSOdi84w4u+SlN/UgQdY5tRhpMzaFYsI4mnpvgTivEaQd0yOUhAtOnEQ==" + "readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + }, + "ts-jest": { + "version": "27.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", + "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + } + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "peer": true } } }, - "@inrupt/solid-client-authn-core": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@inrupt/solid-client-authn-core/-/solid-client-authn-core-1.17.1.tgz", - "integrity": "sha512-UKTtZH0lISgWaiUYRr0zRkvFHIjYzVaWEC0IJoLUFIEfJdYogMXmPKoHyJEw7MdJ6qVYMLdPo9k2OSLfdUfYjA==", - "requires": { - "@inrupt/universal-fetch": "^1.0.1", - "events": "^3.3.0", - "jose": "^4.10.0", - "uuid": "^9.0.0" - } - }, - "@inrupt/solid-client-authn-node": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/@inrupt/solid-client-authn-node/-/solid-client-authn-node-1.12.3.tgz", - "integrity": "sha512-8uKsRZY6nyuCJEgvmeo28IAL6yL4E6lmpPYlxAPa/0uYm29Ubb3kl+QknbAjBW/p672nc0JEdEu8CiOZLh80Ew==", - "requires": { - "@inrupt/solid-client-authn-core": "^1.12.3", - "cross-fetch": "^3.1.5", - "jose": "^4.3.7", - "openid-client": "^5.1.0", - "uuid": "^9.0.0" - } - }, - "@inrupt/universal-fetch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@inrupt/universal-fetch/-/universal-fetch-1.0.3.tgz", - "integrity": "sha512-AP/nMOuuKvR2YoQkdS77ntuuq5ZYDGStI8Uirp1MCsyPSoBLyNnRjMLjlGqIlaC+5Xp7TYZJ9z/Kl2uUEpXUFw==", - "requires": { - "node-fetch": "^2.6.7", - "undici": "^5.19.1" - } - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, + "@ldo/schema-converter-shex": { + "version": "file:packages/schema-converter-shex", "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@shexjs/parser": "^1.0.0-alpha.24", + "@types/jest": "^27.0.3", + "@types/jsonld": "^1.5.6", + "@types/shexj": "^2.1.3", + "dts-dom": "^3.6.0", + "jest": "^27.4.5", + "jsonld": "^5.2.0", + "jsonld2graphobject": "^0.0.5", + "shex-test": "^2.1.0", + "shexj-traverser": "^2.0.1", + "ts-jest": "^27.1.2" }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, + "jsonld2graphobject": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/jsonld2graphobject/-/jsonld2graphobject-0.0.5.tgz", + "integrity": "sha512-5BqfXOq96+OBjjiJNG8gQH66pYt6hW88z2SJxdvFJo4XNoVMvqAcUz+JSm/KEWS5NLRnebApEzFrYP3HUiUmYw==", "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@rdfjs/types": "^1.0.1", + "@types/jsonld": "^1.5.6", + "jsonld-context-parser": "^2.1.5", + "uuid": "^8.3.2" } }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "ts-jest": { + "version": "27.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", + "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", "dev": true, "requires": { - "ansi-regex": "^6.0.1" + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" } }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } + "peer": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" } } }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "@ldo/solid-react": { + "version": "file:packages/solid-react", "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "@babel/preset-env": "^7.22.10", + "@babel/preset-react": "^7.22.5", + "@babel/preset-typescript": "^7.22.11", + "@inrupt/solid-client": "^1.29.0", + "@ldo/cli": "^0.0.0", + "@ldo/dataset": "^0.0.0", + "@ldo/jsonld-dataset-proxy": "^0.0.0", + "@ldo/ldo": "^0.0.0", + "@ldo/subscribable-dataset": "^0.0.0", + "@rdfjs/types": "^1.1.0", + "@types/jest": "^29.0.3", + "@types/jsonld": "^1.5.8", + "@types/n3": "^1.10.4", + "@types/shexj": "2.1.4", + "cross-fetch": "^3.1.6", + "solid-authn-react-native": "^2.0.3", + "stream": "^0.0.2", + "ts-jest": "^29.0.2" }, "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "@jest/console": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", + "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", + "dev": true, + "peer": true, "requires": { - "sprintf-js": "~1.0.2" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "slash": "^3.0.0" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "@jest/core": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", + "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", + "dev": true, + "peer": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@jest/console": "^29.6.4", + "@jest/reporters": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.6.3", + "jest-config": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-resolve-dependencies": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "jest-watcher": "^29.6.4", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" } }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "@jest/environment": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", + "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", + "dev": true, + "peer": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.6.3" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "@jest/fake-timers": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", + "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", + "dev": true, + "peer": true, "requires": { - "p-locate": "^4.1.0" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "@jest/globals": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", + "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", + "dev": true, + "peer": true, "requires": { - "p-try": "^2.0.0" + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/types": "^29.6.3", + "jest-mock": "^29.6.3" + } + }, + "@jest/reporters": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", + "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", + "dev": true, + "peer": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "peer": true, "requires": { - "p-limit": "^2.2.0" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" - }, - "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/create-cache-key-function": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.6.3.tgz", - "integrity": "sha512-kzSK9XAxtD1kRPJKxsmD0YKw2fyXveP+5ikeQkCYCHeacWW1EGYMTgjDIM/Di4Uhttx7lnHwrNpz2xn+0rTp8g==", - "peer": true, - "requires": { - "@jest/types": "^29.6.3" - }, - "dependencies": { - "@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "@jest/test-result": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", + "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", + "dev": true, "peer": true, "requires": { - "@jest/schemas": "^29.6.3", + "@jest/console": "^29.6.4", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "collect-v8-coverage": "^1.0.0" } }, - "@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "@jest/test-sequencer": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", + "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", + "dev": true, "peer": true, "requires": { - "@types/yargs-parser": "*" + "@jest/test-result": "^29.6.4", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "slash": "^3.0.0" } - } - } - }, - "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - } - }, - "@jest/expect": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", - "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", - "dev": true, - "peer": true, - "requires": { - "expect": "^29.6.4", - "jest-snapshot": "^29.6.4" - }, - "dependencies": { + }, "@jest/transform": { "version": "29.6.4", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", @@ -35896,6 +38224,15 @@ "pirates": "^4.0.4", "slash": "^3.0.0", "write-file-atomic": "^4.0.2" + }, + "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "peer": true + } } }, "@jest/types": { @@ -35903,7 +38240,6 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, - "peer": true, "requires": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -35913,12 +38249,41 @@ "chalk": "^4.0.0" } }, + "@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "peer": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "peer": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "@types/jest": { + "version": "29.5.4", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.4.tgz", + "integrity": "sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A==", + "dev": true, + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, "@types/yargs": { "version": "17.0.24", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", "dev": true, - "peer": true, "requires": { "@types/yargs-parser": "*" } @@ -35927,13 +38292,79 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "babel-jest": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", + "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", + "dev": true, + "peer": true, + "requires": { + "@jest/transform": "^29.6.4", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "peer": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "peer": true, + "requires": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "peer": true }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "peer": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peer": true, + "requires": {} + }, + "emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "peer": true }, @@ -35942,7 +38373,6 @@ "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", "dev": true, - "peer": true, "requires": { "@jest/expect-utils": "^29.6.4", "jest-get-type": "^29.6.3", @@ -35951,12 +38381,170 @@ "jest-util": "^29.6.3" } }, + "istanbul-lib-instrument": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", + "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "dev": true, + "peer": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + } + }, + "jest": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", + "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", + "dev": true, + "peer": true, + "requires": { + "@jest/core": "^29.6.4", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.6.4" + } + }, + "jest-changed-files": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", + "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", + "dev": true, + "peer": true, + "requires": { + "execa": "^5.0.0", + "jest-util": "^29.6.3", + "p-limit": "^3.1.0" + } + }, + "jest-circus": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", + "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", + "dev": true, + "peer": true, + "requires": { + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "p-limit": "^3.1.0", + "pretty-format": "^29.6.3", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-cli": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", + "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/core": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + } + }, + "jest-config": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", + "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", + "dev": true, + "peer": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-jest": "^29.6.4", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.6.4", + "jest-environment-node": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-docblock": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", + "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", + "dev": true, + "peer": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", + "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.6.3", + "pretty-format": "^29.6.3" + } + }, + "jest-environment-node": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", + "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" + } + }, "jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "peer": true + "dev": true }, "jest-haste-map": { "version": "29.6.4", @@ -35979,44 +38567,155 @@ "walker": "^1.0.8" } }, - "jest-matcher-utils": { + "jest-leak-detector": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", + "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", + "dev": true, + "peer": true, + "requires": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + } + }, + "jest-matcher-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", + "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + } + }, + "jest-message-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", + "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", + "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.6.3" + } + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "peer": true + }, + "jest-resolve": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", + "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", + "dev": true, + "peer": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", + "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", + "dev": true, + "peer": true, + "requires": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.6.4" + } + }, + "jest-runner": { "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", - "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", + "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", "dev": true, "peer": true, "requires": { + "@jest/console": "^29.6.4", + "@jest/environment": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", "chalk": "^4.0.0", - "jest-diff": "^29.6.4", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.6.3", + "jest-environment-node": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-leak-detector": "^29.6.3", + "jest-message-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-util": "^29.6.3", + "jest-watcher": "^29.6.4", + "jest-worker": "^29.6.4", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" } }, - "jest-message-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", - "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", + "jest-runtime": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", + "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", "dev": true, "peer": true, "requires": { - "@babel/code-frame": "^7.12.13", + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/globals": "^29.6.4", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", + "@types/node": "*", "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "strip-bom": "^4.0.0" } }, - "jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "peer": true - }, "jest-snapshot": { "version": "29.6.4", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", @@ -36051,7 +38750,6 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", "dev": true, - "peer": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -36061,654 +38759,213 @@ "picomatch": "^2.2.3" } }, - "jest-worker": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", - "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*", - "jest-util": "^29.6.3", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "pretty-format": { + "jest-validate": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", - "dev": true, - "peer": true, - "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true, - "peer": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", + "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", "dev": true, "peer": true, "requires": { - "has-flag": "^4.0.0" + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.6.3" } }, - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "jest-watcher": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", + "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", "dev": true, "peer": true, "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - } - } - }, - "@jest/expect-utils": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz", - "integrity": "sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==", - "dev": true, - "requires": { - "jest-get-type": "^29.6.3" - }, - "dependencies": { - "jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true - } - } - }, - "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - } - }, - "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - } - }, - "@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "requires": { - "@sinclair/typebox": "^0.27.8" - } - }, - "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - } - }, - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - } - } - }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@ldo/cli": { - "version": "file:packages/cli", - "requires": { - "@ldo/schema-converter-shex": "^0.0.0", - "@shexjs/parser": "^1.0.0-alpha.24", - "@types/child-process-promise": "^2.2.2", - "@types/ejs": "^3.1.1", - "@types/fs-extra": "^9.0.13", - "@types/jest": "^27.0.3", - "@types/shexj": "2.1.4", - "child-process-promise": "^2.2.1", - "commander": "^9.3.0", - "copyfiles": "^2.4.1", - "ejs": "^3.1.8", - "fs-extra": "^10.1.0", - "jest": "^27.4.2", - "loading-cli": "^1.1.0", - "rimraf": "^3.0.2", - "ts-jest": "^27.0.7" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "ts-jest": { - "version": "27.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", - "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - } - }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "peer": true - } - } - }, - "@ldo/dataset": { - "version": "file:packages/dataset", - "requires": { - "@rdfjs/data-model": "^1.2.0", - "@rdfjs/dataset": "^1.1.0", - "@rdfjs/types": "^1.0.1", - "@types/jest": "^27.0.3", - "@types/jsonld": "^1.5.6", - "@types/n3": "^1.10.4", - "@types/rdfjs__dataset": "^1.0.4", - "@types/readable-stream": "^2.3.13", - "buffer": "^6.0.3", - "jest": "^27.4.5", - "n3": "^1.10.0", - "readable-stream": "^4.2.0", - "ts-jest": "^27.1.2", - "ts-node": "^9.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", - "requires": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - } - }, - "ts-jest": { - "version": "27.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", - "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - } - }, - "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - } - }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "peer": true - } - } - }, - "@ldo/demo-react": { - "version": "file:packages/demo-react", - "requires": { - "@craco/craco": "^7.1.0", - "@ldo/cli": "^0.0.0", - "@ldo/solid-react": "^0.0.0", - "@types/jsonld": "^1.5.9", - "@types/shexj": "^2.1.4", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-scripts": "5.0.1", - "solid-authn-react-native": "^2.0.3", - "tsconfig-paths-webpack-plugin": "^4.1.0" - }, - "dependencies": { - "@craco/craco": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@craco/craco/-/craco-7.1.0.tgz", - "integrity": "sha512-oRAcPIKYrfPXp9rSzlsDNeOaVtDiKhoyqSXUoqiK24jCkHr4T8m/a2f74yXIzCbIheoUWDOIfWZyRgFgT+cpqA==", - "dev": true, - "requires": { - "autoprefixer": "^10.4.12", - "cosmiconfig": "^7.0.1", - "cosmiconfig-typescript-loader": "^1.0.0", - "cross-spawn": "^7.0.3", - "lodash": "^4.17.21", - "semver": "^7.3.7", - "webpack-merge": "^5.8.0" - } - }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", - "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", - "requires": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.6.3", + "string-length": "^4.0.1" } }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "jest-worker": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", + "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", + "dev": true, + "peer": true, "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@types/node": "*", + "jest-util": "^29.6.3", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" } }, - "react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==" - }, - "react-scripts": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", - "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dev": true, "requires": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.1", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "fsevents": "^2.3.2", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.1", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" } }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "resolve": { "version": "1.22.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "peer": true, "requires": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } }, - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" - }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "optional": true, + "resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, "peer": true }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - } - } - }, - "@ldo/jsonld-dataset-proxy": { - "version": "file:packages/jsonld-dataset-proxy", - "requires": { - "@ldo/dataset": "^0.0.0", - "@ldo/subscribable-dataset": "^0.0.0", - "@rdfjs/data-model": "^1.2.0", - "@rdfjs/types": "^1.0.1", - "@types/jest": "^27.0.3", - "@types/jsonld": "^1.5.6", - "@types/n3": "^1.10.4", - "@types/rdfjs__dataset": "^1.0.5", - "@types/shexj": "2.1.4", - "jest": "^27.4.5", - "jsonld2graphobject": "^0.0.4", - "shex-test": "^0.5.5", - "ts-jest": "^27.1.2", - "ts-node": "^10.4.0", - "tsc-watch": "^6.0.0" - }, - "dependencies": { - "n3": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/n3/-/n3-0.4.5.tgz", - "integrity": "sha512-sv4bFeqVTTj9hT/OAdndpHpECxlkmpHxdnHUkhNgx3P3Tnw2WqpTUzMEeY+ELEoeW1q6Xqq9LNO0lu/zqogIZA==", - "dev": true + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } }, - "shex-test": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/shex-test/-/shex-test-0.5.8.tgz", - "integrity": "sha512-wfrhu/lb2zrr4MANpoGbqLbPaoL0yOoDTJp6n/Ewtk2iEeVQD8RLYXVCMLYdmo6ccue/I/yubcIqv4p2uarCbg==", + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "requires": { - "n3": "^0.4.5", - "xlsx": "^0.8.0" + "has-flag": "^4.0.0" } }, "ts-jest": { - "version": "27.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", - "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", "dev": true, "requires": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", "lodash.memoize": "4.x", "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" } }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", "dev": true, - "peer": true + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + } + } + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "peer": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "peer": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true } } }, - "@ldo/ldo": { - "version": "file:packages/ldo", + "@ldo/subscribable-dataset": { + "version": "file:packages/subscribable-dataset", "requires": { "@ldo/dataset": "^0.0.0", - "@ldo/jsonld-dataset-proxy": "^0.0.0", - "@ldo/subscribable-dataset": "^0.0.0", "@rdfjs/data-model": "^1.2.0", - "@rdfjs/types": "^1.1.0", + "@rdfjs/dataset": "^1.1.0", + "@rdfjs/types": "^1.0.1", "@types/jest": "^27.0.3", "@types/jsonld": "^1.5.6", "@types/n3": "^1.10.4", + "@types/rdfjs__dataset": "^1.0.4", "@types/readable-stream": "^2.3.13", - "@types/shexj": "2.1.4", "buffer": "^6.0.3", - "cross-fetch": "^3.1.5", "jest": "^27.4.5", - "n3": "^1.16.2", - "readable-stream": "^4.3.0", + "n3": "^1.10.0", + "readable-stream": "^4.2.0", "ts-jest": "^27.1.2", - "ts-node": "^10.4.0" + "ts-node": "^9.1.1" }, "dependencies": { "readable-stream": { @@ -36739,56 +38996,18 @@ "yargs-parser": "20.x" } }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "peer": true - } - } - }, - "@ldo/schema-converter-shex": { - "version": "file:packages/schema-converter-shex", - "requires": { - "@shexjs/parser": "^1.0.0-alpha.24", - "@types/jest": "^27.0.3", - "@types/jsonld": "^1.5.6", - "@types/shexj": "^2.1.3", - "dts-dom": "^3.6.0", - "jest": "^27.4.5", - "jsonld": "^5.2.0", - "jsonld2graphobject": "^0.0.5", - "shex-test": "^2.1.0", - "shexj-traverser": "^2.0.1", - "ts-jest": "^27.1.2" - }, - "dependencies": { - "jsonld2graphobject": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/jsonld2graphobject/-/jsonld2graphobject-0.0.5.tgz", - "integrity": "sha512-5BqfXOq96+OBjjiJNG8gQH66pYt6hW88z2SJxdvFJo4XNoVMvqAcUz+JSm/KEWS5NLRnebApEzFrYP3HUiUmYw==", - "requires": { - "@rdfjs/types": "^1.0.1", - "@types/jsonld": "^1.5.6", - "jsonld-context-parser": "^2.1.5", - "uuid": "^8.3.2" - } - }, - "ts-jest": { - "version": "27.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", - "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", "dev": true, "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" } }, "typescript": { @@ -36797,34 +39016,16 @@ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "peer": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" } } }, - "@ldo/solid-react": { - "version": "file:packages/solid-react", + "@ldo/traverser-shexj": { + "version": "file:packages/traverser-shexj", "requires": { - "@babel/preset-env": "^7.22.10", - "@babel/preset-react": "^7.22.5", - "@babel/preset-typescript": "^7.22.11", - "@inrupt/solid-client": "^1.29.0", - "@ldo/cli": "^0.0.0", - "@ldo/dataset": "^0.0.0", - "@ldo/jsonld-dataset-proxy": "^0.0.0", - "@ldo/ldo": "^0.0.0", - "@ldo/subscribable-dataset": "^0.0.0", - "@rdfjs/types": "^1.1.0", + "@ldo/type-traverser": "^0.0.0", "@types/jest": "^29.0.3", - "@types/jsonld": "^1.5.8", - "@types/n3": "^1.10.4", - "@types/shexj": "2.1.4", - "cross-fetch": "^3.1.6", - "solid-authn-react-native": "^2.0.3", - "stream": "^0.0.2", + "@types/shexj": "^2.1.3", + "jest": "^29.0.3", "ts-jest": "^29.0.2" }, "dependencies": { @@ -36833,7 +39034,6 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", "dev": true, - "peer": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -36848,7 +39048,6 @@ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", "dev": true, - "peer": true, "requires": { "@jest/console": "^29.6.4", "@jest/reporters": "^29.6.4", @@ -36885,7 +39084,6 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", "dev": true, - "peer": true, "requires": { "@jest/fake-timers": "^29.6.4", "@jest/types": "^29.6.3", @@ -36898,7 +39096,6 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", "dev": true, - "peer": true, "requires": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -36913,7 +39110,6 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", "dev": true, - "peer": true, "requires": { "@jest/environment": "^29.6.4", "@jest/expect": "^29.6.4", @@ -36926,7 +39122,6 @@ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", "dev": true, - "peer": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.6.4", @@ -36959,7 +39154,6 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, - "peer": true, "requires": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -36971,7 +39165,6 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", "dev": true, - "peer": true, "requires": { "@jest/console": "^29.6.4", "@jest/types": "^29.6.3", @@ -36984,7 +39177,6 @@ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", "dev": true, - "peer": true, "requires": { "@jest/test-result": "^29.6.4", "graceful-fs": "^4.2.9", @@ -36997,7 +39189,6 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", "dev": true, - "peer": true, "requires": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -37014,15 +39205,6 @@ "pirates": "^4.0.4", "slash": "^3.0.0", "write-file-atomic": "^4.0.2" - }, - "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "peer": true - } } }, "@jest/types": { @@ -37044,7 +39226,6 @@ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, - "peer": true, "requires": { "type-detect": "4.0.8" } @@ -37054,7 +39235,6 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "peer": true, "requires": { "@sinonjs/commons": "^3.0.0" } @@ -37089,7 +39269,6 @@ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", "dev": true, - "peer": true, "requires": { "@jest/transform": "^29.6.4", "@types/babel__core": "^7.1.14", @@ -37105,7 +39284,6 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, - "peer": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -37118,7 +39296,6 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, - "peer": true, "requires": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -37128,35 +39305,37 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "peer": true + "dev": true }, "cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "peer": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, "dedent": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", "dev": true, - "peer": true, "requires": {} }, "emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "peer": true + "dev": true }, "expect": { "version": "29.6.4", @@ -37176,7 +39355,6 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", "dev": true, - "peer": true, "requires": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -37190,7 +39368,6 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", "dev": true, - "peer": true, "requires": { "@jest/core": "^29.6.4", "@jest/types": "^29.6.3", @@ -37203,7 +39380,6 @@ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", "dev": true, - "peer": true, "requires": { "execa": "^5.0.0", "jest-util": "^29.6.3", @@ -37215,7 +39391,6 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", "dev": true, - "peer": true, "requires": { "@jest/environment": "^29.6.4", "@jest/expect": "^29.6.4", @@ -37244,7 +39419,6 @@ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", "dev": true, - "peer": true, "requires": { "@jest/core": "^29.6.4", "@jest/test-result": "^29.6.4", @@ -37265,7 +39439,6 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", "dev": true, - "peer": true, "requires": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.6.4", @@ -37296,7 +39469,6 @@ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", "dev": true, - "peer": true, "requires": { "detect-newline": "^3.0.0" } @@ -37306,7 +39478,6 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", "dev": true, - "peer": true, "requires": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -37320,7 +39491,6 @@ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", "dev": true, - "peer": true, "requires": { "@jest/environment": "^29.6.4", "@jest/fake-timers": "^29.6.4", @@ -37341,7 +39511,6 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", "dev": true, - "peer": true, "requires": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -37362,7 +39531,6 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", "dev": true, - "peer": true, "requires": { "jest-get-type": "^29.6.3", "pretty-format": "^29.6.3" @@ -37402,7 +39570,6 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", "dev": true, - "peer": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -37413,15 +39580,13 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "peer": true + "dev": true }, "jest-resolve": { "version": "29.6.4", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", "dev": true, - "peer": true, "requires": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -37439,7 +39604,6 @@ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", "dev": true, - "peer": true, "requires": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.6.4" @@ -37450,7 +39614,6 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", "dev": true, - "peer": true, "requires": { "@jest/console": "^29.6.4", "@jest/environment": "^29.6.4", @@ -37480,7 +39643,6 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", "dev": true, - "peer": true, "requires": { "@jest/environment": "^29.6.4", "@jest/fake-timers": "^29.6.4", @@ -37511,7 +39673,6 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", "dev": true, - "peer": true, "requires": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -37554,7 +39715,6 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", "dev": true, - "peer": true, "requires": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -37569,7 +39729,6 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", "dev": true, - "peer": true, "requires": { "@jest/test-result": "^29.6.4", "@jest/types": "^29.6.3", @@ -37586,7 +39745,6 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", "dev": true, - "peer": true, "requires": { "@types/node": "*", "jest-util": "^29.6.3", @@ -37616,7 +39774,6 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, - "peer": true, "requires": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -37627,15 +39784,13 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "peer": true + "dev": true }, "source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, - "peer": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -37646,7 +39801,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -37672,11 +39826,18 @@ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", "dev": true, - "peer": true, "requires": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + } } }, "wrap-ansi": { @@ -37684,7 +39845,6 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "peer": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -37696,7 +39856,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "peer": true, "requires": { "color-convert": "^2.0.1" } @@ -37708,7 +39867,6 @@ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, - "peer": true, "requires": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -37719,7 +39877,6 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "peer": true, "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -37738,36 +39895,30 @@ } } }, - "@ldo/subscribable-dataset": { - "version": "file:packages/subscribable-dataset", + "@ldo/type-traverser": { + "version": "file:packages/type-traverser", "requires": { - "@ldo/dataset": "^0.0.0", - "@rdfjs/data-model": "^1.2.0", - "@rdfjs/dataset": "^1.1.0", - "@rdfjs/types": "^1.0.1", - "@types/jest": "^27.0.3", - "@types/jsonld": "^1.5.6", - "@types/n3": "^1.10.4", - "@types/rdfjs__dataset": "^1.0.4", - "@types/readable-stream": "^2.3.13", - "buffer": "^6.0.3", - "jest": "^27.4.5", - "n3": "^1.10.0", - "readable-stream": "^4.2.0", + "@types/jest": "^27.4.0", + "@types/shexj": "^2.1.1", + "@types/uuid": "^8.3.4", + "jest": "^27.4.7", + "jsonld2graphobject": "^0.0.3", "ts-jest": "^27.1.2", - "ts-node": "^9.1.1" + "ts-node": "^10.4.0", + "uuid": "^8.3.2" }, "dependencies": { - "readable-stream": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "jsonld2graphobject": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/jsonld2graphobject/-/jsonld2graphobject-0.0.3.tgz", + "integrity": "sha512-Jn3Zdh5zfzsGZvDZVindwpY/W3cdFJ3l1FNB0ngBa79i1tcLGP7QxBYlUoA4zbjzBSJlK4X6/qicy2zF9cS/IA==", + "dev": true, "requires": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "@rdfjs/types": "^1.0.1", + "@types/jsonld": "^1.5.6", + "jsonld": "^5.2.0", + "jsonld-context-parser": "^2.1.5", + "uuid": "^8.3.2" } }, "ts-jest": { @@ -37786,26 +39937,17 @@ "yargs-parser": "20.x" } }, - "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - } - }, "typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "peer": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" } } }, @@ -52215,8 +54357,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", - "dev": true, - "peer": true + "dev": true }, "q": { "version": "1.5.1", diff --git a/package.json b/package.json index 752efaa..d1bafc0 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,7 @@ "test": "lerna run test", "build": "lerna run build", "demo-react": "lerna run start --scope @ldo/demo-react", - "lint": "lerna run lint", - "postinstall": "npm run build" + "lint": "lerna run lint" }, "devDependencies": { "@types/node": "^20.5.7", diff --git a/packages/traverser-shexj/.eslintrc b/packages/traverser-shexj/.eslintrc new file mode 100644 index 0000000..83c51a9 --- /dev/null +++ b/packages/traverser-shexj/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": ["../../.eslintrc"] +} \ No newline at end of file diff --git a/packages/traverser-shexj/README.md b/packages/traverser-shexj/README.md new file mode 100644 index 0000000..516a348 --- /dev/null +++ b/packages/traverser-shexj/README.md @@ -0,0 +1,879 @@ +# ShexJ Traverser + +Traverse a ShexJ schema with custom functionality. + +## Installation +```bash +npm i shexj-traverser +``` + +## Tutorial +This library uses `type-traverser`. To learn more about how type traverser can be used, go to the [Type Traverser Tutorial](https://github.com/o-development/type-traverser/blob/master/README.md#using-a-traverser). + +## Usage +There are two ways you can use the ShexJ-Traverser: + - A `visitor` + - A `transformer` + +### Visitor +This visitor shows all the possible visitor functions you can use. Note that you do not need to define every visitor function, only the ones you care about. + +Run `npm run start` to see this code in action. + +```typescript +const shexJVisitor = shexJTraverser.createVisitor({ + Schema: { + visitor: async (_item, _context) => { + console.log("Schema"); + }, + properties: { + startActs: async (_item, _context) => { + console.log("Schema.startActs"); + }, + start: async (_item, _context) => { + console.log("Schema.start"); + }, + imports: async (_item, _context) => { + console.log("Schema.imports"); + }, + shapes: async (_item, _context) => { + console.log("Schema.shape"); + }, + }, + }, + shapeExpr: async (_item, _context) => { + console.log("shapeExpr"); + }, + ShapeOr: { + visitor: async (_item, _context) => { + console.log("ShapeOr"); + }, + properties: { + id: async (_item, _context) => { + console.log("ShapeOr.id"); + }, + shapeExprs: async (_item, _context) => { + console.log("ShapeOr.shapeExprs"); + }, + }, + }, + ShapeAnd: { + visitor: async (_item, _context) => { + console.log("ShapeAnd"); + }, + properties: { + id: async (_item, _context) => { + console.log("ShapeAnd.id"); + }, + shapeExprs: async (_item, _context) => { + console.log("ShapeAnd.shapeExprs"); + }, + }, + }, + ShapeNot: { + visitor: async (_item, _context) => { + console.log("ShapeNot"); + }, + properties: { + id: async (_item, _context) => { + console.log("ShapeNot.id"); + }, + shapeExpr: async (_item, _context) => { + console.log("ShapeNot.shapeExpr"); + }, + }, + }, + ShapeExternal: { + visitor: async (_item, _context) => { + console.log("ShapeExternal"); + }, + properties: { + id: async (_item, _context) => { + console.log("ShapeExternal.id"); + }, + }, + }, + shapeExprRef: async (_item, _context) => { + console.log("shapeExprRef"); + }, + NodeConstraint: { + visitor: async (_item, _context) => { + console.log("NodeConstraint"); + }, + properties: { + id: async (_item, _context) => { + console.log("NodeConstraint.id"); + }, + datatype: async (_item, _context) => { + console.log("NodeConstraint.datatype"); + }, + values: async (_item, _context) => { + console.log("NodeConstraint.values"); + }, + length: async (_item, _context) => { + console.log("NodeConstraint.length"); + }, + minlength: async (_item, _context) => { + console.log("NodeConstraint.minlength"); + }, + maxlength: async (_item, _context) => { + console.log("NodeConstraint.maxlength"); + }, + pattern: async (_item, _context) => { + console.log("NodeConstraint.pattern"); + }, + flags: async (_item, _context) => { + console.log("NodeConstraint.flags"); + }, + mininclusive: async (_item, _context) => { + console.log("NodeConstraint.mininclusive"); + }, + minexclusive: async (_item, _context) => { + console.log("NodeConstraint.minexclusive"); + }, + maxinclusive: async (_item, _context) => { + console.log("NodeConstraint.maxinclusive"); + }, + maxexclusive: async (_item, _context) => { + console.log("NodeConstraint.maxexclusive"); + }, + totaldigits: async (_item, _context) => { + console.log("NodeConstraint.totaldigits"); + }, + fractiondigits: async (_item, _context) => { + console.log("NodeConstraints.fractiondigits"); + }, + }, + }, + numericLiteral: async (_item, _context) => { + console.log("numericLiteral"); + }, + valueSetValue: async (_item, _context) => { + console.log("valueSetValue"); + }, + objectValue: async (_item, _context) => { + console.log("objectValue"); + }, + ObjectLiteral: { + visitor: async (_item, _context) => { + console.log("ObjectLiteral"); + }, + properties: { + value: async (_item, _context) => { + console.log("ObjectLiteral.value"); + }, + language: async (_item, _context) => { + console.log("ObjectLiteral.language"); + }, + type: async (_item, _context) => { + console.log("ObjectLiteral.type"); + }, + }, + }, + IriStem: { + visitor: async (_item, _context) => { + console.log("IriStem"); + }, + properties: { + stem: async (_item, _context) => { + console.log("IriStem.stem"); + }, + }, + }, + IriStemRange: { + visitor: async (_item, _context) => { + console.log("IriStemRange"); + }, + properties: { + stem: async (_item, _context) => { + console.log("IriStemRange.stem"); + }, + exclusions: async (_item, _context) => { + console.log("IriStemRange.exclusions"); + }, + }, + }, + IriStemRangeStem: async (_item, _context) => { + console.log("IriStemRangeStem"); + }, + IriStemRangeExclusions: async (_item, _context) => { + console.log("IriStemRangeExclusions"); + }, + LiteralStem: { + visitor: async (_item, _context) => { + console.log("LiteralStem"); + }, + properties: { + stem: async (_item, _context) => { + console.log("LiteralStem.stem"); + }, + }, + }, + LiteralStemRange: { + visitor: async (_item, _context) => { + console.log("LiteralStemRange"); + }, + properties: { + stem: async (_item, _context) => { + console.log("LiteralStemRange.stem"); + }, + exclusions: async (_item, _context) => { + console.log("LiteralStemRange.exclusions"); + }, + }, + }, + LiteralStemRangeStem: async (_item, _context) => { + console.log("LiteralStemRangeStem"); + }, + LiteralStemRangeExclusions: async (_item, _context) => { + console.log("LiteralStemRangeExclusions"); + }, + Language: { + visitor: async (_item, _context) => { + console.log("Language"); + }, + properties: { + languageTag: async (_item, _context) => { + console.log("Language.languageTag"); + }, + }, + }, + LanguageStem: { + visitor: async (_item, _context) => { + console.log("LanguageStem"); + }, + properties: { + stem: async (_item, _context) => { + console.log("LanguageStem.stem"); + }, + }, + }, + LanguageStemRange: { + visitor: async (_item, _context) => { + console.log("LanguageStemRange"); + }, + properties: { + stem: async (_item, _context) => { + console.log("LanguageStemRange.stem"); + }, + exclusions: async (_item, _context) => { + console.log("LanguageStemRange.exclusions"); + }, + }, + }, + LanguageStemRangeStem: async (_item, _context) => { + console.log("LanguageStemRangeStem"); + }, + LanguageStemRangeExclusions: async (_item, _context) => { + console.log("LanguageStemRangeExclusions"); + }, + Wildcard: { + visitor: async (_item, _context) => { + console.log("Wildcard"); + }, + }, + Shape: { + visitor: async (_item, _context) => { + console.log("Shape"); + }, + properties: { + id: async (_item, _context) => { + console.log("Shape.id"); + }, + closed: async (_item, _context) => { + console.log("Shape.closed"); + }, + extra: async (_item, _context) => { + console.log("Shape.extra"); + }, + expression: async (_item, _context) => { + console.log("Shape.expression"); + }, + semActs: async (_item, _context) => { + console.log("Shape.semActs"); + }, + annotations: async (_item, _context) => { + console.log("Shape.annotations"); + }, + }, + }, + tripleExpr: async (_item, _context) => { + console.log("tripleExpr"); + }, + EachOf: { + visitor: async (_item, _context) => { + console.log("EachOf"); + }, + properties: { + expressions: async (_item, _context) => { + console.log("EachOf.expressions"); + }, + id: async (_item, _context) => { + console.log("EachOf.id"); + }, + min: async (_item, _context) => { + console.log("EachOf.min"); + }, + max: async (_item, _context) => { + console.log("EachOf.max"); + }, + semActs: async (_item, _context) => { + console.log("EachOf.semActs"); + }, + annotations: async (_item, _context) => { + console.log("EachOf.annotations"); + }, + }, + }, + OneOf: { + visitor: async (_item, _context) => { + console.log("OneOf"); + }, + properties: { + expressions: async (_item, _context) => { + console.log("OneOf.expressions"); + }, + id: async (_item, _context) => { + console.log("OneOf.id"); + }, + min: async (_item, _context) => { + console.log("OneOf.min"); + }, + max: async (_item, _context) => { + console.log("OneOf.max"); + }, + semActs: async (_item, _context) => { + console.log("OneOf.semActs"); + }, + annotations: async (_item, _context) => { + console.log("OneOf.annotations"); + }, + }, + }, + TripleConstraint: { + visitor: async (_item, _context) => { + console.log("TripleConstraint"); + }, + properties: { + inverse: async (_item, _context) => { + console.log("TripleConstraint.inverse"); + }, + predicate: async (_item, _context) => { + console.log("TripleConstraint.predicate"); + }, + valueExpr: async (_item, _context) => { + console.log("TripleConstraint.valueExpr"); + }, + id: async (_item, _context) => { + console.log("TripleConstraint.id"); + }, + min: async (_item, _context) => { + console.log("TripleConstraint.min"); + }, + max: async (_item, _context) => { + console.log("TripleConstraint.max"); + }, + semActs: async (_item, _context) => { + console.log("TripleConstraint.semActs"); + }, + annotations: async (_item, _context) => { + console.log("TripleConstraint.annotations"); + }, + }, + }, + tripleExprRef: async (_item, _context) => { + console.log("tripleExprRef"); + }, + SemAct: { + visitor: async (_item, _context) => { + console.log("SemAct"); + }, + properties: { + name: async (_item, _context) => { + console.log("SemAct.name"); + }, + code: async (_item, _context) => { + console.log("SemAct.code"); + }, + }, + }, + Annotation: { + visitor: async (_item, _context) => { + console.log("Annotation"); + }, + properties: { + predicate: async (_item, _context) => { + console.log("Annotation.predicate"); + }, + object: async (_item, _context) => { + console.log("Annotation.object"); + }, + }, + }, + IRIREF: async (_item, _context) => { + console.log("IRIREF"); + }, + STRING: async (_item, _context) => { + console.log("STRING"); + }, + LANGTAG: async (_item, _context) => { + console.log("LANGTAG"); + }, + INTEGER: async (_item, _context) => { + console.log("INTEGER"); + }, + BOOL: async (_item, _context) => { + console.log("BOOL"); + }, + IRI: async (_item, _context) => { + console.log("IRI"); + }, +}); + +/** + * Sample Data + */ +const simpleSchema: Schema = { + type: "Schema", + shapes: [ + { + type: "Shape", + id: "http://shex.io/webapps/shex.js/doc/EmployeeShape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/givenName", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 1, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/familyName", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/phone", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/mbox", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + }, + ], + }, + }, + ], + "@context": "http://www.w3.org/ns/shex.jsonld", +}; + +await shexJVisitor.visit(simpleSchema, "Schema", undefined); +// Logs: +// Schema +// Schema.startActs +// Schema.start +// Schema.imports +// Schema.shape +// shapeExpr +// Shape +// Shape.id +// shapeExprRef +// Shape.closed +// Shape.extra +// Shape.expression +// tripleExpr +// EachOf +// EachOf.expressions +// tripleExpr +// TripleConstraint +// TripleConstraint.inverse +// TripleConstraint.predicate +// IRIREF +// TripleConstraint.valueExpr +// shapeExpr +// NodeConstraint +// NodeConstraint.id +// NodeConstraint.datatype +// IRIREF +// NodeConstraint.values +// NodeConstraint.length +// NodeConstraint.minlength +// NodeConstraint.maxlength +// NodeConstraint.pattern +// NodeConstraint.flags +// NodeConstraint.mininclusive +// NodeConstraint.minexclusive +// NodeConstraint.maxinclusive +// NodeConstraint.maxexclusive +// NodeConstraint.totaldigits +// NodeConstraints.fractiondigits +// TripleConstraint.id +// TripleConstraint.min +// INTEGER +// TripleConstraint.max +// INTEGER +// TripleConstraint.semActs +// TripleConstraint.annotations +// tripleExpr +// TripleConstraint +// TripleConstraint.inverse +// TripleConstraint.predicate +// IRIREF +// TripleConstraint.valueExpr +// shapeExpr +// NodeConstraint +// NodeConstraint.id +// NodeConstraint.datatype +// NodeConstraint.values +// NodeConstraint.length +// NodeConstraint.minlength +// NodeConstraint.maxlength +// NodeConstraint.pattern +// NodeConstraint.flags +// NodeConstraint.mininclusive +// NodeConstraint.minexclusive +// NodeConstraint.maxinclusive +// NodeConstraint.maxexclusive +// NodeConstraint.totaldigits +// NodeConstraints.fractiondigits +// TripleConstraint.id +// TripleConstraint.min +// TripleConstraint.max +// TripleConstraint.semActs +// TripleConstraint.annotations +// tripleExpr +// TripleConstraint +// TripleConstraint.inverse +// TripleConstraint.predicate +// IRIREF +// TripleConstraint.valueExpr +// shapeExpr +// NodeConstraint +// NodeConstraint.id +// NodeConstraint.datatype +// NodeConstraint.values +// NodeConstraint.length +// NodeConstraint.minlength +// NodeConstraint.maxlength +// NodeConstraint.pattern +// NodeConstraint.flags +// NodeConstraint.mininclusive +// NodeConstraint.minexclusive +// NodeConstraint.maxinclusive +// NodeConstraint.maxexclusive +// NodeConstraint.totaldigits +// NodeConstraints.fractiondigits +// TripleConstraint.id +// TripleConstraint.min +// INTEGER +// TripleConstraint.max +// TripleConstraint.semActs +// TripleConstraint.annotations +// tripleExpr +// TripleConstraint +// TripleConstraint.inverse +// TripleConstraint.predicate +// IRIREF +// TripleConstraint.valueExpr +// shapeExpr +// NodeConstraint +// NodeConstraint.id +// NodeConstraint.datatype +// NodeConstraint.values +// NodeConstraint.length +// NodeConstraint.minlength +// NodeConstraint.maxlength +// NodeConstraint.pattern +// NodeConstraint.flags +// NodeConstraint.mininclusive +// NodeConstraint.minexclusive +// NodeConstraint.maxinclusive +// NodeConstraint.maxexclusive +// NodeConstraint.totaldigits +// NodeConstraints.fractiondigits +// TripleConstraint.id +// TripleConstraint.min +// TripleConstraint.max +// TripleConstraint.semActs +// TripleConstraint.annotations +// EachOf.id +// EachOf.min +// EachOf.max +// EachOf.semActs +// EachOf.annotations +// Shape.semActs +// Shape.annotations +``` + +### Transformer +This transformer shows all the possible return types. Note that you do not need to define every return type yourself. This library will automatically deduce return types. + +```typescript +const shexJTransformer = shexJTraverser.createTransformer< + { + Schema: { + return: string; + properties: { + startActs: string; + start: string; + imports: string; + shapes: string; + }; + }; + shapeExpr: { + return: string; + }; + ShapeOr: { + return: string; + properties: { + id: string; + shapeExprs: string; + }; + }; + ShapeAnd: { + return: string; + properties: { + id: string; + shapeExprs: string; + }; + }; + ShapeNot: { + return: string; + properties: { + id: string; + shapeExpr: string; + }; + }; + ShapeExternal: { + return: string; + properties: { + id: string; + }; + }; + shapeExprRef: { + return: string; + }; + NodeConstraint: { + return: string; + properties: { + id: string; + datatype: string; + values: string; + length: string; + minlength: string; + maxlength: string; + pattern: string; + flags: string; + mininclusive: string; + minexclusive: string; + maxinclusive: string; + maxexclusive: string; + totaldigits: string; + fractiondigits: string; + }; + }; + numericLiteral: { + return: string; + }; + valueSetValue: { + return: string; + }; + objectValue: { + return: string; + }; + ObjectLiteral: { + return: string; + properties: { + value: string; + language: string; + type: string; + }; + }; + IriStem: { + return: string; + properties: { + stem: string; + }; + }; + IriStemRange: { + return: string; + properties: { + stem: string; + exclusions: string; + }; + }; + IriStemRangeStem: { + return: string; + }; + IriStemRangeExclusions: { + return: string; + }; + LiteralStem: { + return: string; + properties: { + stem: string; + }; + }; + LiteralStemRange: { + return: string; + properties: { + stem: string; + exclusions: string; + }; + }; + LiteralStemRangeStem: { + return: string; + }; + LiteralStemRangeExclusions: { + return: string; + }; + Language: { + return: string; + properties: { + languageTag: string; + }; + }; + LanguageStem: { + return: string; + properties: { + stem: string; + }; + }; + LanguageStemRangeStem: { + return: string; + }; + LanguageStemRangeExclusions: { + return: string; + }; + Wildcard: { + return: string; + }; + Shape: { + return: string; + properties: { + id: string; + closed: string; + extra: string; + expression: string; + semActs: string; + annotations: string; + }; + }; + tripleExpr: { + return: string; + }; + EachOf: { + return: string; + properties: { + expressions: string; + id: string; + min: string; + max: string; + semActs: string; + annotations: string; + }; + }; + OneOf: { + return: string; + properties: { + expressions: string; + id: string; + min: string; + max: string; + semActs: string; + annotations: string; + }; + }; + TripleConstraint: { + return: string; + properties: { + inverse: string; + predicate: string; + valueExpr: string; + id: string; + min: string; + max: string; + semActs: string; + annotations: string; + }; + }; + tripleExprRef: { + return: string; + }; + SemAct: { + return: string; + properties: { + name: string; + code: string; + }; + }; + Annotation: { + return: string; + properties: { + predicate: string; + object: string; + }; + }; + IRIREF: { + return: string; + }; + STRING: { + return: string; + }; + LANGTAG: { + return: string; + }; + INTEGER: { + return: string; + }; + BOOL: { + return: string; + }; + IRI: { + return: string; + }; + }, + undefined +>({ + Schema: { + transformer: async ( + item, + getTransformedChildren, + _setReturnPointer, + _context + ) => { + const children: { + startActs: string; + start: string; + imports: string; + shapes: string; + } = await getTransformedChildren(); + return `Transformer(startActs:${children.startActs},start:${children.start},imports:${children.imports},shapes:${children.shapes})`; + }, + }, + // ... +}); +``` + + + +## Liscense +MIT \ No newline at end of file diff --git a/packages/traverser-shexj/jest.config.js b/packages/traverser-shexj/jest.config.js new file mode 100644 index 0000000..bad5f64 --- /dev/null +++ b/packages/traverser-shexj/jest.config.js @@ -0,0 +1,6 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +const sharedConfig = require("../../jest.config.js"); +module.exports = { + ...sharedConfig, + rootDir: "./", +}; diff --git a/packages/traverser-shexj/package.json b/packages/traverser-shexj/package.json new file mode 100644 index 0000000..48d0278 --- /dev/null +++ b/packages/traverser-shexj/package.json @@ -0,0 +1,34 @@ +{ + "name": "@ldo/traverser-shexj", + "version": "0.0.0", + "description": "A type-traverser for ShexJ", + "main": "dist/index.js", + "scripts": { + "build": "tsc --project tsconfig.build.json", + "test": "jest --coverage", + "prepublishOnly": "npm run test && npm run build", + "lint": "eslint src/** --fix --no-error-on-unmatched-pattern" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/o-development/json-ld-shex-mapper.git" + }, + "author": "", + "license": "MIT", + "bugs": { + "url": "https://github.com/o-development/json-ld-shex-mapper/issues" + }, + "homepage": "https://github.com/o-development/json-ld-shex-mapper#readme", + "devDependencies": { + "@types/shexj": "^2.1.3", + "@types/jest": "^29.0.3", + "jest": "^29.0.3", + "ts-jest": "^29.0.2" + }, + "files": [ + "dist" + ], + "dependencies": { + "@ldo/type-traverser": "^0.0.0" + } +} diff --git a/packages/traverser-shexj/src/ShexJTraverser.ts b/packages/traverser-shexj/src/ShexJTraverser.ts new file mode 100644 index 0000000..199e908 --- /dev/null +++ b/packages/traverser-shexj/src/ShexJTraverser.ts @@ -0,0 +1,7 @@ +import { ShexJTraverserDefinition } from "./ShexJTraverserDefinition"; +import type { ShexJTraverserTypes } from "./ShexJTraverserTypes"; +import { Traverser } from "@ldo/type-traverser"; + +export const ShexJTraverser = new Traverser( + ShexJTraverserDefinition, +); diff --git a/packages/traverser-shexj/src/ShexJTraverserDefinition.ts b/packages/traverser-shexj/src/ShexJTraverserDefinition.ts new file mode 100644 index 0000000..9f56c45 --- /dev/null +++ b/packages/traverser-shexj/src/ShexJTraverserDefinition.ts @@ -0,0 +1,303 @@ +import type { ShexJTraverserTypes } from "."; +import type { TraverserDefinition } from "@ldo/type-traverser"; +import type { shapeExpr, valueSetValue } from "shexj"; + +export const ShexJTraverserDefinition: TraverserDefinition = + { + Schema: { + kind: "interface", + properties: { + startActs: "SemAct", + start: "shapeExprOrRef", + imports: "IRIREF", + shapes: "ShapeDecl", + }, + }, + ShapeDecl: { + kind: "interface", + properties: { + id: "shapeDeclLabel", + abstract: "BOOL", + restricts: "shapeExprOrRef", + shapeExpr: "shapeExpr", + }, + }, + shapeExpr: { + kind: "union", + selector: (item: shapeExpr) => item.type, + }, + shapeExprOrRef: { + kind: "union", + selector: (item) => + typeof item === "string" ? "shapeDeclRef" : "shapeExpr", + }, + ShapeOr: { + kind: "interface", + properties: { + shapeExprs: "shapeExprOrRef", + }, + }, + ShapeAnd: { + kind: "interface", + properties: { + shapeExprs: "shapeExprOrRef", + }, + }, + ShapeNot: { + kind: "interface", + properties: { + shapeExpr: "shapeExprOrRef", + }, + }, + ShapeExternal: { + kind: "interface", + properties: {}, + }, + shapeDeclRef: { + kind: "union", + selector: () => "shapeDeclLabel", + }, + shapeDeclLabel: { + kind: "union", + selector: () => "IRIREF", + }, + NodeConstraint: { + kind: "interface", + properties: { + datatype: "IRIREF", + values: "valueSetValue", + length: "INTEGER", + minlength: "INTEGER", + maxlength: "INTEGER", + pattern: "STRING", + flags: "STRING", + mininclusive: "numericLiteral", + minexclusive: "numericLiteral", + totaldigits: "INTEGER", + fractiondigits: "INTEGER", + semActs: "SemAct", + annotations: "Annotation", + }, + }, + numericLiteral: { + kind: "union", + selector: () => "DOUBLE", + }, + valueSetValue: { + kind: "union", + selector: (item: valueSetValue) => { + if (typeof item === "string") { + return "objectValue"; + } else if ( + item.type && + [ + "IriStem", + "IriStemRange", + "LiteralStem", + "LiteralStemRange", + "Language", + "LanguageStem", + "LanguageStemRange", + ].includes(item.type) + ) { + return item.type as + | "IriStem" + | "IriStemRange" + | "LiteralStem" + | "LiteralStemRange" + | "Language" + | "LanguageStem" + | "LanguageStemRange"; + } else { + return "objectValue"; + } + }, + }, + objectValue: { + kind: "union", + selector: (item) => + typeof item === "string" ? "IRIREF" : "ObjectLiteral", + }, + ObjectLiteral: { + kind: "interface", + properties: { + value: "STRING", + language: "STRING", + type: "STRING", + }, + }, + IriStem: { + kind: "interface", + properties: { + stem: "IRIREF", + }, + }, + IriStemRange: { + kind: "interface", + properties: { + stem: "IRIREF", + exclusions: "IriStemRangeExclusions", + }, + }, + IriStemRangeExclusions: { + kind: "union", + selector: (item) => (typeof item === "string" ? "IRIREF" : "IriStem"), + }, + LiteralStem: { + kind: "interface", + properties: { + stem: "STRING", + }, + }, + LiteralStemRange: { + kind: "interface", + properties: { + stem: "LiteralStemRangeStem", + exclusions: "LiteralStemRangeExclusions", + }, + }, + LiteralStemRangeStem: { + kind: "union", + selector: (item) => (typeof item === "string" ? "STRING" : "Wildcard"), + }, + LiteralStemRangeExclusions: { + kind: "union", + selector: (item) => (typeof item === "string" ? "STRING" : "LiteralStem"), + }, + Language: { + kind: "interface", + properties: { + languageTag: "LANGTAG", + }, + }, + LanguageStem: { + kind: "interface", + properties: { + stem: "LANGTAG", + }, + }, + LanguageStemRange: { + kind: "interface", + properties: { + stem: "LanguageStemRangeStem", + exclusions: "LanguageStemRangeExclusions", + }, + }, + LanguageStemRangeStem: { + kind: "union", + selector: (item) => (typeof item === "string" ? "LANGTAG" : "Wildcard"), + }, + LanguageStemRangeExclusions: { + kind: "union", + selector: (item) => + typeof item === "string" ? "LANGTAG" : "LanguageStem", + }, + Wildcard: { + kind: "interface", + properties: {}, + }, + Shape: { + kind: "interface", + properties: { + closed: "BOOL", + extra: "IRIREF", + extends: "shapeExprOrRef", + expression: "tripleExprOrRef", + semActs: "SemAct", + annotations: "Annotation", + }, + }, + tripleExpr: { + kind: "union", + selector: (item) => item.type, + }, + tripleExprOrRef: { + kind: "union", + selector: (item) => + typeof item === "string" ? "tripleExprRef" : "tripleExpr", + }, + EachOf: { + kind: "interface", + properties: { + id: "tripleExprLabel", + min: "INTEGER", + max: "INTEGER", + expressions: "tripleExprOrRef", + semActs: "SemAct", + annotations: "Annotation", + }, + }, + OneOf: { + kind: "interface", + properties: { + id: "tripleExprLabel", + min: "INTEGER", + max: "INTEGER", + expressions: "tripleExprOrRef", + semActs: "SemAct", + annotations: "Annotation", + }, + }, + TripleConstraint: { + kind: "interface", + properties: { + id: "tripleExprLabel", + min: "INTEGER", + max: "INTEGER", + inverse: "BOOL", + predicate: "IRIREF", + valueExpr: "shapeExprOrRef", + semActs: "SemAct", + annotations: "Annotation", + }, + }, + tripleExprRef: { + kind: "union", + selector: () => "tripleExprLabel", + }, + tripleExprLabel: { + kind: "union", + selector: () => "IRIREF", + }, + SemAct: { + kind: "interface", + properties: { + name: "IRIREF", + code: "STRING", + }, + }, + Annotation: { + kind: "interface", + properties: { + predicate: "IRI", + object: "objectValue", + }, + }, + IRIREF: { + kind: "primitive", + }, + BNODE: { + kind: "primitive", + }, + INTEGER: { + kind: "primitive", + }, + STRING: { + kind: "primitive", + }, + DECIMAL: { + kind: "primitive", + }, + DOUBLE: { + kind: "primitive", + }, + LANGTAG: { + kind: "primitive", + }, + BOOL: { + kind: "primitive", + }, + IRI: { + kind: "primitive", + }, + }; diff --git a/packages/traverser-shexj/src/ShexJTraverserTypes.ts b/packages/traverser-shexj/src/ShexJTraverserTypes.ts new file mode 100644 index 0000000..e8df313 --- /dev/null +++ b/packages/traverser-shexj/src/ShexJTraverserTypes.ts @@ -0,0 +1,375 @@ +import type { + Annotation, + BNODE, + BOOL, + DECIMAL, + DOUBLE, + EachOf, + INTEGER, + IRI, + IRIREF, + IriStem, + IriStemRange, + LANGTAG, + Language, + LanguageStem, + LanguageStemRange, + LiteralStem, + LiteralStemRange, + NodeConstraint, + numericLiteral, + ObjectLiteral, + objectValue, + OneOf, + Schema, + SemAct, + Shape, + ShapeAnd, + ShapeDecl, + shapeDeclLabel, + shapeDeclRef, + shapeExpr, + shapeExprOrRef, + ShapeExternal, + ShapeNot, + ShapeOr, + STRING, + TripleConstraint, + tripleExpr, + tripleExprLabel, + tripleExprOrRef, + tripleExprRef, + valueSetValue, + Wildcard, +} from "shexj"; +import type { ValidateTraverserTypes } from "@ldo/type-traverser"; + +export type ShexJTraverserTypes = ValidateTraverserTypes<{ + Schema: { + kind: "interface"; + type: Schema; + properties: { + startActs: "SemAct"; + start: "shapeExprOrRef"; + imports: "IRIREF"; + shapes: "ShapeDecl"; + }; + }; + ShapeDecl: { + kind: "interface"; + type: ShapeDecl; + properties: { + id: "shapeDeclLabel"; + abstract: "BOOL"; + restricts: "shapeExprOrRef"; + shapeExpr: "shapeExpr"; + }; + }; + shapeExpr: { + kind: "union"; + type: shapeExpr; + typeNames: + | "ShapeOr" + | "ShapeAnd" + | "ShapeNot" + | "NodeConstraint" + | "Shape" + | "ShapeExternal"; + }; + shapeExprOrRef: { + kind: "union"; + type: shapeExprOrRef; + typeNames: "shapeExpr" | "shapeDeclRef"; + }; + ShapeOr: { + kind: "interface"; + type: ShapeOr; + properties: { + shapeExprs: "shapeExprOrRef"; + }; + }; + ShapeAnd: { + kind: "interface"; + type: ShapeAnd; + properties: { + shapeExprs: "shapeExprOrRef"; + }; + }; + ShapeNot: { + kind: "interface"; + type: ShapeNot; + properties: { + shapeExpr: "shapeExprOrRef"; + }; + }; + ShapeExternal: { + kind: "interface"; + type: ShapeExternal; + properties: Record; + }; + shapeDeclRef: { + kind: "union"; + type: shapeDeclRef; + typeNames: "shapeDeclLabel"; + }; + shapeDeclLabel: { + kind: "union"; + type: shapeDeclLabel; + typeNames: "IRIREF" | "BNODE"; + }; + NodeConstraint: { + kind: "interface"; + type: NodeConstraint; + properties: { + datatype: "IRIREF"; + values: "valueSetValue"; + length: "INTEGER"; + minlength: "INTEGER"; + maxlength: "INTEGER"; + pattern: "STRING"; + flags: "STRING"; + mininclusive: "numericLiteral"; + minexclusive: "numericLiteral"; + totaldigits: "INTEGER"; + fractiondigits: "INTEGER"; + semActs: "SemAct"; + annotations: "Annotation"; + }; + }; + numericLiteral: { + kind: "union"; + type: numericLiteral; + typeNames: "INTEGER" | "DECIMAL" | "DOUBLE"; + }; + valueSetValue: { + kind: "union"; + type: valueSetValue; + typeNames: + | "objectValue" + | "IriStem" + | "IriStemRange" + | "LiteralStem" + | "LiteralStemRange" + | "Language" + | "LanguageStem" + | "LanguageStemRange"; + }; + objectValue: { + kind: "union"; + type: objectValue; + typeNames: "IRIREF" | "ObjectLiteral"; + }; + ObjectLiteral: { + kind: "interface"; + type: ObjectLiteral; + properties: { + value: "STRING"; + language: "STRING"; + type: "STRING"; + }; + }; + IriStem: { + kind: "interface"; + type: IriStem; + properties: { + stem: "IRIREF"; + }; + }; + IriStemRange: { + kind: "interface"; + type: IriStemRange; + properties: { + stem: "IRIREF"; + exclusions: "IriStemRangeExclusions"; + }; + }; + IriStemRangeExclusions: { + kind: "union"; + type: IRIREF | IriStem; + typeNames: "IRIREF" | "IriStem"; + }; + LiteralStem: { + kind: "interface"; + type: LiteralStem; + properties: { + stem: "STRING"; + }; + }; + LiteralStemRange: { + kind: "interface"; + type: LiteralStemRange; + properties: { + stem: "LiteralStemRangeStem"; + exclusions: "LiteralStemRangeExclusions"; + }; + }; + LiteralStemRangeStem: { + kind: "union"; + type: STRING | Wildcard; + typeNames: "STRING" | "Wildcard"; + }; + LiteralStemRangeExclusions: { + kind: "union"; + type: STRING | LiteralStem; + typeNames: "STRING" | "LiteralStem"; + }; + Language: { + kind: "interface"; + type: Language; + properties: { + languageTag: "LANGTAG"; + }; + }; + LanguageStem: { + kind: "interface"; + type: LanguageStem; + properties: { + stem: "LANGTAG"; + }; + }; + LanguageStemRange: { + kind: "interface"; + type: LanguageStemRange; + properties: { + stem: "LanguageStemRangeStem"; + exclusions: "LanguageStemRangeExclusions"; + }; + }; + LanguageStemRangeStem: { + kind: "union"; + type: LANGTAG | Wildcard; + typeNames: "LANGTAG" | "Wildcard"; + }; + LanguageStemRangeExclusions: { + kind: "union"; + type: LANGTAG | LanguageStem; + typeNames: "LANGTAG" | "LanguageStem"; + }; + Wildcard: { + kind: "interface"; + type: Wildcard; + properties: Record; + }; + Shape: { + kind: "interface"; + type: Shape; + properties: { + closed: "BOOL"; + extra: "IRIREF"; + extends: "shapeExprOrRef"; + expression: "tripleExprOrRef"; + semActs: "SemAct"; + annotations: "Annotation"; + }; + }; + tripleExpr: { + kind: "union"; + type: tripleExpr; + typeNames: "EachOf" | "OneOf" | "TripleConstraint"; + }; + tripleExprOrRef: { + kind: "union"; + type: tripleExprOrRef; + typeNames: "tripleExpr" | "tripleExprRef"; + }; + EachOf: { + kind: "interface"; + type: EachOf; + properties: { + id: "tripleExprLabel"; + min: "INTEGER"; + max: "INTEGER"; + expressions: "tripleExprOrRef"; + semActs: "SemAct"; + annotations: "Annotation"; + }; + }; + OneOf: { + kind: "interface"; + type: OneOf; + properties: { + id: "tripleExprLabel"; + min: "INTEGER"; + max: "INTEGER"; + expressions: "tripleExprOrRef"; + semActs: "SemAct"; + annotations: "Annotation"; + }; + }; + TripleConstraint: { + kind: "interface"; + type: TripleConstraint; + properties: { + id: "tripleExprLabel"; + min: "INTEGER"; + max: "INTEGER"; + inverse: "BOOL"; + predicate: "IRIREF"; + valueExpr: "shapeExprOrRef"; + semActs: "SemAct"; + annotations: "Annotation"; + }; + }; + tripleExprRef: { + kind: "union"; + type: tripleExprRef; + typeNames: "tripleExprLabel"; + }; + tripleExprLabel: { + kind: "union"; + type: tripleExprLabel; + typeNames: "IRIREF" | "BNODE"; + }; + SemAct: { + kind: "interface"; + type: SemAct; + properties: { + name: "IRIREF"; + code: "STRING"; + }; + }; + Annotation: { + kind: "interface"; + type: Annotation; + properties: { + predicate: "IRI"; + object: "objectValue"; + }; + }; + IRIREF: { + kind: "primitive"; + type: IRIREF; + }; + BNODE: { + kind: "primitive"; + type: BNODE; + }; + INTEGER: { + kind: "primitive"; + type: INTEGER; + }; + STRING: { + kind: "primitive"; + type: STRING; + }; + DECIMAL: { + kind: "primitive"; + type: DECIMAL; + }; + DOUBLE: { + kind: "primitive"; + type: DOUBLE; + }; + LANGTAG: { + kind: "primitive"; + type: LANGTAG; + }; + BOOL: { + kind: "primitive"; + type: BOOL; + }; + IRI: { + kind: "primitive"; + type: IRI; + }; +}>; diff --git a/packages/traverser-shexj/src/index.ts b/packages/traverser-shexj/src/index.ts new file mode 100644 index 0000000..2a74ee4 --- /dev/null +++ b/packages/traverser-shexj/src/index.ts @@ -0,0 +1,5 @@ +import { ShexJTraverser } from "./ShexJTraverser"; + +export * from "./ShexJTraverserDefinition"; +export * from "./ShexJTraverserTypes"; +export default ShexJTraverser; diff --git a/packages/traverser-shexj/test/traverseSchema.test.ts b/packages/traverser-shexj/test/traverseSchema.test.ts new file mode 100644 index 0000000..d3f1dcd --- /dev/null +++ b/packages/traverser-shexj/test/traverseSchema.test.ts @@ -0,0 +1,5 @@ +describe("traverseSchema", () => { + it("trivial", () => { + expect(true).toBe(true); + }); +}); diff --git a/packages/traverser-shexj/tsconfig.build.json b/packages/traverser-shexj/tsconfig.build.json new file mode 100644 index 0000000..ce7be9c --- /dev/null +++ b/packages/traverser-shexj/tsconfig.build.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist" + }, + "include": ["./src"] +} \ No newline at end of file diff --git a/packages/type-traverser/.eslintrc b/packages/type-traverser/.eslintrc new file mode 100644 index 0000000..83c51a9 --- /dev/null +++ b/packages/type-traverser/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": ["../../.eslintrc"] +} \ No newline at end of file diff --git a/packages/type-traverser/README.md b/packages/type-traverser/README.md new file mode 100644 index 0000000..9280b23 --- /dev/null +++ b/packages/type-traverser/README.md @@ -0,0 +1,674 @@ +# Type Traverser + +An organized way to traverse objects using typescript. + +## Installation +``` +npm i type-traverser +``` + +## Why use this library? +Have you ever needed to traverse large, complex objects? Chances are you built traversers to recognize when something is an array or a certain kind of record. + +Building traversers is an arduous process that involves a lot of repeated concepts and repeated code. Type-Traverser minimizes the repetition. + +## Tutorial + +This tutorial walks you through how to set up a traverser. You can see the full runnable example at [`example/example.ts`](./example/example.ts), or you can run the example by running `npm run start`. + +### Defining the type + +The first step is defining what your type looks like. Let's say, for example, the following typescript typings represent what you need to traverse. These types represent characters from Avatar: The Last Airbender where there are special people called "Benders" who can manipulate the elements. + +```typescript +type Element = "Water" | "Earth" | "Fire" | "Air"; +interface Bender { + name: string; + element: Element; + friends: Person[]; +} +interface NonBender { + name: string; + friends: Person[]; +} +type Person = Bender | NonBender; +``` + +Some sample data that follows this type looks like this: + +```typescript +const aang: Bender = { + name: "Aang", + element: "Air", + friends: [], +}; +const sokka: NonBender = { + name: "Sokka", + friends: [], +}; +const katara: Bender = { + name: "Katara", + element: "Water", + friends: [], +}; +aang.friends.push(sokka, katara); +sokka.friends.push(aang, katara); +katara.friends.push(aang, sokka); +``` + +### Defining Traverser Types + +Next, we need to define a traverser. A traverser has data that defines what your object looks like. + +To define a traverser, you first need to set up a `TraverserTypes` type. You can validate the `TraverserTypes` type by using the `ValidateTraverserTypes` type and passing in your `TraverserTypes` as a generic. + +```typescript +type AvatarTraverserTypes = ValidateTraverserTypes<{ + Element: { + kind: "primitive"; + type: Element; + }; + Bender: { + kind: "interface"; + type: Bender; + properties: { + element: "Element"; + friends: "Person"; + }; + }; + NonBender: { + kind: "interface"; + type: Bender; + properties: { + friends: "Person"; + }; + }; + Person: { + kind: "union"; + type: Person; + typeNames: "Bender" | "NonBender"; + }; +}>; +``` + +Let's break down what's happening here. We're telling typescript the kinds of "Sub-Traversers" each type uses. + +Each sub-traverser has a name called a "TypeName". In this example we have four TypeNames: `Element`, `Bender`, `NonBender`, and `Person`. TypeNames can be any name you want, but it's best practice to match your TypeNames to the name of it's corresponding type. For example, the type `Element` is associated with the TypeName `Element`. Some sub-traversers will also require you to provide TypeNames as strings. + +`ValidateTraverserTypes` is convenient way to check if you have made a valid `TraverserTypes`. If you make a mistake - for example, you provide an invalid TypeName as seen below - the resulting type will be `never`; + +![ValidateTraverserTypesExample](/tutorialImages/ValidateTraverserTypesExample.png) + +At the moment, there are three sub-traverser types: + +#### Union +You should use a union sub-traverser for typescript union types - types that usually follow the form `a | b | c` where any element from the list is valid. + +In the example, `Person` is a "Union" sub-traverser because a `Person` is a union of `Bender` and `NonBender` (`Bender | NonBender`). + +```typescript +Person: { + kind: "union"; + type: Person; + typeNames: "Bender" | "NonBender"; +}; +``` + +There are three fields for the union sub-traverser: + - `kind`: Must be `"union"` to denote that this defines a union sub-traverser. + - `type`: The typescript type corresponding to this union. + - `typeNames`: Defines a list of TypeNames that correspond to the actual type. + +#### Interface +You should use a interface sub-traverser for interface or object types - any type that maps discrete keys to values. + +In the example, `Bender` is an "Interface" sub-traverser because a `Bender` type is a map of discrete keys (like `element` and `friends`) to type values (like `Element` and `Person[]`). + +```typescript +Bender: { + kind: "interface"; + type: Bender; + properties: { + element: "Element"; + friends: "Person"; + }; +}; +``` + +There are three fields for the interface sub-traverser: + - `kind`: Must be `"interface"` to denote that this defines a interface sub-traverser. + - `type`: The typescript type corresponding to this inteface or object type. + - `properties`: Defines the properties that should be traversed by mapping the property name to its corresponding TypeName. Not all interface properties need to be listed here, only the ones that should be traversed. If no properties from this interface need to be traversed, you either provide `properties: Record` or use a "Primitive" sub-traverser. + +#### Primitive +You should use a primitive sub-traverser for "leaf-types" - types that do not have any children. + +In the example, `Element` is a "Primitive" sub-traverser because an `Element` type is just a collection of strings (`"Water" | "Earth" | "Fire" | "Air"`). + +```typescript +Element: { + kind: "primitive"; + type: Element; +}; +``` + +Note: while it is common to use a primitive sub traverser for primitive types like `string`, `boolean`, `number`, etc. you may also use it for more complex types like interfaces and arrays if you do not care about traversing the children of those types. + +There are two fields for the primitive sub-traverser: + - `kind`: Must be `"primitive"` to denote that this defines a primitive sub-traverser. + - `type`: The typescript type corresponding to this primitive. + +### Creating a traverser definition +Typescript typings aren't available at runtime, so the next step is to translate the `TraverserTypes` that we made into a standard JSON object called a "TraverserDefinition". But, don't worry! This will be easy. If you define a variable as a `TraverserDefinition`, your IDE's IntelliSense will be able to direct you through exactly what to fill out, as seen below. + +![Traverse Definition IntelliSense](/tutorialImages/TraveserDefinitionIntellisense.png) + +In our example, the TraverserDefinition looks like: + +```typescript +const avatarTraverserDefinition: TraverserDefinition = { + Element: { + kind: "primitive", + }, + Bender: { + kind: "interface", + properties: { + element: "Element", + friends: "Person", + }, + }, + NonBender: { + kind: "interface", + properties: { + friends: "Person", + }, + }, + Person: { + kind: "union", + selector: (item) => { + return (item as Bender).element ? "Bender" : "NonBender"; + }, + }, +}; +``` + +#### Defining a Union Selector +The only part of the TraverserDefinition that isn't just blindly following IntelliSense is the `selector` on a Union sub-traverser. A `selector` is given the item and should return the TypeName corresponding to the item. + +In the above example, `"Bender"` is returned if the given item has a `"element"` property because a `"NonBender"` does not include an `"element"` property. + +### Instantiating a Traverser +Now that we've defined the traverser types, we're ready to instantiate the traverser itself. A `Traverser` is a class that lets you traverse the object you defined. + +In our example, this is how we instantiate the traverser + +```typescript +const avatarTraverser = new Traverser( + avatarTraverserDefinition +); +``` + +### Using a Traverser +At this point I'd like to welcome everyone who was linked to this section from another library. If this is you, someone else has already defined a traverser for you. You don't need to know how to create a traverser, but if you want to know, you can read the proceeding sections in this document. + +From now on, we will detail how to use an already defined traverser using sample data about the fictional universe of "Avatar: The Last Airbender." If you came here from another library, your traverser will be different, but the concepts are the same. So far we have the following: + +```typescript +type Element = "Water" | "Earth" | "Fire" | "Air"; +interface Bender { + name: string; + element: Element; + friends: Person[]; +} +interface NonBender { + name: string; + friends: Person[]; +} +type Person = Bender | NonBender; +``` + +Some sample data that follows this type looks like this: + +```typescript +/** + * The Type Definitions + */ +type Element = "Water" | "Earth" | "Fire" | "Air"; +interface Bender { + name: string; + element: Element; + friends: Person[]; +} +interface NonBender { + name: string; + friends: Person[]; +} +type Person = Bender | NonBender; + +/** + * Some Raw Sample Data that follows our Types + */ +const aang: Bender = { + name: "Aang", + element: "Air", + friends: [], +}; +const sokka: NonBender = { + name: "Sokka", + friends: [], +}; +const katara: Bender = { + name: "Katara", + element: "Water", + friends: [], +}; +aang.friends.push(sokka, katara); +sokka.friends.push(aang, katara); +katara.friends.push(aang, sokka); + +/** + * A Traverser to Traverse these type definitions + */ +avatarTraverser +``` + +### Using a Visitor +The simplest way to traverse your object is using a `Visitor`. A visitor will trigger a given function when it finds an object that matches the corresponding TypeName. + +In our Avatar example, our visitor could look like: + +```typescript +const avatarVisitor = avatarTraverser.createVisitor({ + Element: async (item) => { + console.log(`Element: ${item}`); + }, + Bender: { + visitor: async (item) => { + console.log(`Bender: ${item.name}`); + }, + properties: { + element: async (item) => { + console.log(`Bender.element: ${item}`); + }, + }, + }, + NonBender: { + visitor: async (item) => { + console.log(`NonBender: ${item.name}`); + }, + }, + Person: async (item) => { + console.log(`Person: ${item.name}`); + }, +}); + +await avatarVisitor.visit(aang, "Bender", undefined); +``` + +Running this code will result in this log: +```bash +Bender: Aang +Bender.element: Air +Element: Air +Person: Sokka +NonBender: Sokka +Person: Aang +Person: Katara +Bender: Katara +Bender.element: Water +Element: Water +``` + +Let's break down what's happening here. + +"Primitive" and "Union" sub-traverser types (Like `Element` and `Person` respectively) require only a function. That function is crafted for the specific item. For example: + + - Element's visitor function: `(item: Element, context: undefined) => Promise`; + - Person's visitor function: `(item: Person, context: undefined) => Promise`; + +"Interface" sub-traversers allow you to define a visitor function for the whole object AND each of its properties. Each of these, including the visitor function for the whole object is optional. For example, an interface visitor for "Bender" follows the following typing: + +```typescript +{ + visitor?: (item: Bender, context: undefined) => Promise; + properties?: { + element?: (item: Element, context: undefined) => Promise; + friends?: (item: Person[], context: undefined) => Promise; + } +} +``` + +When we want to run the visitor we use the `visit` method. + +```typescript +await avatarVisitor.visit(aang, "Bender", undefined); +``` + +The `visit` method takes in three arguments: + - The data that should be traversed. In this example the "aang" object. + - The TypeName of the data. In this example `"Bender"` because the "aang" object is a `Bender`. `"Person"` would have also been acceptable. + - The context (described in the next section) + +Note: You DO NOT need to define a visitor function for every TypeName, only the ones you care about. + +Note: Notice that we see the same person's name appear in two logs. For example we see both "Person: Sokka" and "NonBender: Sokka". That's because we visit the same object as a `Person` type and as a `NonBender` type. + +### Using Context +Sometimes you want to pass a shared object that's accessible from all traversers. That's where "context" comes in. Here's an example that uses context with our AvatarTraverser: + +```typescript +interface AvatarCountingVisitorContext { + numberOfBenders: number; +} +const avatarCountingVisitor = + avatarTraverser.createVisitor({ + Bender: { + visitor: async (item, context) => { + context.numberOfBenders++; + }, + }, + }); +const countContext: AvatarCountingVisitorContext = { numberOfBenders: 0 }; +await avatarCountingVisitor.visit(aang, "Bender", countContext); +console.log(countContext.numberOfBenders); // Logs 2 +``` + +In this example, we want to count the number of "Benders" we encounter while traversing our object. + +`traverser.createVisitor` accepts one generic defining the type of the context. + +### Using a Transformer +Sometimes you don't want to just visit an object, you want to transform it into something else. A Transformer is the best way to do that. + +In the following example, we want to transform our data into a graph of `ActionablePerson` as defined by this interface: + +```typescript +interface ActionablePerson { + doAction(): void; + friends: ActionablePerson[]; +} +``` + +We still want to maintain the friendship connections, but the transformed object is completely different. + +Let's first look at the full code, then we'll break it down into sections: + +```typescript +const avatarTransformer = avatarTraverser.createTransformer< + { + Element: { + return: string; + }; + Bender: { + return: ActionablePerson; + properties: { + element: string; + }; + }; + NonBender: { + return: ActionablePerson; + }; + }, + undefined +>({ + Element: async (item) => { + return item.toUpperCase(); + }, + Bender: { + transformer: async (item, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + return { + doAction: () => { + console.log(`I can bend ${transformedChildren.element}`); + }, + friends: transformedChildren.friends, + }; + }, + properties: { + element: async (item, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + return `the element of ${transformedChildren}`; + }, + }, + }, + NonBender: { + transformer: async (item, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + return { + doAction: () => { + console.log(`I can't bend.`); + }, + friends: transformedChildren.friends, + }; + }, + }, + Person: async ( + item, + getTransformedChildren, + setReturnPointer, + _context + ) => { + const personToReturn: ActionablePerson = {} as ActionablePerson; + setReturnPointer(personToReturn); + const transformedChildren = await getTransformedChildren(); + personToReturn.doAction = transformedChildren.doAction; + personToReturn.friends = transformedChildren.friends; + return personToReturn; + }, +}); + +const result = await avatarTransformer.transform(aang, "Bender", undefined); +result.doAction(); +result.friends[0].doAction(); +result.friends[1].doAction(); +// Logs: +// I can bend the element of AIR +// I can't bend. +// I can bend the element of WATER +``` + +#### Defining Transformer Return Types +The first step to working with transformers is defining the return types for each transformer. This is done by providing a generic to the `createTransformer` function: + +```typescript +const avatarTransformer = avatarTraverser.createTransformer< + { + Element: { + return: string; + }; + Bender: { + return: ActionablePerson; + properties: { + element: string; + }; + }; + NonBender: { + return: ActionablePerson; + }; + }, + undefined +>({ + // ... +}); +``` + +For each TypeName you wish to transform, you can provide return type. In this example, the `Element` transformer must return a `string`, and the `NonBender` transformer must return an `Actionable Person`. + +Interface types may also provide the return types for their individual properties, as seen in the `Bender` type. Though, this is not required. + +Note: You don't need to define the return type for every TypeName and property. This library's typings will recursively search for the correct return type based on the input you have given and display that in the tooltip. In the example below, the "Bender" translator knows that the `friends` property is an `ActionablePerson[]` not because the `friends` property was defined in the return types, but because it has deduced that the `friends` field is linked the the `Person` type which itself is made up of the `Bender` and `NonBender` types, and both those types have a return type of `ActionablePerson`. + +![Return Type Tooltip](/tutorialImages/ReturnTypeTooltip.png) + +Note: the `undefined` at the end defines the context and is not associated with the return types. To learn how to use context see the "Using Context" section. + +#### Primitive Transformer +A primitive transformer is the simplest of the transformers. In this example `Element` is a primitive: + +```typescript +const avatarTransformer = avatarTraverser.createTransformer< + // ... +>({ + Element: async (item: Element, context: undefined): Promise => { + return item.toUpperCase(); + }, + // ... +}); +``` + +A primitive transformer receives an "item" corresponding to its type and a context and must return its defined return type. + +#### Interface Transformer +An interface transformer allows you to transform not only the base interface object, but the properties of that object as well. In this example, `Bender` is an interface: + +```typescript +const avatarTransformer = avatarTraverser.createTransformer< + // ... +>({ + // ... + Bender: { + transformer: async ( + item: Bender, + getTransformedChildren: GetTransformedChildrenFunction, + setReturnPointer: SetReturnPointerFunction, + context: undefined + ): Promise => { + const transformedChildren: { + element: string; + friends: ActionablePerson[]; + } = await getTransformedChildren(); + return { + doAction: () => { + console.log(`I can bend ${transformedChildren.element}`); + }, + friends: transformedChildren.friends, + }; + }, + properties: { + element: async (item, getTransformedChildren, setReturnProperty, context) => { + const transformedChildren: string = await getTransformedChildren(); + return `the element of ${transformedChildren}`; + }, + }, + }, + // ... +}); +``` + +The base transformer (located at the `transformer` field) and the property transformers are functions with four arguments: + + - item: The original item. In this example, the base transformer would receive a `Bender` and the "element" transformer would receive an `Element`. + - getTransformedChildren: runs the transformers corresponding to the children of this object and returns their result. In this example, the base transformer's `getTransformedChildren` function returns `{ element: string; friends: ActionablePerson[] }` because the element property transformer returns a `string` and the transformers that eventually feed into the friend field (`Person`, `Bender`, and `NonBender`) return ActionablePerson. In the elements transformer, the `getTransformedChildren` function returns string because the `Elements` transformer returns string. + - setReturnProperty: A function used to prevent infinite recursion for circular data. See the "Preventing Circular Recursion" section for more. + - context: The context variable. See the "Using Context" section for more. + + A transformer must return its defined return type. For example, the base transformer must return `ActionablePerson` because it was defined that way when creating the return types. + +#### Union Transformer +A union transformer lets you transform a Union type. In this example "Person" is a union type. + +```typescript +const avatarTransformer = avatarTraverser.createTransformer< + // ... +>({ + // ... + Person: async ( + item: Person, + getTransformedChildren: GetTransformedChildrenFunction, + setReturnPointer: SetReturnPointerFunction, + context: undefined + ) => { + const personToReturn: ActionablePerson = {} as ActionablePerson; + const transformedChildren: ActionablePerson = await getTransformedChildren(); + personToReturn.doAction = transformedChildren.doAction; + personToReturn.friends = transformedChildren.friends; + return personToReturn; + }, +}); +``` + +The transformer function has four arguments: + + - item: The original item. In this example, the transformer would receive a `Person`. + - getTransformedChildren: runs the transformers corresponding to the indivual elements that make up the union and returns their result. In this example, the transformer's `getTransformedChildren` function returns `ActionablePerson` because this union is made up of `Bender` and `NonBender` and both are set to return an `ActionablePerson`. + - setReturnProperty: A function used to prevent infinite recursion for circular data. See the "Preventing Circular Recursion" section for more. + - context: The context variable. See the "Using Context" section for more. + +A transformer must return its defined return type. For example, the transformer must return `ActionablePerson` because it was defined that way when creating the return types. + +Note: The above example transformer is actually not needed as it simply returns a duplicate of the value provided by `getTransformedChildren`. If a transformer is not provided, by default, this library will pass on the values from `getTransformedChildren`. + +#### Preventing Circular Recursion +Our example data is circular - it loops back on itself. If I were to call `aang.friends[0].friends[0]`, I would once again be at the aang object. This is very useful when visiting the objects, but it poses a problem when we want to transform them. The aang transformer needs to wait for the sokka and katara objects to be transformed in order for it to transform itself. But the sokka object needs to wait for the aang and katara object to be transformed. The same is true for the katara object. So, if this is the case where do you begin? + +Recall the way we defined this data in the first place: + +```typescript +const aang: Bender = { + name: "Aang", + element: "Air", + friends: [], +}; +const sokka: NonBender = { + name: "Sokka", + friends: [], +}; +const katara: Bender = { + name: "Katara", + element: "Water", + friends: [], +}; +aang.friends.push(sokka, katara); +sokka.friends.push(aang, katara); +katara.friends.push(aang, sokka); +``` + +Note that we first defined an incomplete object, then once all of our objects were defined, we modified it to link them all together. + +You can do the same thing using the `setRetunPointer` function: + +```typescript +const avatarTransformer = avatarTraverser.createTransformer< + // ... +>({ + // ... + Person: async ( + item: Person, + getTransformedChildren: GetTransformedChildrenFunction, + setReturnProinter: SetReturnPointerFunction, + context: undefined + ) => { + const personToReturn: ActionablePerson = {} as ActionablePerson; + setReturnPointer(personToReturn); // <------ HERE + const transformedChildren: ActionablePerson = await getTransformedChildren(); + personToReturn.doAction = transformedChildren.doAction; + personToReturn.friends = transformedChildren.friends; + return personToReturn; + }, +}); +``` + +In this example we call `setReturnPointer` and pass in an incomplete object. After that, we can safely call `getTransformedChildren` without worrying about hitting an infinite loop. Once we have the transformedChildren, we can attach them to the original object we passed to `setReturnPointer`; + +`setReturnPointer` should be called by at least one of the transformers involved in a potential loop. + +#### Running the Transform Function +Once you have defined all of your transformers, you can run the transform function: + +```typescript +const result = await avatarTransformer.transform(aang, "Bender", undefined); +result.doAction(); +result.friends[0].doAction(); +result.friends[1].doAction(); +// Logs: +// I can bend the element of AIR +// I can't bend. +// I can bend the element of WATER +``` + +The `transform` function takes in three arguments: + - The data that should be traversed. In this example the aang object. + - The TypeName of the data. In this example `"Bender"` because the aang object is a `Bender`. `"Person"` would have also been acceptable. + - The context (see the "Using Context" section for more) + +The transform method returns the return type corresponding to the TypeName. In this case, it returns `ActionablePerson` because that is the return type for `Bender`. diff --git a/packages/type-traverser/example/example.ts b/packages/type-traverser/example/example.ts new file mode 100644 index 0000000..6463294 --- /dev/null +++ b/packages/type-traverser/example/example.ts @@ -0,0 +1,246 @@ +import { Traverser, TraverserDefinition, ValidateTraverserTypes } from "../src"; + +async function run() { + /** + * Original Type Definition + */ + type Element = "Water" | "Earth" | "Fire" | "Air"; + interface Bender { + name: string; + element: Element; + friends: Person[]; + } + interface NonBender { + name: string; + friends: Person[]; + } + type Person = Bender | NonBender; + + /** + * Raw Data to Traverse + */ + const aang: Bender = { + name: "Aang", + element: "Air", + friends: [], + }; + const sokka: NonBender = { + name: "Sokka", + friends: [], + }; + const katara: Bender = { + name: "Katara", + element: "Water", + friends: [], + }; + aang.friends.push(sokka, katara); + sokka.friends.push(aang, katara); + katara.friends.push(aang, sokka); + + /** + * Traverser Types + */ + type AvatarTraverserTypes = ValidateTraverserTypes<{ + Element: { + kind: "primitive"; + type: Element; + }; + Bender: { + kind: "interface"; + type: Bender; + properties: { + element: "Element"; + friends: "Person"; + }; + }; + NonBender: { + kind: "interface"; + type: Bender; + properties: { + friends: "Person"; + }; + }; + Person: { + kind: "union"; + type: Person; + typeNames: "Bender" | "NonBender"; + }; + }>; + + /** + * Create the traverser definition + */ + const avatarTraverserDefinition: TraverserDefinition = { + Element: { + kind: "primitive", + }, + Bender: { + kind: "interface", + properties: { + element: "Element", + friends: "Person", + }, + }, + NonBender: { + kind: "interface", + properties: { + friends: "Person", + }, + }, + Person: { + kind: "union", + selector: (item) => { + return (item as Bender).element ? "Bender" : "NonBender"; + }, + }, + }; + + /** + * Instantiate the Traverser + */ + const avatarTraverser = new Traverser( + avatarTraverserDefinition + ); + + /** + * Create a visitor + */ + const avatarVisitor = avatarTraverser.createVisitor({ + Element: async (item) => { + console.log(`Element: ${item}`); + }, + Bender: { + visitor: async (item) => { + console.log(`Bender: ${item.name}`); + }, + properties: { + element: async (item) => { + console.log(`Bender.element: ${item}`); + }, + }, + }, + NonBender: { + visitor: async (item) => { + console.log(`NonBender: ${item.name}`); + }, + }, + Person: async (item) => { + console.log(`Person: ${item.name}`); + }, + }); + + /** + * Run the visitor on data + */ + console.log( + "############################## Visitor Logs ##############################" + ); + await avatarVisitor.visit(aang, "Bender", undefined); + + /** + * Create a visitor that uses context + */ + interface AvatarCountingVisitorContext { + numberOfBenders: number; + } + const avatarCountingVisitor = + avatarTraverser.createVisitor({ + Bender: { + visitor: async (item, context) => { + context.numberOfBenders++; + }, + }, + }); + + /** + * Run the counting visitor + */ + console.log( + "############################## Found Number of Benders Using Visitor ##############################" + ); + const countContext: AvatarCountingVisitorContext = { numberOfBenders: 0 }; + await avatarCountingVisitor.visit(aang, "Bender", countContext); + console.log(countContext.numberOfBenders); + + /** + * Set up a transformer + */ + interface ActionablePerson { + doAction(): void; + friends: ActionablePerson[]; + } + const avatarTransformer = avatarTraverser.createTransformer< + { + Element: { + return: string; + }; + Bender: { + return: ActionablePerson; + properties: { + element: string; + }; + }; + NonBender: { + return: ActionablePerson; + }; + }, + undefined + >({ + Element: async (item) => { + return item.toUpperCase(); + }, + Bender: { + transformer: async (item, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + return { + doAction: () => { + console.log(`I can bend ${transformedChildren.element}`); + }, + friends: transformedChildren.friends, + }; + }, + properties: { + element: async (item, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + return `the element of ${transformedChildren}`; + }, + }, + }, + NonBender: { + transformer: async (item, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + return { + doAction: () => { + console.log(`I can't bend.`); + }, + friends: transformedChildren.friends, + }; + }, + }, + Person: async ( + item, + getTransformedChildren, + setReturnPointer, + _context + ) => { + const personToReturn: ActionablePerson = {} as ActionablePerson; + setReturnPointer(personToReturn); + const transformedChildren = await getTransformedChildren(); + personToReturn.doAction = transformedChildren.doAction; + personToReturn.friends = transformedChildren.friends; + return personToReturn; + }, + }); + + /** + * Run the Transformer + */ + console.log( + "############################## AvatarTraverser DoAction ##############################" + ); + const result = await avatarTransformer.transform(aang, "Bender", undefined); + result.doAction(); + result.friends[0].doAction(); + result.friends[1].doAction(); +} +run(); diff --git a/packages/type-traverser/jest.config.js b/packages/type-traverser/jest.config.js new file mode 100644 index 0000000..bad5f64 --- /dev/null +++ b/packages/type-traverser/jest.config.js @@ -0,0 +1,6 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +const sharedConfig = require("../../jest.config.js"); +module.exports = { + ...sharedConfig, + rootDir: "./", +}; diff --git a/packages/type-traverser/package.json b/packages/type-traverser/package.json new file mode 100644 index 0000000..2cf732c --- /dev/null +++ b/packages/type-traverser/package.json @@ -0,0 +1,35 @@ +{ + "name": "@ldo/type-traverser", + "version": "0.0.0", + "description": "An organized way to traverse over objects using typescript", + "main": "dist/index.js", + "scripts": { + "build": "tsc --project tsconfig.build.json", + "test": "jest --coverage", + "start": "ts-node ./example/example", + "prepublishOnly": "npm run test && npm run build", + "lint": "eslint src/** --fix --no-error-on-unmatched-pattern" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/o-development/type-traverser.git" + }, + "author": "Jackson Morgan", + "license": "MIT", + "bugs": { + "url": "https://github.com/o-development/type-traverser/issues" + }, + "homepage": "https://github.com/o-development/type-traverser#readme", + "devDependencies": { + "@types/jest": "^27.4.0", + "@types/shexj": "^2.1.1", + "@types/uuid": "^8.3.4", + "jest": "^27.4.7", + "jsonld2graphobject": "^0.0.3", + "ts-jest": "^27.1.2", + "ts-node": "^10.4.0" + }, + "dependencies": { + "uuid": "^8.3.2" + } +} diff --git a/packages/type-traverser/src/Transformer.ts b/packages/type-traverser/src/Transformer.ts new file mode 100644 index 0000000..0d62555 --- /dev/null +++ b/packages/type-traverser/src/Transformer.ts @@ -0,0 +1,243 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { + ApplyTransformerReturnTypesDefaults, + InterfaceReturnType, + InterfaceTraverserDefinition, + InterfaceType, + KeyTypes, + PrimitiveReturnType, + PrimitiveType, + TransformerInputReturnTypes, + TraverserDefinition, + TraverserTypes, + UnionReturnType, + UnionType, +} from "."; +import { transformerParentSubTraverser } from "./transformerSubTraversers/TransformerParentSubTraverser"; +import { CircularDepenedencyAwaiter } from "./transformerSubTraversers/util/CircularDependencyAwaiter"; +import { MultiMap } from "./transformerSubTraversers/util/MultiMap"; +import { SuperPromise } from "./transformerSubTraversers/util/SuperPromise"; +import type { + GetTransformedChildrenFunction, + InterfaceTransformerDefinition, + InterfaceTransformerInputDefinition, + PrimitiveTransformerDefinition, + PrimitiveTransformerInputDefinition, + Transformers, + TransformersInput, + UnionTransformerDefinition, + UnionTransformerInputDefinition, +} from "./Transformers"; + +// TODO: Lots of "any" in this file. I'm just done with fancy typescript, +// but if I ever feel so inclined, I should fix this in the future. + +export class Transformer< + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Types extends TraverserTypes, + InputReturnTypes extends TransformerInputReturnTypes, + Context = undefined, +> { + private traverserDefinition: TraverserDefinition; + private transformers: Transformers< + Types, + ApplyTransformerReturnTypesDefaults, + Context + >; + + constructor( + traverserDefinition: TraverserDefinition, + transformers: TransformersInput, + ) { + this.traverserDefinition = traverserDefinition; + this.transformers = this.applyDefaultTransformers(transformers); + } + + private applyDefaultInterfaceTransformerProperties< + Type extends InterfaceType, + ReturnType extends InterfaceReturnType, + >( + typeName: keyof Types, + typePropertiesInput: InterfaceTransformerInputDefinition< + Types, + Type, + ApplyTransformerReturnTypesDefaults, + ReturnType, + Context + >["properties"], + ): InterfaceTransformerDefinition< + Types, + Type, + ApplyTransformerReturnTypesDefaults, + ReturnType, + Context + >["properties"] { + return Object.keys( + (this.traverserDefinition[typeName] as InterfaceTraverserDefinition) + .properties, + ).reduce>((agg, key: keyof Type["properties"]) => { + if (typePropertiesInput && typePropertiesInput[key]) { + agg[key] = typePropertiesInput[key]; + } else { + agg[key] = ( + originalData: any, + getTransformedChildren: GetTransformedChildrenFunction, + ) => { + return getTransformedChildren(); + }; + } + return agg; + }, {}) as InterfaceTransformerDefinition< + Types, + Type, + ApplyTransformerReturnTypesDefaults, + ReturnType, + Context + >["properties"]; + } + + private applyDefaultInterfaceTransformer< + Type extends InterfaceType, + ReturnType extends InterfaceReturnType, + >( + typeName: keyof Types, + typeInput?: InterfaceTransformerInputDefinition< + Types, + Type, + ApplyTransformerReturnTypesDefaults, + ReturnType, + Context + >, + ): InterfaceTransformerDefinition< + Types, + Type, + ApplyTransformerReturnTypesDefaults, + ReturnType, + Context + > { + if (!typeInput) { + return { + transformer: async ( + originalData, + getTransformedChildren: GetTransformedChildrenFunction, + ) => { + return getTransformedChildren(); + }, + properties: this.applyDefaultInterfaceTransformerProperties( + typeName, + {}, + ), + }; + } + return { + transformer: typeInput.transformer, + properties: this.applyDefaultInterfaceTransformerProperties( + typeName, + typeInput.properties, + ), + }; + } + + private applyDefaultUnionTransformer< + Type extends UnionType, + ReturnType extends UnionReturnType, + >( + typeInput?: UnionTransformerInputDefinition< + Types, + Type, + ApplyTransformerReturnTypesDefaults, + ReturnType, + Context + >, + ): UnionTransformerDefinition< + Types, + Type, + ApplyTransformerReturnTypesDefaults, + ReturnType, + Context + > { + if (!typeInput) { + return async ( + originalData, + getTransformedChildren: GetTransformedChildrenFunction, + ) => { + return getTransformedChildren(); + }; + } + return typeInput; + } + + private applyDefaultPrimitiveTransformer< + Type extends PrimitiveType, + ReturnType extends PrimitiveReturnType, + >( + typeInput?: PrimitiveTransformerInputDefinition, + ): PrimitiveTransformerDefinition { + if (!typeInput) { + return async (originalData) => { + return originalData; + }; + } + return typeInput; + } + + private applyDefaultTransformers( + inputTransformers: TransformersInput, + ): Transformers< + Types, + ApplyTransformerReturnTypesDefaults, + Context + > { + const finalTansformers: Partial< + Transformers< + Types, + ApplyTransformerReturnTypesDefaults, + Context + > + > = {}; + Object.keys(this.traverserDefinition).forEach((typeName: keyof Types) => { + if (this.traverserDefinition[typeName].kind === "interface") { + finalTansformers[typeName] = this.applyDefaultInterfaceTransformer( + typeName, + inputTransformers[typeName] as any, + ) as any; + } else if (this.traverserDefinition[typeName].kind === "union") { + finalTansformers[typeName] = this.applyDefaultUnionTransformer( + inputTransformers[typeName] as any, + ) as any; + } else if (this.traverserDefinition[typeName].kind === "primitive") { + finalTansformers[typeName] = this.applyDefaultPrimitiveTransformer( + inputTransformers[typeName] as any, + ) as any; + } + }); + return finalTansformers as Transformers< + Types, + ApplyTransformerReturnTypesDefaults, + Context + >; + } + + public async transform( + item: Types[TypeName]["type"], + itemTypeName: TypeName, + context: Context, + ): Promise< + ApplyTransformerReturnTypesDefaults< + Types, + InputReturnTypes + >[TypeName]["return"] + > { + const superPromise = new SuperPromise(); + const toReturn = await transformerParentSubTraverser(item, itemTypeName, { + traverserDefinition: this.traverserDefinition, + transformers: this.transformers, + executingPromises: new MultiMap(), + circularDependencyAwaiter: new CircularDepenedencyAwaiter(), + superPromise, + context, + }); + await superPromise.wait(); + return toReturn; + } +} diff --git a/packages/type-traverser/src/TransformerReturnTypes.ts b/packages/type-traverser/src/TransformerReturnTypes.ts new file mode 100644 index 0000000..86785fc --- /dev/null +++ b/packages/type-traverser/src/TransformerReturnTypes.ts @@ -0,0 +1,75 @@ +import type { + InterfaceType, + PrimitiveType, + TraverserTypes, + UnionType, +} from "."; + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export type InterfaceReturnType> = { + return: any; + properties: { + [PropertyName in keyof Type["properties"]]: any; + }; +}; + +export type UnionReturnType = { + return: any; +}; + +export type PrimitiveReturnType = { + return: any; +}; + +export type BaseReturnType< + Types extends TraverserTypes, + TypeName extends keyof Types, +> = Types[TypeName] extends InterfaceType + ? InterfaceReturnType + : Types[TypeName] extends UnionType + ? UnionReturnType + : Types[TypeName] extends PrimitiveType + ? PrimitiveReturnType + : never; + +export type TransformerReturnTypes> = { + [TypeName in keyof Types]: BaseReturnType; +}; + +/** + * Input + */ +export type InterfacePropertiesInputReturnType< + Type extends InterfaceType, +> = Partial<{ + [PropertyName in keyof Type["properties"]]: any; +}>; + +export type InterfaceInputReturnType> = { + return: any; + properties?: InterfacePropertiesInputReturnType; +}; + +export type UnionInputReturnType = { + return: any; +}; + +export type PrimitiveInputReturnType = { + return: any; +}; + +export type BaseInputReturnType< + Types extends TraverserTypes, + TypeName extends keyof Types, +> = Types[TypeName] extends InterfaceType + ? InterfaceInputReturnType + : Types[TypeName] extends UnionType + ? UnionInputReturnType + : Types[TypeName] extends PrimitiveType + ? PrimitiveInputReturnType + : never; + +export type TransformerInputReturnTypes> = + Partial<{ + [TypeName in keyof Types]: BaseInputReturnType; + }>; diff --git a/packages/type-traverser/src/TransformerReturnTypesDefaults.ts b/packages/type-traverser/src/TransformerReturnTypesDefaults.ts new file mode 100644 index 0000000..75f9322 --- /dev/null +++ b/packages/type-traverser/src/TransformerReturnTypesDefaults.ts @@ -0,0 +1,215 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { + BaseInputReturnType, + InterfaceInputReturnType, + InterfacePropertiesInputReturnType, + InterfaceType, + PrimitiveReturnType, + PrimitiveType, + TransformerInputReturnTypes, + TraverserTypes, + UnionInputReturnType, + UnionType, +} from "."; + +export type RecursivelyFindReturnType< + Types extends TraverserTypes, + InputReturnTypes extends TransformerInputReturnTypes, + TypeNameToFind extends keyof Types, + VisitedTypeNames extends keyof Types, +> = TypeNameToFind extends VisitedTypeNames + ? Types[TypeNameToFind]["type"] + : InputReturnTypes[TypeNameToFind] extends BaseInputReturnType< + Types, + Types[TypeNameToFind] + > + ? InputReturnTypes[TypeNameToFind]["return"] + : ApplyTransformerReturnTypeDefault< + Types, + InputReturnTypes, + TypeNameToFind, + VisitedTypeNames | TypeNameToFind + >["return"]; + +export type ApplyUndefined = + undefined extends OriginalType ? ReturnType | undefined : ReturnType; + +export type ApplyArrayAndUndefined = ApplyUndefined< + OriginalType, + NonNullable extends Array ? Array : ReturnType +>; + +export type HackilyApplyConditionalPropertyDefaults< + Types extends TraverserTypes, + InputReturnTypes extends TransformerInputReturnTypes, + VisitedTypeNames extends keyof Types, + Type extends InterfaceType, + PropertiesInputRetunType extends InterfacePropertiesInputReturnType, + PropertyName extends keyof Type["type"], + FallbackKey extends keyof Types, +> = unknown extends PropertiesInputRetunType[PropertyName] + ? ApplyArrayAndUndefined< + Type["type"][PropertyName], + RecursivelyFindReturnType< + Types, + InputReturnTypes, + FallbackKey, + VisitedTypeNames + > + > + : ApplyUndefined< + Type["type"][PropertyName], + PropertiesInputRetunType[PropertyName] + >; + +export type HackilyApplyConditionalPropertiesDefaults< + Types extends TraverserTypes, + InputReturnTypes extends TransformerInputReturnTypes, + VisitedTypeNames extends keyof Types, + Type extends InterfaceType, + InputReturnType extends InterfaceInputReturnType, + PropertyName extends keyof Type["type"], + FallbackKey extends keyof Types, +> = InputReturnType["properties"] extends InterfacePropertiesInputReturnType + ? HackilyApplyConditionalPropertyDefaults< + Types, + InputReturnTypes, + VisitedTypeNames, + Type, + InputReturnType["properties"], + PropertyName, + FallbackKey + > + : ApplyArrayAndUndefined< + Type["type"][PropertyName], + RecursivelyFindReturnType< + Types, + InputReturnTypes, + FallbackKey, + VisitedTypeNames + > + >; + +export type ApplyTransformerInterfacePropertiesReturnTypeDefault< + Types extends TraverserTypes, + InputReturnTypes extends TransformerInputReturnTypes, + TypeName extends keyof Types, + VisitedTypeNames extends keyof Types, +> = Types[TypeName] extends InterfaceType + ? { + [PropertyName in keyof Types[TypeName]["properties"]]: InputReturnTypes[TypeName] extends InterfaceInputReturnType< + Types[TypeName] + > + ? HackilyApplyConditionalPropertiesDefaults< + Types, + InputReturnTypes, + VisitedTypeNames, + Types[TypeName], + InputReturnTypes[TypeName], + PropertyName, + Types[TypeName]["properties"][PropertyName] + > + : ApplyArrayAndUndefined< + Types[TypeName]["type"][PropertyName], + RecursivelyFindReturnType< + Types, + InputReturnTypes, + Types[TypeName]["properties"][PropertyName], + VisitedTypeNames + > + >; + } + : never; + +export type ApplyTransformerInterfaceReturnTypeDefault< + Types extends TraverserTypes, + InputReturnTypes extends TransformerInputReturnTypes, + TypeName extends keyof Types, + Type extends InterfaceType, + VisitedTypeNames extends keyof Types, +> = { + return: InputReturnTypes[TypeName] extends InterfaceInputReturnType + ? InputReturnTypes[TypeName]["return"] + : ApplyTransformerInterfacePropertiesReturnTypeDefault< + Types, + InputReturnTypes, + TypeName, + VisitedTypeNames + >; + properties: ApplyTransformerInterfacePropertiesReturnTypeDefault< + Types, + InputReturnTypes, + TypeName, + VisitedTypeNames + >; +}; + +export type ApplyTransformerUnionReturnTypeDefault< + Types extends TraverserTypes, + InputReturnTypes extends TransformerInputReturnTypes, + TypeName extends keyof Types, + Type extends UnionType, + VisitedTypeNames extends keyof Types, +> = { + return: InputReturnTypes[TypeName] extends UnionInputReturnType + ? InputReturnTypes[TypeName]["return"] + : RecursivelyFindReturnType< + Types, + InputReturnTypes, + Type["typeNames"], + VisitedTypeNames + >; +}; + +export type ApplyTransformerPrimitiveReturnTypeDefault< + Types extends TraverserTypes, + InputReturnTypes extends TransformerInputReturnTypes, + TypeName extends keyof Types, + Type extends PrimitiveType, +> = { + return: InputReturnTypes[TypeName] extends PrimitiveReturnType + ? InputReturnTypes[TypeName]["return"] + : Type["type"]; +}; + +export type ApplyTransformerReturnTypeDefault< + Types extends TraverserTypes, + InputReturnTypes extends TransformerInputReturnTypes, + TypeName extends keyof Types, + VisitedTypeNames extends keyof Types, +> = Types[TypeName] extends InterfaceType + ? ApplyTransformerInterfaceReturnTypeDefault< + Types, + InputReturnTypes, + TypeName, + Types[TypeName], + VisitedTypeNames + > + : Types[TypeName] extends UnionType + ? ApplyTransformerUnionReturnTypeDefault< + Types, + InputReturnTypes, + TypeName, + Types[TypeName], + VisitedTypeNames + > + : Types[TypeName] extends PrimitiveType + ? ApplyTransformerPrimitiveReturnTypeDefault< + Types, + InputReturnTypes, + TypeName, + Types[TypeName] + > + : never; + +export type ApplyTransformerReturnTypesDefaults< + Types extends TraverserTypes, + InputReturnTypes extends TransformerInputReturnTypes, +> = { + [TypeName in keyof Types]: ApplyTransformerReturnTypeDefault< + Types, + InputReturnTypes, + TypeName, + never + >; +}; diff --git a/packages/type-traverser/src/Transformers.ts b/packages/type-traverser/src/Transformers.ts new file mode 100644 index 0000000..a649fa4 --- /dev/null +++ b/packages/type-traverser/src/Transformers.ts @@ -0,0 +1,244 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { + ApplyTransformerReturnTypesDefaults, + InterfaceReturnType, + InterfaceType, + PrimitiveReturnType, + PrimitiveType, + TransformerInputReturnTypes, + TransformerReturnTypes, + TraverserTypes, + UnionReturnType, + UnionType, +} from "."; + +export type GetTransformedChildrenFunction = + () => Promise; + +export type SetReturnPointerFunction = ( + returnPointer: ReturnType, +) => void; + +export type InterfaceTransformerFunction< + Types extends TraverserTypes, + Type extends InterfaceType, + ReturnType extends InterfaceReturnType, + Context, +> = ( + originalData: Type["type"], + getTransformedChildren: GetTransformedChildrenFunction<{ + [PropertyName in keyof ReturnType["properties"]]: ReturnType["properties"][PropertyName]; + }>, + setReturnPointer: SetReturnPointerFunction, + context: Context, +) => Promise; + +export type InterfaceTransformerPropertyFunction< + Types extends TraverserTypes, + Type extends InterfaceType, + ReturnTypes extends TransformerReturnTypes, + ReturnType extends InterfaceReturnType, + PropertyName extends keyof Type["properties"], + Context, +> = ( + originalData: Types[Type["properties"][PropertyName]]["type"], + getTransfromedChildren: GetTransformedChildrenFunction< + ReturnTypes[Type["properties"][PropertyName]]["return"] + >, + context: Context, +) => Promise; + +export type InterfaceTransformerDefinition< + Types extends TraverserTypes, + Type extends InterfaceType, + ReturnTypes extends TransformerReturnTypes, + ReturnType extends InterfaceReturnType, + Context, +> = { + transformer: InterfaceTransformerFunction; + properties: { + [PropertyName in keyof Type["properties"]]: InterfaceTransformerPropertyFunction< + Types, + Type, + ReturnTypes, + ReturnType, + PropertyName, + Context + >; + }; +}; + +export type UnionTransformerFunction< + Types extends TraverserTypes, + Type extends UnionType, + ReturnTypes extends TransformerReturnTypes, + ReturnType extends UnionReturnType, + Context, +> = ( + originalData: Type["type"], + getTransformedChildren: GetTransformedChildrenFunction< + ReturnTypes[Type["typeNames"]]["return"] + >, + setReturnPointer: SetReturnPointerFunction, + context: Context, +) => Promise; + +export type UnionTransformerDefinition< + Types extends TraverserTypes, + Type extends UnionType, + ReturnTypes extends TransformerReturnTypes, + ReturnType extends UnionReturnType, + Context, +> = UnionTransformerFunction; + +export type PrimitiveTransformerFunction< + Type extends PrimitiveType, + ReturnType extends PrimitiveReturnType, + Context, +> = ( + originalData: Type["type"], + context: Context, +) => Promise; + +export type PrimitiveTransformerDefinition< + Type extends PrimitiveType, + ReturnType extends PrimitiveReturnType, + Context, +> = PrimitiveTransformerFunction; + +export type TransformerDefinition< + Types extends TraverserTypes, + ReturnTypes extends TransformerReturnTypes, + TypeName extends keyof Types, + Context, +> = Types[TypeName] extends InterfaceType + ? ReturnTypes[TypeName] extends InterfaceReturnType + ? InterfaceTransformerDefinition< + Types, + Types[TypeName], + ReturnTypes, + ReturnTypes[TypeName], + Context + > + : never + : Types[TypeName] extends UnionType + ? ReturnTypes[TypeName] extends UnionReturnType + ? UnionTransformerDefinition< + Types, + Types[TypeName], + ReturnTypes, + ReturnTypes[TypeName], + Context + > + : never + : Types[TypeName] extends PrimitiveType + ? ReturnTypes[TypeName] extends PrimitiveReturnType + ? PrimitiveTransformerDefinition< + Types[TypeName], + ReturnTypes[TypeName], + Context + > + : never + : never; + +export type Transformers< + Types extends TraverserTypes, + ReturnTypes extends TransformerReturnTypes, + Context, +> = { + [TypeName in keyof ReturnTypes]: TransformerDefinition< + Types, + ReturnTypes, + TypeName, + Context + >; +}; + +/** + * Input + */ +export type InterfaceTransformerInputDefinition< + Types extends TraverserTypes, + Type extends InterfaceType, + ReturnTypes extends TransformerReturnTypes, + ReturnType extends InterfaceReturnType, + Context, +> = { + transformer: InterfaceTransformerFunction; + properties?: Partial<{ + [PropertyName in keyof Type["properties"]]: InterfaceTransformerPropertyFunction< + Types, + Type, + ReturnTypes, + ReturnType, + PropertyName, + Context + >; + }>; +}; + +export type UnionTransformerInputDefinition< + Types extends TraverserTypes, + Type extends UnionType, + ReturnTypes extends TransformerReturnTypes, + ReturnType extends UnionReturnType, + Context, +> = UnionTransformerFunction; + +export type PrimitiveTransformerInputDefinition< + Type extends PrimitiveType, + ReturnType extends PrimitiveReturnType, + Context, +> = PrimitiveTransformerFunction; + +export type TransformerInputDefinition< + Types extends TraverserTypes, + ReturnTypes extends TransformerReturnTypes, + TypeName extends keyof Types, + Context, +> = Types[TypeName] extends InterfaceType + ? ReturnTypes[TypeName] extends InterfaceReturnType + ? InterfaceTransformerInputDefinition< + Types, + Types[TypeName], + ReturnTypes, + ReturnTypes[TypeName], + Context + > + : never + : Types[TypeName] extends UnionType + ? ReturnTypes[TypeName] extends UnionReturnType + ? UnionTransformerInputDefinition< + Types, + Types[TypeName], + ReturnTypes, + ReturnTypes[TypeName], + Context + > + : never + : Types[TypeName] extends PrimitiveType + ? ReturnTypes[TypeName] extends PrimitiveReturnType + ? PrimitiveTransformerInputDefinition< + Types[TypeName], + ReturnTypes[TypeName], + Context + > + : never + : never; + +export type TransformersInput< + Types extends TraverserTypes, + InputReturnTypes extends TransformerInputReturnTypes, + Context, + ReturnTypes extends + TransformerReturnTypes = ApplyTransformerReturnTypesDefaults< + Types, + InputReturnTypes + >, +> = Partial<{ + [TypeName in keyof ReturnTypes]: undefined extends InputReturnTypes[TypeName] + ? + | TransformerInputDefinition + | undefined + : TransformerInputDefinition; +}>; diff --git a/packages/type-traverser/src/Traverser.ts b/packages/type-traverser/src/Traverser.ts new file mode 100644 index 0000000..09a046f --- /dev/null +++ b/packages/type-traverser/src/Traverser.ts @@ -0,0 +1,36 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { + TransformerInputReturnTypes, + TraverserDefinition, + TraverserTypes, + VisitorsInput, +} from "."; +import { Transformer, Visitor } from "."; +import type { TransformersInput } from "./Transformers"; + +export class Traverser< + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Types extends TraverserTypes, +> { + private traverserDefinition: TraverserDefinition; + + constructor(traverserDefinition: TraverserDefinition) { + this.traverserDefinition = traverserDefinition; + } + + public createTransformer< + ReturnTypes extends TransformerInputReturnTypes, + Context = undefined, + >(transformers: TransformersInput) { + return new Transformer( + this.traverserDefinition, + transformers, + ); + } + + public createVisitor( + visitors: VisitorsInput, + ) { + return new Visitor(this.traverserDefinition, visitors); + } +} diff --git a/packages/type-traverser/src/TraverserDefinition.ts b/packages/type-traverser/src/TraverserDefinition.ts new file mode 100644 index 0000000..0630e14 --- /dev/null +++ b/packages/type-traverser/src/TraverserDefinition.ts @@ -0,0 +1,35 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { + InterfaceType, + TraverserTypes, + UnionType, + PrimitiveType, +} from "."; + +export type InterfaceTraverserDefinition> = { + kind: "interface"; + properties: { + [PropertyField in keyof Type["properties"]]: Type["properties"][PropertyField]; + }; +}; + +export type UnionTraverserDefinition> = { + kind: "union"; + selector: (item: Type["type"]) => Type["typeNames"]; +}; + +export type PrimitiveTraverserDefinition = { + kind: "primitive"; +}; + +export type TraverserDefinition> = { + [TypeField in keyof Types]: Types[TypeField] extends InterfaceType< + keyof Types + > + ? InterfaceTraverserDefinition + : Types[TypeField] extends UnionType + ? UnionTraverserDefinition + : Types[TypeField] extends PrimitiveType + ? PrimitiveTraverserDefinition + : never; +}; diff --git a/packages/type-traverser/src/TraverserTypes.ts b/packages/type-traverser/src/TraverserTypes.ts new file mode 100644 index 0000000..1830aa2 --- /dev/null +++ b/packages/type-traverser/src/TraverserTypes.ts @@ -0,0 +1,33 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { AssertExtends, KeyTypes } from "./UtilTypes"; + +export interface InterfaceType { + kind: "interface"; + type: any; + properties: { + [key: string]: TypeNames; + }; +} + +export interface UnionType { + kind: "union"; + type: any; + typeNames: TypeNames; +} + +export interface PrimitiveType { + kind: "primitive"; + type: any; +} + +export type BaseTraverserTypes = + | InterfaceType + | UnionType + | PrimitiveType; + +export type TraverserTypes = { + [Property in TypeNames]: BaseTraverserTypes; +}; + +export type ValidateTraverserTypes> = + AssertExtends, Types>; diff --git a/packages/type-traverser/src/UtilTypes.ts b/packages/type-traverser/src/UtilTypes.ts new file mode 100644 index 0000000..74e302d --- /dev/null +++ b/packages/type-traverser/src/UtilTypes.ts @@ -0,0 +1,6 @@ +export type KeyTypes = string | number | symbol; + +export type AssertExtends< + Extended, + Extends extends Extended, +> = Extends extends Extended ? Extends : never; diff --git a/packages/type-traverser/src/Visitor.ts b/packages/type-traverser/src/Visitor.ts new file mode 100644 index 0000000..de74556 --- /dev/null +++ b/packages/type-traverser/src/Visitor.ts @@ -0,0 +1,145 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { + InterfaceTraverserDefinition, + InterfaceType, + InterfaceVisitorDefinition, + InterfaceVisitorInputDefinition, + KeyTypes, + PrimitiveType, + PrimitiveVisitorDefinition, + PrimitiveVisitorInputDefinition, + TraverserDefinition, + TraverserTypes, + UnionType, + UnionVisitorDefinition, + UnionVisitorInputDefinition, + Visitors, + VisitorsInput, +} from "."; +import { MultiSet } from "./transformerSubTraversers/util/MultiSet"; +import { visitorParentSubTraverser } from "./visitorSubTraversers/VisitorParentSubTraverser"; + +// TODO: Lots of "any" in this file. I'm just done with fancy typescript, +// but if I ever feel so inclined, I should fix this in the future. + +export class Visitor< + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Types extends TraverserTypes, + Context = undefined, +> { + private traverserDefinition: TraverserDefinition; + private visitors: Visitors; + + constructor( + traverserDefinition: TraverserDefinition, + visitors: VisitorsInput, + ) { + this.traverserDefinition = traverserDefinition; + this.visitors = this.applyDefaultVisitors(visitors); + } + + private applyDefaultInterfaceVisitorProperties< + Type extends InterfaceType, + >( + typeName: keyof Types, + typePropertiesInput: InterfaceVisitorInputDefinition< + Types, + Type, + Context + >["properties"], + ): InterfaceVisitorDefinition["properties"] { + return Object.keys( + (this.traverserDefinition[typeName] as InterfaceTraverserDefinition) + .properties, + ).reduce>((agg, key: keyof Type["properties"]) => { + if (typePropertiesInput && typePropertiesInput[key]) { + agg[key] = typePropertiesInput[key]; + } else { + agg[key] = () => { + return; + }; + } + return agg; + }, {}) as InterfaceVisitorDefinition["properties"]; + } + + private applyDefaultInterfaceVisitor>( + typeName: keyof Types, + typeInput?: InterfaceVisitorInputDefinition, + ): InterfaceVisitorDefinition { + if (!typeInput) { + return { + visitor: async () => { + return; + }, + properties: this.applyDefaultInterfaceVisitorProperties(typeName, {}), + }; + } + return { + visitor: typeInput.visitor, + properties: this.applyDefaultInterfaceVisitorProperties( + typeName, + typeInput.properties, + ), + }; + } + + private applyDefaultUnionVisitor>( + typeInput?: UnionVisitorInputDefinition, + ): UnionVisitorDefinition { + if (!typeInput) { + return async () => { + return; + }; + } + return typeInput; + } + + private applyDefaultPrimitiveVisitor( + typeInput?: PrimitiveVisitorInputDefinition, + ): PrimitiveVisitorDefinition { + if (!typeInput) { + return async () => { + return; + }; + } + return typeInput; + } + + private applyDefaultVisitors( + inputVisitors: VisitorsInput, + ): Visitors { + const finalVisitors: Partial> = {}; + Object.keys(this.traverserDefinition).forEach((typeName: keyof Types) => { + if (this.traverserDefinition[typeName].kind === "interface") { + finalVisitors[typeName] = this.applyDefaultInterfaceVisitor( + typeName, + inputVisitors[typeName] as any, + ) as any; + } else if (this.traverserDefinition[typeName].kind === "union") { + finalVisitors[typeName] = this.applyDefaultUnionVisitor( + inputVisitors[typeName] as any, + ) as any; + } else if (this.traverserDefinition[typeName].kind === "primitive") { + finalVisitors[typeName] = this.applyDefaultPrimitiveVisitor( + inputVisitors[typeName] as any, + ) as any; + } + }); + return finalVisitors as Visitors; + } + + public async visit( + item: Types[TypeName]["type"], + itemTypeName: TypeName, + context: Context, + ): Promise { + const toReturn = await visitorParentSubTraverser(item, itemTypeName, { + traverserDefinition: this.traverserDefinition, + visitors: this.visitors, + visitedObjects: new MultiSet(), + context, + }); + return toReturn; + } +} diff --git a/packages/type-traverser/src/Visitors.ts b/packages/type-traverser/src/Visitors.ts new file mode 100644 index 0000000..086d903 --- /dev/null +++ b/packages/type-traverser/src/Visitors.ts @@ -0,0 +1,126 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { + InterfaceType, + PrimitiveType, + TraverserTypes, + UnionType, +} from "."; + +export type InterfaceVisitorFunction< + Types extends TraverserTypes, + Type extends InterfaceType, + Context, +> = (originalData: Type["type"], context: Context) => Promise; + +export type InterfaceVisitorPropertyFunction< + Types extends TraverserTypes, + Type extends InterfaceType, + PropertyName extends keyof Type["properties"], + Context, +> = ( + originalData: Types[Type["properties"][PropertyName]]["type"], + context: Context, +) => Promise; + +export type InterfaceVisitorDefinition< + Types extends TraverserTypes, + Type extends InterfaceType, + Context, +> = { + visitor: InterfaceVisitorFunction; + properties: { + [PropertyName in keyof Type["properties"]]: InterfaceVisitorPropertyFunction< + Types, + Type, + PropertyName, + Context + >; + }; +}; + +export type UnionVisitorFunction< + Types extends TraverserTypes, + Type extends UnionType, + Context, +> = (originalData: Type["type"], context: Context) => Promise; + +export type UnionVisitorDefinition< + Types extends TraverserTypes, + Type extends UnionType, + Context, +> = UnionVisitorFunction; + +export type PrimitiveVisitorFunction = ( + originalData: Type["type"], + context: Context, +) => Promise; + +export type PrimitiveVisitorDefinition< + Type extends PrimitiveType, + Context, +> = PrimitiveVisitorFunction; + +export type VisitorDefinition< + Types extends TraverserTypes, + TypeName extends keyof Types, + Context, +> = Types[TypeName] extends InterfaceType + ? InterfaceVisitorDefinition + : Types[TypeName] extends UnionType + ? UnionVisitorDefinition + : Types[TypeName] extends PrimitiveType + ? PrimitiveVisitorDefinition + : never; + +export type Visitors, Context> = { + [TypeName in keyof Types]: VisitorDefinition; +}; + +/** + * Input + */ +export type InterfaceVisitorInputDefinition< + Types extends TraverserTypes, + Type extends InterfaceType, + Context, +> = { + visitor: InterfaceVisitorFunction; + properties?: Partial<{ + [PropertyName in keyof Type["properties"]]: InterfaceVisitorPropertyFunction< + Types, + Type, + PropertyName, + Context + >; + }>; +}; + +export type UnionVisitorInputDefinition< + Types extends TraverserTypes, + Type extends UnionType, + Context, +> = UnionVisitorFunction; + +export type PrimitiveVisitorInputDefinition< + Type extends PrimitiveType, + Context, +> = PrimitiveVisitorFunction; + +export type VisitorInputDefinition< + Types extends TraverserTypes, + TypeName extends keyof Types, + Context, +> = Types[TypeName] extends InterfaceType + ? InterfaceVisitorInputDefinition + : Types[TypeName] extends UnionType + ? UnionVisitorInputDefinition + : Types[TypeName] extends PrimitiveType + ? PrimitiveVisitorInputDefinition + : never; + +export type VisitorsInput< + Types extends TraverserTypes, + Context, +> = Partial<{ + [TypeName in keyof Types]: VisitorInputDefinition; +}>; diff --git a/packages/type-traverser/src/index.ts b/packages/type-traverser/src/index.ts new file mode 100644 index 0000000..1a33e26 --- /dev/null +++ b/packages/type-traverser/src/index.ts @@ -0,0 +1,9 @@ +export * from "./TraverserTypes"; +export * from "./UtilTypes"; +export * from "./TraverserDefinition"; +export * from "./TransformerReturnTypes"; +export * from "./TransformerReturnTypesDefaults"; +export * from "./Traverser"; +export * from "./Transformer"; +export * from "./Visitor"; +export * from "./Visitors"; diff --git a/packages/type-traverser/src/transformerSubTraversers/TransformerInterfaceSubTraverser.ts b/packages/type-traverser/src/transformerSubTraversers/TransformerInterfaceSubTraverser.ts new file mode 100644 index 0000000..9d0b227 --- /dev/null +++ b/packages/type-traverser/src/transformerSubTraversers/TransformerInterfaceSubTraverser.ts @@ -0,0 +1,123 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { TraverserTypes } from ".."; +import type { + InterfaceReturnType, + TransformerReturnTypes, +} from "../TransformerReturnTypes"; +import type { InterfaceTransformerDefinition } from "../Transformers"; +import type { InterfaceTraverserDefinition } from "../TraverserDefinition"; +import type { InterfaceType } from "../TraverserTypes"; +import { transformerParentSubTraverser } from "./TransformerParentSubTraverser"; +import type { TransformerSubTraverserGlobals } from "./util/transformerSubTraverserTypes"; + +export async function transformerInterfaceSubTraverser< + Types extends TraverserTypes, + TypeName extends keyof Types, + ReturnTypes extends TransformerReturnTypes, + Type extends InterfaceType, + ReturnType extends InterfaceReturnType, + Context, +>( + item: Type["type"], + itemTypeName: TypeName, + globals: TransformerSubTraverserGlobals, +): Promise { + const { + traverserDefinition, + transformers, + circularDependencyAwaiter, + executingPromises, + superPromise, + } = globals; + const resolveSuperPromise = superPromise.add(); + return new Promise(async (resolve, reject) => { + try { + // Get the returns for properties + const definition = traverserDefinition[ + itemTypeName + ] as InterfaceTraverserDefinition; + const transformer = transformers[ + itemTypeName + ] as unknown as InterfaceTransformerDefinition< + Types, + Type, + ReturnTypes, + ReturnType, + Context + >; + const transformedObject = await transformer.transformer( + item, + async () => { + const propertiesReturn: ReturnType["properties"] = Object.fromEntries( + await Promise.all( + Object.entries(definition.properties).map( + async ([propertyName]) => { + const originalObject = item[propertyName]; + const originalPropertyDefinition = + definition.properties[propertyName]; + const transformedProperty = await transformer.properties[ + propertyName + ]( + originalObject, + async () => { + if (originalObject === undefined) { + return undefined; + } else if (Array.isArray(originalObject)) { + return Promise.all( + originalObject.map(async (subObject) => { + const onResolve = circularDependencyAwaiter.add( + item, + itemTypeName, + subObject, + originalPropertyDefinition, + executingPromises, + ); + const toReturn = + await transformerParentSubTraverser( + subObject, + originalPropertyDefinition, + globals as any, + ); + onResolve(); + return toReturn; + }), + ); + } else { + const onResolve = circularDependencyAwaiter.add( + item, + itemTypeName, + originalObject, + originalPropertyDefinition, + executingPromises, + ); + const toReturn = await transformerParentSubTraverser( + originalObject, + originalPropertyDefinition, + globals as any, + ); + onResolve(); + return toReturn; + } + }, + globals.context, + ); + return [propertyName, transformedProperty]; + }, + ), + ), + ); + return propertiesReturn; + }, + (input) => { + resolve(input); + }, + globals.context, + ); + resolve(transformedObject); + resolveSuperPromise(); + } catch (err) { + reject(err); + resolveSuperPromise(err); + } + }); +} diff --git a/packages/type-traverser/src/transformerSubTraversers/TransformerParentSubTraverser.ts b/packages/type-traverser/src/transformerSubTraversers/TransformerParentSubTraverser.ts new file mode 100644 index 0000000..6267e71 --- /dev/null +++ b/packages/type-traverser/src/transformerSubTraversers/TransformerParentSubTraverser.ts @@ -0,0 +1,59 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { BaseReturnType, BaseTraverserTypes, TraverserTypes } from ".."; +import type { TransformerReturnTypes } from "../TransformerReturnTypes"; +import { transformerInterfaceSubTraverser } from "./TransformerInterfaceSubTraverser"; +import { transformerPrimitiveSubTraverser } from "./TransformerPrimitiveSubTraverser"; +import { transformerUnionSubTraverser } from "./TransformerUnionSubTraverser"; +import type { + TransformerSubTraverser, + TransformerSubTraverserGlobals, +} from "./util/transformerSubTraverserTypes"; +import { timeout } from "./util/timeout"; + +const subTraversers: Record< + string, + TransformerSubTraverser +> = { + interface: transformerInterfaceSubTraverser, + union: transformerUnionSubTraverser, + primitive: transformerPrimitiveSubTraverser, +}; + +export async function transformerParentSubTraverser< + Types extends TraverserTypes, + TypeName extends keyof Types, + ReturnTypes extends TransformerReturnTypes, + Type extends BaseTraverserTypes, + ReturnType extends BaseReturnType, + Context, +>( + item: Type["type"], + itemTypeName: TypeName, + globals: TransformerSubTraverserGlobals, +): Promise { + const { traverserDefinition, executingPromises } = globals; + if (executingPromises.has(item, itemTypeName)) { + return executingPromises.get(item, itemTypeName)?.promise; + } + const subTraverser: TransformerSubTraverser< + Types, + TypeName, + ReturnTypes, + Type, + ReturnType, + Context + > = subTraversers[traverserDefinition[itemTypeName].kind]; + const executingPromise = { + promise: (async () => { + // This timeout exists to ensure that this promise is recorded + // in executing promises before we continue traversing. + await timeout(0); + return subTraverser(item, itemTypeName, globals); + })(), + isResolved: false, + }; + executingPromises.set(item, itemTypeName, executingPromise); + const toReturn = await executingPromise.promise; + executingPromise.isResolved = true; + return toReturn; +} diff --git a/packages/type-traverser/src/transformerSubTraversers/TransformerPrimitiveSubTraverser.ts b/packages/type-traverser/src/transformerSubTraversers/TransformerPrimitiveSubTraverser.ts new file mode 100644 index 0000000..8b49bfc --- /dev/null +++ b/packages/type-traverser/src/transformerSubTraversers/TransformerPrimitiveSubTraverser.ts @@ -0,0 +1,28 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { TraverserTypes } from ".."; +import type { + PrimitiveReturnType, + TransformerReturnTypes, +} from "../TransformerReturnTypes"; +import type { PrimitiveTransformerDefinition } from "../Transformers"; +import type { PrimitiveType } from "../TraverserTypes"; +import type { TransformerSubTraverserGlobals } from "./util/transformerSubTraverserTypes"; + +export async function transformerPrimitiveSubTraverser< + Types extends TraverserTypes, + TypeName extends keyof Types, + ReturnTypes extends TransformerReturnTypes, + Type extends PrimitiveType, + ReturnType extends PrimitiveReturnType, + Context, +>( + item: Type["type"], + itemTypeName: TypeName, + globals: TransformerSubTraverserGlobals, +): Promise { + const { transformers } = globals; + const transformer = transformers[ + itemTypeName + ] as unknown as PrimitiveTransformerDefinition; + return transformer(item, globals.context); +} diff --git a/packages/type-traverser/src/transformerSubTraversers/TransformerUnionSubTraverser.ts b/packages/type-traverser/src/transformerSubTraversers/TransformerUnionSubTraverser.ts new file mode 100644 index 0000000..fd977b2 --- /dev/null +++ b/packages/type-traverser/src/transformerSubTraversers/TransformerUnionSubTraverser.ts @@ -0,0 +1,78 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { TraverserTypes } from ".."; +import type { + TransformerReturnTypes, + UnionReturnType, +} from "../TransformerReturnTypes"; +import type { UnionTransformerDefinition } from "../Transformers"; +import type { UnionTraverserDefinition } from "../TraverserDefinition"; +import type { UnionType } from "../TraverserTypes"; +import { transformerParentSubTraverser } from "./TransformerParentSubTraverser"; +import type { TransformerSubTraverserGlobals } from "./util/transformerSubTraverserTypes"; + +export async function transformerUnionSubTraverser< + Types extends TraverserTypes, + TypeName extends keyof Types, + ReturnTypes extends TransformerReturnTypes, + Type extends UnionType, + ReturnType extends UnionReturnType, + Context, +>( + item: Type["type"], + itemTypeName: TypeName, + globals: TransformerSubTraverserGlobals, +): Promise { + const { + traverserDefinition, + transformers, + circularDependencyAwaiter, + executingPromises, + superPromise, + } = globals; + const resolveSuperPromise = superPromise.add(); + return new Promise(async (resolve, reject) => { + try { + const definition = traverserDefinition[ + itemTypeName + ] as UnionTraverserDefinition; + const transformer = transformers[ + itemTypeName + ] as unknown as UnionTransformerDefinition< + Types, + Type, + ReturnTypes, + ReturnType, + Context + >; + const transformedObject = await transformer( + item, + async () => { + const itemSpecificTypeName = definition.selector(item); + const onResolve = circularDependencyAwaiter.add( + item, + itemTypeName, + item, + itemSpecificTypeName, + executingPromises, + ); + const toReturn = await transformerParentSubTraverser( + item, + itemSpecificTypeName, + globals, + ); + onResolve(); + return toReturn; + }, + (input) => { + resolve(input); + }, + globals.context, + ); + resolve(transformedObject); + resolveSuperPromise(); + } catch (err) { + reject(err); + resolveSuperPromise(err); + } + }); +} diff --git a/packages/type-traverser/src/transformerSubTraversers/util/CircularDependencyAwaiter.ts b/packages/type-traverser/src/transformerSubTraversers/util/CircularDependencyAwaiter.ts new file mode 100644 index 0000000..6a0c5e5 --- /dev/null +++ b/packages/type-traverser/src/transformerSubTraversers/util/CircularDependencyAwaiter.ts @@ -0,0 +1,71 @@ +import type { KeyTypes } from "../.."; +import { MultiMap } from "./MultiMap"; +import { MultiSet } from "./MultiSet"; +import type { TransformerSubTraverserExecutingPromises } from "./transformerSubTraverserTypes"; + +export class CircularDepenedencyAwaiter { + private graphNodes: MultiMap> = + new MultiMap(); + + add( + subjectItem: object, + subjectItemName: KeyTypes, + awaitedItem: object, + awaitedItemName: KeyTypes, + executingPromises: TransformerSubTraverserExecutingPromises, + ): () => void { + // If the promise has already resolved, do not add + if (executingPromises.get(awaitedItem, awaitedItemName)?.isResolved) { + return () => { + /* Do Nothing */ + }; + } + // If it hasn't then add to the graph + if (!this.graphNodes.has(subjectItem, subjectItemName)) { + this.graphNodes.set(subjectItem, subjectItemName, new MultiSet()); + } + this.graphNodes + .get(subjectItem, subjectItemName) + ?.add(awaitedItem, awaitedItemName); + this.checkForCircuit( + awaitedItem, + awaitedItemName, + subjectItem, + subjectItemName, + ); + return () => { + const awaitedSet = this.graphNodes.get(subjectItem, subjectItemName); + awaitedSet?.delete(awaitedItem, awaitedItemName); + if (awaitedSet?.size === 0) { + this.graphNodes.delete(subjectItem, subjectItemName); + } + }; + } + + private checkForCircuit( + curItem: object, + curItemName: KeyTypes, + subjectItem: object, + subjectItemName: KeyTypes, + ): void { + const nextNodes = this.graphNodes.get(curItem, curItemName); + if (!nextNodes) { + return; + } + nextNodes.forEach((nextItem, nextItemName) => { + if (subjectItem === nextItem && subjectItemName === nextItemName) { + throw new Error( + `Circular dependency found. Use the 'setReturnPointer' function. The loop includes the '${ + subjectItemName as string + }' type`, + ); + } + this.checkForCircuit( + nextItem, + nextItemName, + subjectItem, + subjectItemName, + ); + }); + } +} diff --git a/packages/type-traverser/src/transformerSubTraversers/util/MultiMap.ts b/packages/type-traverser/src/transformerSubTraversers/util/MultiMap.ts new file mode 100644 index 0000000..e6790ae --- /dev/null +++ b/packages/type-traverser/src/transformerSubTraversers/util/MultiMap.ts @@ -0,0 +1,63 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +export class MultiMap { + private map: Map> = new Map(); + // eslint-disable-next-line @typescript-eslint/no-inferrable-types + private internalSize: number = 0; + + get(key1: Key1, key2: Key2): Value | undefined { + const firstValue = this.map.get(key1); + if (!firstValue) { + return undefined; + } + return firstValue.get(key2); + } + set(key1: Key1, key2: Key2, value: Value): void { + let nestedMap = this.map.get(key1); + if (!nestedMap) { + nestedMap = new Map(); + this.map.set(key1, nestedMap); + } + if (!nestedMap.has(key2)) { + this.internalSize++; + } + nestedMap.set(key2, value); + } + delete(key1: Key1, key2: Key2): void { + const nestedMap = this.map.get(key1); + if (!nestedMap) { + return; + } + if (nestedMap.has(key2)) { + this.internalSize--; + } + nestedMap.delete(key2); + if (nestedMap.size === 0) { + this.map.delete(key1); + } + } + has(key1: Key1, key2: Key2): boolean { + const firstValue = this.map.get(key1); + if (!firstValue) { + return false; + } + return firstValue.has(key2); + } + toString( + key1Transformer: (key: Key1) => any = (key) => key, + key2Transformer: (key: Key2) => any = (key) => key, + valueTransformer: (value: Value) => any = (value) => value, + ): string { + let str = ""; + Array.from(this.map.entries()).forEach(([key1, value1]) => { + Array.from(value1.entries()).forEach(([key2, value2]) => { + str += ` [${key1Transformer(key1)}, ${key2Transformer( + key2, + )}] => ${valueTransformer(value2)}\n`; + }); + }); + return str; + } + get size() { + return this.internalSize; + } +} diff --git a/packages/type-traverser/src/transformerSubTraversers/util/MultiSet.ts b/packages/type-traverser/src/transformerSubTraversers/util/MultiSet.ts new file mode 100644 index 0000000..6205f02 --- /dev/null +++ b/packages/type-traverser/src/transformerSubTraversers/util/MultiSet.ts @@ -0,0 +1,68 @@ +export class MultiSet { + private map: Map> = new Map(); + // eslint-disable-next-line @typescript-eslint/no-inferrable-types + private internalSize: number = 0; + + add(key1: Key1, key2: Key2): void { + let nestedSet = this.map.get(key1); + if (!nestedSet) { + nestedSet = new Set(); + this.map.set(key1, nestedSet); + } + if (!nestedSet.has(key2)) { + this.internalSize++; + } + nestedSet.add(key2); + } + has(key1: Key1, key2: Key2): boolean { + const firstValue = this.map.get(key1); + if (!firstValue) { + return false; + } + return firstValue.has(key2); + } + delete(key1: Key1, key2: Key2): void { + const nestedSet = this.map.get(key1); + if (!nestedSet) { + return; + } + if (nestedSet.has(key2)) { + this.internalSize--; + } + nestedSet.delete(key2); + if (nestedSet.size === 0) { + this.map.delete(key1); + } + } + get size() { + return this.internalSize; + } + clone(): MultiSet { + const newMultiSet = new MultiSet(); + this.map.forEach((key2Set, key1) => { + key2Set.forEach((key2) => { + newMultiSet.add(key1, key2); + }); + }); + return newMultiSet; + } + toString( + key1Transformer: (key: Key1) => any = (key) => key, + key2Transformer: (key: Key2) => any = (key) => key, + ) { + const multiSetValues: string[] = []; + this.forEach((item1, item2) => { + multiSetValues.push( + `(${key1Transformer(item1)},${key2Transformer(item2)})`, + ); + }); + return `${multiSetValues.join(",")}`; + } + forEach(callback: (key1: Key1, key2: Key2) => void) { + this.map.forEach((key2Set, key1) => { + key2Set.forEach((key2) => { + callback(key1, key2); + }); + }); + } +} diff --git a/packages/type-traverser/src/transformerSubTraversers/util/SuperPromise.ts b/packages/type-traverser/src/transformerSubTraversers/util/SuperPromise.ts new file mode 100644 index 0000000..b4352f6 --- /dev/null +++ b/packages/type-traverser/src/transformerSubTraversers/util/SuperPromise.ts @@ -0,0 +1,31 @@ +import { v4 } from "uuid"; + +export class SuperPromise { + private unfulfilled: Set = new Set(); + private waitResolve: (() => void) | undefined = undefined; + private waitReject: ((err: unknown) => void) | undefined = undefined; + + add(): (error?: unknown) => void { + const id = v4(); + this.unfulfilled.add(id); + return (error?: unknown) => { + if (error && this.waitReject) { + this.waitReject(error); + } + this.unfulfilled.delete(id); + if (this.unfulfilled.size === 0 && this.waitResolve) { + this.waitResolve(); + } + }; + } + + async wait(): Promise { + if (this.unfulfilled.size === 0) { + return; + } + return new Promise((resolve, reject) => { + this.waitResolve = resolve; + this.waitReject = reject; + }); + } +} diff --git a/packages/type-traverser/src/transformerSubTraversers/util/timeout.ts b/packages/type-traverser/src/transformerSubTraversers/util/timeout.ts new file mode 100644 index 0000000..da11d19 --- /dev/null +++ b/packages/type-traverser/src/transformerSubTraversers/util/timeout.ts @@ -0,0 +1,3 @@ +export function timeout(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} diff --git a/packages/type-traverser/src/transformerSubTraversers/util/transformerSubTraverserTypes.ts b/packages/type-traverser/src/transformerSubTraversers/util/transformerSubTraverserTypes.ts new file mode 100644 index 0000000..ac0dda2 --- /dev/null +++ b/packages/type-traverser/src/transformerSubTraversers/util/transformerSubTraverserTypes.ts @@ -0,0 +1,43 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { + BaseReturnType, + BaseTraverserTypes, + KeyTypes, + TransformerReturnTypes, + TraverserDefinition, + TraverserTypes, +} from "../.."; +import type { Transformers } from "../../Transformers"; +import type { CircularDepenedencyAwaiter } from "./CircularDependencyAwaiter"; +import type { MultiMap } from "./MultiMap"; +import type { SuperPromise } from "./SuperPromise"; + +export type TransformerSubTraverser< + Types extends TraverserTypes, + TypeName extends keyof Types, + ReturnTypes extends TransformerReturnTypes, + Type extends BaseTraverserTypes, + ReturnType extends BaseReturnType, + Context, +> = ( + item: Type["type"], + itemTypeName: TypeName, + globals: TransformerSubTraverserGlobals, +) => Promise; + +export interface TransformerSubTraverserGlobals< + Types extends TraverserTypes, + ReturnTypes extends TransformerReturnTypes, + Context, +> { + traverserDefinition: TraverserDefinition; + transformers: Transformers; + executingPromises: TransformerSubTraverserExecutingPromises; + circularDependencyAwaiter: CircularDepenedencyAwaiter; + superPromise: SuperPromise; + context: Context; +} + +export type TransformerSubTraverserExecutingPromises< + Keys extends KeyTypes = KeyTypes, +> = MultiMap; isResolved: boolean }>; diff --git a/packages/type-traverser/src/visitorSubTraversers/VisitorInterfaceSubTraverser.ts b/packages/type-traverser/src/visitorSubTraversers/VisitorInterfaceSubTraverser.ts new file mode 100644 index 0000000..0b8a3a6 --- /dev/null +++ b/packages/type-traverser/src/visitorSubTraversers/VisitorInterfaceSubTraverser.ts @@ -0,0 +1,61 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { InterfaceVisitorDefinition, TraverserTypes } from ".."; +import type { InterfaceTraverserDefinition } from "../TraverserDefinition"; +import type { InterfaceType } from "../TraverserTypes"; +import type { VisitorSubTraverserGlobals } from "./util/visitorSubTraverserTypes"; +import { visitorParentSubTraverser } from "./VisitorParentSubTraverser"; + +export async function visitorInterfaceSubTraverser< + Types extends TraverserTypes, + TypeName extends keyof Types, + Type extends InterfaceType, + Context, +>( + item: Type["type"], + itemTypeName: TypeName, + globals: VisitorSubTraverserGlobals, +): Promise { + const { traverserDefinition, visitors } = globals; + // Get the returns for properties + const definition = traverserDefinition[ + itemTypeName + ] as InterfaceTraverserDefinition; + const visitor = visitors[ + itemTypeName + ] as unknown as InterfaceVisitorDefinition; + + await Promise.all([ + visitor.visitor(item, globals.context), + Promise.all( + Object.entries(definition.properties).map(async ([propertyName]) => { + const originalObject = item[propertyName]; + const originalPropertyDefinition = definition.properties[propertyName]; + const propertyVisitorPromise = visitor.properties[propertyName]( + originalObject, + globals.context, + ); + let propertyTraverserPromise: Promise; + if (originalObject === undefined) { + propertyTraverserPromise = Promise.resolve(); + } else if (Array.isArray(originalObject)) { + propertyTraverserPromise = Promise.all( + originalObject.map(async (subObject) => { + await visitorParentSubTraverser( + subObject, + originalPropertyDefinition, + globals as any, + ); + }), + ); + } else { + propertyTraverserPromise = visitorParentSubTraverser( + originalObject, + originalPropertyDefinition, + globals as any, + ); + } + return Promise.all([propertyVisitorPromise, propertyTraverserPromise]); + }), + ), + ]); +} diff --git a/packages/type-traverser/src/visitorSubTraversers/VisitorParentSubTraverser.ts b/packages/type-traverser/src/visitorSubTraversers/VisitorParentSubTraverser.ts new file mode 100644 index 0000000..56553eb --- /dev/null +++ b/packages/type-traverser/src/visitorSubTraversers/VisitorParentSubTraverser.ts @@ -0,0 +1,35 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { BaseTraverserTypes, TraverserTypes } from ".."; +import type { + VisitorSubTraverser, + VisitorSubTraverserGlobals, +} from "./util/visitorSubTraverserTypes"; +import { visitorInterfaceSubTraverser } from "./VisitorInterfaceSubTraverser"; +import { visitorUnionSubTraverser } from "./VisitorUnionSubTraverser"; +import { visitorPrimitiveSubTraverser } from "./VisitorPrimitiveSubTraverser"; + +const subTraversers: Record> = { + interface: visitorInterfaceSubTraverser, + union: visitorUnionSubTraverser, + primitive: visitorPrimitiveSubTraverser, +}; + +export async function visitorParentSubTraverser< + Types extends TraverserTypes, + TypeName extends keyof Types, + Type extends BaseTraverserTypes, + Context, +>( + item: Type["type"], + itemTypeName: TypeName, + globals: VisitorSubTraverserGlobals, +): Promise { + const { traverserDefinition, visitedObjects } = globals; + if (visitedObjects.has(item, itemTypeName)) { + return; + } + visitedObjects.add(item, itemTypeName); + const subTraverser: VisitorSubTraverser = + subTraversers[traverserDefinition[itemTypeName].kind]; + return subTraverser(item, itemTypeName, globals); +} diff --git a/packages/type-traverser/src/visitorSubTraversers/VisitorPrimitiveSubTraverser.ts b/packages/type-traverser/src/visitorSubTraversers/VisitorPrimitiveSubTraverser.ts new file mode 100644 index 0000000..0d79638 --- /dev/null +++ b/packages/type-traverser/src/visitorSubTraversers/VisitorPrimitiveSubTraverser.ts @@ -0,0 +1,21 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { PrimitiveVisitorDefinition, TraverserTypes } from ".."; +import type { PrimitiveType } from "../TraverserTypes"; +import type { VisitorSubTraverserGlobals } from "./util/visitorSubTraverserTypes"; + +export async function visitorPrimitiveSubTraverser< + Types extends TraverserTypes, + TypeName extends keyof Types, + Type extends PrimitiveType, + Context, +>( + item: Type["type"], + itemTypeName: TypeName, + globals: VisitorSubTraverserGlobals, +): Promise { + const { visitors } = globals; + const visitor = visitors[ + itemTypeName + ] as unknown as PrimitiveVisitorDefinition; + return visitor(item, globals.context); +} diff --git a/packages/type-traverser/src/visitorSubTraversers/VisitorUnionSubTraverser.ts b/packages/type-traverser/src/visitorSubTraversers/VisitorUnionSubTraverser.ts new file mode 100644 index 0000000..f9b2932 --- /dev/null +++ b/packages/type-traverser/src/visitorSubTraversers/VisitorUnionSubTraverser.ts @@ -0,0 +1,32 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { TraverserTypes, UnionVisitorDefinition } from ".."; +import type { UnionTraverserDefinition } from "../TraverserDefinition"; +import type { UnionType } from "../TraverserTypes"; +import type { VisitorSubTraverserGlobals } from "./util/visitorSubTraverserTypes"; +import { visitorParentSubTraverser } from "./VisitorParentSubTraverser"; + +export async function visitorUnionSubTraverser< + Types extends TraverserTypes, + TypeName extends keyof Types, + Type extends UnionType, + Context, +>( + item: Type["type"], + itemTypeName: TypeName, + globals: VisitorSubTraverserGlobals, +): Promise { + const { traverserDefinition, visitors } = globals; + const definition = traverserDefinition[ + itemTypeName + ] as UnionTraverserDefinition; + const visitor = visitors[itemTypeName] as unknown as UnionVisitorDefinition< + Types, + Type, + Context + >; + const itemSpecificTypeName = definition.selector(item); + await Promise.all([ + visitor(item, globals.context), + visitorParentSubTraverser(item, itemSpecificTypeName, globals), + ]); +} diff --git a/packages/type-traverser/src/visitorSubTraversers/util/visitorSubTraverserTypes.ts b/packages/type-traverser/src/visitorSubTraversers/util/visitorSubTraverserTypes.ts new file mode 100644 index 0000000..fcc62f6 --- /dev/null +++ b/packages/type-traverser/src/visitorSubTraversers/util/visitorSubTraverserTypes.ts @@ -0,0 +1,29 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { + BaseTraverserTypes, + TraverserDefinition, + TraverserTypes, + Visitors, +} from "../.."; +import type { MultiSet } from "../../transformerSubTraversers/util/MultiSet"; + +export type VisitorSubTraverser< + Types extends TraverserTypes, + TypeName extends keyof Types, + Type extends BaseTraverserTypes, + Context, +> = ( + item: Type["type"], + itemTypeName: TypeName, + globals: VisitorSubTraverserGlobals, +) => Promise; + +export interface VisitorSubTraverserGlobals< + Types extends TraverserTypes, + Context, +> { + traverserDefinition: TraverserDefinition; + visitors: Visitors; + visitedObjects: MultiSet; + context: Context; +} diff --git a/packages/type-traverser/test/integration/avatar/AvatarBrokenTransformer.ts b/packages/type-traverser/test/integration/avatar/AvatarBrokenTransformer.ts new file mode 100644 index 0000000..ba80d6c --- /dev/null +++ b/packages/type-traverser/test/integration/avatar/AvatarBrokenTransformer.ts @@ -0,0 +1,69 @@ +import { Traverser } from "../../../lib"; +import { avatarTraverserDefinition } from "./AvatarTraverserDefinition"; +import { AvatarTraverserTypes } from "./AvatarTraverserTypes"; + +const avatarTraverser = new Traverser( + avatarTraverserDefinition +); + +interface ActionablePerson { + doAction(): void; + friends: ActionablePerson[]; +} + +export const BrokenAvatarTransformer = avatarTraverser.createTransformer< + { + Element: { + return: string; + }; + Bender: { + return: ActionablePerson; + properties: { + element: string; + }; + }; + NonBender: { + return: ActionablePerson; + }; + }, + undefined +>({ + Element: async (item) => { + return item.toUpperCase(); + }, + Bender: { + transformer: async (item, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + return { + doAction: () => { + console.log(`I can bend ${transformedChildren.element}`); + }, + friends: transformedChildren.friends, + }; + }, + properties: { + element: async (item, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + return `the element of ${transformedChildren}`; + }, + }, + }, + NonBender: { + transformer: async (item, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + return { + doAction: () => { + console.log(`I can't bend.`); + }, + friends: transformedChildren.friends, + }; + }, + }, + Person: async (item, getTransformedChildren, _setReturnPointer, _context) => { + const personToReturn: ActionablePerson = {} as ActionablePerson; + const transformedChildren = await getTransformedChildren(); + personToReturn.doAction = transformedChildren.doAction; + personToReturn.friends = transformedChildren.friends; + return personToReturn; + }, +}); diff --git a/packages/type-traverser/test/integration/avatar/AvatarErroringTransformer.ts b/packages/type-traverser/test/integration/avatar/AvatarErroringTransformer.ts new file mode 100644 index 0000000..746d118 --- /dev/null +++ b/packages/type-traverser/test/integration/avatar/AvatarErroringTransformer.ts @@ -0,0 +1,64 @@ +import { Traverser } from "../../../lib"; +import { avatarTraverserDefinition } from "./AvatarTraverserDefinition"; +import { AvatarTraverserTypes } from "./AvatarTraverserTypes"; + +const avatarTraverser = new Traverser( + avatarTraverserDefinition +); + +interface ActionablePerson { + doAction(): void; + friends: ActionablePerson[]; +} + +export const AvatarErroringTransformer = avatarTraverser.createTransformer< + { + Element: { + return: string; + }; + Bender: { + return: ActionablePerson; + properties: { + element: string; + }; + }; + NonBender: { + return: ActionablePerson; + }; + }, + undefined +>({ + Element: async (item) => { + return item.toUpperCase(); + }, + Bender: { + transformer: async (item, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + return { + doAction: () => { + console.log(`I can bend ${transformedChildren.element}`); + }, + friends: transformedChildren.friends, + }; + }, + properties: { + element: async (item, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + return `the element of ${transformedChildren}`; + }, + }, + }, + NonBender: { + transformer: async (_item, _getTransformedChildren) => { + throw new Error("No Non Benders Allowed"); + }, + }, + Person: async (item, getTransformedChildren, setReturnPointer, _context) => { + const personToReturn: ActionablePerson = {} as ActionablePerson; + setReturnPointer(personToReturn); + const transformedChildren = await getTransformedChildren(); + personToReturn.doAction = transformedChildren.doAction; + personToReturn.friends = transformedChildren.friends; + return personToReturn; + }, +}); diff --git a/packages/type-traverser/test/integration/avatar/AvatarTraverserDefinition.ts b/packages/type-traverser/test/integration/avatar/AvatarTraverserDefinition.ts new file mode 100644 index 0000000..ae6692e --- /dev/null +++ b/packages/type-traverser/test/integration/avatar/AvatarTraverserDefinition.ts @@ -0,0 +1,28 @@ +import { TraverserDefinition } from "../../../lib"; +import { AvatarTraverserTypes, Bender } from "./AvatarTraverserTypes"; + +export const avatarTraverserDefinition: TraverserDefinition = + { + Element: { + kind: "primitive", + }, + Bender: { + kind: "interface", + properties: { + element: "Element", + friends: "Person", + }, + }, + NonBender: { + kind: "interface", + properties: { + friends: "Person", + }, + }, + Person: { + kind: "union", + selector: (item) => { + return (item as Bender).element ? "Bender" : "NonBender"; + }, + }, + }; diff --git a/packages/type-traverser/test/integration/avatar/AvatarTraverserTypes.ts b/packages/type-traverser/test/integration/avatar/AvatarTraverserTypes.ts new file mode 100644 index 0000000..1590637 --- /dev/null +++ b/packages/type-traverser/test/integration/avatar/AvatarTraverserTypes.ts @@ -0,0 +1,46 @@ +import { ValidateTraverserTypes } from "../../../lib"; + +/** + * Original Type Definition + */ +export type Element = "Water" | "Earth" | "Fire" | "Air"; +export interface Bender { + name: string; + element: Element; + friends: Person[]; +} +export interface NonBender { + name: string; + friends: Person[]; +} +export type Person = Bender | NonBender; + +/** + * Traverser Types + */ +export type AvatarTraverserTypes = ValidateTraverserTypes<{ + Element: { + kind: "primitive"; + type: Element; + }; + Bender: { + kind: "interface"; + type: Bender; + properties: { + element: "Element"; + friends: "Person"; + }; + }; + NonBender: { + kind: "interface"; + type: Bender; + properties: { + friends: "Person"; + }; + }; + Person: { + kind: "union"; + type: Person; + typeNames: "Bender" | "NonBender"; + }; +}>; diff --git a/packages/type-traverser/test/integration/avatar/avatar.test.ts b/packages/type-traverser/test/integration/avatar/avatar.test.ts new file mode 100644 index 0000000..5a35766 --- /dev/null +++ b/packages/type-traverser/test/integration/avatar/avatar.test.ts @@ -0,0 +1,19 @@ +import { BrokenAvatarTransformer } from "./AvatarBrokenTransformer"; +import { AvatarErroringTransformer } from "./AvatarErroringTransformer"; +import { aang } from "./sampleData"; + +describe("Avatar", () => { + it("Throws an error before entering an infinite loop", async () => { + await expect( + BrokenAvatarTransformer.transform(aang, "Bender", undefined) + ).rejects.toThrow( + `Circular dependency found. Use the 'setReturnPointer' function. The loop includes the 'Bender' type` + ); + }); + + it("Bubbles errors", async () => { + await expect( + AvatarErroringTransformer.transform(aang, "Bender", undefined) + ).rejects.toThrow("No Non Benders Allowed"); + }); +}); diff --git a/packages/type-traverser/test/integration/avatar/sampleData.ts b/packages/type-traverser/test/integration/avatar/sampleData.ts new file mode 100644 index 0000000..e74b543 --- /dev/null +++ b/packages/type-traverser/test/integration/avatar/sampleData.ts @@ -0,0 +1,21 @@ +import { Bender, NonBender } from "./AvatarTraverserTypes"; +/** + * Raw Data to Traverse + */ +export const aang: Bender = { + name: "Aang", + element: "Air", + friends: [], +}; +export const sokka: NonBender = { + name: "Sokka", + friends: [], +}; +export const katara: Bender = { + name: "Katara", + element: "Water", + friends: [], +}; +aang.friends.push(sokka, katara); +sokka.friends.push(aang, katara); +katara.friends.push(aang, sokka); diff --git a/packages/type-traverser/test/integration/shexj/ShexJSimplifier.ts b/packages/type-traverser/test/integration/shexj/ShexJSimplifier.ts new file mode 100644 index 0000000..5f7e2d9 --- /dev/null +++ b/packages/type-traverser/test/integration/shexj/ShexJSimplifier.ts @@ -0,0 +1,39 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { ShexJTraverser } from "./ShexJTraverser"; + +interface ShapeReturn { + id: any; + closed: any; + extra: any[]; + expression: any; + semActs: any[]; + annotations: any[]; +} + +export const ShexJStringTransformer = ShexJTraverser.createTransformer({ + Shape: { + transformer: async ( + shape, + getTransformedChildren, + setReturnPointer + ): Promise => { + const toReturn: Partial<{ + id: any; + closed: any; + extra: any[]; + expression: any; + semActs: any[]; + annotations: any[]; + }> = {}; + setReturnPointer(toReturn as ShapeReturn); + const transformedChildren = await getTransformedChildren(); + toReturn.id = transformedChildren.id; + toReturn.annotations = transformedChildren.annotations; + toReturn.extra = transformedChildren.extra; + toReturn.expression = transformedChildren.expression; + toReturn.semActs = transformedChildren.semActs; + toReturn.annotations = transformedChildren.annotations; + return toReturn as ShapeReturn; + }, + }, +}); diff --git a/packages/type-traverser/test/integration/shexj/ShexJTraverser.ts b/packages/type-traverser/test/integration/shexj/ShexJTraverser.ts new file mode 100644 index 0000000..e460990 --- /dev/null +++ b/packages/type-traverser/test/integration/shexj/ShexJTraverser.ts @@ -0,0 +1,7 @@ +import { ShexJTraverserDefinition } from "./ShexJTraverserDefinition"; +import { ShexJTraverserTypes } from "./ShexJTraverserTypes"; +import { Traverser } from "../../../lib/Traverser"; + +export const ShexJTraverser = new Traverser( + ShexJTraverserDefinition +); diff --git a/packages/type-traverser/test/integration/shexj/ShexJTraverserDefinition.ts b/packages/type-traverser/test/integration/shexj/ShexJTraverserDefinition.ts new file mode 100644 index 0000000..7fcdf01 --- /dev/null +++ b/packages/type-traverser/test/integration/shexj/ShexJTraverserDefinition.ts @@ -0,0 +1,296 @@ +import { shapeExpr, valueSetValue } from "shexj"; +import { ShexJTraverserTypes } from "./ShexJTraverserTypes"; +import { TraverserDefinition } from "../../../lib"; + +export const ShexJTraverserDefinition: TraverserDefinition = + { + Schema: { + kind: "interface", + properties: { + startActs: "SemAct", + start: "shapeExpr", + imports: "IRIREF", + shapes: "shapeExpr", + }, + }, + shapeExpr: { + kind: "union", + selector: (item: shapeExpr) => { + if (typeof item === "string") { + return "shapeExprRef"; + } + return item.type; + }, + }, + ShapeOr: { + kind: "interface", + properties: { + id: "shapeExprRef", + shapeExprs: "shapeExpr", + }, + }, + ShapeAnd: { + kind: "interface", + properties: { + id: "shapeExprRef", + shapeExprs: "shapeExpr", + }, + }, + ShapeNot: { + kind: "interface", + properties: { + id: "shapeExprRef", + shapeExpr: "shapeExpr", + }, + }, + ShapeExternal: { + kind: "interface", + properties: { + id: "shapeExprRef", + }, + }, + shapeExprRef: { + kind: "primitive", + }, + NodeConstraint: { + kind: "interface", + properties: { + id: "shapeExprRef", + datatype: "IRIREF", + values: "valueSetValue", + length: "INTEGER", + minlength: "INTEGER", + maxlength: "INTEGER", + pattern: "STRING", + flags: "STRING", + mininclusive: "numericLiteral", + minexclusive: "numericLiteral", + maxinclusive: "numericLiteral", + maxexclusive: "numericLiteral", + totaldigits: "INTEGER", + fractiondigits: "INTEGER", + }, + }, + numericLiteral: { + kind: "primitive", + }, + valueSetValue: { + kind: "union", + selector: (item: valueSetValue) => { + if (typeof item === "string") { + return "objectValue"; + } else if ( + item.type && + [ + "IriStem", + "IriStemRange", + "LiteralStem", + "LiteralStemRange", + "Language", + "LanguageStem", + "LanguageStemRange", + ].includes(item.type) + ) { + return item.type as + | "IriStem" + | "IriStemRange" + | "LiteralStem" + | "LiteralStemRange" + | "Language" + | "LanguageStem" + | "LanguageStemRange"; + } else { + return "objectValue"; + } + }, + }, + objectValue: { + kind: "union", + selector: (item) => { + return typeof item === "string" ? "IRIREF" : "ObjectLiteral"; + }, + }, + ObjectLiteral: { + kind: "interface", + properties: { + value: "STRING", + language: "STRING", + type: "STRING", + }, + }, + IriStem: { + kind: "interface", + properties: { + stem: "IRIREF", + }, + }, + IriStemRange: { + kind: "interface", + properties: { + stem: "IriStemRangeStem", + exclusions: "IriStemRangeExclusions", + }, + }, + IriStemRangeStem: { + kind: "union", + selector: (item) => { + return typeof item === "string" ? "IRIREF" : "Wildcard"; + }, + }, + IriStemRangeExclusions: { + kind: "union", + selector: (item) => { + return typeof item === "string" ? "IRIREF" : "IriStem"; + }, + }, + LiteralStem: { + kind: "interface", + properties: { + stem: "STRING", + }, + }, + LiteralStemRange: { + kind: "interface", + properties: { + stem: "LiteralStemRangeStem", + exclusions: "LiteralStemRangeExclusions", + }, + }, + LiteralStemRangeStem: { + kind: "union", + selector: (item) => { + return typeof item === "string" ? "STRING" : "Wildcard"; + }, + }, + LiteralStemRangeExclusions: { + kind: "union", + selector: (item) => { + return typeof item === "string" ? "STRING" : "LiteralStem"; + }, + }, + Language: { + kind: "interface", + properties: { + languageTag: "LANGTAG", + }, + }, + LanguageStem: { + kind: "interface", + properties: { + stem: "LANGTAG", + }, + }, + LanguageStemRange: { + kind: "interface", + properties: { + stem: "LanguageStemRangeStem", + exclusions: "LanguageStemRangeExclusions", + }, + }, + LanguageStemRangeStem: { + kind: "union", + selector: (item) => { + return typeof item === "string" ? "LANGTAG" : "Wildcard"; + }, + }, + LanguageStemRangeExclusions: { + kind: "union", + selector: (item) => { + return typeof item === "string" ? "LANGTAG" : "LanguageStem"; + }, + }, + Wildcard: { + kind: "interface", + properties: {}, + }, + Shape: { + kind: "interface", + properties: { + id: "shapeExprRef", + closed: "BOOL", + extra: "IRIREF", + expression: "tripleExpr", + semActs: "SemAct", + annotations: "Annotation", + }, + }, + tripleExpr: { + kind: "union", + selector: (item) => { + if (typeof item === "string") { + return "tripleExprRef"; + } + return item.type; + }, + }, + EachOf: { + kind: "interface", + properties: { + expressions: "tripleExpr", + id: "shapeExprRef", + min: "INTEGER", + max: "INTEGER", + semActs: "SemAct", + annotations: "Annotation", + }, + }, + OneOf: { + kind: "interface", + properties: { + expressions: "tripleExpr", + id: "shapeExprRef", + min: "INTEGER", + max: "INTEGER", + semActs: "SemAct", + annotations: "Annotation", + }, + }, + TripleConstraint: { + kind: "interface", + properties: { + inverse: "BOOL", + predicate: "IRIREF", + valueExpr: "shapeExpr", + id: "shapeExprRef", + min: "INTEGER", + max: "INTEGER", + semActs: "SemAct", + annotations: "Annotation", + }, + }, + tripleExprRef: { + kind: "primitive", + }, + SemAct: { + kind: "interface", + properties: { + name: "IRIREF", + code: "STRING", + }, + }, + Annotation: { + kind: "interface", + properties: { + predicate: "IRI", + object: "objectValue", + }, + }, + IRIREF: { + kind: "primitive", + }, + STRING: { + kind: "primitive", + }, + LANGTAG: { + kind: "primitive", + }, + INTEGER: { + kind: "primitive", + }, + BOOL: { + kind: "primitive", + }, + IRI: { + kind: "primitive", + }, + }; diff --git a/packages/type-traverser/test/integration/shexj/ShexJTraverserTypes.ts b/packages/type-traverser/test/integration/shexj/ShexJTraverserTypes.ts new file mode 100644 index 0000000..9309a92 --- /dev/null +++ b/packages/type-traverser/test/integration/shexj/ShexJTraverserTypes.ts @@ -0,0 +1,333 @@ +import { + Annotation, + EachOf, + IriStem, + Language, + LanguageStem, + LanguageStemRange, + LiteralStem, + LiteralStemRange, + NodeConstraint, + ObjectLiteral, + OneOf, + Schema, + SemAct, + Shape, + ShapeAnd, + ShapeExternal, + ShapeNot, + ShapeOr, + Wildcard, + shapeExpr, + valueSetValue, + tripleExpr, + TripleConstraint, + shapeExprRef, + IRIREF, + STRING, + LANGTAG, + INTEGER, + numericLiteral, + BOOL, + tripleExprRef, + IRI, + objectValue, +} from "shexj"; +import { ValidateTraverserTypes } from "../../../lib"; + +export type ShexJTraverserTypes = ValidateTraverserTypes<{ + Schema: { + kind: "interface"; + type: Schema; + properties: { + startActs: "SemAct"; + start: "shapeExpr"; + imports: "IRIREF"; + shapes: "shapeExpr"; + }; + }; + shapeExpr: { + kind: "union"; + type: shapeExpr; + typeNames: + | "ShapeOr" + | "ShapeAnd" + | "ShapeNot" + | "NodeConstraint" + | "Shape" + | "ShapeExternal" + | "shapeExprRef"; + }; + ShapeOr: { + kind: "interface"; + type: ShapeOr; + properties: { + id: "shapeExprRef"; + shapeExprs: "shapeExpr"; + }; + }; + ShapeAnd: { + kind: "interface"; + type: ShapeAnd; + properties: { + id: "shapeExprRef"; + shapeExprs: "shapeExpr"; + }; + }; + ShapeNot: { + kind: "interface"; + type: ShapeNot; + properties: { + id: "shapeExprRef"; + shapeExpr: "shapeExpr"; + }; + }; + ShapeExternal: { + kind: "interface"; + type: ShapeExternal; + properties: { + id: "shapeExprRef"; + }; + }; + shapeExprRef: { + kind: "primitive"; + type: shapeExprRef; + }; + NodeConstraint: { + kind: "interface"; + type: NodeConstraint; + properties: { + id: "shapeExprRef"; + datatype: "IRIREF"; + values: "valueSetValue"; + length: "INTEGER"; + minlength: "INTEGER"; + maxlength: "INTEGER"; + pattern: "STRING"; + flags: "STRING"; + mininclusive: "numericLiteral"; + minexclusive: "numericLiteral"; + maxinclusive: "numericLiteral"; + maxexclusive: "numericLiteral"; + totaldigits: "INTEGER"; + fractiondigits: "INTEGER"; + }; + }; + numericLiteral: { + kind: "primitive"; + type: numericLiteral; + }; + valueSetValue: { + kind: "union"; + type: valueSetValue; + typeNames: + | "objectValue" + | "IriStem" + | "IriStemRange" + | "LiteralStem" + | "LiteralStemRange" + | "Language" + | "LanguageStem" + | "LanguageStemRange"; + }; + objectValue: { + kind: "union"; + type: objectValue; + typeNames: "IRIREF" | "ObjectLiteral"; + }; + ObjectLiteral: { + kind: "interface"; + type: ObjectLiteral; + properties: { + value: "STRING"; + language: "STRING"; + type: "STRING"; + }; + }; + IriStem: { + kind: "interface"; + type: IriStem; + properties: { + stem: "IRIREF"; + }; + }; + IriStemRange: { + kind: "interface"; + type: IriStem; + properties: { + stem: "IriStemRangeStem"; + exclusions: "IriStemRangeExclusions"; + }; + }; + IriStemRangeStem: { + kind: "union"; + type: IRIREF | Wildcard; + typeNames: "IRIREF" | "Wildcard"; + }; + IriStemRangeExclusions: { + kind: "union"; + type: IRIREF | IriStem; + typeNames: "IRIREF" | "IriStem"; + }; + LiteralStem: { + kind: "interface"; + type: LiteralStem; + properties: { + stem: "STRING"; + }; + }; + LiteralStemRange: { + kind: "interface"; + type: LiteralStemRange; + properties: { + stem: "LiteralStemRangeStem"; + exclusions: "LiteralStemRangeExclusions"; + }; + }; + LiteralStemRangeStem: { + kind: "union"; + type: STRING | Wildcard; + typeNames: "STRING" | "Wildcard"; + }; + LiteralStemRangeExclusions: { + kind: "union"; + type: STRING | LiteralStem; + typeNames: "STRING" | "LiteralStem"; + }; + Language: { + kind: "interface"; + type: Language; + properties: { + languageTag: "LANGTAG"; + }; + }; + LanguageStem: { + kind: "interface"; + type: LanguageStem; + properties: { + stem: "LANGTAG"; + }; + }; + LanguageStemRange: { + kind: "interface"; + type: LanguageStemRange; + properties: { + stem: "LanguageStemRangeStem"; + exclusions: "LanguageStemRangeExclusions"; + }; + }; + LanguageStemRangeStem: { + kind: "union"; + type: LANGTAG | Wildcard; + typeNames: "LANGTAG" | "Wildcard"; + }; + LanguageStemRangeExclusions: { + kind: "union"; + type: LANGTAG | LanguageStem; + typeNames: "LANGTAG" | "LanguageStem"; + }; + Wildcard: { + kind: "interface"; + type: Wildcard; + properties: Record; + }; + Shape: { + kind: "interface"; + type: Shape; + properties: { + id: "shapeExprRef"; + closed: "BOOL"; + extra: "IRIREF"; + expression: "tripleExpr"; + semActs: "SemAct"; + annotations: "Annotation"; + }; + }; + tripleExpr: { + kind: "union"; + type: tripleExpr; + typeNames: "tripleExprRef" | "EachOf" | "OneOf" | "TripleConstraint"; + }; + EachOf: { + kind: "interface"; + type: EachOf; + properties: { + expressions: "tripleExpr"; + id: "shapeExprRef"; + min: "INTEGER"; + max: "INTEGER"; + semActs: "SemAct"; + annotations: "Annotation"; + }; + }; + OneOf: { + kind: "interface"; + type: OneOf; + properties: { + expressions: "tripleExpr"; + id: "shapeExprRef"; + min: "INTEGER"; + max: "INTEGER"; + semActs: "SemAct"; + annotations: "Annotation"; + }; + }; + TripleConstraint: { + kind: "interface"; + type: TripleConstraint; + properties: { + inverse: "BOOL"; + predicate: "IRIREF"; + valueExpr: "shapeExpr"; + id: "shapeExprRef"; + min: "INTEGER"; + max: "INTEGER"; + semActs: "SemAct"; + annotations: "Annotation"; + }; + }; + tripleExprRef: { + kind: "primitive"; + type: tripleExprRef; + }; + SemAct: { + kind: "interface"; + type: SemAct; + properties: { + name: "IRIREF"; + code: "STRING"; + }; + }; + Annotation: { + kind: "interface"; + type: Annotation; + properties: { + predicate: "IRI"; + object: "objectValue"; + }; + }; + IRIREF: { + kind: "primitive"; + type: IRIREF; + }; + STRING: { + kind: "primitive"; + type: STRING; + }; + LANGTAG: { + kind: "primitive"; + type: LANGTAG; + }; + INTEGER: { + kind: "primitive"; + type: INTEGER; + }; + BOOL: { + kind: "primitive"; + type: BOOL; + }; + IRI: { + kind: "primitive"; + type: IRI; + }; +}>; diff --git a/packages/type-traverser/test/integration/shexj/shexj.test.ts b/packages/type-traverser/test/integration/shexj/shexj.test.ts new file mode 100644 index 0000000..6701adf --- /dev/null +++ b/packages/type-traverser/test/integration/shexj/shexj.test.ts @@ -0,0 +1,48 @@ +import { ShexJStringTransformer } from "./ShexJSimplifier"; +import { jsonld2graphobject } from "jsonld2graphobject"; +import { activityPub, circular, profile, simple } from "./testShapes"; + +// Wow, these a crappy tests +describe("ShexJ Integration", () => { + it("works with a simple use case", async () => { + const result = await ShexJStringTransformer.transform( + await jsonld2graphobject({ "@id": "SCHEMA", ...simple }, "SCHEMA"), + "Schema", + undefined + ); + expect(JSON.stringify(result)).toBe( + '{"shapes":[{"id":"http://shex.io/webapps/shex.js/doc/EmployeeShape","expression":{"expressions":[{"predicate":"http://xmlns.com/foaf/0.1/givenName","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":1,"max":-1},{"predicate":"http://xmlns.com/foaf/0.1/familyName","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"}},{"predicate":"http://xmlns.com/foaf/0.1/phone","valueExpr":{},"min":0,"max":-1},{"predicate":"http://xmlns.com/foaf/0.1/mbox","valueExpr":{}}]}}]}' + ); + }); + + it("works with a circular use case", async () => { + await ShexJStringTransformer.transform( + await jsonld2graphobject({ "@id": "SCHEMA", ...circular }, "SCHEMA"), + "Schema", + undefined + ); + // Expect not to error + expect(true).toBe(true); + }); + + it("works with a Solid Proifle", async () => { + const result = await ShexJStringTransformer.transform( + await jsonld2graphobject({ "@id": "SCHEMA", ...profile }, "SCHEMA"), + "Schema", + undefined + ); + expect(JSON.stringify(result)).toBe( + '{"shapes":[{"id":"https://shaperepo.com/schemas/solidProfile#AddressShape","expression":{"expressions":[{"predicate":"http://www.w3.org/2006/vcard/ns#country-name","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The name of the user\'s country of residence"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#locality","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The name of the user\'s locality (City, Town etc.) of residence"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#postal-code","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The user\'s postal code"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#region","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The name of the user\'s region (State, Province etc.) of residence"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#street-address","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The user\'s street address"}}]}]}},{"id":"https://shaperepo.com/schemas/solidProfile#EmailShape","extra":"http://www.w3.org/1999/02/22-rdf-syntax-ns#type","expression":{"expressions":[{"predicate":"http://www.w3.org/1999/02/22-rdf-syntax-ns#type","valueExpr":{"values":["http://www.w3.org/2006/vcard/ns#Dom","http://www.w3.org/2006/vcard/ns#Home","http://www.w3.org/2006/vcard/ns#ISDN","http://www.w3.org/2006/vcard/ns#Internet","http://www.w3.org/2006/vcard/ns#Intl","http://www.w3.org/2006/vcard/ns#Label","http://www.w3.org/2006/vcard/ns#Parcel","http://www.w3.org/2006/vcard/ns#Postal","http://www.w3.org/2006/vcard/ns#Pref","http://www.w3.org/2006/vcard/ns#Work","http://www.w3.org/2006/vcard/ns#X400"]},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The type of email."}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#value","valueExpr":{},"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The value of an email as a mailto link (Example )"}}]}]}},{"id":"https://shaperepo.com/schemas/solidProfile#PhoneNumberShape","extra":"http://www.w3.org/1999/02/22-rdf-syntax-ns#type","expression":{"expressions":[{"predicate":"http://www.w3.org/1999/02/22-rdf-syntax-ns#type","valueExpr":{"values":["http://www.w3.org/2006/vcard/ns#Dom","http://www.w3.org/2006/vcard/ns#Home","http://www.w3.org/2006/vcard/ns#ISDN","http://www.w3.org/2006/vcard/ns#Internet","http://www.w3.org/2006/vcard/ns#Intl","http://www.w3.org/2006/vcard/ns#Label","http://www.w3.org/2006/vcard/ns#Parcel","http://www.w3.org/2006/vcard/ns#Postal","http://www.w3.org/2006/vcard/ns#Pref","http://www.w3.org/2006/vcard/ns#Work","http://www.w3.org/2006/vcard/ns#X400"]},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"They type of Phone Number"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#value","valueExpr":{},"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The value of a phone number as a tel link (Example )"}}]}]}},{"id":"https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape","expression":{"expressions":[{"predicate":"http://www.w3.org/ns/auth/cert#modulus","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"RSA Modulus"}}]},{"predicate":"http://www.w3.org/ns/auth/cert#exponent","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#integer"},"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"RSA Exponent"}}]}]}},{"id":"https://shaperepo.com/schemas/solidProfile#SolidProfileShape","extra":"http://www.w3.org/1999/02/22-rdf-syntax-ns#type","expression":{"expressions":[{"predicate":"http://www.w3.org/1999/02/22-rdf-syntax-ns#type","valueExpr":{"values":["http://schema.org/Person"]},"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"Defines the node as a Person (from Schema.org)"}}]},{"predicate":"http://www.w3.org/1999/02/22-rdf-syntax-ns#type","valueExpr":{"values":["http://xmlns.com/foaf/0.1/Person"]},"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"Defines the node as a Person (from foaf)"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#fn","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The formatted name of a person. Example: John Smith"}}]},{"predicate":"http://xmlns.com/foaf/0.1/name","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"An alternate way to define a person\'s name."}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#hasAddress","valueExpr":{"id":"https://shaperepo.com/schemas/solidProfile#AddressShape","expression":{"expressions":[{"predicate":"http://www.w3.org/2006/vcard/ns#country-name","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The name of the user\'s country of residence"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#locality","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The name of the user\'s locality (City, Town etc.) of residence"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#postal-code","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The user\'s postal code"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#region","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The name of the user\'s region (State, Province etc.) of residence"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#street-address","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The user\'s street address"}}]}]}},"min":0,"max":-1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The person\'s street address."}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#hasEmail","valueExpr":{"id":"https://shaperepo.com/schemas/solidProfile#EmailShape","extra":"http://www.w3.org/1999/02/22-rdf-syntax-ns#type","expression":{"expressions":[{"predicate":"http://www.w3.org/1999/02/22-rdf-syntax-ns#type","valueExpr":{"values":["http://www.w3.org/2006/vcard/ns#Dom","http://www.w3.org/2006/vcard/ns#Home","http://www.w3.org/2006/vcard/ns#ISDN","http://www.w3.org/2006/vcard/ns#Internet","http://www.w3.org/2006/vcard/ns#Intl","http://www.w3.org/2006/vcard/ns#Label","http://www.w3.org/2006/vcard/ns#Parcel","http://www.w3.org/2006/vcard/ns#Postal","http://www.w3.org/2006/vcard/ns#Pref","http://www.w3.org/2006/vcard/ns#Work","http://www.w3.org/2006/vcard/ns#X400"]},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The type of email."}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#value","valueExpr":{},"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The value of an email as a mailto link (Example )"}}]}]}},"min":0,"max":-1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The person\'s email."}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#hasPhoto","valueExpr":{},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"A link to the person\'s photo"}}]},{"predicate":"http://xmlns.com/foaf/0.1/img","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"Photo link but in string form"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#hasTelephone","valueExpr":{"id":"https://shaperepo.com/schemas/solidProfile#PhoneNumberShape","extra":"http://www.w3.org/1999/02/22-rdf-syntax-ns#type","expression":{"expressions":[{"predicate":"http://www.w3.org/1999/02/22-rdf-syntax-ns#type","valueExpr":{"values":["http://www.w3.org/2006/vcard/ns#Dom","http://www.w3.org/2006/vcard/ns#Home","http://www.w3.org/2006/vcard/ns#ISDN","http://www.w3.org/2006/vcard/ns#Internet","http://www.w3.org/2006/vcard/ns#Intl","http://www.w3.org/2006/vcard/ns#Label","http://www.w3.org/2006/vcard/ns#Parcel","http://www.w3.org/2006/vcard/ns#Postal","http://www.w3.org/2006/vcard/ns#Pref","http://www.w3.org/2006/vcard/ns#Work","http://www.w3.org/2006/vcard/ns#X400"]},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"They type of Phone Number"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#value","valueExpr":{},"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The value of a phone number as a tel link (Example )"}}]}]}},"min":0,"max":-1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"Person\'s telephone number"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#phone","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"An alternative way to define a person\'s telephone number using a string"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#organization-name","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The name of the organization with which the person is affiliated"}}]},{"predicate":"http://www.w3.org/2006/vcard/ns#role","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The name of the person\'s role in their organization"}}]},{"predicate":"http://www.w3.org/ns/auth/acl#trustedApp","valueExpr":{"id":"https://shaperepo.com/schemas/solidProfile#TrustedAppShape","expression":{"expressions":[{"predicate":"http://www.w3.org/ns/auth/acl#mode","valueExpr":{"values":["http://www.w3.org/ns/auth/acl#Append","http://www.w3.org/ns/auth/acl#Control","http://www.w3.org/ns/auth/acl#Read","http://www.w3.org/ns/auth/acl#Write"]},"min":1,"max":-1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The level of access provided to this origin"}}]},{"predicate":"http://www.w3.org/ns/auth/acl#origin","valueExpr":{},"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The app origin the user trusts"}}]}]}},"min":0,"max":-1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"A list of app origins that are trusted by this user"}}]},{"predicate":"http://www.w3.org/ns/auth/cert#key","valueExpr":{"id":"https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape","expression":{"expressions":[{"predicate":"http://www.w3.org/ns/auth/cert#modulus","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#string"},"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"RSA Modulus"}}]},{"predicate":"http://www.w3.org/ns/auth/cert#exponent","valueExpr":{"datatype":"http://www.w3.org/2001/XMLSchema#integer"},"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"RSA Exponent"}}]}]}},"min":0,"max":-1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"A list of RSA public keys that are associated with private keys the user holds."}}]},{"predicate":"http://www.w3.org/ns/ldp#inbox","valueExpr":{},"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The user\'s LDP inbox to which apps can post notifications"}}]},{"predicate":"http://www.w3.org/ns/pim/space#preferencesFile","valueExpr":{},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The user\'s preferences"}}]},{"predicate":"http://www.w3.org/ns/pim/space#storage","valueExpr":{},"min":0,"max":-1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The location of a Solid storage server related to this WebId"}}]},{"predicate":"http://www.w3.org/ns/solid/terms#account","valueExpr":{},"min":0,"max":1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The user\'s account"}}]},{"predicate":"http://www.w3.org/ns/solid/terms#privateTypeIndex","valueExpr":{},"min":0,"max":-1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"A registry of all types used on the user\'s Pod (for private access only)"}}]},{"predicate":"http://www.w3.org/ns/solid/terms#publicTypeIndex","valueExpr":{},"min":0,"max":-1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"A registry of all types used on the user\'s Pod (for public access)"}}]},{"predicate":"http://xmlns.com/foaf/0.1/knows","valueExpr":{},"min":0,"max":-1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"A list of WebIds for all the people this user knows."}}]}]}},{"id":"https://shaperepo.com/schemas/solidProfile#TrustedAppShape","expression":{"expressions":[{"predicate":"http://www.w3.org/ns/auth/acl#mode","valueExpr":{"values":["http://www.w3.org/ns/auth/acl#Append","http://www.w3.org/ns/auth/acl#Control","http://www.w3.org/ns/auth/acl#Read","http://www.w3.org/ns/auth/acl#Write"]},"min":1,"max":-1,"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The level of access provided to this origin"}}]},{"predicate":"http://www.w3.org/ns/auth/acl#origin","valueExpr":{},"annotations":[{"predicate":"http://www.w3.org/2000/01/rdf-schema#comment","object":{"value":"The app origin the user trusts"}}]}]}}]}' + ); + }); + + it("works with Activity Pub", async () => { + await ShexJStringTransformer.transform( + await jsonld2graphobject({ "@id": "SCHEMA", ...activityPub }, "SCHEMA"), + "Schema", + undefined + ); + // Expect it not to error + expect(true).toBe(true); + }); +}); diff --git a/packages/type-traverser/test/integration/shexj/testShapes.ts b/packages/type-traverser/test/integration/shexj/testShapes.ts new file mode 100644 index 0000000..bdc59b9 --- /dev/null +++ b/packages/type-traverser/test/integration/shexj/testShapes.ts @@ -0,0 +1,4836 @@ +import { Schema } from "shexj"; + +export const circular: Schema = { + "@context": "http://www.w3.org/ns/shex.jsonld", + type: "Schema", + shapes: [ + { + id: "http://example.com/Parent", + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://example.com/hasChild", + valueExpr: "http://example.com/Child", + }, + ], + }, + }, + { + id: "http://example.com/Child", + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://example.com/hasParent", + valueExpr: "http://example.com/Parent", + }, + ], + }, + }, + ], +}; + +export const simple: Schema = { + type: "Schema", + shapes: [ + { + type: "Shape", + id: "http://shex.io/webapps/shex.js/doc/EmployeeShape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/givenName", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 1, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/familyName", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/phone", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/mbox", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + }, + ], + }, + }, + ], + "@context": "http://www.w3.org/ns/shex.jsonld", +}; + +export const profile: Schema = { + type: "Schema", + shapes: [ + { + type: "Shape", + id: "https://shaperepo.com/schemas/solidProfile#AddressShape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#country-name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The name of the user's country of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#locality", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the user's locality (City, Town etc.) of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#postal-code", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's postal code", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#region", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the user's region (State, Province etc.) of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#street-address", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's street address", + }, + }, + ], + }, + ], + }, + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/solidProfile#EmailShape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/2006/vcard/ns#Dom", + "http://www.w3.org/2006/vcard/ns#Home", + "http://www.w3.org/2006/vcard/ns#ISDN", + "http://www.w3.org/2006/vcard/ns#Internet", + "http://www.w3.org/2006/vcard/ns#Intl", + "http://www.w3.org/2006/vcard/ns#Label", + "http://www.w3.org/2006/vcard/ns#Parcel", + "http://www.w3.org/2006/vcard/ns#Postal", + "http://www.w3.org/2006/vcard/ns#Pref", + "http://www.w3.org/2006/vcard/ns#Work", + "http://www.w3.org/2006/vcard/ns#X400", + ], + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The type of email.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#value", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The value of an email as a mailto link (Example )", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/2006/vcard/ns#Dom", + "http://www.w3.org/2006/vcard/ns#Home", + "http://www.w3.org/2006/vcard/ns#ISDN", + "http://www.w3.org/2006/vcard/ns#Internet", + "http://www.w3.org/2006/vcard/ns#Intl", + "http://www.w3.org/2006/vcard/ns#Label", + "http://www.w3.org/2006/vcard/ns#Parcel", + "http://www.w3.org/2006/vcard/ns#Postal", + "http://www.w3.org/2006/vcard/ns#Pref", + "http://www.w3.org/2006/vcard/ns#Work", + "http://www.w3.org/2006/vcard/ns#X400", + ], + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "They type of Phone Number", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#value", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The value of a phone number as a tel link (Example )", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#modulus", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "RSA Modulus", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#exponent", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#integer", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "RSA Exponent", + }, + }, + ], + }, + ], + }, + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["http://schema.org/Person"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the node as a Person (from Schema.org)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["http://xmlns.com/foaf/0.1/Person"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the node as a Person (from foaf)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#fn", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The formatted name of a person. Example: John Smith", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "An alternate way to define a person's name.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasAddress", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#AddressShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The person's street address.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasEmail", + valueExpr: "https://shaperepo.com/schemas/solidProfile#EmailShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The person's email.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasPhoto", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "A link to the person's photo", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/img", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Photo link but in string form", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasTelephone", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Person's telephone number", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#phone", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "An alternative way to define a person's telephone number using a string", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#organization-name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the organization with which the person is affiliated", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#role", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The name of the person's role in their organization", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#trustedApp", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "A list of app origins that are trusted by this user", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#key", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of RSA public keys that are associated with private keys the user holds.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/ldp#inbox", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The user's LDP inbox to which apps can post notifications", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/pim/space#preferencesFile", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's preferences", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/pim/space#storage", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The location of a Solid storage server related to this WebId", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#account", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's account", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#privateTypeIndex", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A registry of all types used on the user's Pod (for private access only)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#publicTypeIndex", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A registry of all types used on the user's Pod (for public access)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/knows", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "A list of WebIds for all the people this user knows.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#mode", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/ns/auth/acl#Append", + "http://www.w3.org/ns/auth/acl#Control", + "http://www.w3.org/ns/auth/acl#Read", + "http://www.w3.org/ns/auth/acl#Write", + ], + }, + min: 1, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The level of access provided to this origin", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#origin", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The app origin the user trusts", + }, + }, + ], + }, + ], + }, + }, + ], + "@context": "http://www.w3.org/ns/shex.jsonld", +}; + +export const activityPub: Schema = { + type: "Schema", + shapes: [ + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Accept", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#AcceptShape", + type: "EachOf", + expressions: [ + { + id: "https://shaperepo.com/schemas/activitystreams#ActivityShape", + type: "EachOf", + expressions: [ + { + id: "https://shaperepo.com/schemas/activitystreams#ObjectShape", + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: + "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Object"], + }, + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#attachment", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#attachment", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies a resource attached or related to an object that potentially requires special handling. The intent is to provide a model that is at least semantically similar to attachments in email.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#attributedTo", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#attributedTo", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies one or more entities to which this object is attributed. The attributed entities might not be Actors. For instance, an object might be attributed to the completion of another activity.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#audience", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#audience", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies one or more entities that represent the total population of entities for which the object can considered to be relevant.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#content", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#content", + valueExpr: { + type: "NodeConstraint", + datatype: + "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString", + }, + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The content or textual representation of the Object encoded as a JSON string. By default, the value of content is HTML. The mediaType property can be used in the object to indicate a different content type. The content MAY be expressed using multiple language-tagged values. ", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#context", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#context", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'Identifies the context within which the object exists or an activity was performed. The notion of "context" used is intentionally vague. The intended function is to serve as a means of grouping objects and activities that share a common originating context or purpose. An example could be all activities relating to a common project or event.', + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#name", + valueExpr: { + type: "NodeConstraint", + datatype: + "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString", + }, + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A simple, human-readable, plain-text name for the object. HTML markup MUST NOT be included. The name MAY be expressed using multiple language-tagged values.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#endTime", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#dateTime", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#generator", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#generator", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies the entity (e.g. an application) that generated the object. ", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#icon", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Image", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#icon", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates an entity that describes an icon for this object. The image should have an aspect ratio of one (horizontal) to one (vertical) and should be suitable for presentation at a small size.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#image", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Image", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#image", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates an entity that describes an image for this object. Unlike the icon property, there are no aspect ratio or display size limitations assumed.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#inReplyTo", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#inReplyTo", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates one or more entities for which this object is considered a response.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#location", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#location", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates one or more physical or logical locations associated with the object.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#preview", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#preview", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies an entity that provides a preview of this object.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#published", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#dateTime", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The date and time at which the object was published", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#replies", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Collection", + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies a Collection containing objects considered to be responses to this object.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#startTime", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#dateTime", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#summary", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#summary", + valueExpr: { + type: "NodeConstraint", + datatype: + "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString", + }, + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A natural language summarization of the object encoded as HTML. Multiple language tagged summaries MAY be provided.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#tag", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#tag", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'One or more "tags" that have been associated with an objects. A tag can be any kind of Object. The key difference between attachment and tag is that the former implies association by inclusion, while the latter implies associated by reference.', + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#updated", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#dateTime", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The date and time at which the object was updated", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#url", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#anyURI", + }, + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#url", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies one or more links to representations of the object", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#to", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#to", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies an entity considered to be part of the public primary audience of an Object", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#bto", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#bto", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies an Object that is part of the private primary audience of this Object.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#cc", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#cc", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies an Object that is part of the public secondary audience of this Object.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#bcc", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#bcc", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies one or more Objects that are part of the private secondary audience of this Object.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#mediaType", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#duration", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#duration", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: + "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").', + }, + }, + ], + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Activity"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#actor", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#actor", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Describes one or more entities that either performed or are expected to perform the activity. Any single activity can have multiple actors. The actor MAY be specified using an indirect Link.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#object", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#object", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'When used within an Activity, describes the direct object of the activity. For instance, in the activity "John added a movie to his wishlist", the object of the activity is the movie added. When used within a Relationship describes the entity to which the subject is related.', + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#target", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#target", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'Describes the indirect object, or target, of the activity. The precise meaning of the target is largely dependent on the type of action being described but will often be the object of the English preposition "to". For instance, in the activity "John added a movie to his wishlist", the target of the activity is John\'s wishlist. An activity can have more than one target.', + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#result", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#result", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Describes the result of the activity. For instance, if a particular action results in the creation of a new resource, the result property can be used to describe that new resource.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#origin", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#origin", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'Describes an indirect object of the activity from which the activity is directed. The precise meaning of the origin is the object of the English preposition "from". For instance, in the activity "John moved an item to List B from List A", the origin of the activity is "List A". ', + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#instrument", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: + "https://www.w3.org/ns/activitystreams#instrument", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies one or more objects used (or to be used) in the completion of an Activity.", + }, + }, + ], + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Accept"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor accepts the object. The target property can be used in certain circumstances to indicate the context into which the object has been accepted.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Activity", + expression: "https://shaperepo.com/schemas/activitystreams#ActivityShape", + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Add", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#AddShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Add"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor has added the object to the target. If the target property is not explicitly specified, the target would need to be determined implicitly by context. The origin can be used to identify the context from which the object originated. ", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Announce", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#AnnounceShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Announce"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor is calling the target's attention the object. The origin typically has no defined meaning.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Application", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#ApplicationShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ObjectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Application"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Describes a software application.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Arrive", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#ArriveShape", + type: "EachOf", + expressions: [ + { + id: "https://shaperepo.com/schemas/activitystreams#IntransitiveActivityShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "https://www.w3.org/ns/activitystreams#IntransitiveActivity", + ], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Instances of IntransitiveActivity are a subtype of Activity representing intransitive actions. The object property is therefore inappropriate for these activities.", + }, + }, + ], + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Arrive"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "An IntransitiveActivity that indicates that the actor has arrived at the location. The origin can be used to identify the context from which the actor originated. The target typically has no defined meaning.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Article", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#ArticleShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ObjectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Article"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Represents any kind of multi-paragraph written work.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Audio", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#AudioShape", + type: "EachOf", + expressions: [ + { + id: "https://shaperepo.com/schemas/activitystreams#DocumentShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ObjectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Document"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Represents a document of any kind.", + }, + }, + ], + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Audio"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Represents an audio document of any kind.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Block", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#BlockShape", + type: "EachOf", + expressions: [ + { + id: "https://shaperepo.com/schemas/activitystreams#IgnoreShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Ignore"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor is ignoring the object. The target and origin typically have no defined meaning.", + }, + }, + ], + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Block"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor is blocking the object. Blocking is a stronger form of Ignore. The typical use is to support social systems that allow one user to block activities or content of other users. The target and origin typically have no defined meaning.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Collection", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#CollectionShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ObjectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Collection"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A Collection is a subtype of Object that represents ordered or unordered sets of Object or Link instances. Refer to the Activity Streams 2.0 Core specification for a complete description of the Collection type. ", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#totalItems", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A non-negative integer specifying the total number of objects contained by the logical view of the collection. This number might not reflect the actual number of items serialized within the Collection object instance.", + }, + }, + ], + }, + { + type: "OneOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#current", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#CollectionPage", + min: 0, + max: 1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#current", + valueExpr: "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: 1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "In a paged Collection, indicates the page that contains the most recently updated member items.", + }, + }, + ], + }, + { + type: "OneOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#first", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#CollectionPage", + min: 0, + max: 1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#first", + valueExpr: "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: 1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "In a paged Collection, indicates the furthest preceeding page of items in the collection.", + }, + }, + ], + }, + { + type: "OneOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#last", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#CollectionPage", + min: 0, + max: 1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#last", + valueExpr: "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: 1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "In a paged Collection, indicates the furthest proceeding page of the collection.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#items", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#items", + valueExpr: "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies the items contained in a collection. The items might be ordered or unordered. ", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#CollectionPage", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#CollectionPageShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#CollectionShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#CollectionPage"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Used to represent distinct subsets of items from a Collection. Refer to the Activity Streams 2.0 Core for a complete description of the CollectionPage object.", + }, + }, + ], + }, + { + type: "OneOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#partOf", + valueExpr: "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: 1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#partOf", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Collection", + min: 0, + max: 1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies the Collection to which a CollectionPage objects items belong.", + }, + }, + ], + }, + { + type: "OneOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#next", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#CollectionPage", + min: 0, + max: 1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#next", + valueExpr: "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: 1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "In a paged Collection, indicates the next page of items.", + }, + }, + ], + }, + { + type: "OneOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#prev", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#CollectionPage", + min: 0, + max: 1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#next", + valueExpr: "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: 1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "In a paged Collection, identifies the previous page of items.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Create", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#CreateShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Create"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Indicates that the actor has created the object.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Delete", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#DeleteShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Delete"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor has deleted the object. If specified, the origin indicates the context from which the object was deleted.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Dislike", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#DislikeShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Dislike"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Indicates that the actor dislikes the object.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Document", + expression: "https://shaperepo.com/schemas/activitystreams#DocumentShape", + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Event", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#EventShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ObjectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Event"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Represents any kind of event.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Flag", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#FlagShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Flag"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'Indicates that the actor is "flagging" the object. Flagging is defined in the sense common to many social platforms as reporting content as being inappropriate for any number of reasons.', + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Follow", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#FollowShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Follow"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'Indicates that the actor is "following" the object. Following is defined in the sense typically used within Social systems in which the actor is interested in any activity performed by or on the object. The target and origin typically have no defined meaning.', + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Group", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#GroupShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ObjectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Group"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Represents a formal or informal collective of Actors.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Ignore", + expression: "https://shaperepo.com/schemas/activitystreams#IgnoreShape", + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Image", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#ImageShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#DocumentShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Image"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "An image document of any kind", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#InstransitiveActivity", + expression: + "https://shaperepo.com/schemas/activitystreams#IntransitiveActivityShape", + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Invite", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#InviteShape", + type: "EachOf", + expressions: [ + { + id: "https://shaperepo.com/schemas/activitystreams#OfferShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Offer"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor is offering the object. If specified, the target indicates the entity to which the object is being offered.", + }, + }, + ], + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Invite"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A specialization of Offer in which the actor is extending an invitation for the object to the target.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Join", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#JoinShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Join"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor has joined the object. The target and origin typically have no defined meaning.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Leave", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#LeaveShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Leave"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor has left the object. The target and origin typically have no meaning.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Like", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#LikeShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Like"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor likes, recommends or endorses the object. The target and origin typically have no defined meaning.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Link", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#LinkShape", + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Link"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A Link is an indirect, qualified reference to a resource identified by a URL. The fundamental model for links is established by [ RFC5988]. Many of the properties defined by the Activity Vocabulary allow values that are either instances of Object or Link. When a Link is used, it establishes a qualified relation connecting the subject (the containing object) to the resource identified by the href. Properties of the Link are properties of the reference as opposed to properties of the resource.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#href", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#anyURI", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The target resource pointed to by a Link.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#rel", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'A link relation associated with a Link. The value MUST conform to both the [HTML5] and [RFC5988] "link relation" definitions. In the [HTML5], any string not containing the "space" U+0020, "tab" (U+0009), "LF" (U+000A), "FF" (U+000C), "CR" (U+000D) or "," (U+002C) characters can be used as a valid link relation.', + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#mediaType", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#name", + valueExpr: { + type: "NodeConstraint", + datatype: + "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString", + }, + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A simple, human-readable, plain-text name for the object. HTML markup MUST NOT be included. The name MAY be expressed using multiple language-tagged values.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#hreflang", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Hints as to the language used by the target resource. Value MUST be a [BCP47] Language-Tag.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#height", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "On a Link, specifies a hint as to the rendering height in device-independent pixels of the linked resource.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#width", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "On a Link, specifies a hint as to the rendering width in device-independent pixels of the linked resource.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#preview", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#preview", + valueExpr: "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Identifies an entity that provides a preview of this object.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Listen", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#ListenShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Listen"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Indicates that the actor has listened to the object.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Mention", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#MentionShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#LinkShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Mention"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "A specialized Link that represents an @mention.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Move", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#MoveShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Move"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor has moved object from origin to target. If the origin or target are not specified, either can be determined by context.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Note", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#NoteShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ObjectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Note"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Represents a short written work typically less than a single paragraph in length.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Object", + expression: "https://shaperepo.com/schemas/activitystreams#ObjectShape", + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Offer", + expression: "https://shaperepo.com/schemas/activitystreams#OfferShape", + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#OrderedCollection", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#OrderedCollectionShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#CollectionShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "https://www.w3.org/ns/activitystreams#OrderedCollection", + ], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A subtype of Collection in which members of the logical collection are assumed to always be strictly ordered.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#OrderedCollectionPage", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#OrderedCollectionPageShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#OrderedCollectionShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "https://www.w3.org/ns/activitystreams#OrderedCollectionPage", + ], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Used to represent ordered subsets of items from an OrderedCollection. Refer to the Activity Streams 2.0 Core for a complete description of the OrderedCollectionPage object.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#startIndex", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A non-negative integer value identifying the relative position within the logical view of a strictly ordered collection.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Organization", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#OrganizationShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ObjectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Organization"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Represents an organization.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Page", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#PageShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#DocumentShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Page"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Represents a Web Page.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Person", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#PersonShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ObjectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Person"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Represents an individual person.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Place", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#PlaceShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ObjectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Place"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Represents a logical or physical location. See 5.3 Representing Places for additional information.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#accuracy", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#float", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'Indicates the accuracy of position coordinates on a Place objects. Expressed in properties of percentage. e.g. "94.0" means "94.0% accurate".', + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#altitude", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#float", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'Indicates the altitude of a place. The measurement units is indicated using the units property. If units is not specified, the default is assumed to be "m" indicating meters. ', + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#latitude", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#float", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The latitude of a place", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#latitude", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#float", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The longitude of a place", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#radius", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#float", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'The radius from the given latitude and longitude for a Place. The units is expressed by the units property. If units is not specified, the default is assumed to be "m" indicating "meters".', + }, + }, + ], + }, + { + type: "OneOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#unit", + valueExpr: { + type: "NodeConstraint", + values: [ + { + value: "cm", + type: "http://www.w3.org/2001/XMLSchema#string", + }, + { + value: "feet", + type: "http://www.w3.org/2001/XMLSchema#string", + }, + { + value: "inches", + type: "http://www.w3.org/2001/XMLSchema#string", + }, + { + value: "km", + type: "http://www.w3.org/2001/XMLSchema#string", + }, + { + value: "m", + type: "http://www.w3.org/2001/XMLSchema#string", + }, + { + value: "miles", + type: "http://www.w3.org/2001/XMLSchema#string", + }, + ], + }, + min: 0, + max: 1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#unit", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#anyURI", + }, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'Specifies the measurement units for the radius and altitude properties on a Place object. If not specified, the default is assumed to be "m" for "meters".', + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Profile", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#ProfileShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ObjectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Profile"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A Profile is a content object that describes another Object, typically used to describe Actor Type objects. The describes property is used to reference the object being described by the profile.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#describes", + valueExpr: "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "On a Profile object, the describes property identifies the object described by the Profile.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Question", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#QuestionShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#IntransitiveActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Question"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + " Represents a question being asked. Question objects are an extension of IntransitiveActivity. That is, the Question object is an Activity, but the direct object is the question itself and therefore it would not contain an object property. Either of the anyOf and oneOf properties MAY be used to express possible answers, but a Question object MUST NOT have both properties. ", + }, + }, + ], + }, + { + type: "OneOf", + expressions: [ + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#oneOf", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#oneOf", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + " Identifies an exclusive option for a Question. Use of oneOf implies that the Question can have only a single answer. To indicate that a Question can have multiple answers, use anyOf.", + }, + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#anyOf", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#anyOf", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + " Identifies an inclusive option for a Question. Use of anyOf implies that the Question can have multiple answers. To indicate that a Question can have only one answer, use oneOf.", + }, + }, + ], + }, + ], + }, + { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#closed", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#closed", + valueExpr: "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#closed", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#dateTime", + }, + min: 0, + max: 1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#closed", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#boolean", + }, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that a question has been closed, and answers are no longer accepted.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Read", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#ReadShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Read"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Indicates that the actor has read the object.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Reject", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#RejectShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Reject"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor is rejecting the object. The target and origin typically have no defined meaning.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Relationship", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#RelationshipShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ObjectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Relationship"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + " Describes a relationship between two individuals. The subject and object properties are used to identify the connected individuals. See 5.2 Representing Relationships Between Entities for additional information. ", + }, + }, + ], + }, + { + type: "OneOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#subject", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: 1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#subject", + valueExpr: "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: 1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'On a Relationship object, the subject property identifies one of the connected individuals. For instance, for a Relationship object describing "John is related to Sally", subject would refer to John.', + }, + }, + ], + }, + { + type: "OneOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#object", + valueExpr: + "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: 1, + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#object", + valueExpr: "https://shaperepo.com/schemas/activitystreams#Link", + min: 0, + max: 1, + }, + ], + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + 'When used within an Activity, describes the direct object of the activity. For instance, in the activity "John added a movie to his wishlist", the object of the activity is the movie added. When used within a Relationship describes the entity to which the subject is related.', + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#relationship", + valueExpr: "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "On a Relationship object, the relationship property identifies the kind of relationship that exists between subject and object.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Remove", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#RemoveShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Remove"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor is removing the object. If specified, the origin indicates the context from which the object is being removed.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Service", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#ServiceShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ObjectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Service"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Represents a service of any kind.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#TentativeAccept", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#TentativeAcceptShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#AcceptShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#TentativeAccept"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A specialization of Accept indicating that the acceptance is tentative.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#TentativeReject", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#TentativeRejectShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#RejectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#TentativeReject"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A specialization of Reject in which the rejection is considered tentative.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Tombstone", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#TombstoneShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ObjectShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Tombstone"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A Tombstone represents a content object that has been deleted. It can be used in Collections to signify that there used to be an object at this position, but it has been deleted.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#formerType", + valueExpr: "https://shaperepo.com/schemas/activitystreams#Object", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "On a Tombstone object, the formerType property identifies the type of the object that was deleted.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/ns/activitystreams#deleted", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#dateTime", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "On a Tombstone object, the deleted property is a timestamp for when the object was deleted.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Travel", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#TravelShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#IntransitiveActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Travel"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor is traveling to target from origin. Travel is an IntransitiveObject whose actor specifies the direct object. If the target or origin are not specified, either can be determined by context.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Undo", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#UndoShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Undo"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + ' Indicates that the actor is undoing the object. In most cases, the object will be an Activity describing some previously performed action (for instance, a person may have previously "liked" an article but, for whatever reason, might choose to undo that like at some later point in time). The target and origin typically have no defined meaning.', + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Update", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#UpdateShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Update"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Indicates that the actor has updated the object. Note, however, that this vocabulary does not define a mechanism for describing the actual set of modifications made to object. The target and origin typically have no defined meaning.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#Video", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#VideoShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#DocumentShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#Video"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Represents a video document of any kind. ", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://shaperepo.com/schemas/activitystreams#View", + expression: { + id: "https://shaperepo.com/schemas/activitystreams#ViewShape", + type: "EachOf", + expressions: [ + "https://shaperepo.com/schemas/activitystreams#ActivityShape", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/ns/activitystreams#View"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Indicates that the actor has viewed the object.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + ], + "@context": "http://www.w3.org/ns/shex.jsonld", +}; + +/** + * ############################################ + * CARBON TRACKER + * ############################################ + */ +export const carbonTrackerShape: Schema = { + type: "Schema", + shapes: [ + { + type: "Shape", + id: "https://definitions.isum.io/schemas/carbon-tracker#CarbonMeasurement", + expression: { + id: "https://definitions.isum.io/schemas/carbon-tracker#CarbonMeasurementProperties", + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "https://definitions.isum.io/terms/carbon-tracker#CarbonMeasurement", + ], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the type as a CarbonMeasurement", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: + "https://definitions.isum.io/terms/carbon-tracker#emitter", + valueExpr: + "https://definitions.isum.io/schemas/carbon-tracker#Organization", + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The organisation that emitted the carbon in this measurement", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/TR/owl-time/#time:hasBeginning", + valueExpr: + "https://definitions.isum.io/schemas/carbon-tracker#TimeInstance", + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The time this measurement began", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/TR/owl-time/#time:hasEnd", + valueExpr: + "https://definitions.isum.io/schemas/carbon-tracker#TimeInstance", + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The time this measurement ended", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: + "https://definitions.isum.io/terms/carbon-tracker#carbonEmitted", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#decimal", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The carbon emitted in this time period in kgCO2e", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2000/01/rdf-schema#label", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Carbon Measurement Label", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "ShapeAnd", + id: "https://definitions.isum.io/schemas/carbon-tracker#Company", + shapeExprs: [ + "https://definitions.isum.io/schemas/carbon-tracker#Organization", + { + type: "Shape", + expression: { + type: "TripleConstraint", + predicate: "https://schema.org/yearlyRevenue", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#integer", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The Company's turnover in the previous year in GBP", + }, + }, + ], + }, + }, + ], + }, + { + type: "Shape", + id: "https://definitions.isum.io/schemas/carbon-tracker#IndirectCarbonMeasurement", + expression: { + id: "https://definitions.isum.io/schemas/carbon-tracker#IndirectCarbonMeasurementProperties", + type: "EachOf", + expressions: [ + "https://definitions.isum.io/schemas/carbon-tracker#CarbonMeasurementProperties", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "https://definitions.isum.io/terms/carbon-tracker#IndirectCarbonMeasurement", + ], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the type as an IndirectCarbonMeasurement", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: + "https://definitions.isum.io/terms/carbon-tracker#supplierCarbonEmissionSummary", + valueExpr: + "https://definitions.isum.io/schemas/carbon-tracker#OrganizationCarbonEmissionsSummary", + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The carbon emission summary for the supplier, if one exists", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: + "https://definitions.isum.io/terms/carbon-tracker#amountPurchasedInBritishPounds", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#decimal", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The amount purchased from this supplier in British pounds", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://definitions.isum.io/schemas/carbon-tracker#Organization", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["http://www.w3.org/2006/vcard/ns#Organization"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the type as an Organization", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#n", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The name of the Organization", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: + "https://definitions.isum.io/terms/carbon-tracker#sector", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The Organization's industry sector", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://schema.org/numberOfEmployees", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The number of employees that belong to the Organization", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://schema.org/location", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The city and country where the Organization is headquartered", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2000/01/rdf-schema#label", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Organization Description", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://definitions.isum.io/schemas/carbon-tracker#OrganizationCarbonEmissionsSummary", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "https://definitions.isum.io/terms/carbon-tracker#OrganizationCarbonEmissionsSummary", + ], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Defines the type as OrganizationCarbonEmissionsSummary", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#org", + valueExpr: + "https://definitions.isum.io/schemas/carbon-tracker#Organization", + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The organization this summary summarizes", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/TR/owl-time/#time:hasBeginning", + valueExpr: + "https://definitions.isum.io/schemas/carbon-tracker#TimeInstance", + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The time this summary began", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/TR/owl-time/#time:hasEnd", + valueExpr: + "https://definitions.isum.io/schemas/carbon-tracker#TimeInstance", + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The time this summary ended", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: + "https://definitions.isum.io/terms/carbon-tracker#totalCarbonEmitted", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#decimal", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The total carbon emitted in this time period in kgCO2e", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: + "https://definitions.isum.io/terms/carbon-tracker#hasCarbonMeasurements", + valueExpr: + "https://definitions.isum.io/schemas/carbon-tracker#CarbonMeasurement", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The carbon measurements that generated this summary", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://definitions.isum.io/schemas/carbon-tracker#Scope1CarbonMeasurement", + expression: { + id: "https://definitions.isum.io/schemas/carbon-tracker#Scope1CarbonMeasurementProperties", + type: "EachOf", + expressions: [ + "https://definitions.isum.io/schemas/carbon-tracker#CarbonMeasurementProperties", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "https://definitions.isum.io/terms/carbon-tracker#Scope1CarbonMeasurement", + ], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the type as a Scope1CarbonMeasurement", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://definitions.isum.io/schemas/carbon-tracker#Scope2CarbonMeasurement", + expression: { + id: "https://definitions.isum.io/schemas/carbon-tracker#Scope2CarbonMeasurementProperties", + type: "EachOf", + expressions: [ + "https://definitions.isum.io/schemas/carbon-tracker#IndirectCarbonMeasurementProperties", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "https://definitions.isum.io/terms/carbon-tracker#Scope2CarbonMeasurement", + ], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the type as a Scope2CarbonMeasurement", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://definitions.isum.io/schemas/carbon-tracker#Scope3CarbonMeasurement", + expression: { + id: "https://definitions.isum.io/schemas/carbon-tracker#Scope3CarbonMeasurementProperties", + type: "EachOf", + expressions: [ + "https://definitions.isum.io/schemas/carbon-tracker#IndirectCarbonMeasurementProperties", + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "https://definitions.isum.io/terms/carbon-tracker#Scope3CarbonMeasurement", + ], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the type as a Scope3CarbonMeasurement", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + { + type: "Shape", + id: "https://definitions.isum.io/schemas/carbon-tracker#TimeInstance", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["https://www.w3.org/TR/owl-time/#time:Instant"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the type as an Instant", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "https://www.w3.org/TR/owl-time/#time:inXSDDate", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#date", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The time of the instance in XSD Date.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + ], + "@context": "http://www.w3.org/ns/shex.jsonld", +}; diff --git a/packages/type-traverser/tsconfig.build.json b/packages/type-traverser/tsconfig.build.json new file mode 100644 index 0000000..ce7be9c --- /dev/null +++ b/packages/type-traverser/tsconfig.build.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist" + }, + "include": ["./src"] +} \ No newline at end of file diff --git a/packages/type-traverser/tutorialImages/ReturnTypeTooltip.png b/packages/type-traverser/tutorialImages/ReturnTypeTooltip.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8864bfeb311e8ec29012ae2a62dba27cd1fc56 GIT binary patch literal 36344 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 literal 0 HcmV?d00001 diff --git a/packages/type-traverser/tutorialImages/ValidateTraverserTypesExample.png b/packages/type-traverser/tutorialImages/ValidateTraverserTypesExample.png new file mode 100644 index 0000000000000000000000000000000000000000..6a2da967e7b958f05f5089501a09d142f9768e06 GIT binary patch literal 48680 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