From 170ca1f366aadb7e0a703ac407e4db3bb721f1c9 Mon Sep 17 00:00:00 2001 From: routerino <45954722+routerino@users.noreply.github.com> Date: Tue, 2 Aug 2022 17:32:38 +1000 Subject: [PATCH 001/160] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 58750f0..6e4b12b 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,12 @@ services: Headscale UI serves on port 443 and uses a self signed cert by default. +### Additional Docker Settings +The docker container lets you set the following settings: +| Variable | Description | Example | +|----|----|----| +| PORT | Sets the port to an alternate value | `443` | + ### Proxy Settings You will need a reverse proxy to install `headscale-ui` on your domain. Here is an example [Caddy Config](https://caddyserver.com/) to achieve this: ``` From 4fe58036c1e8ea439cd15956110999f61248c252 Mon Sep 17 00:00:00 2001 From: routerino <45954722+routerino@users.noreply.github.com> Date: Tue, 2 Aug 2022 18:43:37 +1000 Subject: [PATCH 002/160] Update architecture.md --- documentation/architecture.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/documentation/architecture.md b/documentation/architecture.md index 72cd76c..866deeb 100644 --- a/documentation/architecture.md +++ b/documentation/architecture.md @@ -20,4 +20,5 @@ Dependencies are kept to a minimum and kept to large, actively maintained reposi * [Tailwind CSS](https://tailwindcss.com/) - CSS Framework * [DaisyUI](https://daisyui.com/) - CSS Theme and Components * [Typescript](https://www.typescriptlang.org/) - for static type checking -* [Prettier](https://prettier.io/) - for Code Formatting \ No newline at end of file +* [Prettier](https://prettier.io/) - for Code Formatting +* [Fuse.js](https://fusejs.io/) - for intelligent searching From a9f34e5e94bcc55b9f819545376f6150955cddbf Mon Sep 17 00:00:00 2001 From: routerino <45954722+routerino@users.noreply.github.com> Date: Tue, 2 Aug 2022 20:01:50 +1000 Subject: [PATCH 003/160] Update 2-initialise.sh --- docker/production/scripts/2-initialise.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/production/scripts/2-initialise.sh b/docker/production/scripts/2-initialise.sh index c01277e..8c6356d 100644 --- a/docker/production/scripts/2-initialise.sh +++ b/docker/production/scripts/2-initialise.sh @@ -15,8 +15,8 @@ fi # replace port in Caddyfile if set if [ "$PORT" != "443" ] then - sed -i "s/:443/$PORT/g" /data/Caddyfile + sed -i "s/:443/:$PORT/g" /data/Caddyfile fi echo "Starting Caddy" -/usr/sbin/caddy run --adapter caddyfile --config /data/Caddyfile \ No newline at end of file +/usr/sbin/caddy run --adapter caddyfile --config /data/Caddyfile From 1b949ccaa83b9591b3aeee67403a8f69243cefa7 Mon Sep 17 00:00:00 2001 From: routerino <45954722+routerino@users.noreply.github.com> Date: Tue, 2 Aug 2022 20:02:47 +1000 Subject: [PATCH 004/160] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1d3b0c4..451939d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "headscale-ui", - "version": "2022.08.02-beta", + "version": "2022.08.02.1-beta", "scripts": { "dev": "vite dev --https --port 443 --host 0.0.0.0", "build": "vite build", From 3cc47e739960e8d99ff61d0dfa0bc260c5a261a8 Mon Sep 17 00:00:00 2001 From: routerino <45954722+routerino@users.noreply.github.com> Date: Tue, 2 Aug 2022 20:08:42 +1000 Subject: [PATCH 005/160] Update system-integration-testing.md --- documentation/system-integration-testing.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/documentation/system-integration-testing.md b/documentation/system-integration-testing.md index 3cbbaac..273d884 100644 --- a/documentation/system-integration-testing.md +++ b/documentation/system-integration-testing.md @@ -27,4 +27,7 @@ Eventually it would be nice to automate this, but I've found a front end is diff * Test recovery once URL is back ## Settings Test -* Verify version comes across once released \ No newline at end of file +* Verify version comes across once released + +## Docker Test +* Verify setting a custom PORT environment variable does not break the image From 56357ea7e83d37b7424fbdc177115fe9dd2e3dc7 Mon Sep 17 00:00:00 2001 From: routerino <45954722+routerino@users.noreply.github.com> Date: Tue, 2 Aug 2022 20:20:26 +1000 Subject: [PATCH 006/160] Update Caddyfile --- docker/production/Caddyfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/production/Caddyfile b/docker/production/Caddyfile index a01491b..c8c6d34 100644 --- a/docker/production/Caddyfile +++ b/docker/production/Caddyfile @@ -1,7 +1,7 @@ { skip_install_trust } -:443 { +https://0.0.0.0:443 { redir / /web uri strip_prefix /web tls internal { @@ -10,4 +10,4 @@ file_server { root /web } -} \ No newline at end of file +} From b5d70ab70602d33d52a9291f13b03f1f4ba616e2 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Tue, 2 Aug 2022 20:31:01 +1000 Subject: [PATCH 007/160] fix formatting for Caddyfile --- docker/production/Caddyfile | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docker/production/Caddyfile b/docker/production/Caddyfile index c8c6d34..d8d3869 100644 --- a/docker/production/Caddyfile +++ b/docker/production/Caddyfile @@ -1,13 +1,13 @@ { - skip_install_trust + skip_install_trust } https://0.0.0.0:443 { - redir / /web - uri strip_prefix /web - tls internal { - on_demand - } - file_server { - root /web - } + redir / /web + uri strip_prefix /web + tls internal { + on_demand + } + file_server { + root /web + } } From 8ae7357e9efd1fbf25cc08d719c23e0135244f42 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Tue, 2 Aug 2022 20:36:41 +1000 Subject: [PATCH 008/160] add explicit https port --- docker/production/Caddyfile | 3 ++- docker/production/scripts/2-initialise.sh | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docker/production/Caddyfile b/docker/production/Caddyfile index d8d3869..3f46304 100644 --- a/docker/production/Caddyfile +++ b/docker/production/Caddyfile @@ -1,7 +1,8 @@ { skip_install_trust + https_port 443 } -https://0.0.0.0:443 { +:443 { redir / /web uri strip_prefix /web tls internal { diff --git a/docker/production/scripts/2-initialise.sh b/docker/production/scripts/2-initialise.sh index 8c6356d..13f141f 100644 --- a/docker/production/scripts/2-initialise.sh +++ b/docker/production/scripts/2-initialise.sh @@ -15,7 +15,7 @@ fi # replace port in Caddyfile if set if [ "$PORT" != "443" ] then - sed -i "s/:443/:$PORT/g" /data/Caddyfile + sed -i "s/443/$PORT/g" /data/Caddyfile fi echo "Starting Caddy" From 66bd2cba63db5c16649a6951ea87d5484f3555c0 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Tue, 2 Aug 2022 20:40:35 +1000 Subject: [PATCH 009/160] fix tabbing --- docker/production/Caddyfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/production/Caddyfile b/docker/production/Caddyfile index 3f46304..1805219 100644 --- a/docker/production/Caddyfile +++ b/docker/production/Caddyfile @@ -1,6 +1,6 @@ { skip_install_trust - https_port 443 + https_port 443 } :443 { redir / /web From 8d8f3b15d3c9d699354178d5abedb7e97749205a Mon Sep 17 00:00:00 2001 From: routerino <45954722+routerino@users.noreply.github.com> Date: Tue, 2 Aug 2022 20:53:57 +1000 Subject: [PATCH 010/160] Create LICENSE.md --- LICENSE.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..53bd6b2 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2022, gurucomputing +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. From 657d9298215aa082a5a088e52fbbff50de638408 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Wed, 3 Aug 2022 12:52:36 +1000 Subject: [PATCH 011/160] default http port to 8080 to prevent permission problems --- docker/production/Caddyfile | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/production/Caddyfile b/docker/production/Caddyfile index 1805219..0a98ab7 100644 --- a/docker/production/Caddyfile +++ b/docker/production/Caddyfile @@ -1,5 +1,6 @@ { skip_install_trust + http_port 8080 https_port 443 } :443 { From 4672239b1fcb31fff0b63deab5b87ec4a3b584f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B9=BB=E7=8C=AA?= Date: Fri, 5 Aug 2022 03:05:34 +0000 Subject: [PATCH 012/160] Fix Device Routes active error Fix When a device has multiple device routes, activating one of them will cause the others to become pending Also added the ability to make routes inactive(why no make it to be a switch) --- src/lib/common/apiFunctions.svelte | 4 ++-- src/lib/devices/DeviceCard/DeviceRoutes.svelte | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/lib/common/apiFunctions.svelte b/src/lib/common/apiFunctions.svelte index 8ad11d2..1325c69 100644 --- a/src/lib/common/apiFunctions.svelte +++ b/src/lib/common/apiFunctions.svelte @@ -267,13 +267,13 @@ return headscaleRoute; } - export async function enableDeviceRoute(deviceID: string, route: string): Promise { + export async function enableDeviceRoute(deviceID: string, routes: string[]): Promise { // variables in local storage let headscaleURL = localStorage.getItem('headscaleURL') || ''; let headscaleAPIKey = localStorage.getItem('headscaleAPIKey') || ''; // endpoint url for getting users - let endpointURL = '/api/v1/machine/' + deviceID + '/routes?routes=' + route.replace('/', '%2F'); + let endpointURL = '/api/v1/machine/' + deviceID + '/routes?' + routes.map(encodeURIComponent).map(route=>`routes=${route}`).join('&'); //returning variables let headscaleDeviceResponse: Response = new Response(); diff --git a/src/lib/devices/DeviceCard/DeviceRoutes.svelte b/src/lib/devices/DeviceCard/DeviceRoutes.svelte index bde17e6..5b76743 100644 --- a/src/lib/devices/DeviceCard/DeviceRoutes.svelte +++ b/src/lib/devices/DeviceCard/DeviceRoutes.svelte @@ -22,7 +22,17 @@ } function enableDeviceRouteAction(route: string) { - enableDeviceRoute(device.id, route) + enableDeviceRoute(device.id, [route,...routesList.enabledRoutes]) + .then((response) => { + getDeviceRoutesAction(); + }) + .catch((error) => { + $alertStore = error; + }); + } + + function disableDeviceRouteAction(route: string) { + enableDeviceRoute(device.id, [...routesList.enabledRoutes].filter(v=>v!=route)) .then((response) => { getDeviceRoutesAction(); }) @@ -39,7 +49,7 @@
  • {route} {#if routesList.enabledRoutes.includes(route)} -
    active
    + {:else} {/if} From d8594f2982a4bc559da9d7fba56217a917f3727c Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sat, 6 Aug 2022 17:19:26 +1000 Subject: [PATCH 013/160] created testing environment --- docker/test/Caddyfile | 25 ++ docker/test/container-config/config.yaml | 257 ++++++++++++++++++++ docker/test/docker-compose-workers.yaml | 38 +++ docker/test/docker-compose.yaml | 41 ++++ docker/test/dockerfile | 27 ++ docker/test/scripts/1-image-build.sh | 25 ++ docker/test/scripts/2-initialise.sh | 23 ++ documentation/development.md | 2 +- documentation/system-integration-testing.md | 33 --- documentation/testing.md | 48 ++++ 10 files changed, 485 insertions(+), 34 deletions(-) create mode 100644 docker/test/Caddyfile create mode 100644 docker/test/container-config/config.yaml create mode 100644 docker/test/docker-compose-workers.yaml create mode 100644 docker/test/docker-compose.yaml create mode 100644 docker/test/dockerfile create mode 100644 docker/test/scripts/1-image-build.sh create mode 100644 docker/test/scripts/2-initialise.sh delete mode 100644 documentation/system-integration-testing.md create mode 100644 documentation/testing.md diff --git a/docker/test/Caddyfile b/docker/test/Caddyfile new file mode 100644 index 0000000..7d7247e --- /dev/null +++ b/docker/test/Caddyfile @@ -0,0 +1,25 @@ +{ + http_port 80 + https_port 443 +} + +https://headscale-test.local { + tls internal + reverse_proxy /web* https://headscale-test-frontend { + transport http { + tls_insecure_skip_verify + } + } + + reverse_proxy * http://headscale-test-backend:8080 +} + +:80 { + reverse_proxy /web* https://headscale-test-frontend { + transport http { + tls_insecure_skip_verify + } + } + + reverse_proxy * http://headscale-test-backend:8080 +} \ No newline at end of file diff --git a/docker/test/container-config/config.yaml b/docker/test/container-config/config.yaml new file mode 100644 index 0000000..5b99be9 --- /dev/null +++ b/docker/test/container-config/config.yaml @@ -0,0 +1,257 @@ +--- +# headscale will look for a configuration file named `config.yaml` (or `config.json`) in the following order: +# +# - `/etc/headscale` +# - `~/.headscale` +# - current working directory + +# The url clients will connect to. +# Typically this will be a domain like: +# +# https://myheadscale.example.com:443 +# +server_url: https://headscale-test.local + +# Address to listen to / bind to on the server +# +listen_addr: 0.0.0.0:8080 + +# Address to listen to /metrics, you may want +# to keep this endpoint private to your internal +# network +# +metrics_listen_addr: 127.0.0.1:9090 + +# Address to listen for gRPC. +# gRPC is used for controlling a headscale server +# remotely with the CLI +# Note: Remote access _only_ works if you have +# valid certificates. +grpc_listen_addr: 0.0.0.0:50443 + +# Allow the gRPC admin interface to run in INSECURE +# mode. This is not recommended as the traffic will +# be unencrypted. Only enable if you know what you +# are doing. +grpc_allow_insecure: false + +# Private key used encrypt the traffic between headscale +# and Tailscale clients. +# The private key file which will be +# autogenerated if it's missing +private_key_path: /var/lib/headscale/private.key + +# List of IP prefixes to allocate tailaddresses from. +# Each prefix consists of either an IPv4 or IPv6 address, +# and the associated prefix length, delimited by a slash. +ip_prefixes: + - fd7a:115c:a1e0::/48 + - 100.64.0.0/10 + +# DERP is a relay system that Tailscale uses when a direct +# connection cannot be established. +# https://tailscale.com/blog/how-tailscale-works/#encrypted-tcp-relays-derp +# +# headscale needs a list of DERP servers that can be presented +# to the clients. +derp: + server: + # If enabled, runs the embedded DERP server and merges it into the rest of the DERP config + # The Headscale server_url defined above MUST be using https, DERP requires TLS to be in place + enabled: false + + # Region ID to use for the embedded DERP server. + # The local DERP prevails if the region ID collides with other region ID coming from + # the regular DERP config. + region_id: 999 + + # Region code and name are displayed in the Tailscale UI to identify a DERP region + region_code: "headscale" + region_name: "Headscale Embedded DERP" + + # Listens in UDP at the configured address for STUN connections to help on NAT traversal. + # When the embedded DERP server is enabled stun_listen_addr MUST be defined. + # + # For more details on how this works, check this great article: https://tailscale.com/blog/how-tailscale-works/ + stun_listen_addr: "0.0.0.0:3478" + + # List of externally available DERP maps encoded in JSON + urls: + - https://controlplane.tailscale.com/derpmap/default + + # Locally available DERP map files encoded in YAML + # + # This option is mostly interesting for people hosting + # their own DERP servers: + # https://tailscale.com/kb/1118/custom-derp-servers/ + # + # paths: + # - /etc/headscale/derp-example.yaml + paths: [] + + # If enabled, a worker will be set up to periodically + # refresh the given sources and update the derpmap + # will be set up. + auto_update_enabled: true + + # How often should we check for DERP updates? + update_frequency: 24h + +# Disables the automatic check for headscale updates on startup +disable_check_updates: false + +# Time before an inactive ephemeral node is deleted? +ephemeral_node_inactivity_timeout: 30m + +# Period to check for node updates in the tailnet. A value too low will severily affect +# CPU consumption of Headscale. A value too high (over 60s) will cause problems +# to the nodes, as they won't get updates or keep alive messages in time. +# In case of doubts, do not touch the default 10s. +node_update_check_interval: 10s + +# SQLite config +db_type: sqlite3 +db_path: /var/lib/headscale/db.sqlite + +# # Postgres config +# db_type: postgres +# db_host: localhost +# db_port: 5432 +# db_name: headscale +# db_user: foo +# db_pass: bar + +### TLS configuration +# +## Let's encrypt / ACME +# +# headscale supports automatically requesting and setting up +# TLS for a domain with Let's Encrypt. +# +# URL to ACME directory +acme_url: https://acme-v02.api.letsencrypt.org/directory + +# Email to register with ACME provider +acme_email: "" + +# Domain name to request a TLS certificate for: +tls_letsencrypt_hostname: "" + +# Client (Tailscale/Browser) authentication mode (mTLS) +# Acceptable values: +# - disabled: client authentication disabled +# - relaxed: client certificate is required but not verified +# - enforced: client certificate is required and verified +tls_client_auth_mode: relaxed + +# Path to store certificates and metadata needed by +# letsencrypt +tls_letsencrypt_cache_dir: /var/lib/headscale/cache + +# Type of ACME challenge to use, currently supported types: +# HTTP-01 or TLS-ALPN-01 +# See [docs/tls.md](docs/tls.md) for more information +tls_letsencrypt_challenge_type: HTTP-01 +# When HTTP-01 challenge is chosen, letsencrypt must set up a +# verification endpoint, and it will be listning on: +# :http = port 80 +tls_letsencrypt_listen: ":http" + +## Use already defined certificates: +tls_cert_path: "" +tls_key_path: "" + +log_level: info + +# Path to a file containg ACL policies. +# ACLs can be defined as YAML or HUJSON. +# https://tailscale.com/kb/1018/acls/ +acl_policy_path: "" + +## DNS +# +# headscale supports Tailscale's DNS configuration and MagicDNS. +# Please have a look to their KB to better understand the concepts: +# +# - https://tailscale.com/kb/1054/dns/ +# - https://tailscale.com/kb/1081/magicdns/ +# - https://tailscale.com/blog/2021-09-private-dns-with-magicdns/ +# +dns_config: + # List of DNS servers to expose to clients. + nameservers: + - 1.1.1.1 + + # Split DNS (see https://tailscale.com/kb/1054/dns/), + # list of search domains and the DNS to query for each one. + # + # restricted_nameservers: + # foo.bar.com: + # - 1.1.1.1 + # darp.headscale.net: + # - 1.1.1.1 + # - 8.8.8.8 + + # Search domains to inject. + domains: [] + + # Whether to use [MagicDNS](https://tailscale.com/kb/1081/magicdns/). + # Only works if there is at least a nameserver defined. + magic_dns: true + + # Defines the base domain to create the hostnames for MagicDNS. + # `base_domain` must be a FQDNs, without the trailing dot. + # The FQDN of the hosts will be + # `hostname.namespace.base_domain` (e.g., _myhost.mynamespace.example.com_). + base_domain: example.com + +# Unix socket used for the CLI to connect without authentication +# Note: for local development, you probably want to change this to: +# unix_socket: ./headscale.sock +unix_socket: /var/run/headscale.sock +unix_socket_permission: "0770" +# +# headscale supports experimental OpenID connect support, +# it is still being tested and might have some bugs, please +# help us test it. +# OpenID Connect +# oidc: +# issuer: "https://your-oidc.issuer.com/path" +# client_id: "your-oidc-client-id" +# client_secret: "your-oidc-client-secret" +# +# Customize the scopes used in the OIDC flow, defaults to "openid", "profile" and "email" and add custom query +# parameters to the Authorize Endpoint request. Scopes default to "openid", "profile" and "email". +# +# scope: ["openid", "profile", "email", "custom"] +# extra_params: +# domain_hint: example.com +# +# List allowed principal domains and/or users. If an authenticated user's domain is not in this list, the +# authentication request will be rejected. +# +# allowed_domains: +# - example.com +# allowed_users: +# - alice@example.com +# +# If `strip_email_domain` is set to `true`, the domain part of the username email address will be removed. +# This will transform `first-name.last-name@example.com` to the namespace `first-name.last-name` +# If `strip_email_domain` is set to `false` the domain part will NOT be removed resulting to the following +# namespace: `first-name.last-name.example.com` +# +# strip_email_domain: true + +# Logtail configuration +# Logtail is Tailscales logging and auditing infrastructure, it allows the control panel +# to instruct tailscale nodes to log their activity to a remote server. +logtail: + # Enable logtail for this headscales clients. + # As there is currently no support for overriding the log server in headscale, this is + # disabled by default. Enabling this will make your clients send logs to Tailscale Inc. + enabled: false + +# Enabling this option makes devices prefer a random port for WireGuard traffic over the +# default static port 41641. This option is intended as a workaround for some buggy +# firewall devices. See https://tailscale.com/kb/1181/firewalls/ for more information. +randomize_client_port: false diff --git a/docker/test/docker-compose-workers.yaml b/docker/test/docker-compose-workers.yaml new file mode 100644 index 0000000..3e10ae2 --- /dev/null +++ b/docker/test/docker-compose-workers.yaml @@ -0,0 +1,38 @@ +services: + headscale-worker-1: + image: headscale-test-proxy:latest + container_name: headscale-worker-1 + restart: unless-stopped + networks: + headscale-ui-test-network: + entrypoint: | + sh -c "tailscaled --tun=userspace-networking --socks5-server=localhost:1055 --outbound-http-proxy-listen=localhost:1055 & + tailscale up --authkey=$PREAUTH_KEY --login-server=https://headscale-test.local; + /etc/init.d/tailscale start + while true; do sleep 1; done" + headscale-worker-2: + image: headscale-test-proxy:latest + container_name: headscale-worker-2 + restart: unless-stopped + networks: + headscale-ui-test-network: + entrypoint: | + sh -c "tailscaled --tun=userspace-networking --socks5-server=localhost:1055 --outbound-http-proxy-listen=localhost:1055 & + tailscale up --authkey=$PREAUTH_KEY --login-server=https://headscale-test.local; + /etc/init.d/tailscale start + while true; do sleep 1; done" + headscale-worker-3: + image: headscale-test-proxy:latest + container_name: headscale-worker-3 + restart: unless-stopped + networks: + headscale-ui-test-network: + entrypoint: | + sh -c "tailscaled --tun=userspace-networking --socks5-server=localhost:1055 --outbound-http-proxy-listen=localhost:1055 & + tailscale up --authkey=$PREAUTH_KEY --login-server=https://headscale-test.local --advertise-routes=10.30.10.1/32,10.30.10.2/32,10.30.10.3/32; + /etc/init.d/tailscale start + while true; do sleep 1; done" + +networks: + headscale-ui-test-network: + external: true \ No newline at end of file diff --git a/docker/test/docker-compose.yaml b/docker/test/docker-compose.yaml new file mode 100644 index 0000000..c6527ce --- /dev/null +++ b/docker/test/docker-compose.yaml @@ -0,0 +1,41 @@ +services: + headscale-test-backend: + image: headscale/headscale:latest-alpine + container_name: headscale-test-backend + security_opt: + - label:disable + volumes: + - ./container-config:/etc/headscale + # - ./container-data/data:/var/lib/headscale + entrypoint: | + sh -c "mkdir -p /var/lib/headscale; + touch /var/lib/headscale/db.sqlite; + wget -O /etc/headscale/config.yaml https://raw.githubusercontent.com/juanfont/headscale/main/config-example.yaml + sed -i 's|http://127.0.0.1:8080|https://headscale-test.local|g' /etc/headscale/config.yaml; + headscale serve" + restart: unless-stopped + networks: + headscale-ui-test-network: + + headscale-test-frontend: + image: ghcr.io/gurucomputing/headscale-ui:latest + container_name: headscale-test-frontend + restart: unless-stopped + networks: + headscale-ui-test-network: + + headscale-test-proxy: + image: headscale-test-proxy:latest + build: . + container_name: headscale-test-proxy + ports: + - 8080:80 + restart: unless-stopped + networks: + headscale-ui-test-network: + aliases: + - headscale-test.local + +networks: + headscale-ui-test-network: + external: true \ No newline at end of file diff --git a/docker/test/dockerfile b/docker/test/dockerfile new file mode 100644 index 0000000..b327a6e --- /dev/null +++ b/docker/test/dockerfile @@ -0,0 +1,27 @@ +FROM alpine:latest + +# environment variables +ENV XDG_DATA_HOME=/data/ + +# Set the staging environment +WORKDIR /staging/scripts +WORKDIR /staging + +# Copy across the scripts folder +COPY scripts/* ./scripts/ +# Copy default caddy config from project root +COPY ./Caddyfile /staging/Caddyfile +# Set permissions for all scripts. We do not want normal users to have write +# access to the scripts +RUN chown -R 0:0 scripts +RUN chmod -R 755 scripts + +# Build the image. This build runs as root +RUN /staging/scripts/1-image-build.sh + +# Tell docker that all future commands should run as the appuser user +# USER appuser + +WORKDIR /data + +ENTRYPOINT /bin/sh /staging/scripts/2-initialise.sh \ No newline at end of file diff --git a/docker/test/scripts/1-image-build.sh b/docker/test/scripts/1-image-build.sh new file mode 100644 index 0000000..3151a25 --- /dev/null +++ b/docker/test/scripts/1-image-build.sh @@ -0,0 +1,25 @@ +#!/bin/sh +set -x + +# temporarily set the caddy home to staging +export XDG_DATA_HOME=/staging + +# create the group and user +addgroup -S appgroup && adduser -D appuser -G appgroup + +# install caddy plus dependencies +apk add --no-cache caddy nss-tools + +# install tailscale +echo http://dl-2.alpinelinux.org/alpine/edge/community/ >> /etc/apk/repositories +apk add -U --no-cache tailscale +rc-update add tailscale + +# do a dry run of caddy to install the certificates +caddy start +caddy trust -adapter caddyfile -config /staging/Caddyfile +caddy stop + +# set the caddy directory to the non-root user +# commented out for now as we need root anyway for tailscale +# chown -R 1000:1000 /staging/caddy \ No newline at end of file diff --git a/docker/test/scripts/2-initialise.sh b/docker/test/scripts/2-initialise.sh new file mode 100644 index 0000000..a20dfb0 --- /dev/null +++ b/docker/test/scripts/2-initialise.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +#----# +# placeholder for testing +# while true; do sleep 1; done +#----# + +# copy everything from staging +if [ ! -f /data/Caddyfile ]; +then + echo "no Caddyfile detected, copying across default config" + cp /staging/Caddyfile /data/Caddyfile +fi + +if [ ! -f /data/caddy ]; +then + echo "no caddy directory detected, copying across default config" + cp -r /staging/caddy /data/caddy +fi + +# start caddy +echo "Starting Caddy" +/usr/sbin/caddy run --adapter caddyfile --config /data/Caddyfile diff --git a/documentation/development.md b/documentation/development.md index 1d114c0..adaf4c3 100644 --- a/documentation/development.md +++ b/documentation/development.md @@ -4,7 +4,7 @@ Development can be done either by using the official development docker image, o ## Testing -All branches should undergo manual testing as specified in the [System Integration Testing](./system-integration-testing.md) document. If someone is well versed in unit automation tests for browser front ends, please educate me! For now do it manually before making a pull request. +All branches should undergo manual testing as specified in the [Testing](./testing.md) document. If someone is well versed in unit automation tests for browser front ends, please educate me! For now do it manually before making a pull request. ### Quick Start (Docker) * `docker run -p 443:443 -p 3000:3000 -v "$(pwd)"/data:/data ghcr.io/gurucomputing/headscale-ui-dev:latest` diff --git a/documentation/system-integration-testing.md b/documentation/system-integration-testing.md deleted file mode 100644 index 273d884..0000000 --- a/documentation/system-integration-testing.md +++ /dev/null @@ -1,33 +0,0 @@ -## Tests Before Release -Eventually it would be nice to automate this, but I've found a front end is difficult to fully automate testing. Prove me wrong other users! - -## User Testing -* Create a User -* Delete a User -* Rename a User -* Create a PreAuth Key -* Try all Sort Categories - -## Device Testing -* Add a Device with a Preauth Key -* Add a Device with a machine key -* Add a Device with OIDC (if set up to do so) -* Rename a Device -* Try all sort categories -* Create a Tag -* Delete a Tag -* Delete a Device -* Add and approve a route (if set up to do so) -* Change the assigned user for a device - -## Failure Test -* Test messages (both console and alerts) with failed apikey -* Test recovery once apikey is back -* Test messages (both console and alerts) with failed URL -* Test recovery once URL is back - -## Settings Test -* Verify version comes across once released - -## Docker Test -* Verify setting a custom PORT environment variable does not break the image diff --git a/documentation/testing.md b/documentation/testing.md new file mode 100644 index 0000000..a5f9d57 --- /dev/null +++ b/documentation/testing.md @@ -0,0 +1,48 @@ +## Using the Test Dockerfiles +The `/docker/test` folder contains a number of local test containers for testing before release. Specifically, the `docker-compose` creates a local environment with self signed keys, and the `docker-compose-workers` set up a bunch of clients that trust those keys. + +To use this environment, do the following: +* Navigate to the `/docker/test` directory +* Create a test network: `docker network create headscale-ui-test-network` +* Stand up the `docker-compose` with `docker-compose up -d`. This will expose an HTTP (not https) portal on `8080` +* Generate an API key with `docker exec headscale-test-backend headscale apikeys create` +* Paste the api key into the UI at `http://:8080/web` +* Generate a pre-auth key that's reusable and ephemeral. save it into `.env` in the test folder as the following: + * `PREAUTH_KEY=` +* Stand up the test bench with `docker-compose -f docker-compose-workers.yaml up -d`, all of the workers should automatically join headscale +* Run your tests in the UI +* Bring down the environment with `docker-compose -f docker-compose-workers.yaml down` and `docker-compose down`. + +## Tests Before Release +Eventually it would be nice to automate this, but I've found a front end is difficult to fully automate testing. Prove me wrong other users! + +## User Testing +* Create a User +* Delete a User +* Rename a User +* Create a PreAuth Key +* Try all Sort Categories + +## Device Testing +* Add a Device with a Preauth Key +* Add a Device with a machine key +* Add a Device with OIDC (if set up to do so) +* Rename a Device +* Try all sort categories +* Create a Tag +* Delete a Tag +* Delete a Device +* Add and approve a route (if set up to do so) +* Change the assigned user for a device + +## Failure Test +* Test messages (both console and alerts) with failed apikey +* Test recovery once apikey is back +* Test messages (both console and alerts) with failed URL +* Test recovery once URL is back + +## Settings Test +* Verify version comes across once released + +## Docker Test +* Verify setting a custom PORT environment variable does not break the image From 58e4c946568a51922b96376714f29b99e987b559 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sat, 6 Aug 2022 17:29:51 +1000 Subject: [PATCH 014/160] separated the server and workers --- docker/test/container-config/config.yaml | 257 ------------------ docker/test/{ => test-server}/Caddyfile | 0 .../{ => test-server}/docker-compose.yaml | 4 +- docker/test/{ => test-server}/dockerfile | 0 .../scripts/1-image-build.sh | 0 .../{ => test-server}/scripts/2-initialise.sh | 0 .../docker-compose.yaml} | 0 documentation/testing.md | 6 +- 8 files changed, 5 insertions(+), 262 deletions(-) delete mode 100644 docker/test/container-config/config.yaml rename docker/test/{ => test-server}/Caddyfile (100%) rename docker/test/{ => test-server}/docker-compose.yaml (95%) rename docker/test/{ => test-server}/dockerfile (100%) rename docker/test/{ => test-server}/scripts/1-image-build.sh (100%) rename docker/test/{ => test-server}/scripts/2-initialise.sh (100%) rename docker/test/{docker-compose-workers.yaml => test-workers/docker-compose.yaml} (100%) diff --git a/docker/test/container-config/config.yaml b/docker/test/container-config/config.yaml deleted file mode 100644 index 5b99be9..0000000 --- a/docker/test/container-config/config.yaml +++ /dev/null @@ -1,257 +0,0 @@ ---- -# headscale will look for a configuration file named `config.yaml` (or `config.json`) in the following order: -# -# - `/etc/headscale` -# - `~/.headscale` -# - current working directory - -# The url clients will connect to. -# Typically this will be a domain like: -# -# https://myheadscale.example.com:443 -# -server_url: https://headscale-test.local - -# Address to listen to / bind to on the server -# -listen_addr: 0.0.0.0:8080 - -# Address to listen to /metrics, you may want -# to keep this endpoint private to your internal -# network -# -metrics_listen_addr: 127.0.0.1:9090 - -# Address to listen for gRPC. -# gRPC is used for controlling a headscale server -# remotely with the CLI -# Note: Remote access _only_ works if you have -# valid certificates. -grpc_listen_addr: 0.0.0.0:50443 - -# Allow the gRPC admin interface to run in INSECURE -# mode. This is not recommended as the traffic will -# be unencrypted. Only enable if you know what you -# are doing. -grpc_allow_insecure: false - -# Private key used encrypt the traffic between headscale -# and Tailscale clients. -# The private key file which will be -# autogenerated if it's missing -private_key_path: /var/lib/headscale/private.key - -# List of IP prefixes to allocate tailaddresses from. -# Each prefix consists of either an IPv4 or IPv6 address, -# and the associated prefix length, delimited by a slash. -ip_prefixes: - - fd7a:115c:a1e0::/48 - - 100.64.0.0/10 - -# DERP is a relay system that Tailscale uses when a direct -# connection cannot be established. -# https://tailscale.com/blog/how-tailscale-works/#encrypted-tcp-relays-derp -# -# headscale needs a list of DERP servers that can be presented -# to the clients. -derp: - server: - # If enabled, runs the embedded DERP server and merges it into the rest of the DERP config - # The Headscale server_url defined above MUST be using https, DERP requires TLS to be in place - enabled: false - - # Region ID to use for the embedded DERP server. - # The local DERP prevails if the region ID collides with other region ID coming from - # the regular DERP config. - region_id: 999 - - # Region code and name are displayed in the Tailscale UI to identify a DERP region - region_code: "headscale" - region_name: "Headscale Embedded DERP" - - # Listens in UDP at the configured address for STUN connections to help on NAT traversal. - # When the embedded DERP server is enabled stun_listen_addr MUST be defined. - # - # For more details on how this works, check this great article: https://tailscale.com/blog/how-tailscale-works/ - stun_listen_addr: "0.0.0.0:3478" - - # List of externally available DERP maps encoded in JSON - urls: - - https://controlplane.tailscale.com/derpmap/default - - # Locally available DERP map files encoded in YAML - # - # This option is mostly interesting for people hosting - # their own DERP servers: - # https://tailscale.com/kb/1118/custom-derp-servers/ - # - # paths: - # - /etc/headscale/derp-example.yaml - paths: [] - - # If enabled, a worker will be set up to periodically - # refresh the given sources and update the derpmap - # will be set up. - auto_update_enabled: true - - # How often should we check for DERP updates? - update_frequency: 24h - -# Disables the automatic check for headscale updates on startup -disable_check_updates: false - -# Time before an inactive ephemeral node is deleted? -ephemeral_node_inactivity_timeout: 30m - -# Period to check for node updates in the tailnet. A value too low will severily affect -# CPU consumption of Headscale. A value too high (over 60s) will cause problems -# to the nodes, as they won't get updates or keep alive messages in time. -# In case of doubts, do not touch the default 10s. -node_update_check_interval: 10s - -# SQLite config -db_type: sqlite3 -db_path: /var/lib/headscale/db.sqlite - -# # Postgres config -# db_type: postgres -# db_host: localhost -# db_port: 5432 -# db_name: headscale -# db_user: foo -# db_pass: bar - -### TLS configuration -# -## Let's encrypt / ACME -# -# headscale supports automatically requesting and setting up -# TLS for a domain with Let's Encrypt. -# -# URL to ACME directory -acme_url: https://acme-v02.api.letsencrypt.org/directory - -# Email to register with ACME provider -acme_email: "" - -# Domain name to request a TLS certificate for: -tls_letsencrypt_hostname: "" - -# Client (Tailscale/Browser) authentication mode (mTLS) -# Acceptable values: -# - disabled: client authentication disabled -# - relaxed: client certificate is required but not verified -# - enforced: client certificate is required and verified -tls_client_auth_mode: relaxed - -# Path to store certificates and metadata needed by -# letsencrypt -tls_letsencrypt_cache_dir: /var/lib/headscale/cache - -# Type of ACME challenge to use, currently supported types: -# HTTP-01 or TLS-ALPN-01 -# See [docs/tls.md](docs/tls.md) for more information -tls_letsencrypt_challenge_type: HTTP-01 -# When HTTP-01 challenge is chosen, letsencrypt must set up a -# verification endpoint, and it will be listning on: -# :http = port 80 -tls_letsencrypt_listen: ":http" - -## Use already defined certificates: -tls_cert_path: "" -tls_key_path: "" - -log_level: info - -# Path to a file containg ACL policies. -# ACLs can be defined as YAML or HUJSON. -# https://tailscale.com/kb/1018/acls/ -acl_policy_path: "" - -## DNS -# -# headscale supports Tailscale's DNS configuration and MagicDNS. -# Please have a look to their KB to better understand the concepts: -# -# - https://tailscale.com/kb/1054/dns/ -# - https://tailscale.com/kb/1081/magicdns/ -# - https://tailscale.com/blog/2021-09-private-dns-with-magicdns/ -# -dns_config: - # List of DNS servers to expose to clients. - nameservers: - - 1.1.1.1 - - # Split DNS (see https://tailscale.com/kb/1054/dns/), - # list of search domains and the DNS to query for each one. - # - # restricted_nameservers: - # foo.bar.com: - # - 1.1.1.1 - # darp.headscale.net: - # - 1.1.1.1 - # - 8.8.8.8 - - # Search domains to inject. - domains: [] - - # Whether to use [MagicDNS](https://tailscale.com/kb/1081/magicdns/). - # Only works if there is at least a nameserver defined. - magic_dns: true - - # Defines the base domain to create the hostnames for MagicDNS. - # `base_domain` must be a FQDNs, without the trailing dot. - # The FQDN of the hosts will be - # `hostname.namespace.base_domain` (e.g., _myhost.mynamespace.example.com_). - base_domain: example.com - -# Unix socket used for the CLI to connect without authentication -# Note: for local development, you probably want to change this to: -# unix_socket: ./headscale.sock -unix_socket: /var/run/headscale.sock -unix_socket_permission: "0770" -# -# headscale supports experimental OpenID connect support, -# it is still being tested and might have some bugs, please -# help us test it. -# OpenID Connect -# oidc: -# issuer: "https://your-oidc.issuer.com/path" -# client_id: "your-oidc-client-id" -# client_secret: "your-oidc-client-secret" -# -# Customize the scopes used in the OIDC flow, defaults to "openid", "profile" and "email" and add custom query -# parameters to the Authorize Endpoint request. Scopes default to "openid", "profile" and "email". -# -# scope: ["openid", "profile", "email", "custom"] -# extra_params: -# domain_hint: example.com -# -# List allowed principal domains and/or users. If an authenticated user's domain is not in this list, the -# authentication request will be rejected. -# -# allowed_domains: -# - example.com -# allowed_users: -# - alice@example.com -# -# If `strip_email_domain` is set to `true`, the domain part of the username email address will be removed. -# This will transform `first-name.last-name@example.com` to the namespace `first-name.last-name` -# If `strip_email_domain` is set to `false` the domain part will NOT be removed resulting to the following -# namespace: `first-name.last-name.example.com` -# -# strip_email_domain: true - -# Logtail configuration -# Logtail is Tailscales logging and auditing infrastructure, it allows the control panel -# to instruct tailscale nodes to log their activity to a remote server. -logtail: - # Enable logtail for this headscales clients. - # As there is currently no support for overriding the log server in headscale, this is - # disabled by default. Enabling this will make your clients send logs to Tailscale Inc. - enabled: false - -# Enabling this option makes devices prefer a random port for WireGuard traffic over the -# default static port 41641. This option is intended as a workaround for some buggy -# firewall devices. See https://tailscale.com/kb/1181/firewalls/ for more information. -randomize_client_port: false diff --git a/docker/test/Caddyfile b/docker/test/test-server/Caddyfile similarity index 100% rename from docker/test/Caddyfile rename to docker/test/test-server/Caddyfile diff --git a/docker/test/docker-compose.yaml b/docker/test/test-server/docker-compose.yaml similarity index 95% rename from docker/test/docker-compose.yaml rename to docker/test/test-server/docker-compose.yaml index c6527ce..09d5913 100644 --- a/docker/test/docker-compose.yaml +++ b/docker/test/test-server/docker-compose.yaml @@ -4,8 +4,8 @@ services: container_name: headscale-test-backend security_opt: - label:disable - volumes: - - ./container-config:/etc/headscale + # volumes: + # - ./container-config:/etc/headscale # - ./container-data/data:/var/lib/headscale entrypoint: | sh -c "mkdir -p /var/lib/headscale; diff --git a/docker/test/dockerfile b/docker/test/test-server/dockerfile similarity index 100% rename from docker/test/dockerfile rename to docker/test/test-server/dockerfile diff --git a/docker/test/scripts/1-image-build.sh b/docker/test/test-server/scripts/1-image-build.sh similarity index 100% rename from docker/test/scripts/1-image-build.sh rename to docker/test/test-server/scripts/1-image-build.sh diff --git a/docker/test/scripts/2-initialise.sh b/docker/test/test-server/scripts/2-initialise.sh similarity index 100% rename from docker/test/scripts/2-initialise.sh rename to docker/test/test-server/scripts/2-initialise.sh diff --git a/docker/test/docker-compose-workers.yaml b/docker/test/test-workers/docker-compose.yaml similarity index 100% rename from docker/test/docker-compose-workers.yaml rename to docker/test/test-workers/docker-compose.yaml diff --git a/documentation/testing.md b/documentation/testing.md index a5f9d57..2d7a713 100644 --- a/documentation/testing.md +++ b/documentation/testing.md @@ -2,16 +2,16 @@ The `/docker/test` folder contains a number of local test containers for testing before release. Specifically, the `docker-compose` creates a local environment with self signed keys, and the `docker-compose-workers` set up a bunch of clients that trust those keys. To use this environment, do the following: -* Navigate to the `/docker/test` directory +* Navigate to the `/docker/test/test-server` directory * Create a test network: `docker network create headscale-ui-test-network` * Stand up the `docker-compose` with `docker-compose up -d`. This will expose an HTTP (not https) portal on `8080` * Generate an API key with `docker exec headscale-test-backend headscale apikeys create` * Paste the api key into the UI at `http://:8080/web` * Generate a pre-auth key that's reusable and ephemeral. save it into `.env` in the test folder as the following: * `PREAUTH_KEY=` -* Stand up the test bench with `docker-compose -f docker-compose-workers.yaml up -d`, all of the workers should automatically join headscale +* move to the `test-workers` directory, and stand up the works with `docker-compose up -d` * Run your tests in the UI -* Bring down the environment with `docker-compose -f docker-compose-workers.yaml down` and `docker-compose down`. +* Bring down the environment(s) with `docker-compose down`. By default nothing is persisted. ## Tests Before Release Eventually it would be nice to automate this, but I've found a front end is difficult to fully automate testing. Prove me wrong other users! From e2d1a3e285b65ca8cab09438bac5bbe81d273033 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sat, 6 Aug 2022 17:30:29 +1000 Subject: [PATCH 015/160] minor documentation update --- documentation/testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/testing.md b/documentation/testing.md index 2d7a713..a077133 100644 --- a/documentation/testing.md +++ b/documentation/testing.md @@ -7,7 +7,7 @@ To use this environment, do the following: * Stand up the `docker-compose` with `docker-compose up -d`. This will expose an HTTP (not https) portal on `8080` * Generate an API key with `docker exec headscale-test-backend headscale apikeys create` * Paste the api key into the UI at `http://:8080/web` -* Generate a pre-auth key that's reusable and ephemeral. save it into `.env` in the test folder as the following: +* Generate a pre-auth key that's reusable and ephemeral. save it into `.env` in the `test-workers` folder as the following: * `PREAUTH_KEY=` * move to the `test-workers` directory, and stand up the works with `docker-compose up -d` * Run your tests in the UI From 9f883fc2c24b47576385f521b0472e1ddeb4db38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B9=BB=E7=8C=AA?= Date: Sat, 6 Aug 2022 16:36:51 +0000 Subject: [PATCH 016/160] Add tooltip class to Device Route active button --- src/lib/devices/DeviceCard/DeviceRoutes.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/devices/DeviceCard/DeviceRoutes.svelte b/src/lib/devices/DeviceCard/DeviceRoutes.svelte index 5b76743..aa9eb6e 100644 --- a/src/lib/devices/DeviceCard/DeviceRoutes.svelte +++ b/src/lib/devices/DeviceCard/DeviceRoutes.svelte @@ -49,7 +49,7 @@
  • {route} {#if routesList.enabledRoutes.includes(route)} - + {:else} {/if} From d4e9a97e0f0a941f3c20e7340b6bf78cdf2bf9b4 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sun, 7 Aug 2022 10:31:44 +1000 Subject: [PATCH 017/160] minor correction to test entrypoint --- docker/test/test-server/docker-compose.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/test/test-server/docker-compose.yaml b/docker/test/test-server/docker-compose.yaml index 09d5913..536c17c 100644 --- a/docker/test/test-server/docker-compose.yaml +++ b/docker/test/test-server/docker-compose.yaml @@ -9,8 +9,9 @@ services: # - ./container-data/data:/var/lib/headscale entrypoint: | sh -c "mkdir -p /var/lib/headscale; + mkdir -p /etc/headscale; touch /var/lib/headscale/db.sqlite; - wget -O /etc/headscale/config.yaml https://raw.githubusercontent.com/juanfont/headscale/main/config-example.yaml + wget --output-document /etc/headscale/config.yaml https://raw.githubusercontent.com/juanfont/headscale/main/config-example.yaml sed -i 's|http://127.0.0.1:8080|https://headscale-test.local|g' /etc/headscale/config.yaml; headscale serve" restart: unless-stopped From a1ac3a453192fbb31d940c0270a8254c670a8baa Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sun, 7 Aug 2022 20:04:17 +1000 Subject: [PATCH 018/160] fix headscaleURL needing to be required --- src/lib/settings/ServerSettings.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/settings/ServerSettings.svelte b/src/lib/settings/ServerSettings.svelte index 6d120f0..4579ef0 100644 --- a/src/lib/settings/ServerSettings.svelte +++ b/src/lib/settings/ServerSettings.svelte @@ -38,7 +38,7 @@

    Server Settings

    - +

    URL for your headscale server instance

    From 9db27aaa28fd4a6f04359e5f820cf8471cc807dc Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Mon, 8 Aug 2022 08:58:45 +1000 Subject: [PATCH 019/160] moved variable out of github actions --- .github/workflows/publish-release.yaml | 4 ---- docker/production/scripts/1-image-build.sh | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/publish-release.yaml b/.github/workflows/publish-release.yaml index 466fd3b..f193998 100644 --- a/.github/workflows/publish-release.yaml +++ b/.github/workflows/publish-release.yaml @@ -36,10 +36,6 @@ jobs: $(docker manifest inspect ghcr.io/${{ github.repository }}:$VERSION > /dev/null) || NOT_PREVIOUSLY_PUBLISHED=1 echo "::set-output name=NOT_PREVIOUSLY_PUBLISHED::$NOT_PREVIOUSLY_PUBLISHED" - - name: Update Version in Code - run: | - sed -i 's/insert-version/${{ steps.gathervars.outputs.VERSION }}/g' ./src/routes/settings.html.svelte - - name: Log in to the Container registry uses: docker/login-action@v1 if: ${{ steps.gathervars.outputs.NOT_PREVIOUSLY_PUBLISHED != 0 }} diff --git a/docker/production/scripts/1-image-build.sh b/docker/production/scripts/1-image-build.sh index bb4921f..271e136 100644 --- a/docker/production/scripts/1-image-build.sh +++ b/docker/production/scripts/1-image-build.sh @@ -8,5 +8,8 @@ git clone ${PROJECT_URL} ${PROJECT_NAME} cd ${PROJECT_NAME} npm install +# inject the version number +sed -i 's/insert-version/${{ steps.gathervars.outputs.VERSION }}/g' ./src/routes/settings.html.svelte + # build the project npm run build \ No newline at end of file From 022b6855a8a25a71586f8f86c0c1606995efa5a5 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Mon, 8 Aug 2022 09:22:47 +1000 Subject: [PATCH 020/160] added jq to image, moved build image to alpine --- docker/production/dockerfile | 6 +++++- docker/production/scripts/1-image-build.sh | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/docker/production/dockerfile b/docker/production/dockerfile index 55597e7..f184ab6 100644 --- a/docker/production/dockerfile +++ b/docker/production/dockerfile @@ -1,7 +1,7 @@ # arguments ARG VERSION="master" -FROM node:latest AS build +FROM node:current-alpine AS build #environment variables ENV PROJECT_NAME="headscale-ui" @@ -24,6 +24,10 @@ RUN chmod -R 755 scripts # Build the image. This build runs as root RUN /staging/scripts/1-image-build.sh +##### +## Second Image +##### + FROM alpine:latest #environment variables diff --git a/docker/production/scripts/1-image-build.sh b/docker/production/scripts/1-image-build.sh index 271e136..748bf02 100644 --- a/docker/production/scripts/1-image-build.sh +++ b/docker/production/scripts/1-image-build.sh @@ -4,12 +4,17 @@ set -x #clone the project git clone ${PROJECT_URL} ${PROJECT_NAME} +# add dependencies +# jq for parsing version information +apk add --no-cache jq + # install the project cd ${PROJECT_NAME} npm install # inject the version number -sed -i 's/insert-version/${{ steps.gathervars.outputs.VERSION }}/g' ./src/routes/settings.html.svelte +VERSION=$(jq -r '.version' package.json) +sed -i "s/insert-version/${VERSION}/g" ./src/routes/settings.html.svelte # build the project npm run build \ No newline at end of file From 346e233ac406b31bcaf503ac635c228d3eff881f Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Mon, 8 Aug 2022 09:37:26 +1000 Subject: [PATCH 021/160] added dependencies before cloning --- docker/production/scripts/1-image-build.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docker/production/scripts/1-image-build.sh b/docker/production/scripts/1-image-build.sh index 748bf02..a46d153 100644 --- a/docker/production/scripts/1-image-build.sh +++ b/docker/production/scripts/1-image-build.sh @@ -1,12 +1,13 @@ #!/bin/sh set -x -#clone the project -git clone ${PROJECT_URL} ${PROJECT_NAME} - # add dependencies # jq for parsing version information -apk add --no-cache jq +# git for cloning the repository +apk add --no-cache jq git + +#clone the project +git clone ${PROJECT_URL} ${PROJECT_NAME} # install the project cd ${PROJECT_NAME} From ee5cdf3f59ba2759438da139215ac55a33d0f016 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Mon, 8 Aug 2022 10:21:54 +1000 Subject: [PATCH 022/160] fixed associated regex --- src/lib/devices/DeviceCard/RenameDevice.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/devices/DeviceCard/RenameDevice.svelte b/src/lib/devices/DeviceCard/RenameDevice.svelte index 157d493..f8723a2 100644 --- a/src/lib/devices/DeviceCard/RenameDevice.svelte +++ b/src/lib/devices/DeviceCard/RenameDevice.svelte @@ -41,7 +41,7 @@ {:else} - + + +

    Generate an API key for your headscale instance and place it here.

    diff --git a/src/routes/settings.html.svelte b/src/routes/settings.html.svelte index 332d364..67f6cdb 100644 --- a/src/routes/settings.html.svelte +++ b/src/routes/settings.html.svelte @@ -19,7 +19,7 @@ {#if componentLoaded} -
    +
    From e12d6d1a1b9e0e7e8fee133b4a185c86e0ad86da Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Thu, 11 Aug 2022 16:24:23 +1000 Subject: [PATCH 036/160] added indicator to show time left in API Key --- src/lib/settings/ServerSettings.svelte | 26 ++++++++++++++----- .../ServerSettings/APIKeyTimeLeft.svelte | 4 +++ 2 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte diff --git a/src/lib/settings/ServerSettings.svelte b/src/lib/settings/ServerSettings.svelte index a0be2bb..13adfec 100644 --- a/src/lib/settings/ServerSettings.svelte +++ b/src/lib/settings/ServerSettings.svelte @@ -3,6 +3,8 @@ import { URLStore } from '$lib/common/stores.js'; import { APIKeyStore } from '$lib/common/stores.js'; import { getUsers } from '$lib/common/apiFunctions.svelte'; + import { onMount } from 'svelte'; + import ApiKeyTimeLeft from './ServerSettings/APIKeyTimeLeft.svelte'; // Server Settings let headscaleURL = $URLStore; @@ -33,6 +35,11 @@ $URLStore = headscaleURL; $APIKeyStore = headscaleAPIKey; } + + onMount(() => { + // test api settings on page load + TestServerSettings(); + }); @@ -40,14 +47,19 @@

    URL for your headscale server instance

    - +
    - - -
    diff --git a/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte b/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte new file mode 100644 index 0000000..4a2d3f8 --- /dev/null +++ b/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte @@ -0,0 +1,4 @@ + \ No newline at end of file From da3e6f679cc3fd50ab123b1df99096261c04c219 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Fri, 12 Aug 2022 16:14:25 +1000 Subject: [PATCH 037/160] added ability to toggle api key visibility --- src/lib/settings/ServerSettings.svelte | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/lib/settings/ServerSettings.svelte b/src/lib/settings/ServerSettings.svelte index 13adfec..c21ceb8 100644 --- a/src/lib/settings/ServerSettings.svelte +++ b/src/lib/settings/ServerSettings.svelte @@ -11,6 +11,7 @@ let headscaleAPIKey = $APIKeyStore; let serverSettingsForm: HTMLFormElement; let apiStatus = 'untested'; + let apiKeyInputState = 'password'; function TestServerSettings() { getUsers() @@ -54,12 +55,20 @@ {/if}
    - - -
    From ad9b840ddb33c06a46415f44e08f9542d12204ed Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sat, 13 Aug 2022 10:23:56 +1000 Subject: [PATCH 038/160] added getAPIKeys function --- src/lib/common/apiFunctions.svelte | 47 ++++++++++++++++++++++++++++-- src/lib/common/classes.ts | 12 ++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/src/lib/common/apiFunctions.svelte b/src/lib/common/apiFunctions.svelte index 1325c69..7144df8 100644 --- a/src/lib/common/apiFunctions.svelte +++ b/src/lib/common/apiFunctions.svelte @@ -1,5 +1,5 @@ + \ No newline at end of file + + + From d91cda082a923e8117b2459e37d23c1b42d3f671 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sat, 13 Aug 2022 11:14:39 +1000 Subject: [PATCH 040/160] added expiry warning --- .../ServerSettings/APIKeyTimeLeft.svelte | 41 ++++++++++++++----- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte b/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte index b12b2d6..7bb1f14 100644 --- a/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte +++ b/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte @@ -1,27 +1,46 @@ - From 7e4aab06ada52c02f17a7fe80652661979aa55bf Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sat, 13 Aug 2022 11:19:47 +1000 Subject: [PATCH 041/160] minor fixups --- src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte b/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte index 7bb1f14..93e9645 100644 --- a/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte +++ b/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte @@ -14,7 +14,7 @@ // match up the current apikey to the keylist keyList.forEach(key => { if($APIKeyStore.includes(key.prefix)) { - timeLeftTip = timeLeft(new Date(key.expiration)); + timeLeft(new Date(key.expiration)); } }); }) @@ -23,8 +23,8 @@ }); } - // returns time last seen in human readable format - function timeLeft(date: Date) { + // sets time expiry in human readable format + function timeLeft(date: Date): void { let currentTime = new Date(); // gets time difference in seconds let timeDifferenceDays = Math.round((date.getTime() - currentTime.getTime()) / 1000 / 60 / 60 / 24); @@ -32,7 +32,7 @@ $alertStore = `${timeDifferenceDays} days left before expiry, consider rolling your key` timeLeftWarning = true; } - return `${timeDifferenceDays} days left before expiry`; + timeLeftTip = `${timeDifferenceDays} days left before expiry`; } onMount(() => { From 0cd07d4f90ed2bad979506ed7851bb8344d8c347 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sat, 13 Aug 2022 11:22:00 +1000 Subject: [PATCH 042/160] more minor fixups --- src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte b/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte index 93e9645..a3813b2 100644 --- a/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte +++ b/src/lib/settings/ServerSettings/APIKeyTimeLeft.svelte @@ -29,7 +29,7 @@ // gets time difference in seconds let timeDifferenceDays = Math.round((date.getTime() - currentTime.getTime()) / 1000 / 60 / 60 / 24); if(timeDifferenceDays < 30) { - $alertStore = `${timeDifferenceDays} days left before expiry, consider rolling your key` + $alertStore = `${timeDifferenceDays} days left before API Key expiry, consider rolling your key` timeLeftWarning = true; } timeLeftTip = `${timeDifferenceDays} days left before expiry`; From 44d98afac013683afc255e461fa13e64e04c706a Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sat, 13 Aug 2022 11:35:32 +1000 Subject: [PATCH 043/160] fix bug with server setting test --- src/lib/settings/ServerSettings.svelte | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/settings/ServerSettings.svelte b/src/lib/settings/ServerSettings.svelte index c21ceb8..4bd45e5 100644 --- a/src/lib/settings/ServerSettings.svelte +++ b/src/lib/settings/ServerSettings.svelte @@ -2,7 +2,7 @@ import { fly } from 'svelte/transition'; import { URLStore } from '$lib/common/stores.js'; import { APIKeyStore } from '$lib/common/stores.js'; - import { getUsers } from '$lib/common/apiFunctions.svelte'; + import { getAPIKeys } from '$lib/common/apiFunctions.svelte'; import { onMount } from 'svelte'; import ApiKeyTimeLeft from './ServerSettings/APIKeyTimeLeft.svelte'; @@ -14,7 +14,7 @@ let apiKeyInputState = 'password'; function TestServerSettings() { - getUsers() + getAPIKeys() .then(() => { apiStatus = 'succeeded'; }) @@ -50,7 +50,7 @@

    URL for your headscale server instance

    From 4f3f17adc2cc4200b56478306f53d02a9ab6d3f6 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sat, 13 Aug 2022 18:52:49 +1000 Subject: [PATCH 044/160] basic functionality for api key rollover --- src/lib/common/apiFunctions.svelte | 71 +++++++++++++++++++ src/lib/settings/ServerSettings.svelte | 22 ++---- .../ServerSettings/RolloverAPI.svelte | 50 +++++++++++++ 3 files changed, 127 insertions(+), 16 deletions(-) create mode 100644 src/lib/settings/ServerSettings/RolloverAPI.svelte diff --git a/src/lib/common/apiFunctions.svelte b/src/lib/common/apiFunctions.svelte index 5891b0f..51710dc 100644 --- a/src/lib/common/apiFunctions.svelte +++ b/src/lib/common/apiFunctions.svelte @@ -83,6 +83,77 @@ }); } + export async function newAPIKey(APIKeyExpiration: string): Promise { + // variables in local storage + let headscaleURL = localStorage.getItem('headscaleURL') || ''; + let headscaleAPIKey = localStorage.getItem('headscaleAPIKey') || ''; + + // endpoint url for editing users + let endpointURL = '/api/v1/apikey'; + + let APIKeyResponse = new Response(); + let APIKeyString = ''; + + await fetch(headscaleURL + endpointURL, { + method: 'POST', + headers: { + Accept: 'application/json', + Authorization: `Bearer ${headscaleAPIKey}` + }, + body: JSON.stringify({ + expiration: APIKeyExpiration + }) + }) + .then((response) => { + if (response.ok) { + APIKeyResponse = response; + } else { + return response.text().then((text) => { + throw JSON.parse(text).message; + }); + } + }) + .catch((error) => { + throw error; + }); + await APIKeyResponse.json().then((data) => { + APIKeyString = data.apiKey; + }); + + return APIKeyString; + } + + export async function expireAPIKey(APIKeyPrefix: string) { + // variables in local storage + let headscaleURL = localStorage.getItem('headscaleURL') || ''; + let headscaleAPIKey = localStorage.getItem('headscaleAPIKey') || ''; + + // endpoint url for editing users + let endpointURL = '/api/v1/apikey/expire'; + + await fetch(headscaleURL + endpointURL, { + method: 'POST', + headers: { + Accept: 'application/json', + Authorization: `Bearer ${headscaleAPIKey}` + }, + body: JSON.stringify({ + prefix: APIKeyPrefix + }) + }) + .then((response) => { + if (response.ok) { + } else { + return response.text().then((text) => { + throw JSON.parse(text).message; + }); + } + }) + .catch((error) => { + throw error; + }); + } + export async function updateTags(deviceID: string, tags: string[]): Promise { // variables in local storage let headscaleURL = localStorage.getItem('headscaleURL') || ''; diff --git a/src/lib/settings/ServerSettings.svelte b/src/lib/settings/ServerSettings.svelte index 4bd45e5..d954e3f 100644 --- a/src/lib/settings/ServerSettings.svelte +++ b/src/lib/settings/ServerSettings.svelte @@ -5,6 +5,7 @@ import { getAPIKeys } from '$lib/common/apiFunctions.svelte'; import { onMount } from 'svelte'; import ApiKeyTimeLeft from './ServerSettings/APIKeyTimeLeft.svelte'; +import RolloverApi from './ServerSettings/RolloverAPI.svelte'; // Server Settings let headscaleURL = $URLStore; @@ -23,18 +24,11 @@ }); } - function SaveServerSettings(): void { - if (serverSettingsForm.reportValidity()) { - $URLStore = headscaleURL; - $APIKeyStore = headscaleAPIKey; - } - } - function ClearServerSettings() { headscaleURL = ''; headscaleAPIKey = ''; - $URLStore = headscaleURL; - $APIKeyStore = headscaleAPIKey; + $URLStore = ''; + $APIKeyStore = ''; } onMount(() => { @@ -46,7 +40,7 @@

    Server Settings

    - +

    URL for your headscale server instance

    - + - +

    Generate an API key for your headscale instance and place it here.

    - -
    - -
    {#if apiStatus === 'succeeded'} diff --git a/src/lib/settings/ServerSettings/RolloverAPI.svelte b/src/lib/settings/ServerSettings/RolloverAPI.svelte new file mode 100644 index 0000000..f8b113a --- /dev/null +++ b/src/lib/settings/ServerSettings/RolloverAPI.svelte @@ -0,0 +1,50 @@ + + + From acff41daf44ff529fc65d881c7189c31192ab143 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sat, 13 Aug 2022 19:12:45 +1000 Subject: [PATCH 045/160] update server form to handle dynamic api key changes --- src/lib/settings/ServerSettings.svelte | 49 +++++++++++++++----------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/src/lib/settings/ServerSettings.svelte b/src/lib/settings/ServerSettings.svelte index d954e3f..c939ffe 100644 --- a/src/lib/settings/ServerSettings.svelte +++ b/src/lib/settings/ServerSettings.svelte @@ -5,12 +5,9 @@ import { getAPIKeys } from '$lib/common/apiFunctions.svelte'; import { onMount } from 'svelte'; import ApiKeyTimeLeft from './ServerSettings/APIKeyTimeLeft.svelte'; -import RolloverApi from './ServerSettings/RolloverAPI.svelte'; + import RolloverApi from './ServerSettings/RolloverAPI.svelte'; // Server Settings - let headscaleURL = $URLStore; - let headscaleAPIKey = $APIKeyStore; - let serverSettingsForm: HTMLFormElement; let apiStatus = 'untested'; let apiKeyInputState = 'password'; @@ -25,10 +22,9 @@ import RolloverApi from './ServerSettings/RolloverAPI.svelte'; } function ClearServerSettings() { - headscaleURL = ''; - headscaleAPIKey = ''; $URLStore = ''; $APIKeyStore = ''; + apiStatus = 'untested'; } onMount(() => { @@ -37,7 +33,7 @@ import RolloverApi from './ServerSettings/RolloverAPI.svelte'; }); - +

    Server Settings

    @@ -45,28 +41,41 @@ import RolloverApi from './ServerSettings/RolloverAPI.svelte';
    - - - +

    Generate an API key for your headscale instance and place it here.

    + {#if apiStatus != 'succeeded'} + + {:else} + + {/if} {#if apiStatus === 'succeeded'} From 2ad12f5a9225f07cdeb0fe11dbeba416b8b3d4e8 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sat, 13 Aug 2022 19:18:22 +1000 Subject: [PATCH 046/160] fix notification for time/date --- src/lib/settings/ServerSettings.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/settings/ServerSettings.svelte b/src/lib/settings/ServerSettings.svelte index c939ffe..9d301c6 100644 --- a/src/lib/settings/ServerSettings.svelte +++ b/src/lib/settings/ServerSettings.svelte @@ -41,7 +41,7 @@

    Generate an API key for your headscale instance and place it here.

    {#if apiStatus != 'succeeded'} diff --git a/src/lib/settings/ServerSettings/RolloverAPI.svelte b/src/lib/settings/ServerSettings/RolloverAPI.svelte index f8b113a..fd77633 100644 --- a/src/lib/settings/ServerSettings/RolloverAPI.svelte +++ b/src/lib/settings/ServerSettings/RolloverAPI.svelte @@ -4,6 +4,7 @@ import { alertStore, APIKeyStore } from '$lib/common/stores'; let keyList = [new APIKey()]; let currentKey = new APIKey(); + export let apiStatus = ''; // get current API keys // Match to current key @@ -46,5 +47,5 @@ getAPIKeysAction(); }} class="btn btn-sm btn-secondary capitalize ml-4" - type="button">Rollover API KeyRollover API Key From ecce526964a427fca1e494f7e141be1e5c7ec64f Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sat, 13 Aug 2022 19:43:19 +1000 Subject: [PATCH 048/160] smoothed loading for settings page --- src/routes/settings.html.svelte | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/routes/settings.html.svelte b/src/routes/settings.html.svelte index 67f6cdb..d510bf3 100644 --- a/src/routes/settings.html.svelte +++ b/src/routes/settings.html.svelte @@ -12,19 +12,19 @@ onMount(async () => { // Display component frontend + await new Promise(r => setTimeout(r, 200)); componentLoaded = true; }); - {#if componentLoaded} -
    - -
    - -
    -

    Version

    insert-version -
    - {/if} +
  • {/each} diff --git a/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte b/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte new file mode 100644 index 0000000..3ca0d6b --- /dev/null +++ b/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte @@ -0,0 +1,110 @@ + From 8664048ffcc54502f891845288b108a56f56ec44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Kli=C5=9B?= Date: Fri, 23 Dec 2022 08:27:06 +0100 Subject: [PATCH 082/160] add support for docker layer caching and arm64/arm32v7 images (#81) --- .github/workflows/publish-dev-image.yaml | 16 ++++++++++++++++ .github/workflows/publish-release.yaml | 17 ++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish-dev-image.yaml b/.github/workflows/publish-dev-image.yaml index bdccc6e..8ad0b6b 100644 --- a/.github/workflows/publish-dev-image.yaml +++ b/.github/workflows/publish-dev-image.yaml @@ -26,6 +26,19 @@ jobs: - name: Checkout Repository uses: actions/checkout@v2 + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Cache Docker layers + uses: actions/cache@v3 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: ${{ runner.os }}-buildx- + - name: Log in to the Container registry uses: docker/login-action@v1 with: @@ -43,4 +56,7 @@ jobs: tags: | ghcr.io/${{ github.repository }}-dev:latest ghcr.io/${{ github.repository }}-dev:${{ steps.gathervars.outputs.VERSION }} + platforms: linux/amd64,linux/arm64,linux/arm32v7 + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache push: true diff --git a/.github/workflows/publish-release.yaml b/.github/workflows/publish-release.yaml index f193998..7641721 100644 --- a/.github/workflows/publish-release.yaml +++ b/.github/workflows/publish-release.yaml @@ -23,7 +23,6 @@ jobs: # setting tags if echo "$VERSION" | grep -q "beta"; then - TAGS="ghcr.io/${{ github.repository }}:beta, ghcr.io/${{ github.repository }}:$VERSION, ghcr.io/${{ github.repository }}:latest" PRIMARY_TAG=latest else @@ -36,6 +35,19 @@ jobs: $(docker manifest inspect ghcr.io/${{ github.repository }}:$VERSION > /dev/null) || NOT_PREVIOUSLY_PUBLISHED=1 echo "::set-output name=NOT_PREVIOUSLY_PUBLISHED::$NOT_PREVIOUSLY_PUBLISHED" + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Cache Docker layers + uses: actions/cache@v3 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: ${{ runner.os }}-buildx- + - name: Log in to the Container registry uses: docker/login-action@v1 if: ${{ steps.gathervars.outputs.NOT_PREVIOUSLY_PUBLISHED != 0 }} @@ -54,6 +66,9 @@ jobs: context: ./docker/production tags: | ${{ steps.gathervars.outputs.TAG }} + platforms: linux/amd64,linux/arm64,linux/arm32v7 + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache push: true - name: Extract build out of docker image From 055a810463b857a7b507a8b74b2d539c0d14d5b8 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Fri, 23 Dec 2022 18:31:22 +1100 Subject: [PATCH 083/160] tests and version update --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2014042..330da73 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1833,9 +1833,9 @@ } }, "node_modules/rollup": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.8.0.tgz", - "integrity": "sha512-+UR6PnUslneJNiJfLSzy4XH6R50ZGF0MS7UCv20ftXrktF/TkvZDwiBtXX65esblLR5p8w6LmXgPwt2f2B8SoQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.8.1.tgz", + "integrity": "sha512-4yh9eMW7byOroYcN8DlF9P/2jCpu6txVIHjEqquQVSx7DI0RgyCCN3tjrcy4ra6yVtV336aLBB3v2AarYAxePQ==", "dev": true, "peer": true, "bin": { @@ -3620,9 +3620,9 @@ } }, "rollup": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.8.0.tgz", - "integrity": "sha512-+UR6PnUslneJNiJfLSzy4XH6R50ZGF0MS7UCv20ftXrktF/TkvZDwiBtXX65esblLR5p8w6LmXgPwt2f2B8SoQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.8.1.tgz", + "integrity": "sha512-4yh9eMW7byOroYcN8DlF9P/2jCpu6txVIHjEqquQVSx7DI0RgyCCN3tjrcy4ra6yVtV336aLBB3v2AarYAxePQ==", "dev": true, "peer": true, "requires": { diff --git a/package.json b/package.json index ba44137..00ca380 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "headscale-ui", - "version": "2022.11.05-beta", + "version": "2022.12.23-beta", "scripts": { "dev": "vite dev --https --port 443 --host 0.0.0.0", "build": "vite build", From 84c8ed5bd59a71705929449c7061838f4046dbda Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Fri, 23 Dec 2022 18:35:31 +1100 Subject: [PATCH 084/160] fix broken image reference for prod docker builds --- docker/production/dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/production/dockerfile b/docker/production/dockerfile index 7e7e715..6e4ccdf 100644 --- a/docker/production/dockerfile +++ b/docker/production/dockerfile @@ -3,7 +3,7 @@ ARG VERSION="master" # Branch to check out ARG CHECKOUT_BRANCH="master" -FROM node:lts-alpine AS build +FROM node:lts AS build #environment variables ENV PROJECT_NAME="headscale-ui" From 271e1045a08d5a95817b35efc8af0e236ee5adab Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Fri, 23 Dec 2022 18:40:07 +1100 Subject: [PATCH 085/160] fix platform tags in github actions --- .github/workflows/publish-release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-release.yaml b/.github/workflows/publish-release.yaml index 7641721..4787b26 100644 --- a/.github/workflows/publish-release.yaml +++ b/.github/workflows/publish-release.yaml @@ -66,7 +66,7 @@ jobs: context: ./docker/production tags: | ${{ steps.gathervars.outputs.TAG }} - platforms: linux/amd64,linux/arm64,linux/arm32v7 + platforms: linux/amd64,linux/arm/v7,linux/arm64/v8 cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache push: true From 62e362ebc67a096484e90cf05af8de8ecfebbc5d Mon Sep 17 00:00:00 2001 From: routerino <45954722+routerino@users.noreply.github.com> Date: Sat, 24 Dec 2022 10:49:14 +1100 Subject: [PATCH 086/160] fixed regression in legacy api (#88) --- src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte b/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte index 3ca0d6b..2c340b0 100644 --- a/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte +++ b/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte @@ -66,11 +66,11 @@ routeList.forEach((route) => { if (route.enabled) { endpointURL += encodeURIComponent(route.prefix); - endpointURL += '&'; + endpointURL += '&routes='; } }); // remove trailing ampersand and routes= expressions - endpointURL = (endpointURL.replace(/\&$/, '')).replace(/routes=$/,''); + endpointURL = endpointURL.replace(/\&routes=$/, '').replace(/\?routes=$/, '?'); } else { routeList.forEach((route) => { if (route.id == routeID) { From fb83efb9507560b0c643351b19a579888bcdfd12 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sat, 24 Dec 2022 10:49:43 +1100 Subject: [PATCH 087/160] update version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 00ca380..482dec5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "headscale-ui", - "version": "2022.12.23-beta", + "version": "2022.12.23.1-beta", "scripts": { "dev": "vite dev --https --port 443 --host 0.0.0.0", "build": "vite build", From acb4211a890972a94463b1ced99d471d3038f49a Mon Sep 17 00:00:00 2001 From: routerino <45954722+routerino@users.noreply.github.com> Date: Sat, 24 Dec 2022 10:56:02 +1100 Subject: [PATCH 088/160] remove caching from docker publish --- .github/workflows/publish-release.yaml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/.github/workflows/publish-release.yaml b/.github/workflows/publish-release.yaml index 4787b26..d8c94c5 100644 --- a/.github/workflows/publish-release.yaml +++ b/.github/workflows/publish-release.yaml @@ -41,13 +41,6 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - - name: Cache Docker layers - uses: actions/cache@v3 - with: - path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} - restore-keys: ${{ runner.os }}-buildx- - - name: Log in to the Container registry uses: docker/login-action@v1 if: ${{ steps.gathervars.outputs.NOT_PREVIOUSLY_PUBLISHED != 0 }} @@ -67,8 +60,6 @@ jobs: tags: | ${{ steps.gathervars.outputs.TAG }} platforms: linux/amd64,linux/arm/v7,linux/arm64/v8 - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache push: true - name: Extract build out of docker image @@ -114,4 +105,4 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - release_id: ${{ steps.create_release.outputs.id }} \ No newline at end of file + release_id: ${{ steps.create_release.outputs.id }} From 3e05713ae61b91ccfbaaa2b3a030c7265951e201 Mon Sep 17 00:00:00 2001 From: routerino <45954722+routerino@users.noreply.github.com> Date: Sat, 24 Dec 2022 10:56:29 +1100 Subject: [PATCH 089/160] re-publish due to caching issues --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 482dec5..459eebc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "headscale-ui", - "version": "2022.12.23.1-beta", + "version": "2022.12.23.2-beta", "scripts": { "dev": "vite dev --https --port 443 --host 0.0.0.0", "build": "vite build", From 913ef222630bb8656c0f71b4000c4a518a189c1c Mon Sep 17 00:00:00 2001 From: Niek van der Maas Date: Fri, 20 Jan 2023 09:02:00 +0100 Subject: [PATCH 090/160] Documentation improvements (#91) fair enough, seems appropriate. --- README.md | 2 +- documentation/configuration.md | 73 ++++++++++++++++++---------------- 2 files changed, 39 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 9b653de..f0643c2 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ If you are using docker, you can install `headscale` alongside `headscale-ui`, l version: '3.5' services: headscale: - image: headscale/headscale:latest-alpine + image: headscale/headscale:latest container_name: headscale volumes: - ./container-config:/etc/headscale diff --git a/documentation/configuration.md b/documentation/configuration.md index eebbe41..f56fbef 100644 --- a/documentation/configuration.md +++ b/documentation/configuration.md @@ -1,50 +1,53 @@ -## Traefik Configuration -(Thanks @DennisGaida) +# Traefik Configuration + +(Thanks [DennisGaida](https://github.com/DennisGaida) and [Niek](https://github.com/Niek)) + +Below is a complete docker-compose example for bringing up Traefik + headscale + headscale-ui. Run with: `docker-compose up -d` and headscale-ui will be accessible at . + ```yaml +version: '3.9' + +services: headscale: image: headscale/headscale:latest + pull_policy: always container_name: headscale restart: unless-stopped - networks: - - traefik_proxy command: headscale serve volumes: - - $DOCKERDIR/headscale/config:/etc/headscale + - ./headscale/config:/etc/headscale + - ./headscale/data:/var/lib/headscale labels: - - "traefik.enable=true" - ## HTTP Routers - - "traefik.http.routers.headscale-rtr.entrypoints=https" - - "traefik.http.routers.headscale-rtr.rule=Host(`hs.${DOMAIN_PUBLIC}`)" - ## Middlewares - - "traefik.http.routers.headscale-rtr.middlewares=chain-no-auth@file" - ## HTTP Services - - "traefik.http.routers.headscale-rtr.service=headscale-svc" - - "traefik.http.services.headscale-svc.loadbalancer.server.port=8080" + - traefik.enable=true + - traefik.http.routers.headscale-rtr.rule=PathPrefix(`/`) # you might want to add: && Host(`your.domain.name`)" + - traefik.http.services.headscale-svc.loadbalancer.server.port=8080 headscale-ui: image: ghcr.io/gurucomputing/headscale-ui:latest + pull_policy: always container_name: headscale-ui restart: unless-stopped - networks: - - traefik_proxy labels: - - "traefik.enable=true" - ## HTTP Routers - - "traefik.http.routers.headscale_ui-rtr.entrypoints=https" - - "traefik.http.routers.headscale_ui-rtr.rule=Host(`hs.${DOMAIN_PUBLIC}`) && PathPrefix(`/web`)" - ## Middlewares - - "traefik.http.routers.headscale_ui-rtr.middlewares=chain-no-auth@file" - ## HTTP Services - - "traefik.http.routers.headscale_ui-rtr.service=headscale_ui-svc" - - "traefik.http.services.headscale_ui-svc.loadbalancer.server.port=443" - - "traefik.http.services.headscale_ui-svc.loadbalancer.server.scheme=https" - - "traefik.http.services.headscale_ui-svc.loadbalancer.serversTransport=disableSSLCheck@file" -``` + - traefik.enable=true + - traefik.http.routers.headscale-ui-rtr.rule=PathPrefix(`/web`) # you might want to add: && Host(`your.domain.name`)" + - traefik.http.services.headscale-ui-svc.loadbalancer.server.port=80 -and `traefik.yaml` -```yaml -http: - serversTransports: - disableSSLCheck: - insecureSkipVerify: true -``` \ No newline at end of file + traefik: + image: traefik:latest + pull_policy: always + restart: unless-stopped + container_name: traefik + command: + - --api.insecure=true # remove in production + - --providers.docker + - --entrypoints.web.address=:80 + - --entrypoints.websecure.address=:443 + - --global.sendAnonymousUsage=false + ports: + - 80:80 + - 443:443 + - 8080:8080 # web UI (enabled with api.insecure) + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - ./traefik/certificates:/certificates +``` From 5fad4877a97f1bbd7d83cb09b3a5156f10fb5fa6 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Mon, 30 Jan 2023 12:07:06 +1100 Subject: [PATCH 091/160] replace all instances of namespace with user --- src/lib/common/apiFunctions.svelte | 24 ++++++++++---------- src/lib/common/classes.ts | 4 ++-- src/lib/common/searching.svelte | 2 +- src/lib/devices/CreateDevice.svelte | 2 +- src/lib/devices/DeviceCard/MoveDevice.svelte | 4 ++-- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/lib/common/apiFunctions.svelte b/src/lib/common/apiFunctions.svelte index c6a9630..a61ed34 100644 --- a/src/lib/common/apiFunctions.svelte +++ b/src/lib/common/apiFunctions.svelte @@ -10,7 +10,7 @@ let headscaleAPIKey = localStorage.getItem('headscaleAPIKey') || ''; // endpoint url for getting users - let endpointURL = '/api/v1/namespace'; + let endpointURL = '/api/v1/user'; //returning variables let headscaleUsers = [new User()]; @@ -40,7 +40,7 @@ }); await headscaleUsersResponse.json().then((data) => { - headscaleUsers = data.namespaces + headscaleUsers = data.users // sort the users headscaleUsers = sortUsers(headscaleUsers); }); @@ -57,7 +57,7 @@ let headscaleAPIKey = localStorage.getItem('headscaleAPIKey') || ''; // endpoint url for editing users - let endpointURL = '/api/v1/namespace/' + currentUsername + '/rename/' + newUsername; + let endpointURL = '/api/v1/user/' + currentUsername + '/rename/' + newUsername; await fetch(headscaleURL + endpointURL, { method: 'POST', @@ -189,7 +189,7 @@ let headscaleAPIKey = localStorage.getItem('headscaleAPIKey') || ''; // endpoint url for editing users - let endpointURL = '/api/v1/namespace/' + currentUsername; + let endpointURL = '/api/v1/user/' + currentUsername; await fetch(headscaleURL + endpointURL, { method: 'DELETE', @@ -218,7 +218,7 @@ let headscaleAPIKey = localStorage.getItem('headscaleAPIKey') || ''; // endpoint url for editing users - let endpointURL = '/api/v1/namespace'; + let endpointURL = '/api/v1/user'; await fetch(headscaleURL + endpointURL, { method: 'POST', @@ -281,8 +281,8 @@ }); await headscaleDeviceResponse.json().then((data) => { - headscaleDevices = data.machines - headscaleDevices = sortDevices(headscaleDevices) + headscaleDevices = data.machines; + headscaleDevices = sortDevices(headscaleDevices); }); // set the stores apiTestStore.set('succeeded'); @@ -341,7 +341,7 @@ let headscalePreAuthKey = [new PreAuthKey()]; let headscalePreAuthKeyResponse: Response = new Response(); - await fetch(headscaleURL + endpointURL + '?namespace=' + userName, { + await fetch(headscaleURL + endpointURL + '?user=' + userName, { method: 'GET', headers: { Accept: 'application/json', @@ -381,7 +381,7 @@ Authorization: `Bearer ${headscaleAPIKey}` }, body: JSON.stringify({ - namespace: userName, + user: userName, expiration: expiry, reusable: reusable, ephemeral: ephemeral @@ -416,7 +416,7 @@ Authorization: `Bearer ${headscaleAPIKey}` }, body: JSON.stringify({ - namespace: userName, + user: userName, key: preAuthKey }) }) @@ -442,7 +442,7 @@ // endpoint url for editing users let endpointURL = '/api/v1/machine/register'; - await fetch(headscaleURL + endpointURL + '?namespace=' + userName + '&key=' + key, { + await fetch(headscaleURL + endpointURL + '?user=' + userName + '&key=' + key, { method: 'POST', headers: { Accept: 'application/json', @@ -469,7 +469,7 @@ let headscaleAPIKey = localStorage.getItem('headscaleAPIKey') || ''; // endpoint url for editing users - let endpointURL = '/api/v1/machine/' + deviceID + '/namespace?namespace=' + user; + let endpointURL = '/api/v1/machine/' + deviceID + '/user?user=' + user; await fetch(headscaleURL + endpointURL, { method: 'POST', diff --git a/src/lib/common/classes.ts b/src/lib/common/classes.ts index e12a6b6..c4742b3 100644 --- a/src/lib/common/classes.ts +++ b/src/lib/common/classes.ts @@ -7,7 +7,7 @@ export class Device { public forcedTags: string[] = [] public validTags: string[] = [] public invalidTags: string[] = [] - public namespace: { name: string } = { name: '' } + public user: { name: string } = { name: '' } public constructor(init?: Partial) { Object.assign(this, init); @@ -47,7 +47,7 @@ export class APIKey { } export class PreAuthKey { - public namespace: string = ''; + public user: string = ''; public id: string = ''; public key: string = ''; public createdAt: string = ''; diff --git a/src/lib/common/searching.svelte b/src/lib/common/searching.svelte index 344a2f5..d48e80a 100644 --- a/src/lib/common/searching.svelte +++ b/src/lib/common/searching.svelte @@ -24,7 +24,7 @@ // only run if we have search contents set if (get(deviceSearchStore)) { let options: Fuse.IFuseOptions = { - keys: ['id', 'givenName', 'name', 'forcedTags', 'validTags', 'namespace.name'] + keys: ['id', 'givenName', 'name', 'forcedTags', 'validTags', 'user.name'] }; let searcher = new Fuse(get(deviceStore), options); diff --git a/src/lib/devices/CreateDevice.svelte b/src/lib/devices/CreateDevice.svelte index 4dc2166..1de69e6 100644 --- a/src/lib/devices/CreateDevice.svelte +++ b/src/lib/devices/CreateDevice.svelte @@ -45,7 +45,7 @@ {#if activeTab == 0}

    Install Tailscale with the client pointing to your domain (see headscale client documentation). Log in using the tray icon, and your browser should give you instructions with a key.

    -
    headscale -n NAMESPACE nodes register --key <your device key>
    +
    headscale -u USER nodes register --key <your device key>

    Copy the key below:

    diff --git a/src/lib/devices/DeviceCard/MoveDevice.svelte b/src/lib/devices/DeviceCard/MoveDevice.svelte index bbc5763..0353ebf 100644 --- a/src/lib/devices/DeviceCard/MoveDevice.svelte +++ b/src/lib/devices/DeviceCard/MoveDevice.svelte @@ -6,7 +6,7 @@ export let device = new Device(); let deviceMoving = false; - let selectedUser = device.namespace.name; + let selectedUser = device.user.name; function moveDeviceAction() { moveDevice(device.id, selectedUser) @@ -23,7 +23,7 @@ {#if !deviceMoving} - {device.namespace.name} + {device.user.name} {route.prefix} {#if route.enabled} {/if} - +
    {/each} diff --git a/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte b/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte index f43d34c..09f09c8 100644 --- a/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte +++ b/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte @@ -80,4 +80,30 @@ throw error; }); } + + export async function deleteDeviceRoute(routeID: number): Promise { + // variables in local storage + let headscaleURL = localStorage.getItem('headscaleURL') || ''; + let headscaleAPIKey = localStorage.getItem('headscaleAPIKey') || ''; + let endpointURL = `/api/v1/routes/${routeID}`; + + await fetch(headscaleURL + endpointURL, { + method: 'DELETE', + headers: { + Accept: 'application/json', + Authorization: `Bearer ${headscaleAPIKey}` + } + }) + .then((response) => { + if (response.ok) { + } else { + return response.text().then((text) => { + throw JSON.parse(text).message; + }); + } + }) + .catch((error) => { + throw error; + }); + } From e629197b365ed46826e811e39846e28518697270 Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sun, 18 Jun 2023 13:22:55 +1000 Subject: [PATCH 100/160] updated dependencies to latest --- package-lock.json | 2024 ++++++++++++++++++++++----------------------- package.json | 12 +- 2 files changed, 1017 insertions(+), 1019 deletions(-) diff --git a/package-lock.json b/package-lock.json index 330da73..6a125ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,36 +1,48 @@ { "name": "headscale-ui", - "version": "2022.11.05-beta", + "version": "2023.01.30-beta-1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "headscale-ui", - "version": "2022.11.05-beta", + "version": "2023.01.30-beta-1", "devDependencies": { - "@sveltejs/adapter-auto": "^1.0.0", - "@sveltejs/adapter-static": "^1.0.0", + "@sveltejs/adapter-auto": "^2.1.0", + "@sveltejs/adapter-static": "^2.0.2", "@sveltejs/kit": "^1.0.0", "@tailwindcss/typography": "github:tailwindcss/typography", "@vitejs/plugin-basic-ssl": "^1.0.1", "autoprefixer": "^10.4.4", - "daisyui": "^2.19.0", + "daisyui": "^3.1.1", "fuse.js": "^6.6.2", "postcss": "^8.4.12", "postcss-load-config": "^4.0.1", "prettier": "^2.6.2", "prettier-plugin-svelte": "^2.7.0", "svelte": "^3.44.0", - "svelte-check": "^2.7.1", + "svelte-check": "^3.4.3", "svelte-preprocess": "^5.0.0", "tailwindcss": "^3.0.23", - "typescript": "^4.7.2" + "typescript": "^5.1.3" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@esbuild/android-arm": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.10.tgz", - "integrity": "sha512-RmJjQTRrO6VwUWDrzTBLmV4OJZTarYsiepLGlF2rYTVB701hSorPywPGvP6d8HCuuRibyXa5JX4s3jN2kHEtjQ==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", "cpu": [ "arm" ], @@ -45,9 +57,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.10.tgz", - "integrity": "sha512-47Y+NwVKTldTlDhSgJHZ/RpvBQMUDG7eKihqaF/u6g7s0ZPz4J1vy8A3rwnnUOF2CuDn7w7Gj/QcMoWz3U3SJw==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", "cpu": [ "arm64" ], @@ -62,9 +74,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.10.tgz", - "integrity": "sha512-C4PfnrBMcuAcOurQzpF1tTtZz94IXO5JmICJJ3NFJRHbXXsQUg9RFG45KvydKqtFfBaFLCHpduUkUfXwIvGnRg==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", "cpu": [ "x64" ], @@ -79,9 +91,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.10.tgz", - "integrity": "sha512-bH/bpFwldyOKdi9HSLCLhhKeVgRYr9KblchwXgY2NeUHBB/BzTUHtUSBgGBmpydB1/4E37m+ggXXfSrnD7/E7g==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", "cpu": [ "arm64" ], @@ -96,9 +108,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.10.tgz", - "integrity": "sha512-OXt7ijoLuy+AjDSKQWu+KdDFMBbdeaL6wtgMKtDUXKWHiAMKHan5+R1QAG6HD4+K0nnOvEJXKHeA9QhXNAjOTQ==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", "cpu": [ "x64" ], @@ -113,9 +125,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.10.tgz", - "integrity": "sha512-shSQX/3GHuspE3Uxtq5kcFG/zqC+VuMnJkqV7LczO41cIe6CQaXHD3QdMLA4ziRq/m0vZo7JdterlgbmgNIAlQ==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", "cpu": [ "arm64" ], @@ -130,9 +142,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.10.tgz", - "integrity": "sha512-5YVc1zdeaJGASijZmTzSO4h6uKzsQGG3pkjI6fuXvolhm3hVRhZwnHJkforaZLmzvNv5Tb7a3QL2FAVmrgySIA==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", "cpu": [ "x64" ], @@ -147,9 +159,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.10.tgz", - "integrity": "sha512-c360287ZWI2miBnvIj23bPyVctgzeMT2kQKR+x94pVqIN44h3GF8VMEs1SFPH1UgyDr3yBbx3vowDS1SVhyVhA==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", "cpu": [ "arm" ], @@ -164,9 +176,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.10.tgz", - "integrity": "sha512-2aqeNVxIaRfPcIaMZIFoblLh588sWyCbmj1HHCCs9WmeNWm+EIN0SmvsmPvTa/TsNZFKnxTcvkX2eszTcCqIrA==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", "cpu": [ "arm64" ], @@ -181,9 +193,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.10.tgz", - "integrity": "sha512-sqMIEWeyrLGU7J5RB5fTkLRIFwsgsQ7ieWXlDLEmC2HblPYGb3AucD7inw2OrKFpRPKsec1l+lssiM3+NV5aOw==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", "cpu": [ "ia32" ], @@ -198,9 +210,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.10.tgz", - "integrity": "sha512-O7Pd5hLEtTg37NC73pfhUOGTjx/+aXu5YoSq3ahCxcN7Bcr2F47mv+kG5t840thnsEzrv0oB70+LJu3gUgchvg==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", "cpu": [ "loong64" ], @@ -215,9 +227,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.10.tgz", - "integrity": "sha512-FN8mZOH7531iPHM0kaFhAOqqNHoAb6r/YHW2ZIxNi0a85UBi2DO4Vuyn7t1p4UN8a4LoAnLOT1PqNgHkgBJgbA==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", "cpu": [ "mips64el" ], @@ -232,9 +244,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.10.tgz", - "integrity": "sha512-Dg9RiqdvHOAWnOKIOTsIx8dFX9EDlY2IbPEY7YFzchrCiTZmMkD7jWA9UdZbNUygPjdmQBVPRCrLydReFlX9yg==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", "cpu": [ "ppc64" ], @@ -249,9 +261,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.10.tgz", - "integrity": "sha512-XMqtpjwzbmlar0BJIxmzu/RZ7EWlfVfH68Vadrva0Wj5UKOdKvqskuev2jY2oPV3aoQUyXwnMbMrFmloO2GfAw==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", "cpu": [ "riscv64" ], @@ -266,9 +278,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.10.tgz", - "integrity": "sha512-fu7XtnoeRNFMx8DjK3gPWpFBDM2u5ba+FYwg27SjMJwKvJr4bDyKz5c+FLXLUSSAkMAt/UL+cUbEbra+rYtUgw==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", "cpu": [ "s390x" ], @@ -283,9 +295,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.10.tgz", - "integrity": "sha512-61lcjVC/RldNNMUzQQdyCWjCxp9YLEQgIxErxU9XluX7juBdGKb0pvddS0vPNuCvotRbzijZ1pzII+26haWzbA==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", "cpu": [ "x64" ], @@ -300,9 +312,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.10.tgz", - "integrity": "sha512-JeZXCX3viSA9j4HqSoygjssdqYdfHd6yCFWyfSekLbz4Ef+D2EjvsN02ZQPwYl5a5gg/ehdHgegHhlfOFP0HCA==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", "cpu": [ "x64" ], @@ -317,9 +329,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.10.tgz", - "integrity": "sha512-3qpxQKuEVIIg8SebpXsp82OBrqjPV/OwNWmG+TnZDr3VGyChNnGMHccC1xkbxCHDQNnnXjxhMQNyHmdFJbmbRA==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", "cpu": [ "x64" ], @@ -334,9 +346,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.10.tgz", - "integrity": "sha512-z+q0xZ+et/7etz7WoMyXTHZ1rB8PMSNp/FOqURLJLOPb3GWJ2aj4oCqFCjPwEbW1rsT7JPpxeH/DwGAWk/I1Bg==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", "cpu": [ "x64" ], @@ -351,9 +363,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.10.tgz", - "integrity": "sha512-+YYu5sbQ9npkNT9Dec+tn1F/kjg6SMgr6bfi/6FpXYZvCRfu2YFPZGb+3x8K30s8eRxFpoG4sGhiSUkr1xbHEw==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", "cpu": [ "arm64" ], @@ -368,9 +380,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.10.tgz", - "integrity": "sha512-Aw7Fupk7XNehR1ftHGYwUteyJ2q+em/aE+fVU3YMTBN2V5A7Z4aVCSV+SvCp9HIIHZavPFBpbdP3VfjQpdf6Xg==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", "cpu": [ "ia32" ], @@ -385,9 +397,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.10.tgz", - "integrity": "sha512-qddWullt3sC1EIpfHvCRBq3H4g3L86DZpD6n8k2XFjFVyp01D++uNbN1hT/JRsHxTbyyemZcpwL5aRlJwc/zFw==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", "cpu": [ "x64" ], @@ -401,6 +413,20 @@ "node": ">=12" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", @@ -410,22 +436,37 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -468,46 +509,45 @@ "dev": true }, "node_modules/@sveltejs/adapter-auto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-1.0.0.tgz", - "integrity": "sha512-yKyPvlLVua1bJ/42FrR3X041mFGdB4GzTZOAEoHUcNBRE5Mhx94+eqHpC3hNvAOiLEDcKfVO0ObyKSu7qldU+w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.1.0.tgz", + "integrity": "sha512-o2pZCfATFtA/Gw/BB0Xm7k4EYaekXxaPGER3xGSY3FvzFJGTlJlZjBseaXwYSM94lZ0HniOjTokN3cWaLX6fow==", "dev": true, "dependencies": { - "import-meta-resolve": "^2.2.0" + "import-meta-resolve": "^3.0.0" }, "peerDependencies": { "@sveltejs/kit": "^1.0.0" } }, "node_modules/@sveltejs/adapter-static": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-1.0.0.tgz", - "integrity": "sha512-ZrQhRgSa2TsH+zvrOIKpdVsAhExafpsn+w6Gv1WHzV76RZ2XOYFa8xi6hEzRjeeAL++ac0dsZHzp8M4X7YIabg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-2.0.2.tgz", + "integrity": "sha512-9wYtf6s6ew7DHUHMrt55YpD1FgV7oWql2IGsW5BXquLxqcY9vjrqCFo0TzzDpo+ZPZkW/v77k0eOP6tsAb8HmQ==", "dev": true, "peerDependencies": { - "@sveltejs/kit": "^1.0.0" + "@sveltejs/kit": "^1.5.0" } }, "node_modules/@sveltejs/kit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.1.tgz", - "integrity": "sha512-C41aCaDjA7xoUdsrc/lSdU1059UdLPIRE1vEIRRynzpMujNgp82bTMHkDosb6vykH6LrLf3tT2w2/5NYQhKYGQ==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.20.4.tgz", + "integrity": "sha512-MmAzIuMrP7A+8fqDVbxm6ekGHRHL/+Fk8sQPAzPG4G2TxUDtHdn/WcIxeEqHzARMf0OtGSC+VPyOSFuw2Cy2Mg==", "dev": true, "hasInstallScript": true, "dependencies": { - "@sveltejs/vite-plugin-svelte": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^2.4.1", "@types/cookie": "^0.5.1", "cookie": "^0.5.0", - "devalue": "^4.2.0", + "devalue": "^4.3.1", "esm-env": "^1.0.0", "kleur": "^4.1.5", - "magic-string": "^0.27.0", + "magic-string": "^0.30.0", "mime": "^3.0.0", "sade": "^1.8.1", - "set-cookie-parser": "^2.5.1", + "set-cookie-parser": "^2.6.0", "sirv": "^2.0.2", - "tiny-glob": "^0.2.9", - "undici": "5.14.0" + "undici": "~5.22.0" }, "bin": { "svelte-kit": "svelte-kit.js" @@ -516,34 +556,52 @@ "node": "^16.14 || >=18" }, "peerDependencies": { - "svelte": "^3.54.0", + "svelte": "^3.54.0 || ^4.0.0-next.0", "vite": "^4.0.0" } }, "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.0.2.tgz", - "integrity": "sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.1.tgz", + "integrity": "sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==", "dev": true, "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^1.0.2", "debug": "^4.3.4", - "deepmerge": "^4.2.2", + "deepmerge": "^4.3.1", "kleur": "^4.1.5", - "magic-string": "^0.27.0", + "magic-string": "^0.30.0", "svelte-hmr": "^0.15.1", - "vitefu": "^0.2.3" + "vitefu": "^0.2.4" }, "engines": { "node": "^14.18.0 || >= 16" }, "peerDependencies": { - "svelte": "^3.54.0", + "svelte": "^3.54.0 || ^4.0.0-next.0", + "vite": "^4.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.2.tgz", + "integrity": "sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": "^14.18.0 || >= 16" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^2.2.0", + "svelte": "^3.54.0 || ^4.0.0-next.0", "vite": "^4.0.0" } }, "node_modules/@tailwindcss/typography": { - "version": "0.5.8", - "resolved": "git+ssh://git@github.com/tailwindcss/typography.git#5231af5bdd392404025330256f3797f8572d8067", + "version": "0.5.9", + "resolved": "git+ssh://git@github.com/tailwindcss/typography.git#4c3b76ccc8120f307514d5721598763fd09761c0", "dev": true, "license": "MIT", "dependencies": { @@ -562,27 +620,12 @@ "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==", "dev": true }, - "node_modules/@types/node": { - "version": "18.11.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", - "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==", - "dev": true - }, "node_modules/@types/pug": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", "dev": true }, - "node_modules/@types/sass": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", - "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@vitejs/plugin-basic-ssl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", @@ -595,37 +638,11 @@ "vite": "^3.0.0 || ^4.0.0" } }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true }, "node_modules/anymatch": { "version": "3.1.3", @@ -647,9 +664,9 @@ "dev": true }, "node_modules/autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", "dev": true, "funding": [ { @@ -662,8 +679,8 @@ } ], "dependencies": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -717,9 +734,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", "dev": true, "funding": [ { @@ -729,13 +746,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" }, "bin": { "browserslist": "cli.js" @@ -784,9 +805,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001441", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz", - "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==", + "version": "1.0.30001504", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001504.tgz", + "integrity": "sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==", "dev": true, "funding": [ { @@ -796,6 +817,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -826,45 +851,19 @@ "fsevents": "~2.3.2" } }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "engines": { + "node": ">= 6" } }, "node_modules/concat-map": { @@ -905,23 +904,25 @@ } }, "node_modules/daisyui": { - "version": "2.46.0", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-2.46.0.tgz", - "integrity": "sha512-7L+KMCADsAmZkJUIabgDSpqEF9+uVPvyJSkSieOpY2WKeDd2pvcELZMs/AKaKkB5gcrb9cPP9vFdLXeDFJj90g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.1.1.tgz", + "integrity": "sha512-+SPwlCvbk/dQd40Op3jv+C8s5pL/Ix4z/U+Q8KDKnF7oXNmvDYZlZ9e2RkouoevaW/Jta4e/iLTj5ve2WBoSkw==", "dev": true, "dependencies": { - "color": "^4.2", - "css-selector-tokenizer": "^0.8.0", - "postcss-js": "^4.0.0", + "colord": "^2.9", + "css-selector-tokenizer": "^0.8", + "postcss-js": "^4", "tailwindcss": "^3" }, + "engines": { + "node": ">=16.9.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/daisyui" }, "peerDependencies": { - "autoprefixer": "^10.0.2", - "postcss": "^8.1.6" + "postcss": "^8" } }, "node_modules/debug": { @@ -942,23 +943,14 @@ } }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/detect-indent": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", @@ -968,27 +960,10 @@ "node": ">=8" } }, - "node_modules/detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "dev": true, - "dependencies": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/devalue": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.2.0.tgz", - "integrity": "sha512-mbjoAaCL2qogBKgeFxFPOXAUsZchircF+B/79LD4sHH0+NHfYm8gZpQrskKDn5gENGt35+5OI1GUF7hLVnkPDw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", + "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==", "dev": true }, "node_modules/didyoumean": { @@ -1004,9 +979,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "version": "1.4.433", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.433.tgz", + "integrity": "sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==", "dev": true }, "node_modules/es6-promise": { @@ -1016,9 +991,9 @@ "dev": true }, "node_modules/esbuild": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.10.tgz", - "integrity": "sha512-z5dIViHoVnw2l+NCJ3zj5behdXjYvXne9gL18OOivCadXDUhyDkeSvEtLcGVAJW2fNmh33TDUpsi704XYlDodw==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", "dev": true, "hasInstallScript": true, "peer": true, @@ -1029,28 +1004,28 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.16.10", - "@esbuild/android-arm64": "0.16.10", - "@esbuild/android-x64": "0.16.10", - "@esbuild/darwin-arm64": "0.16.10", - "@esbuild/darwin-x64": "0.16.10", - "@esbuild/freebsd-arm64": "0.16.10", - "@esbuild/freebsd-x64": "0.16.10", - "@esbuild/linux-arm": "0.16.10", - "@esbuild/linux-arm64": "0.16.10", - "@esbuild/linux-ia32": "0.16.10", - "@esbuild/linux-loong64": "0.16.10", - "@esbuild/linux-mips64el": "0.16.10", - "@esbuild/linux-ppc64": "0.16.10", - "@esbuild/linux-riscv64": "0.16.10", - "@esbuild/linux-s390x": "0.16.10", - "@esbuild/linux-x64": "0.16.10", - "@esbuild/netbsd-x64": "0.16.10", - "@esbuild/openbsd-x64": "0.16.10", - "@esbuild/sunos-x64": "0.16.10", - "@esbuild/win32-arm64": "0.16.10", - "@esbuild/win32-ia32": "0.16.10", - "@esbuild/win32-x64": "0.16.10" + "@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" } }, "node_modules/escalade": { @@ -1091,9 +1066,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", - "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -1191,22 +1166,10 @@ "node": ">= 6" } }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "node_modules/has": { @@ -1221,6 +1184,14 @@ "node": ">= 0.4.0" } }, + "node_modules/immutable": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "dev": true, + "optional": true, + "peer": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -1238,9 +1209,9 @@ } }, "node_modules/import-meta-resolve": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.0.tgz", - "integrity": "sha512-CpPOtiCHxP9HdtDM5F45tNiAe66Cqlv3f5uHoJjt+KlaLrUh9/Wz9vepADZ78SlqEo62aDWZtj9ydMGXV+CPnw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz", + "integrity": "sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==", "dev": true, "funding": { "type": "github", @@ -1263,12 +1234,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1282,9 +1247,9 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -1323,6 +1288,15 @@ "node": ">=0.12.0" } }, + "node_modules/jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/kleur": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", @@ -1333,14 +1307,20 @@ } }, "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, "engines": { "node": ">=10" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/lodash.castarray": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", @@ -1360,9 +1340,9 @@ "dev": true }, "node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.13" @@ -1427,9 +1407,9 @@ } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1471,11 +1451,28 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -1484,9 +1481,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", "dev": true }, "node_modules/normalize-path": { @@ -1507,6 +1504,15 @@ "node": ">=0.10.0" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", @@ -1579,10 +1585,19 @@ "node": ">=0.10.0" } }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/postcss": { - "version": "8.4.20", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz", - "integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==", + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", "dev": true, "funding": [ { @@ -1592,10 +1607,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -1604,9 +1623,9 @@ } }, "node_modules/postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, "dependencies": { "postcss-value-parser": "^4.0.0", @@ -1614,16 +1633,16 @@ "resolve": "^1.1.7" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.0.0" }, "peerDependencies": { "postcss": "^8.0.0" } }, "node_modules/postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", "dev": true, "dependencies": { "camelcase-css": "^2.0.1" @@ -1636,7 +1655,7 @@ "url": "https://opencollective.com/postcss/" }, "peerDependencies": { - "postcss": "^8.3.3" + "postcss": "^8.4.21" } }, "node_modules/postcss-load-config": { @@ -1669,12 +1688,12 @@ } }, "node_modules/postcss-nested": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", - "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.10" + "postcss-selector-parser": "^6.0.11" }, "engines": { "node": ">=12.0" @@ -1687,6 +1706,19 @@ "postcss": "^8.2.14" } }, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-selector-parser": { "version": "6.0.10", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", @@ -1707,9 +1739,9 @@ "dev": true }, "node_modules/prettier": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", - "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -1722,13 +1754,13 @@ } }, "node_modules/prettier-plugin-svelte": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.9.0.tgz", - "integrity": "sha512-3doBi5NO4IVgaNPtwewvrgPpqAcvNv0NwJNflr76PIGgi9nf1oguQV1Hpdm9TI2ALIQVn/9iIwLpBO5UcD2Jiw==", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.1.tgz", + "integrity": "sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==", "dev": true, "peerDependencies": { "prettier": "^1.16.4 || ^2.0.0", - "svelte": "^3.2.0" + "svelte": "^3.2.0 || ^4.0.0-next.0" } }, "node_modules/queue-microtask": { @@ -1751,18 +1783,6 @@ } ] }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -1785,12 +1805,12 @@ } }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.11.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -1833,9 +1853,9 @@ } }, "node_modules/rollup": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.8.1.tgz", - "integrity": "sha512-4yh9eMW7byOroYcN8DlF9P/2jCpu6txVIHjEqquQVSx7DI0RgyCCN3tjrcy4ra6yVtV336aLBB3v2AarYAxePQ==", + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", + "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", "dev": true, "peer": true, "bin": { @@ -1896,25 +1916,35 @@ "rimraf": "^2.5.2" } }, - "node_modules/set-cookie-parser": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz", - "integrity": "sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==", - "dev": true - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "node_modules/sass": { + "version": "1.63.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.4.tgz", + "integrity": "sha512-Sx/+weUmK+oiIlI+9sdD0wZHsqpbgQg8wSwSnGBjwb5GwqFhYNwwnI+UWZtLjKvKyFlKkatRK235qQ3mokyPoQ==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "is-arrayish": "^0.3.1" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" } }, + "node_modules/set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", + "dev": true + }, "node_modules/sirv": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", - "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", "dev": true, "dependencies": { "@polka/url": "^1.0.0-next.20", @@ -1926,18 +1956,18 @@ } }, "node_modules/sorcery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", - "integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", + "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", "dev": true, "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.14", "buffer-crc32": "^0.2.5", "minimist": "^1.2.0", - "sander": "^0.5.0", - "sourcemap-codec": "^1.3.0" + "sander": "^0.5.0" }, "bin": { - "sorcery": "bin/index.js" + "sorcery": "bin/sorcery" } }, "node_modules/source-map-js": { @@ -1949,13 +1979,6 @@ "node": ">=0.10.0" } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -1977,6 +2000,48 @@ "node": ">=8" } }, + "node_modules/sucrase": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", + "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -1990,135 +2055,59 @@ } }, "node_modules/svelte": { - "version": "3.55.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.0.tgz", - "integrity": "sha512-uGu2FVMlOuey4JoKHKrpZFkoYyj0VLjJdz47zX5+gVK5odxHM40RVhar9/iK2YFRVxvfg9FkhfVlR0sjeIrOiA==", + "version": "3.59.1", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.1.tgz", + "integrity": "sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/svelte-check": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.10.3.tgz", - "integrity": "sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.4.3.tgz", + "integrity": "sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.9", + "@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": "^4.0.0", - "typescript": "*" + "svelte-preprocess": "^5.0.3", + "typescript": "^5.0.3" }, "bin": { "svelte-check": "bin/svelte-check" }, "peerDependencies": { - "svelte": "^3.24.0" - } - }, - "node_modules/svelte-check/node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/svelte-check/node_modules/svelte-preprocess": { - "version": "4.10.7", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz", - "integrity": "sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@types/pug": "^2.0.4", - "@types/sass": "^1.16.0", - "detect-indent": "^6.0.0", - "magic-string": "^0.25.7", - "sorcery": "^0.10.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">= 9.11.2" - }, - "peerDependencies": { - "@babel/core": "^7.10.2", - "coffeescript": "^2.5.1", - "less": "^3.11.3 || ^4.0.0", - "postcss": "^7 || ^8", - "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0", - "pug": "^3.0.0", - "sass": "^1.26.8", - "stylus": "^0.55.0", - "sugarss": "^2.0.0", - "svelte": "^3.23.0", - "typescript": "^3.9.5 || ^4.0.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "coffeescript": { - "optional": true - }, - "less": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "postcss": { - "optional": true - }, - "postcss-load-config": { - "optional": true - }, - "pug": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "typescript": { - "optional": true - } + "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0" } }, "node_modules/svelte-hmr": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.1.tgz", - "integrity": "sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.2.tgz", + "integrity": "sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==", "dev": true, "engines": { "node": "^12.20 || ^14.13.1 || >= 16" }, "peerDependencies": { - "svelte": ">=3.19.0" + "svelte": "^3.19.0 || ^4.0.0-next.0" } }, "node_modules/svelte-preprocess": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.0.tgz", - "integrity": "sha512-q7lpa7i2FBu8Pa+G0MmuQQWETBwCKgsGmuq1Sf6n8q4uaG9ZLcLP0Y+etC6bF4sE6EbLxfiI38zV6RfPe3RSfg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz", + "integrity": "sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==", "dev": true, "hasInstallScript": true, "dependencies": { "@types/pug": "^2.0.6", - "@types/sass": "^1.43.1", "detect-indent": "^6.1.0", "magic-string": "^0.27.0", - "sorcery": "^0.10.0", + "sorcery": "^0.11.0", "strip-indent": "^3.0.0" }, "engines": { @@ -2134,8 +2123,8 @@ "sass": "^1.26.8", "stylus": "^0.55.0", "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "svelte": "^3.23.0", - "typescript": "^3.9.5 || ^4.0.0" + "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0", + "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" }, "peerDependenciesMeta": { "@babel/core": { @@ -2170,45 +2159,54 @@ } } }, - "node_modules/tailwindcss": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", - "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", + "node_modules/svelte-preprocess/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", "dev": true, "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tailwindcss": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", + "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "lilconfig": "^2.0.6", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.18", - "postcss-import": "^14.1.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "6.0.0", - "postcss-selector-parser": "^6.0.10", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.22.1" + "resolve": "^1.22.2", + "sucrase": "^3.32.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" }, "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "postcss": "^8.0.9" + "node": ">=14.0.0" } }, "node_modules/tailwindcss/node_modules/glob-parent": { @@ -2223,52 +2221,38 @@ "node": ">=10.13.0" } }, - "node_modules/tailwindcss/node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } + "node": ">=4" } }, - "node_modules/tailwindcss/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" } }, "node_modules/to-regex-range": { @@ -2284,43 +2268,49 @@ } }, "node_modules/totalist": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", - "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, "engines": { "node": ">=6" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, "node_modules/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/undici": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.14.0.tgz", - "integrity": "sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==", + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", + "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", "dev": true, "dependencies": { "busboy": "^1.6.0" }, "engines": { - "node": ">=12.18" + "node": ">=14.0" } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, "funding": [ { @@ -2330,6 +2320,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -2337,7 +2331,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -2350,16 +2344,15 @@ "dev": true }, "node_modules/vite": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.3.tgz", - "integrity": "sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==", + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", "dev": true, "peer": true, "dependencies": { - "esbuild": "^0.16.3", - "postcss": "^8.4.20", - "resolve": "^1.22.1", - "rollup": "^3.7.0" + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" }, "bin": { "vite": "bin/vite.js" @@ -2419,19 +2412,10 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/yaml": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.0.tgz", - "integrity": "sha512-auf7Gi6QwO7HW//GA9seGvTXVGWl1CM/ADWh1+RxtXr6XOxnT65ovDl9fTi4e0monEyJxCHqDpF6QnFDXmJE4g==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", "dev": true, "engines": { "node": ">= 14" @@ -2439,202 +2423,233 @@ } }, "dependencies": { + "@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true + }, "@esbuild/android-arm": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.10.tgz", - "integrity": "sha512-RmJjQTRrO6VwUWDrzTBLmV4OJZTarYsiepLGlF2rYTVB701hSorPywPGvP6d8HCuuRibyXa5JX4s3jN2kHEtjQ==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", "dev": true, "optional": true, "peer": true }, "@esbuild/android-arm64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.10.tgz", - "integrity": "sha512-47Y+NwVKTldTlDhSgJHZ/RpvBQMUDG7eKihqaF/u6g7s0ZPz4J1vy8A3rwnnUOF2CuDn7w7Gj/QcMoWz3U3SJw==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", "dev": true, "optional": true, "peer": true }, "@esbuild/android-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.10.tgz", - "integrity": "sha512-C4PfnrBMcuAcOurQzpF1tTtZz94IXO5JmICJJ3NFJRHbXXsQUg9RFG45KvydKqtFfBaFLCHpduUkUfXwIvGnRg==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", "dev": true, "optional": true, "peer": true }, "@esbuild/darwin-arm64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.10.tgz", - "integrity": "sha512-bH/bpFwldyOKdi9HSLCLhhKeVgRYr9KblchwXgY2NeUHBB/BzTUHtUSBgGBmpydB1/4E37m+ggXXfSrnD7/E7g==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", "dev": true, "optional": true, "peer": true }, "@esbuild/darwin-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.10.tgz", - "integrity": "sha512-OXt7ijoLuy+AjDSKQWu+KdDFMBbdeaL6wtgMKtDUXKWHiAMKHan5+R1QAG6HD4+K0nnOvEJXKHeA9QhXNAjOTQ==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", "dev": true, "optional": true, "peer": true }, "@esbuild/freebsd-arm64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.10.tgz", - "integrity": "sha512-shSQX/3GHuspE3Uxtq5kcFG/zqC+VuMnJkqV7LczO41cIe6CQaXHD3QdMLA4ziRq/m0vZo7JdterlgbmgNIAlQ==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", "dev": true, "optional": true, "peer": true }, "@esbuild/freebsd-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.10.tgz", - "integrity": "sha512-5YVc1zdeaJGASijZmTzSO4h6uKzsQGG3pkjI6fuXvolhm3hVRhZwnHJkforaZLmzvNv5Tb7a3QL2FAVmrgySIA==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", "dev": true, "optional": true, "peer": true }, "@esbuild/linux-arm": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.10.tgz", - "integrity": "sha512-c360287ZWI2miBnvIj23bPyVctgzeMT2kQKR+x94pVqIN44h3GF8VMEs1SFPH1UgyDr3yBbx3vowDS1SVhyVhA==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", "dev": true, "optional": true, "peer": true }, "@esbuild/linux-arm64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.10.tgz", - "integrity": "sha512-2aqeNVxIaRfPcIaMZIFoblLh588sWyCbmj1HHCCs9WmeNWm+EIN0SmvsmPvTa/TsNZFKnxTcvkX2eszTcCqIrA==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", "dev": true, "optional": true, "peer": true }, "@esbuild/linux-ia32": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.10.tgz", - "integrity": "sha512-sqMIEWeyrLGU7J5RB5fTkLRIFwsgsQ7ieWXlDLEmC2HblPYGb3AucD7inw2OrKFpRPKsec1l+lssiM3+NV5aOw==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", "dev": true, "optional": true, "peer": true }, "@esbuild/linux-loong64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.10.tgz", - "integrity": "sha512-O7Pd5hLEtTg37NC73pfhUOGTjx/+aXu5YoSq3ahCxcN7Bcr2F47mv+kG5t840thnsEzrv0oB70+LJu3gUgchvg==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", "dev": true, "optional": true, "peer": true }, "@esbuild/linux-mips64el": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.10.tgz", - "integrity": "sha512-FN8mZOH7531iPHM0kaFhAOqqNHoAb6r/YHW2ZIxNi0a85UBi2DO4Vuyn7t1p4UN8a4LoAnLOT1PqNgHkgBJgbA==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", "dev": true, "optional": true, "peer": true }, "@esbuild/linux-ppc64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.10.tgz", - "integrity": "sha512-Dg9RiqdvHOAWnOKIOTsIx8dFX9EDlY2IbPEY7YFzchrCiTZmMkD7jWA9UdZbNUygPjdmQBVPRCrLydReFlX9yg==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", "dev": true, "optional": true, "peer": true }, "@esbuild/linux-riscv64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.10.tgz", - "integrity": "sha512-XMqtpjwzbmlar0BJIxmzu/RZ7EWlfVfH68Vadrva0Wj5UKOdKvqskuev2jY2oPV3aoQUyXwnMbMrFmloO2GfAw==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", "dev": true, "optional": true, "peer": true }, "@esbuild/linux-s390x": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.10.tgz", - "integrity": "sha512-fu7XtnoeRNFMx8DjK3gPWpFBDM2u5ba+FYwg27SjMJwKvJr4bDyKz5c+FLXLUSSAkMAt/UL+cUbEbra+rYtUgw==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", "dev": true, "optional": true, "peer": true }, "@esbuild/linux-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.10.tgz", - "integrity": "sha512-61lcjVC/RldNNMUzQQdyCWjCxp9YLEQgIxErxU9XluX7juBdGKb0pvddS0vPNuCvotRbzijZ1pzII+26haWzbA==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", "dev": true, "optional": true, "peer": true }, "@esbuild/netbsd-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.10.tgz", - "integrity": "sha512-JeZXCX3viSA9j4HqSoygjssdqYdfHd6yCFWyfSekLbz4Ef+D2EjvsN02ZQPwYl5a5gg/ehdHgegHhlfOFP0HCA==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", "dev": true, "optional": true, "peer": true }, "@esbuild/openbsd-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.10.tgz", - "integrity": "sha512-3qpxQKuEVIIg8SebpXsp82OBrqjPV/OwNWmG+TnZDr3VGyChNnGMHccC1xkbxCHDQNnnXjxhMQNyHmdFJbmbRA==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", "dev": true, "optional": true, "peer": true }, "@esbuild/sunos-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.10.tgz", - "integrity": "sha512-z+q0xZ+et/7etz7WoMyXTHZ1rB8PMSNp/FOqURLJLOPb3GWJ2aj4oCqFCjPwEbW1rsT7JPpxeH/DwGAWk/I1Bg==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", "dev": true, "optional": true, "peer": true }, "@esbuild/win32-arm64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.10.tgz", - "integrity": "sha512-+YYu5sbQ9npkNT9Dec+tn1F/kjg6SMgr6bfi/6FpXYZvCRfu2YFPZGb+3x8K30s8eRxFpoG4sGhiSUkr1xbHEw==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", "dev": true, "optional": true, "peer": true }, "@esbuild/win32-ia32": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.10.tgz", - "integrity": "sha512-Aw7Fupk7XNehR1ftHGYwUteyJ2q+em/aE+fVU3YMTBN2V5A7Z4aVCSV+SvCp9HIIHZavPFBpbdP3VfjQpdf6Xg==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", "dev": true, "optional": true, "peer": true }, "@esbuild/win32-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.10.tgz", - "integrity": "sha512-qddWullt3sC1EIpfHvCRBq3H4g3L86DZpD6n8k2XFjFVyp01D++uNbN1hT/JRsHxTbyyemZcpwL5aRlJwc/zFw==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", "dev": true, "optional": true, "peer": true }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dev": true, "requires": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + } } }, "@nodelib/fs.scandir": { @@ -2670,58 +2685,67 @@ "dev": true }, "@sveltejs/adapter-auto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-1.0.0.tgz", - "integrity": "sha512-yKyPvlLVua1bJ/42FrR3X041mFGdB4GzTZOAEoHUcNBRE5Mhx94+eqHpC3hNvAOiLEDcKfVO0ObyKSu7qldU+w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.1.0.tgz", + "integrity": "sha512-o2pZCfATFtA/Gw/BB0Xm7k4EYaekXxaPGER3xGSY3FvzFJGTlJlZjBseaXwYSM94lZ0HniOjTokN3cWaLX6fow==", "dev": true, "requires": { - "import-meta-resolve": "^2.2.0" + "import-meta-resolve": "^3.0.0" } }, "@sveltejs/adapter-static": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-1.0.0.tgz", - "integrity": "sha512-ZrQhRgSa2TsH+zvrOIKpdVsAhExafpsn+w6Gv1WHzV76RZ2XOYFa8xi6hEzRjeeAL++ac0dsZHzp8M4X7YIabg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-2.0.2.tgz", + "integrity": "sha512-9wYtf6s6ew7DHUHMrt55YpD1FgV7oWql2IGsW5BXquLxqcY9vjrqCFo0TzzDpo+ZPZkW/v77k0eOP6tsAb8HmQ==", "dev": true, "requires": {} }, "@sveltejs/kit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.1.tgz", - "integrity": "sha512-C41aCaDjA7xoUdsrc/lSdU1059UdLPIRE1vEIRRynzpMujNgp82bTMHkDosb6vykH6LrLf3tT2w2/5NYQhKYGQ==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.20.4.tgz", + "integrity": "sha512-MmAzIuMrP7A+8fqDVbxm6ekGHRHL/+Fk8sQPAzPG4G2TxUDtHdn/WcIxeEqHzARMf0OtGSC+VPyOSFuw2Cy2Mg==", "dev": true, "requires": { - "@sveltejs/vite-plugin-svelte": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^2.4.1", "@types/cookie": "^0.5.1", "cookie": "^0.5.0", - "devalue": "^4.2.0", + "devalue": "^4.3.1", "esm-env": "^1.0.0", "kleur": "^4.1.5", - "magic-string": "^0.27.0", + "magic-string": "^0.30.0", "mime": "^3.0.0", "sade": "^1.8.1", - "set-cookie-parser": "^2.5.1", + "set-cookie-parser": "^2.6.0", "sirv": "^2.0.2", - "tiny-glob": "^0.2.9", - "undici": "5.14.0" + "undici": "~5.22.0" } }, "@sveltejs/vite-plugin-svelte": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.0.2.tgz", - "integrity": "sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.1.tgz", + "integrity": "sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==", "dev": true, "requires": { + "@sveltejs/vite-plugin-svelte-inspector": "^1.0.2", "debug": "^4.3.4", - "deepmerge": "^4.2.2", + "deepmerge": "^4.3.1", "kleur": "^4.1.5", - "magic-string": "^0.27.0", + "magic-string": "^0.30.0", "svelte-hmr": "^0.15.1", - "vitefu": "^0.2.3" + "vitefu": "^0.2.4" + } + }, + "@sveltejs/vite-plugin-svelte-inspector": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.2.tgz", + "integrity": "sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==", + "dev": true, + "requires": { + "debug": "^4.3.4" } }, "@tailwindcss/typography": { - "version": "git+ssh://git@github.com/tailwindcss/typography.git#5231af5bdd392404025330256f3797f8572d8067", + "version": "git+ssh://git@github.com/tailwindcss/typography.git#4c3b76ccc8120f307514d5721598763fd09761c0", "dev": true, "from": "@tailwindcss/typography@github:tailwindcss/typography", "requires": { @@ -2737,27 +2761,12 @@ "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==", "dev": true }, - "@types/node": { - "version": "18.11.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", - "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==", - "dev": true - }, "@types/pug": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", "dev": true }, - "@types/sass": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", - "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@vitejs/plugin-basic-ssl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", @@ -2765,27 +2774,10 @@ "dev": true, "requires": {} }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, "anymatch": { @@ -2805,13 +2797,13 @@ "dev": true }, "autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", "dev": true, "requires": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -2850,15 +2842,15 @@ } }, "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" } }, "buffer-crc32": { @@ -2889,9 +2881,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001441", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz", - "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==", + "version": "1.0.30001504", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001504.tgz", + "integrity": "sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==", "dev": true }, "chokidar": { @@ -2910,40 +2902,17 @@ "readdirp": "~3.6.0" } }, - "color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dev": true, - "requires": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, - "color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true }, "concat-map": { "version": "0.0.1", @@ -2974,14 +2943,14 @@ "dev": true }, "daisyui": { - "version": "2.46.0", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-2.46.0.tgz", - "integrity": "sha512-7L+KMCADsAmZkJUIabgDSpqEF9+uVPvyJSkSieOpY2WKeDd2pvcELZMs/AKaKkB5gcrb9cPP9vFdLXeDFJj90g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.1.1.tgz", + "integrity": "sha512-+SPwlCvbk/dQd40Op3jv+C8s5pL/Ix4z/U+Q8KDKnF7oXNmvDYZlZ9e2RkouoevaW/Jta4e/iLTj5ve2WBoSkw==", "dev": true, "requires": { - "color": "^4.2", - "css-selector-tokenizer": "^0.8.0", - "postcss-js": "^4.0.0", + "colord": "^2.9", + "css-selector-tokenizer": "^0.8", + "postcss-js": "^4", "tailwindcss": "^3" } }, @@ -2995,15 +2964,9 @@ } }, "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true }, "detect-indent": { @@ -3012,21 +2975,10 @@ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true }, - "detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "dev": true, - "requires": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - } - }, "devalue": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.2.0.tgz", - "integrity": "sha512-mbjoAaCL2qogBKgeFxFPOXAUsZchircF+B/79LD4sHH0+NHfYm8gZpQrskKDn5gENGt35+5OI1GUF7hLVnkPDw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", + "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==", "dev": true }, "didyoumean": { @@ -3042,9 +2994,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "version": "1.4.433", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.433.tgz", + "integrity": "sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==", "dev": true }, "es6-promise": { @@ -3054,34 +3006,34 @@ "dev": true }, "esbuild": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.10.tgz", - "integrity": "sha512-z5dIViHoVnw2l+NCJ3zj5behdXjYvXne9gL18OOivCadXDUhyDkeSvEtLcGVAJW2fNmh33TDUpsi704XYlDodw==", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", "dev": true, "peer": true, "requires": { - "@esbuild/android-arm": "0.16.10", - "@esbuild/android-arm64": "0.16.10", - "@esbuild/android-x64": "0.16.10", - "@esbuild/darwin-arm64": "0.16.10", - "@esbuild/darwin-x64": "0.16.10", - "@esbuild/freebsd-arm64": "0.16.10", - "@esbuild/freebsd-x64": "0.16.10", - "@esbuild/linux-arm": "0.16.10", - "@esbuild/linux-arm64": "0.16.10", - "@esbuild/linux-ia32": "0.16.10", - "@esbuild/linux-loong64": "0.16.10", - "@esbuild/linux-mips64el": "0.16.10", - "@esbuild/linux-ppc64": "0.16.10", - "@esbuild/linux-riscv64": "0.16.10", - "@esbuild/linux-s390x": "0.16.10", - "@esbuild/linux-x64": "0.16.10", - "@esbuild/netbsd-x64": "0.16.10", - "@esbuild/openbsd-x64": "0.16.10", - "@esbuild/sunos-x64": "0.16.10", - "@esbuild/win32-arm64": "0.16.10", - "@esbuild/win32-ia32": "0.16.10", - "@esbuild/win32-x64": "0.16.10" + "@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" } }, "escalade": { @@ -3116,9 +3068,9 @@ "dev": true }, "fastq": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", - "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -3187,22 +3139,10 @@ "is-glob": "^4.0.1" } }, - "globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "has": { @@ -3214,6 +3154,14 @@ "function-bind": "^1.1.1" } }, + "immutable": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "dev": true, + "optional": true, + "peer": true + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -3225,9 +3173,9 @@ } }, "import-meta-resolve": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.0.tgz", - "integrity": "sha512-CpPOtiCHxP9HdtDM5F45tNiAe66Cqlv3f5uHoJjt+KlaLrUh9/Wz9vepADZ78SlqEo62aDWZtj9ydMGXV+CPnw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz", + "integrity": "sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==", "dev": true }, "inflight": { @@ -3246,12 +3194,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -3262,9 +3204,9 @@ } }, "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "requires": { "has": "^1.0.3" @@ -3291,6 +3233,12 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true + }, "kleur": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", @@ -3298,9 +3246,15 @@ "dev": true }, "lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, "lodash.castarray": { @@ -3322,9 +3276,9 @@ "dev": true }, "magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", "dev": true, "requires": { "@jridgewell/sourcemap-codec": "^1.4.13" @@ -3368,9 +3322,9 @@ } }, "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "mkdirp": { @@ -3400,16 +3354,27 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", "dev": true }, "node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", "dev": true }, "normalize-path": { @@ -3424,6 +3389,12 @@ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, "object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", @@ -3478,21 +3449,27 @@ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true + }, "postcss": { - "version": "8.4.20", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz", - "integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==", + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", "dev": true, "requires": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, "requires": { "postcss-value-parser": "^4.0.0", @@ -3501,9 +3478,9 @@ } }, "postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", "dev": true, "requires": { "camelcase-css": "^2.0.1" @@ -3520,12 +3497,24 @@ } }, "postcss-nested": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", - "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.10" + "postcss-selector-parser": "^6.0.11" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } } }, "postcss-selector-parser": { @@ -3545,15 +3534,15 @@ "dev": true }, "prettier": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", - "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true }, "prettier-plugin-svelte": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.9.0.tgz", - "integrity": "sha512-3doBi5NO4IVgaNPtwewvrgPpqAcvNv0NwJNflr76PIGgi9nf1oguQV1Hpdm9TI2ALIQVn/9iIwLpBO5UcD2Jiw==", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.1.tgz", + "integrity": "sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==", "dev": true, "requires": {} }, @@ -3563,12 +3552,6 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -3588,12 +3571,12 @@ } }, "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dev": true, "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.11.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -3620,9 +3603,9 @@ } }, "rollup": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.8.1.tgz", - "integrity": "sha512-4yh9eMW7byOroYcN8DlF9P/2jCpu6txVIHjEqquQVSx7DI0RgyCCN3tjrcy4ra6yVtV336aLBB3v2AarYAxePQ==", + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", + "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", "dev": true, "peer": true, "requires": { @@ -3659,25 +3642,29 @@ "rimraf": "^2.5.2" } }, - "set-cookie-parser": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz", - "integrity": "sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "sass": { + "version": "1.63.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.4.tgz", + "integrity": "sha512-Sx/+weUmK+oiIlI+9sdD0wZHsqpbgQg8wSwSnGBjwb5GwqFhYNwwnI+UWZtLjKvKyFlKkatRK235qQ3mokyPoQ==", "dev": true, + "optional": true, + "peer": true, "requires": { - "is-arrayish": "^0.3.1" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" } }, + "set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", + "dev": true + }, "sirv": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", - "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", "dev": true, "requires": { "@polka/url": "^1.0.0-next.20", @@ -3686,15 +3673,15 @@ } }, "sorcery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", - "integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", + "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", "dev": true, "requires": { + "@jridgewell/sourcemap-codec": "^1.4.14", "buffer-crc32": "^0.2.5", "minimist": "^1.2.0", - "sander": "^0.5.0", - "sourcemap-codec": "^1.3.0" + "sander": "^0.5.0" } }, "source-map-js": { @@ -3703,12 +3690,6 @@ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, "streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -3724,6 +3705,37 @@ "min-indent": "^1.0.0" } }, + "sucrase": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", + "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -3731,102 +3743,87 @@ "dev": true }, "svelte": { - "version": "3.55.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.0.tgz", - "integrity": "sha512-uGu2FVMlOuey4JoKHKrpZFkoYyj0VLjJdz47zX5+gVK5odxHM40RVhar9/iK2YFRVxvfg9FkhfVlR0sjeIrOiA==", + "version": "3.59.1", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.1.tgz", + "integrity": "sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==", "dev": true }, "svelte-check": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.10.3.tgz", - "integrity": "sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.4.3.tgz", + "integrity": "sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==", "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.9", + "@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": "^4.0.0", - "typescript": "*" - }, - "dependencies": { - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "svelte-preprocess": { - "version": "4.10.7", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz", - "integrity": "sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==", - "dev": true, - "requires": { - "@types/pug": "^2.0.4", - "@types/sass": "^1.16.0", - "detect-indent": "^6.0.0", - "magic-string": "^0.25.7", - "sorcery": "^0.10.0", - "strip-indent": "^3.0.0" - } - } + "svelte-preprocess": "^5.0.3", + "typescript": "^5.0.3" } }, "svelte-hmr": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.1.tgz", - "integrity": "sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.2.tgz", + "integrity": "sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==", "dev": true, "requires": {} }, "svelte-preprocess": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.0.tgz", - "integrity": "sha512-q7lpa7i2FBu8Pa+G0MmuQQWETBwCKgsGmuq1Sf6n8q4uaG9ZLcLP0Y+etC6bF4sE6EbLxfiI38zV6RfPe3RSfg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz", + "integrity": "sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==", "dev": true, "requires": { "@types/pug": "^2.0.6", - "@types/sass": "^1.43.1", "detect-indent": "^6.1.0", "magic-string": "^0.27.0", - "sorcery": "^0.10.0", + "sorcery": "^0.11.0", "strip-indent": "^3.0.0" + }, + "dependencies": { + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + } } }, "tailwindcss": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", - "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", + "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", "dev": true, "requires": { + "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "lilconfig": "^2.0.6", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.18", - "postcss-import": "^14.1.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "6.0.0", - "postcss-selector-parser": "^6.0.10", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.22.1" + "resolve": "^1.22.2", + "sucrase": "^3.32.0" }, "dependencies": { "glob-parent": { @@ -3838,32 +3835,34 @@ "is-glob": "^4.0.3" } }, - "postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, "requires": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" } - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true } } }, - "tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, "requires": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" } }, "to-regex-range": { @@ -3876,30 +3875,36 @@ } }, "totalist": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", - "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true + }, + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true }, "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true }, "undici": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.14.0.tgz", - "integrity": "sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==", + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", + "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", "dev": true, "requires": { "busboy": "^1.6.0" } }, "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, "requires": { "escalade": "^3.1.1", @@ -3913,17 +3918,16 @@ "dev": true }, "vite": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.3.tgz", - "integrity": "sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==", + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", "dev": true, "peer": true, "requires": { - "esbuild": "^0.16.3", + "esbuild": "^0.17.5", "fsevents": "~2.3.2", - "postcss": "^8.4.20", - "resolve": "^1.22.1", - "rollup": "^3.7.0" + "postcss": "^8.4.23", + "rollup": "^3.21.0" } }, "vitefu": { @@ -3939,16 +3943,10 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, "yaml": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.0.tgz", - "integrity": "sha512-auf7Gi6QwO7HW//GA9seGvTXVGWl1CM/ADWh1+RxtXr6XOxnT65ovDl9fTi4e0monEyJxCHqDpF6QnFDXmJE4g==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", "dev": true } } diff --git a/package.json b/package.json index 6bf2b0e..b4b0e0e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "headscale-ui", - "version": "2023.01.30-beta-1", + "version": "2023.06.18-beta-1", "scripts": { "dev": "vite dev --https --port 443 --host 0.0.0.0", "build": "vite build", @@ -13,23 +13,23 @@ "format": "prettier --write --plugin-search-dir=. ." }, "devDependencies": { - "@sveltejs/adapter-auto": "^1.0.0", - "@sveltejs/adapter-static": "^1.0.0", + "@sveltejs/adapter-auto": "^2.1.0", + "@sveltejs/adapter-static": "^2.0.2", "@sveltejs/kit": "^1.0.0", "@tailwindcss/typography": "github:tailwindcss/typography", "@vitejs/plugin-basic-ssl": "^1.0.1", "autoprefixer": "^10.4.4", - "daisyui": "^2.19.0", + "daisyui": "^3.1.1", "fuse.js": "^6.6.2", "postcss": "^8.4.12", "postcss-load-config": "^4.0.1", "prettier": "^2.6.2", "prettier-plugin-svelte": "^2.7.0", "svelte": "^3.44.0", - "svelte-check": "^2.7.1", + "svelte-check": "^3.4.3", "svelte-preprocess": "^5.0.0", "tailwindcss": "^3.0.23", - "typescript": "^4.7.2" + "typescript": "^5.1.3" }, "type": "module" } From 1a6b7a6626ab5bd790a122f44d4df22269cd002d Mon Sep 17 00:00:00 2001 From: Christopher Bisset Date: Sun, 18 Jun 2023 17:18:40 +1000 Subject: [PATCH 101/160] re-design docker development image --- docker/development/dockerfile | 26 +++++++----- docker/development/scripts/1-image-build.sh | 40 +++++-------------- docker/development/scripts/2-initialise.sh | 3 +- .../scripts/install-base-dependencies.sh | 7 ++++ .../scripts/install-container-dependencies.sh | 2 + .../scripts/install-openvscode-server.sh | 15 +++++++ 6 files changed, 50 insertions(+), 43 deletions(-) create mode 100644 docker/development/scripts/install-base-dependencies.sh create mode 100644 docker/development/scripts/install-container-dependencies.sh create mode 100644 docker/development/scripts/install-openvscode-server.sh diff --git a/docker/development/dockerfile b/docker/development/dockerfile index 8198920..f90ae93 100644 --- a/docker/development/dockerfile +++ b/docker/development/dockerfile @@ -1,15 +1,11 @@ -FROM node:lts +FROM fedora:latest -# Arguments -ARG OPENVSCODE_VERSION="1.74.0" # Volumes VOLUME /data # Ports # openvscode server port. Note: Runs HTTP by default EXPOSE 3000 -# Dev Web Server port. Runs a self signed SSL certificate -EXPOSE 443 # System Environment Variables ENV PATH="/opt/vscode:${PATH}" @@ -18,9 +14,9 @@ ENV SHELL="/bin/bash" # User Set Environment Variables # Set to false if you do not want to attempt to pull a repository on first load -ENV AUTOINITIALIZE=true +ENV AUTOINITIALIZE=false # sets a connection token for VSCode Server. https://github.com/gitpod-io/openvscode-server#securing-access-to-your-ide -ENV USE_CONNECTION_TOKEN=true +ENV USE_CONNECTION_TOKEN=false #Set to a secret to have some measure of protection for vscode. Randomized if left blank ENV CONNECTION_TOKEN= # Project name. Typically the same as the project in the URL @@ -28,7 +24,7 @@ ENV PROJECT_NAME="headscale-ui" # URL for the github/git location ENV PROJECT_URL="https://github.com/gurucomputing/headscale-ui" # autostart the dev command on boot? -ENV AUTOSTART=true +ENV AUTOSTART="false" # command to run in the background on startup ENV DEV_COMMAND="npm run dev" @@ -49,8 +45,18 @@ RUN chmod -R 755 scripts RUN /staging/scripts/1-image-build.sh # set to the non-root user -USER node +USER dev-user WORKDIR /data -ENTRYPOINT /bin/sh /staging/scripts/2-initialise.sh \ No newline at end of file +ENTRYPOINT /bin/sh /staging/scripts/2-initialise.sh#!/bin/sh + +#----# +# placeholder for testing +# while true; do sleep 1; done +#----# + +# set file permissions if required +if [ $(id -u) -ne $(stat -c %u /data) ] +then +…fi \ No newline at end of file diff --git a/docker/development/scripts/1-image-build.sh b/docker/development/scripts/1-image-build.sh index ae698b2..df65d3e 100644 --- a/docker/development/scripts/1-image-build.sh +++ b/docker/development/scripts/1-image-build.sh @@ -1,44 +1,22 @@ #!/bin/sh # script environment -# turn on bash logging -set -x +# turn on bash logging, exit on error +set -ex -# script variables -OPENVSCODE_URL="https://github.com/gitpod-io/openvscode-server/releases/download/openvscode-server-v$OPENVSCODE_VERSION/openvscode-server-v$OPENVSCODE_VERSION-linux-x64.tar.gz" -OPENVSCODE_RELEASE="openvscode-server-v$OPENVSCODE_VERSION-linux-x64" -CADDY_URL="https://caddyserver.com/api/download?os=linux&arch=amd64" - -# install dependencies -# tmux used for monitoring secondary processes -# sudo for running specific commands as root -apt-get update -apt-get install -y tmux sudo +# create a non-root user +useradd -m -d /data/home dev-user # set the default shell to the chosen shell -usermod --shell ${SHELL} node +usermod --shell ${SHELL} dev-user # Add the ability to set file permissions on /data to the non-privileged user echo "ALL ALL=NOPASSWD: /bin/chown -R 1000\:1000 /data" >> /etc/sudoers -# install openVSCode -cd /opt - -### Download Open VSCode -curl -LJO "$OPENVSCODE_URL" - -### Extract and move into directory -tar -xzf "$OPENVSCODE_RELEASE.tar.gz" -mv $OPENVSCODE_RELEASE openvscode-server -rm -f "$OPENVSCODE_RELEASE.tar.gz" - -### download caddy -curl -LJO "$CADDY_URL" -chmod +x caddy_linux_amd64 -mv caddy_linux_amd64 /usr/bin/caddy - -# create data and home directories -mkdir -p /data/home +# install dependencies +/staging/scripts/install-base-dependencies.sh +/staging/scripts/install-container-dependencies.sh +/staging/scripts/install-openvscode-server.sh # set tmux to use mouse scroll echo "set -g mouse on" > /data/home/.tmux.conf diff --git a/docker/development/scripts/2-initialise.sh b/docker/development/scripts/2-initialise.sh index 7e8054f..e499ddb 100644 --- a/docker/development/scripts/2-initialise.sh +++ b/docker/development/scripts/2-initialise.sh @@ -14,7 +14,7 @@ then echo "---- Forcing File Permissions to the node user ----" sudo /bin/chown -R 1000:1000 /data else - echo "---- You are not running as the node user AND your file permissions don't match your user ---\n" + echo "---- You are not running as the default non-root user AND your file permissions don't match your user ---\n" echo "---- You may need to manually fix your file permissions ----" fi fi @@ -40,7 +40,6 @@ then cd /data git clone ${PROJECT_URL} cd ${PROJECT_NAME} - npm install else cd /data/${PROJECT_NAME} fi diff --git a/docker/development/scripts/install-base-dependencies.sh b/docker/development/scripts/install-base-dependencies.sh new file mode 100644 index 0000000..290e223 --- /dev/null +++ b/docker/development/scripts/install-base-dependencies.sh @@ -0,0 +1,7 @@ +# install dependencies +# tmux used for monitoring secondary processes +# sudo for running specific commands as root +# git for source countrol +# pwgen for creating randomized passwords/secrets on the fly +# ncdu file navigation +dnf install -y tmux sudo git pwgen ncdu \ No newline at end of file diff --git a/docker/development/scripts/install-container-dependencies.sh b/docker/development/scripts/install-container-dependencies.sh new file mode 100644 index 0000000..d4c0466 --- /dev/null +++ b/docker/development/scripts/install-container-dependencies.sh @@ -0,0 +1,2 @@ +# install container dependencies +dnf module install -y nodejs \ No newline at end of file diff --git a/docker/development/scripts/install-openvscode-server.sh b/docker/development/scripts/install-openvscode-server.sh new file mode 100644 index 0000000..58d1610 --- /dev/null +++ b/docker/development/scripts/install-openvscode-server.sh @@ -0,0 +1,15 @@ +# script variables +OPENVSCODE_VERSION="1.79.2" +OPENVSCODE_URL="https://github.com/gitpod-io/openvscode-server/releases/download/openvscode-server-v$OPENVSCODE_VERSION/openvscode-server-v$OPENVSCODE_VERSION-linux-x64.tar.gz" +OPENVSCODE_RELEASE="openvscode-server-v$OPENVSCODE_VERSION-linux-x64" + +# install openVSCode +cd /opt + +### Download Open VSCode +curl -LJO "$OPENVSCODE_URL" + +### Extract and move into directory +tar -xzf "$OPENVSCODE_RELEASE.tar.gz" +mv $OPENVSCODE_RELEASE openvscode-server +rm -f "$OPENVSCODE_RELEASE.tar.gz" From fab13597d8dfbefb25053ff78db2fad80feba30c Mon Sep 17 00:00:00 2001 From: routerino <45954722+routerino@users.noreply.github.com> Date: Sun, 18 Jun 2023 19:55:15 +1000 Subject: [PATCH 102/160] Revert "Add button to delete machine route" This reverts commit 63041fd673d81da56e60d2b528a4991981eab746. --- .../devices/DeviceCard/DeviceRoutes.svelte | 28 +++---------------- .../devices/DeviceCard/DeviceRoutesAPI.svelte | 26 ----------------- 2 files changed, 4 insertions(+), 50 deletions(-) diff --git a/src/lib/devices/DeviceCard/DeviceRoutes.svelte b/src/lib/devices/DeviceCard/DeviceRoutes.svelte index 2168ba2..59f606f 100644 --- a/src/lib/devices/DeviceCard/DeviceRoutes.svelte +++ b/src/lib/devices/DeviceCard/DeviceRoutes.svelte @@ -1,5 +1,5 @@ Device Routes
      {#each routesList as route, index} -
      - +
    • {route.prefix} {#if route.enabled} {/if} -
    • + {/each}
    diff --git a/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte b/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte index 09f09c8..f43d34c 100644 --- a/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte +++ b/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte @@ -80,30 +80,4 @@ throw error; }); } - - export async function deleteDeviceRoute(routeID: number): Promise { - // variables in local storage - let headscaleURL = localStorage.getItem('headscaleURL') || ''; - let headscaleAPIKey = localStorage.getItem('headscaleAPIKey') || ''; - let endpointURL = `/api/v1/routes/${routeID}`; - - await fetch(headscaleURL + endpointURL, { - method: 'DELETE', - headers: { - Accept: 'application/json', - Authorization: `Bearer ${headscaleAPIKey}` - } - }) - .then((response) => { - if (response.ok) { - } else { - return response.text().then((text) => { - throw JSON.parse(text).message; - }); - } - }) - .catch((error) => { - throw error; - }); - } From dd944a45c1b720d7270cd79bb3798885d2d37388 Mon Sep 17 00:00:00 2001 From: routerino <45954722+routerino@users.noreply.github.com> Date: Sun, 25 Jun 2023 17:00:13 +1000 Subject: [PATCH 103/160] GitHub actions testing (#107) * test 1 * test 2 * remove accidental pasting in commit * removed multi-platform for dev * Revert "Add button to delete machine route" This reverts commit 63041fd673d81da56e60d2b528a4991981eab746. * modernized release workflow * update version * Migration to Svelte 4 * cleaned up version injection * moved build arg below FROM * increment release --- .github/workflows/publish-dev-image.yaml | 30 +-- .github/workflows/publish-release.yaml | 47 +++-- docker/development/dockerfile | 12 +- docker/production/dockerfile | 4 +- docker/production/scripts/1-image-build.sh | 4 +- package-lock.json | 184 +++++++----------- package.json | 14 +- src/lib/common/Alert.svelte | 2 +- src/lib/common/nav.svelte | 2 +- src/lib/devices/CreateDevice.svelte | 8 +- src/lib/devices/DeviceCard.svelte | 2 +- .../DeviceCard/DeviceTags/NewDeviceTag.svelte | 4 +- src/lib/devices/DeviceCard/MoveDevice.svelte | 4 +- .../devices/DeviceCard/RemoveDevice.svelte | 8 +- .../devices/DeviceCard/RenameDevice.svelte | 6 +- src/lib/settings/DevSettings.svelte | 2 +- src/lib/settings/ServerSettings.svelte | 4 +- src/lib/users/CreateUser.svelte | 2 +- src/lib/users/UserCard.svelte | 4 +- .../UserCard/PreAuthKeys/NewPreAuthKey.svelte | 2 +- src/lib/users/UserCard/RemoveUser.svelte | 8 +- src/lib/users/UserCard/RenameUser.svelte | 6 +- src/routes/devices.html/+page.svelte | 6 +- src/routes/groups.html/+page.svelte | 2 +- src/routes/settings.html/+page.svelte | 2 +- src/routes/users.html/+page.svelte | 4 +- 26 files changed, 147 insertions(+), 226 deletions(-) diff --git a/.github/workflows/publish-dev-image.yaml b/.github/workflows/publish-dev-image.yaml index 8ad0b6b..0dc7bde 100644 --- a/.github/workflows/publish-dev-image.yaml +++ b/.github/workflows/publish-dev-image.yaml @@ -16,29 +16,16 @@ jobs: id: gathervars run: | # get a current BUILD_DATE - echo "::set-output name=BUILD_DATE::$(date +%Y%m%d-%H%M%S)" + echo "BUILD_DATE=$(date +%Y%m%d-%H%M%S)" >> $GITHUB_ENV # set version based on BUILD_DATE - echo "::set-output name=VERSION::$(date +%Y.%m.%d)-development" - - # setting tags - echo "::set-output name=TAG::development" + echo "VERSION=$(date +%Y.%m.%d)-development" >> $GITHUB_ENV - name: Checkout Repository - uses: actions/checkout@v2 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - - name: Cache Docker layers - uses: actions/cache@v3 - with: - path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} - restore-keys: ${{ runner.os }}-buildx- - - name: Log in to the Container registry uses: docker/login-action@v1 with: @@ -47,16 +34,13 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push Docker Image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v4 with: build-args: | - BUILD_DATE=${{ steps.gathervars.outputs.BUILD_DATE }} - VERSION=${{ steps.gathervars.outputs.VERSION }} + BUILD_DATE=${{ env.BUILD_DATE }} + VERSION=${{ env.VERSION }} context: ./docker/development tags: | ghcr.io/${{ github.repository }}-dev:latest - ghcr.io/${{ github.repository }}-dev:${{ steps.gathervars.outputs.VERSION }} - platforms: linux/amd64,linux/arm64,linux/arm32v7 - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache + ghcr.io/${{ github.repository }}-dev:${{ env.VERSION }} push: true diff --git a/.github/workflows/publish-release.yaml b/.github/workflows/publish-release.yaml index d8c94c5..b6c9bc2 100644 --- a/.github/workflows/publish-release.yaml +++ b/.github/workflows/publish-release.yaml @@ -10,7 +10,7 @@ jobs: steps: - name: Checkout Repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Variable Gathering id: gathervars @@ -18,22 +18,19 @@ jobs: NOT_PREVIOUSLY_PUBLISHED=0 # get a current BUILD_DATE VERSION=$(jq -r '.version' ./package.json) - echo "::set-output name=BUILD_DATE::$(date +%Y%m%d-%H%M%S)" - echo "::set-output name=VERSION::$VERSION" + echo "BUILD_DATE=$(date +%Y%m%d-%H%M%S)" >> $GITHUB_ENV + echo "VERSION=$VERSION" >> $GITHUB_ENV # setting tags if echo "$VERSION" | grep -q "beta"; then - TAGS="ghcr.io/${{ github.repository }}:beta, ghcr.io/${{ github.repository }}:$VERSION, ghcr.io/${{ github.repository }}:latest" - PRIMARY_TAG=latest + echo "TAGS=ghcr.io/${{ github.repository }}:beta, ghcr.io/${{ github.repository }}:$VERSION, ghcr.io/${{ github.repository }}:latest" >> $GITHUB_ENV else - TAGS="ghcr.io/${{ github.repository }}:release, ghcr.io/${{ github.repository }}:latest, ghcr.io/${{ github.repository }}:$VERSION" - PRIMARY_TAG=latest + echo "TAGS=ghcr.io/${{ github.repository }}:release, ghcr.io/${{ github.repository }}:latest, ghcr.io/${{ github.repository }}:$VERSION" >> $GITHUB_ENV fi - echo "::set-output name=TAG::$TAGS" - echo "::set-output name=PRIMARY_TAG::$PRIMARY_TAG" + echo "PRIMARY_TAG=latest" >> $GITHUB_ENV # check if version has already been published $(docker manifest inspect ghcr.io/${{ github.repository }}:$VERSION > /dev/null) || NOT_PREVIOUSLY_PUBLISHED=1 - echo "::set-output name=NOT_PREVIOUSLY_PUBLISHED::$NOT_PREVIOUSLY_PUBLISHED" + echo "NOT_PREVIOUSLY_PUBLISHED=$NOT_PREVIOUSLY_PUBLISHED" >> $GITHUB_ENV - name: Set up QEMU uses: docker/setup-qemu-action@v2 @@ -42,36 +39,36 @@ jobs: uses: docker/setup-buildx-action@v2 - name: Log in to the Container registry - uses: docker/login-action@v1 - if: ${{ steps.gathervars.outputs.NOT_PREVIOUSLY_PUBLISHED != 0 }} + uses: docker/login-action@v2 + if: ${{ env.NOT_PREVIOUSLY_PUBLISHED != 0 }} with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push Docker Image - uses: docker/build-push-action@v2 - if: ${{ steps.gathervars.outputs.NOT_PREVIOUSLY_PUBLISHED != 0 }} + uses: docker/build-push-action@v4 + if: ${{ env.NOT_PREVIOUSLY_PUBLISHED != 0 }} with: build-args: | - BUILD_DATE=${{ steps.gathervars.outputs.BUILD_DATE }} - VERSION=${{ steps.gathervars.outputs.VERSION }} + BUILD_DATE=${{ env.BUILD_DATE }} + VERSION=${{ env.VERSION }} context: ./docker/production tags: | - ${{ steps.gathervars.outputs.TAG }} + ${{ env.TAGS }} platforms: linux/amd64,linux/arm/v7,linux/arm64/v8 push: true - name: Extract build out of docker image - uses: shrink/actions-docker-extract@v1 - if: ${{ steps.gathervars.outputs.NOT_PREVIOUSLY_PUBLISHED != 0 }} + uses: shrink/actions-docker-extract@v2 + if: ${{ env.NOT_PREVIOUSLY_PUBLISHED != 0 }} id: extract with: - image: ghcr.io/${{ github.repository }}:${{ steps.gathervars.outputs.PRIMARY_TAG }} + image: ghcr.io/${{ github.repository }}:${{ env.PRIMARY_TAG }} path: web - name: create release asset - if: ${{ steps.gathervars.outputs.NOT_PREVIOUSLY_PUBLISHED != 0 }} + if: ${{ env.NOT_PREVIOUSLY_PUBLISHED != 0 }} run: | cd "${{ steps.extract.outputs.destination }}" 7z a headscale-ui.zip web @@ -79,18 +76,18 @@ jobs: - name: Create Draft Release id: create_release uses: actions/create-release@v1 - if: ${{ steps.gathervars.outputs.NOT_PREVIOUSLY_PUBLISHED != 0 }} + if: ${{ env.NOT_PREVIOUSLY_PUBLISHED != 0 }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - tag_name: ${{ steps.gathervars.outputs.VERSION }} + tag_name: ${{ env.VERSION }} release_name: headscale-ui draft: true prerelease: false - name: upload asset to releases uses: actions/upload-release-asset@v1.0.1 - if: ${{ steps.gathervars.outputs.NOT_PREVIOUSLY_PUBLISHED != 0 }} + if: ${{ env.NOT_PREVIOUSLY_PUBLISHED != 0 }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: @@ -101,7 +98,7 @@ jobs: - name: publish release uses: eregon/publish-release@v1 - if: ${{ steps.gathervars.outputs.NOT_PREVIOUSLY_PUBLISHED != 0 }} + if: ${{ env.NOT_PREVIOUSLY_PUBLISHED != 0 }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: diff --git a/docker/development/dockerfile b/docker/development/dockerfile index f90ae93..ad6281b 100644 --- a/docker/development/dockerfile +++ b/docker/development/dockerfile @@ -49,14 +49,4 @@ USER dev-user WORKDIR /data -ENTRYPOINT /bin/sh /staging/scripts/2-initialise.sh#!/bin/sh - -#----# -# placeholder for testing -# while true; do sleep 1; done -#----# - -# set file permissions if required -if [ $(id -u) -ne $(stat -c %u /data) ] -then -…fi \ No newline at end of file +ENTRYPOINT /bin/sh /staging/scripts/2-initialise.sh \ No newline at end of file diff --git a/docker/production/dockerfile b/docker/production/dockerfile index 6e4ccdf..2757cd8 100644 --- a/docker/production/dockerfile +++ b/docker/production/dockerfile @@ -1,10 +1,10 @@ +FROM node:lts AS build + # arguments ARG VERSION="master" # Branch to check out ARG CHECKOUT_BRANCH="master" -FROM node:lts AS build - #environment variables ENV PROJECT_NAME="headscale-ui" # URL for the github/git location diff --git a/docker/production/scripts/1-image-build.sh b/docker/production/scripts/1-image-build.sh index c041a71..d3fcda8 100644 --- a/docker/production/scripts/1-image-build.sh +++ b/docker/production/scripts/1-image-build.sh @@ -2,9 +2,8 @@ set -x # add dependencies -# jq for parsing version information # git for cloning the repository -apk add --no-cache jq git +apk add --no-cache git #clone the project git clone ${PROJECT_URL} ${PROJECT_NAME} @@ -15,7 +14,6 @@ git checkout ${CHECKOUT_BRANCH} npm install # inject the version number -VERSION=$(jq -r '.version' package.json) sed -i "s/insert-version/${VERSION}/g" ./src/routes/settings.html/+page.svelte # build the project diff --git a/package-lock.json b/package-lock.json index 6a125ff..0cb0469 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "headscale-ui", - "version": "2023.01.30-beta-1", + "version": "2023.06.25-beta", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "headscale-ui", - "version": "2023.01.30-beta-1", + "version": "2023.06.25-beta", "devDependencies": { "@sveltejs/adapter-auto": "^2.1.0", "@sveltejs/adapter-static": "^2.0.2", @@ -530,9 +530,9 @@ } }, "node_modules/@sveltejs/kit": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.20.4.tgz", - "integrity": "sha512-MmAzIuMrP7A+8fqDVbxm6ekGHRHL/+Fk8sQPAzPG4G2TxUDtHdn/WcIxeEqHzARMf0OtGSC+VPyOSFuw2Cy2Mg==", + "version": "1.20.5", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.20.5.tgz", + "integrity": "sha512-8rJYZ2boRlO75lwpbpB+DlSzIwmTuamXTpVlDtw4dBk86o3UaDe/+Ro4xCsV/4FtTw2U8xPHyV83edAWbQHG0w==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -561,31 +561,31 @@ } }, "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.1.tgz", - "integrity": "sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.2.tgz", + "integrity": "sha512-ePfcC48ftMKhkT0OFGdOyycYKnnkT6i/buzey+vHRTR/JpQvuPzzhf1PtKqCDQfJRgoPSN2vscXs6gLigx/zGw==", "dev": true, "dependencies": { - "@sveltejs/vite-plugin-svelte-inspector": "^1.0.2", + "@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.1", + "svelte-hmr": "^0.15.2", "vitefu": "^0.2.4" }, "engines": { "node": "^14.18.0 || >= 16" }, "peerDependencies": { - "svelte": "^3.54.0 || ^4.0.0-next.0", + "svelte": "^3.54.0 || ^4.0.0", "vite": "^4.0.0" } }, "node_modules/@sveltejs/vite-plugin-svelte-inspector": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.2.tgz", - "integrity": "sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.3.tgz", + "integrity": "sha512-Khdl5jmmPN6SUsVuqSXatKpQTMIifoQPDanaxC84m9JxIibWvSABJyHpyys0Z+1yYrxY5TTEQm+6elh0XCMaOA==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -595,7 +595,7 @@ }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^2.2.0", - "svelte": "^3.54.0 || ^4.0.0-next.0", + "svelte": "^3.54.0 || ^4.0.0", "vite": "^4.0.0" } }, @@ -805,9 +805,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001504", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001504.tgz", - "integrity": "sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==", + "version": "1.0.30001507", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz", + "integrity": "sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A==", "dev": true, "funding": [ { @@ -904,9 +904,9 @@ } }, "node_modules/daisyui": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.1.1.tgz", - "integrity": "sha512-+SPwlCvbk/dQd40Op3jv+C8s5pL/Ix4z/U+Q8KDKnF7oXNmvDYZlZ9e2RkouoevaW/Jta4e/iLTj5ve2WBoSkw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.1.6.tgz", + "integrity": "sha512-P/2WUn4ZImEc2IfPSYw3qPCUnnJNju0P6ii0fUqtTURUj0oda6L0tm4EzrUmB2EbqB6grZ9nKHPTSniKaPYp1w==", "dev": true, "dependencies": { "colord": "^2.9", @@ -979,9 +979,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.433", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.433.tgz", - "integrity": "sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==", + "version": "1.4.440", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz", + "integrity": "sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw==", "dev": true }, "node_modules/es6-promise": { @@ -1184,14 +1184,6 @@ "node": ">= 0.4.0" } }, - "node_modules/immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -1586,9 +1578,9 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, "engines": { "node": ">= 6" @@ -1853,9 +1845,9 @@ } }, "node_modules/rollup": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", - "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.2.tgz", + "integrity": "sha512-VLnkxZMDr3jpxgtmS8pQZ0UvhslmF4ADq/9w4erkctbgjCqLW9oa89fJuXEs4ZmgyoF7Dm8rMDKSS5b5u2hHUg==", "dev": true, "peer": true, "bin": { @@ -1916,25 +1908,6 @@ "rimraf": "^2.5.2" } }, - "node_modules/sass": { - "version": "1.63.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.4.tgz", - "integrity": "sha512-Sx/+weUmK+oiIlI+9sdD0wZHsqpbgQg8wSwSnGBjwb5GwqFhYNwwnI+UWZtLjKvKyFlKkatRK235qQ3mokyPoQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/set-cookie-parser": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", @@ -2055,18 +2028,18 @@ } }, "node_modules/svelte": { - "version": "3.59.1", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.1.tgz", - "integrity": "sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==", + "version": "3.59.2", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.2.tgz", + "integrity": "sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/svelte-check": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.4.3.tgz", - "integrity": "sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.4.4.tgz", + "integrity": "sha512-Uys9+R65cj8TmP8f5UpS7B2xKpNLYNxEWJsA5ZoKcWq/uwvABFF7xS6iPQGLoa7hxz0DS6xU60YFpmq06E4JxA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", @@ -2701,9 +2674,9 @@ "requires": {} }, "@sveltejs/kit": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.20.4.tgz", - "integrity": "sha512-MmAzIuMrP7A+8fqDVbxm6ekGHRHL/+Fk8sQPAzPG4G2TxUDtHdn/WcIxeEqHzARMf0OtGSC+VPyOSFuw2Cy2Mg==", + "version": "1.20.5", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.20.5.tgz", + "integrity": "sha512-8rJYZ2boRlO75lwpbpB+DlSzIwmTuamXTpVlDtw4dBk86o3UaDe/+Ro4xCsV/4FtTw2U8xPHyV83edAWbQHG0w==", "dev": true, "requires": { "@sveltejs/vite-plugin-svelte": "^2.4.1", @@ -2721,24 +2694,24 @@ } }, "@sveltejs/vite-plugin-svelte": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.1.tgz", - "integrity": "sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.2.tgz", + "integrity": "sha512-ePfcC48ftMKhkT0OFGdOyycYKnnkT6i/buzey+vHRTR/JpQvuPzzhf1PtKqCDQfJRgoPSN2vscXs6gLigx/zGw==", "dev": true, "requires": { - "@sveltejs/vite-plugin-svelte-inspector": "^1.0.2", + "@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.1", + "svelte-hmr": "^0.15.2", "vitefu": "^0.2.4" } }, "@sveltejs/vite-plugin-svelte-inspector": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.2.tgz", - "integrity": "sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.3.tgz", + "integrity": "sha512-Khdl5jmmPN6SUsVuqSXatKpQTMIifoQPDanaxC84m9JxIibWvSABJyHpyys0Z+1yYrxY5TTEQm+6elh0XCMaOA==", "dev": true, "requires": { "debug": "^4.3.4" @@ -2881,9 +2854,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001504", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001504.tgz", - "integrity": "sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==", + "version": "1.0.30001507", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz", + "integrity": "sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A==", "dev": true }, "chokidar": { @@ -2943,9 +2916,9 @@ "dev": true }, "daisyui": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.1.1.tgz", - "integrity": "sha512-+SPwlCvbk/dQd40Op3jv+C8s5pL/Ix4z/U+Q8KDKnF7oXNmvDYZlZ9e2RkouoevaW/Jta4e/iLTj5ve2WBoSkw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.1.6.tgz", + "integrity": "sha512-P/2WUn4ZImEc2IfPSYw3qPCUnnJNju0P6ii0fUqtTURUj0oda6L0tm4EzrUmB2EbqB6grZ9nKHPTSniKaPYp1w==", "dev": true, "requires": { "colord": "^2.9", @@ -2994,9 +2967,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.433", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.433.tgz", - "integrity": "sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==", + "version": "1.4.440", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz", + "integrity": "sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw==", "dev": true }, "es6-promise": { @@ -3154,14 +3127,6 @@ "function-bind": "^1.1.1" } }, - "immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", - "dev": true, - "optional": true, - "peer": true - }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -3450,9 +3415,9 @@ "dev": true }, "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true }, "postcss": { @@ -3603,9 +3568,9 @@ } }, "rollup": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", - "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.2.tgz", + "integrity": "sha512-VLnkxZMDr3jpxgtmS8pQZ0UvhslmF4ADq/9w4erkctbgjCqLW9oa89fJuXEs4ZmgyoF7Dm8rMDKSS5b5u2hHUg==", "dev": true, "peer": true, "requires": { @@ -3642,19 +3607,6 @@ "rimraf": "^2.5.2" } }, - "sass": { - "version": "1.63.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.4.tgz", - "integrity": "sha512-Sx/+weUmK+oiIlI+9sdD0wZHsqpbgQg8wSwSnGBjwb5GwqFhYNwwnI+UWZtLjKvKyFlKkatRK235qQ3mokyPoQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, "set-cookie-parser": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", @@ -3743,15 +3695,15 @@ "dev": true }, "svelte": { - "version": "3.59.1", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.1.tgz", - "integrity": "sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==", + "version": "3.59.2", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.2.tgz", + "integrity": "sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==", "dev": true }, "svelte-check": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.4.3.tgz", - "integrity": "sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.4.4.tgz", + "integrity": "sha512-Uys9+R65cj8TmP8f5UpS7B2xKpNLYNxEWJsA5ZoKcWq/uwvABFF7xS6iPQGLoa7hxz0DS6xU60YFpmq06E4JxA==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.17", diff --git a/package.json b/package.json index b4b0e0e..28b7796 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "headscale-ui", - "version": "2023.06.18-beta-1", + "version": "2023.06.25-beta1", "scripts": { "dev": "vite dev --https --port 443 --host 0.0.0.0", "build": "vite build", @@ -15,7 +15,7 @@ "devDependencies": { "@sveltejs/adapter-auto": "^2.1.0", "@sveltejs/adapter-static": "^2.0.2", - "@sveltejs/kit": "^1.0.0", + "@sveltejs/kit": "^1.20.4", "@tailwindcss/typography": "github:tailwindcss/typography", "@vitejs/plugin-basic-ssl": "^1.0.1", "autoprefixer": "^10.4.4", @@ -24,12 +24,12 @@ "postcss": "^8.4.12", "postcss-load-config": "^4.0.1", "prettier": "^2.6.2", - "prettier-plugin-svelte": "^2.7.0", - "svelte": "^3.44.0", + "prettier-plugin-svelte": "^2.10.1", + "svelte": "^4.0.0", "svelte-check": "^3.4.3", - "svelte-preprocess": "^5.0.0", + "svelte-preprocess": "^5.0.3", "tailwindcss": "^3.0.23", - "typescript": "^5.1.3" + "typescript": "^5.0.0" }, "type": "module" -} +} \ No newline at end of file diff --git a/src/lib/common/Alert.svelte b/src/lib/common/Alert.svelte index cd43ffc..8c778cc 100644 --- a/src/lib/common/Alert.svelte +++ b/src/lib/common/Alert.svelte @@ -31,7 +31,7 @@ {#if visible}
    { $alertStore = ''; diff --git a/src/lib/common/nav.svelte b/src/lib/common/nav.svelte index 6ac53fb..61a53a5 100644 --- a/src/lib/common/nav.svelte +++ b/src/lib/common/nav.svelte @@ -31,7 +31,7 @@ {#if componentLoaded} -