From 85cdba2bc880dba29bbf7b1ca02782091a7a59c6 Mon Sep 17 00:00:00 2001 From: Hugo Stijns Date: Thu, 23 May 2024 10:58:37 +0200 Subject: [PATCH] First version --- .env | 43 + .github/workflows/build.yaml | 40 + .gitignore | 8 + Makefile | 25 + README.md | 28 + apps/currus/Dockerfile | 20 + apps/currus/README.md | 3 + apps/currus/go.mod | 19 + apps/currus/go.sum | 30 + apps/currus/main.go | 49 + apps/currus/server/db.go | 55 + apps/currus/server/lamina.go | 65 + apps/currus/server/logboek.go | 7 + apps/currus/server/server.go | 125 + apps/grafana/README.md | 3 + apps/grafana/grafana.ini | 128 + .../provisioning/dashboards/logboek.yaml | 10 + .../dashboards/logboek/logboek.json | 538 +++ .../provisioning/datasources/logboek.yaml | 36 + apps/lamina/Dockerfile | 20 + apps/lamina/README.md | 3 + apps/lamina/go.mod | 19 + apps/lamina/go.sum | 30 + apps/lamina/main.go | 47 + apps/lamina/server/db.go | 35 + apps/lamina/server/logboek.go | 5 + apps/lamina/server/server.go | 81 + apps/munera/.editorconfig | 10 + apps/munera/.gitattributes | 4 + apps/munera/.gitignore | 14 + apps/munera/.yarnrc.yml | 1 + apps/munera/Dockerfile | 56 + apps/munera/Makefile | 5 + apps/munera/README.md | 3 + apps/munera/assets/app.js | 1 + apps/munera/assets/styles/_tabler.scss | 3 + apps/munera/assets/styles/app.scss | 1 + apps/munera/docker/entrypoint.sh | 11 + apps/munera/docker/uwsgi.ini | 13 + apps/munera/manage.py | 24 + apps/munera/munera/__init__.py | 0 apps/munera/munera/admin.py | 16 + apps/munera/munera/apps.py | 14 + apps/munera/munera/http.py | 35 + .../munera/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 1715 bytes .../munera/locale/nl/LC_MESSAGES/django.po | 121 + apps/munera/munera/management/__init__.py | 0 .../munera/management/commands/__init__.py | 0 .../munera/management/commands/loadusers.py | 22 + apps/munera/munera/migrations/0001_initial.py | 105 + apps/munera/munera/migrations/__init__.py | 0 apps/munera/munera/models.py | 8 + apps/munera/munera/remote.py | 43 + apps/munera/munera/services.py | 57 + apps/munera/munera/settings.py | 122 + apps/munera/munera/templates/index.html | 4 + .../munera/munera/templates/layouts/base.html | 48 + apps/munera/munera/templates/login.html | 40 + apps/munera/munera/templates/logout.html | 23 + .../munera/templates/parking_permit_edit.html | 54 + .../munera/templates/parking_permit_list.html | 43 + apps/munera/munera/urls.py | 20 + apps/munera/munera/views.py | 88 + apps/munera/munera/wsgi.py | 9 + apps/munera/package.json | 23 + apps/munera/pyproject.toml | 20 + apps/munera/requirements-dev.in | 6 + apps/munera/requirements-dev.txt | 279 ++ apps/munera/requirements.in | 5 + apps/munera/requirements.txt | 194 + apps/munera/yarn.lock | 3178 +++++++++++++++++ docker-compose.yaml | 106 + 72 files changed, 6301 insertions(+) create mode 100644 .env create mode 100644 .github/workflows/build.yaml create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 apps/currus/Dockerfile create mode 100644 apps/currus/README.md create mode 100644 apps/currus/go.mod create mode 100644 apps/currus/go.sum create mode 100644 apps/currus/main.go create mode 100644 apps/currus/server/db.go create mode 100644 apps/currus/server/lamina.go create mode 100644 apps/currus/server/logboek.go create mode 100644 apps/currus/server/server.go create mode 100644 apps/grafana/README.md create mode 100644 apps/grafana/grafana.ini create mode 100644 apps/grafana/provisioning/dashboards/logboek.yaml create mode 100644 apps/grafana/provisioning/dashboards/logboek/logboek.json create mode 100644 apps/grafana/provisioning/datasources/logboek.yaml create mode 100644 apps/lamina/Dockerfile create mode 100644 apps/lamina/README.md create mode 100644 apps/lamina/go.mod create mode 100644 apps/lamina/go.sum create mode 100644 apps/lamina/main.go create mode 100644 apps/lamina/server/db.go create mode 100644 apps/lamina/server/logboek.go create mode 100644 apps/lamina/server/server.go create mode 100644 apps/munera/.editorconfig create mode 100644 apps/munera/.gitattributes create mode 100644 apps/munera/.gitignore create mode 100644 apps/munera/.yarnrc.yml create mode 100644 apps/munera/Dockerfile create mode 100644 apps/munera/Makefile create mode 100644 apps/munera/README.md create mode 100644 apps/munera/assets/app.js create mode 100644 apps/munera/assets/styles/_tabler.scss create mode 100644 apps/munera/assets/styles/app.scss create mode 100755 apps/munera/docker/entrypoint.sh create mode 100644 apps/munera/docker/uwsgi.ini create mode 100755 apps/munera/manage.py create mode 100644 apps/munera/munera/__init__.py create mode 100644 apps/munera/munera/admin.py create mode 100644 apps/munera/munera/apps.py create mode 100644 apps/munera/munera/http.py create mode 100644 apps/munera/munera/locale/nl/LC_MESSAGES/django.mo create mode 100644 apps/munera/munera/locale/nl/LC_MESSAGES/django.po create mode 100644 apps/munera/munera/management/__init__.py create mode 100644 apps/munera/munera/management/commands/__init__.py create mode 100644 apps/munera/munera/management/commands/loadusers.py create mode 100644 apps/munera/munera/migrations/0001_initial.py create mode 100644 apps/munera/munera/migrations/__init__.py create mode 100644 apps/munera/munera/models.py create mode 100644 apps/munera/munera/remote.py create mode 100644 apps/munera/munera/services.py create mode 100644 apps/munera/munera/settings.py create mode 100644 apps/munera/munera/templates/index.html create mode 100644 apps/munera/munera/templates/layouts/base.html create mode 100644 apps/munera/munera/templates/login.html create mode 100644 apps/munera/munera/templates/logout.html create mode 100644 apps/munera/munera/templates/parking_permit_edit.html create mode 100644 apps/munera/munera/templates/parking_permit_list.html create mode 100644 apps/munera/munera/urls.py create mode 100644 apps/munera/munera/views.py create mode 100644 apps/munera/munera/wsgi.py create mode 100644 apps/munera/package.json create mode 100644 apps/munera/pyproject.toml create mode 100644 apps/munera/requirements-dev.in create mode 100644 apps/munera/requirements-dev.txt create mode 100644 apps/munera/requirements.in create mode 100644 apps/munera/requirements.txt create mode 100644 apps/munera/yarn.lock create mode 100644 docker-compose.yaml diff --git a/.env b/.env new file mode 100644 index 0000000..938c631 --- /dev/null +++ b/.env @@ -0,0 +1,43 @@ +IMAGE_BASE=ghcr.io/minbzk/logboek-dataverwerkingen-demo + +MUNERA_IMAGE=${IMAGE_BASE}/munera:latest +CURRUS_IMAGE=${IMAGE_BASE}/currus:latest +LAMINA_IMAGE=${IMAGE_BASE}/lamina:latest +LOGBOEK_IMAGE=ghcr.io/minbzk/logboek-dataverwerkingen-logboek:latest +CASSANDRA_IMAGE=cassandra:4.1 +GRAFANA_IMAGE=grafana/grafana:10.3.6 + +## Munera - Logboek +# +MUNERA_LOGBOEK_PORT=9001 +MUNERA_LOGBOEK_LISTEN_ADDRESS=":${MUNERA_LOGBOEK_PORT}" + +## Munera +# +MUNERA_PORT=8080 +MUNERA_INSTANCE_DIR=/var/lib/munera +MUNERA_ALLOWED_HOSTS=127.0.0.1,localhost +MUNERA_CURRUS_URL=http://currus:8081 +MUNERA_LOGBOEK_ENDPOINT=munera-logboek:${MUNERA_LOGBOEK_PORT} + + +## Currus - Logboek +# +CURRUS_LOGBOEK_PORT=9002 +CURRUS_LOGBOEK_LISTEN_ADDRESS=":${CURRUS_LOGBOEK_PORT}" + +## Currus +# +CURRUS_LISTEN_ADDRESS=0.0.0.0:8081 +CURRUS_LAMINA_URL=http://lamina:8082 +CURRUS_LOGBOEK_ENDPOINT=currus-logboek:${CURRUS_LOGBOEK_PORT} + +## Lamina - Logboek +# +LAMINA_LOGBOEK_PORT=9003 +LAMINA_LOGBOEK_LISTEN_ADDRESS=":${LAMINA_LOGBOEK_PORT}" + +## Lamina +# +LAMINA_LISTEN_ADDRESS=0.0.0.0:8082 +LAMINA_LOGBOEK_ENDPOINT=lamina-logboek:${LAMINA_LOGBOEK_PORT} diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000..0f9e756 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,40 @@ +name: Build + +on: + push: + branches: + - develop + workflow_dispatch: + +env: + IMAGE_REGISTRY: ghcr.io + IMAGE_REPOSITORY: minbzk/logboek-dataverwerkingen-demo + +jobs: + build-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + strategy: + fail-fast: false + matrix: + app: + - munera + - currus + - lamina + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Login to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.IMAGE_REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: ./apps/${{ matrix.app }} + push: true + tags: ${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_REPOSITORY }}/${{ matrix.app }}:latest diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..875e603 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.DS_Store + +*.pyc +__pycache__ + +venv + +db.sqlite3 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..162b24a --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ +.PHONY: start +start: + docker compose up --detach --remove-orphans + @echo "" + @echo "Logboek dataverwerkingen demo is gestart." + @echo "Ga naar http://localhost:8080 voor de "Mijn Gemeente"-applicatie" + @echo "Inloggen kan met het account:" + @echo " Gebruikersnaam: burger" + @echo " Wachtwoord: demo123" + @echo "" + @echo "Bekijk het logboek:" + @echo " http://localhost:3000" + + +.PHONY: stop +stop: + docker compose stop + +.PHONY: build +build: + docker compose build + +.PHONY: clean +clean: + docker compose down --volumes --remove-orphans diff --git a/README.md b/README.md index 67c737c..370b3c3 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,34 @@ Een demo hoe de standaard [Logboek dataverwerkingen](https://github.com/MinBZK/logboek-dataverwerkingen) ingezet kan worden. +## Componenten + +Deze demo bestaat uit de volgede componenten (te vinden in de `apps` directory): + +- **[munera](./apps/munera)**: een fictive Mijn Gemeente-omgeving waar burgers gemeentezaken kunnen regelen; +- **[currus](./apps/currus)**: een API voor het beheren van parkeervergunningen; +- **[lamina](./apps/lamina)**: een API voor het beschiknbaar stellen van registratiegegevens van voertuigen. + + +## Gebruik + +Voor het starten van de demo zijn Docker en [Docker Compose](https://docs.docker.com/compose/install/) nodig. + +1. Maak een kopie van deze repository: + ```sh + git clone https://github.com/MinBZK/logboek-dataverwerkingen-demo.git + + cd logboek-dataverwerkingen-demo + ``` + +1. Start de demo: + ```sh + make start + ``` + +1. Navigeer naar . Aanmelden kan met de gebruikersnaam `burger02` en wachtwoord `demo123`. + + ## License Licensed under EUPL v1.2 diff --git a/apps/currus/Dockerfile b/apps/currus/Dockerfile new file mode 100644 index 0000000..b90abcb --- /dev/null +++ b/apps/currus/Dockerfile @@ -0,0 +1,20 @@ +FROM golang:1.22.3-alpine AS build + +WORKDIR /app + +RUN apk add --no-cache git + +COPY go.mod go.sum . +RUN go mod download -x + +COPY server server +COPY main.go . + +RUN go install -ldflags "-s -w" -v . + + +FROM alpine:3.20.0 + +COPY --from=build /go/bin/ /usr/local/bin + +ENTRYPOINT ["/usr/local/bin/currus"] diff --git a/apps/currus/README.md b/apps/currus/README.md new file mode 100644 index 0000000..6546e88 --- /dev/null +++ b/apps/currus/README.md @@ -0,0 +1,3 @@ +# Currus + +Een parkeervergunningen demo-API. diff --git a/apps/currus/go.mod b/apps/currus/go.mod new file mode 100644 index 0000000..8add5b2 --- /dev/null +++ b/apps/currus/go.mod @@ -0,0 +1,19 @@ +module github.com/MinBZK/logboek-dataverwerkingen-demo/apps/currus + +go 1.22 + +require ( + github.com/MinBZK/logboek-dataverwerkingen-logboek/libs/logboek-go v0.0.0-20240523101530-e69b156ed96c + github.com/go-chi/chi/v5 v5.0.12 + github.com/go-chi/render v1.0.3 +) + +require ( + github.com/ajg/form v1.5.1 // indirect + golang.org/x/net v0.25.0 // indirect + golang.org/x/sys v0.20.0 // indirect + golang.org/x/text v0.15.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240521202816-d264139d666e // indirect + google.golang.org/grpc v1.63.2 // indirect + google.golang.org/protobuf v1.34.1 // indirect +) diff --git a/apps/currus/go.sum b/apps/currus/go.sum new file mode 100644 index 0000000..a1336fb --- /dev/null +++ b/apps/currus/go.sum @@ -0,0 +1,30 @@ +github.com/MinBZK/logboek-dataverwerkingen-logboek/libs/logboek-go v0.0.0-20240523101530-e69b156ed96c h1:mWHjmPKbsRuOUschV8AUCxOIFEWjWQcFD5GS/4TcRx4= +github.com/MinBZK/logboek-dataverwerkingen-logboek/libs/logboek-go v0.0.0-20240523101530-e69b156ed96c/go.mod h1:DmEj9fpw5HlQ7J8vn2nAZ/LlXHw7EA5WIpm161lUvRk= +github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-chi/chi/v5 v5.0.12 h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s= +github.com/go-chi/chi/v5 v5.0.12/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-chi/render v1.0.3 h1:AsXqd2a1/INaIfUSKq3G5uA8weYx20FOsM7uSoCyyt4= +github.com/go-chi/render v1.0.3/go.mod h1:/gr3hVkmYR0YlEy3LxCuVRFzEu9Ruok+gFqbIofjao0= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240521202816-d264139d666e h1:Elxv5MwEkCI9f5SkoL6afed6NTdxaGoAo39eANBwHL8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240521202816-d264139d666e/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/apps/currus/main.go b/apps/currus/main.go new file mode 100644 index 0000000..06a8394 --- /dev/null +++ b/apps/currus/main.go @@ -0,0 +1,49 @@ +package main + +import ( + "flag" + "log" + "os" + + "github.com/MinBZK/logboek-dataverwerkingen-demo/apps/currus/server" +) + +type options struct { + listenAddress string + apiBasePath string + laminaURL string + logboekEndpoint string +} + +func parseFlags() *options { + o := &options{} + flag.StringVar(&o.listenAddress, "listen-address", envValue("LISTEN_ADDRESS", "127.0.0.1:8081"), "Listen address") + flag.StringVar(&o.laminaURL, "lamina-url", envValue("LAMINA_URL", "http://127.0.0.1:8082"), "Base URL to Lamina") + flag.StringVar(&o.logboekEndpoint, "logboek-endpoint", envValue("LOGBOEK_ENDPOINT", "127.0.0.1:9000"), "Address of a logboek server") + + flag.Parse() + + return o +} + +func main() { + o := parseFlags() + + srv, err := server.New(o.listenAddress, o.apiBasePath, o.laminaURL, o.logboekEndpoint) + if err != nil { + log.Fatalf("Creating server: %v", err) + } + + log.Println("Starting server...") + if err := srv.Start(); err != nil { + log.Fatal(err) + } +} + +func envValue(key, defaultValue string) string { + value := os.Getenv(key) + if value == "" { + return defaultValue + } + return value +} diff --git a/apps/currus/server/db.go b/apps/currus/server/db.go new file mode 100644 index 0000000..77ed7cf --- /dev/null +++ b/apps/currus/server/db.go @@ -0,0 +1,55 @@ +package server + +import ( + "time" +) + +var permits = []*ParkingPermit{ + {"2cdB1AxNITm0A01PfMIlLiyUsoe", "686242", "999995042", "H358BH", newDate(2023, 10, 10), newDate(2024, 10, 9)}, + {"2cdB19Dd3PM9Snrk2EIiuO0u115", "278322", "999995042", "9ZTJ69", newDate(2024, 1, 8), newDate(2024, 8, 10)}, + {"2cdB1Fd1USUEdVG45oPqgTviipn", "302957", "999993161", "ZV326K", newDate(2023, 10, 10), newDate(2024, 10, 9)}, + {"2cdB18iPqsH00bvQxsjxjtMablt", "846739", "999993914", "XRBS57", newDate(2023, 10, 10), newDate(2024, 10, 9)}, +} + +type DB struct { + permits map[string][]*ParkingPermit +} + +func NewDB() *DB { + db := &DB{ + permits: make(map[string][]*ParkingPermit), + } + + for _, p := range permits { + db.permits[p.OwnerBSN] = append(db.permits[p.OwnerBSN], p) + } + + return db +} + +type ParkingPermit struct { + ID string `json:"id"` + PermitNumber string `json:"permit_number"` + OwnerBSN string `json:"owner_bsn"` + RegistrationNumber string `json:"registration_number"` + ValidFrom time.Time `json:"valid_from"` + ValidTo time.Time `json:"valid_to"` +} + +func (db *DB) ListParkingPermits(bsn string) []*ParkingPermit { + return db.permits[bsn] +} + +func (db *DB) GetParkingPermit(bsn, id string) *ParkingPermit { + for _, p := range db.permits[bsn] { + if p.ID == id { + return p + } + } + + return nil +} + +func newDate(year int, month time.Month, day int) time.Time { + return time.Date(year, month, day, 0, 0, 0, 0, time.Local) +} diff --git a/apps/currus/server/lamina.go b/apps/currus/server/lamina.go new file mode 100644 index 0000000..2a3abd3 --- /dev/null +++ b/apps/currus/server/lamina.go @@ -0,0 +1,65 @@ +package server + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "time" + + logboek_http "github.com/MinBZK/logboek-dataverwerkingen-logboek/libs/logboek-go/http" +) + +func NewLaminaClient(baseURL string) *LaminaClient { + u, _ := url.Parse(baseURL) + + return &LaminaClient{ + baseURL: u, + httpClient: http.Client{ + Transport: logboek_http.NewTransport(http.DefaultTransport), + Timeout: time.Second * 3, + }, + } +} + +type LaminaClient struct { + baseURL *url.URL + httpClient http.Client +} + +type LaminaRegistration struct { + RegistrationNumber string `json:"registration_number"` + BSN string `json:"bsn"` +} + +func (c *LaminaClient) GetRegistration(ctx context.Context, registrationNumber string) (*LaminaRegistration, error) { + resp, err := c.get(ctx, "registrations", registrationNumber) + if err != nil { + return nil, err + } + + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("not ok") + } + + reg := LaminaRegistration{} + if err := json.NewDecoder(resp.Body).Decode(®); err != nil { + return nil, err + } + + return ®, nil +} + +func (c *LaminaClient) get(ctx context.Context, path ...string) (*http.Response, error) { + u := c.baseURL.JoinPath(path...).String() + req, err := http.NewRequestWithContext(ctx, "GET", u, nil) + if err != nil { + return nil, err + } + req.Header.Set("User-Agent", "Currus/1.0") + + return c.httpClient.Do(req) +} diff --git a/apps/currus/server/logboek.go b/apps/currus/server/logboek.go new file mode 100644 index 0000000..5f3e3ba --- /dev/null +++ b/apps/currus/server/logboek.go @@ -0,0 +1,7 @@ +package server + +const ( + ProcessingActivityGetRegistration = "rva:218f9ac0-f964-31d0-a23d-9d0aefa6bcb3" + ProcessingActivityListParkingPermits = "rva:12f2ec2a-0cc4-3541-9ae6-219a178fcfe4" + ProcessingActivityChangeParkingPermit = "rva:0b1ff20a-3ecb-34bf-8cf5-e4cbacb046ab" +) diff --git a/apps/currus/server/server.go b/apps/currus/server/server.go new file mode 100644 index 0000000..ade4855 --- /dev/null +++ b/apps/currus/server/server.go @@ -0,0 +1,125 @@ +package server + +import ( + "context" + "log" + "net/http" + "time" + + "github.com/go-chi/chi/v5" + "github.com/go-chi/chi/v5/middleware" + "github.com/go-chi/render" + + "github.com/MinBZK/logboek-dataverwerkingen-logboek/libs/logboek-go" + "github.com/MinBZK/logboek-dataverwerkingen-logboek/libs/logboek-go/attribute" + logboek_http "github.com/MinBZK/logboek-dataverwerkingen-logboek/libs/logboek-go/http" +) + +type Server struct { + srv *http.Server + db *DB + lc *LaminaClient + l *log.Logger + operator *logboek.ProcessingOperator +} + +func New(address, basePath, laminaURL, logboekEndpoint string) (*Server, error) { + ctx := context.Background() + handler, err := logboek.NewGRPCProcessingOperationHandler(ctx, logboekEndpoint) + if err != nil { + return nil, err + } + + s := &Server{ + srv: &http.Server{ + Addr: address, + ReadHeaderTimeout: 5 * time.Second, + }, + db: NewDB(), + lc: NewLaminaClient(laminaURL), + l: log.Default(), + operator: logboek.NewProcessingOperator(handler), + } + + r := chi.NewRouter() + + r.Use(middleware.RealIP) + r.Use(middleware.Logger) + r.Use(middleware.Recoverer) + r.Use(render.SetContentType(render.ContentTypeJSON)) + + r.Get("/", func(w http.ResponseWriter, _ *http.Request) { + _, _ = w.Write([]byte("Ok\n")) + }) + r.Route("/parking-permits", func(r chi.Router) { + r.Route("/{bsn:[0-9]{9}}", func(r chi.Router) { + r.Get("/", s.listParkingPermitsHandler) + r.Patch("/{id:[A-Za-z0-9]{27}}", s.patchParkingPermitsHandler) + }) + }) + + s.srv.Handler = logboek_http.NewHandler(r) + + return s, nil +} + +func (s *Server) Start() error { + log.Printf("Listening on %s...", s.srv.Addr) + return s.srv.ListenAndServe() +} + +func (s *Server) listParkingPermitsHandler(w http.ResponseWriter, r *http.Request) { + _, op := s.operator.StartProcessing(r.Context(), "list_parking_permits") + op.SetAttributes(attribute.New(attribute.ProcessingActivityIDKey, ProcessingActivityListParkingPermits)) + defer op.End() + + bsn := chi.URLParam(r, "bsn") + permits := s.db.ListParkingPermits(bsn) + + render.JSON(w, r, permits) + + op.SetStatus(logboek.StatusCodeOK) +} + +func (s *Server) patchParkingPermitsHandler(w http.ResponseWriter, r *http.Request) { + ctx, opChange := s.operator.StartProcessing(r.Context(), "change_parking_permit") + opChange.SetAttributes(attribute.New(attribute.ProcessingActivityIDKey, ProcessingActivityChangeParkingPermit)) + defer opChange.End() + + bsn := chi.URLParam(r, "bsn") + id := chi.URLParam(r, "id") + + permit := s.db.GetParkingPermit(bsn, id) + if permit == nil { + opChange.SetStatus(logboek.StatusCodeError) + w.WriteHeader(http.StatusNotFound) + return + } + + ctx, opGet := s.operator.StartProcessing(ctx, "get_registration") + opGet.SetAttributes(attribute.New(attribute.ProcessingActivityIDKey, ProcessingActivityGetRegistration)) + defer opGet.End() + + registrationNumber := r.FormValue("registration_number") + reg, err := s.lc.GetRegistration(ctx, registrationNumber) + if err != nil { + s.l.Printf("failed to get registration: %v\n", err) + opGet.SetStatus(logboek.StatusCodeError) + w.WriteHeader(http.StatusServiceUnavailable) + return + } + + opGet.SetStatus(logboek.StatusCodeOK) + + if reg.BSN != permit.OwnerBSN { + opChange.SetStatus(logboek.StatusCodeOK) + w.WriteHeader(http.StatusUnprocessableEntity) + return + } + + permit.RegistrationNumber = r.FormValue("registration_number") + + opChange.SetStatus(logboek.StatusCodeOK) + + w.WriteHeader(http.StatusNoContent) +} diff --git a/apps/grafana/README.md b/apps/grafana/README.md new file mode 100644 index 0000000..d318a08 --- /dev/null +++ b/apps/grafana/README.md @@ -0,0 +1,3 @@ +# Grafana configuratie + +Configuratie voor het automatisch configureren van Grafana. diff --git a/apps/grafana/grafana.ini b/apps/grafana/grafana.ini new file mode 100644 index 0000000..50a016c --- /dev/null +++ b/apps/grafana/grafana.ini @@ -0,0 +1,128 @@ +[paths] +provisioning = /etc/grafana/provisioning + +[analytics] +reporting_enabled = false +check_for_updates = false +check_for_plugin_updates = false +feedback_links_enabled = false + +[users] +allow_sign_up = false + +# Allow non admin users to create organizations +;allow_org_create = true + +# Set to true to automatically assign new users to the default organization (id 1) +;auto_assign_org = true + +# Set this value to automatically add new users to the provided organization (if auto_assign_org above is set to true) +;auto_assign_org_id = 1 + +# Default role new users will be automatically assigned +;auto_assign_org_role = Viewer + +# Require email validation before sign up completes +;verify_email_enabled = false + +# Background text for the user field on the login page +;login_hint = email or username +;password_hint = password + +# Default UI theme ("dark" or "light") +;default_theme = dark + +# Default UI language (supported IETF language tag, such as en-US) +;default_language = en-US + +# Path to a custom home page. Users are only redirected to this if the default home dashboard is used. It should match a frontend route and contain a leading slash. +;home_page = + +# External user management, these options affect the organization users view +;external_manage_link_url = +;external_manage_link_name = +;external_manage_info = + +# Viewers can edit/inspect dashboard settings in the browser. But not save the dashboard. +;viewers_can_edit = false + +# Editors can administrate dashboard, folders and teams they create +;editors_can_admin = false + +# The duration in time a user invitation remains valid before expiring. This setting should be expressed as a duration. Examples: 6h (hours), 2d (days), 1w (week). Default is 24h (24 hours). The minimum supported duration is 15m (15 minutes). +;user_invite_max_lifetime_duration = 24h + +# Enter a comma-separated list of users login to hide them in the Grafana UI. These users are shown to Grafana admins and themselves. +; hidden_users = + + +[auth] +# Login cookie name +;login_cookie_name = grafana_session + +# Disable usage of Grafana build-in login solution. +disable_login = true + +# The maximum lifetime (duration) an authenticated user can be inactive before being required to login at next visit. Default is 7 days (7d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month). The lifetime resets at each successful token rotation. +;login_maximum_inactive_lifetime_duration = + +# The maximum lifetime (duration) an authenticated user can be logged in since login time before being required to login. Default is 30 days (30d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month). +;login_maximum_lifetime_duration = + +# How often should auth tokens be rotated for authenticated users when being active. The default is each 10 minutes. +;token_rotation_interval_minutes = 10 + +# Set to true to disable (hide) the login form, useful if you use OAuth, defaults to false +disable_login_form = true + +# Set to true to disable the sign out link in the side menu. Useful if you use auth.proxy or auth.jwt, defaults to false +;disable_signout_menu = false + +# URL to redirect the user to after sign out +;signout_redirect_url = + +# Set to true to attempt login with OAuth automatically, skipping the login screen. +# This setting is ignored if multiple OAuth providers are configured. +# Deprecated, use auto_login option for specific provider instead. +;oauth_auto_login = false + +# OAuth state max age cookie duration in seconds. Defaults to 600 seconds. +;oauth_state_cookie_max_age = 600 + +# Skip forced assignment of OrgID 1 or 'auto_assign_org_id' for social logins +# Deprecated, use skip_org_role_sync option for specific provider instead. +;oauth_skip_org_role_update_sync = false + +# limit of api_key seconds to live before expiration +;api_key_max_seconds_to_live = -1 + +# Set to true to enable SigV4 authentication option for HTTP-based datasources. +;sigv4_auth_enabled = false + +# Set to true to enable verbose logging of SigV4 request signing +;sigv4_verbose_logging = false + +# Set to true to enable Azure authentication option for HTTP-based datasources. +;azure_auth_enabled = false + +# Set to skip the organization role from JWT login and use system's role assignment instead. +; skip_org_role_sync = false + +# Use email lookup in addition to the unique ID provided by the IdP +;oauth_allow_insecure_email_lookup = false + +# Set to true to include id of identity as a response header +;id_response_header_enabled = false + +# Prefix used for the id response header, X-Grafana-Identity-Id +;id_response_header_prefix = X-Grafana + +# List of identity namespaces to add id response headers for, separated by space. +# Available namespaces are user, api-key and service-account. +# The header value will encode the namespace ("user:", "api-key:", "service-account:") +;id_response_header_namespaces = user api-key service-account + +[auth.anonymous] +enabled = true +# org_name = Logboek +org_role = Admin diff --git a/apps/grafana/provisioning/dashboards/logboek.yaml b/apps/grafana/provisioning/dashboards/logboek.yaml new file mode 100644 index 0000000..ca7cde0 --- /dev/null +++ b/apps/grafana/provisioning/dashboards/logboek.yaml @@ -0,0 +1,10 @@ +apiVersion: 1 + +providers: + - name: logboek + folder: Logboek + folderUid: logboek + type: file + disableDeletion: false + options: + path: /etc/grafana/provisioning/dashboards/logboek diff --git a/apps/grafana/provisioning/dashboards/logboek/logboek.json b/apps/grafana/provisioning/dashboards/logboek/logboek.json new file mode 100644 index 0000000..09a464b --- /dev/null +++ b/apps/grafana/provisioning/dashboards/logboek/logboek.json @@ -0,0 +1,538 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "hadesarchitect-cassandra-datasource", + "uid": "logboek-munera" + }, + "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": true, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "string", + "unitScale": true + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/Start time|End time/" + }, + "properties": [ + { + "id": "custom.filterable" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Status code" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } + }, + { + "id": "mappings", + "value": [ + { + "options": { + "ERROR": { + "color": "red", + "index": 1 + }, + "OK": { + "color": "green", + "index": 0 + }, + "UNKNOWN": { + "color": "yellow", + "index": 2 + } + }, + "type": "value" + } + ] + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "enablePagination": true, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "frameIndex": 3, + "showHeader": true + }, + "pluginVersion": "10.3.6", + "targets": [ + { + "datasource": { + "type": "hadesarchitect-cassandra-datasource", + "uid": "logboek-munera" + }, + "datasourceId": 1, + "hide": false, + "queryType": "query", + "rawQuery": true, + "refId": "A", + "target": "SELECT trace_id AS \"Trace ID\", operation_id AS \"Operation ID\", parent_operation_id AS \"Parent operation ID\", name AS \"Operation name\", start_time AS \"Start time\", end_time AS \"End time\", status_code AS \"Status code\"\nFROM processing_operations\nWHERE start_time > $__timeFrom AND start_time < $__timeTo\nALLOW FILTERING" + } + ], + "title": "Munera (Mijn Gemeente)", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "desc": true, + "field": "Start time" + } + ] + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "frser-sqlite-datasource", + "uid": "logboek-currus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": true, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "string", + "unitScale": true + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/Start time|End time/" + }, + "properties": [ + { + "id": "custom.filterable" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Status code" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } + }, + { + "id": "mappings", + "value": [ + { + "options": { + "ERROR": { + "color": "red", + "index": 1 + }, + "OK": { + "color": "green", + "index": 0 + }, + "UNKNOWN": { + "color": "yellow", + "index": 2 + } + }, + "type": "value" + } + ] + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 3, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "enablePagination": true, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Start time" + } + ] + }, + "pluginVersion": "10.3.6", + "targets": [ + { + "datasource": { + "type": "frser-sqlite-datasource", + "uid": "logboek-currus" + }, + "queryText": "SELECT\n trace_id AS \"Trace ID\", operation_id AS \"Operation ID\", parent_operation_id AS \"Parent operation ID\",\n name AS \"Operation name\", start_time AS \"Start time\", end_time AS \"End time\", status_code AS \"Status code\",\n foreign_trace_id AS \"Foreign trace ID\", foreign_operation_id AS \"Foreign operation ID\"\nFROM processing_operations \nWHERE start_time > \"${__from:date:iso}\" AND start_time < \"${__to:date:iso}\"\nORDER BY start_time DESC", + "queryType": "table", + "rawQueryText": "SELECT\n trace_id AS \"Trace ID\", operation_id AS \"Operation ID\", parent_operation_id AS \"Parent operation ID\",\n name AS \"Operation name\", start_time AS \"Start time\", end_time AS \"End time\", status_code AS \"Status code\",\n foreign_trace_id AS \"Foreign trace ID\", foreign_operation_id AS \"Foreign operation ID\"\nFROM processing_operations \nWHERE start_time > \"${__from:date:iso}\" AND start_time < \"${__to:date:iso}\"\nORDER BY start_time DESC", + "refId": "A", + "timeColumns": [ + "start_time", + "end_time" + ] + }, + { + "datasource": { + "type": "frser-sqlite-datasource", + "uid": "logboek-currus" + }, + "hide": false, + "queryText": "SELECT\n a.operation_id AS \"Operation ID\", key AS \"Attribute key\", value AS \"Attribute value\"\nFROM processing_operation_attributes a\nINNER JOIN processing_operations o ON o.trace_id = a.trace_id AND o.operation_id = a.operation_id\nWHERE o.start_time > \"${__from:date:iso}\" AND o.start_time < \"${__to:date:iso}\"", + "queryType": "table", + "rawQueryText": "SELECT\n a.operation_id AS \"Operation ID\", key AS \"Attribute key\", value AS \"Attribute value\"\nFROM processing_operation_attributes a\nINNER JOIN processing_operations o ON o.trace_id = a.trace_id AND o.operation_id = a.operation_id\nWHERE o.start_time > \"${__from:date:iso}\" AND o.start_time < \"${__to:date:iso}\"", + "refId": "B", + "timeColumns": [] + } + ], + "title": "Currus (Parkeervergunningsoftware)", + "transformations": [ + { + "id": "convertFieldType", + "options": { + "conversions": [ + { + "destinationType": "time", + "targetField": "Start time" + }, + { + "destinationType": "time", + "targetField": "End time" + } + ], + "fields": {} + } + }, + { + "id": "joinByField", + "options": { + "byField": "Operation ID", + "mode": "inner" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Attribute key": 7, + "Attribute value": 8, + "End time": 5, + "Foreign operation ID": 10, + "Foreign trace ID": 9, + "Operation ID": 1, + "Operation name": 3, + "Parent operation ID": 2, + "Start time": 4, + "Status code": 6, + "Trace ID": 0 + }, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "frser-sqlite-datasource", + "uid": "logboek-lamina" + }, + "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": true, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "string", + "unitScale": true + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/Start time|End time/" + }, + "properties": [ + { + "id": "custom.filterable" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Status code" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } + }, + { + "id": "mappings", + "value": [ + { + "options": { + "ERROR": { + "color": "red", + "index": 1 + }, + "OK": { + "color": "green", + "index": 0 + }, + "UNKNOWN": { + "color": "yellow", + "index": 2 + } + }, + "type": "value" + } + ] + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 18 + }, + "id": 2, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "enablePagination": true, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.3.6", + "targets": [ + { + "datasource": { + "type": "frser-sqlite-datasource", + "uid": "logboek-lamina" + }, + "queryText": "SELECT\n trace_id AS \"Trace ID\", operation_id AS \"Operation ID\", parent_operation_id AS \"Parent operation ID\",\n name AS \"Operation name\", start_time AS \"Start time\", end_time AS \"End time\", status_code AS \"Status code\",\n foreign_trace_id AS \"Foreign trace ID\", foreign_operation_id AS \"Foreign operation ID\"\nFROM processing_operations \nWHERE start_time >= \"${__from:date:iso}\" AND start_time < \"${__to:date:iso}\"\nORDER BY start_time DESC", + "queryType": "table", + "rawQueryText": "SELECT\n trace_id AS \"Trace ID\", operation_id AS \"Operation ID\", parent_operation_id AS \"Parent operation ID\",\n name AS \"Operation name\", start_time AS \"Start time\", end_time AS \"End time\", status_code AS \"Status code\",\n foreign_trace_id AS \"Foreign trace ID\", foreign_operation_id AS \"Foreign operation ID\"\nFROM processing_operations \nWHERE start_time >= \"${__from:date:iso}\" AND start_time < \"${__to:date:iso}\"\nORDER BY start_time DESC", + "refId": "A", + "timeColumns": [ + "start_time", + "end_time" + ] + }, + { + "datasource": { + "type": "frser-sqlite-datasource", + "uid": "logboek-lamina" + }, + "hide": false, + "queryText": "SELECT\n a.operation_id AS \"Operation ID\", key AS \"Attribute key\", value AS \"Attribute value\"\nFROM processing_operation_attributes a\nINNER JOIN processing_operations o ON o.trace_id = a.trace_id AND o.operation_id = a.operation_id\nWHERE o.start_time > \"${__from:date:iso}\" AND o.start_time < \"${__to:date:iso}\"", + "queryType": "table", + "rawQueryText": "SELECT\n a.operation_id AS \"Operation ID\", key AS \"Attribute key\", value AS \"Attribute value\"\nFROM processing_operation_attributes a\nINNER JOIN processing_operations o ON o.trace_id = a.trace_id AND o.operation_id = a.operation_id\nWHERE o.start_time > \"${__from:date:iso}\" AND o.start_time < \"${__to:date:iso}\"", + "refId": "B", + "timeColumns": [] + } + ], + "title": "Lamina (RDW)", + "transformations": [ + { + "id": "convertFieldType", + "options": { + "conversions": [ + { + "destinationType": "time", + "targetField": "Start time" + }, + { + "destinationType": "time", + "targetField": "End time" + } + ], + "fields": {} + } + }, + { + "id": "joinByField", + "options": { + "byField": "Operation ID", + "mode": "inner" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Attribute key": 7, + "Attribute value": 8, + "End time": 5, + "Foreign operation ID": 10, + "Foreign trace ID": 9, + "Operation ID": 1, + "Operation name": 3, + "Parent operation ID": 2, + "Start time": 4, + "Status code": 6, + "Trace ID": 0 + }, + "renameByName": {} + } + } + ], + "type": "table" + } + ], + "refresh": "5s", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-2h", + "to": "now" + }, + "timeRangeUpdatedDuringEditOrView": false, + "timepicker": {}, + "timezone": "", + "title": "Verwerkingen", + "uid": "verwerkingen", + "version": 1, + "weekStart": "" +} diff --git a/apps/grafana/provisioning/datasources/logboek.yaml b/apps/grafana/provisioning/datasources/logboek.yaml new file mode 100644 index 0000000..d3e1535 --- /dev/null +++ b/apps/grafana/provisioning/datasources/logboek.yaml @@ -0,0 +1,36 @@ +apiVersion: 1 + +datasources: + - name: Logboek Munera + uid: logboek-munera + type: hadesarchitect-cassandra-datasource + url: munera-cassandra:9042 + access: proxy + editable: false + isDefault: true + jsonData: + consistency: ONE + keyspace: logboek + readOnly: true + - name: Logboek Currus + uid: logboek-currus + type: frser-sqlite-datasource + access: proxy + editable: false + isDefault: false + jsonData: + attachLimit: 0 + path: /var/lib/logboek/logboek-currus.db + pathPrefix: "file:" + readOnly: true + - name: Logboek Lamina + uid: logboek-lamina + type: frser-sqlite-datasource + access: proxy + editable: false + isDefault: false + jsonData: + attachLimit: 0 + path: /var/lib/logboek/logboek-lamina.db + pathPrefix: "file:" + readOnly: true diff --git a/apps/lamina/Dockerfile b/apps/lamina/Dockerfile new file mode 100644 index 0000000..f62e733 --- /dev/null +++ b/apps/lamina/Dockerfile @@ -0,0 +1,20 @@ +FROM golang:1.22.3-alpine AS build + +WORKDIR /app + +RUN apk add --no-cache git + +COPY go.mod go.sum . +RUN go mod download -x + +COPY server server +COPY main.go . + +RUN go install -ldflags "-s -w" -v . + + +FROM alpine:3.20.0 + +COPY --from=build /go/bin/ /usr/local/bin + +ENTRYPOINT ["/usr/local/bin/lamina"] diff --git a/apps/lamina/README.md b/apps/lamina/README.md new file mode 100644 index 0000000..85d13a9 --- /dev/null +++ b/apps/lamina/README.md @@ -0,0 +1,3 @@ +# Lamina + +Een voertuigenregistratie demo-API. diff --git a/apps/lamina/go.mod b/apps/lamina/go.mod new file mode 100644 index 0000000..d9a83d2 --- /dev/null +++ b/apps/lamina/go.mod @@ -0,0 +1,19 @@ +module github.com/MinBZK/logboek-dataverwerkingen-demo/apps/lamina + +go 1.22 + +require ( + github.com/MinBZK/logboek-dataverwerkingen-logboek/libs/logboek-go v0.0.0-20240523101530-e69b156ed96c + github.com/go-chi/chi/v5 v5.0.12 + github.com/go-chi/render v1.0.3 +) + +require ( + github.com/ajg/form v1.5.1 // indirect + golang.org/x/net v0.25.0 // indirect + golang.org/x/sys v0.20.0 // indirect + golang.org/x/text v0.15.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240521202816-d264139d666e // indirect + google.golang.org/grpc v1.63.2 // indirect + google.golang.org/protobuf v1.34.1 // indirect +) diff --git a/apps/lamina/go.sum b/apps/lamina/go.sum new file mode 100644 index 0000000..a1336fb --- /dev/null +++ b/apps/lamina/go.sum @@ -0,0 +1,30 @@ +github.com/MinBZK/logboek-dataverwerkingen-logboek/libs/logboek-go v0.0.0-20240523101530-e69b156ed96c h1:mWHjmPKbsRuOUschV8AUCxOIFEWjWQcFD5GS/4TcRx4= +github.com/MinBZK/logboek-dataverwerkingen-logboek/libs/logboek-go v0.0.0-20240523101530-e69b156ed96c/go.mod h1:DmEj9fpw5HlQ7J8vn2nAZ/LlXHw7EA5WIpm161lUvRk= +github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-chi/chi/v5 v5.0.12 h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s= +github.com/go-chi/chi/v5 v5.0.12/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-chi/render v1.0.3 h1:AsXqd2a1/INaIfUSKq3G5uA8weYx20FOsM7uSoCyyt4= +github.com/go-chi/render v1.0.3/go.mod h1:/gr3hVkmYR0YlEy3LxCuVRFzEu9Ruok+gFqbIofjao0= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240521202816-d264139d666e h1:Elxv5MwEkCI9f5SkoL6afed6NTdxaGoAo39eANBwHL8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240521202816-d264139d666e/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/apps/lamina/main.go b/apps/lamina/main.go new file mode 100644 index 0000000..1186a2d --- /dev/null +++ b/apps/lamina/main.go @@ -0,0 +1,47 @@ +package main + +import ( + "flag" + "log" + "os" + + "github.com/MinBZK/logboek-dataverwerkingen-demo/apps/lamina/server" +) + +type options struct { + listenAddress string + apiBasePath string + logboekEndpoint string +} + +func parseFlags() *options { + o := &options{} + flag.StringVar(&o.listenAddress, "listen-address", envValue("LISTEN_ADDRESS", "127.0.0.1:8082"), "Listen address") + flag.StringVar(&o.logboekEndpoint, "logboek-endpoint", envValue("LOGBOEK_ENDPOINT", "127.0.0.1:9000"), "Address of a logboek server") + + flag.Parse() + + return o +} + +func main() { + o := parseFlags() + + srv, err := server.New(o.listenAddress, o.apiBasePath, o.logboekEndpoint) + if err != nil { + log.Fatalf("Creating server: %v", err) + } + + log.Println("Starting server...") + if err := srv.Start(); err != nil { + log.Fatal(err) + } +} + +func envValue(key, defaultValue string) string { + value := os.Getenv(key) + if value == "" { + return defaultValue + } + return value +} diff --git a/apps/lamina/server/db.go b/apps/lamina/server/db.go new file mode 100644 index 0000000..a22c46a --- /dev/null +++ b/apps/lamina/server/db.go @@ -0,0 +1,35 @@ +package server + +var registrations = []*Registration{ + {"H358BH", "999995042"}, + {"9ZTJ69", "999995042"}, + {"ZV975T", "999995042"}, + {"ZV326K", "999993161"}, + {"XRBS57", "999993914"}, + {"ZV919R", "999993914"}, +} + +type DB struct { + registrations map[string]*Registration +} + +func NewDB() *DB { + db := &DB{ + registrations: make(map[string]*Registration, len(registrations)), + } + + for _, r := range registrations { + db.registrations[r.RegistrationNumber] = r + } + + return db +} + +type Registration struct { + RegistrationNumber string `json:"registration_number"` + BSN string `json:"bsn"` +} + +func (db *DB) GetRegistration(registrationNumber string) *Registration { + return db.registrations[registrationNumber] +} diff --git a/apps/lamina/server/logboek.go b/apps/lamina/server/logboek.go new file mode 100644 index 0000000..e2a190b --- /dev/null +++ b/apps/lamina/server/logboek.go @@ -0,0 +1,5 @@ +package server + +const ( + ProcessingActivityGetRegistration = "rva:8c714e4a-a538-36f7-8b1f-37a6884cc68c" +) diff --git a/apps/lamina/server/server.go b/apps/lamina/server/server.go new file mode 100644 index 0000000..4eba49a --- /dev/null +++ b/apps/lamina/server/server.go @@ -0,0 +1,81 @@ +package server + +import ( + "context" + "log" + "net/http" + "time" + + "github.com/go-chi/chi/v5" + "github.com/go-chi/chi/v5/middleware" + "github.com/go-chi/render" + + "github.com/MinBZK/logboek-dataverwerkingen-logboek/libs/logboek-go" + "github.com/MinBZK/logboek-dataverwerkingen-logboek/libs/logboek-go/attribute" + logboek_http "github.com/MinBZK/logboek-dataverwerkingen-logboek/libs/logboek-go/http" +) + +type Server struct { + srv *http.Server + db *DB + l *log.Logger + operator *logboek.ProcessingOperator +} + +func New(address, basePath, logboekEndpoint string) (*Server, error) { + ctx := context.Background() + + handler, err := logboek.NewGRPCProcessingOperationHandler(ctx, logboekEndpoint) + if err != nil { + return nil, err + } + operator := logboek.NewProcessingOperator(handler) + + s := &Server{ + srv: &http.Server{ + Addr: address, + ReadHeaderTimeout: 5 * time.Second, + }, + db: NewDB(), + l: log.Default(), + operator: operator, + } + + r := chi.NewRouter() + + r.Use(middleware.Logger) + r.Use(middleware.Recoverer) + r.Use(render.SetContentType(render.ContentTypeJSON)) + + r.Get("/", func(w http.ResponseWriter, _ *http.Request) { + _, _ = w.Write([]byte("Ok\n")) + }) + r.Route("/registrations", func(r chi.Router) { + r.Get("/{registration_number:[A-Z0-9]{6}}", s.getRegistrationHandler) + }) + + s.srv.Handler = logboek_http.NewHandler(r) + + return s, nil +} + +func (s *Server) Start() error { + log.Printf("Listening on %s...", s.srv.Addr) + return s.srv.ListenAndServe() +} + +func (s *Server) getRegistrationHandler(w http.ResponseWriter, r *http.Request) { + _, op := s.operator.StartProcessing(r.Context(), "get_registration") + op.SetAttributes(attribute.New(attribute.ProcessingActivityIDKey, ProcessingActivityGetRegistration)) + defer op.End() + + regisration_number := chi.URLParam(r, "registration_number") + registration := s.db.GetRegistration(regisration_number) + + if registration == nil { + w.WriteHeader(http.StatusNotFound) + return + } + + render.JSON(w, r, registration) +} diff --git a/apps/munera/.editorconfig b/apps/munera/.editorconfig new file mode 100644 index 0000000..1ed453a --- /dev/null +++ b/apps/munera/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true + +[*.{js,json,yml}] +charset = utf-8 +indent_style = space +indent_size = 2 diff --git a/apps/munera/.gitattributes b/apps/munera/.gitattributes new file mode 100644 index 0000000..af3ad12 --- /dev/null +++ b/apps/munera/.gitattributes @@ -0,0 +1,4 @@ +/.yarn/** linguist-vendored +/.yarn/releases/* binary +/.yarn/plugins/**/* binary +/.pnp.* binary linguist-generated diff --git a/apps/munera/.gitignore b/apps/munera/.gitignore new file mode 100644 index 0000000..595fae9 --- /dev/null +++ b/apps/munera/.gitignore @@ -0,0 +1,14 @@ +/assets/dist +/instance + +/.venv +__pycache__ + +/.parcel-cache +/.yarn/* +!/.yarn/patches +!/.yarn/plugins +!/.yarn/releases +!/.yarn/sdks +!/.yarn/versions +/.pnp.* diff --git a/apps/munera/.yarnrc.yml b/apps/munera/.yarnrc.yml new file mode 100644 index 0000000..199a779 --- /dev/null +++ b/apps/munera/.yarnrc.yml @@ -0,0 +1 @@ +enableTelemetry: false diff --git a/apps/munera/Dockerfile b/apps/munera/Dockerfile new file mode 100644 index 0000000..3d422b1 --- /dev/null +++ b/apps/munera/Dockerfile @@ -0,0 +1,56 @@ +ARG UWSGI_VERSION=2.0.25.1 + +FROM python:3.12.3-alpine AS base + +WORKDIR /app + + +FROM base AS build + +RUN apk add --no-cache gcc g++ musl-dev libffi-dev +RUN python3 -m venv --upgrade-deps /app/venv && /app/venv/bin/pip3 install wheel + +ARG UWSGI_VERSION +RUN venv/bin/pip3 install uwsgi==${UWSGI_VERSION} + +COPY requirements.txt . +RUN venv/bin/pip3 install -r requirements.txt + + +FROM node:20.13.1-alpine AS build-assets + +WORKDIR /app + +RUN corepack enable + +COPY package.json yarn.lock . +RUN yarn install --immutable + +COPY ./assets assets +RUN yarn build + + +FROM base as runtime + +RUN apk add --no-cache libstdc++-dev + +COPY --from=build /app/venv venv +COPY --from=build-assets /app/assets/dist assets/dist + +COPY munera munera +COPY manage.py . +COPY docker/entrypoint.sh docker/uwsgi.ini . + +ENV MUNERA_INSTANCE_DIR=/var/lib/munera +RUN mkdir -p "${MUNERA_INSTANCE_DIR}" + +ENV PATH="/app/venv/bin:${PATH}" \ + PYTHONUNBUFFERED=1 \ + PYTHONDONTWRITEBYTECODE=1 \ + MUNERA_DEBUG=0 + +RUN ./manage.py collectstatic --no-input + +ENV MUNERA_PORT=8080 +EXPOSE ${MUNERA_PORT} +ENTRYPOINT ["/app/entrypoint.sh"] diff --git a/apps/munera/Makefile b/apps/munera/Makefile new file mode 100644 index 0000000..f44312b --- /dev/null +++ b/apps/munera/Makefile @@ -0,0 +1,5 @@ +.PHONY: lint +lint: + black --check --diff . + isort --check --diff . + flake8 diff --git a/apps/munera/README.md b/apps/munera/README.md new file mode 100644 index 0000000..284454e --- /dev/null +++ b/apps/munera/README.md @@ -0,0 +1,3 @@ +# Munera + +Een "Mijn Gemeente" demo-applicatie. diff --git a/apps/munera/assets/app.js b/apps/munera/assets/app.js new file mode 100644 index 0000000..9ca7d1e --- /dev/null +++ b/apps/munera/assets/app.js @@ -0,0 +1 @@ +import "./styles/app.scss" diff --git a/apps/munera/assets/styles/_tabler.scss b/apps/munera/assets/styles/_tabler.scss new file mode 100644 index 0000000..be2090b --- /dev/null +++ b/apps/munera/assets/styles/_tabler.scss @@ -0,0 +1,3 @@ +@use "@tabler/core/src/scss/core" with ( + $navbar-height: 5rem +); diff --git a/apps/munera/assets/styles/app.scss b/apps/munera/assets/styles/app.scss new file mode 100644 index 0000000..b5aecae --- /dev/null +++ b/apps/munera/assets/styles/app.scss @@ -0,0 +1 @@ +@import "tabler" diff --git a/apps/munera/docker/entrypoint.sh b/apps/munera/docker/entrypoint.sh new file mode 100755 index 0000000..90b1225 --- /dev/null +++ b/apps/munera/docker/entrypoint.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env sh +set -ex + +# Run migrations +/app/manage.py migrate + +# Load users +/app/manage.py loadusers + +# Start uWSGI processes +exec uwsgi --http :${MUNERA_PORT} /app/uwsgi.ini diff --git a/apps/munera/docker/uwsgi.ini b/apps/munera/docker/uwsgi.ini new file mode 100644 index 0000000..f16a86c --- /dev/null +++ b/apps/munera/docker/uwsgi.ini @@ -0,0 +1,13 @@ +[uwsgi] +strict = true +master = true +die-on-term = true +single-interpreter = true +need-app = true +auto-procname = true +processes = 1 +threads = 1 + +log-x-forwarded-for = true +static-map = /static=/app/static +module = munera.wsgi diff --git a/apps/munera/manage.py b/apps/munera/manage.py new file mode 100755 index 0000000..a7b2848 --- /dev/null +++ b/apps/munera/manage.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python +"""Django"s command-line utility for administrative tasks.""" +import os +import sys + + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "munera.settings") + + +def main(): + """Run administrative tasks.""" + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == "__main__": + main() diff --git a/apps/munera/munera/__init__.py b/apps/munera/munera/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/munera/munera/admin.py b/apps/munera/munera/admin.py new file mode 100644 index 0000000..d3a0771 --- /dev/null +++ b/apps/munera/munera/admin.py @@ -0,0 +1,16 @@ +from django.contrib import admin +from django.contrib.auth.admin import UserAdmin as BaseUserAdmin + +from munera.models import User + + +admin.site.site_header = "Mijn Gemeente" +admin.site.site_title = "Mijn Gemeente admin" +admin.site.index_title = "Administration" + + +class UserAdmin(BaseUserAdmin): + fieldsets = (("Munera", {"fields": ["bsn"]}),) + BaseUserAdmin.fieldsets + + +admin.site.register(User, UserAdmin) diff --git a/apps/munera/munera/apps.py b/apps/munera/munera/apps.py new file mode 100644 index 0000000..df56536 --- /dev/null +++ b/apps/munera/munera/apps.py @@ -0,0 +1,14 @@ +from django.apps import AppConfig +from django.conf import settings + +from logboek import init_processing_operator +from logboek.handlers import GrpcProcessingOperationHandler + + +class MuneraConfig(AppConfig): + name = "munera" + verbose_name = "Munera" + + def ready(self) -> None: + handler = GrpcProcessingOperationHandler(settings.MUNERA_LOGBOEK_ENDPOINT) + init_processing_operator(handler) diff --git a/apps/munera/munera/http.py b/apps/munera/munera/http.py new file mode 100644 index 0000000..34c7bd2 --- /dev/null +++ b/apps/munera/munera/http.py @@ -0,0 +1,35 @@ +from logboek.propagators import TraceContextPropegator +from requests import Response +from requests import Session as BaseSession +from requests.adapters import HTTPAdapter + + +MAX_RETRIES = 2 +REQUEST_TIMEOUT = 5 +USER_AGENT = "Munera/1.0.0" + + +class Session(BaseSession): + def __init__(self, base_url: str): + super().__init__() + + self._base_url = base_url + self._propegator = TraceContextPropegator() + + self.headers["User-Agent"] = USER_AGENT + + self.mount("https://", HTTPAdapter(max_retries=MAX_RETRIES)) + self.mount("http://", HTTPAdapter(max_retries=MAX_RETRIES)) + + def request(self, method: str, url: str, *args, **kwargs) -> Response: + url = f"{self._base_url}{url}" + kwargs.setdefault("timeout", REQUEST_TIMEOUT) + + headers = {} + self._propegator.inject(headers) + + return super().request(method, url, headers=headers, *args, **kwargs) + + +def create_http_client(base_url: str = "") -> Session: + return Session(base_url) diff --git a/apps/munera/munera/locale/nl/LC_MESSAGES/django.mo b/apps/munera/munera/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..53fd15b9b93bfd8a1b263d84fd49d9c7a6cb80f8 GIT binary patch literal 1715 zcmZvb&u<$=6vqcBP|WXAek1WHs%VAQ*lrQQAqOWUX=&nG!722F#=Fn!sds1G+1a?s zwI?L5s23zSA^rvq{1Y5FfVd&mO<>iu0%;(k@F?}2TszXQ)9hhM=b zu>KcfUj+)@Ko1&ie#>3cLx5{}Akew?VmrvlwSE7AAKfeqtztLK+yjxF9P+Kk~SI(GnvX~kxFN~$&Xy28dbR4_V&fLVi%hMB& z>^hogKQ=a{3H#iHf`<4mQC$}(jF_CALRIgG&#@)NBW+VYwp(Cb6jSFDwR1u)JAAw3 zA}qe`Bh(2gQ{uQF3oQdqGY6H(Ph`banM#yT?c!l|&gzEFOhQBN@@g8Kx+&EVH}N2C z6C^y>MTtr5JArZ?;!&M?8S8>6_N{-ru17n(XT&M`SO;!XtI@g~HSoJc&1SpVc(>7NG-_MA2vOf_TVy&ok1w}S zyi%te^;zflt=nX?+V<7$^~2!JdZV`HY(RrV{rw4o1ilmAn`Dr?ET!}Xhn3y_MznP3 zC$Wa?qjej*1Q*?=rGW{xURHXYMH|lN1wu_`%VMRqO!Mi=1xs(OQ1jw)?el1pEu$Aj zZ_hE>kS^6P*IPB!v9`<@9jjJLpQ1?fZbmcb?CHYlr`?O{N@)_4(io~45A~V3bzoA} z8RncNSa*gg%T#r=U2GlB7G7P$<@E57O~!vmT9*-#eOg*8O`P(cvvMfh10_ssQnp&p zTlk1?rQ^XvW{rHrRYdD}6sAtv`P$J$PB`ESVlUFAB4{1RiXJx+NsyD%p0=1DFcc4b zX~t;d&Bd$`4=gh&8yxj;u?Q|4b0d^t`oA_ByBr(yU?>ZUgvR!6fOHTY`{lH*{sS+N BxAFi0 literal 0 HcmV?d00001 diff --git a/apps/munera/munera/locale/nl/LC_MESSAGES/django.po b/apps/munera/munera/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 0000000..4ad8ca8 --- /dev/null +++ b/apps/munera/munera/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,121 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-29 07:52+0000\n" +"PO-Revision-Date: 2024-04-03 11:10+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 3.4.2\n" + +#: munera/models.py:8 +msgid "Citizen service number" +msgstr "Burgerservicenummer (BSN)" + +#: munera/settings.py:109 +msgid "Dutch" +msgstr "" + +#: munera/settings.py:110 +msgid "English" +msgstr "" + +#: munera/templates/layouts/base.html:24 +msgid "Log out" +msgstr "Afmelden" + +#: munera/templates/layouts/base.html:34 +#: munera/templates/parking_permit_list.html:9 +msgid "Parking permits" +msgstr "Parkeervergunningen" + +#: munera/templates/login.html:14 +msgid "Login to your account" +msgstr "Aanmelden" + +#: munera/templates/login.html:16 +msgid "Your username and password didn't match. Please try again." +msgstr "Gebruikersnaam en wachtwoord komen niet overeen. Probeer opnieuw." + +#: munera/templates/login.html:21 +msgid "Username" +msgstr "Gebruikersnaam" + +#: munera/templates/login.html:25 +msgid "Password" +msgstr "Wachtwoord" + +#: munera/templates/login.html:31 +msgid "Login" +msgstr "Aanmelden" + +#: munera/templates/logout.html:7 +msgid "Logout" +msgstr "Afmelden" + +#: munera/templates/logout.html:14 +msgid "Logged out" +msgstr "Afgemeld" + +#: munera/templates/parking_permit_edit.html:9 +msgid "Parking permit change" +msgstr "Wijzig parkeervergunning" + +#: munera/templates/parking_permit_edit.html:22 +msgid "Parking permit" +msgstr "Parkeervergunning" + +#: munera/templates/parking_permit_edit.html:26 +msgid "Current registration number" +msgstr "Huidig kenteken" + +#: munera/templates/parking_permit_edit.html:38 +msgid "Not the onwer" +msgstr "Niet de eigenaar" + +#: munera/templates/parking_permit_edit.html:39 +msgid "The registration number does not beglong to the current user" +msgstr "Het kenteken staat niet op de naam van deze gebruiker" + +#: munera/templates/parking_permit_edit.html:47 +msgid "Cancel" +msgstr "Annuleren" + +#: munera/templates/parking_permit_edit.html:48 +msgid "Request change" +msgstr "Wijzig parkeervergunning" + +#: munera/templates/parking_permit_list.html:24 +msgid "Edit" +msgstr "Wijzig" + +#: munera/templates/parking_permit_list.html:29 +msgid "Registration number" +msgstr "Kenteken" + +#: munera/templates/parking_permit_list.html:30 +msgid "Valid from" +msgstr "Geldig vanaf" + +#: munera/templates/parking_permit_list.html:31 +msgid "Valid to" +msgstr "Geldig tot" + +#: munera/templates/parking_permit_list.html:37 +msgid "No parking permits found" +msgstr "Geen parkeervergunning gevonden" + +#: munera/views.py:34 +msgid "New registration number" +msgstr "Nieuw kenteken" diff --git a/apps/munera/munera/management/__init__.py b/apps/munera/munera/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/munera/munera/management/commands/__init__.py b/apps/munera/munera/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/munera/munera/management/commands/loadusers.py b/apps/munera/munera/management/commands/loadusers.py new file mode 100644 index 0000000..b59fd42 --- /dev/null +++ b/apps/munera/munera/management/commands/loadusers.py @@ -0,0 +1,22 @@ +from django.contrib.auth import get_user_model +from django.core.management.base import BaseCommand + + +USERS = ( + # username bsn + ("burger", "999995042"), + ("burger02", "999993161"), + ("burger03", "999993914"), +) +PASSWORD = "demo123" + + +class Command(BaseCommand): + def handle(self, *args, **options): + User = get_user_model() + + for username, bsn in USERS: + if not User.objects.filter(username=username).exists(): + User.objects.create_user(username=username, email="", password=PASSWORD, bsn=bsn) + + self.stdout.write("Users loaded") diff --git a/apps/munera/munera/migrations/0001_initial.py b/apps/munera/munera/migrations/0001_initial.py new file mode 100644 index 0000000..7807aa8 --- /dev/null +++ b/apps/munera/munera/migrations/0001_initial.py @@ -0,0 +1,105 @@ +# Generated by Django 5.0.4 on 2024-04-24 13:54 + +import django.contrib.auth.models +import django.contrib.auth.validators +import django.core.validators +import django.utils.timezone +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("auth", "0012_alter_user_first_name_max_length"), + ] + + operations = [ + migrations.CreateModel( + name="User", + fields=[ + ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), + ("password", models.CharField(max_length=128, verbose_name="password")), + ("last_login", models.DateTimeField(blank=True, null=True, verbose_name="last login")), + ( + "is_superuser", + models.BooleanField( + default=False, + help_text="Designates that this user has all permissions without explicitly assigning them.", + verbose_name="superuser status", + ), + ), + ( + "username", + models.CharField( + error_messages={"unique": "A user with that username already exists."}, + help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", + max_length=150, + unique=True, + validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], + verbose_name="username", + ), + ), + ("first_name", models.CharField(blank=True, max_length=150, verbose_name="first name")), + ("last_name", models.CharField(blank=True, max_length=150, verbose_name="last name")), + ("email", models.EmailField(blank=True, max_length=254, verbose_name="email address")), + ( + "is_staff", + models.BooleanField( + default=False, + help_text="Designates whether the user can log into this admin site.", + verbose_name="staff status", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.", + verbose_name="active", + ), + ), + ("date_joined", models.DateTimeField(default=django.utils.timezone.now, verbose_name="date joined")), + ( + "bsn", + models.CharField( + max_length=9, + unique=True, + validators=[django.core.validators.MinLengthValidator(9)], + verbose_name="Citizen service number", + ), + ), + ( + "groups", + models.ManyToManyField( + blank=True, + help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.", + related_name="user_set", + related_query_name="user", + to="auth.group", + verbose_name="groups", + ), + ), + ( + "user_permissions", + models.ManyToManyField( + blank=True, + help_text="Specific permissions for this user.", + related_name="user_set", + related_query_name="user", + to="auth.permission", + verbose_name="user permissions", + ), + ), + ], + options={ + "verbose_name": "user", + "verbose_name_plural": "users", + "abstract": False, + }, + managers=[ + ("objects", django.contrib.auth.models.UserManager()), + ], + ), + ] diff --git a/apps/munera/munera/migrations/__init__.py b/apps/munera/munera/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/munera/munera/models.py b/apps/munera/munera/models.py new file mode 100644 index 0000000..fa5bc03 --- /dev/null +++ b/apps/munera/munera/models.py @@ -0,0 +1,8 @@ +from django.contrib.auth.models import AbstractUser +from django.core.validators import MinLengthValidator +from django.db import models +from django.utils.translation import gettext_lazy as _ + + +class User(AbstractUser): + bsn = models.CharField(_("Citizen service number"), unique=True, max_length=9, validators=(MinLengthValidator(9),)) diff --git a/apps/munera/munera/remote.py b/apps/munera/munera/remote.py new file mode 100644 index 0000000..2e1bc03 --- /dev/null +++ b/apps/munera/munera/remote.py @@ -0,0 +1,43 @@ +from datetime import date +from typing import NamedTuple + +from django.conf import settings + +from munera.http import create_http_client + + +class ParkingPermit(NamedTuple): + id: str + permit_number: str + owner_bsn: str + registration_number: str + valid_from: date + valid_to: date + + +class CurrusClient: + def __init__(self, base_url: str): + self._session = create_http_client(base_url) + + def get_parking_permits(self, bsn: str) -> list[ParkingPermit]: + response = self._session.get(f"/parking-permits/{bsn}") + if response.status_code == 404: + return [] + + response.raise_for_status() + + return [ParkingPermit(**item) for item in response.json()] + + def change_registration_number(self, bsn: str, permit_id: str, registration_number: str) -> bool: + response = self._session.patch( + f"/parking-permits/{bsn}/{permit_id}", {"registration_number": registration_number} + ) + if response.status_code == 422: + return False + + response.raise_for_status() + + return True + + +currus_client = CurrusClient(settings.MUNERA_CURRUS_URL) diff --git a/apps/munera/munera/services.py b/apps/munera/munera/services.py new file mode 100644 index 0000000..c089318 --- /dev/null +++ b/apps/munera/munera/services.py @@ -0,0 +1,57 @@ +from django.core.cache import cache + +from logboek import StatusCode, get_processing_operator +from logboek.attributes import Core + +from munera.models import User +from munera.remote import currus_client + + +_CACHE_TTL = 300 + +_CHANGE_REGISTRATION_NUMBER = "rva:0b1ff20a-3ecb-34bf-8cf5-e4cbacb046ab" +_FETCH_PARKING_PERMITS = "rva:982c9acc-4250-4721-9426-628a3baa3e15" + +logboek_operator = get_processing_operator() + + +class ParkingService: + def __init__(self, user: User): + self._user = user + self._cache_key = f"${user.pk}:{user.get_username()}" + self._permits: dict = None + + def get_parking_permit(self, id): + self._load() + return self._permits.get(id, None) + + def list_parking_permits(self): + self._load() + return self._permits.values() + + def change_registration_number(self, permit_id: str, registration_number: str) -> bool: + with logboek_operator.start_proccessing_as_current("change_registration_number") as op: + op.set_attribute(Core.PROCESSING_ACTIVITY_ID, _CHANGE_REGISTRATION_NUMBER) + + success = currus_client.change_registration_number(self._user.bsn, permit_id, registration_number) + op.set_status(StatusCode.OK) + + if success: + cache.delete(self._cache_key) + + return success + + def _load(self): + if self._permits is None: + parking_permits = cache.get_or_set(self._cache_key, self._default, _CACHE_TTL) + self._permits = {p.id: p for p in parking_permits} + + return self._permits + + def _default(self): + with logboek_operator.start_proccessing_as_current("fetch_parking_permits") as op: + op.set_attribute(Core.PROCESSING_ACTIVITY_ID, _FETCH_PARKING_PERMITS) + permits = currus_client.get_parking_permits(self._user.bsn) + op.set_status(StatusCode.OK) + + return permits diff --git a/apps/munera/munera/settings.py b/apps/munera/munera/settings.py new file mode 100644 index 0000000..c171eab --- /dev/null +++ b/apps/munera/munera/settings.py @@ -0,0 +1,122 @@ +import os +from pathlib import Path + +from django.core.management.utils import get_random_secret_key +from django.utils.translation import gettext_lazy as _ + + +BASE_DIR = Path(__file__).resolve().parent.parent +INSTANCE_DIR = Path(os.environ.get("MUNERA_INSTANCE_DIR", BASE_DIR / "instance")) + +DEBUG = os.environ.get("MUNERA_DEBUG", "1") == "1" + +if DEBUG: + SECRET_KEY = "django-insecure-orlb%-uoh4@7*9a68)oz_mam1%-%u_$g=8o)xokkl%*e8mxr7v" + INSTANCE_DIR.mkdir(exist_ok=True) +else: + SECRET_KEY = os.environ.get("MUNERA_SECRET_KEY", get_random_secret_key) + if hosts := os.getenv("MUNERA_ALLOWED_HOSTS"): + ALLOWED_HOSTS = hosts.split(",") + + +INSTALLED_APPS = [ + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", + "widget_tweaks", + "munera", +] + +MIDDLEWARE = [ + "django.middleware.security.SecurityMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.common.CommonMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", +] + +ROOT_URLCONF = "munera.urls" + +TEMPLATES = [ + { + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [], + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + ], + }, + }, +] + +WSGI_APPLICATION = "munera.wsgi.application" + + +DATABASES = { + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": INSTANCE_DIR / "db.sqlite3", + } +} + +AUTH_PASSWORD_VALIDATORS = [ + { + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", + }, +] + +LOGGING = { + "version": 1, + "disable_existing_loggers": False, + "handlers": { + "console": { + "level": "INFO", + "class": "logging.StreamHandler", + }, + }, + "loggers": { + "django": { + "handlers": ["console"], + "level": os.getenv("DJANGO_LOG_LEVEL", "INFO"), + }, + }, +} + +LANGUAGE_CODE = "nl-nl" +TIME_ZONE = "UTC" +USE_I18N = True +USE_TZ = True + +LANGUAGES = ( + ("nl", _("Dutch")), + ("en", _("English")), +) + +STATIC_URL = "static/" +STATIC_ROOT = BASE_DIR / "static" +STATICFILES_DIRS = (BASE_DIR / "assets",) + +DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" + +AUTH_USER_MODEL = "munera.User" + +MUNERA_LOGBOEK_ENDPOINT = os.environ.get("MUNERA_LOGBOEK_ENDPOINT", "127.0.0.1:9000") +MUNERA_CURRUS_URL = os.environ.get("MUNERA_CURRUS_URL", "http://127.0.0.1:8081") diff --git a/apps/munera/munera/templates/index.html b/apps/munera/munera/templates/index.html new file mode 100644 index 0000000..f9c4c26 --- /dev/null +++ b/apps/munera/munera/templates/index.html @@ -0,0 +1,4 @@ +{% extends "layouts/base.html" %} + +{% block content %} +{% endblock %} diff --git a/apps/munera/munera/templates/layouts/base.html b/apps/munera/munera/templates/layouts/base.html new file mode 100644 index 0000000..383402a --- /dev/null +++ b/apps/munera/munera/templates/layouts/base.html @@ -0,0 +1,48 @@ +{% load static i18n %} + + + + + + Mijn Gemeente - Logboek dataverwerkignen demo + + +
+ +
+ {% block content %}{% endblock %} +
+
+ + + diff --git a/apps/munera/munera/templates/login.html b/apps/munera/munera/templates/login.html new file mode 100644 index 0000000..2b4d4eb --- /dev/null +++ b/apps/munera/munera/templates/login.html @@ -0,0 +1,40 @@ +{% load static i18n %} + + + + + + Mijn Gemeente + + +
+
+
+
+

