diff --git a/cmd/swapcli/main.go b/cmd/swapcli/main.go
index fd1c86871..485024f4a 100644
--- a/cmd/swapcli/main.go
+++ b/cmd/swapcli/main.go
@@ -76,6 +76,20 @@ func cliApp() *cli.App {
swapdPortFlag,
},
},
+ {
+ Name: "pairs",
+ Aliases: []string{"p"},
+ Usage: "List active pairs",
+ Action: runPairs,
+ Flags: []cli.Flag{
+ swapdPortFlag,
+ &cli.Uint64Flag{
+ Name: flagSearchTime,
+ Usage: "Duration of time to search for, in seconds",
+ Value: defaultDiscoverSearchTimeSecs,
+ },
+ },
+ },
{
Name: "balances",
Aliases: []string{"b"},
@@ -536,6 +550,39 @@ func runPeers(ctx *cli.Context) error {
return nil
}
+func runPairs(ctx *cli.Context) error {
+ searchTime := ctx.Uint64(flagSearchTime)
+
+ c := newClient(ctx)
+ resp, err := c.Pairs(searchTime)
+ if err != nil {
+ return err
+ }
+
+ for i, a := range resp.Pairs {
+ var verified string
+ if a.Verified {
+ verified = "Yes"
+ } else {
+ verified = "No"
+ }
+
+ fmt.Printf("Pair %d:\n", i+1)
+ fmt.Printf(" Name: %s\n", a.Token.Symbol)
+ fmt.Printf(" Token: %s\n", a.Token.Address)
+ fmt.Printf(" Verified: %s\n", verified)
+ fmt.Printf(" Offers: %d\n", a.Offers)
+ fmt.Printf(" Reported Liquidity XMR: %f\n", a.ReportedLiquidityXMR)
+ fmt.Println()
+ }
+
+ if len(resp.Pairs) == 0 {
+ fmt.Println("[none]")
+ }
+
+ return nil
+}
+
func runBalances(ctx *cli.Context) error {
c := newClient(ctx)
diff --git a/common/rpctypes/types.go b/common/rpctypes/types.go
index 2112fd784..3b41c800b 100644
--- a/common/rpctypes/types.go
+++ b/common/rpctypes/types.go
@@ -147,3 +147,13 @@ type AddressesResponse struct {
type PeersResponse struct {
Addrs []string `json:"addresses" validate:"dive,required"`
}
+
+// PairsRequest ...
+type PairsRequest struct {
+ SearchTime uint64 `json:"searchTime"` // in seconds
+}
+
+// PairsResponse ...
+type PairsResponse struct {
+ Pairs []*types.Pair
+}
diff --git a/common/types/pairs.go b/common/types/pairs.go
new file mode 100644
index 000000000..7d748e910
--- /dev/null
+++ b/common/types/pairs.go
@@ -0,0 +1,44 @@
+// Copyright 2023 The AthanorLabs/atomic-swap Authors
+// SPDX-License-Identifier: LGPL-3.0-only
+
+package types
+
+import (
+ "github.com/cockroachdb/apd/v3"
+
+ "github.com/athanorlabs/atomic-swap/coins"
+)
+
+// Pair represents a pair (Such as ETH / XMR)
+type Pair struct {
+ ReportedLiquidityXMR *apd.Decimal `json:"reportedLiquidityXmr" validate:"required"`
+ EthAsset EthAsset `json:"ethAsset" validate:"required"`
+ Token coins.ERC20TokenInfo `json:"token" validate:"required"`
+ Offers uint64 `json:"offers" validate:"required"`
+ Verified bool `json:"verified" valdate:"required"`
+}
+
+// NewPair creates and returns a Pair
+func NewPair(EthAsset EthAsset) *Pair {
+ pair := &Pair{
+ ReportedLiquidityXMR: apd.New(0, 0),
+ EthAsset: EthAsset,
+
+ // Always set to false for now until the verified-list
+ // is implemented
+ Verified: false,
+ }
+ return pair
+}
+
+// AddOffer adds an offer to a pair
+func (pair *Pair) AddOffer(o *Offer) error {
+ _, err := coins.DecimalCtx().Add(pair.ReportedLiquidityXMR, pair.ReportedLiquidityXMR, o.MaxAmount)
+ if err != nil {
+ return err
+ }
+
+ pair.Offers++
+
+ return nil
+}
diff --git a/rpc/net.go b/rpc/net.go
index 942643f95..6767c8ff6 100644
--- a/rpc/net.go
+++ b/rpc/net.go
@@ -4,6 +4,7 @@
package rpc
import (
+ "context"
"fmt"
"net/http"
"time"
@@ -18,6 +19,8 @@ import (
"github.com/athanorlabs/atomic-swap/common/types"
"github.com/athanorlabs/atomic-swap/net/message"
"github.com/athanorlabs/atomic-swap/protocol/swap"
+
+ ethcommon "github.com/ethereum/go-ethereum/common"
)
const defaultSearchTime = time.Second * 12
@@ -35,19 +38,31 @@ type Net interface {
// NetService is the RPC service prefixed by net_.
type NetService struct {
+ ctx context.Context
net Net
xmrtaker XMRTaker
xmrmaker XMRMaker
+ pb ProtocolBackend
sm swap.Manager
isBootnode bool
}
// NewNetService ...
-func NewNetService(net Net, xmrtaker XMRTaker, xmrmaker XMRMaker, sm swap.Manager, isBootnode bool) *NetService {
+func NewNetService(
+ ctx context.Context,
+ net Net,
+ xmrtaker XMRTaker,
+ xmrmaker XMRMaker,
+ pb ProtocolBackend,
+ sm swap.Manager,
+ isBootnode bool,
+) *NetService {
return &NetService{
+ ctx: ctx,
net: net,
xmrtaker: xmrtaker,
xmrmaker: xmrmaker,
+ pb: pb,
sm: sm,
isBootnode: isBootnode,
}
@@ -73,6 +88,75 @@ func (s *NetService) Peers(_ *http.Request, _ *interface{}, resp *rpctypes.Peers
return nil
}
+// Pairs returns all currently available pairs from offers of all peers
+func (s *NetService) Pairs(_ *http.Request, req *rpctypes.PairsRequest, resp *rpctypes.PairsResponse) error {
+ if s.isBootnode {
+ return errUnsupportedForBootnode
+ }
+
+ peerIDs, err := s.discover(&rpctypes.DiscoverRequest{
+ Provides: "",
+ SearchTime: req.SearchTime,
+ })
+ if err != nil {
+ return err
+ }
+
+ pairs := make(map[ethcommon.Address]*types.Pair)
+
+ for _, p := range peerIDs {
+ msg, err := s.net.Query(p)
+ if err != nil {
+ log.Debugf("Failed to query peer ID %s", p)
+ continue
+ }
+
+ if len(msg.Offers) == 0 {
+ continue
+ }
+
+ for _, o := range msg.Offers {
+ address := o.EthAsset.Address()
+ pair, exists := pairs[address]
+
+ if !exists {
+ pair = types.NewPair(o.EthAsset)
+ if pair.EthAsset.IsToken() {
+ tokenInfo, tokenInfoErr := s.pb.ETHClient().ERC20Info(s.ctx, address)
+ if tokenInfoErr != nil {
+ log.Debugf("Error while reading token info: %s", tokenInfoErr)
+ continue
+ }
+ pair.Token = *tokenInfo
+ } else {
+ pair.Token.Name = "Ether"
+ pair.Token.Symbol = "ETH"
+ pair.Token.NumDecimals = 18
+ pair.Verified = true
+ }
+ pairs[address] = pair
+ }
+
+ err = pair.AddOffer(o)
+ if err != nil {
+ return err
+ }
+ }
+ }
+
+ pairsArray := make([]*types.Pair, 0, len(pairs))
+ for _, pair := range pairs {
+ if pair.EthAsset.IsETH() {
+ pairsArray = append([]*types.Pair{pair}, pairsArray...)
+ } else {
+ pairsArray = append(pairsArray, pair)
+ }
+ }
+
+ resp.Pairs = pairsArray
+ return nil
+}
+
// QueryAll discovers peers who provide a certain coin and queries all of them for their current offers.
func (s *NetService) QueryAll(_ *http.Request, req *rpctypes.QueryAllRequest, resp *rpctypes.QueryAllResponse) error {
if s.isBootnode {
diff --git a/rpc/server.go b/rpc/server.go
index e9a124549..121acba73 100644
--- a/rpc/server.go
+++ b/rpc/server.go
@@ -107,7 +107,15 @@ func NewServer(cfg *Config) (*Server, error) {
case DatabaseNamespace:
err = rpcServer.RegisterService(NewDatabaseService(cfg.RecoveryDB), DatabaseNamespace)
case NetNamespace:
- netService = NewNetService(cfg.Net, cfg.XMRTaker, cfg.XMRMaker, swapManager, isBootnode)
+ netService = NewNetService(
+ serverCtx,
+ cfg.Net,
+ cfg.XMRTaker,
+ cfg.XMRMaker,
+ cfg.ProtocolBackend,
+ swapManager,
+ isBootnode,
+ )
err = rpcServer.RegisterService(netService, NetNamespace)
case PersonalName:
err = rpcServer.RegisterService(NewPersonalService(serverCtx, cfg.XMRMaker, cfg.ProtocolBackend), PersonalName)
diff --git a/rpcclient/net_test.go b/rpcclient/net_test.go
index 43eb4ff45..b4310b24a 100644
--- a/rpcclient/net_test.go
+++ b/rpcclient/net_test.go
@@ -4,6 +4,7 @@
package rpcclient
import (
+ "context"
"testing"
"github.com/cockroachdb/apd/v3"
@@ -15,7 +16,12 @@ import (
)
func TestNet_Discover(t *testing.T) {
- ns := rpc.NewNetService(new(mockNet), new(mockXMRTaker), nil, mockSwapManager(t), false)
+ ctx, cancel := context.WithCancel(context.Background())
+ t.Cleanup(func() {
+ cancel()
+ })
+
+ ns := rpc.NewNetService(ctx, new(mockNet), new(mockXMRTaker), nil, new(mockProtocolBackend), mockSwapManager(t), false)
req := &rpctypes.DiscoverRequest{
Provides: "",
@@ -29,7 +35,12 @@ func TestNet_Discover(t *testing.T) {
}
func TestNet_Query(t *testing.T) {
- ns := rpc.NewNetService(new(mockNet), new(mockXMRTaker), nil, mockSwapManager(t), false)
+ ctx, cancel := context.WithCancel(context.Background())
+ t.Cleanup(func() {
+ cancel()
+ })
+
+ ns := rpc.NewNetService(ctx, new(mockNet), new(mockXMRTaker), nil, new(mockProtocolBackend), mockSwapManager(t), false)
req := &rpctypes.QueryPeerRequest{
PeerID: "12D3KooWDqCzbjexHEa8Rut7bzxHFpRMZyDRW1L6TGkL1KY24JH5",
@@ -43,7 +54,12 @@ func TestNet_Query(t *testing.T) {
}
func TestNet_TakeOffer(t *testing.T) {
- ns := rpc.NewNetService(new(mockNet), new(mockXMRTaker), nil, mockSwapManager(t), false)
+ ctx, cancel := context.WithCancel(context.Background())
+ t.Cleanup(func() {
+ cancel()
+ })
+
+ ns := rpc.NewNetService(ctx, new(mockNet), new(mockXMRTaker), nil, new(mockProtocolBackend), mockSwapManager(t), false)
req := &rpctypes.TakeOfferRequest{
PeerID: "12D3KooWDqCzbjexHEa8Rut7bzxHFpRMZyDRW1L6TGkL1KY24JH5",
diff --git a/rpcclient/pairs.go b/rpcclient/pairs.go
new file mode 100644
index 000000000..40f5d9c13
--- /dev/null
+++ b/rpcclient/pairs.go
@@ -0,0 +1,27 @@
+// Copyright 2023 The AthanorLabs/atomic-swap Authors
+// SPDX-License-Identifier: LGPL-3.0-only
+
+package rpcclient
+
+import (
+ "github.com/athanorlabs/atomic-swap/common/rpctypes"
+)
+
+// Pairs calls net_pairs to get pairs from all offers.
+func (c *Client) Pairs(searchTime uint64) (*rpctypes.PairsResponse, error) {
+ const (
+ method = "net_pairs"
+ )
+
+ req := &rpctypes.PairsRequest{
+ SearchTime: searchTime,
+ }
+
+ res := &rpctypes.PairsResponse{}
+
+ if err := c.post(method, req, res); err != nil {
+ return nil, err
+ }
+
+ return res, nil
+}
diff --git a/tests/integration_test.go b/tests/integration_test.go
index 4bdbc1b9c..baee33900 100644
--- a/tests/integration_test.go
+++ b/tests/integration_test.go
@@ -129,6 +129,54 @@ func (s *IntegrationTestSuite) TestXMRMaker_Discover() {
require.Equal(s.T(), 0, len(peerIDs))
}
+func (s *IntegrationTestSuite) TestXMRMaker_Pairs() {
+ ctx := context.Background()
+ bc := rpcclient.NewClient(ctx, defaultXMRMakerSwapdPort)
+
+ _, err := bc.MakeOffer(
+ coins.StrToDecimal("1"),
+ coins.StrToDecimal("2"),
+ coins.StrToExchangeRate("200"),
+ s.testToken,
+ false)
+
+ require.NoError(s.T(), err)
+
+ _, err = bc.MakeOffer(
+ coins.StrToDecimal("1"),
+ coins.StrToDecimal("2"),
+ coins.StrToExchangeRate("200"),
+ types.EthAssetETH,
+ false)
+
+ require.NoError(s.T(), err)
+
+ _, err = bc.MakeOffer(
+ coins.StrToDecimal("1"),
+ coins.StrToDecimal("2"),
+ coins.StrToExchangeRate("200"),
+ types.EthAssetETH,
+ false)
+
+ require.NoError(s.T(), err)
+
+ // Give offer advertisement time to propagate
+ require.NoError(s.T(), common.SleepWithContext(ctx, time.Second))
+
+ ac := rpcclient.NewClient(ctx, defaultXMRTakerSwapdPort)
+ pairs, err := ac.Pairs(3)
+
+ require.Equal(s.T(), len(pairs.Pairs), 2)
+
+ p1 := pairs.Pairs[0]
+ p2 := pairs.Pairs[1]
+
+ require.Equal(s.T(), p1.Offers, uint64(2))
+ require.Equal(s.T(), p2.Offers, uint64(1))
+
+ require.NoError(s.T(), err)
+}
+
func (s *IntegrationTestSuite) TestXMRTaker_Query() {
s.testXMRTakerQuery(types.EthAssetETH)
}
diff --git a/ui/.gitignore b/ui/.gitignore
index a547bf36d..5e5d5e0f2 100644
--- a/ui/.gitignore
+++ b/ui/.gitignore
@@ -22,3 +22,12 @@ dist-ssr
*.njsproj
*.sln
*.sw?
+
+/build
+/.svelte-kit
+/package
+.env
+.env.*
+!.env.example
+vite.config.js.timestamp-*
+vite.config.ts.timestamp-*
diff --git a/ui/.prettierignore b/ui/.prettierignore
new file mode 100644
index 000000000..38972655f
--- /dev/null
+++ b/ui/.prettierignore
@@ -0,0 +1,13 @@
+.DS_Store
+node_modules
+/build
+/.svelte-kit
+/package
+.env
+.env.*
+!.env.example
+
+# Ignore files for PNPM, NPM and YARN
+pnpm-lock.yaml
+package-lock.json
+yarn.lock
diff --git a/ui/.prettierrc b/ui/.prettierrc
new file mode 100644
index 000000000..a77fddea9
--- /dev/null
+++ b/ui/.prettierrc
@@ -0,0 +1,9 @@
+{
+ "useTabs": true,
+ "singleQuote": true,
+ "trailingComma": "none",
+ "printWidth": 100,
+ "plugins": ["prettier-plugin-svelte"],
+ "pluginSearchDirs": ["."],
+ "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
+}
diff --git a/ui/.svelte-kit/ambient.d.ts b/ui/.svelte-kit/ambient.d.ts
new file mode 100644
index 000000000..574677aae
--- /dev/null
+++ b/ui/.svelte-kit/ambient.d.ts
@@ -0,0 +1,221 @@
+
+// this file is generated — do not edit it
+
+
+///
+
+/**
+ * Environment variables [loaded by Vite](https://vitejs.dev/guide/env-and-mode.html#env-files) from `.env` files and `process.env`. Like [`$env/dynamic/private`](https://kit.svelte.dev/docs/modules#$env-dynamic-private), this module cannot be imported into client-side code. This module only includes variables that _do not_ begin with [`config.kit.env.publicPrefix`](https://kit.svelte.dev/docs/configuration#env) _and do_ start with [`config.kit.env.privatePrefix`](https://kit.svelte.dev/docs/configuration#env) (if configured).
+ *
+ * _Unlike_ [`$env/dynamic/private`](https://kit.svelte.dev/docs/modules#$env-dynamic-private), the values exported from this module are statically injected into your bundle at build time, enabling optimisations like dead code elimination.
+ *
+ * ```ts
+ * import { API_KEY } from '$env/static/private';
+ * ```
+ *
+ * Note that all environment variables referenced in your code should be declared (for example in an `.env` file), even if they don't have a value until the app is deployed:
+ *
+ * ```
+ * MY_FEATURE_FLAG=""
+ * ```
+ *
+ * You can override `.env` values from the command line like so:
+ *
+ * ```bash
+ * MY_FEATURE_FLAG="enabled" npm run dev
+ * ```
+ */
+declare module '$env/static/private' {
+ export const SHELL: string;
+ export const npm_command: string;
+ export const LSCOLORS: string;
+ export const WINDOWID: string;
+ export const npm_config_userconfig: string;
+ export const COLORTERM: string;
+ export const npm_config_cache: string;
+ export const LESS: string;
+ export const NVM_INC: string;
+ export const CONDA_EXE: string;
+ export const _CE_M: string;
+ export const I3SOCK: string;
+ export const NODE: string;
+ export const COLOR: string;
+ export const npm_config_local_prefix: string;
+ export const KITTY_PID: string;
+ export const npm_config_globalconfig: string;
+ export const EDITOR: string;
+ export const GTK_MODULES: string;
+ export const XDG_SEAT: string;
+ export const PWD: string;
+ export const LOGNAME: string;
+ export const XDG_SESSION_TYPE: string;
+ export const npm_config_init_module: string;
+ export const _: string;
+ export const XAUTHORITY: string;
+ export const DESKTOP_STARTUP_ID: string;
+ export const KITTY_PUBLIC_KEY: string;
+ export const MOTD_SHOWN: string;
+ export const HOME: string;
+ export const LANG: string;
+ export const LS_COLORS: string;
+ export const npm_package_version: string;
+ export const KITTY_WINDOW_ID: string;
+ export const INIT_CWD: string;
+ export const npm_lifecycle_script: string;
+ export const NVM_DIR: string;
+ export const XDG_SESSION_CLASS: string;
+ export const TERMINFO: string;
+ export const TERM: string;
+ export const npm_package_name: string;
+ export const ZSH: string;
+ export const _CE_CONDA: string;
+ export const npm_config_prefix: string;
+ export const USER: string;
+ export const CONDA_SHLVL: string;
+ export const DISPLAY: string;
+ export const npm_lifecycle_event: string;
+ export const SHLVL: string;
+ export const NVM_CD_FLAGS: string;
+ export const PAGER: string;
+ export const XDG_VTNR: string;
+ export const XDG_SESSION_ID: string;
+ export const npm_config_user_agent: string;
+ export const npm_execpath: string;
+ export const CONDA_PYTHON_EXE: string;
+ export const XDG_RUNTIME_DIR: string;
+ export const DEBUGINFOD_URLS: string;
+ export const npm_package_json: string;
+ export const npm_config_noproxy: string;
+ export const PATH: string;
+ export const npm_config_metrics_registry: string;
+ export const npm_config_node_gyp: string;
+ export const DBUS_SESSION_BUS_ADDRESS: string;
+ export const npm_config_global_prefix: string;
+ export const NVM_BIN: string;
+ export const MAIL: string;
+ export const npm_config_scripts_prepend_node_path: string;
+ export const KITTY_INSTALLATION_DIR: string;
+ export const npm_node_execpath: string;
+ export const OLDPWD: string;
+ export const NODE_ENV: string;
+}
+
+/**
+ * Similar to [`$env/static/private`](https://kit.svelte.dev/docs/modules#$env-static-private), except that it only includes environment variables that begin with [`config.kit.env.publicPrefix`](https://kit.svelte.dev/docs/configuration#env) (which defaults to `PUBLIC_`), and can therefore safely be exposed to client-side code.
+ *
+ * Values are replaced statically at build time.
+ *
+ * ```ts
+ * import { PUBLIC_BASE_URL } from '$env/static/public';
+ * ```
+ */
+declare module '$env/static/public' {
+
+}
+
+/**
+ * This module provides access to runtime environment variables, as defined by the platform you're running on. For example if you're using [`adapter-node`](https://github.com/sveltejs/kit/tree/master/packages/adapter-node) (or running [`vite preview`](https://kit.svelte.dev/docs/cli)), this is equivalent to `process.env`. This module only includes variables that _do not_ begin with [`config.kit.env.publicPrefix`](https://kit.svelte.dev/docs/configuration#env) _and do_ start with [`config.kit.env.privatePrefix`](https://kit.svelte.dev/docs/configuration#env) (if configured).
+ *
+ * This module cannot be imported into client-side code.
+ *
+ * ```ts
+ * import { env } from '$env/dynamic/private';
+ * console.log(env.DEPLOYMENT_SPECIFIC_VARIABLE);
+ * ```
+ *
+ * > In `dev`, `$env/dynamic` always includes environment variables from `.env`. In `prod`, this behavior will depend on your adapter.
+ */
+declare module '$env/dynamic/private' {
+ export const env: {
+ SHELL: string;
+ npm_command: string;
+ LSCOLORS: string;
+ WINDOWID: string;
+ npm_config_userconfig: string;
+ COLORTERM: string;
+ npm_config_cache: string;
+ LESS: string;
+ NVM_INC: string;
+ CONDA_EXE: string;
+ _CE_M: string;
+ I3SOCK: string;
+ NODE: string;
+ COLOR: string;
+ npm_config_local_prefix: string;
+ KITTY_PID: string;
+ npm_config_globalconfig: string;
+ EDITOR: string;
+ GTK_MODULES: string;
+ XDG_SEAT: string;
+ PWD: string;
+ LOGNAME: string;
+ XDG_SESSION_TYPE: string;
+ npm_config_init_module: string;
+ _: string;
+ XAUTHORITY: string;
+ DESKTOP_STARTUP_ID: string;
+ KITTY_PUBLIC_KEY: string;
+ MOTD_SHOWN: string;
+ HOME: string;
+ LANG: string;
+ LS_COLORS: string;
+ npm_package_version: string;
+ KITTY_WINDOW_ID: string;
+ INIT_CWD: string;
+ npm_lifecycle_script: string;
+ NVM_DIR: string;
+ XDG_SESSION_CLASS: string;
+ TERMINFO: string;
+ TERM: string;
+ npm_package_name: string;
+ ZSH: string;
+ _CE_CONDA: string;
+ npm_config_prefix: string;
+ USER: string;
+ CONDA_SHLVL: string;
+ DISPLAY: string;
+ npm_lifecycle_event: string;
+ SHLVL: string;
+ NVM_CD_FLAGS: string;
+ PAGER: string;
+ XDG_VTNR: string;
+ XDG_SESSION_ID: string;
+ npm_config_user_agent: string;
+ npm_execpath: string;
+ CONDA_PYTHON_EXE: string;
+ XDG_RUNTIME_DIR: string;
+ DEBUGINFOD_URLS: string;
+ npm_package_json: string;
+ npm_config_noproxy: string;
+ PATH: string;
+ npm_config_metrics_registry: string;
+ npm_config_node_gyp: string;
+ DBUS_SESSION_BUS_ADDRESS: string;
+ npm_config_global_prefix: string;
+ NVM_BIN: string;
+ MAIL: string;
+ npm_config_scripts_prepend_node_path: string;
+ KITTY_INSTALLATION_DIR: string;
+ npm_node_execpath: string;
+ OLDPWD: string;
+ NODE_ENV: string;
+ [key: `PUBLIC_${string}`]: undefined;
+ [key: `${string}`]: string | undefined;
+ }
+}
+
+/**
+ * Similar to [`$env/dynamic/private`](https://kit.svelte.dev/docs/modules#$env-dynamic-private), but only includes variables that begin with [`config.kit.env.publicPrefix`](https://kit.svelte.dev/docs/configuration#env) (which defaults to `PUBLIC_`), and can therefore safely be exposed to client-side code.
+ *
+ * Note that public dynamic environment variables must all be sent from the server to the client, causing larger network requests — when possible, use `$env/static/public` instead.
+ *
+ * ```ts
+ * import { env } from '$env/dynamic/public';
+ * console.log(env.PUBLIC_DEPLOYMENT_SPECIFIC_VARIABLE);
+ * ```
+ */
+declare module '$env/dynamic/public' {
+ export const env: {
+ [key: `PUBLIC_${string}`]: string | undefined;
+ }
+}
diff --git a/ui/.svelte-kit/generated/client/app.js b/ui/.svelte-kit/generated/client/app.js
new file mode 100644
index 000000000..f2f11388a
--- /dev/null
+++ b/ui/.svelte-kit/generated/client/app.js
@@ -0,0 +1,21 @@
+export { matchers } from './matchers.js';
+
+export const nodes = [
+ () => import('./nodes/0'),
+ () => import('./nodes/1'),
+ () => import('./nodes/2'),
+ () => import('./nodes/3')
+];
+
+export const server_loads = [];
+
+export const dictionary = {
+ "/": [2],
+ "/offers/[token]": [3]
+ };
+
+export const hooks = {
+ handleError: (({ error }) => { console.error(error) }),
+};
+
+export { default as root } from '../root.svelte';
\ No newline at end of file
diff --git a/ui/.svelte-kit/generated/client/matchers.js b/ui/.svelte-kit/generated/client/matchers.js
new file mode 100644
index 000000000..f6bd30a4e
--- /dev/null
+++ b/ui/.svelte-kit/generated/client/matchers.js
@@ -0,0 +1 @@
+export const matchers = {};
\ No newline at end of file
diff --git a/ui/.svelte-kit/generated/client/nodes/0.js b/ui/.svelte-kit/generated/client/nodes/0.js
new file mode 100644
index 000000000..fed1375f7
--- /dev/null
+++ b/ui/.svelte-kit/generated/client/nodes/0.js
@@ -0,0 +1 @@
+export { default as component } from "../../../../src/routes/+layout.svelte";
\ No newline at end of file
diff --git a/ui/.svelte-kit/generated/client/nodes/1.js b/ui/.svelte-kit/generated/client/nodes/1.js
new file mode 100644
index 000000000..35bc24b38
--- /dev/null
+++ b/ui/.svelte-kit/generated/client/nodes/1.js
@@ -0,0 +1 @@
+export { default as component } from "../../../../node_modules/@sveltejs/kit/src/runtime/components/error.svelte";
\ No newline at end of file
diff --git a/ui/.svelte-kit/generated/client/nodes/2.js b/ui/.svelte-kit/generated/client/nodes/2.js
new file mode 100644
index 000000000..1cb4f8552
--- /dev/null
+++ b/ui/.svelte-kit/generated/client/nodes/2.js
@@ -0,0 +1 @@
+export { default as component } from "../../../../src/routes/+page.svelte";
\ No newline at end of file
diff --git a/ui/.svelte-kit/generated/client/nodes/3.js b/ui/.svelte-kit/generated/client/nodes/3.js
new file mode 100644
index 000000000..01cb8622b
--- /dev/null
+++ b/ui/.svelte-kit/generated/client/nodes/3.js
@@ -0,0 +1,3 @@
+import * as universal from "../../../../src/routes/offers/[token]/+page.ts";
+export { universal };
+export { default as component } from "../../../../src/routes/offers/[token]/+page.svelte";
\ No newline at end of file
diff --git a/ui/.svelte-kit/generated/client/nodes/4.js b/ui/.svelte-kit/generated/client/nodes/4.js
new file mode 100644
index 000000000..fa9132006
--- /dev/null
+++ b/ui/.svelte-kit/generated/client/nodes/4.js
@@ -0,0 +1 @@
+export { default as component } from "../../../../src/routes/pairs/+page.svelte";
\ No newline at end of file
diff --git a/ui/.svelte-kit/generated/root.svelte b/ui/.svelte-kit/generated/root.svelte
new file mode 100644
index 000000000..e0615652c
--- /dev/null
+++ b/ui/.svelte-kit/generated/root.svelte
@@ -0,0 +1,54 @@
+
+
+
+{#if constructors[1]}
+
+
+
+{:else}
+
+{/if}
+
+{#if mounted}
+
+ {#if navigated}
+ {title}
+ {/if}
+
+{/if}
\ No newline at end of file
diff --git a/ui/.svelte-kit/generated/server/internal.js b/ui/.svelte-kit/generated/server/internal.js
new file mode 100644
index 000000000..8487449e8
--- /dev/null
+++ b/ui/.svelte-kit/generated/server/internal.js
@@ -0,0 +1,30 @@
+
+import root from '../root.svelte';
+import { set_building } from '__sveltekit/environment';
+import { set_assets } from '__sveltekit/paths';
+import { set_private_env, set_public_env } from '../../../node_modules/@sveltejs/kit/src/runtime/shared-server.js';
+
+export const options = {
+ app_template_contains_nonce: false,
+ csp: {"mode":"auto","directives":{"upgrade-insecure-requests":false,"block-all-mixed-content":false},"reportOnly":{"upgrade-insecure-requests":false,"block-all-mixed-content":false}},
+ csrf_check_origin: true,
+ track_server_fetches: false,
+ embedded: false,
+ env_public_prefix: 'PUBLIC_',
+ env_private_prefix: '',
+ hooks: null, // added lazily, via `get_hooks`
+ preload_strategy: "modulepreload",
+ root,
+ service_worker: false,
+ templates: {
+ app: ({ head, body, assets, nonce, env }) => "\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t" + head + "\n\t\n\t\n\t\t" + body + "
\n\t\n\n",
+ error: ({ status, message }) => "\n\n\t\n\t\t\n\t\t" + message + "\n\n\t\t\n\t\n\t\n\t\t\n\t\t\t
" + status + "\n\t\t\t
\n\t\t\t\t
" + message + "
\n\t\t\t\n\t\t
\n\t\n\n"
+ },
+ version_hash: "cgqvn8"
+};
+
+export function get_hooks() {
+ return {};
+}
+
+export { set_assets, set_building, set_private_env, set_public_env };
diff --git a/ui/.svelte-kit/tsconfig.json b/ui/.svelte-kit/tsconfig.json
new file mode 100644
index 000000000..d5b888f04
--- /dev/null
+++ b/ui/.svelte-kit/tsconfig.json
@@ -0,0 +1,46 @@
+{
+ "compilerOptions": {
+ "paths": {
+ "$lib": [
+ "../src/lib"
+ ],
+ "$lib/*": [
+ "../src/lib/*"
+ ]
+ },
+ "rootDirs": [
+ "..",
+ "./types"
+ ],
+ "importsNotUsedAsValues": "error",
+ "isolatedModules": true,
+ "preserveValueImports": true,
+ "lib": [
+ "esnext",
+ "DOM",
+ "DOM.Iterable"
+ ],
+ "moduleResolution": "node",
+ "module": "esnext",
+ "target": "esnext",
+ "ignoreDeprecations": "5.0"
+ },
+ "include": [
+ "ambient.d.ts",
+ "./types/**/$types.d.ts",
+ "../vite.config.ts",
+ "../src/**/*.js",
+ "../src/**/*.ts",
+ "../src/**/*.svelte",
+ "../tests/**/*.js",
+ "../tests/**/*.ts",
+ "../tests/**/*.svelte"
+ ],
+ "exclude": [
+ "../node_modules/**",
+ "./[!ambient.d.ts]**",
+ "../src/service-worker.js",
+ "../src/service-worker.ts",
+ "../src/service-worker.d.ts"
+ ]
+}
\ No newline at end of file
diff --git a/ui/jsconfig.json b/ui/jsconfig.json
deleted file mode 100644
index 5696a2de7..000000000
--- a/ui/jsconfig.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "compilerOptions": {
- "moduleResolution": "bundler",
- "target": "ESNext",
- "module": "ESNext",
- /**
- * svelte-preprocess cannot figure out whether you have
- * a value or a type, so tell TypeScript to enforce using
- * `import type` instead of `import` for Types.
- */
- "verbatimModuleSyntax": true,
- "isolatedModules": true,
- "resolveJsonModule": true,
- /**
- * To have warnings / errors of the Svelte compiler at the
- * correct position, enable source maps by default.
- */
- "sourceMap": true,
- "esModuleInterop": true,
- "skipLibCheck": true,
- /**
- * Typecheck JS in `.svelte` and `.js` files by default.
- * Disable this if you'd like to use dynamic types.
- */
- "checkJs": true
- },
- /**
- * Use global.d.ts instead of compilerOptions.types
- * to avoid limiting type declarations.
- */
- "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"]
-}
diff --git a/ui/package.json b/ui/package.json
index 97fad3245..dead283f1 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -4,20 +4,36 @@
"version": "0.0.1",
"type": "module",
"scripts": {
- "dev": "vite",
+ "dev": "vite dev",
"build": "vite build",
- "preview": "vite preview"
+ "preview": "vite preview",
+ "test": "npm run test:integration && npm run test:unit",
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
+ "test:integration": "playwright test",
+ "test:unit": "vitest",
+ "lint": "prettier --plugin-search-dir . --check .",
+ "format": "prettier --plugin-search-dir . --write ."
},
"devDependencies": {
+ "@playwright/test": "^1.28.1",
+ "@sveltejs/adapter-auto": "^2.1.0",
+ "@sveltejs/kit": "^1.20.4",
"@sveltejs/vite-plugin-svelte": "^2.0.3",
"autoprefixer": "^10.4.14",
- "postcss": "^8.4.23",
+ "postcss": "^8.4.24",
"postcss-load-config": "^4.0.1",
- "svelte": "^3.57.0",
+ "prettier": "^2.8.0",
+ "prettier-plugin-svelte": "^2.10.1",
+ "svelte": "^4.0.0",
+ "svelte-check": "^3.4.3",
"svelte-heros-v2": "^0.4.2",
"svelte-preprocess": "^5.0.3",
"tailwindcss": "^3.3.1",
- "vite": "^4.3.5"
+ "tslib": "^2.4.1",
+ "typescript": "^5.0.0",
+ "vite": "^4.3.6",
+ "vitest": "^0.32.2"
},
"dependencies": {
"@popperjs/core": "^2.11.7",
diff --git a/ui/playwright.config.ts b/ui/playwright.config.ts
new file mode 100644
index 000000000..1c5d7a1fd
--- /dev/null
+++ b/ui/playwright.config.ts
@@ -0,0 +1,12 @@
+import type { PlaywrightTestConfig } from '@playwright/test';
+
+const config: PlaywrightTestConfig = {
+ webServer: {
+ command: 'npm run build && npm run preview',
+ port: 4173
+ },
+ testDir: 'tests',
+ testMatch: /(.+\.)?(test|spec)\.[jt]s/
+};
+
+export default config;
diff --git a/ui/postcss.config.cjs b/ui/postcss.config.cjs
index e48cff588..10264312e 100644
--- a/ui/postcss.config.cjs
+++ b/ui/postcss.config.cjs
@@ -4,8 +4,8 @@ const autoprefixer = require("autoprefixer");
const config = {
plugins: [
//Some plugins, like tailwindcss/nesting, need to run before Tailwind,
- tailwindcss(),
- //But others, like autoprefixer, need to run after,
+ tailwindcss(), //But others, like autoprefixer, need to run after,
+ autoprefixer,
autoprefixer,
],
};
diff --git a/ui/src/App.svelte b/ui/src/App.svelte
index de84ff9fe..9e97628dc 100644
--- a/ui/src/App.svelte
+++ b/ui/src/App.svelte
@@ -2,14 +2,11 @@
import svelteLogo from './assets/svelte.svg'
import viteLogo from '/vite.svg'
import Navbar from './lib/Navbar.svelte'
- import OffersTable from './lib/OffersTable.svelte'
- import TakeDealDialog from './lib/TakeDealDialog.svelte'
+ import Offers from './lib/Offers.svelte'
-
-
\ No newline at end of file
+
diff --git a/ui/src/lib/OffersTable.svelte b/ui/src/lib/OffersTable.svelte
index dbc06bb15..f03065daf 100644
--- a/ui/src/lib/OffersTable.svelte
+++ b/ui/src/lib/OffersTable.svelte
@@ -1,33 +1,37 @@
-
- ETH / XMR
+
+ {tokenInfo.symbol} / XMR
-
- {sortedOffers.length} Offers
-
+ { count } Offers
{#if sortedOffers.length > 0}
-
+
Peer
Offer Id
@@ -55,8 +59,8 @@
{offer.offerID.slice(0,8)}
{offer.exchangeRate}
- {offer.minAmount}
- {offer.maxAmount}
+ {Number(offer.minAmount)}
+ {Number(offer.maxAmount)}
@@ -81,4 +85,4 @@
:global(.identicon > canvas) {
border-radius: 50%;
}
-
\ No newline at end of file
+
diff --git a/ui/src/lib/TakeDealDialog.svelte b/ui/src/lib/TakeDealDialog.svelte
index 5a8297cda..348dd527a 100644
--- a/ui/src/lib/TakeDealDialog.svelte
+++ b/ui/src/lib/TakeDealDialog.svelte
@@ -2,6 +2,7 @@
import type { CancelResult } from '../types/Cancel'
import type { NetTakeOfferSyncResult } from '../types/NetTakeOfferSync'
import { getCorrespondingToken, rpcRequest, getPort } from '../utils'
+ import type { TokenInfo } from '../types'
import { selectedOffer } from '../stores/offerStore'
import { getPeers } from '../stores/peerStore'
//import { currentAccount, sign } from '../stores/metamask'
@@ -11,6 +12,7 @@
import { Badge, Label, Input, Helper, InputAddon, ButtonGroup, Spinner } from 'flowbite-svelte'
import { CheckSolid, XmarkSolid } from 'svelte-awesome-icons';
+ import TokenIcon from '$lib/TokenIcon.svelte';
import eth from '../assets/coins/eth.png'
@@ -25,6 +27,8 @@
let swapError = ''
let swapStatus = ''
+ export let tokenInfo: TokenInfo
+
$: willReceive =
amountProvided && amountProvided > 0 && $selectedOffer?.exchangeRate
? amountProvided / $selectedOffer.exchangeRate
@@ -146,7 +150,7 @@
diff --git a/ui/src/lib/TokenIcon.svelte b/ui/src/lib/TokenIcon.svelte
new file mode 100644
index 000000000..57d8557a3
--- /dev/null
+++ b/ui/src/lib/TokenIcon.svelte
@@ -0,0 +1,27 @@
+
+
+
+
+
+
diff --git a/ui/src/routes/+layout.svelte b/ui/src/routes/+layout.svelte
new file mode 100644
index 000000000..a015cff7a
--- /dev/null
+++ b/ui/src/routes/+layout.svelte
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/ui/src/routes/+page.svelte b/ui/src/routes/+page.svelte
new file mode 100644
index 000000000..0035fae50
--- /dev/null
+++ b/ui/src/routes/+page.svelte
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Pairs
+
+ {$pairs.length} Pairs
+
+
+
+
+ Reported Liquidity
+
+ {$liquidity} XMR
+
+
+
+
+ Offers
+
+ {$offers}
+
+
+
+
+ {#if filteredPairs.length > 0}
+
+
+ Ticker
+ Reported Liquidity
+ Offers
+
+
+
+ {#each filteredPairs as pair (pair.token.symbol)}
+
+
+
+
+
{pair.token.symbol}
+ {#if pair.verified}
+
Verified
+ {:else}
+
Unverified
+ {/if}
+
+
+
+ {pair.reportedLiquidityXmr.toLocaleString()} XMR
+
+ {pair.offers}
+
+
+
+
+
+
+ {/each}
+
+
+ {:else}
+
No pairs found.
+ {/if}
+
+
+
diff --git a/ui/src/routes/offers/[token]/+page.svelte b/ui/src/routes/offers/[token]/+page.svelte
new file mode 100644
index 000000000..413755203
--- /dev/null
+++ b/ui/src/routes/offers/[token]/+page.svelte
@@ -0,0 +1,32 @@
+
+
+
+ {#if offers }
+ {#await tokenInfoPromise}
+
+ {:then token}
+
+
+ {:catch error}
+
+
{error.message}
+ {/await}
+ {:else}
+
loading...
+ {/if}
+
diff --git a/ui/src/routes/offers/[token]/+page.ts b/ui/src/routes/offers/[token]/+page.ts
new file mode 100644
index 000000000..9956bd8ff
--- /dev/null
+++ b/ui/src/routes/offers/[token]/+page.ts
@@ -0,0 +1,9 @@
+import { error } from '@sveltejs/kit';
+import type { PageLoad } from './$types';
+import { offers, selectedOffer, refreshOffers } from '../../../stores/offerStore'
+
+export const load = (async ({ params }) => {
+ return {
+ token: params.token.toUpperCase()
+ }
+}) satisfies PageLoad;
\ No newline at end of file
diff --git a/ui/src/stores/offerStore.ts b/ui/src/stores/offerStore.ts
index e8d84fdbe..427ab1338 100644
--- a/ui/src/stores/offerStore.ts
+++ b/ui/src/stores/offerStore.ts
@@ -1,8 +1,9 @@
import { rpcRequest } from '../utils';
-import { derived, Readable, writable } from 'svelte/store';
+import { derived, writable } from 'svelte/store';
+import type { Readable } from 'svelte/store'
import { peers } from './peerStore'
-import type { NetQueryPeerResult, Offer } from 'src/types';
-import { intToHexString } from 'src/utils';
+import type { NetQueryPeerResult, Offer } from '../types';
+import { intToHexString } from '../utils';
export const isLoadingOffers = writable(false)
export const selectedOffer = writable()
@@ -10,8 +11,7 @@ export const selectedOffer = writable()
export const offers = derived, Offer[]>(
peers,
($peers, set) => {
- refreshOffers($peers)
- .then(off => set(off))
+ refreshOffers($peers).then(off => set(off))
},
[]
)
@@ -27,12 +27,16 @@ export const refreshOffers = ($peers: string[]) =>
export const getOffers = async (peerAddress: string) => {
isLoadingOffers.set(true)
return rpcRequest('net_queryPeer', { "peerID": peerAddress })
- .then(({ result }): Offer[] =>
- result?.offers.map(offer => ({
+ .then(({ result }): Offer[] => {
+ return result?.offers.map(offer => ({
peerID: peerAddress,
...offer
})) || []
- )
+ })
.catch(console.error)
.finally(() => isLoadingOffers.set(false))
-}
\ No newline at end of file
+}
+
+
+
+
diff --git a/ui/src/stores/pairStore.ts b/ui/src/stores/pairStore.ts
new file mode 100644
index 000000000..4292f9ea1
--- /dev/null
+++ b/ui/src/stores/pairStore.ts
@@ -0,0 +1,25 @@
+import { rpcRequest } from '../utils';
+import { writable } from 'svelte/store';
+import type { Pair, NetPairResults } from '../types/NetPairResults';
+
+export const isLoadingPairs = writable(false)
+export const pairs = writable([], () => {
+ getPairs()
+});
+
+export const liquidity = writable(0)
+export const offers = writable(0)
+
+export const getPairs = () => {
+ isLoadingPairs.set(true)
+ return rpcRequest('net_pairs', { searchTime: 3 })
+ .then(({ result }) => {
+ pairs.set(result.Pairs)
+ liquidity.set(result.Pairs.reduce((acc, a) => acc += Number(a.reportedLiquidityXmr), 0))
+ offers.set(result.Pairs.reduce((acc, a) => acc += a.offers, 0))
+ })
+ .catch(console.error)
+ .finally(() => {
+ isLoadingPairs.set(false)
+ })
+}
diff --git a/ui/src/types/NetPairResults.ts b/ui/src/types/NetPairResults.ts
new file mode 100644
index 000000000..deb29a10c
--- /dev/null
+++ b/ui/src/types/NetPairResults.ts
@@ -0,0 +1,16 @@
+export interface Pair {
+ ethAsset: String,
+ token: {
+ address: String,
+ decimals: Number,
+ name: String,
+ symbol: String,
+ },
+ verified: Boolean,
+ offers: Number,
+ reportedLiquidityXmr: Number,
+}
+
+export interface NetPairResults {
+ Pairs: Pair[]
+}
diff --git a/ui/src/types/NetQueryPeerResults.ts b/ui/src/types/NetQueryPeerResults.ts
index be97e1ce0..2c134d73c 100644
--- a/ui/src/types/NetQueryPeerResults.ts
+++ b/ui/src/types/NetQueryPeerResults.ts
@@ -1,4 +1,4 @@
-export type Currency = 'ETH' | 'XMR'
+export type Currency = String
export interface OfferRaw {
offerID: String
diff --git a/ui/src/types/PersonalTokenInfoResult.ts b/ui/src/types/PersonalTokenInfoResult.ts
new file mode 100644
index 000000000..08b501ada
--- /dev/null
+++ b/ui/src/types/PersonalTokenInfoResult.ts
@@ -0,0 +1,6 @@
+export interface TokenInfo {
+ address: String
+ decimals: Number
+ name: String
+ symbol: String
+}
diff --git a/ui/src/types/index.ts b/ui/src/types/index.ts
index ae0c726aa..36ae4f289 100644
--- a/ui/src/types/index.ts
+++ b/ui/src/types/index.ts
@@ -3,6 +3,7 @@ import type { Currency } from "./NetQueryPeerResults"
export type { NetAddressesResult } from "./NetAddressResult"
export type { NetDiscoverResult } from "./NetDiscoverResults"
export type { OfferRaw, NetQueryPeerResult, Currency } from "./NetQueryPeerResults"
+export type { TokenInfo } from "./PersonalTokenInfoResult"
export interface Offer {
peerID: String
@@ -14,4 +15,4 @@ export interface Offer {
version: String
ethAsset: Currency
nonce: Number
-}
\ No newline at end of file
+}
diff --git a/ui/src/utils/getTokenInfo.ts b/ui/src/utils/getTokenInfo.ts
new file mode 100644
index 000000000..4e2a85ba8
--- /dev/null
+++ b/ui/src/utils/getTokenInfo.ts
@@ -0,0 +1,10 @@
+import { rpcRequest } from './rpcApi';
+import type { TokenInfo } from '../types/PersonalTokenInfoResult';
+
+export const getTokenInfo = async (address: String): Promise => {
+ return rpcRequest('personal_tokenInfo', { "tokenAddr": address })
+ .then(({ result }): TokenInfo | undefined => {
+ return result
+ })
+ .catch(console.error)
+}
diff --git a/ui/src/utils/index.ts b/ui/src/utils/index.ts
index e6e291c55..134e33e79 100644
--- a/ui/src/utils/index.ts
+++ b/ui/src/utils/index.ts
@@ -1,3 +1,13 @@
export { rpcRequest, getPort } from './rpcApi'
export { intToHexString } from './intToHexString'
-export { getCorrespondingToken } from './getCorrespondingToken'
\ No newline at end of file
+export { getCorrespondingToken } from './getCorrespondingToken'
+export { getTokenInfo } from './getTokenInfo'
+
+import type { TokenInfo } from '../types/PersonalTokenInfoResult'
+
+export const EthTokenInfo: TokenInfo = {
+ address: "0x0000000000000000000000000000000000000000",
+ decimals: 18,
+ name: "Ether",
+ symbol: "ETH",
+}
diff --git a/ui/svelte.config.js b/ui/svelte.config.js
index 3e37c649b..db566e90c 100644
--- a/ui/svelte.config.js
+++ b/ui/svelte.config.js
@@ -1,15 +1,18 @@
-import preprocess from "svelte-preprocess";
-import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";
+import adapter from '@sveltejs/adapter-auto';
+import { vitePreprocess } from '@sveltejs/kit/vite';
-export default {
- // Consult https://svelte.dev/docs#compile-time-svelte-preprocess
- // for more information about preprocessors
- preprocess: [
- vitePreprocess(),
- /*
- preprocess({
- postcss: true,
- }),
- */
- ],
+/** @type {import('@sveltejs/kit').Config} */
+const config = {
+ // Consult https://kit.svelte.dev/docs/integrations#preprocessors
+ // for more information about preprocessors
+ preprocess: vitePreprocess(),
+
+ kit: {
+ // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
+ // If your environment is not supported or you settled on a specific environment, switch out the adapter.
+ // See https://kit.svelte.dev/docs/adapters for more information about adapters.
+ adapter: adapter()
+ }
};
+
+export default config;
\ No newline at end of file
diff --git a/ui/tailwind.config.cjs b/ui/tailwind.config.cjs
index 64c6b2919..57305c6d6 100644
--- a/ui/tailwind.config.cjs
+++ b/ui/tailwind.config.cjs
@@ -9,69 +9,6 @@ const config = {
colors: {
// flowbite-svelte
primary: {50:'#ebf5ff',100: '#fff1ee',200:'#ffe4de',300:'#ffd5cc',400:'#ffbcad',500:'#fe795d',600:'#ef562f',700:'#eb4f27',800:'#d3330a',900:'#d3330a'}
-
- // pink
- // primary: {"50":"#fdf2f8","100":"#fce7f3","200":"#fbcfe8","300":"#f9a8d4","400":"#f472b6","500":"#ec4899","600":"#db2777","700":"#be185d","800":"#9d174d","900":"#831843"}
-
- // fuchsia
- // primary: {"50":"#fdf4ff","100":"#fae8ff","200":"#f5d0fe","300":"#f0abfc","400":"#e879f9","500":"#d946ef","600":"#c026d3","700":"#a21caf","800":"#86198f","900":"#701a75"}
-
- // purple
- // primary: {"50":"#faf5ff","100":"#f3e8ff","200":"#e9d5ff","300":"#d8b4fe","400":"#c084fc","500":"#a855f7","600":"#9333ea","700":"#7e22ce","800":"#6b21a8","900":"#581c87"}
-
- // violet
- // primary: {"50":"#f5f3ff","100":"#ede9fe","200":"#ddd6fe","300":"#c4b5fd","400":"#a78bfa","500":"#8b5cf6","600":"#7c3aed","700":"#6d28d9","800":"#5b21b6","900":"#4c1d95"}
-
- // indigo
- // primary: {"50":"#eef2ff","100":"#e0e7ff","200":"#c7d2fe","300":"#a5b4fc","400":"#818cf8","500":"#6366f1","600":"#4f46e5","700":"#4338ca","800":"#3730a3","900":"#312e81"}
-
- // blue
- // primary: {"50":"#eff6ff","100":"#dbeafe","200":"#bfdbfe","300":"#93c5fd","400":"#60a5fa","500":"#3b82f6","600":"#2563eb","700":"#1d4ed8","800":"#1e40af","900":"#1e3a8a"}
-
- // sky
- // primary: {"50":"#f0f9ff","100":"#e0f2fe","200":"#bae6fd","300":"#7dd3fc","400":"#38bdf8","500":"#0ea5e9","600":"#0284c7","700":"#0369a1","800":"#075985","900":"#0c4a6e"}
-
- // cyan
- // primary: {"50":"#ecfeff","100":"#cffafe","200":"#a5f3fc","300":"#67e8f9","400":"#22d3ee","500":"#06b6d4","600":"#0891b2","700":"#0e7490","800":"#155e75","900":"#164e63"}
-
- // teal
- // primary: {"50":"#f0fdfa","100":"#ccfbf1","200":"#99f6e4","300":"#5eead4","400":"#2dd4bf","500":"#14b8a6","600":"#0d9488","700":"#0f766e","800":"#115e59","900":"#134e4a"}
-
- // emerald
- // primary: {"50":"#ecfdf5","100":"#d1fae5","200":"#a7f3d0","300":"#6ee7b7","400":"#34d399","500":"#10b981","600":"#059669","700":"#047857","800":"#065f46","900":"#064e3b"}
-
- // green
- // primary: {"50":"#f0fdf4","100":"#dcfce7","200":"#bbf7d0","300":"#86efac","400":"#4ade80","500":"#22c55e","600":"#16a34a","700":"#15803d","800":"#166534","900":"#14532d"}
-
- // lime
- // primary: {"50":"#f7fee7","100":"#ecfccb","200":"#d9f99d","300":"#bef264","400":"#a3e635","500":"#84cc16","600":"#65a30d","700":"#4d7c0f","800":"#3f6212","900":"#365314"}
-
- // yellow
- // primary: {"50":"#fefce8","100":"#fef9c3","200":"#fef08a","300":"#fde047","400":"#facc15","500":"#eab308","600":"#ca8a04","700":"#a16207","800":"#854d0e","900":"#713f12"}
-
- // amber
- // primary: {"50":"#fffbeb","100":"#fef3c7","200":"#fde68a","300":"#fcd34d","400":"#fbbf24","500":"#f59e0b","600":"#d97706","700":"#b45309","800":"#92400e","900":"#78350f"}
-
- // orange
- // primary: {"50":"#fff7ed","100":"#ffedd5","200":"#fed7aa","300":"#fdba74","400":"#fb923c","500":"#f97316","600":"#ea580c","700":"#c2410c","800":"#9a3412","900":"#7c2d12"}
-
- // red
- // primary: {"50":"#fef2f2","100":"#fee2e2","200":"#fecaca","300":"#fca5a5","400":"#f87171","500":"#ef4444","600":"#dc2626","700":"#b91c1c","800":"#991b1b","900":"#7f1d1d"}
-
- // stone
- // primary: {"50":"#fafaf9","100":"#f5f5f4","200":"#e7e5e4","300":"#d6d3d1","400":"#a8a29e","500":"#78716c","600":"#57534e","700":"#44403c","800":"#292524","900":"#1c1917"}
-
- // neutral
- // primary: {"50":"#fafafa","100":"#f5f5f5","200":"#e5e5e5","300":"#d4d4d4","400":"#a3a3a3","500":"#737373","600":"#525252","700":"#404040","800":"#262626","900":"#171717"}
-
- // zinc
- // primary: {"50":"#fafafa","100":"#f4f4f5","200":"#e4e4e7","300":"#d4d4d8","400":"#a1a1aa","500":"#71717a","600":"#52525b","700":"#3f3f46","800":"#27272a","900":"#18181b"}
-
- // gray
- // primary: {"50":"#f9fafb","100":"#f3f4f6","200":"#e5e7eb","300":"#d1d5db","400":"#9ca3af","500":"#6b7280","600":"#4b5563","700":"#374151","800":"#1f2937","900":"#111827"}
-
- // slate
- // primary: {"50":"#f8fafc","100":"#f1f5f9","200":"#e2e8f0","300":"#cbd5e1","400":"#94a3b8","500":"#64748b","600":"#475569","700":"#334155","800":"#1e293b","900":"#0f172a"}
}
}
},
@@ -82,4 +19,4 @@ const config = {
darkMode: 'class',
};
-module.exports = config;
\ No newline at end of file
+module.exports = config;
diff --git a/ui/tsconfig.json b/ui/tsconfig.json
new file mode 100644
index 000000000..6ae0c8c44
--- /dev/null
+++ b/ui/tsconfig.json
@@ -0,0 +1,17 @@
+{
+ "extends": "./.svelte-kit/tsconfig.json",
+ "compilerOptions": {
+ "allowJs": true,
+ "checkJs": true,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "resolveJsonModule": true,
+ "skipLibCheck": true,
+ "sourceMap": true,
+ "strict": true
+ }
+ // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
+ //
+ // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
+ // from the referenced tsconfig.json - TypeScript does not merge them in
+}
diff --git a/ui/vite.config.js b/ui/vite.config.js
deleted file mode 100644
index 53c6c5a89..000000000
--- a/ui/vite.config.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { defineConfig } from 'vite'
-import { svelte } from '@sveltejs/vite-plugin-svelte'
-
-// https://vitejs.dev/config/
-export default defineConfig({
- plugins: [svelte()],
- optimizeDeps: {
- exclude: ['js-big-decimal']
- }
-})
diff --git a/ui/vite.config.ts b/ui/vite.config.ts
new file mode 100644
index 000000000..37b6a84bc
--- /dev/null
+++ b/ui/vite.config.ts
@@ -0,0 +1,9 @@
+import { sveltekit } from '@sveltejs/kit/vite';
+import { defineConfig } from 'vitest/config';
+
+export default defineConfig({
+ plugins: [sveltekit()],
+ test: {
+ include: ['src/**/*.{test,spec}.{js,ts}']
+ }
+});
diff --git a/ui/yarn.lock b/ui/yarn.lock
index c1dfcf14d..92f93e309 100644
--- a/ui/yarn.lock
+++ b/ui/yarn.lock
@@ -135,6 +135,14 @@
resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
+"@ampproject/remapping@^2.2.1":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
+ integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.0"
+ "@jridgewell/trace-mapping" "^0.3.9"
+
"@docsearch/css@3.3.4":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.3.4.tgz#533719eac0aa3934318074e7e981e633727ad2fd"
@@ -158,118 +166,124 @@
"@docsearch/css" "3.3.4"
algoliasearch "^4.0.0"
-
-"@esbuild/android-arm64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd"
- integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==
-
-"@esbuild/android-arm@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d"
- integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==
-
-"@esbuild/android-x64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1"
- integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==
-
-"@esbuild/darwin-arm64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276"
- integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==
-
-"@esbuild/darwin-x64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb"
- integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==
-
-"@esbuild/freebsd-arm64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2"
- integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==
-
-"@esbuild/freebsd-x64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4"
- integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==
-
-"@esbuild/linux-arm64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb"
- integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==
-
-"@esbuild/linux-arm@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a"
- integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==
-
-"@esbuild/linux-ia32@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a"
- integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==
-
-"@esbuild/linux-loong64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72"
- integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==
-
-"@esbuild/linux-mips64el@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289"
- integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==
-
-"@esbuild/linux-ppc64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7"
- integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==
-
-"@esbuild/linux-riscv64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09"
- integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==
-
-"@esbuild/linux-s390x@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829"
- integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==
-
-"@esbuild/linux-x64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4"
- integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==
-
-"@esbuild/netbsd-x64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462"
- integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==
-
-"@esbuild/openbsd-x64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691"
- integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==
-
-"@esbuild/sunos-x64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273"
- integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==
-
-"@esbuild/win32-arm64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f"
- integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==
-
-"@esbuild/win32-ia32@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03"
- integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==
-
-"@esbuild/win32-x64@0.17.19":
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061"
- integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==
-
-"@jridgewell/gen-mapping@^0.3.2":
+"@esbuild/android-arm64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.11.tgz#fa6f0cc7105367cb79cc0a8bf32bf50cb1673e45"
+ integrity sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==
+
+"@esbuild/android-arm@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.11.tgz#ae84a410696c9f549a15be94eaececb860bacacb"
+ integrity sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==
+
+"@esbuild/android-x64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.11.tgz#0e58360bbc789ad0d68174d32ba20e678c2a16b6"
+ integrity sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==
+
+"@esbuild/darwin-arm64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.11.tgz#fcdcd2ef76ca656540208afdd84f284072f0d1f9"
+ integrity sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==
+
+"@esbuild/darwin-x64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.11.tgz#c5ac602ec0504a8ff81e876bc8a9811e94d69d37"
+ integrity sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==
+
+"@esbuild/freebsd-arm64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.11.tgz#7012fb06ee3e6e0d5560664a65f3fefbcc46db2e"
+ integrity sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==
+
+"@esbuild/freebsd-x64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.11.tgz#c5de1199f70e1f97d5c8fca51afa9bf9a2af5969"
+ integrity sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==
+
+"@esbuild/linux-arm64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.11.tgz#2a6d3a74e0b8b5f294e22b4515b29f76ebd42660"
+ integrity sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==
+
+"@esbuild/linux-arm@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.11.tgz#5175bd61b793b436e4aece6328aa0d9be07751e1"
+ integrity sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==
+
+"@esbuild/linux-ia32@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.11.tgz#20ee6cfd65a398875f321a485e7b2278e5f6f67b"
+ integrity sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==
+
+"@esbuild/linux-loong64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.11.tgz#8e7b251dede75083bf44508dab5edce3f49d052b"
+ integrity sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==
+
+"@esbuild/linux-mips64el@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.11.tgz#a3125eb48538ac4932a9d05089b157f94e443165"
+ integrity sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==
+
+"@esbuild/linux-ppc64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.11.tgz#842abadb7a0995bd539adee2be4d681b68279499"
+ integrity sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==
+
+"@esbuild/linux-riscv64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.11.tgz#7ce6e6cee1c72d5b4d2f4f8b6fcccf4a9bea0e28"
+ integrity sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==
+
+"@esbuild/linux-s390x@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.11.tgz#98fbc794363d02ded07d300df2e535650b297b96"
+ integrity sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==
+
+"@esbuild/linux-x64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.11.tgz#f8458ec8cf74c8274e4cacd00744d8446cac52eb"
+ integrity sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==
+
+"@esbuild/netbsd-x64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.11.tgz#a7b2f991b8293748a7be42eac1c4325faf0c7cca"
+ integrity sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==
+
+"@esbuild/openbsd-x64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.11.tgz#3e50923de84c54008f834221130fd23646072b2f"
+ integrity sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==
+
+"@esbuild/sunos-x64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.11.tgz#ae47a550b0cd395de03606ecfba03cc96c7c19e2"
+ integrity sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==
+
+"@esbuild/win32-arm64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.11.tgz#05d364582b7862d7fbf4698ef43644f7346dcfcc"
+ integrity sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==
+
+"@esbuild/win32-ia32@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.11.tgz#a3372095a4a1939da672156a3c104f8ce85ee616"
+ integrity sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==
+
+"@esbuild/win32-x64@0.18.11":
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.11.tgz#6526c7e1b40d5b9f0a222c6b767c22f6fb97aa57"
+ integrity sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==
+
+"@jest/schemas@^29.6.0":
+ version "29.6.0"
+ resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040"
+ integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==
+ dependencies:
+ "@sinclair/typebox" "^0.27.8"
+
+"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
version "0.3.3"
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
@@ -293,12 +307,12 @@
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
-"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14":
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15":
version "1.4.15"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
-"@jridgewell/trace-mapping@^0.3.9":
+"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9":
version "0.3.18"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
@@ -337,11 +351,63 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
+"@playwright/test@^1.28.1":
+ version "1.35.1"
+ resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.35.1.tgz#a596b61e15b980716696f149cc7a2002f003580c"
+ integrity sha512-b5YoFe6J9exsMYg0pQAobNDR85T1nLumUYgUTtKm4d21iX2L7WqKq9dW8NGJ+2vX0etZd+Y7UeuqsxDXm9+5ZA==
+ dependencies:
+ "@types/node" "*"
+ playwright-core "1.35.1"
+ optionalDependencies:
+ fsevents "2.3.2"
+
+"@polka/url@^1.0.0-next.20":
+ version "1.0.0-next.21"
+ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
+ integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
+
"@popperjs/core@^2.11.7", "@popperjs/core@^2.9.3":
version "2.11.7"
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.7.tgz#ccab5c8f7dc557a52ca3288c10075c9ccd37fff7"
integrity sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==
+"@sinclair/typebox@^0.27.8":
+ version "0.27.8"
+ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
+ integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
+
+"@sveltejs/adapter-auto@^2.1.0":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@sveltejs/adapter-auto/-/adapter-auto-2.1.0.tgz#cb36fd7081e3c4b1c9a9192b1a23c8c82dce8a1b"
+ integrity sha512-o2pZCfATFtA/Gw/BB0Xm7k4EYaekXxaPGER3xGSY3FvzFJGTlJlZjBseaXwYSM94lZ0HniOjTokN3cWaLX6fow==
+ dependencies:
+ import-meta-resolve "^3.0.0"
+
+"@sveltejs/kit@^1.20.4":
+ version "1.22.1"
+ resolved "https://registry.yarnpkg.com/@sveltejs/kit/-/kit-1.22.1.tgz#1429ae67f4cfe725adc25dad47e2271a39a0bab5"
+ integrity sha512-idFhKVEHuCKbTETvuo3V7UShqSYX9JMKVJXP546dOTkh5ZRejo5XtKtsB5TCSwNBa0TH8hIV44/bnylaFhM1Vg==
+ dependencies:
+ "@sveltejs/vite-plugin-svelte" "^2.4.1"
+ "@types/cookie" "^0.5.1"
+ cookie "^0.5.0"
+ devalue "^4.3.1"
+ esm-env "^1.0.0"
+ kleur "^4.1.5"
+ magic-string "^0.30.0"
+ mime "^3.0.0"
+ sade "^1.8.1"
+ set-cookie-parser "^2.6.0"
+ sirv "^2.0.2"
+ undici "~5.22.0"
+
+"@sveltejs/vite-plugin-svelte-inspector@^1.0.3":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.3.tgz#fdbf80b43bfaa20deaa5ff6d0676351aa9aecbcc"
+ integrity sha512-Khdl5jmmPN6SUsVuqSXatKpQTMIifoQPDanaxC84m9JxIibWvSABJyHpyys0Z+1yYrxY5TTEQm+6elh0XCMaOA==
+ dependencies:
+ debug "^4.3.4"
+
"@sveltejs/vite-plugin-svelte@^2.0.3":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.2.0.tgz#6e78e912dc0cff5e92bcb936f194e96b849356f9"
@@ -354,11 +420,104 @@
svelte-hmr "^0.15.1"
vitefu "^0.2.4"
+"@sveltejs/vite-plugin-svelte@^2.4.1":
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.2.tgz#04f9fb698853a6a681a2a7d32016487316c30917"
+ integrity sha512-ePfcC48ftMKhkT0OFGdOyycYKnnkT6i/buzey+vHRTR/JpQvuPzzhf1PtKqCDQfJRgoPSN2vscXs6gLigx/zGw==
+ dependencies:
+ "@sveltejs/vite-plugin-svelte-inspector" "^1.0.3"
+ debug "^4.3.4"
+ deepmerge "^4.3.1"
+ kleur "^4.1.5"
+ magic-string "^0.30.0"
+ svelte-hmr "^0.15.2"
+ vitefu "^0.2.4"
+
+"@types/chai-subset@^1.3.3":
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94"
+ integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==
+ dependencies:
+ "@types/chai" "*"
+
+"@types/chai@*", "@types/chai@^4.3.5":
+ version "4.3.5"
+ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b"
+ integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==
+
+"@types/cookie@^0.5.1":
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.5.1.tgz#b29aa1f91a59f35e29ff8f7cb24faf1a3a750554"
+ integrity sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==
+
+"@types/estree@*", "@types/estree@^1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194"
+ integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
+
+"@types/node@*":
+ version "20.4.0"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.0.tgz#01d637d1891e419bc85763b46f42809cd2d5addb"
+ integrity sha512-jfT7iTf/4kOQ9S7CHV9BIyRaQqHu67mOjsIQBC3BKZvzvUB6zLxEwJ6sBE3ozcvP8kF6Uk5PXN0Q+c0dfhGX0g==
+
"@types/pug@^2.0.6":
version "2.0.6"
resolved "https://registry.yarnpkg.com/@types/pug/-/pug-2.0.6.tgz#f830323c88172e66826d0bde413498b61054b5a6"
integrity sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==
+"@vitest/expect@0.32.4":
+ version "0.32.4"
+ resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.32.4.tgz#4aa4eec78112cdbe299834b965420d4fb3afa91d"
+ integrity sha512-m7EPUqmGIwIeoU763N+ivkFjTzbaBn0n9evsTOcde03ugy2avPs3kZbYmw3DkcH1j5mxhMhdamJkLQ6dM1bk/A==
+ dependencies:
+ "@vitest/spy" "0.32.4"
+ "@vitest/utils" "0.32.4"
+ chai "^4.3.7"
+
+"@vitest/runner@0.32.4":
+ version "0.32.4"
+ resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.32.4.tgz#2872c697994745f1b70e2bd6568236ad2d9eade6"
+ integrity sha512-cHOVCkiRazobgdKLnczmz2oaKK9GJOw6ZyRcaPdssO1ej+wzHVIkWiCiNacb3TTYPdzMddYkCgMjZ4r8C0JFCw==
+ dependencies:
+ "@vitest/utils" "0.32.4"
+ p-limit "^4.0.0"
+ pathe "^1.1.1"
+
+"@vitest/snapshot@0.32.4":
+ version "0.32.4"
+ resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.32.4.tgz#75166b1c772d018278a7f0e79f43f3eae813f5ae"
+ integrity sha512-IRpyqn9t14uqsFlVI2d7DFMImGMs1Q9218of40bdQQgMePwVdmix33yMNnebXcTzDU5eiV3eUsoxxH5v0x/IQA==
+ dependencies:
+ magic-string "^0.30.0"
+ pathe "^1.1.1"
+ pretty-format "^29.5.0"
+
+"@vitest/spy@0.32.4":
+ version "0.32.4"
+ resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.32.4.tgz#c3212bc60c1430c3b5c39d6a384a75458b8f1e80"
+ integrity sha512-oA7rCOqVOOpE6rEoXuCOADX7Lla1LIa4hljI2MSccbpec54q+oifhziZIJXxlE/CvI2E+ElhBHzVu0VEvJGQKQ==
+ dependencies:
+ tinyspy "^2.1.1"
+
+"@vitest/utils@0.32.4":
+ version "0.32.4"
+ resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.32.4.tgz#36283e3aa3f3b1a378e19493c7b3b9107dc4ea71"
+ integrity sha512-Gwnl8dhd1uJ+HXrYyV0eRqfmk9ek1ASE/LWfTCuWMw+d07ogHqp4hEAV28NiecimK6UY9DpSEPh+pXBA5gtTBg==
+ dependencies:
+ diff-sequences "^29.4.3"
+ loupe "^2.3.6"
+ pretty-format "^29.5.0"
+
+acorn-walk@^8.2.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
+ integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
+
+acorn@^8.8.2, acorn@^8.9.0:
+ version "8.10.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
+ integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
+
aes-js@4.0.0-beta.3:
version "4.0.0-beta.3"
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.3.tgz#da2253f0ff03a0b3a9e445c8cbdf78e7fda7d48c"
@@ -384,6 +543,11 @@ algoliasearch@^4.0.0:
"@algolia/requester-node-http" "4.17.0"
"@algolia/transporter" "4.17.0"
+ansi-styles@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
+ integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
+
any-promise@^1.0.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
@@ -402,6 +566,18 @@ arg@^5.0.2:
resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
+aria-query@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e"
+ integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==
+ dependencies:
+ dequal "^2.0.3"
+
+assertion-error@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
+ integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
+
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
@@ -428,6 +604,13 @@ axios@^1.4.0:
form-data "^4.0.0"
proxy-from-env "^1.1.0"
+axobject-query@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a"
+ integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==
+ dependencies:
+ dequal "^2.0.3"
+
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@@ -468,6 +651,23 @@ buffer-crc32@^0.2.5:
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
+busboy@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
+ integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==
+ dependencies:
+ streamsearch "^1.1.0"
+
+cac@^6.7.14:
+ version "6.7.14"
+ resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959"
+ integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
camelcase-css@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
@@ -478,7 +678,25 @@ caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001487.tgz#d882d1a34d89c11aea53b8cdc791931bdab5fe1b"
integrity sha512-83564Z3yWGqXsh2vaH/mhXfEM0wX+NlBCm1jYHOb97TrTWJEmPTccZgeLTPBUUb0PNVo+oomb7wkimZBIERClA==
-chokidar@^3.5.3:
+chai@^4.3.7:
+ version "4.3.7"
+ resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51"
+ integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==
+ dependencies:
+ assertion-error "^1.1.0"
+ check-error "^1.0.2"
+ deep-eql "^4.1.2"
+ get-func-name "^2.0.0"
+ loupe "^2.3.1"
+ pathval "^1.1.1"
+ type-detect "^4.0.5"
+
+check-error@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
+ integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==
+
+chokidar@^3.4.1, chokidar@^3.5.3:
version "3.5.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
@@ -498,6 +716,17 @@ classnames@^2.3.2:
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924"
integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==
+code-red@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/code-red/-/code-red-1.0.3.tgz#bbd3b0a27dc53c9af13f6756120a9dbcdd68a5f2"
+ integrity sha512-kVwJELqiILQyG5aeuyKFbdsI1fmQy1Cmf7dQ8eGmVuJoaRVdwey7WaMknr2ZFeVSYSKT0rExsa8EGw0aoI/1QQ==
+ dependencies:
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+ "@types/estree" "^1.0.0"
+ acorn "^8.8.2"
+ estree-walker "^3.0.3"
+ periscopic "^3.1.0"
+
combined-stream@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
@@ -515,6 +744,19 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+cookie@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
+ integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
+
+css-tree@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20"
+ integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==
+ dependencies:
+ mdn-data "2.0.30"
+ source-map-js "^1.0.1"
+
cssesc@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
@@ -527,6 +769,13 @@ debug@^4.3.4:
dependencies:
ms "2.1.2"
+deep-eql@^4.1.2:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d"
+ integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==
+ dependencies:
+ type-detect "^4.0.0"
+
deepmerge@^4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
@@ -537,16 +786,31 @@ delayed-stream@~1.0.0:
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+dequal@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
+ integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
+
detect-indent@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6"
integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==
+devalue@^4.3.1:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/devalue/-/devalue-4.3.2.tgz#cc44e4cf3872ac5a78229fbce3b77e57032727b5"
+ integrity sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==
+
didyoumean@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
+diff-sequences@^29.4.3:
+ version "29.4.3"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2"
+ integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==
+
dlv@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
@@ -562,39 +826,51 @@ es6-promise@^3.1.2:
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==
-esbuild@^0.17.5:
- version "0.17.19"
- resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955"
- integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==
+esbuild@^0.18.10:
+ version "0.18.11"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.11.tgz#cbf94dc3359d57f600a0dbf281df9b1d1b4a156e"
+ integrity sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==
optionalDependencies:
- "@esbuild/android-arm" "0.17.19"
- "@esbuild/android-arm64" "0.17.19"
- "@esbuild/android-x64" "0.17.19"
- "@esbuild/darwin-arm64" "0.17.19"
- "@esbuild/darwin-x64" "0.17.19"
- "@esbuild/freebsd-arm64" "0.17.19"
- "@esbuild/freebsd-x64" "0.17.19"
- "@esbuild/linux-arm" "0.17.19"
- "@esbuild/linux-arm64" "0.17.19"
- "@esbuild/linux-ia32" "0.17.19"
- "@esbuild/linux-loong64" "0.17.19"
- "@esbuild/linux-mips64el" "0.17.19"
- "@esbuild/linux-ppc64" "0.17.19"
- "@esbuild/linux-riscv64" "0.17.19"
- "@esbuild/linux-s390x" "0.17.19"
- "@esbuild/linux-x64" "0.17.19"
- "@esbuild/netbsd-x64" "0.17.19"
- "@esbuild/openbsd-x64" "0.17.19"
- "@esbuild/sunos-x64" "0.17.19"
- "@esbuild/win32-arm64" "0.17.19"
- "@esbuild/win32-ia32" "0.17.19"
- "@esbuild/win32-x64" "0.17.19"
+ "@esbuild/android-arm" "0.18.11"
+ "@esbuild/android-arm64" "0.18.11"
+ "@esbuild/android-x64" "0.18.11"
+ "@esbuild/darwin-arm64" "0.18.11"
+ "@esbuild/darwin-x64" "0.18.11"
+ "@esbuild/freebsd-arm64" "0.18.11"
+ "@esbuild/freebsd-x64" "0.18.11"
+ "@esbuild/linux-arm" "0.18.11"
+ "@esbuild/linux-arm64" "0.18.11"
+ "@esbuild/linux-ia32" "0.18.11"
+ "@esbuild/linux-loong64" "0.18.11"
+ "@esbuild/linux-mips64el" "0.18.11"
+ "@esbuild/linux-ppc64" "0.18.11"
+ "@esbuild/linux-riscv64" "0.18.11"
+ "@esbuild/linux-s390x" "0.18.11"
+ "@esbuild/linux-x64" "0.18.11"
+ "@esbuild/netbsd-x64" "0.18.11"
+ "@esbuild/openbsd-x64" "0.18.11"
+ "@esbuild/sunos-x64" "0.18.11"
+ "@esbuild/win32-arm64" "0.18.11"
+ "@esbuild/win32-ia32" "0.18.11"
+ "@esbuild/win32-x64" "0.18.11"
escalade@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+esm-env@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/esm-env/-/esm-env-1.0.0.tgz#b124b40b180711690a4cb9b00d16573391950413"
+ integrity sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==
+
+estree-walker@^3.0.0, estree-walker@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d"
+ integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==
+ dependencies:
+ "@types/estree" "^1.0.0"
+
ethers@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.3.0.tgz#c61efaafa2bd9a4d9f0c799d932ef3b5cd4bd37d"
@@ -618,6 +894,17 @@ fast-glob@^3.2.12:
merge2 "^1.3.0"
micromatch "^4.0.4"
+fast-glob@^3.2.7:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0"
+ integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
fastq@^1.6.0:
version "1.15.0"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
@@ -674,7 +961,7 @@ fs.realpath@^1.0.0:
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
-fsevents@~2.3.2:
+fsevents@2.3.2, fsevents@~2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
@@ -684,6 +971,11 @@ function-bind@^1.1.1:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+get-func-name@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
+ integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==
+
glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@@ -739,6 +1031,19 @@ identicon.js@^2.3.3:
resolved "https://registry.yarnpkg.com/identicon.js/-/identicon.js-2.3.3.tgz#c505b8d60ecc6ea13bbd991a33964c44c1ad60a1"
integrity sha512-/qgOkXKZ7YbeCYbawJ9uQQ3XJ3uBg9VDpvHjabCAPp6aRMhjLaFAxG90+1TxzrhKaj6AYpVGrx6UXQfQA41UEA==
+import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-meta-resolve@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz#94a6aabc623874fbc2f3525ec1300db71c6cbc11"
+ integrity sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==
+
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -783,11 +1088,23 @@ is-number@^7.0.0:
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+is-reference@^3.0.0, is-reference@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.1.tgz#d400f4260f7e55733955e60d361d827eb4d3b831"
+ integrity sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==
+ dependencies:
+ "@types/estree" "*"
+
jiti@^1.18.2:
version "1.18.2"
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd"
integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==
+jsonc-parser@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
+ integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
+
kleur@^4.1.5:
version "4.1.5"
resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780"
@@ -803,6 +1120,23 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+local-pkg@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963"
+ integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==
+
+locate-character@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-3.0.0.tgz#0305c5b8744f61028ef5d01f444009e00779f974"
+ integrity sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==
+
+loupe@^2.3.1, loupe@^2.3.6:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53"
+ integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==
+ dependencies:
+ get-func-name "^2.0.0"
+
magic-string@^0.27.0:
version "0.27.0"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3"
@@ -817,6 +1151,11 @@ magic-string@^0.30.0:
dependencies:
"@jridgewell/sourcemap-codec" "^1.4.13"
+mdn-data@2.0.30:
+ version "2.0.30"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc"
+ integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==
+
merge2@^1.3.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
@@ -842,6 +1181,11 @@ mime-types@^2.1.12:
dependencies:
mime-db "1.52.0"
+mime@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7"
+ integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==
+
min-indent@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
@@ -871,6 +1215,26 @@ mkdirp@^0.5.1:
dependencies:
minimist "^1.2.6"
+mlly@^1.2.0, mlly@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.0.tgz#830c10d63f1f97bd8785377b24dc2a15d972832b"
+ integrity sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==
+ dependencies:
+ acorn "^8.9.0"
+ pathe "^1.1.1"
+ pkg-types "^1.0.3"
+ ufo "^1.1.2"
+
+mri@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b"
+ integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==
+
+mrmime@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27"
+ integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==
+
ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
@@ -922,6 +1286,20 @@ once@^1.3.0:
dependencies:
wrappy "1"
+p-limit@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644"
+ integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==
+ dependencies:
+ yocto-queue "^1.0.0"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
@@ -932,6 +1310,25 @@ path-parse@^1.0.7:
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+pathe@^1.1.0, pathe@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a"
+ integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==
+
+pathval@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"
+ integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==
+
+periscopic@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a"
+ integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==
+ dependencies:
+ "@types/estree" "^1.0.0"
+ estree-walker "^3.0.0"
+ is-reference "^3.0.0"
+
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
@@ -952,6 +1349,20 @@ pirates@^4.0.1:
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
+pkg-types@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868"
+ integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==
+ dependencies:
+ jsonc-parser "^3.2.0"
+ mlly "^1.2.0"
+ pathe "^1.1.0"
+
+playwright-core@1.35.1:
+ version "1.35.1"
+ resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.35.1.tgz#52c1e6ffaa6a8c29de1a5bdf8cce0ce290ffb81d"
+ integrity sha512-pNXb6CQ7OqmGDRspEjlxE49w+4YtR6a3X6mT1hZXeJHWmsEz7SunmvZeiG/+y1yyMZdHnnn73WKYdtV1er0Xyg==
+
postcss-import@^15.1.0:
version "15.1.0"
resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70"
@@ -1005,11 +1416,39 @@ postcss@^8.4.23:
picocolors "^1.0.0"
source-map-js "^1.0.2"
+postcss@^8.4.24:
+ version "8.4.24"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df"
+ integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==
+ dependencies:
+ nanoid "^3.3.6"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
preact@^10.0.0:
version "10.13.2"
resolved "https://registry.yarnpkg.com/preact/-/preact-10.13.2.tgz#2c40c73d57248b57234c4ae6cd9ab9d8186ebc0a"
integrity sha512-q44QFLhOhty2Bd0Y46fnYW0gD/cbVM9dUVtNTDKPcdXSMA7jfY+Jpd6rk3GB0lcQss0z5s/6CmVP0Z/hV+g6pw==
+prettier-plugin-svelte@^2.10.1:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.1.tgz#e1abbe5689e8a926c60b8bc42e61233556ca90d1"
+ integrity sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==
+
+prettier@^2.8.0:
+ version "2.8.8"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
+ integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
+
+pretty-format@^29.5.0:
+ version "29.6.1"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.1.tgz#ec838c288850b7c4f9090b867c2d4f4edbfb0f3e"
+ integrity sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==
+ dependencies:
+ "@jest/schemas" "^29.6.0"
+ ansi-styles "^5.0.0"
+ react-is "^18.0.0"
+
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
@@ -1020,6 +1459,11 @@ queue-microtask@^1.2.2:
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+react-is@^18.0.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
+ integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
+
read-cache@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
@@ -1034,6 +1478,11 @@ readdirp@~3.6.0:
dependencies:
picomatch "^2.2.1"
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
resolve@^1.1.7, resolve@^1.22.2:
version "1.22.2"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
@@ -1055,10 +1504,10 @@ rimraf@^2.5.2:
dependencies:
glob "^7.1.3"
-rollup@^3.21.0:
- version "3.21.7"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.21.7.tgz#022ab47416712c93546f369abfb20da5fb8ed42e"
- integrity sha512-KXPaEuR8FfUoK2uHwNjxTmJ18ApyvD6zJpYv9FOJSqLStmt6xOY84l1IjK2dSolQmoXknrhEFRaPRgOPdqCT5w==
+rollup@^3.25.2:
+ version "3.26.2"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.26.2.tgz#2e76a37606cb523fc9fef43e6f59c93f86d95e7c"
+ integrity sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==
optionalDependencies:
fsevents "~2.3.2"
@@ -1069,6 +1518,13 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
+sade@^1.7.4, sade@^1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701"
+ integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==
+ dependencies:
+ mri "^1.1.0"
+
sander@^0.5.0:
version "0.5.1"
resolved "https://registry.yarnpkg.com/sander/-/sander-0.5.1.tgz#741e245e231f07cafb6fdf0f133adfa216a502ad"
@@ -1079,6 +1535,25 @@ sander@^0.5.0:
mkdirp "^0.5.1"
rimraf "^2.5.2"
+set-cookie-parser@^2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51"
+ integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==
+
+siginfo@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30"
+ integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==
+
+sirv@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.3.tgz#ca5868b87205a74bef62a469ed0296abceccd446"
+ integrity sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==
+ dependencies:
+ "@polka/url" "^1.0.0-next.20"
+ mrmime "^1.0.0"
+ totalist "^3.0.0"
+
sorcery@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/sorcery/-/sorcery-0.11.0.tgz#310c80ee993433854bb55bb9aa4003acd147fca8"
@@ -1089,11 +1564,26 @@ sorcery@^0.11.0:
minimist "^1.2.0"
sander "^0.5.0"
-source-map-js@^1.0.2:
+source-map-js@^1.0.1, source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+stackback@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b"
+ integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==
+
+std-env@^3.3.3:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.3.tgz#a54f06eb245fdcfef53d56f3c0251f1d5c3d01fe"
+ integrity sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==
+
+streamsearch@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
+ integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
+
strip-indent@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
@@ -1101,6 +1591,13 @@ strip-indent@^3.0.0:
dependencies:
min-indent "^1.0.0"
+strip-literal@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.0.1.tgz#0115a332710c849b4e46497891fb8d585e404bd2"
+ integrity sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==
+ dependencies:
+ acorn "^8.8.2"
+
sucrase@^3.32.0:
version "3.32.0"
resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.32.0.tgz#c4a95e0f1e18b6847127258a75cf360bc568d4a7"
@@ -1124,6 +1621,20 @@ svelte-awesome-icons@^0.4.4:
resolved "https://registry.yarnpkg.com/svelte-awesome-icons/-/svelte-awesome-icons-0.4.4.tgz#7a98a586bc1abfe08b370b1de26b888dcc8dd260"
integrity sha512-y3GK/5TjFaHcCu5O1Y5dx+T/833xMZt6jX5p/XONggH0uUVEr16UBrBHeVsLBQOdWSiz5A6O2kaq1n7SZO1Umw==
+svelte-check@^3.4.3:
+ version "3.4.5"
+ resolved "https://registry.yarnpkg.com/svelte-check/-/svelte-check-3.4.5.tgz#06c7c3ed0c7ef24791791f2be28319d8fc7c5a34"
+ integrity sha512-FsD/CUVdEI0F9sfylh1Fe15kDjvvbyBxzDpACPsdq0EASgaZukBXaMXofpxlgmWsgVET3OynMQlbtUQoWCz9Rw==
+ dependencies:
+ "@jridgewell/trace-mapping" "^0.3.17"
+ chokidar "^3.4.1"
+ fast-glob "^3.2.7"
+ import-fresh "^3.2.1"
+ picocolors "^1.0.0"
+ sade "^1.7.4"
+ svelte-preprocess "^5.0.3"
+ typescript "^5.0.3"
+
svelte-heros-v2@^0.4.2:
version "0.4.2"
resolved "https://registry.yarnpkg.com/svelte-heros-v2/-/svelte-heros-v2-0.4.2.tgz#d2ed9e3d188e449e854618ba6a2be2fea3141c6c"
@@ -1134,6 +1645,11 @@ svelte-hmr@^0.15.1:
resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.15.1.tgz#d11d878a0bbb12ec1cba030f580cd2049f4ec86b"
integrity sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==
+svelte-hmr@^0.15.2:
+ version "0.15.2"
+ resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.15.2.tgz#d2f6fc82e040f2734abd54cea5cbef46828f2538"
+ integrity sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==
+
svelte-preprocess@^5.0.3:
version "5.0.3"
resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-5.0.3.tgz#431d538d457d3a5ba470a5ae5754a5aeb76579c8"
@@ -1145,10 +1661,24 @@ svelte-preprocess@^5.0.3:
sorcery "^0.11.0"
strip-indent "^3.0.0"
-svelte@^3.57.0:
- version "3.59.1"
- resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.59.1.tgz#3de3d56b9165748f32f3131589b8d183cabe7449"
- integrity sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==
+svelte@^4.0.0:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/svelte/-/svelte-4.0.5.tgz#4c4f418c38c5124be081d0720fb7efecfba501cc"
+ integrity sha512-PHKPWP1wiWHBtsE57nCb8xiWB3Ht7/3Kvi3jac0XIxUM2rep8alO7YoAtgWeGD7++tFy46krilOrPW0mG3Dx+A==
+ dependencies:
+ "@ampproject/remapping" "^2.2.1"
+ "@jridgewell/sourcemap-codec" "^1.4.15"
+ "@jridgewell/trace-mapping" "^0.3.18"
+ acorn "^8.9.0"
+ aria-query "^5.3.0"
+ axobject-query "^3.2.1"
+ code-red "^1.0.3"
+ css-tree "^2.3.1"
+ estree-walker "^3.0.3"
+ is-reference "^3.0.1"
+ locate-character "^3.0.0"
+ magic-string "^0.30.0"
+ periscopic "^3.1.0"
tailwindcss@^3.3.1:
version "3.3.2"
@@ -1193,6 +1723,21 @@ thenify-all@^1.0.0:
dependencies:
any-promise "^1.0.0"
+tinybench@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.0.tgz#4711c99bbf6f3e986f67eb722fed9cddb3a68ba5"
+ integrity sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==
+
+tinypool@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.5.0.tgz#3861c3069bf71e4f1f5aa2d2e6b3aaacc278961e"
+ integrity sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==
+
+tinyspy@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.1.1.tgz#9e6371b00c259e5c5b301917ca18c01d40ae558c"
+ integrity sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==
+
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -1200,6 +1745,11 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
+totalist@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8"
+ integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==
+
ts-interface-checker@^0.1.9:
version "0.1.13"
resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
@@ -1210,6 +1760,33 @@ tslib@2.4.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
+tslib@^2.4.1:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
+ integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
+
+type-detect@^4.0.0, type-detect@^4.0.5:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+ integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+
+typescript@^5.0.0, typescript@^5.0.3:
+ version "5.1.6"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274"
+ integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==
+
+ufo@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.1.2.tgz#d0d9e0fa09dece0c31ffd57bd363f030a35cfe76"
+ integrity sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==
+
+undici@~5.22.0:
+ version "5.22.1"
+ resolved "https://registry.yarnpkg.com/undici/-/undici-5.22.1.tgz#877d512effef2ac8be65e695f3586922e1a57d7b"
+ integrity sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==
+ dependencies:
+ busboy "^1.6.0"
+
update-browserslist-db@^1.0.10:
version "1.0.11"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
@@ -1223,14 +1800,26 @@ util-deprecate@^1.0.2:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
-vite@^4.3.5:
- version "4.3.5"
- resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.5.tgz#3871fe0f4b582ea7f49a85386ac80e84826367d9"
- integrity sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA==
+vite-node@0.32.4:
+ version "0.32.4"
+ resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.32.4.tgz#7b3f94af5a87c631fbc380ba662914bafbd04d80"
+ integrity sha512-L2gIw+dCxO0LK14QnUMoqSYpa9XRGnTTTDjW2h19Mr+GR0EFj4vx52W41gFXfMLqpA00eK4ZjOVYo1Xk//LFEw==
dependencies:
- esbuild "^0.17.5"
- postcss "^8.4.23"
- rollup "^3.21.0"
+ cac "^6.7.14"
+ debug "^4.3.4"
+ mlly "^1.4.0"
+ pathe "^1.1.1"
+ picocolors "^1.0.0"
+ vite "^3.0.0 || ^4.0.0"
+
+"vite@^3.0.0 || ^4.0.0", vite@^4.3.6:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.1.tgz#cfe0baf6af4b1b9f3b37c5ebf1e012622be3da98"
+ integrity sha512-8mmwPlsy7t+ZcTme7vdbVGuZ3Tri+lrLXr6hsF5UHdyYyARPPPMtM16QlqC9TZuCd5j3NmWs1rwka3cVSRHZTw==
+ dependencies:
+ esbuild "^0.18.10"
+ postcss "^8.4.24"
+ rollup "^3.25.2"
optionalDependencies:
fsevents "~2.3.2"
@@ -1239,6 +1828,44 @@ vitefu@^0.2.4:
resolved "https://registry.yarnpkg.com/vitefu/-/vitefu-0.2.4.tgz#212dc1a9d0254afe65e579351bed4e25d81e0b35"
integrity sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==
+vitest@^0.32.2:
+ version "0.32.4"
+ resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.32.4.tgz#a0558ae44c2ccdc254eece0365f16c4ffc5231bb"
+ integrity sha512-3czFm8RnrsWwIzVDu/Ca48Y/M+qh3vOnF16czJm98Q/AN1y3B6PBsyV8Re91Ty5s7txKNjEhpgtGPcfdbh2MZg==
+ dependencies:
+ "@types/chai" "^4.3.5"
+ "@types/chai-subset" "^1.3.3"
+ "@types/node" "*"
+ "@vitest/expect" "0.32.4"
+ "@vitest/runner" "0.32.4"
+ "@vitest/snapshot" "0.32.4"
+ "@vitest/spy" "0.32.4"
+ "@vitest/utils" "0.32.4"
+ acorn "^8.9.0"
+ acorn-walk "^8.2.0"
+ cac "^6.7.14"
+ chai "^4.3.7"
+ debug "^4.3.4"
+ local-pkg "^0.4.3"
+ magic-string "^0.30.0"
+ pathe "^1.1.1"
+ picocolors "^1.0.0"
+ std-env "^3.3.3"
+ strip-literal "^1.0.1"
+ tinybench "^2.5.0"
+ tinypool "^0.5.0"
+ vite "^3.0.0 || ^4.0.0"
+ vite-node "0.32.4"
+ why-is-node-running "^2.2.2"
+
+why-is-node-running@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e"
+ integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==
+ dependencies:
+ siginfo "^2.0.0"
+ stackback "0.0.2"
+
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -1253,3 +1880,8 @@ yaml@^2.1.1:
version "2.2.2"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073"
integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==
+
+yocto-queue@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
+ integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==