From ae50515ba5ddd215211c1e034fc61bec46e1917a Mon Sep 17 00:00:00 2001 From: Thiago Costa Porto Date: Wed, 18 Oct 2023 02:29:37 +0200 Subject: [PATCH 01/25] wip: fix: frontend uses cookies --- packages/grid/frontend/.prettierrc | 7 +- packages/grid/frontend/package.json | 2 +- packages/grid/frontend/pnpm-lock.yaml | 2140 +++++------------ packages/grid/frontend/src/lib/api/auth.ts | 62 +- packages/grid/frontend/src/lib/api/keys.ts | 30 - .../grid/frontend/src/lib/api/metadata.ts | 53 +- packages/grid/frontend/src/lib/api/serde.ts | 12 +- .../frontend/src/lib/api/syft-api-call.ts | 122 - .../grid/frontend/src/lib/api/syft_api.ts | 130 + packages/grid/frontend/src/lib/api/users.ts | 72 +- .../frontend/src/lib/components/Input.svelte | 16 +- packages/grid/frontend/src/lib/constants.ts | 17 +- packages/grid/frontend/src/lib/helpers.ts | 15 - packages/grid/frontend/src/lib/stores/nav.ts | 3 - packages/grid/frontend/src/lib/utils.ts | 54 +- .../src/routes/(auth)/login/+page.server.js | 40 + .../src/routes/(auth)/login/+page.svelte | 69 +- .../frontend/src/routes/+layout.server.ts | 27 + packages/grid/frontend/src/routes/+page.js | 5 - .../grid/frontend/src/routes/+page.svelte | 14 +- packages/grid/frontend/src/routes/+page.ts | 6 + 21 files changed, 977 insertions(+), 1919 deletions(-) delete mode 100644 packages/grid/frontend/src/lib/api/keys.ts delete mode 100644 packages/grid/frontend/src/lib/api/syft-api-call.ts create mode 100644 packages/grid/frontend/src/lib/api/syft_api.ts delete mode 100644 packages/grid/frontend/src/lib/helpers.ts delete mode 100644 packages/grid/frontend/src/lib/stores/nav.ts create mode 100644 packages/grid/frontend/src/routes/(auth)/login/+page.server.js create mode 100644 packages/grid/frontend/src/routes/+layout.server.ts delete mode 100644 packages/grid/frontend/src/routes/+page.js create mode 100644 packages/grid/frontend/src/routes/+page.ts diff --git a/packages/grid/frontend/.prettierrc b/packages/grid/frontend/.prettierrc index a18e6342329..a26379d4346 100644 --- a/packages/grid/frontend/.prettierrc +++ b/packages/grid/frontend/.prettierrc @@ -1,7 +1,6 @@ { - "useTabs": false, - "singleQuote": true, - "trailingComma": "none", - "printWidth": 100, + "semi": false, + "singleQuote": false, + "trailingComma": "es5", "htmlWhitespaceSensitivity": "ignore" } diff --git a/packages/grid/frontend/package.json b/packages/grid/frontend/package.json index b58883b0a42..fb1c09828c9 100644 --- a/packages/grid/frontend/package.json +++ b/packages/grid/frontend/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@playwright/test": "^1.36.1", "@sveltejs/adapter-node": "^1.3.1", - "@sveltejs/kit": "^1.22.3", + "@sveltejs/kit": "1.25.2", "@types/prismjs": "^1.26.0", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", diff --git a/packages/grid/frontend/pnpm-lock.yaml b/packages/grid/frontend/pnpm-lock.yaml index 4d8360635d7..100fe531740 100644 --- a/packages/grid/frontend/pnpm-lock.yaml +++ b/packages/grid/frontend/pnpm-lock.yaml @@ -32,10 +32,10 @@ devDependencies: version: 1.36.1 '@sveltejs/adapter-node': specifier: ^1.3.1 - version: 1.3.1(@sveltejs/kit@1.22.3) + version: 1.3.1(@sveltejs/kit@1.25.2) '@sveltejs/kit': - specifier: ^1.22.3 - version: 1.22.3(svelte@3.59.2)(vite@4.4.4) + specifier: 1.25.2 + version: 1.25.2(svelte@3.59.2)(vite@4.4.4) '@types/prismjs': specifier: ^1.26.0 version: 1.26.0 @@ -95,20 +95,15 @@ devDependencies: version: 0.33.0 packages: + /@aashutoshrathi/word-wrap@1.2.6: - resolution: - { - integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} dev: true /@esbuild/android-arm64@0.18.13: - resolution: - { - integrity: sha512-j7NhycJUoUAG5kAzGf4fPWfd17N6SM3o1X6MlXVqfHvs2buFraCJzos9vbeWjLxOyBKHyPOnuCuipbhvbYtTAg== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-j7NhycJUoUAG5kAzGf4fPWfd17N6SM3o1X6MlXVqfHvs2buFraCJzos9vbeWjLxOyBKHyPOnuCuipbhvbYtTAg==} + engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true @@ -116,11 +111,8 @@ packages: optional: true /@esbuild/android-arm@0.18.13: - resolution: - { - integrity: sha512-KwqFhxRFMKZINHzCqf8eKxE0XqWlAVPRxwy6rc7CbVFxzUWB2sA/s3hbMZeemPdhN3fKBkqOaFhTbS8xJXYIWQ== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-KwqFhxRFMKZINHzCqf8eKxE0XqWlAVPRxwy6rc7CbVFxzUWB2sA/s3hbMZeemPdhN3fKBkqOaFhTbS8xJXYIWQ==} + engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true @@ -128,11 +120,8 @@ packages: optional: true /@esbuild/android-x64@0.18.13: - resolution: - { - integrity: sha512-M2eZkRxR6WnWfVELHmv6MUoHbOqnzoTVSIxgtsyhm/NsgmL+uTmag/VVzdXvmahak1I6sOb1K/2movco5ikDJg== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-M2eZkRxR6WnWfVELHmv6MUoHbOqnzoTVSIxgtsyhm/NsgmL+uTmag/VVzdXvmahak1I6sOb1K/2movco5ikDJg==} + engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true @@ -140,11 +129,8 @@ packages: optional: true /@esbuild/darwin-arm64@0.18.13: - resolution: - { - integrity: sha512-f5goG30YgR1GU+fxtaBRdSW3SBG9pZW834Mmhxa6terzcboz7P2R0k4lDxlkP7NYRIIdBbWp+VgwQbmMH4yV7w== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-f5goG30YgR1GU+fxtaBRdSW3SBG9pZW834Mmhxa6terzcboz7P2R0k4lDxlkP7NYRIIdBbWp+VgwQbmMH4yV7w==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true @@ -152,11 +138,8 @@ packages: optional: true /@esbuild/darwin-x64@0.18.13: - resolution: - { - integrity: sha512-RIrxoKH5Eo+yE5BtaAIMZaiKutPhZjw+j0OCh8WdvKEKJQteacq0myZvBDLU+hOzQOZWJeDnuQ2xgSScKf1Ovw== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-RIrxoKH5Eo+yE5BtaAIMZaiKutPhZjw+j0OCh8WdvKEKJQteacq0myZvBDLU+hOzQOZWJeDnuQ2xgSScKf1Ovw==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true @@ -164,11 +147,8 @@ packages: optional: true /@esbuild/freebsd-arm64@0.18.13: - resolution: - { - integrity: sha512-AfRPhHWmj9jGyLgW/2FkYERKmYR+IjYxf2rtSLmhOrPGFh0KCETFzSjx/JX/HJnvIqHt/DRQD/KAaVsUKoI3Xg== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-AfRPhHWmj9jGyLgW/2FkYERKmYR+IjYxf2rtSLmhOrPGFh0KCETFzSjx/JX/HJnvIqHt/DRQD/KAaVsUKoI3Xg==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true @@ -176,11 +156,8 @@ packages: optional: true /@esbuild/freebsd-x64@0.18.13: - resolution: - { - integrity: sha512-pGzWWZJBInhIgdEwzn8VHUBang8UvFKsvjDkeJ2oyY5gZtAM6BaxK0QLCuZY+qoj/nx/lIaItH425rm/hloETA== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-pGzWWZJBInhIgdEwzn8VHUBang8UvFKsvjDkeJ2oyY5gZtAM6BaxK0QLCuZY+qoj/nx/lIaItH425rm/hloETA==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true @@ -188,11 +165,8 @@ packages: optional: true /@esbuild/linux-arm64@0.18.13: - resolution: - { - integrity: sha512-hCzZbVJEHV7QM77fHPv2qgBcWxgglGFGCxk6KfQx6PsVIdi1u09X7IvgE9QKqm38OpkzaAkPnnPqwRsltvLkIQ== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-hCzZbVJEHV7QM77fHPv2qgBcWxgglGFGCxk6KfQx6PsVIdi1u09X7IvgE9QKqm38OpkzaAkPnnPqwRsltvLkIQ==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true @@ -200,11 +174,8 @@ packages: optional: true /@esbuild/linux-arm@0.18.13: - resolution: - { - integrity: sha512-4iMxLRMCxGyk7lEvkkvrxw4aJeC93YIIrfbBlUJ062kilUUnAiMb81eEkVvCVoh3ON283ans7+OQkuy1uHW+Hw== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-4iMxLRMCxGyk7lEvkkvrxw4aJeC93YIIrfbBlUJ062kilUUnAiMb81eEkVvCVoh3ON283ans7+OQkuy1uHW+Hw==} + engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true @@ -212,11 +183,8 @@ packages: optional: true /@esbuild/linux-ia32@0.18.13: - resolution: - { - integrity: sha512-I3OKGbynl3AAIO6onXNrup/ttToE6Rv2XYfFgLK/wnr2J+1g+7k4asLrE+n7VMhaqX+BUnyWkCu27rl+62Adug== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-I3OKGbynl3AAIO6onXNrup/ttToE6Rv2XYfFgLK/wnr2J+1g+7k4asLrE+n7VMhaqX+BUnyWkCu27rl+62Adug==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true @@ -224,11 +192,8 @@ packages: optional: true /@esbuild/linux-loong64@0.18.13: - resolution: - { - integrity: sha512-8pcKDApAsKc6WW51ZEVidSGwGbebYw2qKnO1VyD8xd6JN0RN6EUXfhXmDk9Vc4/U3Y4AoFTexQewQDJGsBXBpg== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-8pcKDApAsKc6WW51ZEVidSGwGbebYw2qKnO1VyD8xd6JN0RN6EUXfhXmDk9Vc4/U3Y4AoFTexQewQDJGsBXBpg==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true @@ -236,11 +201,8 @@ packages: optional: true /@esbuild/linux-mips64el@0.18.13: - resolution: - { - integrity: sha512-6GU+J1PLiVqWx8yoCK4Z0GnfKyCGIH5L2KQipxOtbNPBs+qNDcMJr9euxnyJ6FkRPyMwaSkjejzPSISD9hb+gg== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-6GU+J1PLiVqWx8yoCK4Z0GnfKyCGIH5L2KQipxOtbNPBs+qNDcMJr9euxnyJ6FkRPyMwaSkjejzPSISD9hb+gg==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true @@ -248,11 +210,8 @@ packages: optional: true /@esbuild/linux-ppc64@0.18.13: - resolution: - { - integrity: sha512-pfn/OGZ8tyR8YCV7MlLl5hAit2cmS+j/ZZg9DdH0uxdCoJpV7+5DbuXrR+es4ayRVKIcfS9TTMCs60vqQDmh+w== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-pfn/OGZ8tyR8YCV7MlLl5hAit2cmS+j/ZZg9DdH0uxdCoJpV7+5DbuXrR+es4ayRVKIcfS9TTMCs60vqQDmh+w==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true @@ -260,11 +219,8 @@ packages: optional: true /@esbuild/linux-riscv64@0.18.13: - resolution: - { - integrity: sha512-aIbhU3LPg0lOSCfVeGHbmGYIqOtW6+yzO+Nfv57YblEK01oj0mFMtvDJlOaeAZ6z0FZ9D13oahi5aIl9JFphGg== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-aIbhU3LPg0lOSCfVeGHbmGYIqOtW6+yzO+Nfv57YblEK01oj0mFMtvDJlOaeAZ6z0FZ9D13oahi5aIl9JFphGg==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true @@ -272,11 +228,8 @@ packages: optional: true /@esbuild/linux-s390x@0.18.13: - resolution: - { - integrity: sha512-Pct1QwF2sp+5LVi4Iu5Y+6JsGaV2Z2vm4O9Dd7XZ5tKYxEHjFtb140fiMcl5HM1iuv6xXO8O1Vrb1iJxHlv8UA== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-Pct1QwF2sp+5LVi4Iu5Y+6JsGaV2Z2vm4O9Dd7XZ5tKYxEHjFtb140fiMcl5HM1iuv6xXO8O1Vrb1iJxHlv8UA==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true @@ -284,11 +237,8 @@ packages: optional: true /@esbuild/linux-x64@0.18.13: - resolution: - { - integrity: sha512-zTrIP0KzYP7O0+3ZnmzvUKgGtUvf4+piY8PIO3V8/GfmVd3ZyHJGz7Ht0np3P1wz+I8qJ4rjwJKqqEAbIEPngA== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-zTrIP0KzYP7O0+3ZnmzvUKgGtUvf4+piY8PIO3V8/GfmVd3ZyHJGz7Ht0np3P1wz+I8qJ4rjwJKqqEAbIEPngA==} + engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true @@ -296,11 +246,8 @@ packages: optional: true /@esbuild/netbsd-x64@0.18.13: - resolution: - { - integrity: sha512-I6zs10TZeaHDYoGxENuksxE1sxqZpCp+agYeW039yqFwh3MgVvdmXL5NMveImOC6AtpLvE4xG5ujVic4NWFIDQ== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-I6zs10TZeaHDYoGxENuksxE1sxqZpCp+agYeW039yqFwh3MgVvdmXL5NMveImOC6AtpLvE4xG5ujVic4NWFIDQ==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true @@ -308,11 +255,8 @@ packages: optional: true /@esbuild/openbsd-x64@0.18.13: - resolution: - { - integrity: sha512-W5C5nczhrt1y1xPG5bV+0M12p2vetOGlvs43LH8SopQ3z2AseIROu09VgRqydx5qFN7y9qCbpgHLx0kb0TcW7g== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-W5C5nczhrt1y1xPG5bV+0M12p2vetOGlvs43LH8SopQ3z2AseIROu09VgRqydx5qFN7y9qCbpgHLx0kb0TcW7g==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true @@ -320,11 +264,8 @@ packages: optional: true /@esbuild/sunos-x64@0.18.13: - resolution: - { - integrity: sha512-X/xzuw4Hzpo/yq3YsfBbIsipNgmsm8mE/QeWbdGdTTeZ77fjxI2K0KP3AlhZ6gU3zKTw1bKoZTuKLnqcJ537qw== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-X/xzuw4Hzpo/yq3YsfBbIsipNgmsm8mE/QeWbdGdTTeZ77fjxI2K0KP3AlhZ6gU3zKTw1bKoZTuKLnqcJ537qw==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true @@ -332,11 +273,8 @@ packages: optional: true /@esbuild/win32-arm64@0.18.13: - resolution: - { - integrity: sha512-4CGYdRQT/ILd+yLLE5i4VApMPfGE0RPc/wFQhlluDQCK09+b4JDbxzzjpgQqTPrdnP7r5KUtGVGZYclYiPuHrw== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-4CGYdRQT/ILd+yLLE5i4VApMPfGE0RPc/wFQhlluDQCK09+b4JDbxzzjpgQqTPrdnP7r5KUtGVGZYclYiPuHrw==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true @@ -344,11 +282,8 @@ packages: optional: true /@esbuild/win32-ia32@0.18.13: - resolution: - { - integrity: sha512-D+wKZaRhQI+MUGMH+DbEr4owC2D7XnF+uyGiZk38QbgzLcofFqIOwFs7ELmIeU45CQgfHNy9Q+LKW3cE8g37Kg== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-D+wKZaRhQI+MUGMH+DbEr4owC2D7XnF+uyGiZk38QbgzLcofFqIOwFs7ELmIeU45CQgfHNy9Q+LKW3cE8g37Kg==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true @@ -356,11 +291,8 @@ packages: optional: true /@esbuild/win32-x64@0.18.13: - resolution: - { - integrity: sha512-iVl6lehAfJS+VmpF3exKpNQ8b0eucf5VWfzR8S7xFve64NBNz2jPUgx1X93/kfnkfgP737O+i1k54SVQS7uVZA== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-iVl6lehAfJS+VmpF3exKpNQ8b0eucf5VWfzR8S7xFve64NBNz2jPUgx1X93/kfnkfgP737O+i1k54SVQS7uVZA==} + engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true @@ -368,11 +300,8 @@ packages: optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.44.0): - resolution: - { - integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: @@ -381,19 +310,13 @@ packages: dev: true /@eslint-community/regexpp@4.9.1: - resolution: - { - integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA== - } - engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true /@eslint/eslintrc@2.1.2: - resolution: - { - integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 @@ -409,19 +332,18 @@ packages: dev: true /@eslint/js@8.44.0: - resolution: - { - integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@fastify/busboy@2.0.0: + resolution: {integrity: sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==} + engines: {node: '>=14'} dev: true /@humanwhocodes/config-array@0.11.11: - resolution: - { - integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== - } - engines: { node: '>=10.10.0' } + resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.4 @@ -431,36 +353,24 @@ packages: dev: true /@humanwhocodes/module-importer@1.0.1: - resolution: - { - integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - } - engines: { node: '>=12.22' } + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} dev: true /@humanwhocodes/object-schema@1.2.1: - resolution: - { - integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - } + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true /@jest/schemas@29.6.3: - resolution: - { - integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.27.8 dev: true /@jridgewell/gen-mapping@0.3.3: - resolution: - { - integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 @@ -468,74 +378,50 @@ packages: dev: true /@jridgewell/resolve-uri@3.1.1: - resolution: - { - integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} dev: true /@jridgewell/set-array@1.1.2: - resolution: - { - integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} dev: true /@jridgewell/sourcemap-codec@1.4.15: - resolution: - { - integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - } + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true /@jridgewell/trace-mapping@0.3.19: - resolution: - { - integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - } + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@nodelib/fs.scandir@2.1.5: - resolution: - { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 dev: true /@nodelib/fs.stat@2.0.5: - resolution: - { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} dev: true /@nodelib/fs.walk@1.2.8: - resolution: - { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 dev: true /@playwright/test@1.36.1: - resolution: - { - integrity: sha512-YK7yGWK0N3C2QInPU6iaf/L3N95dlGdbsezLya4n0ZCh3IL7VgPGxC6Gnznh9ApWdOmkJeleT2kMTcWPRZvzqg== - } - engines: { node: '>=16' } + resolution: {integrity: sha512-YK7yGWK0N3C2QInPU6iaf/L3N95dlGdbsezLya4n0ZCh3IL7VgPGxC6Gnznh9ApWdOmkJeleT2kMTcWPRZvzqg==} + engines: {node: '>=16'} hasBin: true dependencies: '@types/node': 20.8.2 @@ -545,18 +431,12 @@ packages: dev: true /@polka/url@1.0.0-next.23: - resolution: - { - integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg== - } + resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==} dev: true /@rollup/plugin-commonjs@25.0.5(rollup@3.29.4): - resolution: - { - integrity: sha512-xY8r/A9oisSeSuLCTfhssyDjo9Vp/eDiRLXkg1MXCcEEgEjPmLU+ZyDB20OOD0NlyDa/8SGbK5uIggF5XTx77w== - } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-xY8r/A9oisSeSuLCTfhssyDjo9Vp/eDiRLXkg1MXCcEEgEjPmLU+ZyDB20OOD0NlyDa/8SGbK5uIggF5XTx77w==} + engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 peerDependenciesMeta: @@ -573,11 +453,8 @@ packages: dev: true /@rollup/plugin-json@6.0.1(rollup@3.29.4): - resolution: - { - integrity: sha512-RgVfl5hWMkxN1h/uZj8FVESvPuBJ/uf6ly6GTj0GONnkfoBN5KC0MSz+PN2OLDgYXMhtG0mWpTrkiOjoxAIevw== - } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-RgVfl5hWMkxN1h/uZj8FVESvPuBJ/uf6ly6GTj0GONnkfoBN5KC0MSz+PN2OLDgYXMhtG0mWpTrkiOjoxAIevw==} + engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: @@ -589,11 +466,8 @@ packages: dev: true /@rollup/plugin-node-resolve@15.2.2(rollup@3.29.4): - resolution: - { - integrity: sha512-f64bU4OKqV0yihtxFemmuf0oj37pToCFMISCA+sJbbIAl5wcpbRO9XgWNWb1tDiWQJUcPxo6V0l59hcuZOQ3kw== - } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-f64bU4OKqV0yihtxFemmuf0oj37pToCFMISCA+sJbbIAl5wcpbRO9XgWNWb1tDiWQJUcPxo6V0l59hcuZOQ3kw==} + engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0||^4.0.0 peerDependenciesMeta: @@ -610,11 +484,8 @@ packages: dev: true /@rollup/pluginutils@5.0.5(rollup@3.29.4): - resolution: - { - integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q== - } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} + engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: @@ -628,33 +499,24 @@ packages: dev: true /@sinclair/typebox@0.27.8: - resolution: - { - integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - } + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true - /@sveltejs/adapter-node@1.3.1(@sveltejs/kit@1.22.3): - resolution: - { - integrity: sha512-A0VgRQDCDPzdLNoiAbcOxGw4zT1Mc+n1LwT1OmO350R7WxrEqdMUChPPOd1iMfIDWlP4ie6E2d/WQf5es2d4Zw== - } + /@sveltejs/adapter-node@1.3.1(@sveltejs/kit@1.25.2): + resolution: {integrity: sha512-A0VgRQDCDPzdLNoiAbcOxGw4zT1Mc+n1LwT1OmO350R7WxrEqdMUChPPOd1iMfIDWlP4ie6E2d/WQf5es2d4Zw==} peerDependencies: '@sveltejs/kit': ^1.0.0 dependencies: '@rollup/plugin-commonjs': 25.0.5(rollup@3.29.4) '@rollup/plugin-json': 6.0.1(rollup@3.29.4) '@rollup/plugin-node-resolve': 15.2.2(rollup@3.29.4) - '@sveltejs/kit': 1.22.3(svelte@3.59.2)(vite@4.4.4) + '@sveltejs/kit': 1.25.2(svelte@3.59.2)(vite@4.4.4) rollup: 3.29.4 dev: true - /@sveltejs/kit@1.22.3(svelte@3.59.2)(vite@4.4.4): - resolution: - { - integrity: sha512-IpHD5wvuoOIHYaHQUBJ1zERD2Iz+fB/rBXhXjl8InKw6X4VKE9BSus+ttHhE7Ke+Ie9ecfilzX8BnWE3FeQyng== - } - engines: { node: ^16.14 || >=18 } + /@sveltejs/kit@1.25.2(svelte@3.59.2)(vite@4.4.4): + resolution: {integrity: sha512-USuuSpdAPFDiLi58N2Pwd/TG9bcUSPAlzE5iaAXaLyCTWa3l36HDKH6nV5NqBybwfeux1ZwgtIeITLZJDJ6HDg==} + engines: {node: ^16.14 || >=18} hasBin: true requiresBuild: true peerDependencies: @@ -673,18 +535,16 @@ packages: set-cookie-parser: 2.6.0 sirv: 2.0.3 svelte: 3.59.2 - undici: 5.22.1 + tiny-glob: 0.2.9 + undici: 5.25.4 vite: 4.4.4(@types/node@20.8.2) transitivePeerDependencies: - supports-color dev: true /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@3.59.2)(vite@4.4.4): - resolution: - { - integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ== - } - engines: { node: ^14.18.0 || >= 16 } + resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} + engines: {node: ^14.18.0 || >= 16} peerDependencies: '@sveltejs/vite-plugin-svelte': ^2.2.0 svelte: ^3.54.0 || ^4.0.0 @@ -699,11 +559,8 @@ packages: dev: true /@sveltejs/vite-plugin-svelte@2.4.6(svelte@3.59.2)(vite@4.4.4): - resolution: - { - integrity: sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA== - } - engines: { node: ^14.18.0 || >= 16 } + resolution: {integrity: sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==} + engines: {node: ^14.18.0 || >= 16} peerDependencies: svelte: ^3.54.0 || ^4.0.0 vite: ^4.0.0 @@ -722,93 +579,57 @@ packages: dev: true /@types/chai-subset@1.3.3: - resolution: - { - integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== - } + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} dependencies: '@types/chai': 4.3.6 dev: true /@types/chai@4.3.6: - resolution: - { - integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== - } + resolution: {integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==} dev: true /@types/cookie@0.5.2: - resolution: - { - integrity: sha512-DBpRoJGKJZn7RY92dPrgoMew8xCWc2P71beqsjyhEI/Ds9mOyVmBwtekyfhpwFIVt1WrxTonFifiOZ62V8CnNA== - } + resolution: {integrity: sha512-DBpRoJGKJZn7RY92dPrgoMew8xCWc2P71beqsjyhEI/Ds9mOyVmBwtekyfhpwFIVt1WrxTonFifiOZ62V8CnNA==} dev: true /@types/estree@1.0.2: - resolution: - { - integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA== - } + resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==} dev: true /@types/json-schema@7.0.13: - resolution: - { - integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== - } + resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} dev: true /@types/node@20.8.2: - resolution: - { - integrity: sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w== - } + resolution: {integrity: sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==} dev: true /@types/prismjs@1.26.0: - resolution: - { - integrity: sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ== - } + resolution: {integrity: sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ==} dev: true /@types/pug@2.0.7: - resolution: - { - integrity: sha512-I469DU0UXNC1aHepwirWhu9YKg5fkxohZD95Ey/5A7lovC+Siu+MCLffva87lnfThaOrw9Vb1DUN5t55oULAAw== - } + resolution: {integrity: sha512-I469DU0UXNC1aHepwirWhu9YKg5fkxohZD95Ey/5A7lovC+Siu+MCLffva87lnfThaOrw9Vb1DUN5t55oULAAw==} dev: true /@types/resolve@1.20.2: - resolution: - { - integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== - } + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} dev: true /@types/sass@1.45.0: - resolution: - { - integrity: sha512-jn7qwGFmJHwUSphV8zZneO3GmtlgLsmhs/LQyVvQbIIa+fzGMUiHI4HXJZL3FT8MJmgXWbLGiVVY7ElvHq6vDA== - } + resolution: {integrity: sha512-jn7qwGFmJHwUSphV8zZneO3GmtlgLsmhs/LQyVvQbIIa+fzGMUiHI4HXJZL3FT8MJmgXWbLGiVVY7ElvHq6vDA==} deprecated: This is a stub types definition. sass provides its own type definitions, so you do not need this installed. dependencies: sass: 1.68.0 dev: true /@types/semver@7.5.3: - resolution: - { - integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw== - } + resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} dev: true /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.44.0)(typescript@4.9.5): - resolution: - { - integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -835,11 +656,8 @@ packages: dev: true /@typescript-eslint/parser@5.62.0(eslint@8.44.0)(typescript@4.9.5): - resolution: - { - integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 typescript: '*' @@ -858,22 +676,16 @@ packages: dev: true /@typescript-eslint/scope-manager@5.62.0: - resolution: - { - integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 dev: true /@typescript-eslint/type-utils@5.62.0(eslint@8.44.0)(typescript@4.9.5): - resolution: - { - integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' typescript: '*' @@ -892,19 +704,13 @@ packages: dev: true /@typescript-eslint/types@5.62.0: - resolution: - { - integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): - resolution: - { - integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -924,11 +730,8 @@ packages: dev: true /@typescript-eslint/utils@5.62.0(eslint@8.44.0)(typescript@4.9.5): - resolution: - { - integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: @@ -947,21 +750,15 @@ packages: dev: true /@typescript-eslint/visitor-keys@5.62.0: - resolution: - { - integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 dev: true /@vitest/expect@0.33.0: - resolution: - { - integrity: sha512-sVNf+Gla3mhTCxNJx+wJLDPp/WcstOe0Ksqz4Vec51MmgMth/ia0MGFEkIZmVGeTL5HtjYR4Wl/ZxBxBXZJTzQ== - } + resolution: {integrity: sha512-sVNf+Gla3mhTCxNJx+wJLDPp/WcstOe0Ksqz4Vec51MmgMth/ia0MGFEkIZmVGeTL5HtjYR4Wl/ZxBxBXZJTzQ==} dependencies: '@vitest/spy': 0.33.0 '@vitest/utils': 0.33.0 @@ -969,10 +766,7 @@ packages: dev: true /@vitest/runner@0.33.0: - resolution: - { - integrity: sha512-UPfACnmCB6HKRHTlcgCoBh6ppl6fDn+J/xR8dTufWiKt/74Y9bHci5CKB8tESSV82zKYtkBJo9whU3mNvfaisg== - } + resolution: {integrity: sha512-UPfACnmCB6HKRHTlcgCoBh6ppl6fDn+J/xR8dTufWiKt/74Y9bHci5CKB8tESSV82zKYtkBJo9whU3mNvfaisg==} dependencies: '@vitest/utils': 0.33.0 p-limit: 4.0.0 @@ -980,10 +774,7 @@ packages: dev: true /@vitest/snapshot@0.33.0: - resolution: - { - integrity: sha512-tJjrl//qAHbyHajpFvr8Wsk8DIOODEebTu7pgBrP07iOepR5jYkLFiqLq2Ltxv+r0uptUb4izv1J8XBOwKkVYA== - } + resolution: {integrity: sha512-tJjrl//qAHbyHajpFvr8Wsk8DIOODEebTu7pgBrP07iOepR5jYkLFiqLq2Ltxv+r0uptUb4izv1J8XBOwKkVYA==} dependencies: magic-string: 0.30.4 pathe: 1.1.1 @@ -991,19 +782,13 @@ packages: dev: true /@vitest/spy@0.33.0: - resolution: - { - integrity: sha512-Kv+yZ4hnH1WdiAkPUQTpRxW8kGtH8VRTnus7ZTGovFYM1ZezJpvGtb9nPIjPnptHbsyIAxYZsEpVPYgtpjGnrg== - } + resolution: {integrity: sha512-Kv+yZ4hnH1WdiAkPUQTpRxW8kGtH8VRTnus7ZTGovFYM1ZezJpvGtb9nPIjPnptHbsyIAxYZsEpVPYgtpjGnrg==} dependencies: tinyspy: 2.2.0 dev: true /@vitest/utils@0.33.0: - resolution: - { - integrity: sha512-pF1w22ic965sv+EN6uoePkAOTkAPWM03Ri/jXNyMIKBb/XHLDPfhLvf/Fa9g0YECevAIz56oVYXhodLvLQ/awA== - } + resolution: {integrity: sha512-pF1w22ic965sv+EN6uoePkAOTkAPWM03Ri/jXNyMIKBb/XHLDPfhLvf/Fa9g0YECevAIz56oVYXhodLvLQ/awA==} dependencies: diff-sequences: 29.6.3 loupe: 2.3.6 @@ -1011,10 +796,7 @@ packages: dev: true /acorn-jsx@5.3.2(acorn@8.10.0): - resolution: - { - integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - } + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: @@ -1022,27 +804,18 @@ packages: dev: true /acorn-walk@8.2.0: - resolution: - { - integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} dev: true /acorn@8.10.0: - resolution: - { - integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} hasBin: true dev: true /ajv@6.12.6: - resolution: - { - integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - } + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -1051,84 +824,54 @@ packages: dev: true /ansi-regex@5.0.1: - resolution: - { - integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} dev: true /ansi-styles@4.3.0: - resolution: - { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: color-convert: 2.0.1 dev: true /ansi-styles@5.2.0: - resolution: - { - integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} dev: true /any-promise@1.3.0: - resolution: - { - integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - } + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true /anymatch@3.1.3: - resolution: - { - integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 dev: true /arg@5.0.2: - resolution: - { - integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - } + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} dev: true /argparse@2.0.1: - resolution: - { - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - } + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true /array-union@2.1.0: - resolution: - { - integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} dev: true /assertion-error@1.1.0: - resolution: - { - integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - } + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true /autoprefixer@10.4.14(postcss@8.4.31): - resolution: - { - integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} + engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 @@ -1143,55 +886,37 @@ packages: dev: true /balanced-match@1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true /binary-extensions@2.2.0: - resolution: - { - integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} dev: true /brace-expansion@1.1.11: - resolution: - { - integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - } + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true /brace-expansion@2.0.1: - resolution: - { - integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - } + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 dev: true /braces@3.0.2: - resolution: - { - integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} dependencies: fill-range: 7.0.1 dev: true /browserslist@4.22.1: - resolution: - { - integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== - } - engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: caniuse-lite: 1.0.30001546 @@ -1201,66 +926,35 @@ packages: dev: true /buffer-crc32@0.2.13: - resolution: - { - integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - } + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} dev: true /builtin-modules@3.3.0: - resolution: - { - integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - } - engines: { node: '>=6' } - dev: true - - /busboy@1.6.0: - resolution: - { - integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - } - engines: { node: '>=10.16.0' } - dependencies: - streamsearch: 1.1.0 + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} dev: true /cac@6.7.14: - resolution: - { - integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} dev: true /callsites@3.1.0: - resolution: - { - integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} dev: true /camelcase-css@2.0.1: - resolution: - { - integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} dev: true /caniuse-lite@1.0.30001546: - resolution: - { - integrity: sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw== - } + resolution: {integrity: sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==} dev: true /capnp-ts@0.7.0: - resolution: - { - integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g== - } + resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} dependencies: debug: 4.3.4 tslib: 2.6.2 @@ -1269,11 +963,8 @@ packages: dev: false /chai@4.3.10: - resolution: - { - integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 check-error: 1.0.3 @@ -1285,31 +976,22 @@ packages: dev: true /chalk@4.1.2: - resolution: - { - integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 dev: true /check-error@1.0.3: - resolution: - { - integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== - } + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: get-func-name: 2.0.2 dev: true /chokidar@3.5.3: - resolution: - { - integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - } - engines: { node: '>= 8.10.0' } + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -1323,58 +1005,37 @@ packages: dev: true /color-convert@2.0.1: - resolution: - { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - } - engines: { node: '>=7.0.0' } + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 dev: true /color-name@1.1.4: - resolution: - { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - } + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true /commander@4.1.1: - resolution: - { - integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} dev: true /commondir@1.0.1: - resolution: - { - integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - } + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true /concat-map@0.0.1: - resolution: - { - integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - } + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true /cookie@0.5.0: - resolution: - { - integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} dev: true /cross-spawn@7.0.3: - resolution: - { - integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: path-key: 3.1.1 shebang-command: 2.0.0 @@ -1382,20 +1043,14 @@ packages: dev: true /cssesc@3.0.0: - resolution: - { - integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} hasBin: true dev: true /debug@4.3.4: - resolution: - { - integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -1405,115 +1060,73 @@ packages: ms: 2.1.2 /deep-eql@4.1.3: - resolution: - { - integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} dependencies: type-detect: 4.0.8 dev: true /deep-is@0.1.4: - resolution: - { - integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - } + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true /deepmerge@4.3.1: - resolution: - { - integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} dev: true /detect-indent@6.1.0: - resolution: - { - integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} dev: true /devalue@4.3.2: - resolution: - { - integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg== - } + resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} dev: true /didyoumean@1.2.2: - resolution: - { - integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - } + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} dev: true /diff-sequences@29.6.3: - resolution: - { - integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true /dir-glob@3.0.1: - resolution: - { - integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true /dlv@1.1.3: - resolution: - { - integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - } + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: true /doctrine@3.0.0: - resolution: - { - integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true /dotenv@16.3.1: - resolution: - { - integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} dev: true /electron-to-chromium@1.4.543: - resolution: - { - integrity: sha512-t2ZP4AcGE0iKCCQCBx/K2426crYdxD3YU6l0uK2EO3FZH0pbC4pFz/sZm2ruZsND6hQBTcDWWlo/MLpiOdif5g== - } + resolution: {integrity: sha512-t2ZP4AcGE0iKCCQCBx/K2426crYdxD3YU6l0uK2EO3FZH0pbC4pFz/sZm2ruZsND6hQBTcDWWlo/MLpiOdif5g==} dev: true /es6-promise@3.3.1: - resolution: - { - integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== - } + resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} dev: true /esbuild@0.18.13: - resolution: - { - integrity: sha512-vhg/WR/Oiu4oUIkVhmfcc23G6/zWuEQKFS+yiosSHe4aN6+DQRXIfeloYGibIfVhkr4wyfuVsGNLr+sQU1rWWw== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-vhg/WR/Oiu4oUIkVhmfcc23G6/zWuEQKFS+yiosSHe4aN6+DQRXIfeloYGibIfVhkr4wyfuVsGNLr+sQU1rWWw==} + engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: @@ -1542,26 +1155,17 @@ packages: dev: true /escalade@3.1.1: - resolution: - { - integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} dev: true /escape-string-regexp@4.0.0: - resolution: - { - integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} dev: true /eslint-config-prettier@8.8.0(eslint@8.44.0): - resolution: - { - integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== - } + resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -1570,10 +1174,7 @@ packages: dev: true /eslint-plugin-svelte3@4.0.0(eslint@8.44.0)(svelte@3.59.2): - resolution: - { - integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g== - } + resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==} peerDependencies: eslint: '>=8.0.0' svelte: ^3.2.0 @@ -1583,41 +1184,29 @@ packages: dev: true /eslint-scope@5.1.1: - resolution: - { - integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 dev: true /eslint-scope@7.2.2: - resolution: - { - integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 dev: true /eslint-visitor-keys@3.4.3: - resolution: - { - integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true /eslint@8.44.0: - resolution: - { - integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) @@ -1664,18 +1253,12 @@ packages: dev: true /esm-env@1.0.0: - resolution: - { - integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA== - } + resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} dev: true /espree@9.6.1: - resolution: - { - integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.10.0 acorn-jsx: 5.3.2(acorn@8.10.0) @@ -1683,69 +1266,45 @@ packages: dev: true /esquery@1.5.0: - resolution: - { - integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true /esrecurse@4.3.0: - resolution: - { - integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true /estraverse@4.3.0: - resolution: - { - integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} dev: true /estraverse@5.3.0: - resolution: - { - integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} dev: true /estree-walker@2.0.2: - resolution: - { - integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - } + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true /esutils@2.0.3: - resolution: - { - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} dev: true /fast-deep-equal@3.1.3: - resolution: - { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - } + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true /fast-glob@3.3.1: - resolution: - { - integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== - } - engines: { node: '>=8.6.0' } + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -1755,65 +1314,44 @@ packages: dev: true /fast-json-stable-stringify@2.1.0: - resolution: - { - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - } + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true /fast-levenshtein@2.0.6: - resolution: - { - integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - } + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true /fastq@1.15.0: - resolution: - { - integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - } + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true /file-entry-cache@6.0.1: - resolution: - { - integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.1.0 dev: true /fill-range@7.0.1: - resolution: - { - integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true /find-up@5.0.0: - resolution: - { - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} dependencies: locate-path: 6.0.0 path-exists: 4.0.0 dev: true /flat-cache@3.1.0: - resolution: - { - integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== - } - engines: { node: '>=12.0.0' } + resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} + engines: {node: '>=12.0.0'} dependencies: flatted: 3.2.9 keyv: 4.5.3 @@ -1821,80 +1359,53 @@ packages: dev: true /flatted@3.2.9: - resolution: - { - integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== - } + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true /fraction.js@4.3.6: - resolution: - { - integrity: sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg== - } + resolution: {integrity: sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==} dev: true /fs.realpath@1.0.0: - resolution: - { - integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - } + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true /fsevents@2.3.2: - resolution: - { - integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true dev: true optional: true /fsevents@2.3.3: - resolution: - { - integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true dev: true optional: true /get-func-name@2.0.2: - resolution: - { - integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== - } + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true /glob-parent@5.1.2: - resolution: - { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 dev: true /glob-parent@6.0.2: - resolution: - { - integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 dev: true /glob@7.1.6: - resolution: - { - integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - } + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -1905,10 +1416,7 @@ packages: dev: true /glob@7.2.3: - resolution: - { - integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - } + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -1919,11 +1427,8 @@ packages: dev: true /glob@8.1.0: - resolution: - { - integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -1933,21 +1438,19 @@ packages: dev: true /globals@13.23.0: - resolution: - { - integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true + /globalyzer@0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + dev: true + /globby@11.1.0: - resolution: - { - integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -1957,442 +1460,290 @@ packages: slash: 3.0.0 dev: true + /globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + dev: true + /graceful-fs@4.2.11: - resolution: - { - integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - } + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true /graphemer@1.4.0: - resolution: - { - integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - } + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true /has-flag@4.0.0: - resolution: - { - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} dev: true /has@1.0.4: - resolution: - { - integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== - } - engines: { node: '>= 0.4.0' } + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} + engines: {node: '>= 0.4.0'} dev: true /ignore@5.2.4: - resolution: - { - integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - } - engines: { node: '>= 4' } + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} dev: true /immutable@4.3.4: - resolution: - { - integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== - } + resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} dev: true /import-fresh@3.3.0: - resolution: - { - integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 dev: true /imurmurhash@0.1.4: - resolution: - { - integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - } - engines: { node: '>=0.8.19' } + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} dev: true /inflight@1.0.6: - resolution: - { - integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - } + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true /inherits@2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - } + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true /is-binary-path@2.1.0: - resolution: - { - integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 dev: true /is-builtin-module@3.2.1: - resolution: - { - integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} dependencies: builtin-modules: 3.3.0 dev: true /is-core-module@2.13.0: - resolution: - { - integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - } + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: has: 1.0.4 dev: true /is-extglob@2.1.1: - resolution: - { - integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} dev: true /is-glob@4.0.3: - resolution: - { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true /is-module@1.0.0: - resolution: - { - integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - } + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} dev: true /is-number@7.0.0: - resolution: - { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - } - engines: { node: '>=0.12.0' } + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} dev: true /is-path-inside@3.0.3: - resolution: - { - integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} dev: true /is-reference@1.2.1: - resolution: - { - integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - } + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} dependencies: '@types/estree': 1.0.2 dev: true /isexe@2.0.0: - resolution: - { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - } + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true /jiti@1.20.0: - resolution: - { - integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA== - } + resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} hasBin: true dev: true /js-yaml@4.1.0: - resolution: - { - integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - } + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 dev: true /json-buffer@3.0.1: - resolution: - { - integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - } + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true /json-schema-traverse@0.4.1: - resolution: - { - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - } + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true /json-stable-stringify-without-jsonify@1.0.1: - resolution: - { - integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - } + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true /jsonc-parser@3.2.0: - resolution: - { - integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - } + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: true /just-debounce-it@3.2.0: - resolution: - { - integrity: sha512-WXzwLL0745uNuedrCsCs3rpmfD6DBaf7uuVwaq98/8dafURfgQaBsSpjiPp5+CW6Vjltwy9cOGI6qE71b3T8iQ== - } + resolution: {integrity: sha512-WXzwLL0745uNuedrCsCs3rpmfD6DBaf7uuVwaq98/8dafURfgQaBsSpjiPp5+CW6Vjltwy9cOGI6qE71b3T8iQ==} dev: false /keyv@4.5.3: - resolution: - { - integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== - } + resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} dependencies: json-buffer: 3.0.1 dev: true /kleur@4.1.5: - resolution: - { - integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} dev: true /ky@0.33.3: - resolution: - { - integrity: sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw== - } - engines: { node: '>=14.16' } + resolution: {integrity: sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==} + engines: {node: '>=14.16'} dev: false /levn@0.4.1: - resolution: - { - integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 dev: true /libsodium-wrappers@0.7.11: - resolution: - { - integrity: sha512-SrcLtXj7BM19vUKtQuyQKiQCRJPgbpauzl3s0rSwD+60wtHqSUuqcoawlMDheCJga85nKOQwxNYQxf/CKAvs6Q== - } + resolution: {integrity: sha512-SrcLtXj7BM19vUKtQuyQKiQCRJPgbpauzl3s0rSwD+60wtHqSUuqcoawlMDheCJga85nKOQwxNYQxf/CKAvs6Q==} dependencies: libsodium: 0.7.11 dev: false /libsodium@0.7.11: - resolution: - { - integrity: sha512-WPfJ7sS53I2s4iM58QxY3Inb83/6mjlYgcmZs7DJsvDlnmVUwNinBCi5vBT43P6bHRy01O4zsMU2CoVR6xJ40A== - } + resolution: {integrity: sha512-WPfJ7sS53I2s4iM58QxY3Inb83/6mjlYgcmZs7DJsvDlnmVUwNinBCi5vBT43P6bHRy01O4zsMU2CoVR6xJ40A==} dev: false /lilconfig@2.1.0: - resolution: - { - integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} dev: true /lines-and-columns@1.2.4: - resolution: - { - integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - } + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true /local-pkg@0.4.3: - resolution: - { - integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== - } - engines: { node: '>=14' } + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} dev: true /locate-path@6.0.0: - resolution: - { - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true /lodash.merge@4.6.2: - resolution: - { - integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - } + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true /loupe@2.3.6: - resolution: - { - integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== - } + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} dependencies: get-func-name: 2.0.2 dev: true /lru-cache@6.0.0: - resolution: - { - integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} dependencies: yallist: 4.0.0 /magic-string@0.25.9: - resolution: - { - integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - } + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: sourcemap-codec: 1.4.8 dev: true /magic-string@0.27.0: - resolution: - { - integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} + engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 dev: true /magic-string@0.30.4: - resolution: - { - integrity: sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==} + engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 dev: true /merge2@1.4.1: - resolution: - { - integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} dev: true /micromatch@4.0.5: - resolution: - { - integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.1 dev: true /mime@3.0.0: - resolution: - { - integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} hasBin: true dev: true /min-indent@1.0.1: - resolution: - { - integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} dev: true /minimatch@3.1.2: - resolution: - { - integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - } + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true /minimatch@5.1.6: - resolution: - { - integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 dev: true /minimist@1.2.8: - resolution: - { - integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - } + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true /mkdirp@0.5.6: - resolution: - { - integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - } + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true dependencies: minimist: 1.2.8 dev: true /mlly@1.4.2: - resolution: - { - integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== - } + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} dependencies: acorn: 8.10.0 pathe: 1.1.1 @@ -2401,32 +1752,20 @@ packages: dev: true /mri@1.2.0: - resolution: - { - integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} dev: true /mrmime@1.0.1: - resolution: - { - integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} dev: true /ms@2.1.2: - resolution: - { - integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - } + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} /mz@2.7.0: - resolution: - { - integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - } + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: any-promise: 1.3.0 object-assign: 4.1.1 @@ -2434,82 +1773,52 @@ packages: dev: true /nanoid@3.3.6: - resolution: - { - integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true /natural-compare-lite@1.4.0: - resolution: - { - integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - } + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true /natural-compare@1.4.0: - resolution: - { - integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - } + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true /node-releases@2.0.13: - resolution: - { - integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - } + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} dev: true /normalize-path@3.0.0: - resolution: - { - integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} dev: true /normalize-range@0.1.2: - resolution: - { - integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} dev: true /object-assign@4.1.1: - resolution: - { - integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} dev: true /object-hash@3.0.0: - resolution: - { - integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} dev: true /once@1.4.0: - resolution: - { - integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - } + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true /optionator@0.9.3: - resolution: - { - integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} dependencies: '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 @@ -2520,134 +1829,86 @@ packages: dev: true /p-limit@3.1.0: - resolution: - { - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true /p-limit@4.0.0: - resolution: - { - integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: yocto-queue: 1.0.0 dev: true /p-locate@5.0.0: - resolution: - { - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true /parent-module@1.0.1: - resolution: - { - integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true /path-exists@4.0.0: - resolution: - { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} dev: true /path-is-absolute@1.0.1: - resolution: - { - integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} dev: true /path-key@3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} dev: true /path-parse@1.0.7: - resolution: - { - integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - } + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true /path-type@4.0.0: - resolution: - { - integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} dev: true /pathe@1.1.1: - resolution: - { - integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== - } + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} dev: true /pathval@1.1.1: - resolution: - { - integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - } + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true /picocolors@1.0.0: - resolution: - { - integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - } + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true /picomatch@2.3.1: - resolution: - { - integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} dev: true /pify@2.3.0: - resolution: - { - integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} dev: true /pirates@4.0.6: - resolution: - { - integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} dev: true /pkg-types@1.0.3: - resolution: - { - integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== - } + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.0 mlly: 1.4.2 @@ -2655,20 +1916,14 @@ packages: dev: true /playwright-core@1.36.1: - resolution: - { - integrity: sha512-7+tmPuMcEW4xeCL9cp9KxmYpQYHKkyjwoXRnoeTowaeNat8PoBMk/HwCYhqkH2fRkshfKEOiVus/IhID2Pg8kg== - } - engines: { node: '>=16' } + resolution: {integrity: sha512-7+tmPuMcEW4xeCL9cp9KxmYpQYHKkyjwoXRnoeTowaeNat8PoBMk/HwCYhqkH2fRkshfKEOiVus/IhID2Pg8kg==} + engines: {node: '>=16'} hasBin: true dev: true /postcss-import@14.1.0(postcss@8.4.31): - resolution: - { - integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== - } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} + engines: {node: '>=10.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: @@ -2679,11 +1934,8 @@ packages: dev: true /postcss-js@4.0.1(postcss@8.4.31): - resolution: - { - integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== - } - engines: { node: ^12 || ^14 || >= 16 } + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: @@ -2692,11 +1944,8 @@ packages: dev: true /postcss-load-config@3.1.4(postcss@8.4.31): - resolution: - { - integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} peerDependencies: postcss: '>=8.0.9' ts-node: '>=9.0.0' @@ -2712,11 +1961,8 @@ packages: dev: true /postcss-nested@6.0.0(postcss@8.4.31): - resolution: - { - integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== - } - engines: { node: '>=12.0' } + resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} + engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: @@ -2725,29 +1971,20 @@ packages: dev: true /postcss-selector-parser@6.0.13: - resolution: - { - integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 dev: true /postcss-value-parser@4.2.0: - resolution: - { - integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - } + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true /postcss@8.4.31: - resolution: - { - integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 picocolors: 1.0.0 @@ -2755,18 +1992,12 @@ packages: dev: true /prelude-ls@1.2.1: - resolution: - { - integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} dev: true /prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@3.59.2): - resolution: - { - integrity: sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ== - } + resolution: {integrity: sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==} peerDependencies: prettier: ^1.16.4 || ^2.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 @@ -2776,20 +2007,14 @@ packages: dev: true /prettier@2.8.8: - resolution: - { - integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} hasBin: true dev: true /pretty-format@29.7.0: - resolution: - { - integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 @@ -2797,75 +2022,48 @@ packages: dev: true /prismjs@1.29.0: - resolution: - { - integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} dev: false /punycode@2.3.0: - resolution: - { - integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} dev: true /queue-microtask@1.2.3: - resolution: - { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - } + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true /quick-lru@5.1.1: - resolution: - { - integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} dev: true /react-is@18.2.0: - resolution: - { - integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - } + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true /read-cache@1.0.0: - resolution: - { - integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - } + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: pify: 2.3.0 dev: true /readdirp@3.6.0: - resolution: - { - integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - } - engines: { node: '>=8.10.0' } + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 dev: true /resolve-from@4.0.0: - resolution: - { - integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} dev: true /resolve@1.22.6: - resolution: - { - integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== - } + resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} hasBin: true dependencies: is-core-module: 2.13.0 @@ -2874,68 +2072,47 @@ packages: dev: true /reusify@1.0.4: - resolution: - { - integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - } - engines: { iojs: '>=1.0.0', node: '>=0.10.0' } + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true /rimraf@2.7.1: - resolution: - { - integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - } + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: glob: 7.2.3 dev: true /rimraf@3.0.2: - resolution: - { - integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - } + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true /rollup@3.29.4: - resolution: - { - integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== - } - engines: { node: '>=14.18.0', npm: '>=8.0.0' } + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.3 dev: true /run-parallel@1.2.0: - resolution: - { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - } + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true /sade@1.8.1: - resolution: - { - integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} dependencies: mri: 1.2.0 dev: true /sander@0.5.1: - resolution: - { - integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA== - } + resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} dependencies: es6-promise: 3.3.1 graceful-fs: 4.2.11 @@ -2944,11 +2121,8 @@ packages: dev: true /sass@1.68.0: - resolution: - { - integrity: sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA== - } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA==} + engines: {node: '>=14.0.0'} hasBin: true dependencies: chokidar: 3.5.3 @@ -2957,53 +2131,35 @@ packages: dev: true /semver@7.5.4: - resolution: - { - integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 /set-cookie-parser@2.6.0: - resolution: - { - integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== - } + resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} dev: true /shebang-command@2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true /shebang-regex@3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} dev: true /siginfo@2.0.0: - resolution: - { - integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== - } + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} dev: true /sirv@2.0.3: - resolution: - { - integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA== - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} + engines: {node: '>= 10'} dependencies: '@polka/url': 1.0.0-next.23 mrmime: 1.0.1 @@ -3011,18 +2167,12 @@ packages: dev: true /slash@3.0.0: - resolution: - { - integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} dev: true /sorcery@0.10.0: - resolution: - { - integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g== - } + resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==} hasBin: true dependencies: buffer-crc32: 0.2.13 @@ -3032,86 +2182,51 @@ packages: dev: true /source-map-js@1.0.2: - resolution: - { - integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} dev: true /sourcemap-codec@1.4.8: - resolution: - { - integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - } + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead dev: true /stackback@0.0.2: - resolution: - { - integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== - } + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true /std-env@3.4.3: - resolution: - { - integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q== - } - dev: true - - /streamsearch@1.1.0: - resolution: - { - integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==} dev: true /strip-ansi@6.0.1: - resolution: - { - integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 dev: true /strip-indent@3.0.0: - resolution: - { - integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} dependencies: min-indent: 1.0.1 dev: true /strip-json-comments@3.1.1: - resolution: - { - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} dev: true /strip-literal@1.3.0: - resolution: - { - integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== - } + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} dependencies: acorn: 8.10.0 dev: true /sucrase@3.34.0: - resolution: - { - integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} + engines: {node: '>=8'} hasBin: true dependencies: '@jridgewell/gen-mapping': 0.3.3 @@ -3124,29 +2239,20 @@ packages: dev: true /supports-color@7.2.0: - resolution: - { - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 dev: true /supports-preserve-symlinks-flag@1.0.0: - resolution: - { - integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} dev: true /svelte-hmr@0.15.3(svelte@3.59.2): - resolution: - { - integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ== - } - engines: { node: ^12.20 || ^14.13.1 || >= 16 } + resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} + engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: ^3.19.0 || ^4.0.0 dependencies: @@ -3154,11 +2260,8 @@ packages: dev: true /svelte-preprocess@4.10.7(postcss@8.4.31)(svelte@3.59.2)(typescript@4.9.5): - resolution: - { - integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw== - } - engines: { node: '>= 9.11.2' } + resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} + engines: {node: '>= 9.11.2'} requiresBuild: true peerDependencies: '@babel/core': ^7.10.2 @@ -3209,26 +2312,17 @@ packages: dev: true /svelte-search@2.0.1: - resolution: - { - integrity: sha512-JBoObru/BUk86EmuRtYBa99xnH1RB8jqDuYYJHH0PUzN9BINo1+1GZataC/m5368BG3kZRb3wZI5ztjoi1WWXg== - } + resolution: {integrity: sha512-JBoObru/BUk86EmuRtYBa99xnH1RB8jqDuYYJHH0PUzN9BINo1+1GZataC/m5368BG3kZRb3wZI5ztjoi1WWXg==} dev: true /svelte@3.59.2: - resolution: - { - integrity: sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==} + engines: {node: '>= 8'} dev: true /tailwindcss@3.3.1(postcss@8.4.31): - resolution: - { - integrity: sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g== - } - engines: { node: '>=12.13.0' } + resolution: {integrity: sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==} + engines: {node: '>=12.13.0'} hasBin: true peerDependencies: postcss: ^8.0.9 @@ -3262,99 +2356,70 @@ packages: dev: true /text-table@0.2.0: - resolution: - { - integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - } + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true /thenify-all@1.6.0: - resolution: - { - integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - } - engines: { node: '>=0.8' } + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 dev: true /thenify@3.3.1: - resolution: - { - integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - } + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 dev: true + /tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + dependencies: + globalyzer: 0.1.0 + globrex: 0.1.2 + dev: true + /tinybench@2.5.1: - resolution: - { - integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== - } + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} dev: true /tinypool@0.6.0: - resolution: - { - integrity: sha512-FdswUUo5SxRizcBc6b1GSuLpLjisa8N8qMyYoP3rl+bym+QauhtJP5bvZY1ytt8krKGmMLYIRl36HBZfeAoqhQ== - } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-FdswUUo5SxRizcBc6b1GSuLpLjisa8N8qMyYoP3rl+bym+QauhtJP5bvZY1ytt8krKGmMLYIRl36HBZfeAoqhQ==} + engines: {node: '>=14.0.0'} dev: true /tinyspy@2.2.0: - resolution: - { - integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg== - } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} + engines: {node: '>=14.0.0'} dev: true /to-regex-range@5.0.1: - resolution: - { - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - } - engines: { node: '>=8.0' } + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 dev: true /totalist@3.0.1: - resolution: - { - integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} dev: true /ts-interface-checker@0.1.13: - resolution: - { - integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== - } + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true /tslib@1.14.1: - resolution: - { - integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - } + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true /tslib@2.6.2: - resolution: - { - integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - } + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: false /tsutils@3.21.0(typescript@4.9.5): - resolution: - { - integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: @@ -3363,62 +2428,41 @@ packages: dev: true /type-check@0.4.0: - resolution: - { - integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true /type-detect@4.0.8: - resolution: - { - integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} dev: true /type-fest@0.20.2: - resolution: - { - integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} dev: true /typescript@4.9.5: - resolution: - { - integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - } - engines: { node: '>=4.2.0' } + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} hasBin: true dev: true /ufo@1.3.1: - resolution: - { - integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw== - } + resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} dev: true - /undici@5.22.1: - resolution: - { - integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw== - } - engines: { node: '>=14.0' } + /undici@5.25.4: + resolution: {integrity: sha512-450yJxT29qKMf3aoudzFpIciqpx6Pji3hEWaXqXmanbXF58LTAGCKxcJjxMXWu3iG+Mudgo3ZUfDB6YDFd/dAw==} + engines: {node: '>=14.0'} dependencies: - busboy: 1.6.0 + '@fastify/busboy': 2.0.0 dev: true /update-browserslist-db@1.0.13(browserslist@4.22.1): - resolution: - { - integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - } + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -3429,35 +2473,23 @@ packages: dev: true /uri-js@4.4.1: - resolution: - { - integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - } + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.0 dev: true /util-deprecate@1.0.2: - resolution: - { - integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - } + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true /uuid@9.0.0: - resolution: - { - integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== - } + resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} hasBin: true dev: false /vite-node@0.33.0(@types/node@20.8.2): - resolution: - { - integrity: sha512-19FpHYbwWWxDr73ruNahC+vtEdza52kA90Qb3La98yZ0xULqV8A5JLNPUff0f5zID4984tW7l3DH2przTJUZSw== - } - engines: { node: '>=v14.18.0' } + resolution: {integrity: sha512-19FpHYbwWWxDr73ruNahC+vtEdza52kA90Qb3La98yZ0xULqV8A5JLNPUff0f5zID4984tW7l3DH2przTJUZSw==} + engines: {node: '>=v14.18.0'} hasBin: true dependencies: cac: 6.7.14 @@ -3478,11 +2510,8 @@ packages: dev: true /vite@4.4.4(@types/node@20.8.2): - resolution: - { - integrity: sha512-4mvsTxjkveWrKDJI70QmelfVqTm+ihFAb6+xf4sjEU2TmUCTlVX87tmg/QooPEMQb/lM9qGHT99ebqPziEd3wg== - } - engines: { node: ^14.18.0 || >=16.0.0 } + resolution: {integrity: sha512-4mvsTxjkveWrKDJI70QmelfVqTm+ihFAb6+xf4sjEU2TmUCTlVX87tmg/QooPEMQb/lM9qGHT99ebqPziEd3wg==} + engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: '@types/node': '>= 14' @@ -3517,10 +2546,7 @@ packages: dev: true /vitefu@0.2.4(vite@4.4.4): - resolution: - { - integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g== - } + resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: vite: ^3.0.0 || ^4.0.0 peerDependenciesMeta: @@ -3531,11 +2557,8 @@ packages: dev: true /vitest@0.33.0: - resolution: - { - integrity: sha512-1CxaugJ50xskkQ0e969R/hW47za4YXDUfWJDxip1hwbnhUjYolpfUn2AMOulqG/Dtd9WYAtkHmM/m3yKVrEejQ== - } - engines: { node: '>=v14.18.0' } + resolution: {integrity: sha512-1CxaugJ50xskkQ0e969R/hW47za4YXDUfWJDxip1hwbnhUjYolpfUn2AMOulqG/Dtd9WYAtkHmM/m3yKVrEejQ==} + engines: {node: '>=v14.18.0'} hasBin: true peerDependencies: '@edge-runtime/vm': '*' @@ -3599,22 +2622,16 @@ packages: dev: true /which@2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true dependencies: isexe: 2.0.0 dev: true /why-is-node-running@2.2.2: - resolution: - { - integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} hasBin: true dependencies: siginfo: 2.0.0 @@ -3622,38 +2639,23 @@ packages: dev: true /wrappy@1.0.2: - resolution: - { - integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - } + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true /yallist@4.0.0: - resolution: - { - integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - } + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} /yaml@1.10.2: - resolution: - { - integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} dev: true /yocto-queue@0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} dev: true /yocto-queue@1.0.0: - resolution: - { - integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== - } - engines: { node: '>=12.20' } + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} dev: true diff --git a/packages/grid/frontend/src/lib/api/auth.ts b/packages/grid/frontend/src/lib/api/auth.ts index 161ee13d3fb..add618aff95 100644 --- a/packages/grid/frontend/src/lib/api/auth.ts +++ b/packages/grid/frontend/src/lib/api/auth.ts @@ -1,63 +1,61 @@ -import ky from 'ky'; -import { deserialize, serialize } from './serde'; -import { API_BASE_URL } from '../constants'; +import ky from "ky" +import { deserialize, serialize } from "./serde" +import { API_BASE_URL } from "../constants" interface LoginCredentials { - email: string; - password: string; + email: string + password: string } interface SignUpDetails { - email: string; - password: string; - password_verify: string; - name: string; - institution?: string; - website?: string; - role: number; + email: string + password: string + password_verify: string + name: string + institution?: string + website?: string + role: number } export async function login({ email, password }: LoginCredentials) { const res = await ky.post(`${API_BASE_URL}/login`, { - json: { email, password } - }); + json: { email, password }, + }) - const data = await deserialize(res); + const data = await deserialize(res) - const signing_key = data.signing_key.signing_key; - - window.localStorage.setItem('key', signing_key); - window.localStorage.setItem('id', data.id.value); - - return data; + return { + signing_key: data.signing_key.signing_key, + uid: data.id.value, + } } export async function register(newUser: SignUpDetails) { - const { email, password, password_verify, name } = newUser; + const { email, password, password_verify, name } = newUser if (!email || !password || !password_verify || !name) { - throw new Error('Missing required fields'); + throw new Error("Missing required fields") } const payload = serialize({ ...newUser, - fqn: 'syft.service.user.user.UserCreate' - }); + fqn: "syft.service.user.user.UserCreate", + }) const res = await ky.post(`${API_BASE_URL}/register`, { - headers: { 'content-type': 'application/octet-stream' }, - body: payload - }); + headers: { "content-type": "application/octet-stream" }, + body: payload, + }) - const data = await deserialize(res); + const data = await deserialize(res) if (Array.isArray(data)) { - return data; + return data } if (data.Error) { - throw new Error(data.Error); + throw new Error(data.Error) } - throw new Error(data.message); + throw new Error(data.message) } diff --git a/packages/grid/frontend/src/lib/api/keys.ts b/packages/grid/frontend/src/lib/api/keys.ts deleted file mode 100644 index b0459d05de8..00000000000 --- a/packages/grid/frontend/src/lib/api/keys.ts +++ /dev/null @@ -1,30 +0,0 @@ -import sodium from 'libsodium-wrappers'; - -export function getKeyFromStorage() { - let key = window.localStorage.getItem('key'); - - if (!key) throw new Error('Key not found'); - - try { - key = Uint8Array.from(key.split(',')); - return sodium.crypto_sign_seed_keypair(key); - } catch (error) { - throw new Error('Invalid key'); - } -} - -export function getNodeIdFromStorage() { - const key = window.localStorage.getItem('nodeId'); - - if (!key) throw new Error('Node ID not found'); - - return key; -} - -export function getUserIdFromStorage() { - const key = window.localStorage.getItem('id'); - - if (!key) throw new Error('User ID not found'); - - return key; -} diff --git a/packages/grid/frontend/src/lib/api/metadata.ts b/packages/grid/frontend/src/lib/api/metadata.ts index 24f7a4d6621..360a5f50bbd 100644 --- a/packages/grid/frontend/src/lib/api/metadata.ts +++ b/packages/grid/frontend/src/lib/api/metadata.ts @@ -1,37 +1,40 @@ -import ky from 'ky'; -import { syftCall } from './syft-api-call'; -import { API_BASE_URL } from '../constants'; -import { deserialize } from './serde'; -import { parse as uuidParse } from 'uuid'; -import { UUID } from '../client/objects/uid'; +import ky from "ky" +import { syftCall } from "./syft-api-call" +import { API_BASE_URL } from "../constants" +import { deserialize } from "./serde" export async function getMetadata() { try { - const res = await ky.get(`${API_BASE_URL}/metadata_capnp`); - const metadata = await deserialize(res); + const res = await ky.get(`${API_BASE_URL}/metadata_capnp`) - const nodeUIDString = metadata?.id?.value; - const nodeIdHyphen = hyphenateUUIDv4(nodeUIDString); - window.localStorage.setItem('metadata', JSON.stringify(metadata)); - window.localStorage.setItem('nodeId', nodeIdHyphen); + const metadata = await deserialize(res) - return metadata; + return { + admin_email: metadata?.admin_email, + deployed_on: metadata?.deployed_on, + description: metadata?.description, + highest_version: metadata?.highest_version, + lowest_version: metadata?.lowest_version, + name: metadata?.name, + node_id: metadata?.id?.value, + node_side: metadata?.node_side_type, + node_type: metadata?.node_type?.value, + organization: metadata?.organization, + signup_enabled: metadata?.signup_enabled, + syft_version: metadata?.syft_version, + } } catch (error) { - // TODO: Log error in debug mode - throw error; + console.log(error) + throw error } } -function hyphenateUUIDv4(uuid: string): string { - return uuid.replace( - /([a-z0-9]{8})([a-z0-9]{4})([a-z0-9]{4})([a-z0-9]{4})([a-z0-9]{12})/, - '$1-$2-$3-$4-$5' - ); -} - export async function updateMetadata(newMetadata) { const payload = { - settings: { ...newMetadata, fqn: 'syft.service.settings.settings.NodeSettingsUpdate' } - }; - return await syftCall({ path: 'settings.update', payload }); + settings: { + ...newMetadata, + fqn: "syft.service.settings.settings.NodeSettingsUpdate", + }, + } + return await syftCall({ path: "settings.update", payload }) } diff --git a/packages/grid/frontend/src/lib/api/serde.ts b/packages/grid/frontend/src/lib/api/serde.ts index 39e3cf9b249..68bef23e1e7 100644 --- a/packages/grid/frontend/src/lib/api/serde.ts +++ b/packages/grid/frontend/src/lib/api/serde.ts @@ -1,15 +1,15 @@ -import { serde } from '$lib/client/jsserde'; -import type { KyResponse } from 'ky'; +import { serde } from "$lib/client/jsserde" +import type { KyResponse } from "ky" export async function deserialize(response: KyResponse) { - const buffer = await response.arrayBuffer(); - return serde.deserialize(buffer); + const buffer = await response.arrayBuffer() + return serde.deserialize(buffer) } export function serialize(data: any) { - return serde.serialize(data); + return serde.serialize(data) } export function deserializeSyftResponseObject(data: Uint8Array) { - return serde.deserialize(data).data; + return serde.deserialize(data).data } diff --git a/packages/grid/frontend/src/lib/api/syft-api-call.ts b/packages/grid/frontend/src/lib/api/syft-api-call.ts deleted file mode 100644 index ea1ed0213e9..00000000000 --- a/packages/grid/frontend/src/lib/api/syft-api-call.ts +++ /dev/null @@ -1,122 +0,0 @@ -import ky from 'ky'; -import sodium from 'libsodium-wrappers'; -import { getKeyFromStorage, getNodeIdFromStorage } from './keys'; -import { deserialize, deserializeSyftResponseObject, serialize } from './serde'; -import { API_BASE_URL } from '../constants'; - -const SYFT_MSG_URL = `${API_BASE_URL}/api_call`; - -export interface VerifyKey { - key: Uint8Array; - fqn: 'nacl.signing.VerifyKey'; -} - -export interface SyftCredentials { - verify_key: VerifyKey; - fqn: 'syft.node.credentials.SyftVerifyKey'; -} - -interface SyftCall { - serializedMessage: Uint8Array; - signature: Uint8Array; - publicKey: Uint8Array; -} - -interface SignedSyftCall { - serialized_message: Uint8Array; - signature: Uint8Array; - credentials: SyftCredentials; -} - -interface SyftUUID { - value: string; - fqn: 'syft.types.uid.UID'; -} - -interface SyftAPICall { - path: string; - payload: any; -} - -export function getSyftNodeUID(): SyftUUID { - return { - value: getNodeIdFromStorage(), - fqn: 'syft.types.uid.UID' - }; -} - -export function makeSyftUID(uid: string): SyftUUID { - return { - value: uid, - fqn: 'syft.types.uid.UID' - }; -} - -export function isValid(syftCall: SignedSyftCall) { - return sodium.crypto_sign_verify_detached( - syftCall.signature, - syftCall.serialized_message, - syftCall.credentials.verify_key.key - ); -} - -function prepareSyftCall(syftCall: SyftCall): SignedSyftCall { - return { - serialized_message: syftCall.serializedMessage, - signature: syftCall.signature, - credentials: { - verify_key: { - key: syftCall.publicKey, - fqn: 'nacl.signing.VerifyKey' - }, - fqn: 'syft.node.credentials.SyftVerifyKey' - } - }; -} - -export function signSyftMessage(apiCall: SyftAPICall) { - try { - const syftAPIPayload = { - node_uid: getSyftNodeUID(), - path: apiCall.path, - args: [], // TODO: Check if this needs to be sent - kwargs: new Map(Object.entries(apiCall.payload)), - blocking: true, - fqn: 'syft.client.api.SyftAPICall' - }; - - const serializedMessage = new Uint8Array(serialize(syftAPIPayload)); - - const key = getKeyFromStorage(); - const signature = sodium.crypto_sign_detached(serializedMessage, key.privateKey); - const signedMessage = prepareSyftCall({ - serializedMessage, - signature, - publicKey: key.publicKey - }); - - return { - ...signedMessage, - fqn: 'syft.client.api.SignedSyftAPICall' - }; - } catch (error) { - console.log(error); - throw error; - } -} - -export async function syftCall({ path, payload }: SyftAPICall) { - const signedMessage = signSyftMessage({ path, payload }); - const serializedMessage = serialize(signedMessage); - - const res = await ky.post(SYFT_MSG_URL, { - headers: { 'content-type': 'application/octet-stream' }, - body: serializedMessage - }); - - const data = await deserialize(res); - - if (!isValid(data)) throw new Error('Invalid signature'); - - return deserializeSyftResponseObject(data.serialized_message); -} diff --git a/packages/grid/frontend/src/lib/api/syft_api.ts b/packages/grid/frontend/src/lib/api/syft_api.ts new file mode 100644 index 00000000000..1f98dace64f --- /dev/null +++ b/packages/grid/frontend/src/lib/api/syft_api.ts @@ -0,0 +1,130 @@ +import ky from "ky" +import sodium from "libsodium-wrappers" +import { deserialize, deserializeSyftResponseObject, serialize } from "./serde" +import { API_BASE_URL } from "../constants" + +const SYFT_MSG_URL = `${API_BASE_URL}/api_call` + +const FQN = { + VERIFY_KEY: "nacl.signing.VerifyKey", + SYFT_VERIFY_KEY: "syft.node.credentials.SyftVerifyKey", + UID: "syft.types.uid.UID", + SYFT_API_CALL: "syft.client.api.SyftAPICall", + SIGNED_SYFT_API_CALL: "syft.client.api.SignedSyftAPICall", +} + +type SyftCredentials = { + verify_key: { + key: Uint8Array + fqn: string + } + fqn: string +} + +interface SignedSyftCall { + serialized_message: Uint8Array + signature: Uint8Array + credentials: SyftCredentials + fqn: string +} + +interface SyftAPICall { + path: string + payload: Record + signing_key: string | Uint8Array + node_id: string +} + +export const isValid = (syftCall: SignedSyftCall): boolean => { + const { + signature, + serialized_message, + credentials: { + verify_key: { key }, + }, + } = syftCall + return sodium.crypto_sign_verify_detached(signature, serialized_message, key) +} + +export const sign_message = ({ + path, + payload, + signing_key, + node_id, +}: SyftAPICall): SignedSyftCall => { + if (typeof signing_key === "string") throw new Error("Invalid key") + + try { + const syftAPIPayload = { + path, + node_uid: { + value: node_id, + fqn: FQN.UID, + }, + blocking: true, + args: [], // TODO: Check if this needs to be sent + kwargs: new Map(Object.entries(payload)), + fqn: FQN.SYFT_API_CALL, + } + + const serializedMessage = new Uint8Array(serialize(syftAPIPayload)) + + const signature = sodium.crypto_sign_detached( + serializedMessage, + signing_key.privateKey + ) + + return { + serialized_message: serializedMessage, + signature, + credentials: { + verify_key: { + key: signing_key.publicKey, + fqn: FQN.VERIFY_KEY, + }, + fqn: FQN.SYFT_VERIFY_KEY, + }, + fqn: FQN.SIGNED_SYFT_API_CALL, + } + } catch (error) { + console.error(error) + throw error + } +} + +export const js_syft_call = async ({ + path, + payload, + signing_key, + node_id, +}: SyftAPICall): Promise => { + let key = signing_key + + if (typeof key === "string") { + key = Uint8Array.from(key.split(",")) + key = sodium.crypto_sign_seed_keypair(key) + } + + const signedMessage = sign_message({ + path, + payload, + signing_key: key, + node_id, + }) + + try { + const res = await ky.post(SYFT_MSG_URL, { + headers: { "content-type": "application/octet-stream" }, + body: serialize(signedMessage), + }) + + const data = await deserialize(res) + + if (!isValid(data)) throw new Error("Invalid signature") + + return deserializeSyftResponseObject(data.serialized_message) + } catch (error) { + console.error(error?.message || error) + throw error + } +} diff --git a/packages/grid/frontend/src/lib/api/users.ts b/packages/grid/frontend/src/lib/api/users.ts index d944cf9b682..2125236219e 100644 --- a/packages/grid/frontend/src/lib/api/users.ts +++ b/packages/grid/frontend/src/lib/api/users.ts @@ -1,37 +1,61 @@ -import { getUserIdFromStorage } from './keys'; -import { makeSyftUID, syftCall } from './syft-api-call'; +import { getUserIdFromStorage } from "./keys" +import { makeSyftUID, syftCall } from "./syft-api-call" +import { js_syft_call } from "./syft_api" -export async function getAllUsers(page_size: number = 0, page_index: number = 0) { +export async function getAllUsers(page_size = 0, page_index = 0) { return await syftCall({ - path: 'user.get_all', - payload: { page_size: page_size, page_index: page_index } - }); + path: "user.get_all", + payload: { page_size: page_size, page_index: page_index }, + }) } -export async function getUser(uid: string) { - return await syftCall({ path: 'user.view', payload: { uid: makeSyftUID(uid) } }); +export async function getUser( + uid: string, + signing_key: string | Uint8Array, + node_id: string +) { + try { + const user = await js_syft_call({ + path: "user.view", + payload: { uid: { value: uid, fqn: "syft.types.uid.UID" } }, + node_id, + signing_key, + }) + + console.log({ user }) + return { + uid: user.id.value, + email: user.email, + role: user.role.value, + website: user.website, + institution: user.institution, + } + } catch (error) { + console.error(error) + return undefined + } } export async function getSelf() { return await syftCall({ - path: 'user.view', - payload: { uid: makeSyftUID(getUserIdFromStorage()) } - }); + path: "user.view", + payload: { uid: makeSyftUID(getUserIdFromStorage()) }, + }) } export async function searchUsersByName( name: string, - page_size: number = 0, - page_index: number = 0 + page_size = 0, + page_index = 0 ) { return await syftCall({ - path: 'user.search', + path: "user.search", payload: { - user_search: { name: name, fqn: 'syft.service.user.user.UserSearch' }, + user_search: { name: name, fqn: "syft.service.user.user.UserSearch" }, page_size: page_size, - page_index: page_index - } - }); + page_index: page_index, + }, + }) } export async function updateCurrentUser( @@ -47,14 +71,14 @@ export async function updateCurrentUser( password: password, institution: institution, website: website, - fqn: 'syft.service.user.user.UserUpdate' - }; + fqn: "syft.service.user.user.UserUpdate", + } return await syftCall({ - path: 'user.update', + path: "user.update", payload: { uid: makeSyftUID(getUserIdFromStorage()), - user_update: userUpdate - } - }); + user_update: userUpdate, + }, + }) } diff --git a/packages/grid/frontend/src/lib/components/Input.svelte b/packages/grid/frontend/src/lib/components/Input.svelte index 43c93ee97c1..68d5652e6e9 100644 --- a/packages/grid/frontend/src/lib/components/Input.svelte +++ b/packages/grid/frontend/src/lib/components/Input.svelte @@ -1,13 +1,13 @@
diff --git a/packages/grid/frontend/src/lib/constants.ts b/packages/grid/frontend/src/lib/constants.ts index 68cd347a798..5ea732a5286 100644 --- a/packages/grid/frontend/src/lib/constants.ts +++ b/packages/grid/frontend/src/lib/constants.ts @@ -1,8 +1,13 @@ -export const API_BASE_URL = import.meta.env.VITE_PUBLIC_API_BASE_URL || '/api/v2'; +export const API_BASE_URL = "http://cranky_isbell-proxy-1/api/v2" export const syftRoles = { - 1: 'Guest', - 2: 'Data Scientist', - 32: 'Data Owner', - 128: 'Admin' -}; + 1: "Guest", + 2: "Data Scientist", + 32: "Data Owner", + 128: "Admin", +} + +export const COOKIES = { + UID: "_user_id", + SIGNING_KEY: "_signing_key", +} diff --git a/packages/grid/frontend/src/lib/helpers.ts b/packages/grid/frontend/src/lib/helpers.ts deleted file mode 100644 index b5cccd244ae..00000000000 --- a/packages/grid/frontend/src/lib/helpers.ts +++ /dev/null @@ -1,15 +0,0 @@ -export function parseActiveRoute(route: string): string { - if (route === '/') { - return route; - } - - return route.slice(1); -} - -export function parseBadgeForNav(badge: string): string { - if (badge.length <= 9) { - return badge; - } - - return badge.slice(0, 9).concat('...'); -} diff --git a/packages/grid/frontend/src/lib/stores/nav.ts b/packages/grid/frontend/src/lib/stores/nav.ts deleted file mode 100644 index 1bdd9f147c5..00000000000 --- a/packages/grid/frontend/src/lib/stores/nav.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { writable } from 'svelte/store'; - -export const url = writable(''); diff --git a/packages/grid/frontend/src/lib/utils.ts b/packages/grid/frontend/src/lib/utils.ts index 6f9a6e18432..77ac6feb253 100644 --- a/packages/grid/frontend/src/lib/utils.ts +++ b/packages/grid/frontend/src/lib/utils.ts @@ -1,50 +1,46 @@ -import { ServiceRoles } from '../types/domain/users'; - -export function prettyName(name) { - let nameList = name.split('_'); - for (var i = 0; i < nameList.length; i++) { - nameList[i] = nameList[i].charAt(0).toUpperCase() + nameList[i].slice(1); - } - return nameList.join(' '); -} +import { ServiceRoles } from "../types/domain/users" export function shortName(name) { - let nameList = name.split(' '); - let letters = ''; - nameList[0].charAt(0).toUpperCase(); + const nameList = name.split(" ") + let letters = "" + nameList[0].charAt(0).toUpperCase() if (nameList.length < 2) { - letters += nameList[0][0]; + letters += nameList[0][0] } else { - nameList[1].charAt(0).toUpperCase(); - letters += nameList[0][0]; - letters += nameList[1][0]; + nameList[1].charAt(0).toUpperCase() + letters += nameList[0][0] + letters += nameList[1][0] } - return letters; -} - -export function getPath() { - return window.location.pathname; + return letters } export function getInitials(name: string) { return name ? name - .split(' ') + .split(" ") .map((n, index, arr) => { - if (index === 0 || index === arr.length - 1) return n[0]; + if (index === 0 || index === arr.length - 1) return n[0] }) .filter((n) => n) - .join('') - : ''; + .join("") + : "" } export function logout() { - window.localStorage.removeItem('id'); - window.localStorage.removeItem('nodeId'); - window.localStorage.removeItem('key'); + window.localStorage.removeItem("id") + window.localStorage.removeItem("nodeId") + window.localStorage.removeItem("key") } export function getUserRole(value: ServiceRoles) { - return ServiceRoles[value]; + return ServiceRoles[value] +} + +export const default_cookie_config = { + path: "/", + httpOnly: true, + sameSite: "strict", + secure: import.meta.env.NODE_ENV === "production", + maxAge: 60 * 60 * 24 * 30, // 30 days } diff --git a/packages/grid/frontend/src/routes/(auth)/login/+page.server.js b/packages/grid/frontend/src/routes/(auth)/login/+page.server.js new file mode 100644 index 00000000000..254ce4d4708 --- /dev/null +++ b/packages/grid/frontend/src/routes/(auth)/login/+page.server.js @@ -0,0 +1,40 @@ +import { fail, redirect } from "@sveltejs/kit" +import { login } from "$lib/api/auth" +import { default_cookie_config } from "$lib/utils" +import { COOKIES } from "$lib/constants" + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ cookies, request }) => { + const data = await request.formData() + + const email = data.get("email") + const password = data.get("password") + + if ( + !email || + !password || + typeof email !== "string" || + typeof password !== "string" + ) { + return fail(400, { invalid: true }) + } + + try { + const { signing_key, uid } = await login({ email, password }) + cookies.set(COOKIES.UID, uid, default_cookie_config) + cookies.set(COOKIES.SIGNING_KEY, signing_key, default_cookie_config) + } catch (error) { + return fail(400, { invalid: true }) + } + + throw redirect(302, "/datasets") + }, +} + +// export async function getUser(uid: string) { +// return await syftCall({ +// path: "user.view", +// payload: { uid: makeSyftUID(uid) }, +// }) +// } diff --git a/packages/grid/frontend/src/routes/(auth)/login/+page.svelte b/packages/grid/frontend/src/routes/(auth)/login/+page.svelte index 87c64f1ac78..3cee9d9e122 100644 --- a/packages/grid/frontend/src/routes/(auth)/login/+page.svelte +++ b/packages/grid/frontend/src/routes/(auth)/login/+page.svelte @@ -1,37 +1,30 @@ -
+
-
+
+ {#if form?.invalid} +

Invalid credentials!

+ {/if}

- {#if status === 'pending'} + {#if status === "pending"} Checking connection {:else} Domain {status} @@ -57,9 +53,9 @@ label="Email" type="email" id="email" + name="email" placeholder="info@openmined.org" bind:error={loginError} - bind:value={email} required data-testid="email" /> @@ -67,13 +63,15 @@ label="Password" type="password" id="password" + name="password" placeholder="******" - bind:value={password} bind:error={loginError} required data-testid="password" /> -

+

Don't have an account yet? Apply for an account here - .

- +
diff --git a/packages/grid/frontend/src/routes/+layout.server.ts b/packages/grid/frontend/src/routes/+layout.server.ts new file mode 100644 index 00000000000..8800e7623b8 --- /dev/null +++ b/packages/grid/frontend/src/routes/+layout.server.ts @@ -0,0 +1,27 @@ +import { getMetadata } from "$lib/api/metadata" +import { getUser } from "$lib/api/users" +import { COOKIES } from "$lib/constants" + +/** @type {import('./$types').LayoutServerLoad} */ +export async function load({ cookies }) { + const user_id = cookies.get(COOKIES.UID) + const signing_key = cookies.get(COOKIES.SIGNING_KEY) + + let user + let metadata + + try { + metadata = await getMetadata() + + if (user_id) { + user = await getUser(user_id, signing_key, metadata.node_id) + } + } catch (error) { + console.log(error) + } finally { + return { + metadata, + user, + } + } +} diff --git a/packages/grid/frontend/src/routes/+page.js b/packages/grid/frontend/src/routes/+page.js deleted file mode 100644 index 5dd54a88984..00000000000 --- a/packages/grid/frontend/src/routes/+page.js +++ /dev/null @@ -1,5 +0,0 @@ -export const load = ({ params }) => { - return { - slug: params.slug - }; -}; diff --git a/packages/grid/frontend/src/routes/+page.svelte b/packages/grid/frontend/src/routes/+page.svelte index 3f4f1d21549..7a4f56b2653 100644 --- a/packages/grid/frontend/src/routes/+page.svelte +++ b/packages/grid/frontend/src/routes/+page.svelte @@ -1,13 +1,17 @@ diff --git a/packages/grid/frontend/src/routes/+page.ts b/packages/grid/frontend/src/routes/+page.ts new file mode 100644 index 00000000000..34e04d58a30 --- /dev/null +++ b/packages/grid/frontend/src/routes/+page.ts @@ -0,0 +1,6 @@ +/** @type {import('./$types').PageServerLoad} */ +export const load = async ({ params }) => { + return { + slug: params.slug, + } +} From f44eb405cd13606e3dcf94334921be32388be63f Mon Sep 17 00:00:00 2001 From: Thiago Costa Porto Date: Wed, 18 Oct 2023 03:05:17 +0200 Subject: [PATCH 02/25] wip: fix: frontend uses cookies and actions --- packages/grid/frontend/src/hooks.client.ts | 22 --- .../grid/frontend/src/lib/api/metadata.ts | 4 +- .../grid/frontend/src/lib/api/syft_api.ts | 139 +++++++----------- packages/grid/frontend/src/lib/api/users.ts | 20 +-- .../authentication/DomainMetadataPanel.svelte | 36 +++-- .../src/routes/(auth)/login/+page.server.js | 7 - .../src/routes/(auth)/login/+page.svelte | 35 ++--- .../src/routes/(auth)/signup/+page.server.js | 46 ++++++ .../src/routes/(auth)/signup/+page.svelte | 61 +++++--- .../frontend/src/types/domain/metadata.ts | 22 +-- 10 files changed, 200 insertions(+), 192 deletions(-) delete mode 100644 packages/grid/frontend/src/hooks.client.ts create mode 100644 packages/grid/frontend/src/routes/(auth)/signup/+page.server.js diff --git a/packages/grid/frontend/src/hooks.client.ts b/packages/grid/frontend/src/hooks.client.ts deleted file mode 100644 index 053cb9587d2..00000000000 --- a/packages/grid/frontend/src/hooks.client.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { metadata, user, isLoading } from '$lib/store'; -import { getMetadata } from '$lib/api/metadata'; -import { getUserIdFromStorage } from '$lib/api/keys'; -import { getSelf } from '$lib/api/users'; - -async function domainStartup() { - try { - isLoading.set(true); - const updatedMetadata = await getMetadata(); - metadata.set(updatedMetadata); - if (getUserIdFromStorage()) { - const updatedUser = await getSelf(); - user.set(updatedUser); - } - } catch (error) { - console.log(error); - } finally { - isLoading.set(false); - } -} - -domainStartup(); diff --git a/packages/grid/frontend/src/lib/api/metadata.ts b/packages/grid/frontend/src/lib/api/metadata.ts index 360a5f50bbd..55e7b137564 100644 --- a/packages/grid/frontend/src/lib/api/metadata.ts +++ b/packages/grid/frontend/src/lib/api/metadata.ts @@ -1,5 +1,5 @@ import ky from "ky" -import { syftCall } from "./syft-api-call" +import { jsSyftCall } from "./syft_api" import { API_BASE_URL } from "../constants" import { deserialize } from "./serde" @@ -36,5 +36,5 @@ export async function updateMetadata(newMetadata) { fqn: "syft.service.settings.settings.NodeSettingsUpdate", }, } - return await syftCall({ path: "settings.update", payload }) + return await jsSyftCall({ path: "settings.update", payload }) } diff --git a/packages/grid/frontend/src/lib/api/syft_api.ts b/packages/grid/frontend/src/lib/api/syft_api.ts index 1f98dace64f..6bec490e609 100644 --- a/packages/grid/frontend/src/lib/api/syft_api.ts +++ b/packages/grid/frontend/src/lib/api/syft_api.ts @@ -13,21 +13,6 @@ const FQN = { SIGNED_SYFT_API_CALL: "syft.client.api.SignedSyftAPICall", } -type SyftCredentials = { - verify_key: { - key: Uint8Array - fqn: string - } - fqn: string -} - -interface SignedSyftCall { - serialized_message: Uint8Array - signature: Uint8Array - credentials: SyftCredentials - fqn: string -} - interface SyftAPICall { path: string payload: Record @@ -35,83 +20,45 @@ interface SyftAPICall { node_id: string } -export const isValid = (syftCall: SignedSyftCall): boolean => { - const { - signature, - serialized_message, - credentials: { - verify_key: { key }, - }, - } = syftCall - return sodium.crypto_sign_verify_detached(signature, serialized_message, key) -} +const getKeyPair = (signing_key: string | Uint8Array) => + typeof signing_key === "string" + ? sodium.crypto_sign_seed_keypair(Uint8Array.from(signing_key.split(","))) + : signing_key -export const sign_message = ({ +const getSignedMessage = ({ path, payload, - signing_key, node_id, -}: SyftAPICall): SignedSyftCall => { - if (typeof signing_key === "string") throw new Error("Invalid key") - - try { - const syftAPIPayload = { - path, - node_uid: { - value: node_id, - fqn: FQN.UID, - }, - blocking: true, - args: [], // TODO: Check if this needs to be sent - kwargs: new Map(Object.entries(payload)), - fqn: FQN.SYFT_API_CALL, - } - - const serializedMessage = new Uint8Array(serialize(syftAPIPayload)) - - const signature = sodium.crypto_sign_detached( - serializedMessage, - signing_key.privateKey - ) - - return { - serialized_message: serializedMessage, - signature, - credentials: { - verify_key: { - key: signing_key.publicKey, - fqn: FQN.VERIFY_KEY, - }, - fqn: FQN.SYFT_VERIFY_KEY, - }, - fqn: FQN.SIGNED_SYFT_API_CALL, - } - } catch (error) { - console.error(error) - throw error + signing_key, +}: SyftAPICall) => { + console.log(typeof signing_key) + const syftAPIPayload = { + path, + node_uid: { value: node_id, fqn: FQN.UID }, + args: [], + kwargs: new Map(Object.entries(payload)), + fqn: FQN.SYFT_API_CALL, + blocking: true, } -} -export const js_syft_call = async ({ - path, - payload, - signing_key, - node_id, -}: SyftAPICall): Promise => { - let key = signing_key + const serializedMessage = new Uint8Array(serialize(syftAPIPayload)) + const signature = sodium.crypto_sign_detached( + serializedMessage, + signing_key.privateKey + ) - if (typeof key === "string") { - key = Uint8Array.from(key.split(",")) - key = sodium.crypto_sign_seed_keypair(key) + return { + serialized_message: serializedMessage, + signature, + credentials: { + verify_key: { key: signing_key.publicKey, fqn: FQN.VERIFY_KEY }, + fqn: FQN.SYFT_VERIFY_KEY, + }, + fqn: FQN.SIGNED_SYFT_API_CALL, } +} - const signedMessage = sign_message({ - path, - payload, - signing_key: key, - node_id, - }) - +const send = async (signedMessage: any): Promise => { try { const res = await ky.post(SYFT_MSG_URL, { headers: { "content-type": "application/octet-stream" }, @@ -120,7 +67,15 @@ export const js_syft_call = async ({ const data = await deserialize(res) - if (!isValid(data)) throw new Error("Invalid signature") + if ( + !sodium.crypto_sign_verify_detached( + signedMessage.signature, + signedMessage.serialized_message, + signedMessage.credentials.verify_key.key + ) + ) { + throw new Error("Invalid signature") + } return deserializeSyftResponseObject(data.serialized_message) } catch (error) { @@ -128,3 +83,19 @@ export const js_syft_call = async ({ throw error } } + +export const jsSyftCall = async ({ + path, + payload, + signing_key, + node_id, +}: SyftAPICall): Promise => { + const key = getKeyPair(signing_key) + const signedMessage = getSignedMessage({ + path, + payload, + node_id, + signing_key: key, + }) + return await send(signedMessage) +} diff --git a/packages/grid/frontend/src/lib/api/users.ts b/packages/grid/frontend/src/lib/api/users.ts index 2125236219e..c867c928927 100644 --- a/packages/grid/frontend/src/lib/api/users.ts +++ b/packages/grid/frontend/src/lib/api/users.ts @@ -1,9 +1,7 @@ -import { getUserIdFromStorage } from "./keys" -import { makeSyftUID, syftCall } from "./syft-api-call" -import { js_syft_call } from "./syft_api" +import { jsSyftCall } from "./syft_api" export async function getAllUsers(page_size = 0, page_index = 0) { - return await syftCall({ + return await jsSyftCall({ path: "user.get_all", payload: { page_size: page_size, page_index: page_index }, }) @@ -15,14 +13,13 @@ export async function getUser( node_id: string ) { try { - const user = await js_syft_call({ + const user = await jsSyftCall({ path: "user.view", payload: { uid: { value: uid, fqn: "syft.types.uid.UID" } }, node_id, signing_key, }) - console.log({ user }) return { uid: user.id.value, email: user.email, @@ -36,19 +33,12 @@ export async function getUser( } } -export async function getSelf() { - return await syftCall({ - path: "user.view", - payload: { uid: makeSyftUID(getUserIdFromStorage()) }, - }) -} - export async function searchUsersByName( name: string, page_size = 0, page_index = 0 ) { - return await syftCall({ + return await jsSyftCall({ path: "user.search", payload: { user_search: { name: name, fqn: "syft.service.user.user.UserSearch" }, @@ -74,7 +64,7 @@ export async function updateCurrentUser( fqn: "syft.service.user.user.UserUpdate", } - return await syftCall({ + return await jsSyftCall({ path: "user.update", payload: { uid: makeSyftUID(getUserIdFromStorage()), diff --git a/packages/grid/frontend/src/lib/components/authentication/DomainMetadataPanel.svelte b/packages/grid/frontend/src/lib/components/authentication/DomainMetadataPanel.svelte index 187678e3c2c..8ee4bd9ef80 100644 --- a/packages/grid/frontend/src/lib/components/authentication/DomainMetadataPanel.svelte +++ b/packages/grid/frontend/src/lib/components/authentication/DomainMetadataPanel.svelte @@ -1,23 +1,23 @@ -
+
{#if metadata} -
@@ -37,12 +37,22 @@

Id#:

- {metadata.id?.value} + {metadata.node_id}
-

Deployed on:

+

+ Deployed on: +

{metadata.deployed_on}

+
+

Side:

+

{metadata.node_side}

+
+
+

Type:

+

{metadata.node_type}

+
{/if}
diff --git a/packages/grid/frontend/src/routes/(auth)/login/+page.server.js b/packages/grid/frontend/src/routes/(auth)/login/+page.server.js index 254ce4d4708..5cb0b04611e 100644 --- a/packages/grid/frontend/src/routes/(auth)/login/+page.server.js +++ b/packages/grid/frontend/src/routes/(auth)/login/+page.server.js @@ -31,10 +31,3 @@ export const actions = { throw redirect(302, "/datasets") }, } - -// export async function getUser(uid: string) { -// return await syftCall({ -// path: "user.view", -// payload: { uid: makeSyftUID(uid) }, -// }) -// } diff --git a/packages/grid/frontend/src/routes/(auth)/login/+page.svelte b/packages/grid/frontend/src/routes/(auth)/login/+page.svelte index 3cee9d9e122..853a6cb4423 100644 --- a/packages/grid/frontend/src/routes/(auth)/login/+page.svelte +++ b/packages/grid/frontend/src/routes/(auth)/login/+page.svelte @@ -1,6 +1,5 @@
- +
@@ -55,7 +55,8 @@ id="email" name="email" placeholder="info@openmined.org" - bind:error={loginError} + autocomplete="username" + error={form?.invalid} required data-testid="email" /> @@ -65,21 +66,21 @@ id="password" name="password" placeholder="******" - bind:error={loginError} + error={form?.invalid} + autocomplete="current-password" required data-testid="password" /> - -

- Don't have an account yet? Apply for an account - here - -

+ {#if metadata.signup_enabled} +

+ Don't have an account yet? Apply for an account + here + +

+ {/if}
diff --git a/packages/grid/frontend/src/types/domain/metadata.ts b/packages/grid/frontend/src/types/domain/metadata.ts index 155923ddfaf..c232064cba1 100644 --- a/packages/grid/frontend/src/types/domain/metadata.ts +++ b/packages/grid/frontend/src/types/domain/metadata.ts @@ -1,10 +1,14 @@ -import type { SyftUID } from './syft'; - export type DomainMetadata = { - name: string; - description: string; - organization: string; - id: SyftUID; - deployed_on: string; - tags: string[]; -}; + admin_email: string + name: string + description: string + organization: string + node_id: string + deployed_on: string + node_side: string + node_type: string + signup_enabled: boolean + syft_version: string + highest_version: string + lowest_version: string +} From 79c4c20f95e172efd9a3fbe5b98096383eaf549a Mon Sep 17 00:00:00 2001 From: Thiago Costa Porto Date: Fri, 20 Oct 2023 01:26:00 +0200 Subject: [PATCH 03/25] wip: fix: more data handling --- packages/grid/frontend/package.json | 5 +++-- packages/grid/frontend/pnpm-lock.yaml | 11 +++++++++-- packages/grid/frontend/src/lib/api/syft_api.ts | 3 +-- .../src/routes/(auth)/signup/+page.server.js | 2 +- packages/grid/frontend/svelte.config.js | 14 ++++++++------ 5 files changed, 22 insertions(+), 13 deletions(-) diff --git a/packages/grid/frontend/package.json b/packages/grid/frontend/package.json index fb1c09828c9..446f38d1d77 100644 --- a/packages/grid/frontend/package.json +++ b/packages/grid/frontend/package.json @@ -16,6 +16,7 @@ "@playwright/test": "^1.36.1", "@sveltejs/adapter-node": "^1.3.1", "@sveltejs/kit": "1.25.2", + "@types/libsodium-wrappers": "0.7.11", "@types/prismjs": "^1.26.0", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", @@ -41,8 +42,8 @@ "capnp-ts": "^0.7.0", "just-debounce-it": "^3.2.0", "ky": "^0.33.3", - "libsodium": "^0.7.11", - "libsodium-wrappers": "^0.7.11", + "libsodium": "0.7.11", + "libsodium-wrappers": "0.7.11", "prismjs": "^1.29.0", "semver": "^7.5.4", "uuid": "^9.0.0" diff --git a/packages/grid/frontend/pnpm-lock.yaml b/packages/grid/frontend/pnpm-lock.yaml index 100fe531740..3a08d9a81b6 100644 --- a/packages/grid/frontend/pnpm-lock.yaml +++ b/packages/grid/frontend/pnpm-lock.yaml @@ -11,10 +11,10 @@ dependencies: specifier: ^0.33.3 version: 0.33.3 libsodium: - specifier: ^0.7.11 + specifier: 0.7.11 version: 0.7.11 libsodium-wrappers: - specifier: ^0.7.11 + specifier: 0.7.11 version: 0.7.11 prismjs: specifier: ^1.29.0 @@ -36,6 +36,9 @@ devDependencies: '@sveltejs/kit': specifier: 1.25.2 version: 1.25.2(svelte@3.59.2)(vite@4.4.4) + '@types/libsodium-wrappers': + specifier: 0.7.11 + version: 0.7.11 '@types/prismjs': specifier: ^1.26.0 version: 1.26.0 @@ -600,6 +603,10 @@ packages: resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} dev: true + /@types/libsodium-wrappers@0.7.11: + resolution: {integrity: sha512-8avZYJny690B6lFZQEDz4PEdCgC8D8qmGE/mhJBzCwzZvsqne61tCRbtJOhxsjYMItEZd3k4SoR4xKKLnI9Ztg==} + dev: true + /@types/node@20.8.2: resolution: {integrity: sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==} dev: true diff --git a/packages/grid/frontend/src/lib/api/syft_api.ts b/packages/grid/frontend/src/lib/api/syft_api.ts index 6bec490e609..f7ddec743f1 100644 --- a/packages/grid/frontend/src/lib/api/syft_api.ts +++ b/packages/grid/frontend/src/lib/api/syft_api.ts @@ -30,8 +30,7 @@ const getSignedMessage = ({ payload, node_id, signing_key, -}: SyftAPICall) => { - console.log(typeof signing_key) +}: Omit & { signing_key: Uint8Array }) => { const syftAPIPayload = { path, node_uid: { value: node_id, fqn: FQN.UID }, diff --git a/packages/grid/frontend/src/routes/(auth)/signup/+page.server.js b/packages/grid/frontend/src/routes/(auth)/signup/+page.server.js index 4cd0e5ef9b3..6d0f22890fb 100644 --- a/packages/grid/frontend/src/routes/(auth)/signup/+page.server.js +++ b/packages/grid/frontend/src/routes/(auth)/signup/+page.server.js @@ -1,7 +1,7 @@ import { fail, redirect } from "@sveltejs/kit" import { login } from "$lib/api/auth" -import { default_cookie_config } from "$lib/utils" import { COOKIES } from "$lib/constants" +import { default_cookie_config } from "$lib/utils" export const load = async ({ parent }) => { const { metadata, user } = await parent() diff --git a/packages/grid/frontend/svelte.config.js b/packages/grid/frontend/svelte.config.js index 6e9d40cdb21..2273bfdac53 100644 --- a/packages/grid/frontend/svelte.config.js +++ b/packages/grid/frontend/svelte.config.js @@ -1,11 +1,13 @@ -import preprocess from 'svelte-preprocess'; -import adapter from '@sveltejs/adapter-node'; -import { vitePreprocess } from '@sveltejs/kit/vite'; +import adapter from "@sveltejs/adapter-node" +import { vitePreprocess } from "@sveltejs/kit/vite" /** @type {import('@sveltejs/kit').Config} */ const config = { preprocess: [vitePreprocess()], - kit: { adapter: adapter() } -}; + kit: { adapter: adapter() }, + vitePlugin: { + inspector: true, + }, +} -export default config; +export default config From 204fd26e1c9b851f18b0fa13188a62e22dc7e070 Mon Sep 17 00:00:00 2001 From: Thiago Costa Porto Date: Tue, 24 Oct 2023 01:13:30 +0200 Subject: [PATCH 04/25] fix: user routes --- packages/grid/frontend/package.json | 2 + packages/grid/frontend/pnpm-lock.yaml | 63 +++++++++++++++++-- .../src/routes/_syft_api/users/+server.ts | 25 ++++++++ .../routes/_syft_api/users/[uid]/+server.ts | 33 ++++++++++ .../routes/_syft_api/users/search/+server.ts | 33 ++++++++++ packages/grid/frontend/tsconfig.json | 3 +- .../src/syft/service/user/user_service.py | 5 +- 7 files changed, 158 insertions(+), 6 deletions(-) create mode 100644 packages/grid/frontend/src/routes/_syft_api/users/+server.ts create mode 100644 packages/grid/frontend/src/routes/_syft_api/users/[uid]/+server.ts create mode 100644 packages/grid/frontend/src/routes/_syft_api/users/search/+server.ts diff --git a/packages/grid/frontend/package.json b/packages/grid/frontend/package.json index 446f38d1d77..51f9843adc2 100644 --- a/packages/grid/frontend/package.json +++ b/packages/grid/frontend/package.json @@ -16,6 +16,7 @@ "@playwright/test": "^1.36.1", "@sveltejs/adapter-node": "^1.3.1", "@sveltejs/kit": "1.25.2", + "@types/cookie": "^0.5.3", "@types/libsodium-wrappers": "0.7.11", "@types/prismjs": "^1.26.0", "@typescript-eslint/eslint-plugin": "^5.62.0", @@ -34,6 +35,7 @@ "svelte-search": "^2.0.1", "tailwindcss": "3.3.1", "typescript": "^4.9.5", + "typescript-svelte-plugin": "^0.3.34", "vite": "^4.4.4", "vitest": "^0.33.0" }, diff --git a/packages/grid/frontend/pnpm-lock.yaml b/packages/grid/frontend/pnpm-lock.yaml index 3a08d9a81b6..1449350ac69 100644 --- a/packages/grid/frontend/pnpm-lock.yaml +++ b/packages/grid/frontend/pnpm-lock.yaml @@ -1,5 +1,9 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + dependencies: capnp-ts: specifier: ^0.7.0 @@ -36,6 +40,9 @@ devDependencies: '@sveltejs/kit': specifier: 1.25.2 version: 1.25.2(svelte@3.59.2)(vite@4.4.4) + '@types/cookie': + specifier: ^0.5.3 + version: 0.5.3 '@types/libsodium-wrappers': specifier: 0.7.11 version: 0.7.11 @@ -90,6 +97,9 @@ devDependencies: typescript: specifier: ^4.9.5 version: 4.9.5 + typescript-svelte-plugin: + specifier: ^0.3.34 + version: 0.3.34(svelte@3.59.2)(typescript@4.9.5) vite: specifier: ^4.4.4 version: 4.4.4(@types/node@20.8.2) @@ -527,7 +537,7 @@ packages: vite: ^4.0.0 dependencies: '@sveltejs/vite-plugin-svelte': 2.4.6(svelte@3.59.2)(vite@4.4.4) - '@types/cookie': 0.5.2 + '@types/cookie': 0.5.3 cookie: 0.5.0 devalue: 4.3.2 esm-env: 1.0.0 @@ -591,8 +601,8 @@ packages: resolution: {integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==} dev: true - /@types/cookie@0.5.2: - resolution: {integrity: sha512-DBpRoJGKJZn7RY92dPrgoMew8xCWc2P71beqsjyhEI/Ds9mOyVmBwtekyfhpwFIVt1WrxTonFifiOZ62V8CnNA==} + /@types/cookie@0.5.3: + resolution: {integrity: sha512-SLg07AS9z1Ab2LU+QxzU8RCmzsja80ywjf/t5oqw+4NSH20gIGlhLOrBDm1L3PBWzPa4+wkgFQVZAjE6Ioj2ug==} dev: true /@types/estree@1.0.2: @@ -1066,6 +1076,10 @@ packages: dependencies: ms: 2.1.2 + /dedent-js@1.0.1: + resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} + dev: true + /deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} @@ -1675,6 +1689,12 @@ packages: get-func-name: 2.0.2 dev: true + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.6.2 + dev: true + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -1793,6 +1813,13 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.6.2 + dev: true + /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} dev: true @@ -1863,6 +1890,13 @@ packages: callsites: 3.1.0 dev: true + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + dev: true + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2322,6 +2356,18 @@ packages: resolution: {integrity: sha512-JBoObru/BUk86EmuRtYBa99xnH1RB8jqDuYYJHH0PUzN9BINo1+1GZataC/m5368BG3kZRb3wZI5ztjoi1WWXg==} dev: true + /svelte2tsx@0.6.23(svelte@3.59.2)(typescript@4.9.5): + resolution: {integrity: sha512-3bwd1PuWUA3oEXy8+85zrLDnmJOsVpShpKVAehGWeYsz/66zMihTpRpUN97VVAKTZbO5tP4wnchHUXYs0zOwdw==} + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 + typescript: ^4.9.4 || ^5.0.0 + dependencies: + dedent-js: 1.0.1 + pascal-case: 3.1.2 + svelte: 3.59.2 + typescript: 4.9.5 + dev: true + /svelte@3.59.2: resolution: {integrity: sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==} engines: {node: '>= 8'} @@ -2422,7 +2468,6 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false /tsutils@3.21.0(typescript@4.9.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} @@ -2451,6 +2496,16 @@ packages: engines: {node: '>=10'} dev: true + /typescript-svelte-plugin@0.3.34(svelte@3.59.2)(typescript@4.9.5): + resolution: {integrity: sha512-LOex9QLlct+oHww0HVmABvfuOSUqlGrDU6COtNez61bycpSdu2ZnrYsP0N05WHqbrUPZG2u2R/fpbW77nd7x2Q==} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + svelte2tsx: 0.6.23(svelte@3.59.2)(typescript@4.9.5) + transitivePeerDependencies: + - svelte + - typescript + dev: true + /typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} diff --git a/packages/grid/frontend/src/routes/_syft_api/users/+server.ts b/packages/grid/frontend/src/routes/_syft_api/users/+server.ts new file mode 100644 index 00000000000..b6cf01bc66c --- /dev/null +++ b/packages/grid/frontend/src/routes/_syft_api/users/+server.ts @@ -0,0 +1,25 @@ +import { jsSyftCall } from "$lib/api/syft_api" +import { unload_cookies } from "$lib/utils" +import { error, json } from "@sveltejs/kit" +import type { RequestHandler } from "./$types" + +export const GET: RequestHandler = async ({ cookies, url }) => { + try { + const page_size = parseInt(url.searchParams.get("page_size") || "10") + const page_index = parseInt(url.searchParams.get("page_index") || "0") + + const { signing_key, node_id } = unload_cookies(cookies) + + const users = await jsSyftCall({ + path: "user.get_all", + payload: { page_size, page_index }, + node_id, + signing_key, + }) + + return json({ list: users.users, total: users.total }) + } catch (err) { + console.log(err) + throw error(400, "invalid user") + } +} diff --git a/packages/grid/frontend/src/routes/_syft_api/users/[uid]/+server.ts b/packages/grid/frontend/src/routes/_syft_api/users/[uid]/+server.ts new file mode 100644 index 00000000000..3cb6dd3bee6 --- /dev/null +++ b/packages/grid/frontend/src/routes/_syft_api/users/[uid]/+server.ts @@ -0,0 +1,33 @@ +import { jsSyftCall } from "$lib/api/syft_api" +import { unload_cookies } from "$lib/utils" +import { error, json } from "@sveltejs/kit" +import type { RequestHandler } from "./$types" + +export const GET: RequestHandler = async ({ cookies, params }) => { + try { + const requested_uid = params.uid + + const { signing_key, node_id } = unload_cookies(cookies) + + const user = await jsSyftCall({ + path: "user.view", + payload: { uid: { value: requested_uid, fqn: "syft.types.uid.UID" } }, + node_id, + signing_key, + }) + + const user_view = { + name: user?.name, + uid: user.id.value, + email: user.email, + role: user.role.value, + website: user.website, + institution: user.institution, + } + + return json(user_view) + } catch (err) { + console.log(err) + throw error(400, "invalid user") + } +} diff --git a/packages/grid/frontend/src/routes/_syft_api/users/search/+server.ts b/packages/grid/frontend/src/routes/_syft_api/users/search/+server.ts new file mode 100644 index 00000000000..19678b3c292 --- /dev/null +++ b/packages/grid/frontend/src/routes/_syft_api/users/search/+server.ts @@ -0,0 +1,33 @@ +import { jsSyftCall } from "$lib/api/syft_api" +import { unload_cookies } from "$lib/utils" +import { error, json } from "@sveltejs/kit" +import type { RequestHandler } from "./$types" + +export const GET: RequestHandler = async ({ cookies, url }) => { + try { + const page_size = parseInt(url.searchParams.get("page_size") || "10") + const page_index = parseInt(url.searchParams.get("page_index") || "0") + const name = url.searchParams.get("name") + + const { signing_key, node_id } = unload_cookies(cookies) + + const users = await jsSyftCall({ + path: "user.search", + payload: { + user_search: { + name, + fqn: "syft.service.user.user.UserSearch", + }, + page_index, + page_size, + }, + node_id, + signing_key, + }) + + return json({ list: users.users, total: users.total }) + } catch (err) { + console.log(err) + throw error(400, "invalid user") + } +} diff --git a/packages/grid/frontend/tsconfig.json b/packages/grid/frontend/tsconfig.json index 526b63f39d1..0293cea0baa 100644 --- a/packages/grid/frontend/tsconfig.json +++ b/packages/grid/frontend/tsconfig.json @@ -8,6 +8,7 @@ "skipLibCheck": true, "sourceMap": true, "strict": true, - "types": ["vitest/globals"] + "types": ["vitest/globals"], + "plugins": [{ "name": "typescript-svelte-plugin" }] } } diff --git a/packages/syft/src/syft/service/user/user_service.py b/packages/syft/src/syft/service/user/user_service.py index aa0dda1b451..9c9dc0de5a5 100644 --- a/packages/syft/src/syft/service/user/user_service.py +++ b/packages/syft/src/syft/service/user/user_service.py @@ -178,8 +178,11 @@ def search( results = [ results[i : i + page_size] for i in range(0, len(results), page_size) ] + # Return the proper slice using page_index - results = results[page_index] + if results: + results = results[page_index] + results = UserViewPage(users=results, total=total) return results From 8c7b8a2e12347ccc6d50650a230feb6b18ba84ec Mon Sep 17 00:00:00 2001 From: Thiago Costa Porto Date: Tue, 24 Oct 2023 01:13:58 +0200 Subject: [PATCH 05/25] fix: auth login --- .../{+page.server.js => +page.server.ts} | 19 +++++++++++++++---- .../src/routes/(auth)/login/+page.svelte | 17 ++++++++--------- 2 files changed, 23 insertions(+), 13 deletions(-) rename packages/grid/frontend/src/routes/(auth)/login/{+page.server.js => +page.server.ts} (66%) diff --git a/packages/grid/frontend/src/routes/(auth)/login/+page.server.js b/packages/grid/frontend/src/routes/(auth)/login/+page.server.ts similarity index 66% rename from packages/grid/frontend/src/routes/(auth)/login/+page.server.js rename to packages/grid/frontend/src/routes/(auth)/login/+page.server.ts index 5cb0b04611e..2f48c8ef2ee 100644 --- a/packages/grid/frontend/src/routes/(auth)/login/+page.server.js +++ b/packages/grid/frontend/src/routes/(auth)/login/+page.server.ts @@ -2,14 +2,15 @@ import { fail, redirect } from "@sveltejs/kit" import { login } from "$lib/api/auth" import { default_cookie_config } from "$lib/utils" import { COOKIES } from "$lib/constants" +import type { Actions } from "./$types" -/** @type {import('./$types').Actions} */ -export const actions = { +export const actions: Actions = { default: async ({ cookies, request }) => { const data = await request.formData() const email = data.get("email") const password = data.get("password") + const node_id = data.get("node_id") if ( !email || @@ -22,8 +23,18 @@ export const actions = { try { const { signing_key, uid } = await login({ email, password }) - cookies.set(COOKIES.UID, uid, default_cookie_config) - cookies.set(COOKIES.SIGNING_KEY, signing_key, default_cookie_config) + + const cookie_user = { + uid, + node_id, + } + + cookies.set( + COOKIES.USER, + JSON.stringify(cookie_user), + default_cookie_config + ) + cookies.set(COOKIES.KEY, signing_key, default_cookie_config) } catch (error) { return fail(400, { invalid: true }) } diff --git a/packages/grid/frontend/src/routes/(auth)/login/+page.svelte b/packages/grid/frontend/src/routes/(auth)/login/+page.svelte index 853a6cb4423..1b6ddaf5b69 100644 --- a/packages/grid/frontend/src/routes/(auth)/login/+page.svelte +++ b/packages/grid/frontend/src/routes/(auth)/login/+page.svelte @@ -6,17 +6,13 @@ import Input from "$lib/components/Input.svelte" import DomainOnlineIndicator from "$lib/components/DomainOnlineIndicator.svelte" import type { DomainOnlineStatus } from "../../../types/domain/onlineIndicator" + import type { PageData, ActionData } from "./$types" - /** @type {import('./$types').PageData} */ - export let data - - /** @type {import('./$types').ActionData} */ - export let form + export let data: PageData + export let form: ActionData const { metadata } = data - console.log({ data }) - let status: DomainOnlineStatus = "online" @@ -37,7 +33,9 @@
{#if form?.invalid} -

Invalid credentials!

+

+ Invalid credentials! Try again. +

{/if}
@@ -49,6 +47,7 @@ {/if}

+ - {#if metadata.signup_enabled} + {#if metadata?.signup_enabled}

Don't have an account yet? Apply for an account Date: Tue, 24 Oct 2023 01:14:28 +0200 Subject: [PATCH 06/25] fix: helpers --- packages/grid/frontend/src/lib/constants.ts | 6 +++--- packages/grid/frontend/src/lib/utils.ts | 22 +++++++++++++++++++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/packages/grid/frontend/src/lib/constants.ts b/packages/grid/frontend/src/lib/constants.ts index 5ea732a5286..7ddf9a8e387 100644 --- a/packages/grid/frontend/src/lib/constants.ts +++ b/packages/grid/frontend/src/lib/constants.ts @@ -1,4 +1,4 @@ -export const API_BASE_URL = "http://cranky_isbell-proxy-1/api/v2" +export const API_BASE_URL = "http://127.0.0.1:8081/api/v2" export const syftRoles = { 1: "Guest", @@ -8,6 +8,6 @@ export const syftRoles = { } export const COOKIES = { - UID: "_user_id", - SIGNING_KEY: "_signing_key", + USER: "_user", + KEY: "_signing_key", } diff --git a/packages/grid/frontend/src/lib/utils.ts b/packages/grid/frontend/src/lib/utils.ts index 77ac6feb253..9b46f453f27 100644 --- a/packages/grid/frontend/src/lib/utils.ts +++ b/packages/grid/frontend/src/lib/utils.ts @@ -1,6 +1,9 @@ import { ServiceRoles } from "../types/domain/users" +import { COOKIES } from "./constants" +import type { CookieSerializeOptions } from "cookie" +import type { Cookies } from "@sveltejs/kit" -export function shortName(name) { +export function shortName(name: string) { const nameList = name.split(" ") let letters = "" nameList[0].charAt(0).toUpperCase() @@ -37,10 +40,25 @@ export function getUserRole(value: ServiceRoles) { return ServiceRoles[value] } -export const default_cookie_config = { +export const default_cookie_config: CookieSerializeOptions = { path: "/", httpOnly: true, sameSite: "strict", secure: import.meta.env.NODE_ENV === "production", maxAge: 60 * 60 * 24 * 30, // 30 days } + +interface CookieData { + uid: string + node_id: string + signing_key: string +} + +export function unload_cookies(cookies: Cookies): CookieData { + const cookieUser = cookies.get(COOKIES.USER) + const signing_key = cookies.get(COOKIES.KEY) + + if (!cookieUser || !signing_key) throw Error("Cookie is empty") + + return { ...JSON.parse(cookieUser), signing_key } +} From 0610e7ad8456652d0ab776c5a746cfee63d61b0b Mon Sep 17 00:00:00 2001 From: Thiago Costa Porto Date: Tue, 24 Oct 2023 01:14:56 +0200 Subject: [PATCH 07/25] fix: most of users work --- .../src/routes/(app)/users/+page.server.ts | 10 ++ .../src/routes/(app)/users/+page.svelte | 115 ++++++++++-------- .../routes/(app)/users/[slug]/+page.server.ts | 12 ++ .../routes/(app)/users/[slug]/+page.svelte | 36 +++--- 4 files changed, 110 insertions(+), 63 deletions(-) create mode 100644 packages/grid/frontend/src/routes/(app)/users/+page.server.ts create mode 100644 packages/grid/frontend/src/routes/(app)/users/[slug]/+page.server.ts diff --git a/packages/grid/frontend/src/routes/(app)/users/+page.server.ts b/packages/grid/frontend/src/routes/(app)/users/+page.server.ts new file mode 100644 index 00000000000..26476c06dff --- /dev/null +++ b/packages/grid/frontend/src/routes/(app)/users/+page.server.ts @@ -0,0 +1,10 @@ +import type { PageServerLoad } from "./$types" + +export const load: PageServerLoad = async ({ fetch, depends }) => { + const res = await fetch(`/_syft_api/users`) + const json = (await res.json()) as { list: any[]; total: number } + + depends("user:list") + + return json +} diff --git a/packages/grid/frontend/src/routes/(app)/users/+page.svelte b/packages/grid/frontend/src/routes/(app)/users/+page.svelte index 27a0417bcea..5dc85f1321a 100644 --- a/packages/grid/frontend/src/routes/(app)/users/+page.svelte +++ b/packages/grid/frontend/src/routes/(app)/users/+page.svelte @@ -1,58 +1,61 @@

- +
@@ -86,7 +94,10 @@
{#each userList as user} - + {/each} @@ -105,11 +116,19 @@
- - + + diff --git a/packages/grid/frontend/src/routes/(app)/users/[slug]/+page.server.ts b/packages/grid/frontend/src/routes/(app)/users/[slug]/+page.server.ts new file mode 100644 index 00000000000..454350d09c1 --- /dev/null +++ b/packages/grid/frontend/src/routes/(app)/users/[slug]/+page.server.ts @@ -0,0 +1,12 @@ +import type { UserView } from "../../../../types/domain/users" +import type { PageServerLoad } from "./$types" + +export const load: PageServerLoad = async ({ params, fetch, depends }) => { + const slug = params.slug + const res = await fetch(`/_syft_api/users/${slug}`) + const json = (await res.json()) as UserView + + depends(`user:${slug}`) + + return { user_requested: json } +} diff --git a/packages/grid/frontend/src/routes/(app)/users/[slug]/+page.svelte b/packages/grid/frontend/src/routes/(app)/users/[slug]/+page.svelte index b493168dc09..465474c281a 100644 --- a/packages/grid/frontend/src/routes/(app)/users/[slug]/+page.svelte +++ b/packages/grid/frontend/src/routes/(app)/users/[slug]/+page.svelte @@ -1,23 +1,29 @@
@@ -40,7 +46,7 @@ {/if} {#if user.role}
- {getUserRole(user.role.value)} + {getUserRole(user.role)}
{/if}
From b2fa124ff99999bdd9ce54fb95ec615cd27f7f84 Mon Sep 17 00:00:00 2001 From: Thiago Costa Porto Date: Tue, 24 Oct 2023 01:15:18 +0200 Subject: [PATCH 08/25] fix: components and layout adjustments --- .../frontend/src/lib/components/Input.svelte | 2 +- .../src/lib/components/onBoardModal.svelte | 187 ++++++++++-------- .../frontend/src/routes/(app)/+layout.svelte | 20 +- .../frontend/src/routes/+layout.server.ts | 22 +-- .../grid/frontend/src/routes/+page.svelte | 14 +- 5 files changed, 124 insertions(+), 121 deletions(-) diff --git a/packages/grid/frontend/src/lib/components/Input.svelte b/packages/grid/frontend/src/lib/components/Input.svelte index 68d5652e6e9..efe620edcab 100644 --- a/packages/grid/frontend/src/lib/components/Input.svelte +++ b/packages/grid/frontend/src/lib/components/Input.svelte @@ -5,7 +5,7 @@ export let id: string export let required = false export let value: HTMLInputElement["value"] = "" - export let error = "" + export let error: boolean | undefined export const warning = "" $: borderColor = !error ? "border-gray-300/10" : "border-rose-500/100" diff --git a/packages/grid/frontend/src/lib/components/onBoardModal.svelte b/packages/grid/frontend/src/lib/components/onBoardModal.svelte index 443651065d5..9b4f71013f8 100644 --- a/packages/grid/frontend/src/lib/components/onBoardModal.svelte +++ b/packages/grid/frontend/src/lib/components/onBoardModal.svelte @@ -1,103 +1,113 @@ {#if currentStep === 1}
-
+
- +
-

Welcome to PyGrid Admin!

+

+ Welcome to PyGrid Admin! +

Step 1 of 4

@@ -110,10 +120,11 @@

- Congratulations on logging into {$metadata?.name ?? ''} node. This wizard will help get you - started in setting up your user account. You can skip this wizard by pressing “Cancel” below. - You can edit any of your responses later by going to "Account Settings" indicated by your avatar - in the top right corner of the navigation. + Congratulations on logging into {$metadata?.name ?? ""} node. This wizard + will help get you started in setting up your user account. You can skip + this wizard by pressing “Cancel” below. You can edit any of your responses + later by going to "Account Settings" indicated by your avatar in the top + right corner of the navigation.

@@ -126,8 +137,12 @@ {:else if currentStep == 2}
-
-
+
+
@@ -139,7 +154,12 @@
- +

- Let's begin by describing some basic information about this domain node. This information - will be shown to outside users to help them find and understand what your domain offers. + Let's begin by describing some basic information about this domain + node. This information will be shown to outside users to help them + find and understand what your domain offers.

-
-
+
+
@@ -202,9 +227,10 @@

- Now that we have described our domain, let's update our password and describe some basic - information about ourselves for our "User Profile". User profile information will be shown - to teammates and collaborators when working on studies together. + Now that we have described our domain, let's update our password and + describe some basic information about ourselves for our "User + Profile". User profile information will be shown to teammates and + collaborators when working on studies together.

Profile Information

- Now, some profile information to help your teammates and collaborators get to know you - better. + Now, some profile information to help your teammates and + collaborators get to know you better.

-
-
+
+
@@ -278,8 +308,9 @@

- Congratulations on setting up your account. To edit any of your responses you can go to - "Account Settings" indicated by your avatar in the top right corner of the navigation. + Congratulations on setting up your account. To edit any of your + responses you can go to "Account Settings" indicated by your avatar in + the top right corner of the navigation.

diff --git a/packages/grid/frontend/src/routes/(app)/+layout.svelte b/packages/grid/frontend/src/routes/(app)/+layout.svelte index 7347c61f628..bd2883dc27e 100644 --- a/packages/grid/frontend/src/routes/(app)/+layout.svelte +++ b/packages/grid/frontend/src/routes/(app)/+layout.svelte @@ -1,21 +1,9 @@ diff --git a/packages/grid/frontend/src/routes/+layout.server.ts b/packages/grid/frontend/src/routes/+layout.server.ts index 8800e7623b8..4421a51a3f1 100644 --- a/packages/grid/frontend/src/routes/+layout.server.ts +++ b/packages/grid/frontend/src/routes/+layout.server.ts @@ -1,27 +1,23 @@ import { getMetadata } from "$lib/api/metadata" -import { getUser } from "$lib/api/users" -import { COOKIES } from "$lib/constants" +import { unload_cookies } from "$lib/utils" +import type { LayoutServerLoad } from "./$types" -/** @type {import('./$types').LayoutServerLoad} */ -export async function load({ cookies }) { - const user_id = cookies.get(COOKIES.UID) - const signing_key = cookies.get(COOKIES.SIGNING_KEY) - - let user +export const load: LayoutServerLoad = async ({ cookies, fetch }) => { + let current_user let metadata try { metadata = await getMetadata() - - if (user_id) { - user = await getUser(user_id, signing_key, metadata.node_id) - } + const { uid, signing_key, node_id } = unload_cookies(cookies) + console.log("req", uid) + const res = await fetch(`/_syft_api/users/${uid}`) + current_user = await res.json() } catch (error) { console.log(error) } finally { return { metadata, - user, + current_user, } } } diff --git a/packages/grid/frontend/src/routes/+page.svelte b/packages/grid/frontend/src/routes/+page.svelte index 7a4f56b2653..243c092399d 100644 --- a/packages/grid/frontend/src/routes/+page.svelte +++ b/packages/grid/frontend/src/routes/+page.svelte @@ -4,20 +4,8 @@ export let data console.log({ data }) - - async function lazyLoad() { - if (typeof window === "undefined") return - - if (!window.localStorage.getItem("key")) { - goto("/login") - } else { - goto("/datasets") - } - }
- {#await lazyLoad()} - PyGrid - {/await} + PyGrid
From 5d044e408269895b0606805a028b7a66ddb5567a Mon Sep 17 00:00:00 2001 From: Thiago Costa Porto Date: Thu, 26 Oct 2023 02:18:10 +0200 Subject: [PATCH 09/25] wip: fix: min working version --- .../grid/frontend/src/lib/api/metadata.ts | 40 ----- .../src/lib/api/syft_error_handler.ts | 12 ++ packages/grid/frontend/src/lib/api/users.ts | 74 --------- .../frontend/src/lib/components/Button.svelte | 16 +- .../src/lib/components/Button.svelte.save | 48 ++++++ .../frontend/src/lib/components/Input.svelte | 2 +- .../src/lib/components/Input.svelte.save | 27 ++++ .../src/lib/components/LoadingDatasets.svelte | 35 ++-- .../src/lib/components/LoginHeader.svelte | 47 ------ .../frontend/src/lib/components/Modal.svelte | 6 +- .../src/lib/components/ModalOverlay.svelte | 7 - .../lib/components/Navigation/SideNav.svelte | 33 ++-- .../lib/components/Navigation/TopNav.svelte | 41 +++-- ...ardModal.svelte => OnboardingModal.svelte} | 39 +++-- .../src/lib/components/RegisterModal.svelte | 91 ----------- .../frontend/src/lib/components/Router.svelte | 14 -- .../components/Users/UserCreateModal.svelte | 151 ++++++++++-------- .../lib/components/Users/UserNewModal.svelte | 28 ++-- .../lib/components/authentication/Nav.svelte | 16 +- packages/grid/frontend/src/lib/constants.ts | 2 +- packages/grid/frontend/src/lib/utils.ts | 19 +++ .../src/routes/(app)/+layout.server.ts | 11 ++ .../frontend/src/routes/(app)/+layout.svelte | 15 +- .../src/routes/(app)/datasets/+page.server.ts | 10 ++ .../src/routes/(app)/datasets/+page.svelte | 79 +++++---- .../src/routes/(app)/logout/+page.server.ts | 9 ++ .../src/routes/(app)/logout/+page.svelte | 12 -- .../src/routes/(app)/users/+page.svelte | 48 ++++-- .../routes/(app)/users/[slug]/+page.svelte | 17 +- .../src/routes/(auth)/login/+page.server.ts | 30 ++-- .../src/routes/(auth)/signup/+page.server.js | 46 ------ .../src/routes/(auth)/signup/+page.server.ts | 64 ++++++++ .../src/routes/(auth)/signup/+page.svelte | 66 ++------ .../frontend/src/routes/+layout.server.ts | 22 +-- .../grid/frontend/src/routes/+page.svelte | 14 +- .../src/routes/_syft_api/datasets/+server.ts | 28 ++++ .../_syft_api/datasets/[uid]/+server.ts | 0 .../_syft_api/datasets/search/+server.ts | 0 .../src/routes/_syft_api/metadata/+server.ts | 54 +++++++ .../src/routes/_syft_api/users/+server.ts | 22 +++ .../routes/_syft_api/users/[uid]/+server.ts | 44 ++++- .../routes/_syft_api/users/search/+server.ts | 9 ++ .../static/images/illustrations/user-main.png | Bin 121661 -> 30095 bytes 43 files changed, 703 insertions(+), 645 deletions(-) delete mode 100644 packages/grid/frontend/src/lib/api/metadata.ts create mode 100644 packages/grid/frontend/src/lib/api/syft_error_handler.ts delete mode 100644 packages/grid/frontend/src/lib/api/users.ts create mode 100644 packages/grid/frontend/src/lib/components/Button.svelte.save create mode 100644 packages/grid/frontend/src/lib/components/Input.svelte.save delete mode 100644 packages/grid/frontend/src/lib/components/LoginHeader.svelte delete mode 100644 packages/grid/frontend/src/lib/components/ModalOverlay.svelte rename packages/grid/frontend/src/lib/components/{onBoardModal.svelte => OnboardingModal.svelte} (94%) delete mode 100644 packages/grid/frontend/src/lib/components/RegisterModal.svelte delete mode 100644 packages/grid/frontend/src/lib/components/Router.svelte create mode 100644 packages/grid/frontend/src/routes/(app)/+layout.server.ts create mode 100644 packages/grid/frontend/src/routes/(app)/datasets/+page.server.ts create mode 100644 packages/grid/frontend/src/routes/(app)/logout/+page.server.ts delete mode 100644 packages/grid/frontend/src/routes/(app)/logout/+page.svelte delete mode 100644 packages/grid/frontend/src/routes/(auth)/signup/+page.server.js create mode 100644 packages/grid/frontend/src/routes/(auth)/signup/+page.server.ts create mode 100644 packages/grid/frontend/src/routes/_syft_api/datasets/+server.ts create mode 100644 packages/grid/frontend/src/routes/_syft_api/datasets/[uid]/+server.ts create mode 100644 packages/grid/frontend/src/routes/_syft_api/datasets/search/+server.ts create mode 100644 packages/grid/frontend/src/routes/_syft_api/metadata/+server.ts diff --git a/packages/grid/frontend/src/lib/api/metadata.ts b/packages/grid/frontend/src/lib/api/metadata.ts deleted file mode 100644 index 55e7b137564..00000000000 --- a/packages/grid/frontend/src/lib/api/metadata.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ky from "ky" -import { jsSyftCall } from "./syft_api" -import { API_BASE_URL } from "../constants" -import { deserialize } from "./serde" - -export async function getMetadata() { - try { - const res = await ky.get(`${API_BASE_URL}/metadata_capnp`) - - const metadata = await deserialize(res) - - return { - admin_email: metadata?.admin_email, - deployed_on: metadata?.deployed_on, - description: metadata?.description, - highest_version: metadata?.highest_version, - lowest_version: metadata?.lowest_version, - name: metadata?.name, - node_id: metadata?.id?.value, - node_side: metadata?.node_side_type, - node_type: metadata?.node_type?.value, - organization: metadata?.organization, - signup_enabled: metadata?.signup_enabled, - syft_version: metadata?.syft_version, - } - } catch (error) { - console.log(error) - throw error - } -} - -export async function updateMetadata(newMetadata) { - const payload = { - settings: { - ...newMetadata, - fqn: "syft.service.settings.settings.NodeSettingsUpdate", - }, - } - return await jsSyftCall({ path: "settings.update", payload }) -} diff --git a/packages/grid/frontend/src/lib/api/syft_error_handler.ts b/packages/grid/frontend/src/lib/api/syft_error_handler.ts new file mode 100644 index 00000000000..d4a70359562 --- /dev/null +++ b/packages/grid/frontend/src/lib/api/syft_error_handler.ts @@ -0,0 +1,12 @@ +export function throwIfError(json: { fqn: string; message: string }) { + if (json.fqn === "syft.service.response.SyftError") { + throw Error(`SyftError: ${json.message || "Unknown error"}`) + } +} + +export function getErrorMessage(err: unknown) { + if (err instanceof Error) { + return err.message + } + return "Unknown error" +} diff --git a/packages/grid/frontend/src/lib/api/users.ts b/packages/grid/frontend/src/lib/api/users.ts deleted file mode 100644 index c867c928927..00000000000 --- a/packages/grid/frontend/src/lib/api/users.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { jsSyftCall } from "./syft_api" - -export async function getAllUsers(page_size = 0, page_index = 0) { - return await jsSyftCall({ - path: "user.get_all", - payload: { page_size: page_size, page_index: page_index }, - }) -} - -export async function getUser( - uid: string, - signing_key: string | Uint8Array, - node_id: string -) { - try { - const user = await jsSyftCall({ - path: "user.view", - payload: { uid: { value: uid, fqn: "syft.types.uid.UID" } }, - node_id, - signing_key, - }) - - return { - uid: user.id.value, - email: user.email, - role: user.role.value, - website: user.website, - institution: user.institution, - } - } catch (error) { - console.error(error) - return undefined - } -} - -export async function searchUsersByName( - name: string, - page_size = 0, - page_index = 0 -) { - return await jsSyftCall({ - path: "user.search", - payload: { - user_search: { name: name, fqn: "syft.service.user.user.UserSearch" }, - page_size: page_size, - page_index: page_index, - }, - }) -} - -export async function updateCurrentUser( - name: string, - email: string, - password: string, - institution: string, - website: string -) { - const userUpdate = { - name: name, - email: email, - password: password, - institution: institution, - website: website, - fqn: "syft.service.user.user.UserUpdate", - } - - return await jsSyftCall({ - path: "user.update", - payload: { - uid: makeSyftUID(getUserIdFromStorage()), - user_update: userUpdate, - }, - }) -} diff --git a/packages/grid/frontend/src/lib/components/Button.svelte b/packages/grid/frontend/src/lib/components/Button.svelte index 5b9b29daeaa..70d609c4255 100644 --- a/packages/grid/frontend/src/lib/components/Button.svelte +++ b/packages/grid/frontend/src/lib/components/Button.svelte @@ -1,15 +1,15 @@ + + diff --git a/packages/grid/frontend/src/lib/components/Input.svelte b/packages/grid/frontend/src/lib/components/Input.svelte index efe620edcab..1dcae36499b 100644 --- a/packages/grid/frontend/src/lib/components/Input.svelte +++ b/packages/grid/frontend/src/lib/components/Input.svelte @@ -5,7 +5,7 @@ export let id: string export let required = false export let value: HTMLInputElement["value"] = "" - export let error: boolean | undefined + export let error: boolean | undefined = undefined export const warning = "" $: borderColor = !error ? "border-gray-300/10" : "border-rose-500/100" diff --git a/packages/grid/frontend/src/lib/components/Input.svelte.save b/packages/grid/frontend/src/lib/components/Input.svelte.save new file mode 100644 index 00000000000..d44746b6863 --- /dev/null +++ b/packages/grid/frontend/src/lib/components/Input.svelte.save @@ -0,0 +1,27 @@ +n: + +
+ + +
diff --git a/packages/grid/frontend/src/lib/components/LoadingDatasets.svelte b/packages/grid/frontend/src/lib/components/LoadingDatasets.svelte index 1b217f1172c..9475452a983 100644 --- a/packages/grid/frontend/src/lib/components/LoadingDatasets.svelte +++ b/packages/grid/frontend/src/lib/components/LoadingDatasets.svelte @@ -1,26 +1,25 @@ {#each table as element} -
+
-
-
-
-
-
-
- -
-
-
-
- -
-
+
+
+
+
+
+ +
+
+
+
+ +
+
+
-
+
{/each} - diff --git a/packages/grid/frontend/src/lib/components/LoginHeader.svelte b/packages/grid/frontend/src/lib/components/LoginHeader.svelte deleted file mode 100644 index 023b6e74eca..00000000000 --- a/packages/grid/frontend/src/lib/components/LoginHeader.svelte +++ /dev/null @@ -1,47 +0,0 @@ - - - - - diff --git a/packages/grid/frontend/src/lib/components/Modal.svelte b/packages/grid/frontend/src/lib/components/Modal.svelte index 2ad5745523a..6e6e65a214c 100644 --- a/packages/grid/frontend/src/lib/components/Modal.svelte +++ b/packages/grid/frontend/src/lib/components/Modal.svelte @@ -1,9 +1,11 @@
-
+
diff --git a/packages/grid/frontend/src/lib/components/ModalOverlay.svelte b/packages/grid/frontend/src/lib/components/ModalOverlay.svelte deleted file mode 100644 index 247602f3b5d..00000000000 --- a/packages/grid/frontend/src/lib/components/ModalOverlay.svelte +++ /dev/null @@ -1,7 +0,0 @@ -
-
-
- -
-
-
diff --git a/packages/grid/frontend/src/lib/components/Navigation/SideNav.svelte b/packages/grid/frontend/src/lib/components/Navigation/SideNav.svelte index 9e223699472..aa2064d53df 100644 --- a/packages/grid/frontend/src/lib/components/Navigation/SideNav.svelte +++ b/packages/grid/frontend/src/lib/components/Navigation/SideNav.svelte @@ -1,13 +1,14 @@
- +
- @@ -38,7 +44,12 @@
- + OpenMined - import { metadata, user } from '$lib/store'; - import { getInitials } from '$lib/utils'; - import Avatar from '../Avatar.svelte'; - import BellIcon from '../icons/BellIcon.svelte'; - import CollegeIcon from '../icons/CollegeIcon.svelte'; - import QuestionIcon from '../icons/QuestionIcon.svelte'; + import { getInitials } from "$lib/utils" + import Avatar from "../Avatar.svelte" + import BellIcon from "../icons/BellIcon.svelte" + import CollegeIcon from "../icons/CollegeIcon.svelte" + import QuestionIcon from "../icons/QuestionIcon.svelte" + + export let metadata, user const links = [ - { href: 'https://github.com/OpenMined/PySyft', icon: QuestionIcon }, - { href: 'https://courses.openmined.org', icon: CollegeIcon }, - { href: '', icon: BellIcon } - ]; + { href: "https://github.com/OpenMined/PySyft", icon: QuestionIcon }, + { href: "https://courses.openmined.org", icon: CollegeIcon }, + { href: "", icon: BellIcon, disabled: true }, + ] - $: domainInitials = getInitials($metadata?.name); - $: userInitials = getInitials($user?.name); + $: domainInitials = getInitials(metadata.name) + $: userInitials = getInitials(user.name)
{#each links as link} @@ -37,3 +44,11 @@ -->
+ + diff --git a/packages/grid/frontend/src/lib/components/onBoardModal.svelte b/packages/grid/frontend/src/lib/components/OnboardingModal.svelte similarity index 94% rename from packages/grid/frontend/src/lib/components/onBoardModal.svelte rename to packages/grid/frontend/src/lib/components/OnboardingModal.svelte index 9b4f71013f8..8e381c18630 100644 --- a/packages/grid/frontend/src/lib/components/onBoardModal.svelte +++ b/packages/grid/frontend/src/lib/components/OnboardingModal.svelte @@ -9,9 +9,8 @@ import ButtonGhost from "$lib/components/ButtonGhost.svelte" import NodeIcon from "$lib/components/icons/NodeIcon.svelte" import CheckIcon from "$lib/components/icons/CheckIcon.svelte" - import { metadata } from "$lib/store" - import { updateMetadata, getMetadata } from "$lib/api/metadata" - import { updateCurrentUser } from "$lib/api/users" + + export let metadata export let open = true let currentStep = 1 @@ -44,21 +43,26 @@ } let handleUpdate = async () => { - await updateMetadata(domainSettings) - await updateCurrentUser( - userSettings.name, - userSettings.email, - userSettings.password, - userSettings.institution, - userSettings.website - ) - try { - const updatedMetadata = await getMetadata() - metadata.set(updatedMetadata) + await fetch("/_syft_api/metadata", { + method: "PUT", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(domainSettings), + }) + + await fetch(`/_syft_api/users/${userSettings.id}`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(userSettings), + }) + currentStep = currentStep + 1 - } catch (error) { - console.log(error) + } catch (err) { + console.log(err) } } @@ -102,6 +106,7 @@ width="264px" height="224px" src="/assets/2023_welcome_to_pygrid.png" + alt="Welcome to PyGrid" />
@@ -120,7 +125,7 @@

- Congratulations on logging into {$metadata?.name ?? ""} node. This wizard + Congratulations on logging into {metadata?.name ?? ""} node. This wizard will help get you started in setting up your user account. You can skip this wizard by pressing “Cancel” below. You can edit any of your responses later by going to "Account Settings" indicated by your avatar in the top diff --git a/packages/grid/frontend/src/lib/components/RegisterModal.svelte b/packages/grid/frontend/src/lib/components/RegisterModal.svelte deleted file mode 100644 index 1b711e082f9..00000000000 --- a/packages/grid/frontend/src/lib/components/RegisterModal.svelte +++ /dev/null @@ -1,91 +0,0 @@ - - - - -

- Start Today! -

- - - - - -
- Remember me - - Lost password? - -
- - - diff --git a/packages/grid/frontend/src/lib/components/Router.svelte b/packages/grid/frontend/src/lib/components/Router.svelte deleted file mode 100644 index 44cb8ed5748..00000000000 --- a/packages/grid/frontend/src/lib/components/Router.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - -
- - - - -
diff --git a/packages/grid/frontend/src/lib/components/Users/UserCreateModal.svelte b/packages/grid/frontend/src/lib/components/Users/UserCreateModal.svelte index 24a8efcf476..95e7b9c5a2d 100644 --- a/packages/grid/frontend/src/lib/components/Users/UserCreateModal.svelte +++ b/packages/grid/frontend/src/lib/components/Users/UserCreateModal.svelte @@ -1,94 +1,91 @@ {#if currentStep === 1}
-
-
+
+
@@ -105,7 +102,8 @@

- To begin let's select the role this user is going to have on your domain node. + To begin let's select the role this user is going to have on your + domain node.

{#each cardsContent as { title, description, roleId }} @@ -129,12 +127,18 @@ {:else if currentStep === 2}
-
-
+
+
-

Determine Account Details

+

+ Determine Account Details +

Step 2 of 3

@@ -147,8 +151,8 @@

- Now that we have selected our user's role, let's describe some basic information about our - user. + Now that we have selected our user's role, let's describe some basic + information about our user.

- +
-
-
+
+
@@ -196,17 +210,18 @@

- User account created! Copy and paste the text below and email the account credentials to - your user so they can get started. + User account created! Copy and paste the text below and email the + account credentials to your user so they can get started.

Email invitation template

- Welcome to {$metadata?.name} + Welcome to {metadata?.name} {name},
- You are formally invited you to join {$metadata?.name} Domain. Below is your login credentials - and the URL to the domain. After logging in you will be prompted to customize your account. + You are formally invited you to join {metadata?.name} Domain. Below is + your login credentials and the URL to the domain. After logging in you + will be prompted to customize your account.

{href}

{email}

diff --git a/packages/grid/frontend/src/lib/components/Users/UserNewModal.svelte b/packages/grid/frontend/src/lib/components/Users/UserNewModal.svelte index a2128423912..d0845f449cd 100644 --- a/packages/grid/frontend/src/lib/components/Users/UserNewModal.svelte +++ b/packages/grid/frontend/src/lib/components/Users/UserNewModal.svelte @@ -1,19 +1,21 @@
-

Create a user account

+

+ Create a user account +

@@ -22,14 +24,14 @@ Create general user alt Create general user - Create accounts for outside researchers to safely study from your data without needing a - copy or direct access. + Create accounts for outside researchers to safely study from your data + without needing a copy or direct access.
diff --git a/packages/grid/frontend/src/lib/components/authentication/Nav.svelte b/packages/grid/frontend/src/lib/components/authentication/Nav.svelte index d29320b9830..8db7a61b817 100644 --- a/packages/grid/frontend/src/lib/components/authentication/Nav.svelte +++ b/packages/grid/frontend/src/lib/components/authentication/Nav.svelte @@ -1,17 +1,17 @@