{% translate "Login to your account" %}

+ {% if form.errors %} +

{% translate "Your username and password didn't match. Please try again." %}

+ {% endif %} +
+ {% csrf_token %} +
+ + +
+
+ +
+ +
+
+ +
+
+
+
+
+ + + diff --git a/apps/munera/munera/templates/logout.html b/apps/munera/munera/templates/logout.html new file mode 100644 index 0000000..3425d6f --- /dev/null +++ b/apps/munera/munera/templates/logout.html @@ -0,0 +1,23 @@ +{% load static i18n %} + + + + + + {% translate "Logout" %} - Mijn Gemeente + + +
+
+
+
+

{% translate "Logged out"%}

+

+
+
+
+
+ + + + diff --git a/apps/munera/munera/templates/parking_permit_edit.html b/apps/munera/munera/templates/parking_permit_edit.html new file mode 100644 index 0000000..c7bd25c --- /dev/null +++ b/apps/munera/munera/templates/parking_permit_edit.html @@ -0,0 +1,54 @@ +{% extends "layouts/base.html" %} +{% load i18n widget_tweaks %} + +{% block content %} + + +
+
+
+
+
+ {% csrf_token %} +
+

{% translate "Parking permit" %}: {{ parking_permit.permit_number }}

+
+
+
+
{% translate "Current registration number"%}
+
{{ parking_permit.registration_number }}
+
+
+ + {{ form.registration_number | add_class:"form-control" }} + ZV975T, ZV919R +
+ {% if form.error_not_owned %} + + {% endif %} +
+ +
+
+
+
+
+{% endblock %} diff --git a/apps/munera/munera/templates/parking_permit_list.html b/apps/munera/munera/templates/parking_permit_list.html new file mode 100644 index 0000000..23fb4c8 --- /dev/null +++ b/apps/munera/munera/templates/parking_permit_list.html @@ -0,0 +1,43 @@ +{% extends "layouts/base.html" %} +{% load i18n %} + +{% block content %} + + +
+
+
+ {% for parking_permit in parking_permits %} +
+
+
+

