From f9df8a8fa7e92dc1862ff6cbb7582fb6f51a0e41 Mon Sep 17 00:00:00 2001 From: Oli Evans Date: Mon, 6 Feb 2023 21:53:06 +0000 Subject: [PATCH] feat: import a space into w3console (#309) Add an import flow to add a space from a user provided ucan that delegates * capabilites on a space created by another agent. Provides the w3console agent DID, so you can send it to the other party to create a delegation _just for you_ https://user-images.githubusercontent.com/58871/215516054-de617762-2e2d-4ff1-b6f9-c20772b46327.mov License: MIT Signed-off-by: Oli Evans --- .../examples/react/w3console/package.json | 2 + .../w3ui/examples/react/w3console/src/app.tsx | 68 ++-- .../w3console/src/components/did-icon.tsx | 6 + .../examples/react/w3console/src/share.tsx | 82 ++++- .../examples/solid/uploads-list/package.json | 2 +- packages/w3ui/package.json | 28 +- .../w3ui/packages/keyring-core/src/index.ts | 4 + .../react-keyring/src/Authenticator.tsx | 3 +- .../react-keyring/src/providers/Keyring.tsx | 11 +- .../solid-keyring/src/providers/Keyring.ts | 11 +- packages/w3ui/pnpm-lock.yaml | 301 +++++++++++------- 11 files changed, 356 insertions(+), 162 deletions(-) create mode 100644 packages/w3ui/examples/react/w3console/src/components/did-icon.tsx diff --git a/packages/w3ui/examples/react/w3console/package.json b/packages/w3ui/examples/react/w3console/package.json index 11d1eb9f2..7c799d1d8 100644 --- a/packages/w3ui/examples/react/w3console/package.json +++ b/packages/w3ui/examples/react/w3console/package.json @@ -23,6 +23,8 @@ "devDependencies": { "@preact/preset-vite": "^2.4.0", "@types/blueimp-md5": "^2.18.0", + "@ucanto/core": "^4.1.0", + "@ucanto/interface": "^4.1.0", "autoprefixer": "^10.4.13", "postcss": "^8.4.21", "tailwindcss": "^3.2.4", diff --git a/packages/w3ui/examples/react/w3console/src/app.tsx b/packages/w3ui/examples/react/w3console/src/app.tsx index e356b08e5..ca970a080 100644 --- a/packages/w3ui/examples/react/w3console/src/app.tsx +++ b/packages/w3ui/examples/react/w3console/src/app.tsx @@ -9,6 +9,7 @@ import { ShareIcon } from '@heroicons/react/20/solid' import md5 from 'blueimp-md5' import '@w3ui/react/src/styles/all.css' import { SpaceShare } from './share' +import { DIDKey } from '@ucanto/interface' function SpaceRegistrar (): JSX.Element { const [, { registerSpace }] = useKeyring() @@ -64,8 +65,14 @@ function SpaceRegistrar (): JSX.Element { ) } -function SpaceSection (): JSX.Element { - const [share, setShare] = useState(false) +interface SpaceSectionProps { + viewSpace: (did: string) => void + setShare: (share: boolean) => void + share: boolean +} + +function SpaceSection (props: SpaceSectionProps): JSX.Element { + const { viewSpace, share, setShare } = props const [{ space }] = useKeyring() const [, { reload }] = useUploadsList() // reload the uploads list when the space changes @@ -93,7 +100,7 @@ function SpaceSection (): JSX.Element {
- {share && } + {share && } {registered && !share && ( <> { void reload() }} /> @@ -102,7 +109,7 @@ function SpaceSection (): JSX.Element {
)} - {!registered && ( + {!registered && !share && ( )} @@ -111,14 +118,11 @@ function SpaceSection (): JSX.Element { } function SpaceSelector (props: any): JSX.Element { - const [{ space: currentSpace, spaces }, { setCurrentSpace }] = useKeyring() - async function selectSpace (space: Space): Promise { - await setCurrentSpace(space.did()) - } + const { selected, setSelected, spaces } = props return (

Spaces

- { void selectSpace(space) }} /> + { void setSelected(space.did()) }} />
) } @@ -132,26 +136,40 @@ export function Logo (): JSX.Element { ) } +export function Layout (): JsxElement { + const [share, setShare] = useState(false) + const [{ space, spaces }, { setCurrentSpace }] = useKeyring() + + function viewSpace (did: DIDKey): void { + setShare(false) + void setCurrentSpace(did) + } + + return ( +
+ +
+ +
+
+ ) +} + export function App (): JSX.Element { return ( -
- -
- -
-
+
) diff --git a/packages/w3ui/examples/react/w3console/src/components/did-icon.tsx b/packages/w3ui/examples/react/w3console/src/components/did-icon.tsx new file mode 100644 index 000000000..35e58550d --- /dev/null +++ b/packages/w3ui/examples/react/w3console/src/components/did-icon.tsx @@ -0,0 +1,6 @@ +import md5 from 'blueimp-md5' + +export function DidIcon ({ did }: { did: string }): JSX.Element { + const src = `https://www.gravatar.com/avatar/${md5(did)}?d=identicon` + return +} diff --git a/packages/w3ui/examples/react/w3console/src/share.tsx b/packages/w3ui/examples/react/w3console/src/share.tsx index 83330e7e5..e7f57389e 100644 --- a/packages/w3ui/examples/react/w3console/src/share.tsx +++ b/packages/w3ui/examples/react/w3console/src/share.tsx @@ -2,8 +2,11 @@ import { ChangeEvent, useState } from 'react' import { useKeyring } from '@w3ui/react-keyring' import * as DID from '@ipld/dag-ucan/did' import { CarWriter } from '@ipld/car/writer' +import { CarReader } from '@ipld/car/reader' +import { importDAG } from '@ucanto/core/delegation' import type { PropsWithChildren } from 'react' -import type { Delegation } from '@ucanto/interface' +import type { Delegation, DIDKey } from '@ucanto/interface' +import { DidIcon } from './components/did-icon' function Header (props: PropsWithChildren): JSX.Element { return

{props.children}

@@ -27,10 +30,21 @@ export async function toCarBlob (delegation: Delegation): Promise { return car } -export function SpaceShare (): JSX.Element { - const [, { createDelegation }] = useKeyring() +export async function toDelegation (car: Blob): Promise { + const blocks = [] + const bytes = new Uint8Array(await car.arrayBuffer()) + const reader = await CarReader.fromBytes(bytes) + for await (const block of reader.blocks()) { + blocks.push(block) + } + return importDAG(blocks) +} + +export function SpaceShare ({ viewSpace }: { viewSpace: (did: DIDKey) => void }): JSX.Element { + const [{ agent }, { createDelegation, addSpace }] = useKeyring() const [value, setValue] = useState('') const [downloadUrl, setDownloadUrl] = useState('') + const [proof, setProof] = useState() async function makeDownloadLink (input: string): Promise { let audience @@ -68,6 +82,24 @@ export function SpaceShare (): JSX.Element { return `did-${method}-${id?.substring(0, 10)}.ucan` } + async function onImport (e: ChangeEvent): Promise { + const input = e.target.files?.[0] + if (input === undefined) return + let delegation + try { + delegation = await toDelegation(input) + } catch (err) { + console.log(err) + return + } + try { + await addSpace(delegation) + setProof(delegation) + } catch (err) { + console.log(err) + } + } + return (
@@ -80,9 +112,51 @@ export function SpaceShare (): JSX.Element { value={value} onChange={onChange} /> - Download UCAN + Download UCAN
+
+
Import a space
+

Copy and paste your DID to your friend

+
+ {agent?.did()} +
+
+ +
+ {proof !== undefined && ( + + )} +
) } diff --git a/packages/w3ui/examples/solid/uploads-list/package.json b/packages/w3ui/examples/solid/uploads-list/package.json index 892949b3a..e14b2c9a8 100644 --- a/packages/w3ui/examples/solid/uploads-list/package.json +++ b/packages/w3ui/examples/solid/uploads-list/package.json @@ -17,6 +17,6 @@ "dependencies": { "@w3ui/solid-keyring": "workspace:^", "@w3ui/solid-uploads-list": "workspace:^", - "solid-js": "^1.5.1" + "solid-js": "^1.6.10" } } diff --git a/packages/w3ui/package.json b/packages/w3ui/package.json index a0938989c..6db36786b 100644 --- a/packages/w3ui/package.json +++ b/packages/w3ui/package.json @@ -25,19 +25,19 @@ }, "devDependencies": { "@babel/core": "^7.20.12", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/preset-env": "^7.19.0", + "@babel/plugin-transform-modules-commonjs": "^7.20.11", + "@babel/preset-env": "^7.20.2", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", "@babel/register": "^7.18.9", "@rollup/plugin-babel": "^5.3.1", "@rollup/plugin-commonjs": "^22.0.2", "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-node-resolve": "^14.0.0", + "@rollup/plugin-node-resolve": "^14.1.0", "@rollup/plugin-replace": "^4.0.0", - "@types/jest": "^29.0.2", + "@types/jest": "^29.4.0", "@types/jsdom": "^20.0.1", - "@types/react": "^18.0.18", + "@types/react": "^18.0.26", "@ucanto/client": "^4.2.3", "@ucanto/server": "^4.2.3", "@ucanto/transport": "^4.2.3", @@ -45,21 +45,21 @@ "@web3-storage/capabilities": "^2.2.0", "esm": "^3.2.25", "fake-indexeddb": "^4.0.1", - "jsdom": "^21.0.0", + "jsdom": "^21.1.0", "path": "^0.12.7", "react": "^18.2.0", - "rollup": "^2.79.0", + "rollup": "^2.79.1", "rollup-plugin-size": "^0.2.2", "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-visualizer": "^5.8.1", - "serve": "^14.1.2", - "solid-js": "^1.5.6", + "rollup-plugin-visualizer": "^5.9.0", + "serve": "^14.2.0", + "solid-js": "^1.6.10", "ts-node": "^10.9.1", - "ts-standard": "^12.0.1", - "typescript": "^4.8.2", - "vitest": "^0.27.0", + "ts-standard": "^12.0.2", + "typescript": "^4.9.4", + "vitest": "^0.27.3", "vitest-environment-w3ui": "workspace:^", - "vue": "^3.2.39" + "vue": "^3.2.45" }, "ts-standard": { "ignore": [ diff --git a/packages/w3ui/packages/keyring-core/src/index.ts b/packages/w3ui/packages/keyring-core/src/index.ts index 7796c0030..e6c44e851 100644 --- a/packages/w3ui/packages/keyring-core/src/index.ts +++ b/packages/w3ui/packages/keyring-core/src/index.ts @@ -123,6 +123,10 @@ export interface KeyringContextActions { * the _current_ space as the resource. */ createDelegation: (audience: Principal, abilities: Abilities[], options: CreateDelegationOptions) => Promise + /** + * Import a proof that delegates `*` ability on a space to this agent + */ + addSpace: (proof: Delegation) => Promise } export type CreateDelegationOptions = Omit & { audienceMeta?: AgentMeta } diff --git a/packages/w3ui/packages/react-keyring/src/Authenticator.tsx b/packages/w3ui/packages/react-keyring/src/Authenticator.tsx index 1b73304f1..27e74a701 100644 --- a/packages/w3ui/packages/react-keyring/src/Authenticator.tsx +++ b/packages/w3ui/packages/react-keyring/src/Authenticator.tsx @@ -48,7 +48,8 @@ export const AuthenticatorContext = createContext([ registerSpace: async () => { }, cancelRegisterSpace: () => { }, getProofs: async () => [], - createDelegation: async () => { throw new Error('missing keyring context provider') } + createDelegation: async () => { throw new Error('missing keyring context provider') }, + addSpace: async () => { } } ]) diff --git a/packages/w3ui/packages/react-keyring/src/providers/Keyring.tsx b/packages/w3ui/packages/react-keyring/src/providers/Keyring.tsx index de700cf41..aa0e5d681 100644 --- a/packages/w3ui/packages/react-keyring/src/providers/Keyring.tsx +++ b/packages/w3ui/packages/react-keyring/src/providers/Keyring.tsx @@ -27,7 +27,8 @@ export const keyringContextDefaultValue: KeyringContextValue = [ registerSpace: async () => { }, cancelRegisterSpace: () => { }, getProofs: async () => [], - createDelegation: async () => { throw new Error('missing keyring context provider') } + createDelegation: async () => { throw new Error('missing keyring context provider') }, + addSpace: async () => { } } ] @@ -129,6 +130,11 @@ export function KeyringProvider ({ children, servicePrincipal, connection }: Key }) } + const addSpace = async (proof: Delegation): Promise => { + const agent = await getAgent() + await agent.importSpaceFromDelegation(proof) + } + const state = { space, spaces, @@ -143,7 +149,8 @@ export function KeyringProvider ({ children, servicePrincipal, connection }: Key cancelRegisterSpace, setCurrentSpace, getProofs, - createDelegation + createDelegation, + addSpace } return ( diff --git a/packages/w3ui/packages/solid-keyring/src/providers/Keyring.ts b/packages/w3ui/packages/solid-keyring/src/providers/Keyring.ts index 86beeffd3..4881e0db7 100644 --- a/packages/w3ui/packages/solid-keyring/src/providers/Keyring.ts +++ b/packages/w3ui/packages/solid-keyring/src/providers/Keyring.ts @@ -32,7 +32,8 @@ export const AuthContext = createContext([ registerSpace: async () => { }, cancelRegisterSpace: () => { }, getProofs: async () => [], - createDelegation: async () => { throw new Error('missing keyring context provider') } + createDelegation: async () => { throw new Error('missing keyring context provider') }, + addSpace: async () => { } } ]) @@ -134,6 +135,11 @@ export const KeyringProvider: ParentComponent = props => { }) } + const addSpace = async (proof: Delegation): Promise => { + const agent = await getAgent() + await agent.importSpaceFromDelegation(proof) + } + const actions = { loadAgent, unloadAgent, @@ -143,7 +149,8 @@ export const KeyringProvider: ParentComponent = props => { cancelRegisterSpace, setCurrentSpace, getProofs, - createDelegation + createDelegation, + addSpace } return createComponent(AuthContext.Provider, { diff --git a/packages/w3ui/pnpm-lock.yaml b/packages/w3ui/pnpm-lock.yaml index 3e4855267..80a42d25f 100644 --- a/packages/w3ui/pnpm-lock.yaml +++ b/packages/w3ui/pnpm-lock.yaml @@ -5,19 +5,19 @@ importers: .: specifiers: '@babel/core': ^7.20.12 - '@babel/plugin-transform-modules-commonjs': ^7.18.6 - '@babel/preset-env': ^7.19.0 + '@babel/plugin-transform-modules-commonjs': ^7.20.11 + '@babel/preset-env': ^7.20.2 '@babel/preset-react': ^7.18.6 '@babel/preset-typescript': ^7.18.6 '@babel/register': ^7.18.9 '@rollup/plugin-babel': ^5.3.1 '@rollup/plugin-commonjs': ^22.0.2 '@rollup/plugin-json': ^4.1.0 - '@rollup/plugin-node-resolve': ^14.0.0 + '@rollup/plugin-node-resolve': ^14.1.0 '@rollup/plugin-replace': ^4.0.0 - '@types/jest': ^29.0.2 + '@types/jest': ^29.4.0 '@types/jsdom': ^20.0.1 - '@types/react': ^18.0.18 + '@types/react': ^18.0.26 '@ucanto/client': ^4.2.3 '@ucanto/server': ^4.2.3 '@ucanto/transport': ^4.2.3 @@ -25,24 +25,24 @@ importers: '@web3-storage/capabilities': ^2.2.0 esm: ^3.2.25 fake-indexeddb: ^4.0.1 - jsdom: ^21.0.0 + jsdom: ^21.1.0 path: ^0.12.7 react: ^18.2.0 - rollup: ^2.79.0 + rollup: ^2.79.1 rollup-plugin-size: ^0.2.2 rollup-plugin-terser: ^7.0.2 - rollup-plugin-visualizer: ^5.8.1 - serve: ^14.1.2 - solid-js: ^1.5.6 + rollup-plugin-visualizer: ^5.9.0 + serve: ^14.2.0 + solid-js: ^1.6.10 ts-node: ^10.9.1 - ts-standard: ^12.0.1 - typescript: ^4.8.2 - vitest: ^0.27.0 + ts-standard: ^12.0.2 + typescript: ^4.9.4 + vitest: ^0.27.3 vitest-environment-w3ui: workspace:^ - vue: ^3.2.39 + vue: ^3.2.45 devDependencies: '@babel/core': 7.20.12 - '@babel/plugin-transform-modules-commonjs': 7.19.6_@babel+core@7.20.12 + '@babel/plugin-transform-modules-commonjs': 7.20.11_@babel+core@7.20.12 '@babel/preset-env': 7.20.2_@babel+core@7.20.12 '@babel/preset-react': 7.18.6_@babel+core@7.20.12 '@babel/preset-typescript': 7.18.6_@babel+core@7.20.12 @@ -52,7 +52,7 @@ importers: '@rollup/plugin-json': 4.1.0_rollup@2.79.1 '@rollup/plugin-node-resolve': 14.1.0_rollup@2.79.1 '@rollup/plugin-replace': 4.0.0_rollup@2.79.1 - '@types/jest': 29.2.4 + '@types/jest': 29.4.0 '@types/jsdom': 20.0.1 '@types/react': 18.0.26 '@ucanto/client': 4.2.3 @@ -62,19 +62,19 @@ importers: '@web3-storage/capabilities': 2.2.0 esm: 3.2.25 fake-indexeddb: 4.0.1 - jsdom: 21.0.0 + jsdom: 21.1.0 path: 0.12.7 react: 18.2.0 rollup: 2.79.1 rollup-plugin-size: 0.2.2 rollup-plugin-terser: 7.0.2_rollup@2.79.1 - rollup-plugin-visualizer: 5.8.3_rollup@2.79.1 - serve: 14.1.2 - solid-js: 1.6.5 + rollup-plugin-visualizer: 5.9.0_rollup@2.79.1 + serve: 14.2.0 + solid-js: 1.6.10 ts-node: 10.9.1_typescript@4.9.4 - ts-standard: 12.0.1_typescript@4.9.4 + ts-standard: 12.0.2_typescript@4.9.4 typescript: 4.9.4 - vitest: 0.27.1_jsdom@21.0.0 + vitest: 0.27.3_jsdom@21.1.0 vitest-environment-w3ui: link:packages/vitest-environment-w3ui vue: 3.2.45 @@ -239,6 +239,8 @@ importers: '@ipld/dag-ucan': ^3.2.0 '@preact/preset-vite': ^2.4.0 '@types/blueimp-md5': ^2.18.0 + '@ucanto/core': ^4.1.0 + '@ucanto/interface': ^4.1.0 '@w3ui/keyring-core': workspace:^ '@w3ui/react': workspace:^ '@w3ui/react-keyring': workspace:^ @@ -263,6 +265,8 @@ importers: devDependencies: '@preact/preset-vite': 2.5.0_preact@10.11.3+vite@4.0.3 '@types/blueimp-md5': 2.18.0 + '@ucanto/core': 4.2.3 + '@ucanto/interface': 4.2.3 autoprefixer: 10.4.13_postcss@8.4.21 postcss: 8.4.21 tailwindcss: 3.2.4_postcss@8.4.21 @@ -327,16 +331,16 @@ importers: specifiers: '@w3ui/solid-keyring': workspace:^ '@w3ui/solid-uploads-list': workspace:^ - solid-js: ^1.5.1 + solid-js: ^1.6.10 vite: ^3.0.9 vite-plugin-solid: ^2.3.0 dependencies: '@w3ui/solid-keyring': link:../../../packages/solid-keyring '@w3ui/solid-uploads-list': link:../../../packages/solid-uploads-list - solid-js: 1.6.5 + solid-js: 1.6.10 devDependencies: vite: 3.2.5 - vite-plugin-solid: 2.5.0_solid-js@1.6.5+vite@3.2.5 + vite-plugin-solid: 2.5.0_solid-js@1.6.10+vite@3.2.5 examples/test/playwright: specifiers: @@ -689,7 +693,7 @@ packages: '@babel/code-frame': 7.18.6 '@babel/generator': 7.20.7 '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.5 - '@babel/helper-module-transforms': 7.20.2 + '@babel/helper-module-transforms': 7.20.11 '@babel/helpers': 7.20.6 '@babel/parser': 7.20.7 '@babel/template': 7.20.7 @@ -728,19 +732,6 @@ packages: '@babel/types': 7.20.7 dev: true - /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.12: - resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.20.5 - '@babel/core': 7.20.12 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 - semver: 6.3.0 - dev: true - /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.5: resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==} engines: {node: '>=6.9.0'} @@ -936,22 +927,6 @@ packages: - supports-color dev: true - /@babel/helper-module-transforms/7.20.2: - resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-simple-access': 7.20.2 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 - '@babel/types': 7.20.7 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-optimise-call-expression/7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} @@ -2193,28 +2168,28 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs/7.19.6_@babel+core@7.20.12: - resolution: {integrity: sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==} + /@babel/plugin-transform-modules-commonjs/7.20.11_@babel+core@7.20.12: + resolution: {integrity: sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.20.2 + '@babel/helper-module-transforms': 7.20.11 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs/7.19.6_@babel+core@7.20.5: - resolution: {integrity: sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==} + /@babel/plugin-transform-modules-commonjs/7.20.11_@babel+core@7.20.5: + resolution: {integrity: sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.5 - '@babel/helper-module-transforms': 7.20.2 + '@babel/helper-module-transforms': 7.20.11 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: @@ -2708,7 +2683,7 @@ packages: dependencies: '@babel/compat-data': 7.20.5 '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.12 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.18.6 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.12 @@ -2758,7 +2733,7 @@ packages: '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.12 '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.12 '@babel/plugin-transform-modules-amd': 7.19.6_@babel+core@7.20.12 - '@babel/plugin-transform-modules-commonjs': 7.19.6_@babel+core@7.20.12 + '@babel/plugin-transform-modules-commonjs': 7.20.11_@babel+core@7.20.12 '@babel/plugin-transform-modules-systemjs': 7.19.6_@babel+core@7.20.12 '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.12 '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.20.12 @@ -2776,7 +2751,7 @@ packages: '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.12 '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.12 '@babel/preset-modules': 0.1.5_@babel+core@7.20.12 - '@babel/types': 7.20.5 + '@babel/types': 7.20.7 babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.12 babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.12 babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.12 @@ -2794,7 +2769,7 @@ packages: dependencies: '@babel/compat-data': 7.20.5 '@babel/core': 7.20.5 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.5 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.5 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.18.6 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.5 @@ -2844,7 +2819,7 @@ packages: '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.5 '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.5 '@babel/plugin-transform-modules-amd': 7.19.6_@babel+core@7.20.5 - '@babel/plugin-transform-modules-commonjs': 7.19.6_@babel+core@7.20.5 + '@babel/plugin-transform-modules-commonjs': 7.20.11_@babel+core@7.20.5 '@babel/plugin-transform-modules-systemjs': 7.19.6_@babel+core@7.20.5 '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.5 '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.20.5 @@ -2862,7 +2837,7 @@ packages: '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.5 '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.5 '@babel/preset-modules': 0.1.5_@babel+core@7.20.5 - '@babel/types': 7.20.5 + '@babel/types': 7.20.7 babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.5 babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.5 babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.5 @@ -3014,15 +2989,6 @@ packages: - supports-color dev: true - /@babel/types/7.20.5: - resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.19.4 - '@babel/helper-validator-identifier': 7.19.1 - to-fast-properties: 2.0.0 - dev: true - /@babel/types/7.20.7: resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} engines: {node: '>=6.9.0'} @@ -3443,7 +3409,7 @@ packages: '@jest/schemas': 29.0.0 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.17 + '@types/node': 18.11.18 '@types/yargs': 17.0.17 chalk: 4.1.2 dev: true @@ -4985,7 +4951,7 @@ packages: /@types/graceful-fs/4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.11.17 + '@types/node': 18.11.18 dev: true /@types/hast/2.3.4: @@ -5014,8 +4980,8 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest/29.2.4: - resolution: {integrity: sha512-PipFB04k2qTRPePduVLTRiPzQfvMeLwUN3Z21hsAKaB/W9IIzgB2pizCL466ftJlcyZqnHoC9ZHpxLGl3fS86A==} + /@types/jest/29.4.0: + resolution: {integrity: sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==} dependencies: expect: 29.3.1 pretty-format: 29.3.1 @@ -5060,7 +5026,7 @@ packages: /@types/node-fetch/2.6.2: resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} dependencies: - '@types/node': 18.11.17 + '@types/node': 18.11.18 form-data: 3.0.1 dev: true @@ -5073,7 +5039,6 @@ packages: /@types/node/18.11.18: resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} - dev: false /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -5116,7 +5081,7 @@ packages: /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 18.11.17 + '@types/node': 18.11.18 dev: true /@types/retry/0.12.1: @@ -5550,6 +5515,10 @@ packages: resolution: {integrity: sha512-/J4WBTpWtQ4itN1rb3ao8LfClmVcmz2pO6oYb7Qd4h7VSqUhIbJIvrykz9Ew1WMg6eFWsKdsMHc5uPbFxqlCpg==} dev: true + /@zeit/schemas/2.29.0: + resolution: {integrity: sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA==} + dev: true + /@zxing/text-encoding/0.9.0: resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} requiresBuild: true @@ -9272,7 +9241,7 @@ packages: dependencies: '@jest/types': 29.3.1 '@types/graceful-fs': 4.1.6 - '@types/node': 18.11.17 + '@types/node': 18.11.18 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 @@ -9328,7 +9297,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.3.1 - '@types/node': 18.11.17 + '@types/node': 18.11.18 chalk: 4.1.2 ci-info: 3.7.0 graceful-fs: 4.2.10 @@ -9348,7 +9317,7 @@ packages: resolution: {integrity: sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.11.17 + '@types/node': 18.11.18 jest-util: 29.3.1 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -9387,7 +9356,7 @@ packages: '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.5 '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.5 '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.20.5 - '@babel/plugin-transform-modules-commonjs': 7.19.6_@babel+core@7.20.5 + '@babel/plugin-transform-modules-commonjs': 7.20.11_@babel+core@7.20.5 '@babel/preset-env': 7.20.2_@babel+core@7.20.5 '@babel/preset-flow': 7.18.6_@babel+core@7.20.5 '@babel/preset-typescript': 7.18.6_@babel+core@7.20.5 @@ -9406,8 +9375,8 @@ packages: - supports-color dev: true - /jsdom/21.0.0: - resolution: {integrity: sha512-AIw+3ZakSUtDYvhwPwWHiZsUi3zHugpMEKlNPaurviseYoBqo0zBd3zqoUi3LPCNtPFlEP8FiW9MqCZdjb2IYA==} + /jsdom/21.1.0: + resolution: {integrity: sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg==} engines: {node: '>=14'} peerDependencies: canvas: ^2.5.0 @@ -9439,7 +9408,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.11.0 + ws: 8.12.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -11314,8 +11283,8 @@ packages: terser: 5.16.1 dev: true - /rollup-plugin-visualizer/5.8.3_rollup@2.79.1: - resolution: {integrity: sha512-QGJk4Bqe4AOat5AjipOh8esZH1nck5X2KFpf4VytUdSUuuuSwvIQZjMGgjcxe/zXexltqaXp5Vx1V3LmnQH15Q==} + /rollup-plugin-visualizer/5.9.0_rollup@2.79.1: + resolution: {integrity: sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==} engines: {node: '>=14'} hasBin: true peerDependencies: @@ -11325,6 +11294,7 @@ packages: optional: true dependencies: open: 8.4.0 + picomatch: 2.3.1 rollup: 2.79.1 source-map: 0.7.4 yargs: 17.6.2 @@ -11505,6 +11475,26 @@ packages: - supports-color dev: true + /serve/14.2.0: + resolution: {integrity: sha512-+HOw/XK1bW8tw5iBilBz/mJLWRzM8XM6MPxL4J/dKzdxq1vfdEWSwhaR7/yS8EJp5wzvP92p1qirysJvnEtjXg==} + engines: {node: '>= 14'} + hasBin: true + dependencies: + '@zeit/schemas': 2.29.0 + ajv: 8.11.0 + arg: 5.0.2 + boxen: 7.0.0 + chalk: 5.0.1 + chalk-template: 0.4.0 + clipboardy: 3.0.0 + compression: 1.7.4 + is-port-reachable: 4.0.0 + serve-handler: 6.1.5 + update-check: 1.5.4 + transitivePeerDependencies: + - supports-color + dev: true + /set-blocking/2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true @@ -11639,11 +11629,27 @@ packages: - supports-color dev: true + /solid-js/1.6.10: + resolution: {integrity: sha512-Sf0e6PQCEFkFtbPq0L+93Ua81YQOefBEbvDJ0YXT92b6Lzw0k7UvzSd2l1BbYM+yzE3UmepU1tyMDc/3nIByjA==} + dependencies: + csstype: 3.1.1 + /solid-js/1.6.5: resolution: {integrity: sha512-q1/wIIRmrWltNnP3PW/e29eRWCC24hX5amBiOXomw2kDiM6JZZ10l+chK/Oi/6ipwUxeabYl5YD2lJOObY9heA==} dependencies: csstype: 3.1.1 + /solid-refresh/0.4.1_solid-js@1.6.10: + resolution: {integrity: sha512-v3tD/OXQcUyXLrWjPW1dXZyeWwP7/+GQNs8YTL09GBq+5FguA6IejJWUvJDrLIA4M0ho9/5zK2e9n+uy+4488g==} + peerDependencies: + solid-js: ^1.3 + dependencies: + '@babel/generator': 7.20.7 + '@babel/helper-module-imports': 7.18.6 + '@babel/types': 7.20.7 + solid-js: 1.6.10 + dev: true + /solid-refresh/0.4.1_solid-js@1.6.5: resolution: {integrity: sha512-v3tD/OXQcUyXLrWjPW1dXZyeWwP7/+GQNs8YTL09GBq+5FguA6IejJWUvJDrLIA4M0ho9/5zK2e9n+uy+4488g==} peerDependencies: @@ -11768,6 +11774,10 @@ packages: engines: {node: '>= 0.8'} dev: true + /std-env/3.3.1: + resolution: {integrity: sha512-3H20QlwQsSm2OvAxWIYhs+j01MzzqwMwGiiO1NQaJYZgJZFPuAbf95/DiKRBSTYIJ2FeGUc+B/6mPGcWP9dO3Q==} + dev: true + /stop-iteration-iterator/1.0.0: resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} engines: {node: '>= 0.4'} @@ -12166,8 +12176,8 @@ packages: yn: 3.1.1 dev: true - /ts-standard/12.0.1_typescript@4.9.4: - resolution: {integrity: sha512-Ewk3l0k/SwckuVoMokkKq5W0B6daOlVzk0Yu9Wrcp3m0/CWneVM8NK/EgUZFkx4OHw1F+RpAC7dFyzO2cLNmsw==} + /ts-standard/12.0.2_typescript@4.9.4: + resolution: {integrity: sha512-XX2wrB9fKKTfBj4yD3ABm9iShzZcS2iWcPK8XzlBvuL20+wMiLgiz/k5tXgZwTaYq5wRhbks1Y9PelhujF/9ag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true peerDependencies: @@ -12560,6 +12570,30 @@ packages: - sugarss - supports-color - terser + dev: false + + /vite-node/0.27.3_@types+node@18.11.18: + resolution: {integrity: sha512-eyJYOO64o5HIp8poc4bJX+ZNBwMZeI3f6/JdiUmJgW02Mt7LnoCtDMRVmLaY9S05SIsjGe339ZK4uo2wQ+bF9g==} + engines: {node: '>=v14.16.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + mlly: 1.1.0 + pathe: 0.2.0 + picocolors: 1.0.0 + source-map: 0.6.1 + source-map-support: 0.5.21 + vite: 4.0.3_@types+node@18.11.18 + transitivePeerDependencies: + - '@types/node' + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true /vite-plugin-externals/0.5.1_vite@4.0.3: resolution: {integrity: sha512-HvRFG5y9wXoJUG9FSbSp9ikOiJRh7EzN6tJC5oIOcEj+19GUw9Z1NNCPFtAmX75Ajcr10FdELKNmuXS3lExkcg==} @@ -12573,6 +12607,24 @@ packages: vite: 4.0.3 dev: true + /vite-plugin-solid/2.5.0_solid-js@1.6.10+vite@3.2.5: + resolution: {integrity: sha512-VneGd3RyFJvwaiffsqgymeMaofn0IzQLPwDzafTV2f1agoWeeJlk5VrI5WqT9BTtLe69vNNbCJWqLhHr9fOdDw==} + peerDependencies: + solid-js: ^1.3.17 || ^1.4.0 || ^1.5.0 || ^1.6.0 + vite: ^3.0.0 || ^4.0.0 + dependencies: + '@babel/core': 7.20.5 + '@babel/preset-typescript': 7.18.6_@babel+core@7.20.5 + babel-preset-solid: 1.6.3_@babel+core@7.20.5 + merge-anything: 5.1.4 + solid-js: 1.6.10 + solid-refresh: 0.4.1_solid-js@1.6.10 + vite: 3.2.5 + vitefu: 0.2.3_vite@3.2.5 + transitivePeerDependencies: + - supports-color + dev: true + /vite-plugin-solid/2.5.0_solid-js@1.6.5+vite@3.2.5: resolution: {integrity: sha512-VneGd3RyFJvwaiffsqgymeMaofn0IzQLPwDzafTV2f1agoWeeJlk5VrI5WqT9BTtLe69vNNbCJWqLhHr9fOdDw==} peerDependencies: @@ -12689,6 +12741,41 @@ packages: rollup: 3.8.0 optionalDependencies: fsevents: 2.3.2 + dev: false + + /vite/4.0.3_@types+node@18.11.18: + resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 18.11.18 + esbuild: 0.16.10 + postcss: 8.4.21 + resolve: 1.22.1 + rollup: 3.8.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true /vitefu/0.2.3_vite@3.2.5: resolution: {integrity: sha512-75l7TTuU8isAhz1QFtNKjDkqjxvndfMC1AfIMjJ0ZQ59ZD0Ow9QOIsJJX16Wv9PS8f+zMzp6fHy5cCbKG/yVUQ==} @@ -12750,8 +12837,8 @@ packages: - terser dev: false - /vitest/0.27.1_jsdom@21.0.0: - resolution: {integrity: sha512-1sIpQ1DVFTEn7c1ici1XHcVfdU4nKiBmPtPAtGKJJJLuJjojTv/OHGgcf69P57alM4ty8V4NMv+7Yoi5Cxqx9g==} + /vitest/0.27.3_jsdom@21.1.0: + resolution: {integrity: sha512-Ld3UVgRVhJUtqvQ3dW89GxiApFAgBsWJZBCWzK+gA3w2yG68csXlGZZ4WDJURf+8ecNfgrScga6xY+8YSOpiMg==} engines: {node: '>=v14.16.0'} hasBin: true peerDependencies: @@ -12774,22 +12861,23 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.11.17 + '@types/node': 18.11.18 acorn: 8.8.1 acorn-walk: 8.2.0 cac: 6.7.14 chai: 4.3.7 debug: 4.3.4 - jsdom: 21.0.0 + jsdom: 21.1.0 local-pkg: 0.4.2 picocolors: 1.0.0 source-map: 0.6.1 + std-env: 3.3.1 strip-literal: 1.0.0 tinybench: 2.3.1 tinypool: 0.3.0 tinyspy: 1.0.2 - vite: 4.0.3_@types+node@18.11.17 - vite-node: 0.27.1_@types+node@18.11.17 + vite: 4.0.3_@types+node@18.11.18 + vite-node: 0.27.3_@types+node@18.11.18 why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -13037,19 +13125,6 @@ packages: async-limiter: 1.0.1 dev: true - /ws/8.11.0: - resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - /ws/8.12.0: resolution: {integrity: sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==} engines: {node: '>=10.0.0'}