diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 0000000..ff5937d --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,25 @@ +services: + app: + image: mcr.microsoft.com/devcontainers/base:ubuntu-22.04 + volumes: + - ..:/workspaces/scrutiny:cached + command: sleep infinity + network_mode: service:influxdb + + influxdb: + image: influxdb:2.8 + restart: unless-stopped + ports: + - "8086:8086" + environment: + - DOCKER_INFLUXDB_INIT_MODE=setup + - DOCKER_INFLUXDB_INIT_USERNAME=admin + - DOCKER_INFLUXDB_INIT_PASSWORD=password12345 + - DOCKER_INFLUXDB_INIT_ORG=scrutiny + - DOCKER_INFLUXDB_INIT_BUCKET=metrics + - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=my-super-secret-auth-token + volumes: + - scrutiny-influxdb-data:/var/lib/influxdb2 + +volumes: + scrutiny-influxdb-data: diff --git a/.devcontainer/docker-rootless/devcontainer.json b/.devcontainer/docker-rootless/devcontainer.json new file mode 100644 index 0000000..68935b7 --- /dev/null +++ b/.devcontainer/docker-rootless/devcontainer.json @@ -0,0 +1,30 @@ +{ + "name": "Scrutiny Dev (rootless docker)", + "dockerComposeFile": "../docker-compose.yml", + "service": "app", + "workspaceFolder": "/workspaces/scrutiny", + + "features": { + "ghcr.io/devcontainers/features/go:1": "1.25", + "ghcr.io/devcontainers/features/node:1": "lts" + }, + + "onCreateCommand": "sudo apt-get update && sudo apt-get install -y smartmontools iputils-ping chromium-browser", + + "customizations": { + "vscode": { + "extensions": [ + "golang.go", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode" + ] + } + }, + + "forwardPorts": [8080, 8086], + + "postCreateCommand": "bash .devcontainer/setup.sh", + "remoteUser": "root", + "containerUser": "root", + "updateRemoteUserUID": false +} diff --git a/.devcontainer/docker/devcontainer.json b/.devcontainer/docker/devcontainer.json new file mode 100644 index 0000000..cf77055 --- /dev/null +++ b/.devcontainer/docker/devcontainer.json @@ -0,0 +1,28 @@ +{ + "name": "Scrutiny Dev (docker)", + "dockerComposeFile": "../docker-compose.yml", + "service": "app", + "workspaceFolder": "/workspaces/scrutiny", + + "features": { + "ghcr.io/devcontainers/features/go:1": "1.25", + "ghcr.io/devcontainers/features/node:1": "lts" + }, + + "onCreateCommand": "sudo apt-get update && sudo apt-get install -y smartmontools iputils-ping chromium-browser", + + "customizations": { + "vscode": { + "extensions": [ + "golang.go", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode" + ] + } + }, + + "forwardPorts": [8080, 8086], + + "postCreateCommand": "bash .devcontainer/setup.sh", + "remoteUser": "vscode" +} diff --git a/.devcontainer/podman/devcontainer.json b/.devcontainer/podman/devcontainer.json new file mode 100644 index 0000000..1e979a7 --- /dev/null +++ b/.devcontainer/podman/devcontainer.json @@ -0,0 +1,32 @@ +{ + "name": "Scrutiny Dev (podman)", + "dockerComposeFile": "../docker-compose.yml", + "service": "app", + "workspaceFolder": "/workspaces/scrutiny", + + "features": { + "ghcr.io/devcontainers/features/go:1": "1.25", + "ghcr.io/devcontainers/features/node:1": "lts" + }, + + "onCreateCommand": "sudo apt-get update && sudo apt-get install -y smartmontools iputils-ping chromium-browser", + + "customizations": { + "vscode": { + "extensions": [ + "golang.go", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode" + ] + } + }, + + "forwardPorts": [8080, 8086], + + "postCreateCommand": "bash .devcontainer/setup.sh", + "remoteEnv": { + "PODMAN_USERNS": "keep-id" + }, + "containerUser": "vscode", + "updateRemoteUserUID": true +} diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh new file mode 100755 index 0000000..1035365 --- /dev/null +++ b/.devcontainer/setup.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +echo "Starting Scrutiny Setup..." + +if [ ! -f "scrutiny.yaml" ]; then + echo "Creating scrutiny.yaml from template..." + cat < scrutiny.yaml +version: 1 +web: + listen: + port: 8080 + host: 0.0.0.0 + database: + location: ./scrutiny.db + src: + frontend: + path: ./dist + influxdb: + retention_policy: false + token: "my-super-secret-auth-token" + org: "scrutiny" + bucket: "metrics" + host: "localhost" + port: 8086 +log: + file: 'web.log' + level: DEBUG +EOF +else + echo "scrutiny.yaml already exists." +fi + +echo "Vendoring Go modules..." +go mod vendor + +echo "Installing Node modules..." +cd webapp/frontend +npm install + +echo "Setup Complete! Ready to code." diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..06e0d57 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,37 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Scrutiny", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${workspaceFolder}/webapp/backend/cmd/scrutiny/scrutiny.go", + "args": ["start", "--config", "./scrutiny.yaml"], + "cwd": "${workspaceFolder}", + "env": { + "DEBUG": "true" + }, + "console": "integratedTerminal", + "preLaunchTask": "Build Frontend", + "serverReadyAction": { + "action": "openExternally", + "pattern": "Listening and serving HTTP on", + "uriFormat": "http://localhost:8080/web/" + } + }, + { + "name": "Run Collector", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${workspaceFolder}/collector/cmd/collector-metrics/collector-metrics.go", + "args": ["run", "--debug"], + "cwd": "${workspaceFolder}", + "env": { + "COLLECTOR_DEBUG": "true" + }, + "console": "integratedTerminal" + } + ] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..29ae88c --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,10 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Build Frontend", + "type": "shell", + "command": "cd webapp/frontend && npm run build:prod -- --output-path=../../dist" + } + ] +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 02992dd..be6b546 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -147,6 +147,11 @@ The Scrutiny repository is a [monorepo](https://en.wikipedia.org/wiki/Monorepo) Depending on the functionality you are adding, you may need to setup a development environment for 1 or more projects. +# Devcontainer +Devcontainer configurations are available to build and run Scrutiny (WebUI and Collector) in a fully isolated environment. +When opening the project with vscode, choose "Reopen in Container". Three configurations are available depending on your +container runtime and setup: docker, docker-rootless, and podman. + # Modifying the Scrutiny Backend Server (API) 1. install the [Go runtime](https://go.dev/doc/install) (v1.25) diff --git a/webapp/frontend/package-lock.json b/webapp/frontend/package-lock.json index fabd4f5..1c70742 100644 --- a/webapp/frontend/package-lock.json +++ b/webapp/frontend/package-lock.json @@ -363,6 +363,7 @@ "version": "13.3.12", "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.3.12.tgz", "integrity": "sha512-dc2JDokKJuuNxzzZa9FvuQU71kYC/e0xCLjGxEgX48sGKwajHRGBuzYFb8EmvLeA24SshYGmrxN0vGG9GhLK6g==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -377,6 +378,7 @@ "version": "13.3.9", "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.3.9.tgz", "integrity": "sha512-XCuCbeuxWFyo3EYrgEYx7eHzwl76vaWcxtWXl00ka8d+WAOtMQ6Tf1D98ybYT5uwF9889fFpXAPw98mVnlo3MA==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -429,6 +431,7 @@ "version": "13.3.12", "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.12.tgz", "integrity": "sha512-Nk4zNKfda92aFe+cucHRv2keyryR7C1ZnsurwZW9WZSobpY3z2tTT81F+yy35lGoMt5BDBAIpfh1b4j9Ue/vMg==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -444,6 +447,7 @@ "version": "13.3.12", "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.12.tgz", "integrity": "sha512-F5vJYrjbNvEWoVz9J/CqiT3Iod6g9bV0dGI5EeURcW4yHXHZ12ioQpfU3+bE7qXcTlnofbdDhK8cGxGx01SzBA==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -456,6 +460,7 @@ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.12.tgz", "integrity": "sha512-6jrdVwexPihWlyitopc3rn2ReEkhAaMI8UWR0SOTnt3NaqNYWeio4bpeWlumgNPElDyY5rmyrmJgeaY8ICa8qA==", "dev": true, + "peer": true, "dependencies": { "@babel/core": "^7.17.2", "chokidar": "^3.0.0", @@ -579,6 +584,7 @@ "version": "13.3.12", "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.12.tgz", "integrity": "sha512-jx0YC+NbPMbxGr5bXECkCEQv2RdVxR8AJNnabkPk8ZjwCpDzROrbELwwS1kunrZUhffcD15IhWGBvf1EGHAYDw==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -594,6 +600,7 @@ "version": "13.3.12", "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.12.tgz", "integrity": "sha512-auow1TKZx44ha1ia8Jwg2xp2Q7BbpShG5Ft8tewL3T44aTmJY7svWOE/m+DkZ/SXHmTFnbZFobGU5aEfe0+pNw==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -620,6 +627,7 @@ "version": "13.3.9", "resolved": "https://registry.npmjs.org/@angular/material/-/material-13.3.9.tgz", "integrity": "sha512-FU8lcMgo+AL8ckd27B4V097ZPoIZNRHiCe3wpgkImT1qC0YwcyXZVn0MqQTTFSdC9a/aI8wPm3AbTClJEVw5Vw==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -650,6 +658,7 @@ "version": "13.3.12", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.12.tgz", "integrity": "sha512-sfhQqU4xjTJCjkH62TQeH5/gkay/KzvNDF95J6NHi/Q6p2dbtzZdXuLJKR/sHxtF2kc505z5v9RNm6XMSXM1KA==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -733,6 +742,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", "dev": true, + "peer": true, "dependencies": { "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.16.8", @@ -3094,7 +3104,8 @@ "version": "18.15.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -3363,6 +3374,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3468,6 +3480,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -4089,6 +4102,7 @@ "url": "https://tidelift.com/funding/github/npm/browserslist" } ], + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001449", "electron-to-chromium": "^1.4.284", @@ -4555,6 +4569,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, + "peer": true, "dependencies": { "tslib": "^1.9.0" }, @@ -4575,13 +4590,15 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/codelyzer/node_modules/zone.js": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/color-convert": { "version": "1.9.3", @@ -8060,7 +8077,8 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/jasmine-spec-reporter": { "version": "7.0.0", @@ -8293,6 +8311,7 @@ "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz", "integrity": "sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA==", "dev": true, + "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -8380,6 +8399,7 @@ "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", "dev": true, + "peer": true, "dependencies": { "jasmine-core": "^4.1.0" }, @@ -9243,6 +9263,7 @@ "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "peer": true, "engines": { "node": "*" } @@ -10494,6 +10515,7 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", "dev": true, + "peer": true, "dependencies": { "nanoid": "^3.1.30", "picocolors": "^1.0.0", @@ -11126,6 +11148,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "dev": true, + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -11191,6 +11214,7 @@ "integrity": "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==", "deprecated": "We have news to share - Protractor is deprecated and will reach end-of-life by Summer 2023. To learn more and find out about other options please refer to this post on the Angular blog. Thank you for using and contributing to Protractor. https://goo.gle/state-of-e2e-in-angular", "dev": true, + "peer": true, "dependencies": { "@types/q": "^0.0.32", "@types/selenium-webdriver": "^3.0.0", @@ -11996,6 +12020,7 @@ "version": "7.8.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -12031,6 +12056,7 @@ "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", "dev": true, + "peer": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -12152,6 +12178,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -12955,6 +12982,7 @@ "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.56.0.tgz", "integrity": "sha512-Ev3fOb4bUElwWu4F9P9WjnnaSpc8XB9OFHSFZSKMFL1CE1oM+oFXWEgAqPmmZIyhBihuqIQlFsVTypiiS9RxeA==", "dev": true, + "peer": true, "dependencies": { "css": "^3.0.0", "debug": "^4.3.2", @@ -13070,7 +13098,6 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", - "peer": true, "dependencies": { "svg.js": "^2.0.1" }, @@ -13082,7 +13109,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==", - "peer": true, "dependencies": { "svg.js": ">=2.3.x" }, @@ -13094,7 +13120,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==", - "peer": true, "dependencies": { "svg.js": "^2.2.5" }, @@ -13105,14 +13130,12 @@ "node_modules/svg.js": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", - "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==", - "peer": true + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" }, "node_modules/svg.pathmorphing.js": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", - "peer": true, "dependencies": { "svg.js": "^2.4.0" }, @@ -13124,7 +13147,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", - "peer": true, "dependencies": { "svg.js": "^2.6.5", "svg.select.js": "^2.1.2" @@ -13137,7 +13159,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", - "peer": true, "dependencies": { "svg.js": "^2.2.5" }, @@ -13149,7 +13170,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", - "peer": true, "dependencies": { "svg.js": "^2.6.5" }, @@ -13171,6 +13191,7 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.1.tgz", "integrity": "sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==", "dev": true, + "peer": true, "dependencies": { "arg": "^5.0.2", "chokidar": "^3.5.3", @@ -13241,6 +13262,7 @@ "url": "https://tidelift.com/funding/github/npm/postcss" } ], + "peer": true, "dependencies": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", @@ -13401,6 +13423,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -13591,6 +13614,7 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -13646,6 +13670,7 @@ "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", "dev": true, + "peer": true, "dependencies": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", @@ -13770,6 +13795,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "dev": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14140,6 +14166,7 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz", "integrity": "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==", "dev": true, + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -14229,6 +14256,7 @@ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz", "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==", "dev": true, + "peer": true, "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -14447,6 +14475,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0",