{{ parking_permit.permit_number }}

+ +
+ +
+ {% translate "Registration number" %}: {{ parking_permit.registration_number }}
+ {% translate "Valid from" %}: {{ parking_permit.valid_from }}
+ {% translate "Valid to" %}: {{ parking_permit.valid_to }} +
+
+
+ {% empty %} +
+

{% translate "No parking permits found" %}

+
+ {% endfor %} +
+
+
+{% endblock %} diff --git a/apps/munera/munera/urls.py b/apps/munera/munera/urls.py new file mode 100644 index 0000000..56703ca --- /dev/null +++ b/apps/munera/munera/urls.py @@ -0,0 +1,20 @@ +from django.contrib import admin +from django.urls import path + +from munera.views import ( + IndexView, + LoginView, + LogoutView, + ParkingPermitEditlView, + ParkingPermitListView, +) + + +urlpatterns = [ + path("admin/", admin.site.urls), + path("", IndexView.as_view(), name="index"), + path("aanmelden", LoginView.as_view(), name="login"), + path("afmelden", LogoutView.as_view(), name="logout"), + path("parkeervergunningen", ParkingPermitListView.as_view(), name="parking_permit_list"), + path("parkeervergunningen//wijzig", ParkingPermitEditlView.as_view(), name="parking_permit_edit"), +] diff --git a/apps/munera/munera/views.py b/apps/munera/munera/views.py new file mode 100644 index 0000000..faa925c --- /dev/null +++ b/apps/munera/munera/views.py @@ -0,0 +1,88 @@ +from django import forms +from django.contrib.auth import views as auth_views +from django.contrib.auth.mixins import LoginRequiredMixin as BaseLoginRequiredMixin +from django.urls import reverse_lazy +from django.utils.translation import gettext as _ +from django.views.generic import FormView, TemplateView + +from munera.services import ParkingService + + +class LoginRequiredMixin(BaseLoginRequiredMixin): + login_url = reverse_lazy("login") + next_page = reverse_lazy("index") + + +class IndexView(LoginRequiredMixin, TemplateView): + template_name = "index.html" + + +class ParkingPermitListView(LoginRequiredMixin, TemplateView): + template_name = "parking_permit_list.html" + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + service = ParkingService(self.request.user) + context["parking_permits"] = service.list_parking_permits() + + return context + + +class EditForm(forms.Form): + registration_number = forms.CharField(label=_("New registration number")) + + def __init__(self, *args, service: ParkingService, **kwargs): + super().__init__(*args, **kwargs) + self._service = service + self.error_not_owned = None + + def save(self, instance): + success = self._service.change_registration_number(instance.id, self.cleaned_data["registration_number"]) + if not success: + self.error_not_owned = True + return success + + +class ParkingPermitEditlView(LoginRequiredMixin, FormView): + template_name = "parking_permit_edit.html" + form_class = EditForm + success_url = reverse_lazy("parking_permit_list") + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + return super().get(request, *args, **kwargs) + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + return super().post(request, *args, **kwargs) + + def get_object(self): + pk = self.kwargs.get("pk") + service = ParkingService(self.request.user) + return service.get_parking_permit(pk) + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs["service"] = ParkingService(self.request.user) + return kwargs + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["parking_permit"] = self.object + return context + + def form_valid(self, form: EditForm): + success = form.save(self.object) + if not success: + return super().form_invalid(form) + return super().form_valid(form) + + +class LoginView(auth_views.LoginView): + template_name = "login.html" + next_page = reverse_lazy("index") + + +class LogoutView(auth_views.LogoutView): + template_name = "logout.html" diff --git a/apps/munera/munera/wsgi.py b/apps/munera/munera/wsgi.py new file mode 100644 index 0000000..74612d4 --- /dev/null +++ b/apps/munera/munera/wsgi.py @@ -0,0 +1,9 @@ +import os + +from django.core.wsgi import get_wsgi_application + + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "munera.settings") +os.environ.setdefault("MUNERA_DEBUG", "0") + +application = get_wsgi_application() diff --git a/apps/munera/package.json b/apps/munera/package.json new file mode 100644 index 0000000..f5f1d6c --- /dev/null +++ b/apps/munera/package.json @@ -0,0 +1,23 @@ +{ + "packageManager": "yarn@4.2.2", + "scripts": { + "build": "parcel build --no-source-maps", + "watch": "parcel watch --host 127.0.0.1" + }, + "targets": { + "default": { + "source": [ + "./assets/app.js" + ], + "distDir": "./assets/dist" + } + }, + "dependencies": { + "@tabler/core": "^1.0.0-beta20" + }, + "devDependencies": { + "@parcel/core": "^2.12.0", + "@parcel/transformer-sass": "^2.12.0", + "parcel": "^2.12.0" + } +} diff --git a/apps/munera/pyproject.toml b/apps/munera/pyproject.toml new file mode 100644 index 0000000..b7b4d15 --- /dev/null +++ b/apps/munera/pyproject.toml @@ -0,0 +1,20 @@ +[project] +requires-python = ">= 3.12" + +[tool.pip-tools] +generate_hashes = true +strip_extras = true + +[tool.black] +line-length = 120 + +[tool.isort] +profile = "black" +known_django = "django" +sections = ["FUTURE", "STDLIB", "DJANGO", "THIRDPARTY", "FIRSTPARTY", "LOCALFOLDER"] +lines_after_imports = 2 +skip = [".venv", ".yarn", "migrations"] + +[tool.flake8] +ignore = ["E501"] +extend_exclude = [".venv", ".yarn", "migrations"] diff --git a/apps/munera/requirements-dev.in b/apps/munera/requirements-dev.in new file mode 100644 index 0000000..58ea2a7 --- /dev/null +++ b/apps/munera/requirements-dev.in @@ -0,0 +1,6 @@ +-r requirements.txt + +black==24.4.2 +isort==5.13.2 +flake8==7.0.0 +Flake8-pyproject==1.2.3 diff --git a/apps/munera/requirements-dev.txt b/apps/munera/requirements-dev.txt new file mode 100644 index 0000000..ff96a71 --- /dev/null +++ b/apps/munera/requirements-dev.txt @@ -0,0 +1,279 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --generate-hashes --strip-extras requirements-dev.in +# +asgiref==3.7.2 \ + --hash=sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e \ + --hash=sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed + # via + # -r requirements.txt + # django +black==24.4.2 \ + --hash=sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474 \ + --hash=sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1 \ + --hash=sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0 \ + --hash=sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8 \ + --hash=sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96 \ + --hash=sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1 \ + --hash=sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04 \ + --hash=sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021 \ + --hash=sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94 \ + --hash=sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d \ + --hash=sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c \ + --hash=sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7 \ + --hash=sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c \ + --hash=sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc \ + --hash=sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7 \ + --hash=sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d \ + --hash=sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c \ + --hash=sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741 \ + --hash=sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce \ + --hash=sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb \ + --hash=sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063 \ + --hash=sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e + # via -r requirements-dev.in +certifi==2024.2.2 \ + --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ + --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 + # via + # -r requirements.txt + # requests +charset-normalizer==3.3.2 \ + --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ + --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ + --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ + --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ + --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ + --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ + --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ + --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ + --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ + --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ + --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ + --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ + --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ + --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ + --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ + --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ + --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ + --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ + --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ + --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ + --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ + --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ + --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ + --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ + --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ + --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ + --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ + --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ + --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ + --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ + --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ + --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ + --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ + --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ + --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ + --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ + --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ + --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ + --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ + --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ + --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ + --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ + --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ + --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ + --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ + --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ + --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ + --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ + --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ + --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ + --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ + --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ + --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ + --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ + --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ + --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ + --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ + --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ + --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ + --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ + --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ + --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ + --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ + --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ + --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ + --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ + --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ + --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ + --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ + --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ + --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ + --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ + --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ + --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ + --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ + --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ + --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ + --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ + --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ + --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ + --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ + --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ + --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ + --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ + --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ + --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ + --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ + --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ + --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ + --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 + # via + # -r requirements.txt + # requests +click==8.1.7 \ + --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ + --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de + # via black +django==5.0.6 \ + --hash=sha256:8363ac062bb4ef7c3f12d078f6fa5d154031d129a15170a1066412af49d30905 \ + --hash=sha256:ff1b61005004e476e0aeea47c7f79b85864c70124030e95146315396f1e7951f + # via -r requirements.txt +django-widget-tweaks==1.5.0 \ + --hash=sha256:1c2180681ebb994e922c754804c7ffebbe1245014777ac47897a81f57cc629c7 \ + --hash=sha256:a41b7b2f05bd44d673d11ebd6c09a96f1d013ee98121cb98c384fe84e33b881e + # via -r requirements.txt +flake8==7.0.0 \ + --hash=sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132 \ + --hash=sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3 + # via + # -r requirements-dev.in + # flake8-pyproject +flake8-pyproject==1.2.3 \ + --hash=sha256:6249fe53545205af5e76837644dc80b4c10037e73a0e5db87ff562d75fb5bd4a + # via -r requirements-dev.in +grpcio==1.63.0 \ + --hash=sha256:01799e8649f9e94ba7db1aeb3452188048b0019dc37696b0f5ce212c87c560c3 \ + --hash=sha256:0697563d1d84d6985e40ec5ec596ff41b52abb3fd91ec240e8cb44a63b895094 \ + --hash=sha256:08e1559fd3b3b4468486b26b0af64a3904a8dbc78d8d936af9c1cf9636eb3e8b \ + --hash=sha256:166e5c460e5d7d4656ff9e63b13e1f6029b122104c1633d5f37eaea348d7356d \ + --hash=sha256:1ff737cf29b5b801619f10e59b581869e32f400159e8b12d7a97e7e3bdeee6a2 \ + --hash=sha256:219bb1848cd2c90348c79ed0a6b0ea51866bc7e72fa6e205e459fedab5770172 \ + --hash=sha256:259e11932230d70ef24a21b9fb5bb947eb4703f57865a404054400ee92f42f5d \ + --hash=sha256:2e93aca840c29d4ab5db93f94ed0a0ca899e241f2e8aec6334ab3575dc46125c \ + --hash=sha256:3a6d1f9ea965e750db7b4ee6f9fdef5fdf135abe8a249e75d84b0a3e0c668a1b \ + --hash=sha256:50344663068041b34a992c19c600236e7abb42d6ec32567916b87b4c8b8833b3 \ + --hash=sha256:56cdf96ff82e3cc90dbe8bac260352993f23e8e256e063c327b6cf9c88daf7a9 \ + --hash=sha256:5c039ef01516039fa39da8a8a43a95b64e288f79f42a17e6c2904a02a319b357 \ + --hash=sha256:6426e1fb92d006e47476d42b8f240c1d916a6d4423c5258ccc5b105e43438f61 \ + --hash=sha256:65bf975639a1f93bee63ca60d2e4951f1b543f498d581869922910a476ead2f5 \ + --hash=sha256:6a1a3642d76f887aa4009d92f71eb37809abceb3b7b5a1eec9c554a246f20e3a \ + --hash=sha256:6ef0ad92873672a2a3767cb827b64741c363ebaa27e7f21659e4e31f4d750280 \ + --hash=sha256:756fed02dacd24e8f488f295a913f250b56b98fb793f41d5b2de6c44fb762434 \ + --hash=sha256:75f701ff645858a2b16bc8c9fc68af215a8bb2d5a9b647448129de6e85d52bce \ + --hash=sha256:8064d986d3a64ba21e498b9a376cbc5d6ab2e8ab0e288d39f266f0fca169b90d \ + --hash=sha256:878b1d88d0137df60e6b09b74cdb73db123f9579232c8456f53e9abc4f62eb3c \ + --hash=sha256:8f3f6883ce54a7a5f47db43289a0a4c776487912de1a0e2cc83fdaec9685cc9f \ + --hash=sha256:91b73d3f1340fefa1e1716c8c1ec9930c676d6b10a3513ab6c26004cb02d8b3f \ + --hash=sha256:93a46794cc96c3a674cdfb59ef9ce84d46185fe9421baf2268ccb556f8f81f57 \ + --hash=sha256:93f45f27f516548e23e4ec3fbab21b060416007dbe768a111fc4611464cc773f \ + --hash=sha256:9e350cb096e5c67832e9b6e018cf8a0d2a53b2a958f6251615173165269a91b0 \ + --hash=sha256:a2d60cd1d58817bc5985fae6168d8b5655c4981d448d0f5b6194bbcc038090d2 \ + --hash=sha256:a3abfe0b0f6798dedd2e9e92e881d9acd0fdb62ae27dcbbfa7654a57e24060c0 \ + --hash=sha256:a44624aad77bf8ca198c55af811fd28f2b3eaf0a50ec5b57b06c034416ef2d0a \ + --hash=sha256:a7b19dfc74d0be7032ca1eda0ed545e582ee46cd65c162f9e9fc6b26ef827dc6 \ + --hash=sha256:ad2ac8903b2eae071055a927ef74121ed52d69468e91d9bcbd028bd0e554be6d \ + --hash=sha256:b005292369d9c1f80bf70c1db1c17c6c342da7576f1c689e8eee4fb0c256af85 \ + --hash=sha256:b2e44f59316716532a993ca2966636df6fbe7be4ab6f099de6815570ebe4383a \ + --hash=sha256:b3afbd9d6827fa6f475a4f91db55e441113f6d3eb9b7ebb8fb806e5bb6d6bd0d \ + --hash=sha256:b416252ac5588d9dfb8a30a191451adbf534e9ce5f56bb02cd193f12d8845b7f \ + --hash=sha256:b5194775fec7dc3dbd6a935102bb156cd2c35efe1685b0a46c67b927c74f0cfb \ + --hash=sha256:cacdef0348a08e475a721967f48206a2254a1b26ee7637638d9e081761a5ba86 \ + --hash=sha256:cd1e68776262dd44dedd7381b1a0ad09d9930ffb405f737d64f505eb7f77d6c7 \ + --hash=sha256:cdcda1156dcc41e042d1e899ba1f5c2e9f3cd7625b3d6ebfa619806a4c1aadda \ + --hash=sha256:cf8dae9cc0412cb86c8de5a8f3be395c5119a370f3ce2e69c8b7d46bb9872c8d \ + --hash=sha256:d2497769895bb03efe3187fb1888fc20e98a5f18b3d14b606167dacda5789434 \ + --hash=sha256:e3b77eaefc74d7eb861d3ffbdf91b50a1bb1639514ebe764c47773b833fa2d91 \ + --hash=sha256:e48cee31bc5f5a31fb2f3b573764bd563aaa5472342860edcc7039525b53e46a \ + --hash=sha256:e4cbb2100ee46d024c45920d16e888ee5d3cf47c66e316210bc236d5bebc42b3 \ + --hash=sha256:f28f8b2db7b86c77916829d64ab21ff49a9d8289ea1564a2b2a3a8ed9ffcccd3 \ + --hash=sha256:f3023e14805c61bc439fb40ca545ac3d5740ce66120a678a3c6c2c55b70343d1 \ + --hash=sha256:fdf348ae69c6ff484402cfdb14e18c1b0054ac2420079d575c53a60b9b2853ae + # via + # -r requirements.txt + # logboek +idna==3.6 \ + --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ + --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f + # via + # -r requirements.txt + # requests +isort==5.13.2 \ + --hash=sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109 \ + --hash=sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6 + # via -r requirements-dev.in +logboek @ https://github.com/MinBZK/logboek-dataverwerkingen-logboek/archive/e69b156ed96c523bdc35e31d2639f7f7ea56209e.zip#subdirectory=libs/logboek-python \ + --hash=sha256:0b8a2d213cd53fb298869e8e2d4974960936fbba2dbb18b558151b30712a7b3e + # via -r requirements.txt +mccabe==0.7.0 \ + --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ + --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e + # via flake8 +mypy-extensions==1.0.0 \ + --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ + --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 + # via black +packaging==23.2 \ + --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ + --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 + # via black +pathspec==0.12.1 \ + --hash=sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 \ + --hash=sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712 + # via black +platformdirs==4.2.0 \ + --hash=sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068 \ + --hash=sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768 + # via black +protobuf==5.26.1 \ + --hash=sha256:38aa5f535721d5bb99861166c445c4105c4e285c765fbb2ac10f116e32dcd46d \ + --hash=sha256:3c388ea6ddfe735f8cf69e3f7dc7611e73107b60bdfcf5d0f024c3ccd3794e23 \ + --hash=sha256:7ee014c2c87582e101d6b54260af03b6596728505c79f17c8586e7523aaa8f8c \ + --hash=sha256:8ca2a1d97c290ec7b16e4e5dff2e5ae150cc1582f55b5ab300d45cb0dfa90e51 \ + --hash=sha256:9b557c317ebe6836835ec4ef74ec3e994ad0894ea424314ad3552bc6e8835b4e \ + --hash=sha256:b9ba3ca83c2e31219ffbeb9d76b63aad35a3eb1544170c55336993d7a18ae72c \ + --hash=sha256:d693d2504ca96750d92d9de8a103102dd648fda04540495535f0fec7577ed8fc \ + --hash=sha256:da612f2720c0183417194eeaa2523215c4fcc1a1949772dc65f05047e08d5932 \ + --hash=sha256:e6039957449cb918f331d32ffafa8eb9255769c96aa0560d9a5bf0b4e00a2a33 \ + --hash=sha256:f7417703f841167e5a27d48be13389d52ad705ec09eade63dfc3180a959215d7 \ + --hash=sha256:fbfe61e7ee8c1860855696e3ac6cfd1b01af5498facc6834fcc345c9684fb2ca + # via + # -r requirements.txt + # logboek +pycodestyle==2.11.1 \ + --hash=sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f \ + --hash=sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67 + # via flake8 +pyflakes==3.2.0 \ + --hash=sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f \ + --hash=sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a + # via flake8 +requests==2.32.2 \ + --hash=sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289 \ + --hash=sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c + # via -r requirements.txt +sqlparse==0.4.4 \ + --hash=sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3 \ + --hash=sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c + # via + # -r requirements.txt + # django +urllib3==2.2.1 \ + --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ + --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 + # via + # -r requirements.txt + # requests diff --git a/apps/munera/requirements.in b/apps/munera/requirements.in new file mode 100644 index 0000000..2f3b1ed --- /dev/null +++ b/apps/munera/requirements.in @@ -0,0 +1,5 @@ +django==5.0.6 +django-widget-tweaks==1.5.0 +requests==2.32.2 + +logboek @ https://github.com/MinBZK/logboek-dataverwerkingen-logboek/archive/e69b156ed96c523bdc35e31d2639f7f7ea56209e.zip#subdirectory=libs/logboek-python diff --git a/apps/munera/requirements.txt b/apps/munera/requirements.txt new file mode 100644 index 0000000..ec4b996 --- /dev/null +++ b/apps/munera/requirements.txt @@ -0,0 +1,194 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --generate-hashes --strip-extras +# +asgiref==3.7.2 \ + --hash=sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e \ + --hash=sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed + # via django +certifi==2024.2.2 \ + --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ + --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 + # via requests +charset-normalizer==3.3.2 \ + --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ + --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ + --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ + --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ + --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ + --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ + --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ + --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ + --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ + --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ + --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ + --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ + --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ + --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ + --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ + --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ + --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ + --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ + --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ + --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ + --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ + --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ + --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ + --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ + --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ + --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ + --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ + --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ + --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ + --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ + --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ + --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ + --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ + --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ + --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ + --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ + --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ + --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ + --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ + --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ + --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ + --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ + --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ + --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ + --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ + --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ + --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ + --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ + --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ + --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ + --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ + --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ + --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ + --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ + --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ + --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ + --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ + --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ + --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ + --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ + --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ + --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ + --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ + --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ + --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ + --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ + --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ + --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ + --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ + --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ + --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ + --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ + --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ + --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ + --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ + --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ + --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ + --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ + --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ + --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ + --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ + --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ + --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ + --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ + --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ + --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ + --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ + --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ + --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ + --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 + # via requests +django==5.0.6 \ + --hash=sha256:8363ac062bb4ef7c3f12d078f6fa5d154031d129a15170a1066412af49d30905 \ + --hash=sha256:ff1b61005004e476e0aeea47c7f79b85864c70124030e95146315396f1e7951f + # via -r requirements.in +django-widget-tweaks==1.5.0 \ + --hash=sha256:1c2180681ebb994e922c754804c7ffebbe1245014777ac47897a81f57cc629c7 \ + --hash=sha256:a41b7b2f05bd44d673d11ebd6c09a96f1d013ee98121cb98c384fe84e33b881e + # via -r requirements.in +grpcio==1.63.0 \ + --hash=sha256:01799e8649f9e94ba7db1aeb3452188048b0019dc37696b0f5ce212c87c560c3 \ + --hash=sha256:0697563d1d84d6985e40ec5ec596ff41b52abb3fd91ec240e8cb44a63b895094 \ + --hash=sha256:08e1559fd3b3b4468486b26b0af64a3904a8dbc78d8d936af9c1cf9636eb3e8b \ + --hash=sha256:166e5c460e5d7d4656ff9e63b13e1f6029b122104c1633d5f37eaea348d7356d \ + --hash=sha256:1ff737cf29b5b801619f10e59b581869e32f400159e8b12d7a97e7e3bdeee6a2 \ + --hash=sha256:219bb1848cd2c90348c79ed0a6b0ea51866bc7e72fa6e205e459fedab5770172 \ + --hash=sha256:259e11932230d70ef24a21b9fb5bb947eb4703f57865a404054400ee92f42f5d \ + --hash=sha256:2e93aca840c29d4ab5db93f94ed0a0ca899e241f2e8aec6334ab3575dc46125c \ + --hash=sha256:3a6d1f9ea965e750db7b4ee6f9fdef5fdf135abe8a249e75d84b0a3e0c668a1b \ + --hash=sha256:50344663068041b34a992c19c600236e7abb42d6ec32567916b87b4c8b8833b3 \ + --hash=sha256:56cdf96ff82e3cc90dbe8bac260352993f23e8e256e063c327b6cf9c88daf7a9 \ + --hash=sha256:5c039ef01516039fa39da8a8a43a95b64e288f79f42a17e6c2904a02a319b357 \ + --hash=sha256:6426e1fb92d006e47476d42b8f240c1d916a6d4423c5258ccc5b105e43438f61 \ + --hash=sha256:65bf975639a1f93bee63ca60d2e4951f1b543f498d581869922910a476ead2f5 \ + --hash=sha256:6a1a3642d76f887aa4009d92f71eb37809abceb3b7b5a1eec9c554a246f20e3a \ + --hash=sha256:6ef0ad92873672a2a3767cb827b64741c363ebaa27e7f21659e4e31f4d750280 \ + --hash=sha256:756fed02dacd24e8f488f295a913f250b56b98fb793f41d5b2de6c44fb762434 \ + --hash=sha256:75f701ff645858a2b16bc8c9fc68af215a8bb2d5a9b647448129de6e85d52bce \ + --hash=sha256:8064d986d3a64ba21e498b9a376cbc5d6ab2e8ab0e288d39f266f0fca169b90d \ + --hash=sha256:878b1d88d0137df60e6b09b74cdb73db123f9579232c8456f53e9abc4f62eb3c \ + --hash=sha256:8f3f6883ce54a7a5f47db43289a0a4c776487912de1a0e2cc83fdaec9685cc9f \ + --hash=sha256:91b73d3f1340fefa1e1716c8c1ec9930c676d6b10a3513ab6c26004cb02d8b3f \ + --hash=sha256:93a46794cc96c3a674cdfb59ef9ce84d46185fe9421baf2268ccb556f8f81f57 \ + --hash=sha256:93f45f27f516548e23e4ec3fbab21b060416007dbe768a111fc4611464cc773f \ + --hash=sha256:9e350cb096e5c67832e9b6e018cf8a0d2a53b2a958f6251615173165269a91b0 \ + --hash=sha256:a2d60cd1d58817bc5985fae6168d8b5655c4981d448d0f5b6194bbcc038090d2 \ + --hash=sha256:a3abfe0b0f6798dedd2e9e92e881d9acd0fdb62ae27dcbbfa7654a57e24060c0 \ + --hash=sha256:a44624aad77bf8ca198c55af811fd28f2b3eaf0a50ec5b57b06c034416ef2d0a \ + --hash=sha256:a7b19dfc74d0be7032ca1eda0ed545e582ee46cd65c162f9e9fc6b26ef827dc6 \ + --hash=sha256:ad2ac8903b2eae071055a927ef74121ed52d69468e91d9bcbd028bd0e554be6d \ + --hash=sha256:b005292369d9c1f80bf70c1db1c17c6c342da7576f1c689e8eee4fb0c256af85 \ + --hash=sha256:b2e44f59316716532a993ca2966636df6fbe7be4ab6f099de6815570ebe4383a \ + --hash=sha256:b3afbd9d6827fa6f475a4f91db55e441113f6d3eb9b7ebb8fb806e5bb6d6bd0d \ + --hash=sha256:b416252ac5588d9dfb8a30a191451adbf534e9ce5f56bb02cd193f12d8845b7f \ + --hash=sha256:b5194775fec7dc3dbd6a935102bb156cd2c35efe1685b0a46c67b927c74f0cfb \ + --hash=sha256:cacdef0348a08e475a721967f48206a2254a1b26ee7637638d9e081761a5ba86 \ + --hash=sha256:cd1e68776262dd44dedd7381b1a0ad09d9930ffb405f737d64f505eb7f77d6c7 \ + --hash=sha256:cdcda1156dcc41e042d1e899ba1f5c2e9f3cd7625b3d6ebfa619806a4c1aadda \ + --hash=sha256:cf8dae9cc0412cb86c8de5a8f3be395c5119a370f3ce2e69c8b7d46bb9872c8d \ + --hash=sha256:d2497769895bb03efe3187fb1888fc20e98a5f18b3d14b606167dacda5789434 \ + --hash=sha256:e3b77eaefc74d7eb861d3ffbdf91b50a1bb1639514ebe764c47773b833fa2d91 \ + --hash=sha256:e48cee31bc5f5a31fb2f3b573764bd563aaa5472342860edcc7039525b53e46a \ + --hash=sha256:e4cbb2100ee46d024c45920d16e888ee5d3cf47c66e316210bc236d5bebc42b3 \ + --hash=sha256:f28f8b2db7b86c77916829d64ab21ff49a9d8289ea1564a2b2a3a8ed9ffcccd3 \ + --hash=sha256:f3023e14805c61bc439fb40ca545ac3d5740ce66120a678a3c6c2c55b70343d1 \ + --hash=sha256:fdf348ae69c6ff484402cfdb14e18c1b0054ac2420079d575c53a60b9b2853ae + # via logboek +idna==3.6 \ + --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ + --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f + # via requests +logboek @ https://github.com/MinBZK/logboek-dataverwerkingen-logboek/archive/e69b156ed96c523bdc35e31d2639f7f7ea56209e.zip#subdirectory=libs/logboek-python \ + --hash=sha256:0b8a2d213cd53fb298869e8e2d4974960936fbba2dbb18b558151b30712a7b3e + # via -r requirements.in +protobuf==5.26.1 \ + --hash=sha256:38aa5f535721d5bb99861166c445c4105c4e285c765fbb2ac10f116e32dcd46d \ + --hash=sha256:3c388ea6ddfe735f8cf69e3f7dc7611e73107b60bdfcf5d0f024c3ccd3794e23 \ + --hash=sha256:7ee014c2c87582e101d6b54260af03b6596728505c79f17c8586e7523aaa8f8c \ + --hash=sha256:8ca2a1d97c290ec7b16e4e5dff2e5ae150cc1582f55b5ab300d45cb0dfa90e51 \ + --hash=sha256:9b557c317ebe6836835ec4ef74ec3e994ad0894ea424314ad3552bc6e8835b4e \ + --hash=sha256:b9ba3ca83c2e31219ffbeb9d76b63aad35a3eb1544170c55336993d7a18ae72c \ + --hash=sha256:d693d2504ca96750d92d9de8a103102dd648fda04540495535f0fec7577ed8fc \ + --hash=sha256:da612f2720c0183417194eeaa2523215c4fcc1a1949772dc65f05047e08d5932 \ + --hash=sha256:e6039957449cb918f331d32ffafa8eb9255769c96aa0560d9a5bf0b4e00a2a33 \ + --hash=sha256:f7417703f841167e5a27d48be13389d52ad705ec09eade63dfc3180a959215d7 \ + --hash=sha256:fbfe61e7ee8c1860855696e3ac6cfd1b01af5498facc6834fcc345c9684fb2ca + # via logboek +requests==2.32.2 \ + --hash=sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289 \ + --hash=sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c + # via -r requirements.in +sqlparse==0.4.4 \ + --hash=sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3 \ + --hash=sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c + # via django +urllib3==2.2.1 \ + --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ + --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 + # via requests diff --git a/apps/munera/yarn.lock b/apps/munera/yarn.lock new file mode 100644 index 0000000..5a4b519 --- /dev/null +++ b/apps/munera/yarn.lock @@ -0,0 +1,3178 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@babel/code-frame@npm:^7.0.0": + version: 7.24.2 + resolution: "@babel/code-frame@npm:7.24.2" + dependencies: + "@babel/highlight": "npm:^7.24.2" + picocolors: "npm:^1.0.0" + checksum: 10c0/d1d4cba89475ab6aab7a88242e1fd73b15ecb9f30c109b69752956434d10a26a52cbd37727c4eca104b6d45227bd1dfce39a6a6f4a14c9b2f07f871e968cf406 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/helper-validator-identifier@npm:7.24.5" + checksum: 10c0/05f957229d89ce95a137d04e27f7d0680d84ae48b6ad830e399db0779341f7d30290f863a93351b4b3bde2166737f73a286ea42856bb07c8ddaa95600d38645c + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.24.2": + version: 7.24.5 + resolution: "@babel/highlight@npm:7.24.5" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.24.5" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/e98047d3ad24608bfa596d000c861a2cc875af897427f2833b91a4e0d4cead07301a7ec15fa26093dcd61e036e2eed2db338ae54f93016fe0dc785fadc4159db + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@lezer/common@npm:^1.0.0": + version: 1.2.1 + resolution: "@lezer/common@npm:1.2.1" + checksum: 10c0/af61436dc026f8deebaded13d8e1beea2ae307cbbfb270116cdedadb8208f0674da9c3b5963128a2b1cd4072b4e90bc8128133f4feaf31b6e801e4568f1a15a6 + languageName: node + linkType: hard + +"@lezer/lr@npm:^1.0.0": + version: 1.4.0 + resolution: "@lezer/lr@npm:1.4.0" + dependencies: + "@lezer/common": "npm:^1.0.0" + checksum: 10c0/1e3af297cc142bb6676cb3c4e1bd310da2e93b53273cf745dc85d839a08e1d3cbbd67e0fc0322a480cf25ee215fefe967c53bc2af3ddf5d9b1bf267081dfa164 + languageName: node + linkType: hard + +"@lmdb/lmdb-darwin-arm64@npm:2.8.5": + version: 2.8.5 + resolution: "@lmdb/lmdb-darwin-arm64@npm:2.8.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@lmdb/lmdb-darwin-x64@npm:2.8.5": + version: 2.8.5 + resolution: "@lmdb/lmdb-darwin-x64@npm:2.8.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@lmdb/lmdb-linux-arm64@npm:2.8.5": + version: 2.8.5 + resolution: "@lmdb/lmdb-linux-arm64@npm:2.8.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@lmdb/lmdb-linux-arm@npm:2.8.5": + version: 2.8.5 + resolution: "@lmdb/lmdb-linux-arm@npm:2.8.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@lmdb/lmdb-linux-x64@npm:2.8.5": + version: 2.8.5 + resolution: "@lmdb/lmdb-linux-x64@npm:2.8.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@lmdb/lmdb-win32-x64@npm:2.8.5": + version: 2.8.5 + resolution: "@lmdb/lmdb-win32-x64@npm:2.8.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@mischnic/json-sourcemap@npm:^0.1.0": + version: 0.1.1 + resolution: "@mischnic/json-sourcemap@npm:0.1.1" + dependencies: + "@lezer/common": "npm:^1.0.0" + "@lezer/lr": "npm:^1.0.0" + json5: "npm:^2.2.1" + checksum: 10c0/e2e314fc048a16baedb10ec4d517c2622e464b8a9f8481cd4c008ebdabed1e5167a8f1407e06a14bb89f035addbb13851c1c5b6672ef8e089205f7f6d300cdd8 + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-darwin-arm64@npm:3.0.2": + version: 3.0.2 + resolution: "@msgpackr-extract/msgpackr-extract-darwin-arm64@npm:3.0.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-darwin-x64@npm:3.0.2": + version: 3.0.2 + resolution: "@msgpackr-extract/msgpackr-extract-darwin-x64@npm:3.0.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-linux-arm64@npm:3.0.2": + version: 3.0.2 + resolution: "@msgpackr-extract/msgpackr-extract-linux-arm64@npm:3.0.2" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-linux-arm@npm:3.0.2": + version: 3.0.2 + resolution: "@msgpackr-extract/msgpackr-extract-linux-arm@npm:3.0.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-linux-x64@npm:3.0.2": + version: 3.0.2 + resolution: "@msgpackr-extract/msgpackr-extract-linux-x64@npm:3.0.2" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-win32-x64@npm:3.0.2": + version: 3.0.2 + resolution: "@msgpackr-extract/msgpackr-extract-win32-x64@npm:3.0.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 + languageName: node + linkType: hard + +"@parcel/bundler-default@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/bundler-default@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/graph": "npm:3.2.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + nullthrows: "npm:^1.1.1" + checksum: 10c0/797e7494c82f2669a8d8d409b2efa2c956d2ac4edd5cd1b85560bbd7696483edb8ec220f66cdd88f7a3e47cfb346f33b21818c96f5a2bac098d5eef5085475d8 + languageName: node + linkType: hard + +"@parcel/cache@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/cache@npm:2.12.0" + dependencies: + "@parcel/fs": "npm:2.12.0" + "@parcel/logger": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + lmdb: "npm:2.8.5" + peerDependencies: + "@parcel/core": ^2.12.0 + checksum: 10c0/ef80c88a754d2e1c9161eb8e518f4a4b03c186001384100d037e333a1c00b4a701b0f6c1743a1663c6bb7e20d09c8582584f44ebea0fc6d81c81b4a81a1d0b6b + languageName: node + linkType: hard + +"@parcel/codeframe@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/codeframe@npm:2.12.0" + dependencies: + chalk: "npm:^4.1.0" + checksum: 10c0/23a73d8a5b6a7612ab6a5918ad52631f58d3529758730517a0ce151f0c533e5b4b1788278dd521d4863dd0e0b972afb590af69cb8523b14e809279825da549a1 + languageName: node + linkType: hard + +"@parcel/compressor-raw@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/compressor-raw@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + checksum: 10c0/e057b38d3cae862048f3777ea97544e60465e8efc16ecab0b8602d9c2787c80a09ac3bb338f773af5c17a6b4356caf103986951b47022fdf02b21c5e0b600033 + languageName: node + linkType: hard + +"@parcel/config-default@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/config-default@npm:2.12.0" + dependencies: + "@parcel/bundler-default": "npm:2.12.0" + "@parcel/compressor-raw": "npm:2.12.0" + "@parcel/namer-default": "npm:2.12.0" + "@parcel/optimizer-css": "npm:2.12.0" + "@parcel/optimizer-htmlnano": "npm:2.12.0" + "@parcel/optimizer-image": "npm:2.12.0" + "@parcel/optimizer-svgo": "npm:2.12.0" + "@parcel/optimizer-swc": "npm:2.12.0" + "@parcel/packager-css": "npm:2.12.0" + "@parcel/packager-html": "npm:2.12.0" + "@parcel/packager-js": "npm:2.12.0" + "@parcel/packager-raw": "npm:2.12.0" + "@parcel/packager-svg": "npm:2.12.0" + "@parcel/packager-wasm": "npm:2.12.0" + "@parcel/reporter-dev-server": "npm:2.12.0" + "@parcel/resolver-default": "npm:2.12.0" + "@parcel/runtime-browser-hmr": "npm:2.12.0" + "@parcel/runtime-js": "npm:2.12.0" + "@parcel/runtime-react-refresh": "npm:2.12.0" + "@parcel/runtime-service-worker": "npm:2.12.0" + "@parcel/transformer-babel": "npm:2.12.0" + "@parcel/transformer-css": "npm:2.12.0" + "@parcel/transformer-html": "npm:2.12.0" + "@parcel/transformer-image": "npm:2.12.0" + "@parcel/transformer-js": "npm:2.12.0" + "@parcel/transformer-json": "npm:2.12.0" + "@parcel/transformer-postcss": "npm:2.12.0" + "@parcel/transformer-posthtml": "npm:2.12.0" + "@parcel/transformer-raw": "npm:2.12.0" + "@parcel/transformer-react-refresh-wrap": "npm:2.12.0" + "@parcel/transformer-svg": "npm:2.12.0" + peerDependencies: + "@parcel/core": ^2.12.0 + checksum: 10c0/c3fec515c14479f1a0041db79a70198f04bea94a03a7f331257f057de178d4e0061b68853c2e83d45f891d09fadb8b4361f38421832b6e116edd46f8e0ee51a9 + languageName: node + linkType: hard + +"@parcel/core@npm:2.12.0, @parcel/core@npm:^2.12.0": + version: 2.12.0 + resolution: "@parcel/core@npm:2.12.0" + dependencies: + "@mischnic/json-sourcemap": "npm:^0.1.0" + "@parcel/cache": "npm:2.12.0" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/events": "npm:2.12.0" + "@parcel/fs": "npm:2.12.0" + "@parcel/graph": "npm:3.2.0" + "@parcel/logger": "npm:2.12.0" + "@parcel/package-manager": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/profiler": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" + "@parcel/source-map": "npm:^2.1.1" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + "@parcel/workers": "npm:2.12.0" + abortcontroller-polyfill: "npm:^1.1.9" + base-x: "npm:^3.0.8" + browserslist: "npm:^4.6.6" + clone: "npm:^2.1.1" + dotenv: "npm:^7.0.0" + dotenv-expand: "npm:^5.1.0" + json5: "npm:^2.2.0" + msgpackr: "npm:^1.9.9" + nullthrows: "npm:^1.1.1" + semver: "npm:^7.5.2" + checksum: 10c0/ab6b4bc1e95b0aaee23c5aec8479cf6681cf84a0c422e1001a3a0f3957aa28756851eb201a89d8b55ce84912c8987a76597f77193ade771f034c1c33a07ece44 + languageName: node + linkType: hard + +"@parcel/diagnostic@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/diagnostic@npm:2.12.0" + dependencies: + "@mischnic/json-sourcemap": "npm:^0.1.0" + nullthrows: "npm:^1.1.1" + checksum: 10c0/61c2fce32a1abdf343a4d2e3a109779dc2a9c255059e4dd70ad9b4b3bd5b11b676d0c42bc77e4b32e886ef471be018b25b952baa9da137c066410642d2d0507f + languageName: node + linkType: hard + +"@parcel/events@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/events@npm:2.12.0" + checksum: 10c0/0f0a0b02086b81d68cf8f239414e9e09b5a6eca6dddfd22d2e922979b2d85b03e6f68bcafa2c6434c46867c908e25f2002f47f0ed5551f2674a75f4d6c5731ff + languageName: node + linkType: hard + +"@parcel/fs@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/fs@npm:2.12.0" + dependencies: + "@parcel/rust": "npm:2.12.0" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + "@parcel/watcher": "npm:^2.0.7" + "@parcel/workers": "npm:2.12.0" + peerDependencies: + "@parcel/core": ^2.12.0 + checksum: 10c0/5d9ebf62e80dc3781fcd1eb763da46188115e254d285690383539a085aeaf9d864a54655046223ea42815b9b308ecba80d9af53cff6390c6bbb37d2b29df8e35 + languageName: node + linkType: hard + +"@parcel/graph@npm:3.2.0": + version: 3.2.0 + resolution: "@parcel/graph@npm:3.2.0" + dependencies: + nullthrows: "npm:^1.1.1" + checksum: 10c0/acb98a9c44dbabaa38e2a7b6b07aa489d75dc207ed6107ea43575d3c68ebf388a65a982d85677c7d00cd2d7bb6f8a6f75df9618a53389e9f640aa9346fb75c3b + languageName: node + linkType: hard + +"@parcel/logger@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/logger@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/events": "npm:2.12.0" + checksum: 10c0/b33782bbf0cfff30169a4ee8dd3a1d14c9b2c0d4781715e26b5dc6f2321ddff8ca84eca8de40bccb1a8c5d3ce847494408f5db63bbeddcdaaf9b82b1cc376a17 + languageName: node + linkType: hard + +"@parcel/markdown-ansi@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/markdown-ansi@npm:2.12.0" + dependencies: + chalk: "npm:^4.1.0" + checksum: 10c0/0c203c70ab1eb12f4976c32b086b2abf5dc841b42310610e70e1e713fe915acfd0942b56a78456811a9ee150226bb44052910a3f98ea56289aafa36b6ce89e27 + languageName: node + linkType: hard + +"@parcel/namer-default@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/namer-default@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + nullthrows: "npm:^1.1.1" + checksum: 10c0/5baffe07af2329315b9d2b897565b915038246afaa3269d81bcd5eb4bcc7a21771bf1171918d68a67c099584b006167beeefa4716fb4557aae4bc112ebaf4159 + languageName: node + linkType: hard + +"@parcel/node-resolver-core@npm:3.3.0": + version: 3.3.0 + resolution: "@parcel/node-resolver-core@npm:3.3.0" + dependencies: + "@mischnic/json-sourcemap": "npm:^0.1.0" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/fs": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + nullthrows: "npm:^1.1.1" + semver: "npm:^7.5.2" + checksum: 10c0/9a2731763514c0a54da9710e1131b5960b928900cbc33faf67d07a892cf9ed9f1b11ed2653e574e8363c4527d16e008365917b7b09eb3b9ee727fd244a5f51ee + languageName: node + linkType: hard + +"@parcel/optimizer-css@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/optimizer-css@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/source-map": "npm:^2.1.1" + "@parcel/utils": "npm:2.12.0" + browserslist: "npm:^4.6.6" + lightningcss: "npm:^1.22.1" + nullthrows: "npm:^1.1.1" + checksum: 10c0/537e84a85fda7a2f73acd2a55842ffe9846abb02d18a7518baf8ae140fc6140a26bb1988285dbccb49a883fdc8597eabbb6d4882500bf160b97d6d93e3664677 + languageName: node + linkType: hard + +"@parcel/optimizer-htmlnano@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/optimizer-htmlnano@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + htmlnano: "npm:^2.0.0" + nullthrows: "npm:^1.1.1" + posthtml: "npm:^0.16.5" + svgo: "npm:^2.4.0" + checksum: 10c0/487e0fa99e975e6f9add2759e4ad412c0595d7b80d5dde9e186700fa54a9ecb9d1cb611fbd5a0d3392fda3a01050d95e3ded53ca8b50ede3203fe77af489cd0b + languageName: node + linkType: hard + +"@parcel/optimizer-image@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/optimizer-image@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + "@parcel/workers": "npm:2.12.0" + peerDependencies: + "@parcel/core": ^2.12.0 + checksum: 10c0/f050c569548ec8330c65d0e9b6f6b15d5761e14e704ef16b950db19ae0d6b5a30fd42a38bb04841561244e8ab8f7fb781d9e9f1418ae84858fe7ad325a4be494 + languageName: node + linkType: hard + +"@parcel/optimizer-svgo@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/optimizer-svgo@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + svgo: "npm:^2.4.0" + checksum: 10c0/dc49c565d8f15b4f78ee70910a9c527f25316f0440e9cba6c5b8af1562d34708e5276b35f1e1ea26e7911d6d5c60fa82be6627517fe818df6f69eba5f0f6813f + languageName: node + linkType: hard + +"@parcel/optimizer-swc@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/optimizer-swc@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/source-map": "npm:^2.1.1" + "@parcel/utils": "npm:2.12.0" + "@swc/core": "npm:^1.3.36" + nullthrows: "npm:^1.1.1" + checksum: 10c0/52f52182769ebb76248deab85893dacf183e6ff9a87a56c3589331cb0e37debb7ae8fa819386fe23f69b15e6b39823879e20816b10fbab3d316018a94b0c653c + languageName: node + linkType: hard + +"@parcel/package-manager@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/package-manager@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/fs": "npm:2.12.0" + "@parcel/logger": "npm:2.12.0" + "@parcel/node-resolver-core": "npm:3.3.0" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + "@parcel/workers": "npm:2.12.0" + "@swc/core": "npm:^1.3.36" + semver: "npm:^7.5.2" + peerDependencies: + "@parcel/core": ^2.12.0 + checksum: 10c0/3ebffe05b293332f69c34479ea0b51a9fa3449ab56eef1b0ec9487c4feacf45df6dec9d8dcb67203398249093370f7d884dc0cb6b6ee15ee8c5db9768579060c + languageName: node + linkType: hard + +"@parcel/packager-css@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/packager-css@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/source-map": "npm:^2.1.1" + "@parcel/utils": "npm:2.12.0" + lightningcss: "npm:^1.22.1" + nullthrows: "npm:^1.1.1" + checksum: 10c0/a7293c84c67b9e07b8b8cdc48d96037e05bc50daa8a2aba64b23797fea87e259bf7046a5b969917531db33b8f2387463c817e569a34f42d791bbfacb074268ea + languageName: node + linkType: hard + +"@parcel/packager-html@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/packager-html@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + nullthrows: "npm:^1.1.1" + posthtml: "npm:^0.16.5" + checksum: 10c0/099eccde796af61cb6f153fcd69c49d22b4acc430d3652a4f2e5d4124c1cf2d6782213048436fd8e9e5521a52b1219e7bc02d38be89ce97e6f70899d3be31d7f + languageName: node + linkType: hard + +"@parcel/packager-js@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/packager-js@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" + "@parcel/source-map": "npm:^2.1.1" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + globals: "npm:^13.2.0" + nullthrows: "npm:^1.1.1" + checksum: 10c0/89214e8d35f6dc35c2fd0c2b11ec608703dbc52435a7a6141e0b8fc676610fa09c2210cc93490ea4b3581ae0bc13f307dd5515402c939980e1c6bf90148d34e2 + languageName: node + linkType: hard + +"@parcel/packager-raw@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/packager-raw@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + checksum: 10c0/c1539179a62674460fea65c9fd1b150aedd596723e79d4e949bf5bd667defd6a72ed73552033e4cdd2b854aa6d5022201797b746e5deb633b41f1de716716af9 + languageName: node + linkType: hard + +"@parcel/packager-svg@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/packager-svg@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + posthtml: "npm:^0.16.4" + checksum: 10c0/58f877d470e5b50adb7eca837f571cbd221cf6681bc83d08146e4aeae4e1430a2e3363beb4a62cfc6952f4f8ded1746889545b4c946300258268a11b298047fd + languageName: node + linkType: hard + +"@parcel/packager-wasm@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/packager-wasm@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + checksum: 10c0/bd3ccd6f9a0506b26b0d708ded6cea3ac53df5c49426086b556ba7f9f1351aba010da3e0795a1f6944cdc306cffc08eed249bb8444aa4f44d9de0e3d1592810d + languageName: node + linkType: hard + +"@parcel/plugin@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/plugin@npm:2.12.0" + dependencies: + "@parcel/types": "npm:2.12.0" + checksum: 10c0/2030a3e1ee6b8cdfdf07935b085f7731e286651d7455b84a7f635016c580af715deffb893c5bc9fb3e0126db4511d3f2b592ee17b61108d001339d51ef56f9bf + languageName: node + linkType: hard + +"@parcel/profiler@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/profiler@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/events": "npm:2.12.0" + chrome-trace-event: "npm:^1.0.2" + checksum: 10c0/3caa9014da88f7435c43396fd1bb413c35134801699943717079a92fcd3ab0a0974c98b98473c5bc1ef434ce8203483fb96af642c1d64e20266625499ca4b4fe + languageName: node + linkType: hard + +"@parcel/reporter-cli@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/reporter-cli@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + chalk: "npm:^4.1.0" + term-size: "npm:^2.2.1" + checksum: 10c0/0fee616377d540e11e61fd827a8886d8b8fc4985f87da694945b5a7f3da821bcbb0c5d7a31d72cdf12546c7bf555f7ef5c15d75b71ab157d93cacf0972b29006 + languageName: node + linkType: hard + +"@parcel/reporter-dev-server@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/reporter-dev-server@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + checksum: 10c0/bd875c937214aa877805413dbfce89d95dc2578098693991cce26624366cc19807a678c2779edbc620f9618db244807a2271027fb5e328318618a4666b33e512 + languageName: node + linkType: hard + +"@parcel/reporter-tracer@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/reporter-tracer@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + chrome-trace-event: "npm:^1.0.3" + nullthrows: "npm:^1.1.1" + checksum: 10c0/5ab33196ce4a62681d5017d908da354e25a6d367cdf0a849cd408c673bac61d3674316438a4c4c7eebb26f865e5ee3c1b8cda897c92dfa7211c0107c48d04388 + languageName: node + linkType: hard + +"@parcel/resolver-default@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/resolver-default@npm:2.12.0" + dependencies: + "@parcel/node-resolver-core": "npm:3.3.0" + "@parcel/plugin": "npm:2.12.0" + checksum: 10c0/22b1e4223070c962570928390c6cb77e866d4a3ede1a7019ad3ed2fed75604a2d78c335d65aa646dd753f05916397b56416aef52009cace9b56fd39bf6362457 + languageName: node + linkType: hard + +"@parcel/runtime-browser-hmr@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/runtime-browser-hmr@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + checksum: 10c0/126babc8dbd7937e94a38bed1527190a203c20bcba7b66f85b1ddbce81ec54b3fb0579f371284cb7290b70fc46b88eaaa1ee6c9d9e3b739b6267d6902dc82f93 + languageName: node + linkType: hard + +"@parcel/runtime-js@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/runtime-js@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + nullthrows: "npm:^1.1.1" + checksum: 10c0/01cb236c0ab6f6a170ead43d519ba02092d9b1805f2b8e8cce6f0fec4cb2c37e885c8ce0ff8ae4c7025499d1e36d1ff755f5e8018172c4245c01e97c7a3e9a21 + languageName: node + linkType: hard + +"@parcel/runtime-react-refresh@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/runtime-react-refresh@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + react-error-overlay: "npm:6.0.9" + react-refresh: "npm:^0.9.0" + checksum: 10c0/9efd3903118169f1eb4c176afbc4b8ee38d8b516a72dd189fec4d05c5b216e105aa6a77dd87aa5966923a648ed2c227e83feaed6c706a6fd5ebe0cdf255d5d46 + languageName: node + linkType: hard + +"@parcel/runtime-service-worker@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/runtime-service-worker@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + nullthrows: "npm:^1.1.1" + checksum: 10c0/014e44aa15bcc81002713af1cfc88a1d010f3ba6565ec5ea560231540a79cb76fecb11336ac019fb4c9c21a59477a1ce2d9f1a67f85e07be6b7da4498cfa17b3 + languageName: node + linkType: hard + +"@parcel/rust@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/rust@npm:2.12.0" + checksum: 10c0/38d8e5c69b31b3f7eb431f479c250f7a4e37f7814ce0aa16d42c300fffa25659da0ea8ca8e22534fa2b935dc8559507829d0cdebb588756aa4c3619565dcd3e3 + languageName: node + linkType: hard + +"@parcel/source-map@npm:^2.1.1": + version: 2.1.1 + resolution: "@parcel/source-map@npm:2.1.1" + dependencies: + detect-libc: "npm:^1.0.3" + checksum: 10c0/cea8450e152666be413556f0d100f125e81646bffc497e7c792bd9fc5067d052f1a008c8404ce1cd3a587d58b9ef57207ada89149cf2c705e71b1978308045f6 + languageName: node + linkType: hard + +"@parcel/transformer-babel@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-babel@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/source-map": "npm:^2.1.1" + "@parcel/utils": "npm:2.12.0" + browserslist: "npm:^4.6.6" + json5: "npm:^2.2.0" + nullthrows: "npm:^1.1.1" + semver: "npm:^7.5.2" + checksum: 10c0/b7398cc2ef02fd76010bb522fc72e562ce835643365a37ccfc56368121e5c9d890bef14fffa40a8c69e4a26f13ee7d6da8d8e8590957bd4f363b5aa1c4f7d43d + languageName: node + linkType: hard + +"@parcel/transformer-css@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-css@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/source-map": "npm:^2.1.1" + "@parcel/utils": "npm:2.12.0" + browserslist: "npm:^4.6.6" + lightningcss: "npm:^1.22.1" + nullthrows: "npm:^1.1.1" + checksum: 10c0/b3ad2591bca09a5696791b9a50bfb8efb825e92313740d6e3988ae1345d70965e92f9d42d58ae5571749e422d9018681aa49bddeafa939f3948a6993cc1cb4c8 + languageName: node + linkType: hard + +"@parcel/transformer-html@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-html@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" + nullthrows: "npm:^1.1.1" + posthtml: "npm:^0.16.5" + posthtml-parser: "npm:^0.10.1" + posthtml-render: "npm:^3.0.0" + semver: "npm:^7.5.2" + srcset: "npm:4" + checksum: 10c0/1e73c1afe87b8db36e358752fe1b89d466cd9bfe66dda34fca58ad28ab10931553b16ba82096eeb266a0d90e62d6c9e455e3b32dbdf550f4212193898d4c45fd + languageName: node + linkType: hard + +"@parcel/transformer-image@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-image@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + "@parcel/workers": "npm:2.12.0" + nullthrows: "npm:^1.1.1" + peerDependencies: + "@parcel/core": ^2.12.0 + checksum: 10c0/e361fa97d81b3dc2dfe011342321f1d2afd4fd41a9c2791522d8f39e2dc94714a2a0b9d291eb73437b2023fd1493ad37046d6b1ee925ec80daa18261cd5767a4 + languageName: node + linkType: hard + +"@parcel/transformer-js@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-js@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" + "@parcel/source-map": "npm:^2.1.1" + "@parcel/utils": "npm:2.12.0" + "@parcel/workers": "npm:2.12.0" + "@swc/helpers": "npm:^0.5.0" + browserslist: "npm:^4.6.6" + nullthrows: "npm:^1.1.1" + regenerator-runtime: "npm:^0.13.7" + semver: "npm:^7.5.2" + peerDependencies: + "@parcel/core": ^2.12.0 + checksum: 10c0/8a438f0ae93539338ac3f2e2666377e75fb8a5a5386c84485d6cf5f0ad5e52862a80da89c35ca01fae10184ccc7567f1347679fd3b514f7b86643dc83dbce6a6 + languageName: node + linkType: hard + +"@parcel/transformer-json@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-json@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + json5: "npm:^2.2.0" + checksum: 10c0/41f931eacf89b5a792ca906594eeafa75d9fe5d0af85af7cf42e77f04e1d31de5bd64d3da9fcf0bdf745f3af252dd727ac318b12cc1c3a1345d19c5096ad98d8 + languageName: node + linkType: hard + +"@parcel/transformer-postcss@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-postcss@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + clone: "npm:^2.1.1" + nullthrows: "npm:^1.1.1" + postcss-value-parser: "npm:^4.2.0" + semver: "npm:^7.5.2" + checksum: 10c0/24c3a7eedd741ec1df43bed64b7e02e0132e1c85b9a93322fc994fd2a7f457c4a45f624edf3c064630f947749eb1eb89cb5a502db3f6a39286880afe09020e5a + languageName: node + linkType: hard + +"@parcel/transformer-posthtml@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-posthtml@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + nullthrows: "npm:^1.1.1" + posthtml: "npm:^0.16.5" + posthtml-parser: "npm:^0.10.1" + posthtml-render: "npm:^3.0.0" + semver: "npm:^7.5.2" + checksum: 10c0/ae626c15d5dda547850511a8aed41ba35e9496861dbba24efcb904693ced003a74f25c454b0f4bb96500725dd7e09ed4d09becccc48c0c8cdf8fde3ba02aa3f0 + languageName: node + linkType: hard + +"@parcel/transformer-raw@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-raw@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + checksum: 10c0/3a23729c6f91ef22c106995f730483dd375f81c11f8bb37ff485d6f3c111f64445d437796d470b42bdd2ee75cc3c4a142911fbcddd1676c8659dfc5e886917d2 + languageName: node + linkType: hard + +"@parcel/transformer-react-refresh-wrap@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-react-refresh-wrap@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + react-refresh: "npm:^0.9.0" + checksum: 10c0/37dd835182bf71fcee5858f0ab16d5683d2827b4930095ed9fffbd496e431a7f1c53de598f294220b7ff27cd5264d5f1fa750d974a1ee02fb39342fd867b6f9c + languageName: node + linkType: hard + +"@parcel/transformer-sass@npm:^2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-sass@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + "@parcel/source-map": "npm:^2.1.1" + sass: "npm:^1.38.0" + checksum: 10c0/d82ee90605f9a8f04a978e2d72faf9693a843a0875961b6e7aa40659197356f1be45d738840c52863607c7823f70630f819aebd843606af8ea00772b75ba7574 + languageName: node + linkType: hard + +"@parcel/transformer-svg@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-svg@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" + nullthrows: "npm:^1.1.1" + posthtml: "npm:^0.16.5" + posthtml-parser: "npm:^0.10.1" + posthtml-render: "npm:^3.0.0" + semver: "npm:^7.5.2" + checksum: 10c0/8916bdc0b36c60b32963e015c43a8bcd8cc2b15cc11b7611c49af6a4e4d63c2aabea0aa0fde31a78278eec25f88b52b3e56d8382dc2db5f3a401e63312115f3a + languageName: node + linkType: hard + +"@parcel/types@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/types@npm:2.12.0" + dependencies: + "@parcel/cache": "npm:2.12.0" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/fs": "npm:2.12.0" + "@parcel/package-manager": "npm:2.12.0" + "@parcel/source-map": "npm:^2.1.1" + "@parcel/workers": "npm:2.12.0" + utility-types: "npm:^3.10.0" + checksum: 10c0/a8aa61ad7cc8218a41fe27c206031b30c55eab59cd4affdfac7d15ddcfb80a1969c22086760b7d4fbdd63016dbfe3278d462e04b9c12e474780fe154caf08150 + languageName: node + linkType: hard + +"@parcel/utils@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/utils@npm:2.12.0" + dependencies: + "@parcel/codeframe": "npm:2.12.0" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/logger": "npm:2.12.0" + "@parcel/markdown-ansi": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" + "@parcel/source-map": "npm:^2.1.1" + chalk: "npm:^4.1.0" + nullthrows: "npm:^1.1.1" + checksum: 10c0/888e2352d056ceff4e81d0cf4ae4eb8f322b0a8c4eb9e6f6aa5f916adc3f27c90369d5580b4f316029bf5160294a607795181a6bb368741524c177a14b2aa7c7 + languageName: node + linkType: hard + +"@parcel/watcher-android-arm64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-android-arm64@npm:2.4.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-arm64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-darwin-arm64@npm:2.4.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-x64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-darwin-x64@npm:2.4.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-freebsd-x64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-freebsd-x64@npm:2.4.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-glibc@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-arm-glibc@npm:2.4.1" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-glibc@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.4.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-musl@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-arm64-musl@npm:2.4.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-glibc@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-x64-glibc@npm:2.4.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-musl@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-x64-musl@npm:2.4.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-win32-arm64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-win32-arm64@npm:2.4.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-win32-ia32@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-win32-ia32@npm:2.4.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@parcel/watcher-win32-x64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-win32-x64@npm:2.4.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher@npm:^2.0.7": + version: 2.4.1 + resolution: "@parcel/watcher@npm:2.4.1" + dependencies: + "@parcel/watcher-android-arm64": "npm:2.4.1" + "@parcel/watcher-darwin-arm64": "npm:2.4.1" + "@parcel/watcher-darwin-x64": "npm:2.4.1" + "@parcel/watcher-freebsd-x64": "npm:2.4.1" + "@parcel/watcher-linux-arm-glibc": "npm:2.4.1" + "@parcel/watcher-linux-arm64-glibc": "npm:2.4.1" + "@parcel/watcher-linux-arm64-musl": "npm:2.4.1" + "@parcel/watcher-linux-x64-glibc": "npm:2.4.1" + "@parcel/watcher-linux-x64-musl": "npm:2.4.1" + "@parcel/watcher-win32-arm64": "npm:2.4.1" + "@parcel/watcher-win32-ia32": "npm:2.4.1" + "@parcel/watcher-win32-x64": "npm:2.4.1" + detect-libc: "npm:^1.0.3" + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.5" + node-addon-api: "npm:^7.0.0" + node-gyp: "npm:latest" + dependenciesMeta: + "@parcel/watcher-android-arm64": + optional: true + "@parcel/watcher-darwin-arm64": + optional: true + "@parcel/watcher-darwin-x64": + optional: true + "@parcel/watcher-freebsd-x64": + optional: true + "@parcel/watcher-linux-arm-glibc": + optional: true + "@parcel/watcher-linux-arm64-glibc": + optional: true + "@parcel/watcher-linux-arm64-musl": + optional: true + "@parcel/watcher-linux-x64-glibc": + optional: true + "@parcel/watcher-linux-x64-musl": + optional: true + "@parcel/watcher-win32-arm64": + optional: true + "@parcel/watcher-win32-ia32": + optional: true + "@parcel/watcher-win32-x64": + optional: true + checksum: 10c0/33b7112094b9eb46c234d824953967435b628d3d93a0553255e9910829b84cab3da870153c3a870c31db186dc58f3b2db81382fcaee3451438aeec4d786a6211 + languageName: node + linkType: hard + +"@parcel/workers@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/workers@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/logger": "npm:2.12.0" + "@parcel/profiler": "npm:2.12.0" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + nullthrows: "npm:^1.1.1" + peerDependencies: + "@parcel/core": ^2.12.0 + checksum: 10c0/0f5e12e7997d806d6694e91a6c5968c34e1967f50bab3c09296589b2b279ffcd1c8de735845448de350e510a5657ba0aeb4b2c5c04cab81c4c7a57f70d567f5e + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@popperjs/core@npm:^2.11.2": + version: 2.11.8 + resolution: "@popperjs/core@npm:2.11.8" + checksum: 10c0/4681e682abc006d25eb380d0cf3efc7557043f53b6aea7a5057d0d1e7df849a00e281cd8ea79c902a35a414d7919621fc2ba293ecec05f413598e0b23d5a1e63 + languageName: node + linkType: hard + +"@swc/core-darwin-arm64@npm:1.5.7": + version: 1.5.7 + resolution: "@swc/core-darwin-arm64@npm:1.5.7" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-darwin-x64@npm:1.5.7": + version: 1.5.7 + resolution: "@swc/core-darwin-x64@npm:1.5.7" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@swc/core-linux-arm-gnueabihf@npm:1.5.7": + version: 1.5.7 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.5.7" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@swc/core-linux-arm64-gnu@npm:1.5.7": + version: 1.5.7 + resolution: "@swc/core-linux-arm64-gnu@npm:1.5.7" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-arm64-musl@npm:1.5.7": + version: 1.5.7 + resolution: "@swc/core-linux-arm64-musl@npm:1.5.7" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-linux-x64-gnu@npm:1.5.7": + version: 1.5.7 + resolution: "@swc/core-linux-x64-gnu@npm:1.5.7" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-x64-musl@npm:1.5.7": + version: 1.5.7 + resolution: "@swc/core-linux-x64-musl@npm:1.5.7" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-win32-arm64-msvc@npm:1.5.7": + version: 1.5.7 + resolution: "@swc/core-win32-arm64-msvc@npm:1.5.7" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-win32-ia32-msvc@npm:1.5.7": + version: 1.5.7 + resolution: "@swc/core-win32-ia32-msvc@npm:1.5.7" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@swc/core-win32-x64-msvc@npm:1.5.7": + version: 1.5.7 + resolution: "@swc/core-win32-x64-msvc@npm:1.5.7" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@swc/core@npm:^1.3.36": + version: 1.5.7 + resolution: "@swc/core@npm:1.5.7" + dependencies: + "@swc/core-darwin-arm64": "npm:1.5.7" + "@swc/core-darwin-x64": "npm:1.5.7" + "@swc/core-linux-arm-gnueabihf": "npm:1.5.7" + "@swc/core-linux-arm64-gnu": "npm:1.5.7" + "@swc/core-linux-arm64-musl": "npm:1.5.7" + "@swc/core-linux-x64-gnu": "npm:1.5.7" + "@swc/core-linux-x64-musl": "npm:1.5.7" + "@swc/core-win32-arm64-msvc": "npm:1.5.7" + "@swc/core-win32-ia32-msvc": "npm:1.5.7" + "@swc/core-win32-x64-msvc": "npm:1.5.7" + "@swc/counter": "npm:^0.1.2" + "@swc/types": "npm:0.1.7" + peerDependencies: + "@swc/helpers": ^0.5.0 + dependenciesMeta: + "@swc/core-darwin-arm64": + optional: true + "@swc/core-darwin-x64": + optional: true + "@swc/core-linux-arm-gnueabihf": + optional: true + "@swc/core-linux-arm64-gnu": + optional: true + "@swc/core-linux-arm64-musl": + optional: true + "@swc/core-linux-x64-gnu": + optional: true + "@swc/core-linux-x64-musl": + optional: true + "@swc/core-win32-arm64-msvc": + optional: true + "@swc/core-win32-ia32-msvc": + optional: true + "@swc/core-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc/helpers": + optional: true + checksum: 10c0/83ab96bee5d448e580d8a6c8c1d1fbfdfaf5561f8904140122e49c428c2336790d31e7bdcdf610ce8f20c7f682785263d2ebab7cb56c2dcb5ea46be54eab2c03 + languageName: node + linkType: hard + +"@swc/counter@npm:^0.1.2, @swc/counter@npm:^0.1.3": + version: 0.1.3 + resolution: "@swc/counter@npm:0.1.3" + checksum: 10c0/8424f60f6bf8694cfd2a9bca45845bce29f26105cda8cf19cdb9fd3e78dc6338699e4db77a89ae449260bafa1cc6bec307e81e7fb96dbf7dcfce0eea55151356 + languageName: node + linkType: hard + +"@swc/helpers@npm:^0.5.0": + version: 0.5.11 + resolution: "@swc/helpers@npm:0.5.11" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/7d1987ee6b887277d373a9be8c445cd2259c3258c08b16908c06864121fd8eac8bb89b179c91b6c5395f38194a903b5772575947c7eb3ca23285152cb0f66caa + languageName: node + linkType: hard + +"@swc/types@npm:0.1.7": + version: 0.1.7 + resolution: "@swc/types@npm:0.1.7" + dependencies: + "@swc/counter": "npm:^0.1.3" + checksum: 10c0/da7c542de0a44b85a98139db03920448e86309d28ad9e9335f91b4025e5f32ae4fbbfdd0f287330fb0de737e7c5ec4f64ade0fc5fffea6c2fd9ac681b1e97bea + languageName: node + linkType: hard + +"@tabler/core@npm:^1.0.0-beta20": + version: 1.0.0-beta9 + resolution: "@tabler/core@npm:1.0.0-beta9" + dependencies: + "@popperjs/core": "npm:^2.11.2" + "@tabler/icons": "npm:^1.53.0" + bootstrap: "npm:5.1.3" + peerDependencies: + apexcharts: ^3.33.1 + autosize: ^5.0.1 + choices.js: ^10.1.0 + countup.js: ^2.0.8 + flatpickr: ^4.6.9 + imask: ^6.4.2 + jsvectormap: ^1.4.4 + litepicker: ^2.0.12 + nouislider: ^15.5.1 + tom-select: ^2.0.0 + peerDependenciesMeta: + apexcharts: + optional: true + autosize: + optional: true + choices.js: + optional: true + countup.js: + optional: true + flatpickr: + optional: true + imask: + optional: true + jsvectormap: + optional: true + litepicker: + optional: true + nouislider: + optional: true + tom-select: + optional: true + checksum: 10c0/ea34e9ee85a110740b7fc50f1de9f48b04ca18d68ed31c0c660ad77130965f9befae54c97257b2423a0361cce99f1b5f6ed22fd966c9c7e672548c60531e64b9 + languageName: node + linkType: hard + +"@tabler/icons@npm:^1.53.0": + version: 1.119.0 + resolution: "@tabler/icons@npm:1.119.0" + peerDependencies: + react: ^16.x || 17.x || 18.x + react-dom: ^16.x || 17.x || 18.x + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + checksum: 10c0/1d30ee01b319d4e18a9dc0af114887f9282f52e757c123c9e68683378cbcb5c2f9fa4ed9cd8b19d65aa4eb53d572170c0ababac37c251d4e8555141740137424 + languageName: node + linkType: hard + +"@trysound/sax@npm:0.2.0": + version: 0.2.0 + resolution: "@trysound/sax@npm:0.2.0" + checksum: 10c0/44907308549ce775a41c38a815f747009ac45929a45d642b836aa6b0a536e4978d30b8d7d680bbd116e9dd73b7dbe2ef0d1369dcfc2d09e83ba381e485ecbe12 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"abortcontroller-polyfill@npm:^1.1.9": + version: 1.7.5 + resolution: "abortcontroller-polyfill@npm:1.7.5" + checksum: 10c0/d7a5ab6fda4f9a54f22ddeb233a2564d2f4f857ec17be25fee21a91bb5090bee57c630c454634b5c4b93fc06bd90d592d1f2fc69f77cd28791ac0fe361feb7d2 + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: "npm:^4.3.4" + checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"base-x@npm:^3.0.8": + version: 3.0.9 + resolution: "base-x@npm:3.0.9" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/e6bbeae30b24f748b546005affb710c5fbc8b11a83f6cd0ca999bd1ab7ad3a22e42888addc40cd145adc4edfe62fcfab4ebc91da22e4259aae441f95a77aee1a + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 + languageName: node + linkType: hard + +"boolbase@npm:^1.0.0": + version: 1.0.0 + resolution: "boolbase@npm:1.0.0" + checksum: 10c0/e4b53deb4f2b85c52be0e21a273f2045c7b6a6ea002b0e139c744cb6f95e9ec044439a52883b0d74dedd1ff3da55ed140cfdddfed7fb0cccbed373de5dce1bcf + languageName: node + linkType: hard + +"bootstrap@npm:5.1.3": + version: 5.1.3 + resolution: "bootstrap@npm:5.1.3" + peerDependencies: + "@popperjs/core": ^2.10.2 + checksum: 10c0/78ab4c4df58c36faaddfa9da1dda9f6671576c54bf7ed34691628dbf406b62a44170f89d883e306ea755bd8e87ea833561717f2c3af5a026f177d2189e89c382 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:^3.0.3, braces@npm:~3.0.2": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"browserslist@npm:^4.6.6": + version: 4.23.0 + resolution: "browserslist@npm:4.23.0" + dependencies: + caniuse-lite: "npm:^1.0.30001587" + electron-to-chromium: "npm:^1.4.668" + node-releases: "npm:^2.0.14" + update-browserslist-db: "npm:^1.0.13" + bin: + browserslist: cli.js + checksum: 10c0/8e9cc154529062128d02a7af4d8adeead83ca1df8cd9ee65a88e2161039f3d68a4d40fea7353cab6bae4c16182dec2fdd9a1cf7dc2a2935498cee1af0e998943 + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.3 + resolution: "cacache@npm:18.0.3" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10c0/dfda92840bb371fb66b88c087c61a74544363b37a265023223a99965b16a16bbb87661fe4948718d79df6e0cc04e85e62784fbcf1832b2a5e54ff4c46fbb45b7 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001587": + version: 1.0.30001621 + resolution: "caniuse-lite@npm:1.0.30001621" + checksum: 10c0/c7e7fb021ca32b26394ddf0d62faa8a7919c2e50f8a0dcc51f02a96b7b46fff69a81d6b7ead711367fcaf9dfbc6c795320553b6f84dcb393806a10efeb756ce7 + languageName: node + linkType: hard + +"chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:^4.1.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"chokidar@npm:>=3.0.0 <4.0.0": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"chrome-trace-event@npm:^1.0.2, chrome-trace-event@npm:^1.0.3": + version: 1.0.3 + resolution: "chrome-trace-event@npm:1.0.3" + checksum: 10c0/080ce2d20c2b9e0f8461a380e9585686caa768b1c834a464470c9dc74cda07f27611c7b727a2cd768a9cecd033297fdec4ce01f1e58b62227882c1059dec321c + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"clone@npm:^2.1.1": + version: 2.1.2 + resolution: "clone@npm:2.1.2" + checksum: 10c0/ed0601cd0b1606bc7d82ee7175b97e68d1dd9b91fd1250a3617b38d34a095f8ee0431d40a1a611122dcccb4f93295b4fdb94942aa763392b5fe44effa50c2d5e + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"commander@npm:^7.0.0, commander@npm:^7.2.0": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 10c0/8d690ff13b0356df7e0ebbe6c59b4712f754f4b724d4f473d3cc5b3fdcf978e3a5dc3078717858a2ceb50b0f84d0660a7f22a96cdc50fb877d0c9bb31593d23a + languageName: node + linkType: hard + +"cosmiconfig@npm:^9.0.0": + version: 9.0.0 + resolution: "cosmiconfig@npm:9.0.0" + dependencies: + env-paths: "npm:^2.2.1" + import-fresh: "npm:^3.3.0" + js-yaml: "npm:^4.1.0" + parse-json: "npm:^5.2.0" + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/1c1703be4f02a250b1d6ca3267e408ce16abfe8364193891afc94c2d5c060b69611fdc8d97af74b7e6d5d1aac0ab2fb94d6b079573146bc2d756c2484ce5f0ee + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 + languageName: node + linkType: hard + +"css-select@npm:^4.1.3": + version: 4.3.0 + resolution: "css-select@npm:4.3.0" + dependencies: + boolbase: "npm:^1.0.0" + css-what: "npm:^6.0.1" + domhandler: "npm:^4.3.1" + domutils: "npm:^2.8.0" + nth-check: "npm:^2.0.1" + checksum: 10c0/a489d8e5628e61063d5a8fe0fa1cc7ae2478cb334a388a354e91cf2908154be97eac9fa7ed4dffe87a3e06cf6fcaa6016553115335c4fd3377e13dac7bd5a8e1 + languageName: node + linkType: hard + +"css-tree@npm:^1.1.2, css-tree@npm:^1.1.3": + version: 1.1.3 + resolution: "css-tree@npm:1.1.3" + dependencies: + mdn-data: "npm:2.0.14" + source-map: "npm:^0.6.1" + checksum: 10c0/499a507bfa39b8b2128f49736882c0dd636b0cd3370f2c69f4558ec86d269113286b7df469afc955de6a68b0dba00bc533e40022a73698081d600072d5d83c1c + languageName: node + linkType: hard + +"css-what@npm:^6.0.1": + version: 6.1.0 + resolution: "css-what@npm:6.1.0" + checksum: 10c0/a09f5a6b14ba8dcf57ae9a59474722e80f20406c53a61e9aedb0eedc693b135113ffe2983f4efc4b5065ae639442e9ae88df24941ef159c218b231011d733746 + languageName: node + linkType: hard + +"csso@npm:^4.2.0": + version: 4.2.0 + resolution: "csso@npm:4.2.0" + dependencies: + css-tree: "npm:^1.1.2" + checksum: 10c0/f8c6b1300efaa0f8855a7905ae3794a29c6496e7f16a71dec31eb6ca7cfb1f058a4b03fd39b66c4deac6cb06bf6b4ba86da7b67d7320389cb9994d52b924b903 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/cedbec45298dd5c501d01b92b119cd3faebe5438c3917ff11ae1bff86a6c722930ac9c8659792824013168ba6db7c4668225d845c633fbdafbbf902a6389f736 + languageName: node + linkType: hard + +"detect-libc@npm:^1.0.3": + version: 1.0.3 + resolution: "detect-libc@npm:1.0.3" + bin: + detect-libc: ./bin/detect-libc.js + checksum: 10c0/4da0deae9f69e13bc37a0902d78bf7169480004b1fed3c19722d56cff578d16f0e11633b7fbf5fb6249181236c72e90024cbd68f0b9558ae06e281f47326d50d + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.1": + version: 2.0.3 + resolution: "detect-libc@npm:2.0.3" + checksum: 10c0/88095bda8f90220c95f162bf92cad70bd0e424913e655c20578600e35b91edc261af27531cf160a331e185c0ced93944bc7e09939143225f56312d7fd800fdb7 + languageName: node + linkType: hard + +"dom-serializer@npm:^1.0.1": + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^4.2.0" + entities: "npm:^2.0.0" + checksum: 10c0/67d775fa1ea3de52035c98168ddcd59418356943b5eccb80e3c8b3da53adb8e37edb2cc2f885802b7b1765bf5022aec21dfc32910d7f9e6de4c3148f095ab5e0 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: 10c0/686f5a9ef0fff078c1412c05db73a0dce096190036f33e400a07e2a4518e9f56b1e324f5c576a0a747ef0e75b5d985c040b0d51945ce780c0dd3c625a18cd8c9 + languageName: node + linkType: hard + +"domhandler@npm:^4.2.0, domhandler@npm:^4.2.2, domhandler@npm:^4.3.1": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" + dependencies: + domelementtype: "npm:^2.2.0" + checksum: 10c0/5c199c7468cb052a8b5ab80b13528f0db3d794c64fc050ba793b574e158e67c93f8336e87fd81e9d5ee43b0e04aea4d8b93ed7be4899cb726a1601b3ba18538b + languageName: node + linkType: hard + +"domutils@npm:^2.8.0": + version: 2.8.0 + resolution: "domutils@npm:2.8.0" + dependencies: + dom-serializer: "npm:^1.0.1" + domelementtype: "npm:^2.2.0" + domhandler: "npm:^4.2.0" + checksum: 10c0/d58e2ae01922f0dd55894e61d18119924d88091837887bf1438f2327f32c65eb76426bd9384f81e7d6dcfb048e0f83c19b222ad7101176ad68cdc9c695b563db + languageName: node + linkType: hard + +"dotenv-expand@npm:^5.1.0": + version: 5.1.0 + resolution: "dotenv-expand@npm:5.1.0" + checksum: 10c0/24ac633de853ef474d0421cc639328b7134109c8dc2baaa5e3afb7495af5e9237136d7e6971e55668e4dce915487eb140967cdd2b3e99aa439e0f6bf8b56faeb + languageName: node + linkType: hard + +"dotenv@npm:^7.0.0": + version: 7.0.0 + resolution: "dotenv@npm:7.0.0" + checksum: 10c0/4d834d09d23ebd284e701c4204172659a7dcd51116f11c29c575ae6d918ccd4760a3383bdfd83cfbed42f061266b787f8e56452b952638867ea5476be875eb27 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.668": + version: 1.4.779 + resolution: "electron-to-chromium@npm:1.4.779" + checksum: 10c0/9ed241b723258b3f0c4653a3c97a465e8d5a7a226cf9b5249d309aeab6fb22399084464304955b96d3c1cf13b8c6161f06366bfa87bd9a27740713fee32b5e8d + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 10c0/7fba6af1f116300d2ba1c5673fc218af1961b20908638391b4e1e6d5850314ee2ac3ec22d741b3a8060479911c99305164aed19b6254bde75e7e6b1b2c3f3aa3 + languageName: node + linkType: hard + +"entities@npm:^3.0.1": + version: 3.0.1 + resolution: "entities@npm:3.0.1" + checksum: 10c0/2d93f48fd86de0b0ed8ee34456aa47b4e74a916a5e663cfcc7048302e2c7e932002926daf5a00ad6d5691e3c90673a15d413704d86d7e1b9532f9bc00d975590 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: "npm:^0.2.1" + checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce + languageName: node + linkType: hard + +"escalade@npm:^3.1.2": + version: 3.1.2 + resolution: "escalade@npm:3.1.2" + checksum: 10c0/6b4adafecd0682f3aa1cd1106b8fff30e492c7015b178bc81b2d2f75106dabea6c6d6e8508fc491bd58e597c74abb0e8e2368f943ecb9393d4162e3c2f3cf287 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/9700a0285628abaeb37007c9a4d92bd49f67210f09067638774338e146c8e9c825c5c877f072b2f75f41dc6a2d0be8664f79ffc03f6576649f54a84fb9b47de0 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"get-port@npm:^4.2.0": + version: 4.2.0 + resolution: "get-port@npm:4.2.0" + checksum: 10c0/ecce4233b720e7c6612aedc334ee8bb62b7d44db7ad6a55e58f7b3a17993ecfcb1bb218b8bb1ee197d0971c12e420aad2b3f95a93e4a117f2186f926ebcd2d42 + languageName: node + linkType: hard + +"glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.3.16 + resolution: "glob@npm:10.3.16" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.1" + minipass: "npm:^7.0.4" + path-scurry: "npm:^1.11.0" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/f7eb4c3e66f221f0be3967c02527047167967549bdf8ed1bd5f6277d43a35191af4e2bb8c89f07a79664958bae088fd06659e69a0f1de462972f1eab52a715e8 + languageName: node + linkType: hard + +"globals@npm:^13.2.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"htmlnano@npm:^2.0.0": + version: 2.1.1 + resolution: "htmlnano@npm:2.1.1" + dependencies: + cosmiconfig: "npm:^9.0.0" + posthtml: "npm:^0.16.5" + timsort: "npm:^0.3.0" + peerDependencies: + cssnano: ^7.0.0 + postcss: ^8.3.11 + purgecss: ^6.0.0 + relateurl: ^0.2.7 + srcset: 5.0.1 + svgo: ^3.0.2 + terser: ^5.10.0 + uncss: ^0.17.3 + peerDependenciesMeta: + cssnano: + optional: true + postcss: + optional: true + purgecss: + optional: true + relateurl: + optional: true + srcset: + optional: true + svgo: + optional: true + terser: + optional: true + uncss: + optional: true + checksum: 10c0/3610259a3ccfb84be45525b1a02bce8bc392a2d0dcea0b069ff673e7330dad1f2bc4c3eb48abc69b344fe327345fb9be0650d9da13c25a1a654a879288f76f38 + languageName: node + linkType: hard + +"htmlparser2@npm:^7.1.1": + version: 7.2.0 + resolution: "htmlparser2@npm:7.2.0" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^4.2.2" + domutils: "npm:^2.8.0" + entities: "npm:^3.0.1" + checksum: 10c0/7e1fa7f3b2635f2a1c5272765e25aab33b241d84a43e9d27f28a0b7166b51a8025dec40a6a29af38d6a698a2f1d2983cb43e5c61d4e07ec5aa9df672a7460e16 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.4 + resolution: "https-proxy-agent@npm:7.0.4" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:4" + checksum: 10c0/bc4f7c38da32a5fc622450b6cb49a24ff596f9bd48dcedb52d2da3fa1c1a80e100fb506bd59b326c012f21c863c69b275c23de1a01d0b84db396822fdf25e52b + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"immutable@npm:^4.0.0": + version: 4.3.6 + resolution: "immutable@npm:4.3.6" + checksum: 10c0/7d0952a768b4fadcee47230ed86dc9505a4517095eceaf5a47e65288571c42400c6e4a2ae21eca4eda957cb7bc50720213135b62cf6a181639111f8acae128c3 + languageName: node + linkType: hard + +"import-fresh@npm:^3.3.0": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: "npm:^2.0.0" + checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-json@npm:^2.0.1": + version: 2.0.1 + resolution: "is-json@npm:2.0.1" + checksum: 10c0/49233aa560396e6365186be2f3a4618bf8b8067c1a97f2a25b8de09a9d7f326985f0163508067abeae5a21c69594a2a537f0147a5c4050ef097c15964e994cb4 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.1.2 + resolution: "jackspeak@npm:3.1.2" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/5f1922a1ca0f19869e23f0dc4374c60d36e922f7926c76fecf8080cc6f7f798d6a9caac1b9428327d14c67731fd551bb3454cb270a5e13a0718f3b3660ec3d5d + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 + languageName: node + linkType: hard + +"json5@npm:^2.2.0, json5@npm:^2.2.1": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c + languageName: node + linkType: hard + +"lightningcss-darwin-arm64@npm:1.25.0": + version: 1.25.0 + resolution: "lightningcss-darwin-arm64@npm:1.25.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-darwin-x64@npm:1.25.0": + version: 1.25.0 + resolution: "lightningcss-darwin-x64@npm:1.25.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-freebsd-x64@npm:1.25.0": + version: 1.25.0 + resolution: "lightningcss-freebsd-x64@npm:1.25.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-linux-arm-gnueabihf@npm:1.25.0": + version: 1.25.0 + resolution: "lightningcss-linux-arm-gnueabihf@npm:1.25.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"lightningcss-linux-arm64-gnu@npm:1.25.0": + version: 1.25.0 + resolution: "lightningcss-linux-arm64-gnu@npm:1.25.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"lightningcss-linux-arm64-musl@npm:1.25.0": + version: 1.25.0 + resolution: "lightningcss-linux-arm64-musl@npm:1.25.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"lightningcss-linux-x64-gnu@npm:1.25.0": + version: 1.25.0 + resolution: "lightningcss-linux-x64-gnu@npm:1.25.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"lightningcss-linux-x64-musl@npm:1.25.0": + version: 1.25.0 + resolution: "lightningcss-linux-x64-musl@npm:1.25.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"lightningcss-win32-x64-msvc@npm:1.25.0": + version: 1.25.0 + resolution: "lightningcss-win32-x64-msvc@npm:1.25.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"lightningcss@npm:^1.22.1": + version: 1.25.0 + resolution: "lightningcss@npm:1.25.0" + dependencies: + detect-libc: "npm:^1.0.3" + lightningcss-darwin-arm64: "npm:1.25.0" + lightningcss-darwin-x64: "npm:1.25.0" + lightningcss-freebsd-x64: "npm:1.25.0" + lightningcss-linux-arm-gnueabihf: "npm:1.25.0" + lightningcss-linux-arm64-gnu: "npm:1.25.0" + lightningcss-linux-arm64-musl: "npm:1.25.0" + lightningcss-linux-x64-gnu: "npm:1.25.0" + lightningcss-linux-x64-musl: "npm:1.25.0" + lightningcss-win32-x64-msvc: "npm:1.25.0" + dependenciesMeta: + lightningcss-darwin-arm64: + optional: true + lightningcss-darwin-x64: + optional: true + lightningcss-freebsd-x64: + optional: true + lightningcss-linux-arm-gnueabihf: + optional: true + lightningcss-linux-arm64-gnu: + optional: true + lightningcss-linux-arm64-musl: + optional: true + lightningcss-linux-x64-gnu: + optional: true + lightningcss-linux-x64-musl: + optional: true + lightningcss-win32-x64-msvc: + optional: true + checksum: 10c0/ff1c3a4ff0bd04e4470f258d184838e05cf6c5312cd6de1b7792eb8fe619c8a51a9b4ed3bf28c3c97bd8f9c53c0dda2035f8b00a43da30f52040204d82c87537 + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d + languageName: node + linkType: hard + +"lmdb@npm:2.8.5": + version: 2.8.5 + resolution: "lmdb@npm:2.8.5" + dependencies: + "@lmdb/lmdb-darwin-arm64": "npm:2.8.5" + "@lmdb/lmdb-darwin-x64": "npm:2.8.5" + "@lmdb/lmdb-linux-arm": "npm:2.8.5" + "@lmdb/lmdb-linux-arm64": "npm:2.8.5" + "@lmdb/lmdb-linux-x64": "npm:2.8.5" + "@lmdb/lmdb-win32-x64": "npm:2.8.5" + msgpackr: "npm:^1.9.5" + node-addon-api: "npm:^6.1.0" + node-gyp: "npm:latest" + node-gyp-build-optional-packages: "npm:5.1.1" + ordered-binary: "npm:^1.4.1" + weak-lru-cache: "npm:^1.2.2" + dependenciesMeta: + "@lmdb/lmdb-darwin-arm64": + optional: true + "@lmdb/lmdb-darwin-x64": + optional: true + "@lmdb/lmdb-linux-arm": + optional: true + "@lmdb/lmdb-linux-arm64": + optional: true + "@lmdb/lmdb-linux-x64": + optional: true + "@lmdb/lmdb-win32-x64": + optional: true + bin: + download-lmdb-prebuilds: bin/download-prebuilds.js + checksum: 10c0/5c95ae636611f32d3583b26bca0d4b0dc236378f785b5735420edda62f88ddacc17c7586d586779a49f3377422c85c3e0b416c4a47f1c21945f76f001551afc9 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.2.2 + resolution: "lru-cache@npm:10.2.2" + checksum: 10c0/402d31094335851220d0b00985084288136136992979d0e015f0f1697e15d1c86052d7d53ae86b614e5b058425606efffc6969a31a091085d7a2b80a8a1e26d6 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e + languageName: node + linkType: hard + +"mdn-data@npm:2.0.14": + version: 2.0.14 + resolution: "mdn-data@npm:2.0.14" + checksum: 10c0/67241f8708c1e665a061d2b042d2d243366e93e5bf1f917693007f6d55111588b952dcbfd3ea9c2d0969fb754aad81b30fdcfdcc24546495fc3b24336b28d4bd + languageName: node + linkType: hard + +"micromatch@npm:^4.0.5": + version: 4.0.7 + resolution: "micromatch@npm:4.0.7" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/58fa99bc5265edec206e9163a1d2cec5fabc46a5b473c45f4a700adce88c2520456ae35f2b301e4410fb3afb27e9521fb2813f6fc96be0a48a89430e0916a772 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.4 + resolution: "minimatch@npm:9.0.4" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/2c16f21f50e64922864e560ff97c587d15fd491f65d92a677a344e970fe62aafdbeafe648965fa96d33c061b4d0eabfe0213466203dd793367e7f28658cf6414 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4": + version: 7.1.1 + resolution: "minipass@npm:7.1.1" + checksum: 10c0/fdccc2f99c31083f45f881fd1e6971d798e333e078ab3c8988fb818c470fbd5e935388ad9adb286397eba50baebf46ef8ff487c8d3f455a69c6f3efc327bdff9 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc + languageName: node + linkType: hard + +"msgpackr-extract@npm:^3.0.2": + version: 3.0.2 + resolution: "msgpackr-extract@npm:3.0.2" + dependencies: + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "npm:3.0.2" + "@msgpackr-extract/msgpackr-extract-darwin-x64": "npm:3.0.2" + "@msgpackr-extract/msgpackr-extract-linux-arm": "npm:3.0.2" + "@msgpackr-extract/msgpackr-extract-linux-arm64": "npm:3.0.2" + "@msgpackr-extract/msgpackr-extract-linux-x64": "npm:3.0.2" + "@msgpackr-extract/msgpackr-extract-win32-x64": "npm:3.0.2" + node-gyp: "npm:latest" + node-gyp-build-optional-packages: "npm:5.0.7" + dependenciesMeta: + "@msgpackr-extract/msgpackr-extract-darwin-arm64": + optional: true + "@msgpackr-extract/msgpackr-extract-darwin-x64": + optional: true + "@msgpackr-extract/msgpackr-extract-linux-arm": + optional: true + "@msgpackr-extract/msgpackr-extract-linux-arm64": + optional: true + "@msgpackr-extract/msgpackr-extract-linux-x64": + optional: true + "@msgpackr-extract/msgpackr-extract-win32-x64": + optional: true + bin: + download-msgpackr-prebuilds: bin/download-prebuilds.js + checksum: 10c0/f14727e0121c241a11cf75824f87822c0a08d65e6b8eba8a3fbf26c7d7287ea3f8ca3ab76887fda781a203bd16e51705207d82593ba6f06abca3181c743a352d + languageName: node + linkType: hard + +"msgpackr@npm:^1.9.5, msgpackr@npm:^1.9.9": + version: 1.10.2 + resolution: "msgpackr@npm:1.10.2" + dependencies: + msgpackr-extract: "npm:^3.0.2" + dependenciesMeta: + msgpackr-extract: + optional: true + checksum: 10c0/eb0a47b3d32a3be92f7a5b1182a67e5d9bfd5668d1aed63d3df03480a06798311eea339319b442ffafe83de19d9f3c9c6ac4d9081af0c9f896599d766a53db20 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + +"node-addon-api@npm:^6.1.0": + version: 6.1.0 + resolution: "node-addon-api@npm:6.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/d2699c4ad15740fd31482a3b6fca789af7723ab9d393adc6ac45250faaee72edad8f0b10b2b9d087df0de93f1bdc16d97afdd179b26b9ebc9ed68b569faa4bac + languageName: node + linkType: hard + +"node-addon-api@npm:^7.0.0": + version: 7.1.0 + resolution: "node-addon-api@npm:7.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/2e096ab079e3c46d33b0e252386e9c239c352f7cc6d75363d9a3c00bdff34c1a5da170da861917512843f213c32d024ced9dc9552b968029786480d18727ec66 + languageName: node + linkType: hard + +"node-gyp-build-optional-packages@npm:5.0.7": + version: 5.0.7 + resolution: "node-gyp-build-optional-packages@npm:5.0.7" + bin: + node-gyp-build-optional-packages: bin.js + node-gyp-build-optional-packages-optional: optional.js + node-gyp-build-optional-packages-test: build-test.js + checksum: 10c0/e0edb57358dfa8e31c26b38310ddc5ae81d19fd13b3bf095c41215dfd6a033b1269b510c3ce5e73f7a4ed3d36f101ea47716ec75be38f5e31916d185e7f18905 + languageName: node + linkType: hard + +"node-gyp-build-optional-packages@npm:5.1.1": + version: 5.1.1 + resolution: "node-gyp-build-optional-packages@npm:5.1.1" + dependencies: + detect-libc: "npm:^2.0.1" + bin: + node-gyp-build-optional-packages: bin.js + node-gyp-build-optional-packages-optional: optional.js + node-gyp-build-optional-packages-test: build-test.js + checksum: 10c0/f9fad2061c48fb0fc90831cd11d6a7670d731d22a5b00c7d3441b43b4003543299ff64ff2729afe2cefd7d14928e560d469336e5bb00f613932ec2cd56b3665b + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.1.0 + resolution: "node-gyp@npm:10.1.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^3.0.0" + semver: "npm:^7.3.5" + tar: "npm:^6.1.2" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/9cc821111ca244a01fb7f054db7523ab0a0cd837f665267eb962eb87695d71fb1e681f9e21464cc2fd7c05530dc4c81b810bca1a88f7d7186909b74477491a3c + languageName: node + linkType: hard + +"node-releases@npm:^2.0.14": + version: 2.0.14 + resolution: "node-releases@npm:2.0.14" + checksum: 10c0/199fc93773ae70ec9969bc6d5ac5b2bbd6eb986ed1907d751f411fef3ede0e4bfdb45ceb43711f8078bea237b6036db8b1bf208f6ff2b70c7d615afd157f3ab9 + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + +"nth-check@npm:^2.0.1": + version: 2.1.1 + resolution: "nth-check@npm:2.1.1" + dependencies: + boolbase: "npm:^1.0.0" + checksum: 10c0/5fee7ff309727763689cfad844d979aedd2204a817fbaaf0e1603794a7c20db28548d7b024692f953557df6ce4a0ee4ae46cd8ebd9b36cfb300b9226b567c479 + languageName: node + linkType: hard + +"nullthrows@npm:^1.1.1": + version: 1.1.1 + resolution: "nullthrows@npm:1.1.1" + checksum: 10c0/56f34bd7c3dcb3bd23481a277fa22918120459d3e9d95ca72976c72e9cac33a97483f0b95fc420e2eb546b9fe6db398273aba9a938650cdb8c98ee8f159dcb30 + languageName: node + linkType: hard + +"ordered-binary@npm:^1.4.1": + version: 1.5.1 + resolution: "ordered-binary@npm:1.5.1" + checksum: 10c0/fb4c74e07436d0bf33d3b537c18dccafb39a60750a64d8b8fbd55f0b0f8eb7dad710f663b9c2edd1d59e9a27e13b638099da901ecf1cc95cd40173f42cf70f9e + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"parcel@npm:^2.12.0": + version: 2.12.0 + resolution: "parcel@npm:2.12.0" + dependencies: + "@parcel/config-default": "npm:2.12.0" + "@parcel/core": "npm:2.12.0" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/events": "npm:2.12.0" + "@parcel/fs": "npm:2.12.0" + "@parcel/logger": "npm:2.12.0" + "@parcel/package-manager": "npm:2.12.0" + "@parcel/reporter-cli": "npm:2.12.0" + "@parcel/reporter-dev-server": "npm:2.12.0" + "@parcel/reporter-tracer": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + chalk: "npm:^4.1.0" + commander: "npm:^7.0.0" + get-port: "npm:^4.2.0" + bin: + parcel: lib/bin.js + checksum: 10c0/1853858c22cb728d3e3f524df04fbdc42aa27a0c8a3a0dbe2314d618ac13a3fe81836ce1560cdfce17338f61ec238d9b616073c181ab77af56664a0221af1b2a + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + error-ex: "npm:^1.3.1" + json-parse-even-better-errors: "npm:^2.3.0" + lines-and-columns: "npm:^1.1.6" + checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.0": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": + version: 1.0.1 + resolution: "picocolors@npm:1.0.1" + checksum: 10c0/c63cdad2bf812ef0d66c8db29583802355d4ca67b9285d846f390cc15c2f6ccb94e8cb7eb6a6e97fc5990a6d3ad4ae42d86c84d3146e667c739a4234ed50d400 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.2.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 10c0/f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 + languageName: node + linkType: hard + +"posthtml-parser@npm:^0.10.1": + version: 0.10.2 + resolution: "posthtml-parser@npm:0.10.2" + dependencies: + htmlparser2: "npm:^7.1.1" + checksum: 10c0/90c7c2e0892c18577a56a5dd60a54c40feb0be7c712a79f711e1730b5eea468f8d521d387af9f08d78e6bca9df613286c3ff8a95ac9426671cbe9021d7ec2ae5 + languageName: node + linkType: hard + +"posthtml-parser@npm:^0.11.0": + version: 0.11.0 + resolution: "posthtml-parser@npm:0.11.0" + dependencies: + htmlparser2: "npm:^7.1.1" + checksum: 10c0/89bf980a60124790f776a9f21aec0f154eba5412d16f0f3a95de7a53d31b9acb9264bf317ab40c080413e3018a8e65c86278e6e8c0731c8e0363418982ed4296 + languageName: node + linkType: hard + +"posthtml-render@npm:^3.0.0": + version: 3.0.0 + resolution: "posthtml-render@npm:3.0.0" + dependencies: + is-json: "npm:^2.0.1" + checksum: 10c0/7adb9c20d0908663019c3c2dede3f6cc8bd19c17c81a1f42a1d8772195be4e5252aeb72a764e92d3424aebfa8c5d35c7ef1ec25243a802d35897aa928858505b + languageName: node + linkType: hard + +"posthtml@npm:^0.16.4, posthtml@npm:^0.16.5": + version: 0.16.6 + resolution: "posthtml@npm:0.16.6" + dependencies: + posthtml-parser: "npm:^0.11.0" + posthtml-render: "npm:^3.0.0" + checksum: 10c0/0505cb70ece051206ffa932394181372be6390a974fd2f50e4e6fdd5d11e41feffba9a5f5e22809ca42899f79bd489d53ceac1d7ad0d782db9521b578e5b7f5a + languageName: node + linkType: hard + +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 10c0/f66430e4ff947dbb996058f6fd22de2c66612ae1a89b097744e17fb18a4e8e7a86db99eda52ccf15e53f00b63f4ec0b0911581ff2aac0355b625c8eac509b0dc + languageName: node + linkType: hard + +"proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"react-error-overlay@npm:6.0.9": + version: 6.0.9 + resolution: "react-error-overlay@npm:6.0.9" + checksum: 10c0/02f51337f34589305f827249acb597446489794cc5b5e721a6260111325b56942a7471b76967cba304e797d7e4ef16dd0bd989c112dd0bb9586270df0d75a4a9 + languageName: node + linkType: hard + +"react-refresh@npm:^0.9.0": + version: 0.9.0 + resolution: "react-refresh@npm:0.9.0" + checksum: 10c0/fa20f605e19dc10342e5cec8dcbb88cd4a473d26a7ff0acf1f0402e78f94ec309837be07a3cc3646f88d19f9ed07fa13a275f4656b5e3ced8fa23ce488984609 + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: "npm:^2.2.1" + checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.7": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 10c0/12b069dc774001fbb0014f6a28f11c09ebfe3c0d984d88c9bced77fdb6fedbacbca434d24da9ae9371bfbf23f754869307fb51a4c98a8b8b18e5ef748677ca24 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"root-workspace-0b6124@workspace:.": + version: 0.0.0-use.local + resolution: "root-workspace-0b6124@workspace:." + dependencies: + "@parcel/core": "npm:^2.12.0" + "@parcel/transformer-sass": "npm:^2.12.0" + "@tabler/core": "npm:^1.0.0-beta20" + parcel: "npm:^2.12.0" + languageName: unknown + linkType: soft + +"safe-buffer@npm:^5.0.1": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"sass@npm:^1.38.0": + version: 1.77.2 + resolution: "sass@npm:1.77.2" + dependencies: + chokidar: "npm:>=3.0.0 <4.0.0" + immutable: "npm:^4.0.0" + source-map-js: "npm:>=0.6.2 <2.0.0" + bin: + sass: sass.js + checksum: 10c0/0d292339064de3c902e209d41de9c4eb2038cff326476aeebbb5be3eee1d23400d975face2b8e124ae617b10af3e93bec01580f61912f34e4c517fe137a118b6 + languageName: node + linkType: hard + +"semver@npm:^7.3.5, semver@npm:^7.5.2": + version: 7.6.2 + resolution: "semver@npm:7.6.2" + bin: + semver: bin/semver.js + checksum: 10c0/97d3441e97ace8be4b1976433d1c32658f6afaff09f143e52c593bae7eef33de19e3e369c88bd985ce1042c6f441c80c6803078d1de2a9988080b66684cbb30c + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.3 + resolution: "socks-proxy-agent@npm:8.0.3" + dependencies: + agent-base: "npm:^7.1.1" + debug: "npm:^4.3.4" + socks: "npm:^2.7.1" + checksum: 10c0/4950529affd8ccd6951575e21c1b7be8531b24d924aa4df3ee32df506af34b618c4e50d261f4cc603f1bfd8d426915b7d629966c8ce45b05fb5ad8c8b9a6459d + languageName: node + linkType: hard + +"socks@npm:^2.7.1": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + languageName: node + linkType: hard + +"source-map-js@npm:>=0.6.2 <2.0.0": + version: 1.2.0 + resolution: "source-map-js@npm:1.2.0" + checksum: 10c0/7e5f896ac10a3a50fe2898e5009c58ff0dc102dcb056ed27a354623a0ece8954d4b2649e1a1b2b52ef2e161d26f8859c7710350930751640e71e374fe2d321a4 + languageName: node + linkType: hard + +"source-map@npm:^0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"srcset@npm:4": + version: 4.0.0 + resolution: "srcset@npm:4.0.0" + checksum: 10c0/0685c3bd2423b33831734fb71560cd8784f024895e70ee2ac2c392e30047c27ffd9481e001950fb0503f4906bc3fe963145935604edad77944d09c9800990660 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 + languageName: node + linkType: hard + +"stable@npm:^0.1.8": + version: 0.1.8 + resolution: "stable@npm:0.1.8" + checksum: 10c0/df74b5883075076e78f8e365e4068ecd977af6c09da510cfc3148a303d4b87bc9aa8f7c48feb67ed4ef970b6140bd9eabba2129e28024aa88df5ea0114cba39d + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"svgo@npm:^2.4.0": + version: 2.8.0 + resolution: "svgo@npm:2.8.0" + dependencies: + "@trysound/sax": "npm:0.2.0" + commander: "npm:^7.2.0" + css-select: "npm:^4.1.3" + css-tree: "npm:^1.1.3" + csso: "npm:^4.2.0" + picocolors: "npm:^1.0.0" + stable: "npm:^0.1.8" + bin: + svgo: bin/svgo + checksum: 10c0/0741f5d5cad63111a90a0ce7a1a5a9013f6d293e871b75efe39addb57f29a263e45294e485a4d2ff9cc260a5d142c8b5937b2234b4ef05efdd2706fb2d360ecc + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 + languageName: node + linkType: hard + +"term-size@npm:^2.2.1": + version: 2.2.1 + resolution: "term-size@npm:2.2.1" + checksum: 10c0/89f6bba1d05d425156c0910982f9344d9e4aebf12d64bfa1f460d93c24baa7bc4c4a21d355fbd7153c316433df0538f64d0ae6e336cc4a69fdda4f85d62bc79d + languageName: node + linkType: hard + +"timsort@npm:^0.3.0": + version: 0.3.0 + resolution: "timsort@npm:0.3.0" + checksum: 10c0/571b2054a0db3cf80eb255f8609a1f798cae9176f9ec6e3fbd03d64186c015cc9e1e75b88ba38e1d71aebcc03a931352522c7387dcb90caeb148375c7bc106f4 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"tslib@npm:^2.4.0": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 10c0/e03a8a4271152c8b26604ed45535954c0a45296e32445b4b87f8a5abdb2421f40b59b4ca437c4346af0f28179780d604094eb64546bee2019d903d01c6c19bdb + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.13": + version: 1.0.16 + resolution: "update-browserslist-db@npm:1.0.16" + dependencies: + escalade: "npm:^3.1.2" + picocolors: "npm:^1.0.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/5995399fc202adbb51567e4810e146cdf7af630a92cc969365a099150cb00597e425cc14987ca7080b09a4d0cfd2a3de53fbe72eebff171aed7f9bb81f9bf405 + languageName: node + linkType: hard + +"utility-types@npm:^3.10.0": + version: 3.11.0 + resolution: "utility-types@npm:3.11.0" + checksum: 10c0/2f1580137b0c3e6cf5405f37aaa8f5249961a76d26f1ca8efc0ff49a2fc0e0b2db56de8e521a174d075758e0c7eb3e590edec0832eb44478b958f09914920f19 + languageName: node + linkType: hard + +"weak-lru-cache@npm:^1.2.2": + version: 1.2.2 + resolution: "weak-lru-cache@npm:1.2.2" + checksum: 10c0/744847bd5b96ca86db1cb40d0aea7e92c02bbdb05f501181bf9c581e82fa2afbda32a327ffbe75749302b8492ab449f1c657ca02410d725f5d412d1e6c607d72 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..c152b64 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,106 @@ +name: logboek-dataverwerkingen-demo + +services: + munera: + image: ${MUNERA_IMAGE} + container_name: munera + build: ./apps/munera + ports: + - "127.0.0.1:${MUNERA_PORT}:${MUNERA_PORT}" + environment: + - MUNERA_PORT + - MUNERA_ALLOWED_HOSTS + - MUNERA_LOGBOEK_ENDPOINT + - MUNERA_CURRUS_URL + depends_on: + - munera-logboek + - currus + + munera-logboek: + image: ${LOGBOEK_IMAGE} + container_name: munera-logboek + environment: + LISTEN_ADDRESS: "0.0.0.0:${MUNERA_LOGBOEK_PORT}" + STORAGE_TYPE: "cassandra" + STORAGE_CASSANDRA_SERVERS: "munera-cassandra:9042" + depends_on: + munera-cassandra: + condition: service_healthy + + munera-cassandra: + image: ${CASSANDRA_IMAGE} + container_name: munera-cassandra + volumes: + - cassandra:/var/lib/cassandra + environment: + CASSANDRA_CLUSTER_NAME: logboek-munera + healthcheck: + test: ["CMD", "cqlsh", "-e", "describe keyspaces"] + interval: 5s + timeout: 5s + retries: 60 + + currus: + image: ${CURRUS_IMAGE} + container_name: currus + build: ./apps/currus + environment: + - LISTEN_ADDRESS=${CURRUS_LISTEN_ADDRESS} + - LOGBOEK_ENDPOINT=${CURRUS_LOGBOEK_ENDPOINT} + - LAMINA_URL=${CURRUS_LAMINA_URL} + depends_on: + - currus-logboek + - lamina + + currus-logboek: + image: ${LOGBOEK_IMAGE} + container_name: currus-logboek + environment: + LISTEN_ADDRESS: "0.0.0.0:${CURRUS_LOGBOEK_PORT}" + STORAGE_TYPE: "sqlite" + STORAGE_SQLITE_PATH: /var/lib/logboek/logboek-currus.db + volumes: + - logboek:/var/lib/logboek + + lamina: + image: ${LAMINA_IMAGE} + container_name: lamina + build: ./apps/lamina + environment: + - LISTEN_ADDRESS=${LAMINA_LISTEN_ADDRESS} + - LOGBOEK_ENDPOINT=${LAMINA_LOGBOEK_ENDPOINT} + depends_on: + - lamina-logboek + + lamina-logboek: + image: ${LOGBOEK_IMAGE} + container_name: lamina-logboek + environment: + LISTEN_ADDRESS: "0.0.0.0:${LAMINA_LOGBOEK_PORT}" + STORAGE_TYPE: "sqlite" + STORAGE_SQLITE_PATH: /var/lib/logboek/logboek-lamina.db + volumes: + - logboek:/var/lib/logboek + + grafana: + image: ${GRAFANA_IMAGE} + container_name: grafana + ports: + - "127.0.0.1:3000:3000" + volumes: + - ./apps/grafana/provisioning:/etc/grafana/provisioning + - ./apps/grafana/grafana.ini:/etc/grafana/grafana.ini + - grafana:/var/lib/grafana + - logboek:/var/lib/logboek + environment: + GF_INSTALL_PLUGINS: "frser-sqlite-datasource,hadesarchitect-cassandra-datasource" + +networks: + default: + name: logboek-dataverwerkingen-demo + driver: bridge + +volumes: + logboek: + cassandra: + grafana: