From ce7f59d8bae4480cbb72f049d7015c62be1560a3 Mon Sep 17 00:00:00 2001 From: Daniel Prevuznak <daniel.prevuznak@kosickaakademia.com> Date: Tue, 12 Dec 2023 12:35:47 +0100 Subject: [PATCH 01/32] initial commit --- .editorconfig | 16 + .gitignore | 42 + .vscode/extensions.json | 4 + .vscode/launch.json | 20 + .vscode/tasks.json | 42 + README.md | 27 + angular.json | 100 + package-lock.json | 12852 ++++++++++++++++++++++++++++++++ package.json | 44 + server.ts | 56 + src/app/app.component.css | 0 src/app/app.component.html | 336 + src/app/app.component.spec.ts | 29 + src/app/app.component.ts | 14 + src/app/app.config.server.ts | 11 + src/app/app.config.ts | 9 + src/app/app.routes.ts | 3 + src/assets/.gitkeep | 0 src/favicon.ico | Bin 0 -> 15086 bytes src/index.html | 13 + src/main.server.ts | 7 + src/main.ts | 6 + src/styles.css | 1 + tsconfig.app.json | 18 + tsconfig.json | 33 + tsconfig.spec.json | 14 + 26 files changed, 13697 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json create mode 100644 README.md create mode 100644 angular.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 server.ts create mode 100644 src/app/app.component.css create mode 100644 src/app/app.component.html create mode 100644 src/app/app.component.spec.ts create mode 100644 src/app/app.component.ts create mode 100644 src/app/app.config.server.ts create mode 100644 src/app/app.config.ts create mode 100644 src/app/app.routes.ts create mode 100644 src/assets/.gitkeep create mode 100644 src/favicon.ico create mode 100644 src/index.html create mode 100644 src/main.server.ts create mode 100644 src/main.ts create mode 100644 src/styles.css create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.spec.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..59d9a3a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0711527 --- /dev/null +++ b/.gitignore @@ -0,0 +1,42 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..77b3745 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 + "recommendations": ["angular.ng-template"] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..925af83 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,20 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "ng serve", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: start", + "url": "http://localhost:4200/" + }, + { + "name": "ng test", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: test", + "url": "http://localhost:9876/debug.html" + } + ] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..a298b5b --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "start", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + }, + { + "type": "npm", + "script": "test", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + } + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..cb58bd4 --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +# AngularProject + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.0.6. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/angular.json b/angular.json new file mode 100644 index 0000000..611e893 --- /dev/null +++ b/angular.json @@ -0,0 +1,100 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "angular-project": { + "projectType": "application", + "schematics": {}, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": "dist/angular-project", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": [ + "zone.js" + ], + "tsConfig": "tsconfig.app.json", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.css" + ], + "scripts": [], + "server": "src/main.server.ts", + "prerender": true, + "ssr": { + "entry": "server.ts" + } + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-project:build:production" + }, + "development": { + "buildTarget": "angular-project:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-project:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "tsConfig": "tsconfig.spec.json", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.css" + ], + "scripts": [] + } + } + } + } + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8f7e2b0 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,12852 @@ +{ + "name": "angular-project", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "angular-project", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^17.0.0", + "@angular/common": "^17.0.0", + "@angular/compiler": "^17.0.0", + "@angular/core": "^17.0.0", + "@angular/forms": "^17.0.0", + "@angular/platform-browser": "^17.0.0", + "@angular/platform-browser-dynamic": "^17.0.0", + "@angular/platform-server": "^17.0.0", + "@angular/router": "^17.0.0", + "@angular/ssr": "^17.0.6", + "express": "^4.18.2", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.2" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^17.0.6", + "@angular/cli": "^17.0.6", + "@angular/compiler-cli": "^17.0.0", + "@types/express": "^4.17.17", + "@types/jasmine": "~5.1.0", + "@types/node": "^18.18.0", + "jasmine-core": "~5.1.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.2.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1700.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1700.6.tgz", + "integrity": "sha512-zVpz736cBZHXcv0v2bRLfJLcykanUyEMVQXkGwZp2eygjNK1Ls9s/74o1dXd6nGdvjh6AnkzOU/vouj2dqA41g==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.0.6", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.0.6.tgz", + "integrity": "sha512-gYxmbvq5/nk7aVJ6JxIIW0//RM7859kMPJGPKekcCGSWkkObjqG6P5cDgJJNAjMl/IfCsG7B+xGYjr4zN8QV9g==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1700.6", + "@angular-devkit/build-webpack": "0.1700.6", + "@angular-devkit/core": "17.0.6", + "@babel/core": "7.23.2", + "@babel/generator": "7.23.0", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.6", + "@babel/plugin-transform-async-generator-functions": "7.23.2", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.23.2", + "@babel/preset-env": "7.23.2", + "@babel/runtime": "7.23.2", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "17.0.6", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.16", + "babel-loader": "9.1.3", + "babel-plugin-istanbul": "6.1.1", + "browser-sync": "2.29.3", + "browserslist": "^4.21.5", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.20", + "css-loader": "6.8.1", + "esbuild-wasm": "0.19.5", + "fast-glob": "3.3.1", + "http-proxy-middleware": "2.0.6", + "https-proxy-agent": "7.0.2", + "inquirer": "9.2.11", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.2.0", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.5", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "3.0.1", + "piscina": "4.1.0", + "postcss": "8.4.31", + "postcss-loader": "7.3.3", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.69.5", + "sass-loader": "13.3.2", + "semver": "7.5.4", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.24.0", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.6.2", + "undici": "5.27.2", + "vite": "4.5.1", + "webpack": "5.89.0", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.1", + "webpack-merge": "5.10.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.19.5" + }, + "peerDependencies": { + "@angular/compiler-cli": "^17.0.0", + "@angular/localize": "^17.0.0", + "@angular/platform-server": "^17.0.0", + "@angular/service-worker": "^17.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^17.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.2 <5.3" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1700.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1700.6.tgz", + "integrity": "sha512-xT5LL92rScVjvGZO7but/YbTQ12PNilosyjDouephl+HIf2V6rwDovTsEfpLYgcrqgodh+R0X0ZCOk95+MmSBA==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1700.6", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.6.tgz", + "integrity": "sha512-+h9VnFHof7rKzBJ5FWrbPXWzbag31QKbUGJ/mV5BYgj39vjzPNUXBW8AaScZAlATi8+tElYXjRMvM49GnuyRLg==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "picomatch": "3.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.0.6.tgz", + "integrity": "sha512-2g769MpazA1aOzJOm2MNGosra3kxw8CbdIQQOKkvycIzroRNgN06yHcRTDC03GADgP/CkDJ6kxwJQNG+wNFL2A==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.0.6", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.5", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/animations": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.0.6.tgz", + "integrity": "sha512-fic61LjLHry79c5H9UGM8Ff311MJnf9an7EukLj2aLJ3J0uadL/H9de7dDp8PaIT10DX9g+aRTIKOmF3PmmXIQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.0.6" + } + }, + "node_modules/@angular/cli": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.0.6.tgz", + "integrity": "sha512-BLA2wDeqZManC/7MI6WvRRV+VhrwjxxB7FawLyp4xYlo0CTSOFOfeKPVRMLEnA/Ou4R5d47B+BqJTlep62pHwg==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1700.6", + "@angular-devkit/core": "17.0.6", + "@angular-devkit/schematics": "17.0.6", + "@schematics/angular": "17.0.6", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "9.2.11", + "jsonc-parser": "3.2.0", + "npm-package-arg": "11.0.1", + "npm-pick-manifest": "9.0.0", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "17.0.4", + "resolve": "1.22.8", + "semver": "7.5.4", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.0.6.tgz", + "integrity": "sha512-FZtf8ol8W2V21ZDgFtcxmJ6JJKUO97QZ+wr/bosyYEryWMmn6VGrbOARhfW7BlrEgn14NdFkLb72KKtqoqRjrg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.0.6", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.0.6.tgz", + "integrity": "sha512-PaCNnlPcL0rvByKCBUUyLWkKJYXOrcfKlYYvcacjOzEUgZeEpekG81hMRb9u/Pz+A+M4HJSTmdgzwGP35zo8qw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.0.6" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.0.6.tgz", + "integrity": "sha512-C1Gfh9kbjYZezEMOwxnvUTHuPXa+6pk7mAfSj8e5oAO6E+wfo2dTxv1J5zxa3KYzxPYMNfF8OFvLuMKsw7lXjA==", + "dev": true, + "dependencies": { + "@babel/core": "7.23.2", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/compiler": "17.0.6", + "typescript": ">=5.2 <5.3" + } + }, + "node_modules/@angular/core": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.0.6.tgz", + "integrity": "sha512-QzfKRTDNgGOY9D5VxenUUz20cvPVC+uVw9xiqkDuHgGfLYVFlCAK9ymFYkdUCLTcVzJPxckP+spMpPX8nc4Aqw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.14.0" + } + }, + "node_modules/@angular/forms": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.0.6.tgz", + "integrity": "sha512-n/trsMtQHUBGiWz5lFaggMcMOuw0gH+96TCtHxQiUYJOdrbOemkFdGrNh3B4fGHmogWuOYJVF5FAm97WRES2XA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.0.6", + "@angular/core": "17.0.6", + "@angular/platform-browser": "17.0.6", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.0.6.tgz", + "integrity": "sha512-nBhWH1MKT2WswgRNIoMnmNAt0n5/fG59BanJtodW71//Aj5aIE+BuVoFgK3wmO8IMoeP4i4GXRInBXs6lUMOJw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/animations": "17.0.6", + "@angular/common": "17.0.6", + "@angular/core": "17.0.6" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.0.6.tgz", + "integrity": "sha512-5ZEmBtBkqamTaWjUXCls7G1f3xyK/ykXE7hnUV9CgGqXKrNkxblmbtOhoWdsbuIYjjdxQcAk1qtg/Rg21wcc4w==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.0.6", + "@angular/compiler": "17.0.6", + "@angular/core": "17.0.6", + "@angular/platform-browser": "17.0.6" + } + }, + "node_modules/@angular/platform-server": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-17.0.6.tgz", + "integrity": "sha512-HrSsrkPQC7t8Yw5+bs40S4Goxscr3hWFYe7ecDmFPzJ88a4JYG38CwsJ+vv8xDQEarR4ugJMEfMxsCFNoXKLXw==", + "dependencies": { + "tslib": "^2.3.0", + "xhr2": "^0.2.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/animations": "17.0.6", + "@angular/common": "17.0.6", + "@angular/compiler": "17.0.6", + "@angular/core": "17.0.6", + "@angular/platform-browser": "17.0.6" + } + }, + "node_modules/@angular/router": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.0.6.tgz", + "integrity": "sha512-xW6yDxREpBOB9MoODSfIw5HwkwLK+OgK34Q6sGYs0ft9UryMoFwft+pHGAaDz2nzhA72n+Ht9B2eai78UE9jGQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.0.6", + "@angular/core": "17.0.6", + "@angular/platform-browser": "17.0.6", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/ssr": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-17.0.6.tgz", + "integrity": "sha512-QFHBZWb/ZvSQbPQn917qvUWZuWC6YuQGzAAZMmXkEaHhF3CnWpSky+QQTm24HsHXi+EK8jwqpGyurAQil8O0eQ==", + "dependencies": { + "critters": "0.0.20", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^17.0.0", + "@angular/core": "^17.0.0" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz", + "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", + "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", + "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.6", + "@babel/types": "^7.23.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz", + "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", + "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", + "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.2.tgz", + "integrity": "sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz", + "integrity": "sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.2", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.23.2", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.23.0", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.23.0", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.23.0", + "@babel/plugin-transform-modules-commonjs": "^7.23.0", + "@babel/plugin-transform-modules-systemjs": "^7.23.0", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.23.0", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.23.0", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", + "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz", + "integrity": "sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz", + "integrity": "sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.5.tgz", + "integrity": "sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz", + "integrity": "sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz", + "integrity": "sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz", + "integrity": "sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz", + "integrity": "sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz", + "integrity": "sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz", + "integrity": "sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz", + "integrity": "sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz", + "integrity": "sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz", + "integrity": "sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz", + "integrity": "sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz", + "integrity": "sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz", + "integrity": "sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz", + "integrity": "sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz", + "integrity": "sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz", + "integrity": "sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz", + "integrity": "sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz", + "integrity": "sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz", + "integrity": "sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz", + "integrity": "sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@ljharb/through": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.11.tgz", + "integrity": "sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@ngtools/webpack": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.0.6.tgz", + "integrity": "sha512-9Us20rqGhi8PmQBwQu6Qtww3WVV/gf2s2DbzcLclsiDtSBobzT64Z6F6E9OpAYD+c5PxlUaOghL6NXdnSNdByA==", + "dev": true, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^17.0.0", + "typescript": ">=5.2 <5.3", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.0.tgz", + "integrity": "sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.3.tgz", + "integrity": "sha512-UZp9NwK+AynTrKvHn5k3KviW/hA5eENmFsu3iAPe7sWRt0lFUdsY/wXIYjpDFe7cdSNwOIzbObfwgt6eL5/2zw==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.0.tgz", + "integrity": "sha512-wBqcGsMELZna0jDblGd7UXgOby45TQaMWmbFwWX+SEotk4HV6zG2t6rT9siyLhPk4P6YYqgfL1UO8nMWDBVJXQ==", + "dev": true, + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.2.tgz", + "integrity": "sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@schematics/angular": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.0.6.tgz", + "integrity": "sha512-AyC7Bk3Omy6PfADThhq5ci+zzdTTi2N1oZI35gw4tMK5ZxVwIACx2Zyhaz399m5c2RCDi9Hz4A2BOFq9f0j/dg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.0.6", + "@angular-devkit/schematics": "17.0.6", + "jsonc-parser": "3.2.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.1.0.tgz", + "integrity": "sha512-89uOo6yh/oxaU8AeOUnVrTdVMcGk9Q1hJa7Hkvalc6G3Z3CupWk4Xe9djSgJm9fMkH69s0P0cVHUoKSOemLdng==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.0.tgz", + "integrity": "sha512-AAbmnEHDQv6CSfrWA5wXslGtzLPtAtHZleKOgxdQYvx/s76Fk6T6ZVt7w2IGV9j1UrFeBocTTQxaXG2oRrDhYA==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.1.0", + "@sigstore/protobuf-specs": "^0.2.1", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.2.0.tgz", + "integrity": "sha512-KKATZ5orWfqd9ZG6MN8PtCIx4eevWSuGRKQvofnWXRpyMyUEpmrzg5M5BrCpjM+NfZ0RbNGOh5tCz/P2uoRqOA==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.1", + "tuf-js": "^2.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + "dev": true + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.0.tgz", + "integrity": "sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.44.8", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.8.tgz", + "integrity": "sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", + "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", + "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", + "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", + "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", + "dev": true, + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", + "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.4", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", + "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.4", + "core-js-compat": "^3.33.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", + "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.4" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/body-parser/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/bonjour-service/node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.3.tgz", + "integrity": "sha512-NiM38O6XU84+MN+gzspVmXV2fTOoe+jBqIBx3IBdhZrdeURr6ZgznJr/p+hQ+KzkKEiGH/GcC4SQFSL0jV49bg==", + "dev": true, + "dependencies": { + "browser-sync-client": "^2.29.3", + "browser-sync-ui": "^2.29.3", + "bs-recipes": "1.3.4", + "chalk": "4.1.2", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "^4.0.1", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.2.0", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "^4.4.1", + "ua-parser-js": "^1.0.33", + "yargs": "^17.3.1" + }, + "bin": { + "browser-sync": "dist/bin.js" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/browser-sync-client": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.3.tgz", + "integrity": "sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==", + "dev": true, + "dependencies": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/browser-sync-ui": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.3.tgz", + "integrity": "sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==", + "dev": true, + "dependencies": { + "async-each-series": "0.1.1", + "chalk": "4.1.2", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^4.4.1", + "stream-throttle": "^0.1.3" + } + }, + "node_modules/browser-sync-ui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/browser-sync-ui/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/browser-sync-ui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/browser-sync-ui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/browser-sync-ui/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync-ui/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/browser-sync/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/browser-sync/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/browser-sync/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/browser-sync/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==", + "dev": true + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.1.tgz", + "integrity": "sha512-g4Uf2CFZPaxtJKre6qr4zqLDOOPU7bNVhWjlNhvzc51xaTOx2noMOLhfFkTAqwtrAZAKQUuDfyjitzilpA8WsQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001568", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz", + "integrity": "sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", + "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", + "dev": true, + "dependencies": { + "browserslist": "^4.22.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/critters": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.20.tgz", + "integrity": "sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw==", + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/critters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/critters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", + "dev": true, + "bin": { + "dev-ip": "lib/dev-ip.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "dependencies": { + "lodash": "^4.17.10" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/eazy-logger": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz", + "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==", + "dev": true, + "dependencies": { + "chalk": "4.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eazy-logger/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eazy-logger/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eazy-logger/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eazy-logger/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eazy-logger/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eazy-logger/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.610", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz", + "integrity": "sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", + "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", + "dev": true + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.5.tgz", + "integrity": "sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.19.5", + "@esbuild/android-arm64": "0.19.5", + "@esbuild/android-x64": "0.19.5", + "@esbuild/darwin-arm64": "0.19.5", + "@esbuild/darwin-x64": "0.19.5", + "@esbuild/freebsd-arm64": "0.19.5", + "@esbuild/freebsd-x64": "0.19.5", + "@esbuild/linux-arm": "0.19.5", + "@esbuild/linux-arm64": "0.19.5", + "@esbuild/linux-ia32": "0.19.5", + "@esbuild/linux-loong64": "0.19.5", + "@esbuild/linux-mips64el": "0.19.5", + "@esbuild/linux-ppc64": "0.19.5", + "@esbuild/linux-riscv64": "0.19.5", + "@esbuild/linux-s390x": "0.19.5", + "@esbuild/linux-x64": "0.19.5", + "@esbuild/netbsd-x64": "0.19.5", + "@esbuild/openbsd-x64": "0.19.5", + "@esbuild/sunos-x64": "0.19.5", + "@esbuild/win32-arm64": "0.19.5", + "@esbuild/win32-ia32": "0.19.5", + "@esbuild/win32-x64": "0.19.5" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.19.5.tgz", + "integrity": "sha512-7zmLLn2QCj93XfMmHtzrDJ1UBuOHB2CZz1ghoCEZiRajxjUvHsF40PnbzFIY/pmesqPRaEtEWii0uzsTbnAgrA==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express/node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/express/node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz", + "integrity": "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "9.2.11", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.11.tgz", + "integrity": "sha512-B2LafrnnhbRzCWfAdOXisUzL89Kg8cVJlYmhqoi3flSiV/TveO+nsXwgKr9h9PIo+J1hz7nBSk6gegRIMBBf7g==", + "dev": true, + "dependencies": { + "@ljharb/through": "^2.3.9", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^5.0.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.1.tgz", + "integrity": "sha512-UrzO3fL7nnxlQXlvTynNAenL+21oUQRlzqQFsA2U11ryb4+NLOCOePZ70PTojEaUKhiFugh7dG0Q+I58xlPdWg==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/karma": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.2.tgz", + "integrity": "sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==", + "dev": true, + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", + "dev": true, + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", + "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", + "dev": true, + "peerDependencies": { + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "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 + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/karma/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/karma/node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/karma/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/karma/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/karma/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/karma/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/karma/node_modules/ua-parser-js": { + "version": "0.7.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.37.tgz", + "integrity": "sha512-xV8kqRKM+jhMvcHWUKthV9fNebIzrNy//2O9ZwWcfiBFR5f25XVZPLlEajk/sf3Ra15V92isyQqnIEXRDaZWEA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/karma/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", + "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "dev": true, + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/localtunnel": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", + "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==", + "dev": true, + "dependencies": { + "axios": "0.21.4", + "debug": "4.3.2", + "openurl": "1.1.1", + "yargs": "17.1.1" + }, + "bin": { + "lt": "bin/lt.js" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/localtunnel/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/localtunnel/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/localtunnel/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/localtunnel/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/localtunnel/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/localtunnel/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/localtunnel/node_modules/yargs": { + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", + "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/localtunnel/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "dev": true, + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", + "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.1.tgz", + "integrity": "sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "dev": true, + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.1.tgz", + "integrity": "sha512-MQpL27ZrsJQ2kiAuQPpZb5LtJwydNRnI15QWXsf3WHERu4rzjRj6Zju/My2fov7tLuu3Gle/uoIX/DDZ3u4O4Q==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", + "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz", + "integrity": "sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==", + "dev": true + }, + "node_modules/opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/opn/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.4.tgz", + "integrity": "sha512-eGdLHrV/g5b5MtD5cTPyss+JxOlaOloSMG3UwPMAvL8ywaLJ6beONPF40K4KKl/UI6q5hTKCJq5rCu8tkF+7Dg==", + "dev": true, + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^7.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^7.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^2.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.1.0.tgz", + "integrity": "sha512-sjbLMi3sokkie+qmtZpkfMCUJTpbxJm/wvaPzU28vmYSsTSW8xk9JcFUsbqGJdtPpIQ9tuj+iDcTtgZjwnOSig==", + "dev": true, + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "dev": true, + "dependencies": { + "async": "^2.6.0", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", + "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", + "dev": true, + "dependencies": { + "cosmiconfig": "^8.2.0", + "jiti": "^1.18.2", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.0.tgz", + "integrity": "sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", + "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==", + "dev": true, + "dependencies": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/resp-modifier/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/resp-modifier/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==", + "dev": true + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.69.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", + "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz", + "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sass/node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "dev": true + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "dev": true, + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", + "dev": true + }, + "node_modules/send/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true, + "bin": { + "mime": "cli.js" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sigstore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.1.0.tgz", + "integrity": "sha512-kPIj+ZLkyI3QaM0qX8V/nSsweYND3W448pwkDgS6CQ74MfhEkIR8ToK5Iyx46KJYRjseVcD3Rp9zAmUAj6ZjPw==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.1.0", + "@sigstore/protobuf-specs": "^0.2.1", + "@sigstore/sign": "^2.1.0", + "@sigstore/tuf": "^2.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", + "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dev": true, + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-client": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", + "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", + "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==", + "dev": true, + "dependencies": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + }, + "bin": { + "throttleproxy": "bin/throttleproxy.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/streamroller/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/terser": { + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tuf-js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.1.0.tgz", + "integrity": "sha512-eD7YPPjVlMzdggrOeE8zwoegUaG/rt6Bt3jwoQPunRiNVzgcCE009UDFJKJjG+Gk9wFu6W/Vi+P5d/5QpdD9jA==", + "dev": true, + "dependencies": { + "@tufjs/models": "2.0.0", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/undici": { + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz", + "integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==", + "dev": true, + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", + "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/webpack-dev-server/node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.0.tgz", + "integrity": "sha512-H/Z3H55mrcrgjFwI+5jKavgXvwQLtfPCUEp6pi35VhoB0pfcHnSoyuTzkBEZpzq49g1193CUEwIvmsjcotenYw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xhr2": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", + "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.2.tgz", + "integrity": "sha512-X4U7J1isDhoOmHmFWiLhloWc2lzMkdnumtfQ1LXzf/IOZp5NQYuMUTaviVzG/q1ugMBIXzin2AqeVJUoSEkNyQ==", + "dependencies": { + "tslib": "^2.3.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..89ccb50 --- /dev/null +++ b/package.json @@ -0,0 +1,44 @@ +{ + "name": "angular-project", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test", + "serve:ssr:angular-project": "node dist/angular-project/server/server.mjs" + }, + "private": true, + "dependencies": { + "@angular/animations": "^17.0.0", + "@angular/common": "^17.0.0", + "@angular/compiler": "^17.0.0", + "@angular/core": "^17.0.0", + "@angular/forms": "^17.0.0", + "@angular/platform-browser": "^17.0.0", + "@angular/platform-browser-dynamic": "^17.0.0", + "@angular/platform-server": "^17.0.0", + "@angular/router": "^17.0.0", + "@angular/ssr": "^17.0.6", + "express": "^4.18.2", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.2" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^17.0.6", + "@angular/cli": "^17.0.6", + "@angular/compiler-cli": "^17.0.0", + "@types/express": "^4.17.17", + "@types/jasmine": "~5.1.0", + "@types/node": "^18.18.0", + "jasmine-core": "~5.1.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.2.2" + } +} \ No newline at end of file diff --git a/server.ts b/server.ts new file mode 100644 index 0000000..7083b14 --- /dev/null +++ b/server.ts @@ -0,0 +1,56 @@ +import { APP_BASE_HREF } from '@angular/common'; +import { CommonEngine } from '@angular/ssr'; +import express from 'express'; +import { fileURLToPath } from 'node:url'; +import { dirname, join, resolve } from 'node:path'; +import bootstrap from './src/main.server'; + +// The Express app is exported so that it can be used by serverless Functions. +export function app(): express.Express { + const server = express(); + const serverDistFolder = dirname(fileURLToPath(import.meta.url)); + const browserDistFolder = resolve(serverDistFolder, '../browser'); + const indexHtml = join(serverDistFolder, 'index.server.html'); + + const commonEngine = new CommonEngine(); + + server.set('view engine', 'html'); + server.set('views', browserDistFolder); + + // Example Express Rest API endpoints + // server.get('/api/**', (req, res) => { }); + // Serve static files from /browser + server.get('*.*', express.static(browserDistFolder, { + maxAge: '1y' + })); + + // All regular routes use the Angular engine + server.get('*', (req, res, next) => { + const { protocol, originalUrl, baseUrl, headers } = req; + + commonEngine + .render({ + bootstrap, + documentFilePath: indexHtml, + url: `${protocol}://${headers.host}${originalUrl}`, + publicPath: browserDistFolder, + providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }], + }) + .then((html) => res.send(html)) + .catch((err) => next(err)); + }); + + return server; +} + +function run(): void { + const port = process.env['PORT'] || 4000; + + // Start up the Node server + const server = app(); + server.listen(port, () => { + console.log(`Node Express server listening on http://localhost:${port}`); + }); +} + +run(); diff --git a/src/app/app.component.css b/src/app/app.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/app.component.html b/src/app/app.component.html new file mode 100644 index 0000000..1b7f2c3 --- /dev/null +++ b/src/app/app.component.html @@ -0,0 +1,336 @@ +<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> +<!-- * * * * * * * * * * * The content below * * * * * * * * * * * --> +<!-- * * * * * * * * * * is only a placeholder * * * * * * * * * * --> +<!-- * * * * * * * * * * and can be replaced. * * * * * * * * * * --> +<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> +<!-- * * * * * * * * * Delete the template below * * * * * * * * * --> +<!-- * * * * * * * to get started with your project! * * * * * * * --> +<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> + +<style> + :host { + --bright-blue: oklch(51.01% 0.274 263.83); + --electric-violet: oklch(53.18% 0.28 296.97); + --french-violet: oklch(47.66% 0.246 305.88); + --vivid-pink: oklch(69.02% 0.277 332.77); + --hot-red: oklch(61.42% 0.238 15.34); + --orange-red: oklch(63.32% 0.24 31.68); + + --gray-900: oklch(19.37% 0.006 300.98); + --gray-700: oklch(36.98% 0.014 302.71); + --gray-400: oklch(70.9% 0.015 304.04); + + --red-to-pink-to-purple-vertical-gradient: linear-gradient( + 180deg, + var(--orange-red) 0%, + var(--vivid-pink) 50%, + var(--electric-violet) 100% + ); + + --red-to-pink-to-purple-horizontal-gradient: linear-gradient( + 90deg, + var(--orange-red) 0%, + var(--vivid-pink) 50%, + var(--electric-violet) 100% + ); + + --pill-accent: var(--bright-blue); + + font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", + "Segoe UI Symbol"; + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + h1 { + font-size: 3.125rem; + color: var(--gray-900); + font-weight: 500; + line-height: 100%; + letter-spacing: -0.125rem; + margin: 0; + font-family: "Inter Tight", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", + "Segoe UI Symbol"; + } + + p { + margin: 0; + color: var(--gray-700); + } + + main { + width: 100%; + min-height: 100%; + display: flex; + justify-content: center; + align-items: center; + padding: 1rem; + box-sizing: inherit; + position: relative; + } + + .angular-logo { + max-width: 9.2rem; + } + + .content { + display: flex; + justify-content: space-around; + width: 100%; + max-width: 700px; + margin-bottom: 3rem; + } + + .content h1 { + margin-top: 1.75rem; + } + + .content p { + margin-top: 1.5rem; + } + + .divider { + width: 1px; + background: var(--red-to-pink-to-purple-vertical-gradient); + margin-inline: 0.5rem; + } + + .pill-group { + display: flex; + flex-direction: column; + align-items: start; + flex-wrap: wrap; + gap: 1.25rem; + } + + .pill { + display: flex; + align-items: center; + --pill-accent: var(--bright-blue); + background: color-mix(in srgb, var(--pill-accent) 5%, transparent); + color: var(--pill-accent); + padding-inline: 0.75rem; + padding-block: 0.375rem; + border-radius: 2.75rem; + border: 0; + transition: background 0.3s ease; + font-family: var(--inter-font); + font-size: 0.875rem; + font-style: normal; + font-weight: 500; + line-height: 1.4rem; + letter-spacing: -0.00875rem; + text-decoration: none; + } + + .pill:hover { + background: color-mix(in srgb, var(--pill-accent) 15%, transparent); + } + + .pill-group .pill:nth-child(6n + 1) { + --pill-accent: var(--bright-blue); + } + .pill-group .pill:nth-child(6n + 2) { + --pill-accent: var(--french-violet); + } + .pill-group .pill:nth-child(6n + 3), + .pill-group .pill:nth-child(6n + 4), + .pill-group .pill:nth-child(6n + 5) { + --pill-accent: var(--hot-red); + } + + .pill-group svg { + margin-inline-start: 0.25rem; + } + + .social-links { + display: flex; + align-items: center; + gap: 0.73rem; + margin-top: 1.5rem; + } + + .social-links path { + transition: fill 0.3s ease; + fill: var(--gray-400); + } + + .social-links a:hover svg path { + fill: var(--gray-900); + } + + @media screen and (max-width: 650px) { + .content { + flex-direction: column; + width: max-content; + } + + .divider { + height: 1px; + width: 100%; + background: var(--red-to-pink-to-purple-horizontal-gradient); + margin-block: 1.5rem; + } + } +</style> + +<main class="main"> + <div class="content"> + <div class="left-side"> + <svg + xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 982 239" + fill="none" + class="angular-logo" + > + <g clip-path="url(#a)"> + <path + fill="url(#b)" + d="M388.676 191.625h30.849L363.31 31.828h-35.758l-56.215 159.797h30.848l13.174-39.356h60.061l13.256 39.356Zm-65.461-62.675 21.602-64.311h1.227l21.602 64.311h-44.431Zm126.831-7.527v70.202h-28.23V71.839h27.002v20.374h1.392c2.782-6.71 7.2-12.028 13.255-15.956 6.056-3.927 13.584-5.89 22.503-5.89 8.264 0 15.465 1.8 21.684 5.318 6.137 3.518 10.964 8.673 14.319 15.382 3.437 6.71 5.074 14.81 4.992 24.383v76.175h-28.23v-71.92c0-8.019-2.046-14.237-6.219-18.819-4.173-4.5-9.819-6.791-17.102-6.791-4.91 0-9.328 1.063-13.174 3.272-3.846 2.128-6.792 5.237-9.001 9.328-2.046 4.009-3.191 8.918-3.191 14.728ZM589.233 239c-10.147 0-18.82-1.391-26.103-4.091-7.282-2.7-13.092-6.382-17.511-10.964-4.418-4.582-7.528-9.655-9.164-15.219l25.448-6.136c1.145 2.372 2.782 4.663 4.991 6.954 2.209 2.291 5.155 4.255 8.837 5.81 3.683 1.554 8.428 2.291 14.074 2.291 8.019 0 14.647-1.964 19.884-5.81 5.237-3.845 7.856-10.227 7.856-19.064v-22.665h-1.391c-1.473 2.946-3.601 5.892-6.383 9.001-2.782 3.109-6.464 5.645-10.965 7.691-4.582 2.046-10.228 3.109-17.101 3.109-9.165 0-17.511-2.209-25.039-6.545-7.446-4.337-13.42-10.883-17.757-19.474-4.418-8.673-6.628-19.473-6.628-32.565 0-13.091 2.21-24.301 6.628-33.383 4.419-9.082 10.311-15.955 17.839-20.7 7.528-4.746 15.874-7.037 25.039-7.037 7.037 0 12.846 1.145 17.347 3.518 4.582 2.373 8.182 5.236 10.883 8.51 2.7 3.272 4.746 6.382 6.137 9.327h1.554v-19.8h27.821v121.749c0 10.228-2.454 18.737-7.364 25.447-4.91 6.709-11.538 11.7-20.048 15.055-8.509 3.355-18.165 4.991-28.884 4.991Zm.245-71.266c5.974 0 11.047-1.473 15.302-4.337 4.173-2.945 7.446-7.118 9.573-12.519 2.21-5.482 3.274-12.027 3.274-19.637 0-7.609-1.064-14.155-3.274-19.8-2.127-5.646-5.318-10.064-9.491-13.255-4.174-3.11-9.329-4.746-15.384-4.746s-11.537 1.636-15.792 4.91c-4.173 3.272-7.365 7.772-9.492 13.418-2.128 5.727-3.191 12.191-3.191 19.392 0 7.2 1.063 13.745 3.273 19.228 2.127 5.482 5.318 9.736 9.573 12.764 4.174 3.027 9.41 4.582 15.629 4.582Zm141.56-26.51V71.839h28.23v119.786h-27.412v-21.273h-1.227c-2.7 6.709-7.119 12.191-13.338 16.446-6.137 4.255-13.747 6.382-22.748 6.382-7.855 0-14.81-1.718-20.783-5.237-5.974-3.518-10.72-8.591-14.075-15.382-3.355-6.709-5.073-14.891-5.073-24.464V71.839h28.312v71.921c0 7.609 2.046 13.664 6.219 18.083 4.173 4.5 9.655 6.709 16.365 6.709 4.173 0 8.183-.982 12.111-3.028 3.927-2.045 7.118-5.072 9.655-9.082 2.537-4.091 3.764-9.164 3.764-15.218Zm65.707-109.395v159.796h-28.23V31.828h28.23Zm44.841 162.169c-7.61 0-14.402-1.391-20.457-4.091-6.055-2.7-10.883-6.791-14.32-12.109-3.518-5.319-5.237-11.946-5.237-19.801 0-6.791 1.228-12.355 3.765-16.773 2.536-4.419 5.891-7.937 10.228-10.637 4.337-2.618 9.164-4.664 14.647-6.055 5.4-1.391 11.046-2.373 16.856-3.027 7.037-.737 12.683-1.391 17.102-1.964 4.337-.573 7.528-1.555 9.574-2.782 1.963-1.309 3.027-3.273 3.027-5.973v-.491c0-5.891-1.718-10.391-5.237-13.664-3.518-3.191-8.51-4.828-15.056-4.828-6.955 0-12.356 1.473-16.447 4.5-4.009 3.028-6.71 6.546-8.183 10.719l-26.348-3.764c2.046-7.282 5.483-13.336 10.31-18.328 4.746-4.909 10.638-8.59 17.511-11.045 6.955-2.455 14.565-3.682 22.912-3.682 5.809 0 11.537.654 17.265 2.045s10.965 3.6 15.711 6.71c4.746 3.109 8.51 7.282 11.455 12.6 2.864 5.318 4.337 11.946 4.337 19.883v80.184h-27.166v-16.446h-.9c-1.719 3.355-4.092 6.464-7.201 9.328-3.109 2.864-6.955 5.237-11.619 6.955-4.828 1.718-10.229 2.536-16.529 2.536Zm7.364-20.701c5.646 0 10.556-1.145 14.729-3.354 4.173-2.291 7.364-5.237 9.655-9.001 2.292-3.763 3.355-7.854 3.355-12.273v-14.155c-.9.737-2.373 1.391-4.5 2.046-2.128.654-4.419 1.145-7.037 1.636-2.619.491-5.155.9-7.692 1.227-2.537.328-4.746.655-6.628.901-4.173.572-8.019 1.472-11.292 2.781-3.355 1.31-5.973 3.11-7.855 5.401-1.964 2.291-2.864 5.318-2.864 8.918 0 5.237 1.882 9.164 5.728 11.782 3.682 2.782 8.51 4.091 14.401 4.091Zm64.643 18.328V71.839h27.412v19.965h1.227c2.21-6.955 5.974-12.274 11.292-16.038 5.319-3.763 11.456-5.645 18.329-5.645 1.555 0 3.355.082 5.237.163 1.964.164 3.601.328 4.91.573v25.938c-1.227-.41-3.109-.819-5.646-1.146a58.814 58.814 0 0 0-7.446-.49c-5.155 0-9.738 1.145-13.829 3.354-4.091 2.209-7.282 5.236-9.655 9.164-2.373 3.927-3.519 8.427-3.519 13.5v70.448h-28.312ZM222.077 39.192l-8.019 125.923L137.387 0l84.69 39.192Zm-53.105 162.825-57.933 33.056-57.934-33.056 11.783-28.556h92.301l11.783 28.556ZM111.039 62.675l30.357 73.803H80.681l30.358-73.803ZM7.937 165.115 0 39.192 84.69 0 7.937 165.115Z" + /> + <path + fill="url(#c)" + d="M388.676 191.625h30.849L363.31 31.828h-35.758l-56.215 159.797h30.848l13.174-39.356h60.061l13.256 39.356Zm-65.461-62.675 21.602-64.311h1.227l21.602 64.311h-44.431Zm126.831-7.527v70.202h-28.23V71.839h27.002v20.374h1.392c2.782-6.71 7.2-12.028 13.255-15.956 6.056-3.927 13.584-5.89 22.503-5.89 8.264 0 15.465 1.8 21.684 5.318 6.137 3.518 10.964 8.673 14.319 15.382 3.437 6.71 5.074 14.81 4.992 24.383v76.175h-28.23v-71.92c0-8.019-2.046-14.237-6.219-18.819-4.173-4.5-9.819-6.791-17.102-6.791-4.91 0-9.328 1.063-13.174 3.272-3.846 2.128-6.792 5.237-9.001 9.328-2.046 4.009-3.191 8.918-3.191 14.728ZM589.233 239c-10.147 0-18.82-1.391-26.103-4.091-7.282-2.7-13.092-6.382-17.511-10.964-4.418-4.582-7.528-9.655-9.164-15.219l25.448-6.136c1.145 2.372 2.782 4.663 4.991 6.954 2.209 2.291 5.155 4.255 8.837 5.81 3.683 1.554 8.428 2.291 14.074 2.291 8.019 0 14.647-1.964 19.884-5.81 5.237-3.845 7.856-10.227 7.856-19.064v-22.665h-1.391c-1.473 2.946-3.601 5.892-6.383 9.001-2.782 3.109-6.464 5.645-10.965 7.691-4.582 2.046-10.228 3.109-17.101 3.109-9.165 0-17.511-2.209-25.039-6.545-7.446-4.337-13.42-10.883-17.757-19.474-4.418-8.673-6.628-19.473-6.628-32.565 0-13.091 2.21-24.301 6.628-33.383 4.419-9.082 10.311-15.955 17.839-20.7 7.528-4.746 15.874-7.037 25.039-7.037 7.037 0 12.846 1.145 17.347 3.518 4.582 2.373 8.182 5.236 10.883 8.51 2.7 3.272 4.746 6.382 6.137 9.327h1.554v-19.8h27.821v121.749c0 10.228-2.454 18.737-7.364 25.447-4.91 6.709-11.538 11.7-20.048 15.055-8.509 3.355-18.165 4.991-28.884 4.991Zm.245-71.266c5.974 0 11.047-1.473 15.302-4.337 4.173-2.945 7.446-7.118 9.573-12.519 2.21-5.482 3.274-12.027 3.274-19.637 0-7.609-1.064-14.155-3.274-19.8-2.127-5.646-5.318-10.064-9.491-13.255-4.174-3.11-9.329-4.746-15.384-4.746s-11.537 1.636-15.792 4.91c-4.173 3.272-7.365 7.772-9.492 13.418-2.128 5.727-3.191 12.191-3.191 19.392 0 7.2 1.063 13.745 3.273 19.228 2.127 5.482 5.318 9.736 9.573 12.764 4.174 3.027 9.41 4.582 15.629 4.582Zm141.56-26.51V71.839h28.23v119.786h-27.412v-21.273h-1.227c-2.7 6.709-7.119 12.191-13.338 16.446-6.137 4.255-13.747 6.382-22.748 6.382-7.855 0-14.81-1.718-20.783-5.237-5.974-3.518-10.72-8.591-14.075-15.382-3.355-6.709-5.073-14.891-5.073-24.464V71.839h28.312v71.921c0 7.609 2.046 13.664 6.219 18.083 4.173 4.5 9.655 6.709 16.365 6.709 4.173 0 8.183-.982 12.111-3.028 3.927-2.045 7.118-5.072 9.655-9.082 2.537-4.091 3.764-9.164 3.764-15.218Zm65.707-109.395v159.796h-28.23V31.828h28.23Zm44.841 162.169c-7.61 0-14.402-1.391-20.457-4.091-6.055-2.7-10.883-6.791-14.32-12.109-3.518-5.319-5.237-11.946-5.237-19.801 0-6.791 1.228-12.355 3.765-16.773 2.536-4.419 5.891-7.937 10.228-10.637 4.337-2.618 9.164-4.664 14.647-6.055 5.4-1.391 11.046-2.373 16.856-3.027 7.037-.737 12.683-1.391 17.102-1.964 4.337-.573 7.528-1.555 9.574-2.782 1.963-1.309 3.027-3.273 3.027-5.973v-.491c0-5.891-1.718-10.391-5.237-13.664-3.518-3.191-8.51-4.828-15.056-4.828-6.955 0-12.356 1.473-16.447 4.5-4.009 3.028-6.71 6.546-8.183 10.719l-26.348-3.764c2.046-7.282 5.483-13.336 10.31-18.328 4.746-4.909 10.638-8.59 17.511-11.045 6.955-2.455 14.565-3.682 22.912-3.682 5.809 0 11.537.654 17.265 2.045s10.965 3.6 15.711 6.71c4.746 3.109 8.51 7.282 11.455 12.6 2.864 5.318 4.337 11.946 4.337 19.883v80.184h-27.166v-16.446h-.9c-1.719 3.355-4.092 6.464-7.201 9.328-3.109 2.864-6.955 5.237-11.619 6.955-4.828 1.718-10.229 2.536-16.529 2.536Zm7.364-20.701c5.646 0 10.556-1.145 14.729-3.354 4.173-2.291 7.364-5.237 9.655-9.001 2.292-3.763 3.355-7.854 3.355-12.273v-14.155c-.9.737-2.373 1.391-4.5 2.046-2.128.654-4.419 1.145-7.037 1.636-2.619.491-5.155.9-7.692 1.227-2.537.328-4.746.655-6.628.901-4.173.572-8.019 1.472-11.292 2.781-3.355 1.31-5.973 3.11-7.855 5.401-1.964 2.291-2.864 5.318-2.864 8.918 0 5.237 1.882 9.164 5.728 11.782 3.682 2.782 8.51 4.091 14.401 4.091Zm64.643 18.328V71.839h27.412v19.965h1.227c2.21-6.955 5.974-12.274 11.292-16.038 5.319-3.763 11.456-5.645 18.329-5.645 1.555 0 3.355.082 5.237.163 1.964.164 3.601.328 4.91.573v25.938c-1.227-.41-3.109-.819-5.646-1.146a58.814 58.814 0 0 0-7.446-.49c-5.155 0-9.738 1.145-13.829 3.354-4.091 2.209-7.282 5.236-9.655 9.164-2.373 3.927-3.519 8.427-3.519 13.5v70.448h-28.312ZM222.077 39.192l-8.019 125.923L137.387 0l84.69 39.192Zm-53.105 162.825-57.933 33.056-57.934-33.056 11.783-28.556h92.301l11.783 28.556ZM111.039 62.675l30.357 73.803H80.681l30.358-73.803ZM7.937 165.115 0 39.192 84.69 0 7.937 165.115Z" + /> + </g> + <defs> + <radialGradient + id="c" + cx="0" + cy="0" + r="1" + gradientTransform="rotate(118.122 171.182 60.81) scale(205.794)" + gradientUnits="userSpaceOnUse" + > + <stop stop-color="#FF41F8" /> + <stop offset=".707" stop-color="#FF41F8" stop-opacity=".5" /> + <stop offset="1" stop-color="#FF41F8" stop-opacity="0" /> + </radialGradient> + <linearGradient + id="b" + x1="0" + x2="982" + y1="192" + y2="192" + gradientUnits="userSpaceOnUse" + > + <stop stop-color="#F0060B" /> + <stop offset="0" stop-color="#F0070C" /> + <stop offset=".526" stop-color="#CC26D5" /> + <stop offset="1" stop-color="#7702FF" /> + </linearGradient> + <clipPath id="a"><path fill="#fff" d="M0 0h982v239H0z" /></clipPath> + </defs> + </svg> + <h1>Hello, {{ title }}</h1> + <p>Congratulations! Your app is running. 🎉</p> + </div> + <div class="divider" role="separator" aria-label="Divider"></div> + <div class="right-side"> + <div class="pill-group"> + @for (item of [ + { title: 'Explore the Docs', link: 'https://angular.dev' }, + { title: 'Learn with Tutorials', link: 'https://angular.dev/tutorials' }, + { title: 'CLI Docs', link: 'https://angular.dev/tools/cli' }, + { title: 'Angular Language Service', link: 'https://angular.dev/tools/language-service' }, + { title: 'Angular DevTools', link: 'https://angular.dev/tools/devtools' }, + ]; track item.title) { + <a + class="pill" + [href]="item.link" + target="_blank" + rel="noopener" + > + <span>{{ item.title }}</span> + <svg + xmlns="http://www.w3.org/2000/svg" + height="14" + viewBox="0 -960 960 960" + width="14" + fill="currentColor" + > + <path + d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h280v80H200v560h560v-280h80v280q0 33-23.5 56.5T760-120H200Zm188-212-56-56 372-372H560v-80h280v280h-80v-144L388-332Z" + /> + </svg> + </a> + } + </div> + <div class="social-links"> + <a + href="https://github.com/angular/angular" + aria-label="Github" + target="_blank" + rel="noopener" + > + <svg + width="25" + height="24" + viewBox="0 0 25 24" + fill="none" + xmlns="http://www.w3.org/2000/svg" + alt="Github" + > + <path + d="M12.3047 0C5.50634 0 0 5.50942 0 12.3047C0 17.7423 3.52529 22.3535 8.41332 23.9787C9.02856 24.0946 9.25414 23.7142 9.25414 23.3871C9.25414 23.0949 9.24389 22.3207 9.23876 21.2953C5.81601 22.0377 5.09414 19.6444 5.09414 19.6444C4.53427 18.2243 3.72524 17.8449 3.72524 17.8449C2.61064 17.082 3.81137 17.0973 3.81137 17.0973C5.04697 17.1835 5.69604 18.3647 5.69604 18.3647C6.79321 20.2463 8.57636 19.7029 9.27978 19.3881C9.39052 18.5924 9.70736 18.0499 10.0591 17.7423C7.32641 17.4347 4.45429 16.3765 4.45429 11.6618C4.45429 10.3185 4.9311 9.22133 5.72065 8.36C5.58222 8.04931 5.16694 6.79833 5.82831 5.10337C5.82831 5.10337 6.85883 4.77319 9.2121 6.36459C10.1965 6.09082 11.2424 5.95546 12.2883 5.94931C13.3342 5.95546 14.3801 6.09082 15.3644 6.36459C17.7023 4.77319 18.7328 5.10337 18.7328 5.10337C19.3942 6.79833 18.9789 8.04931 18.8559 8.36C19.6403 9.22133 20.1171 10.3185 20.1171 11.6618C20.1171 16.3888 17.2409 17.4296 14.5031 17.7321C14.9338 18.1012 15.3337 18.8559 15.3337 20.0084C15.3337 21.6552 15.3183 22.978 15.3183 23.3779C15.3183 23.7009 15.5336 24.0854 16.1642 23.9623C21.0871 22.3484 24.6094 17.7341 24.6094 12.3047C24.6094 5.50942 19.0999 0 12.3047 0Z" + /> + </svg> + </a> + <a + href="https://twitter.com/angular" + aria-label="Twitter" + target="_blank" + rel="noopener" + > + <svg + width="25" + height="20" + viewBox="0 0 25 20" + fill="none" + xmlns="http://www.w3.org/2000/svg" + alt="Twitter" + > + <path + d="M8.04524 20C17.3335 20 22.4138 12.3047 22.4138 5.63144C22.4138 5.41287 22.4138 5.19529 22.399 4.97869C23.3874 4.26381 24.2405 3.37867 24.9185 2.3647C23.9969 2.77329 23.0192 3.04112 22.018 3.15923C23.0723 2.52818 23.8613 1.53552 24.2382 0.366057C23.2469 0.954335 22.1624 1.36889 21.0315 1.59182C20.2701 0.782212 19.2631 0.246107 18.1663 0.0664704C17.0695 -0.113166 15.9441 0.0736804 14.9642 0.598096C13.9843 1.12251 13.2046 1.95526 12.7457 2.96748C12.2868 3.9797 12.1742 5.11495 12.4255 6.19756C10.4178 6.09685 8.45366 5.57507 6.66064 4.66609C4.86763 3.75712 3.28579 2.48127 2.01781 0.921344C1.37203 2.03306 1.17424 3.34911 1.46472 4.60154C1.75519 5.85397 2.51208 6.9486 3.58128 7.66257C2.77759 7.63903 1.9914 7.42221 1.28924 7.03049V7.09449C1.28956 8.26041 1.69316 9.39034 2.4316 10.2926C3.17003 11.1949 4.19783 11.8139 5.34067 12.0448C4.59721 12.2476 3.81715 12.2772 3.06045 12.1315C3.38327 13.1348 4.01156 14.0122 4.85746 14.641C5.70337 15.2698 6.72461 15.6185 7.77842 15.6384C6.73139 16.4614 5.53237 17.0699 4.24995 17.4291C2.96753 17.7882 1.62687 17.891 0.304688 17.7316C2.61411 19.2136 5.30121 19.9997 8.04524 19.9961" + /> + </svg> + </a> + <a + href="https://www.youtube.com/channel/UCbn1OgGei-DV7aSRo_HaAiw" + aria-label="Youtube" + target="_blank" + rel="noopener" + > + <svg + width="29" + height="20" + viewBox="0 0 29 20" + fill="none" + xmlns="http://www.w3.org/2000/svg" + alt="Youtube" + > + <path + fill-rule="evenodd" + clip-rule="evenodd" + d="M27.4896 1.52422C27.9301 1.96749 28.2463 2.51866 28.4068 3.12258C29.0004 5.35161 29.0004 10 29.0004 10C29.0004 10 29.0004 14.6484 28.4068 16.8774C28.2463 17.4813 27.9301 18.0325 27.4896 18.4758C27.0492 18.9191 26.5 19.2389 25.8972 19.4032C23.6778 20 14.8068 20 14.8068 20C14.8068 20 5.93586 20 3.71651 19.4032C3.11363 19.2389 2.56449 18.9191 2.12405 18.4758C1.68361 18.0325 1.36732 17.4813 1.20683 16.8774C0.613281 14.6484 0.613281 10 0.613281 10C0.613281 10 0.613281 5.35161 1.20683 3.12258C1.36732 2.51866 1.68361 1.96749 2.12405 1.52422C2.56449 1.08095 3.11363 0.76113 3.71651 0.596774C5.93586 0 14.8068 0 14.8068 0C14.8068 0 23.6778 0 25.8972 0.596774C26.5 0.76113 27.0492 1.08095 27.4896 1.52422ZM19.3229 10L11.9036 5.77905V14.221L19.3229 10Z" + /> + </svg> + </a> + </div> + </div> + </div> +</main> + +<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> +<!-- * * * * * * * * * * * The content above * * * * * * * * * * * * --> +<!-- * * * * * * * * * * is only a placeholder * * * * * * * * * * * --> +<!-- * * * * * * * * * * and can be replaced. * * * * * * * * * * * --> +<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> +<!-- * * * * * * * * * * End of Placeholder * * * * * * * * * * * * --> +<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> + + +<router-outlet></router-outlet> diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts new file mode 100644 index 0000000..9daa472 --- /dev/null +++ b/src/app/app.component.spec.ts @@ -0,0 +1,29 @@ +import { TestBed } from '@angular/core/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AppComponent], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it(`should have the 'angular-project' title`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app.title).toEqual('angular-project'); + }); + + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('h1')?.textContent).toContain('Hello, angular-project'); + }); +}); diff --git a/src/app/app.component.ts b/src/app/app.component.ts new file mode 100644 index 0000000..9ea3ec1 --- /dev/null +++ b/src/app/app.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { RouterOutlet } from '@angular/router'; + +@Component({ + selector: 'app-root', + standalone: true, + imports: [CommonModule, RouterOutlet], + templateUrl: './app.component.html', + styleUrl: './app.component.css' +}) +export class AppComponent { + title = 'angular-project'; +} diff --git a/src/app/app.config.server.ts b/src/app/app.config.server.ts new file mode 100644 index 0000000..b4d57c9 --- /dev/null +++ b/src/app/app.config.server.ts @@ -0,0 +1,11 @@ +import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; +import { provideServerRendering } from '@angular/platform-server'; +import { appConfig } from './app.config'; + +const serverConfig: ApplicationConfig = { + providers: [ + provideServerRendering() + ] +}; + +export const config = mergeApplicationConfig(appConfig, serverConfig); diff --git a/src/app/app.config.ts b/src/app/app.config.ts new file mode 100644 index 0000000..e5a3cf1 --- /dev/null +++ b/src/app/app.config.ts @@ -0,0 +1,9 @@ +import { ApplicationConfig } from '@angular/core'; +import { provideRouter } from '@angular/router'; + +import { routes } from './app.routes'; +import { provideClientHydration } from '@angular/platform-browser'; + +export const appConfig: ApplicationConfig = { + providers: [provideRouter(routes), provideClientHydration()] +}; diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts new file mode 100644 index 0000000..dc39edb --- /dev/null +++ b/src/app/app.routes.ts @@ -0,0 +1,3 @@ +import { Routes } from '@angular/router'; + +export const routes: Routes = []; diff --git a/src/assets/.gitkeep b/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..57614f9c967596fad0a3989bec2b1deff33034f6 GIT binary patch literal 15086 zcmd^G33O9Omi+`8$@{|M-I6TH3wzF-p5CV8o}7f~KxR60LK+ApEFB<$bcciv%@SmA zV{n>g85YMFFeU*Uvl=i4v)C*qgnb;$GQ=3XTe9{Y%c`mO<tM&Bl57ox;hfPqkLUVT zzv|vsua^I+V3=M^Z)U^@hH5cWC})^|W*9~+?o5X>%su)noNCCQ*@t1WXn|B(hQ7i~ zrUK8|pUkD6#lNo!bt$6)jR!&C?`P5G(`e((P($RaLeq+o0Vd~f11;qB05kdbAOm?r zXv~GYr_sibQO9NGTCdT;+G(!{4Xs@4fPak8#L8PjgJwcs-Mm#nR_Z0s&u?nDX5^~@ z+A6?}g0|=4e_LoE69pPFO`yCD@BCjgKpzMH0O4Xs{Ahc?K3<?BQv_-<UC>HC5;l=f zg>}alhBXX&);z$E-wai+9TTRtBX-bWYY@cl$@YN#gMd~tM_5lj6W%8ah4;uZ;jP@Q zVbuel1rPA?2@x9Y+u?e`l{Z4ngfG5q5BLH5QsEu4GVpt{KIp1?U)=3+KQ;%7ec8l* zdV=zZgN5>O3G(3L2fqj3;oBbZZw$Ij@`Juz@?+yy#OPw)>#wsTewVgTK9BGt5Ab<U ze$Tf(VBZpa!SSqoXlj(c_>Z&?K&B3GVF&yu?@(Xj3fR3n+ZP0%+wo)D9_xp>Z$`A4 zfV>}NWjO#3lqumR0`gvnffd9Ka}JJMuHS&|55-*mCD#8e^anA<+sFZVaJe7{=p*oX zE_Uv?1>e~ga=seYzh{9P+n5<+7&9}<n&VL-3~Og{<S)TZE4h*#P`v^L#_Z0pidV7T z|Ib<xXZ+do&R-q5D%lf8SW`2_x^ho>&(kwqSaz;1aD|YM3HBiy<))4~QJSIryyqp| z8nGc(8<b%O&Bp|DVqS`wWF{E*^YfmUv_Uw3r7mDGG4`GR*q(1;f_^;UhdzKc_IbgK zICR2{aDBicoldxr=tGynCuo=7-^G>>3(_nEI4n)n7j(&d4idW1tVLjZ7QbNLXg;LB ziHsS5pXHEjGJZb59K<i<Ee&OtiLJ`)M3V_+b)4D=vLUwF0FoC|YuFKcTMx1?`byI+ z(a~UU_3@v>cvS~wv;uZR-+4qEq<Dv4CQD>ow`;JCfB*+b^UL^3!?;-^F%yt=VjU|v z39SSqKcRu_NVvz!zJzL0CceJaS6%!(eMshPv_0U5G`~!a#I$qI5Ic(>IONej@aH=f z)($TAT#1I{iCS4f{D2+ApS=$3E7}5=+y(rA9mM#;Cky%b*Gi0KfFA`ofKTzu`AV-9 znW|y@19rrZ*!N2AvDi<_ZeR3O2R{#dh1#3-d%$k${Rx42h+i&GZo5!C^dSL34*AKp z27mTd>k>?V&X;Nl%GZ(>0s`1UN~Hfyj>KPjtnc|)xM@{H_B9rNr~LuH`Gr5_am&Ep zTjZA8hljNj5H1Ipm-uD9rC}U{-vR!eay5&6x6FkfupdpT*84MVwGpdd(}ib)zZ3Ky z7C$p<Hy;Do`sgqRiyt`v4|vWm>njc82(W_y_F{PhYj?o!@3__UUvpX)v69aBSzYj3 zdi}YQkKs^SyXyFG2LTRz9{(w}y~!`{EuAaUr6G1M{*%c+kP1olW9z23dSH!G4_HSK zzae-DF$OGR{ofP*!$a(r^5Go>I3SObVI6FLY)N@o<*gl0&kLo-OT{Tl*7nCz>Iq=? zcigIDHtj|H;6sR?or8Wd_a4996GI*CXGU}o;D9`^FM!AT1pBY~?|4h^61BY#_yIfO zKO?E0<gGmaIqZ?!V)C4TU)ygD!7%{#2Z4PA_Z^sH&W~^s5a8g62h300cYOT~^&L-X zs{`!igBqM?Qtqn#Sxdn7fL{~!Wf%O|2f%?lFT#H9GR1z8V(0SU_6798%0zpQ{r8}> zJ{Pc`9rVEI&$xxXu`<5E)&+m(7zX^v0rqofLs&bnQT(1baQkAr^kEsk)15vlzAZ-l z@OO9RF<+IiJ*O@HE256gCt!bF=NM*vh|WVWmjVawcNoksRTMvR03H{p@cjwKh(CL4 z7_<J2TUZ-fC3|#k{4sefes&DdKHzfT?xA7by!j#_$N_mE2QCko-_cgxX^3a~Gj3bO zh1n|c9@3V$%VmFxUpsIkI|le1U~R+pH;ZhUcPM`3fIK|;(}}_D7Jv5E*hY66_Q+s+ z#P99{^dX#!I{SgUhb|CXHv)d-aD(~|p96PnL;3FT_?zD%*}XuSbdV?|`-w_aMBMmk zAF%Tf?FSeO*bj6Zxc5<ek}UfWKXSmnKwrYX0H1<B@Mk{kjtk6%P4be4R_PHJevS{Z z<Jc1i`aOpA!o0%8j~uxDfIOfdKn_W?8TkH_>PB(dM=kO)!s4fW!1p0f93YN@?ZSG` z$B!JaAJCtW$B97}HNO9(x-t30&E}Mo1UPi@Av%uHj~?T|!4JLwV;KCx8xO#b9IlUW zI6+{a@Wj|<2Y=U;a@vXbxqZNngH8^}LleE_4*0&O7#3iGxfJ%Id>+sb;7{L=aIic8 z|EW|{{S)J-wr@;3PmlxRXU8!e2gm_%s|ReH!reFcY8%$Hl4M5>;6^UDUUae?kOy#h zk~6Ee_@ZAn48Bab__^bN<q%(Zo;%n3!t5yz_MM01_UnKdcmN0F0eu1cG*9pK<QcVj zCE`a8h+jo<1HYcs(~~mrT~Z>mQ~+k=02<Q%#1pWs`lOPf^+T!%;71PNLrT%U!`!_M zmVa6r&e&kR0N(-pH(zWg=abv~iYWk=#*}l%06$1$+68m7_~<rIaoMMZn_myiS+E9N z9c(rN2Y<c|)w1&Vx}i7Q>jz)e0d9Z3>G?RGG!65?d1>9}7iG17?P*=GUV-#<F7Z__ zAx;G$3`2-b<kGq@m#*mT(vU~R!7%BdZ44s<O~2s6xM_Tj<xo2rMgis6-y^Msw3T5{ zH$%FaVNln1rq2?J<6DL~?bi1NWI4lB5UMjlQ@p)7TA>SbLRw)Hu{zx*azHxWk<Mz7 zBi#mR)L~AA4$`Ovgxsg;4Aj&LY?|r{c;1U@deR6wgX#*<0*0}Hl|&5V1g)SvGZfBV z!27<!DFAItcd&MIraQRyfO}eED!-xPzNh8>GNTWl@HeWjA?39Ia|sCi{e;!^`1Oec zb>Z|b65OM*;eC=ZLSy?_fg$&^2xI>qSLA2G*$nA3GEnp3$N-)46`|36m*sc#4%C|h zBN<2U;7k>&G_wL4=Ve5z`ubVD&*Hxi)r@{4RCDw7U_D`lbC(9&pG5C*z#W>8>HU)h z!h3g?2UL&sS!oY5$3?VlA0Me9W5e~V;2jds*fz^updz#AJ%G8w2V}AEE?E^=MK%Xt z__Bx1cr7+DQmuHmzn*|hh%~eEc9@m05@clWfpEFcr+06%0&dZJH&@8^&@*$qR@}o3 z@Tuuh2FsLz^zH+dN&T&?0G3I?MpmYJ;GP$J!Ez<EAfkuO_$)Rv+PDYrG)x<4BOp`h zJq(cPAzCs!NJ-`dHj*yfLn^oUtkjRp8S#4g%oyu5l=laiCeIjXeRo!v{vD9N4p5I@ z98&uSkbeYJjm-`IZftS%xyQ~@eKol<O7B;BUv+ht$L|-IQxpmM{O;a+TKU@GrHk8w zzHpzF&yO{vu9KTAfa7Vk;jJEMR~wk2GzTtlp9L?7)Bfw`R5Qtl*RJvQ-qU)n30^u| zAMiOntNttv>jeM#YLJ!W$}MVNb0^HfOA>5Fe~UNn%Zk(PT@~9}1d<z7w`*I>t)1UQ zU*B5K?Dl#G74qmg|2>^>0WtLX#Jz{lO4NT`NYB*(L#D|5IpXr9v&7a@YsGp3vLR7L zHYGHZg7{ie6n~2p$6Yz>=^cEg7tEgk-1YRl%-s7^cbqFb(U7&Dp78+&ut5!Tn(hER z|Gp4Ed@CnOPeAe|N>U(dB;SZ?NU^AzoD^UAH_vamp6Ws}{|mSq`^+VP1<S4$8S@Se zdq@Do?xA+FBFXjv=6TY2GV_CcsfKO8P|`pSB>g~2B{%N-!mWz<`)G)<vVBk6H#4){ z=Vu$l=6$8~d<`)`{hr#zXE}+Q>>V-<`9`L4?3dM%Qh6<@kba+m`JS{Ya@9Fq*m6$$ zA1%Ogc~VRH33|S9l%CNb4zM%k^EIpqY}@h{w(aBcJ9c05oiZx#SK9t->5lSI`=&l~ z+-Ic)a{FbBhXV$Xt!WRd`R#Jk-$+_Z52rS>?Vpt2IK<84|E-SBEoIw>cs=a{BlQ7O z-?{Fy_M&84&9|KM5wt~)*!~i~E=(6m8(uCO)I=)M?)&sRbzH$9Rovzd?ZEY}GqX+~ zFbEbLz`BZ49=2Yh-|<`waK-_4!7`ro@zlC|r&I4fc4oyb+m=|c8)8%tZ-z5FwhzDt zL5kB@u53`d@%nHl0Sp)Dw`(QU&>vujEn?GPEXUW!Wi<+4e%BORl&BIH+SwRcbS}X@ z01Pk|vA%OdJKAs17zSXtO55k!;%m9>1eW9LnyAX4uj7@${O6cfii`49qTNItzny5J zH&Gj`e}o}?xjQ}r?LrI%FjUd@xflT3|7LA|ka%Q3i}a8gVm<D-KiB{<ME*mIIJvPX z_?wI2B8`LWm6;zq*T#3f=@x16x)y0E8#iX#r#5i)1K5F{J<#z8^A*_d?BI4g#=_WG z(g+s@><`HIWoJGH=$EGClX^C0lysQJ>UO(q&;`T#8txuoQ_{l^kEV9CAdXuU1Ghg8 zN_6hHFuy&1x<z(mSz}ryX-+vs&<1V{v0JO#2INfkHdp6~?c+=2jv8nmG2EbI;k%(W z3#`BVw)knNw=uO+>24q5-(Z7;!poYdt*`UTdrQOIQ!2O7_+AHV2hgXaEz7)>$LEdG z<8vE^T<d5Y^c`tRKI2e{51fJd7xVqqF#b=-4dqqC+dHlfHtM^3zdr491GL{FId%-@ zzV6ERH2;j~e#`|~>w$|YwZHZDPM!SNOAWG$?J)MdmEk{U!!$M#fp7<eLLj6-0}zjd zxPG-%QE9&hq6;&EEVqg3K{9Qkvzd<c(@PxbOO`klOER2_UKxZ64OOs`?&y_4<-W)! zu!(5=B+RBDtM!Cvtpwr}u;~?3amOjT^)gzx^Y@#+ZK)%L=92#qnvVRTuhG4y#C&gh zOh`k&Q6cJ8uLT)xqv-#~qA>*Wo}jJ$Q(=8>R`Ats?e|VU?Zt7Cdh%AdnfyN3MBWw{ z$OnREvPf7%z6`#2##_7id|H%Y{vV^vWXb?5d5?a_y&t3@p9t$ncHj-NBdo&X{wrfJ zamN)VMYROYh_SvjJ=Xd!Ga?PY_$;*L=SxFte!4O6%0HEh%iZ4=gvns7IWIyJHa|hT z2;1+e)`TvbNb3-0z&DD_)Jomsg-7p_Uh`wjGnU1urmv1_oVqRg#=C?e?!7DgtqojU zWoAB($&53;TsXu^@2;8M`#z{=rPy?JqgYM0CDf4v@z=ZD|ItJ&8%_7A#K?S{wjxgd z?xA6JdJojrWpB7fr2p_MSsU4(R7=XGS0+Eg#xR=j>`H@R9<ea9ez7LeH1EXlc5;O7 ztyW0w<FMRxhWuo2a;v&b{)6_e><EpxxqhnnP3hXmmGoW-y_ed1?&u9-%Np39lvDXS zwf#1h1ARzZx2-}}-Q{~*8MpP6hORNjkfroq+=9v5#P(g+JNFl`x5yD$U&cDhl4|7V zQZBh;Xw6B5KUF5~r1wPVo`qsCge>{XjwBm<mI-HNm*^V3KiPH_-{<RAX>qAiOxOL` zt?XK-iTEOWV}f<c$uy@9)|c<;`&Ve3zDTSb!GBjJDNSifJ=LyEDrVO#x^Jk`^;`W4 zmdh78CX~tTHPw_uMY8rRK1basFF)9ndd}G@+ILMGyZH@#&esP-no*U>>Pz3H-s*>W z4~8C&Xq25UQ^xH6H9kY_RM1$ch+%YLF72AA7^b{~VNTG}Tj#qZltz5Q=qxR`&oIlW Nr__JTFzvMr^FKp4S3v*( literal 0 HcmV?d00001 diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..2e7d4ea --- /dev/null +++ b/src/index.html @@ -0,0 +1,13 @@ +<!doctype html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>AngularProject</title> + <base href="/"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="icon" type="image/x-icon" href="favicon.ico"> +</head> +<body> + <app-root></app-root> +</body> +</html> diff --git a/src/main.server.ts b/src/main.server.ts new file mode 100644 index 0000000..4b9d4d1 --- /dev/null +++ b/src/main.server.ts @@ -0,0 +1,7 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { AppComponent } from './app/app.component'; +import { config } from './app/app.config.server'; + +const bootstrap = () => bootstrapApplication(AppComponent, config); + +export default bootstrap; diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..35b00f3 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,6 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { appConfig } from './app/app.config'; +import { AppComponent } from './app/app.component'; + +bootstrapApplication(AppComponent, appConfig) + .catch((err) => console.error(err)); diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 0000000..90d4ee0 --- /dev/null +++ b/src/styles.css @@ -0,0 +1 @@ +/* You can add global styles to this file, and also import other style files */ diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..7dc7284 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,18 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [ + "node" + ] + }, + "files": [ + "src/main.ts", + "src/main.server.ts", + "server.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..f37b67f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,33 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "esModuleInterop": true, + "sourceMap": true, + "declaration": false, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": [ + "ES2022", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/tsconfig.spec.json b/tsconfig.spec.json new file mode 100644 index 0000000..be7e9da --- /dev/null +++ b/tsconfig.spec.json @@ -0,0 +1,14 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} -- GitLab From 95c2658a0b104b7ea9d0a2d6dd10e4acdaaefb96 Mon Sep 17 00:00:00 2001 From: Daniel Prevuznak <daniel.prevuznak@kosickaakademia.com> Date: Wed, 13 Dec 2023 06:53:32 +0100 Subject: [PATCH 02/32] fixed previous commit --- angular.json | 11 +- package-lock.json | 886 +++++++++++++++++- package.json | 4 + src/app/app.component.html | 337 +------ src/app/app.component.ts | 15 +- src/app/app.config.ts | 3 +- src/app/app.routes.ts | 5 +- .../display-list/display-list.component.css | 12 + .../display-list/display-list.component.html | 5 + .../display-list.component.spec.ts | 23 + .../display-list/display-list.component.ts | 24 + src/app/navigation/navigation.component.css | 3 + src/app/navigation/navigation.component.html | 24 + .../navigation/navigation.component.spec.ts | 23 + src/app/navigation/navigation.component.ts | 13 + .../shopping-list/shopping-list.component.css | 0 .../shopping-list.component.html | 2 + .../shopping-list.component.spec.ts | 23 + .../shopping-list/shopping-list.component.ts | 15 + src/app/sidebar/sidebar.component.css | 28 + src/app/sidebar/sidebar.component.html | 5 + src/app/sidebar/sidebar.component.spec.ts | 23 + src/app/sidebar/sidebar.component.ts | 87 ++ src/entities/ShoppingList.ts | 8 + src/entities/shoppingItem.ts | 8 + src/index.html | 4 +- src/services/event-service.service.ts | 9 + src/services/list-service.service.spec.ts | 16 + src/services/list-service.service.ts | 37 + src/styles.css | 3 + 30 files changed, 1311 insertions(+), 345 deletions(-) create mode 100644 src/app/display-list/display-list.component.css create mode 100644 src/app/display-list/display-list.component.html create mode 100644 src/app/display-list/display-list.component.spec.ts create mode 100644 src/app/display-list/display-list.component.ts create mode 100644 src/app/navigation/navigation.component.css create mode 100644 src/app/navigation/navigation.component.html create mode 100644 src/app/navigation/navigation.component.spec.ts create mode 100644 src/app/navigation/navigation.component.ts create mode 100644 src/app/shopping-list/shopping-list.component.css create mode 100644 src/app/shopping-list/shopping-list.component.html create mode 100644 src/app/shopping-list/shopping-list.component.spec.ts create mode 100644 src/app/shopping-list/shopping-list.component.ts create mode 100644 src/app/sidebar/sidebar.component.css create mode 100644 src/app/sidebar/sidebar.component.html create mode 100644 src/app/sidebar/sidebar.component.spec.ts create mode 100644 src/app/sidebar/sidebar.component.ts create mode 100644 src/entities/ShoppingList.ts create mode 100644 src/entities/shoppingItem.ts create mode 100644 src/services/event-service.service.ts create mode 100644 src/services/list-service.service.spec.ts create mode 100644 src/services/list-service.service.ts diff --git a/angular.json b/angular.json index 611e893..63c2ac2 100644 --- a/angular.json +++ b/angular.json @@ -25,9 +25,14 @@ "src/assets" ], "styles": [ + "@angular/material/prebuilt-themes/indigo-pink.css", + "node_modules/bootstrap/dist/css/bootstrap.min.css", + "node_modules/bootstrap-icons/font/bootstrap-icons.css", "src/styles.css" ], - "scripts": [], + "scripts": [ + "node_modules/bootstrap/dist/js/bootstrap.bundle.min.js" + ], "server": "src/main.server.ts", "prerender": true, "ssr": { @@ -89,6 +94,7 @@ "src/assets" ], "styles": [ + "@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.css" ], "scripts": [] @@ -96,5 +102,8 @@ } } } + }, + "cli": { + "analytics": "0692ccd4-cf15-4886-8e58-9972e5f117a5" } } diff --git a/package-lock.json b/package-lock.json index 8f7e2b0..4d6fb2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,15 +9,19 @@ "version": "0.0.0", "dependencies": { "@angular/animations": "^17.0.0", + "@angular/cdk": "^17.0.3", "@angular/common": "^17.0.0", "@angular/compiler": "^17.0.0", "@angular/core": "^17.0.0", "@angular/forms": "^17.0.0", + "@angular/material": "^17.0.3", "@angular/platform-browser": "^17.0.0", "@angular/platform-browser-dynamic": "^17.0.0", "@angular/platform-server": "^17.0.0", "@angular/router": "^17.0.0", "@angular/ssr": "^17.0.6", + "bootstrap": "^5.3.2", + "bootstrap-icons": "^1.11.2", "express": "^4.18.2", "rxjs": "~7.8.0", "tslib": "^2.3.0", @@ -268,6 +272,22 @@ "@angular/core": "17.0.6" } }, + "node_modules/@angular/cdk": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.0.3.tgz", + "integrity": "sha512-Qd5uvC09B3+uk2uX1JxmiWrD7wueMHSxNBoCbDEmnrsdDVUta0wN/jj/CtATljxUM8ZqvEvkqgxJCig1od9oyQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "parse5": "^7.1.2" + }, + "peerDependencies": { + "@angular/common": "^17.0.0 || ^18.0.0", + "@angular/core": "^17.0.0 || ^18.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, "node_modules/@angular/cli": { "version": "17.0.6", "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.0.6.tgz", @@ -396,6 +416,70 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, + "node_modules/@angular/material": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-17.0.3.tgz", + "integrity": "sha512-a7l5hMMCMobULAjwPK8HVQmOsbd3pOwju1QdBVhec0XwNGj2pK4ooKWdUmQcwsUA9DaZaOwAgEISHEADXJfKpQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/auto-init": "15.0.0-canary.a246a4439.0", + "@material/banner": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/button": "15.0.0-canary.a246a4439.0", + "@material/card": "15.0.0-canary.a246a4439.0", + "@material/checkbox": "15.0.0-canary.a246a4439.0", + "@material/chips": "15.0.0-canary.a246a4439.0", + "@material/circular-progress": "15.0.0-canary.a246a4439.0", + "@material/data-table": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dialog": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/drawer": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/fab": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/floating-label": "15.0.0-canary.a246a4439.0", + "@material/form-field": "15.0.0-canary.a246a4439.0", + "@material/icon-button": "15.0.0-canary.a246a4439.0", + "@material/image-list": "15.0.0-canary.a246a4439.0", + "@material/layout-grid": "15.0.0-canary.a246a4439.0", + "@material/line-ripple": "15.0.0-canary.a246a4439.0", + "@material/linear-progress": "15.0.0-canary.a246a4439.0", + "@material/list": "15.0.0-canary.a246a4439.0", + "@material/menu": "15.0.0-canary.a246a4439.0", + "@material/menu-surface": "15.0.0-canary.a246a4439.0", + "@material/notched-outline": "15.0.0-canary.a246a4439.0", + "@material/radio": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/segmented-button": "15.0.0-canary.a246a4439.0", + "@material/select": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/slider": "15.0.0-canary.a246a4439.0", + "@material/snackbar": "15.0.0-canary.a246a4439.0", + "@material/switch": "15.0.0-canary.a246a4439.0", + "@material/tab": "15.0.0-canary.a246a4439.0", + "@material/tab-bar": "15.0.0-canary.a246a4439.0", + "@material/tab-indicator": "15.0.0-canary.a246a4439.0", + "@material/tab-scroller": "15.0.0-canary.a246a4439.0", + "@material/textfield": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tooltip": "15.0.0-canary.a246a4439.0", + "@material/top-app-bar": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^17.0.0 || ^18.0.0", + "@angular/cdk": "17.0.3", + "@angular/common": "^17.0.0 || ^18.0.0", + "@angular/core": "^17.0.0 || ^18.0.0", + "@angular/forms": "^17.0.0 || ^18.0.0", + "@angular/platform-browser": "^17.0.0 || ^18.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, "node_modules/@angular/platform-browser": { "version": "17.0.6", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.0.6.tgz", @@ -2799,6 +2883,758 @@ "node": ">= 0.4" } }, + "node_modules/@material/animation": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-0eV06UGYeuFwC/4t+yjg3LCRGRLq72ybBtJYzcBDpP4ASTjie0WmpAOFJYXRq2U5X/yxLviDMhpRemoSUjgZ0Q==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/auto-init": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/auto-init/-/auto-init-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-0QfmjT5elQ10hCxToVgq/WaC3301tVH1sJaO3O2yocVzr7s6iWm8/zch16V5hcHzQHbtcT3Rf4y1ZzmdNys2Iw==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/banner": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/banner/-/banner-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-PBLgH7JEbEpTkLy33oyWXUhIFmSsdOrR6Gn6qIgQRo1qrnk5RSBGW2gEq4Z6793vjxM107gKudDb23E4Fcu4vg==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/button": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/base": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-/ob3v3IFU8q2gGdVNWw5kNPjW2mRTeBIz1YdhGWUmRxKn2Kl8bdLOvrAmZtQMmPn/4cGXvinxpec/zVBWQKDkA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/button": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-rGpVRde0Aqhv2t9QvT8Zl3HvG89BeUNPOpgfpaLBZ4SGGAO4rIrckl/eCENibKgmmdCKcYZlG9gc5abQVPfUvw==", + "dependencies": { + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/card": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/card/-/card-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-+rYUnBPgv5QVF6BeUs3toIRdSwFVohGmjk2ptTXMZkKxqAJt7Nr9Znbm3Ym2hD8GUHJeh3pyGFvEs6rG6JMYAw==", + "dependencies": { + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/checkbox": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/checkbox/-/checkbox-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-sQwHzm1TSxHUoPrqplWTk/BhyzdDhzcwlbucwJK9W0o9WXMDk+d9PvcCxpP/9sAnVqZk42BfE89Y0T1DHglZ9A==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/chips": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/chips/-/chips-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-TiV9WJ5taEHPGWPhXbxJvUJhLzThg+VpK7aAlvL4RurtmJ7pURuEdRS4Z6o0OEqi3wKQ4z/+K44kZUn/+9HALg==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/checkbox": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/circular-progress": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/circular-progress/-/circular-progress-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-+QTfyExPWzgm2tqMInd32qQOftsC1b8MUhAhZSfuecYBfqAc7KZkQEKa2nm4y8EHKMFWe8/DcxLV6IxMBLgHwA==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/progress-indicator": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/data-table": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/data-table/-/data-table-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-89qVOjR7gqby6fsmh7tKj29SjQ2sGLXu2IzCeX3Vni4mz+xxo5dv11jxYNADvdgJDfhyDJFPh1FlqAH7O09nFA==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/checkbox": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/icon-button": "15.0.0-canary.a246a4439.0", + "@material/linear-progress": "15.0.0-canary.a246a4439.0", + "@material/list": "15.0.0-canary.a246a4439.0", + "@material/menu": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/select": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/density": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-h8BJVCWkPR97WeWCN6/atVbSOP8J4+ZbbssidcwsnX7b3+3IaWdtBxGii25dsILX8pUVwwqxVis24y211b+8rg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dialog": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-4lyxd+5ccOEMUGKzZcssaYyzkCsYTpYCSQSANR0toQPLv3voDwKMfA709uZI6+nL7Re6Xdf7jx8qe+QpTTjVcw==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/button": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/icon-button": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dom": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-AftSOGQoQg/Ys2kOVjZzvqWmsnhg3Kam/2UC4Gj0DMMCu36J4MAoD+3PpnOd1aG3wiJKtUXR2vPIwE8I/PM9yg==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/drawer": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-/JUmbzRBaikdbZ250yA9ZTPqp2W5nGvvuHYoNVAAmtOmxuwGvvNNpWiVZy2lIYeYcf1hA7hJ5mEQxs0aSD7iWQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/list": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/elevation": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-lwPIOb8fHyOljIWYcVLPT73dPIEOKat/CXu6gqYIVMQgZQIksQNUA7z1O3l7apkRSuYUOYSXqrgU7AnWP4KcJg==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/fab": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/fab/-/fab-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-XUex3FNqxPD1i/4jITucB/RWTNkkdv52mbNmwrvbuThZlhuhyH9GzOQYTDop/b2783TPcv++xr8UUbuh8GWYzA==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/feature-targeting": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-/SU9X5y8CRp6RS9qnjnM/N5qfsJ8bYILpR841eZmN6DLqMupaM9Yy7Mx8+v/QvpBLLhk+jmu79nFzwkwW54d6Q==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/floating-label": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-832qZ/qxKx0KUatoeVY3Q2NmboVgiWBG0/1VsbJyodHrgQWfnBOHgLE+M322o6uM3OhvO+kWm4iYbvwhmLZGsw==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/focus-ring": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/focus-ring/-/focus-ring-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-ar0BtACFS3K14k/enAg0ePeEA/f/RJY4Ji4L/00Dw/B3XVpNRbqLH49jkcbtcQjdTS0FEyk2sWSNMZl6wVi0/A==", + "dependencies": { + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0" + } + }, + "node_modules/@material/form-field": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/form-field/-/form-field-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-Q/+ErgtAUFUPPUmWA1m5IP5voiN8XjPRwyoAlFxSTa/4t+EA5B18Z8Bsn9b6I0AC8RHke06H7UWrKz8XUDIFpw==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/icon-button": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-Igyo94rkIlqC91BR1Tv+WLTz1ZWcZZjl1xU7Vsx8mbWA1PnaRDUTNVV5LFi4e0ORp6GSblFTImpHngEy4agMEg==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/image-list": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/image-list/-/image-list-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-Rcj3q7Tp7Nwbe5ht6ptTc3zqK8TSDJHaPDBf+kzi0kkh6MAB4qoHPgn+HnA+zIZ79CScU56bN7zjA6XYaZvsLw==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/layout-grid": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/layout-grid/-/layout-grid-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-bkfxZuVzgtjEJgR3n8pvDQbe88ffULDJ5d2DF34IR8SOiRmQcj7UzqAt95XwIUcWlfisLCoIryP4U8XSpFb1EQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/line-ripple": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-20WmwRrejmtOdI37+959UqEVIjbMtAXlkDOkfCIA3OUhp+oZSjVkCqKxI16jxxVlnzJ353fy8xeSKzOHe4sExQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/linear-progress": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-IcCd4476pXHloTYadHDJ+2c2lntoVigeNnQEiD/ASQTKqKrJqkIdvvczFm9Ryu+V2+TKhp7vvQGFLUMaLPcmhw==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/progress-indicator": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/list": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-4H5dKIjCUGIPmKjfcegV0SBybD5NNdHp26OU6sovvWIvxSGQtDJr6z9I7i+0vF/HIS5ScbHD2+9/txtL80iqCA==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/menu/-/menu-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-2HOHQAIdWQtXjSvEIrW3lnbcIwFf5XaQhFzCEZ04FcSGApc4iLwsmRFVW3PzWx+mVrUrEfO/K42DVULIX9J1Pg==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/list": "15.0.0-canary.a246a4439.0", + "@material/menu-surface": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu-surface": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-4h4wZ0Rs7qBg1Otldw8ljp+LCULNL42pqbqcTXhKAkJM7pHcSw4k7IfoThSRLU3+V8T3/+qiAXyeQix2OGHzwg==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/notched-outline": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-zmRZHJ+5cOWsBatRyK50wuht78olXySyKOJIIEmy8lxSMZefI1764u0mr8tS1KYF8vSAl5cUlwCC3/2Njz1FPg==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/floating-label": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/progress-indicator": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-92HM5niUnqG5Y3M/xkscBD+2lkaWPDcIRPo0RHPYcyldL+EhWRv/sdQpfdiXw/h3uvKSowKxBMCHm8krAyf+sQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/radio": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-on8EVztWXc/ajcaowFZ31ClGADYxQrhj4ulMne0NxdHHWQ44ttf5aXOVqtv5mxeOzrRACOkQyTUXBG07yTWCEQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/ripple": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-Vl615/PIBpBD+IOI9Xypz0SV3RsmYJYSNx890Rih7irhUOaPsOUBmTYOWF5AsGBynqLcXoTNVhK92drYLKtJwQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/rtl": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-pgJFw8ZRpWGpwv7ZuBTJ+WdNmFBKoLVoMbbxKQWTHXVwhAqn3aoIq95o62T5QeEG/+sguNShdquG45CpAMmSRw==", + "dependencies": { + "@material/theme": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/segmented-button": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/segmented-button/-/segmented-button-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-oqGHs2C7C+yJW/xZf/wP8jBGLs6HcerhM3CsorLAEMH3MGuIlVC17WcisBewEWucsILYEWbySXy/7T4h6/psZA==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/select": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/select/-/select-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-odoNLiVOgdwbEeePkjHtlr43pjskDwyO8hi4z3jcud1Rg1czk5zoJ2mUI0+olOJjBQ26PGocwrSLqf3qaThbIA==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/floating-label": "15.0.0-canary.a246a4439.0", + "@material/line-ripple": "15.0.0-canary.a246a4439.0", + "@material/list": "15.0.0-canary.a246a4439.0", + "@material/menu": "15.0.0-canary.a246a4439.0", + "@material/menu-surface": "15.0.0-canary.a246a4439.0", + "@material/notched-outline": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/shape": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-rcWPlCoHyP79ozeEKk73KWt9WTWdh6R68+n75l08TSTvnWZB5RRTmsI9BMkz55O9OJD/8H8ZsOxBe4x2QXUT7w==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/slider": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/slider/-/slider-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-is1BSBpxaXBBv+wSVpe9WGWmWl59yJEeDNubTES2UFD0er3BmA+PdKkL09vvytDnBcbKf77TbxaRiUSGVaKUQA==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/snackbar": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-2NAtC1qozR/uajszZnPy08Ej8HNnpgvCjNCBerDN4SLH2Q0/aWrVrUjqRCp2ayAvsX+szoroGbCboMhaWRzDuQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/button": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/icon-button": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/switch": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/switch/-/switch-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-o0wcbYgm2yRs4een5uxT4RJnJ003DxXe33rk8vTBG2o7cdiSR3X7GJQxeIK3D9wPgWCAwBLhNYSzXrlTL5pkMw==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/tab/-/tab-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-HGLK774uMeLnhbjDJBOjft7S6SurZnKb+6Und88OMDUVUEG6MkFBAKQQr09iBIeLE2sUAiGQhBVQtb7LJKwolQ==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/tab-indicator": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-bar": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-dMQb1vXsBchQXcjbwgJZIGqTZHngm+3QGSOSb4LWjqHIgC5+w2RRrHsIAjNTyRhKssJ9nKKrbpM/Yz5vTPWH6w==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/tab": "15.0.0-canary.a246a4439.0", + "@material/tab-indicator": "15.0.0-canary.a246a4439.0", + "@material/tab-scroller": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-indicator": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-gG2BgHT+ggKnUOaT8LjmH/+9nknRLh8v9qemrhUkDuCtZ8inlaC33OVbbxfrpQW3J+UzBh5YCUSC+2KrN39uUA==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-scroller": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-6KvBpalc4SwLbHFm0rnuIE64VffUj7AKhnPc+mqM6VmxOvDzQ/ZSYga0rWlUfM4mCDFX3ZkSxim+iNzVF+Ejaw==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/tab": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/textfield": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-4BW5bUERPlIeiPnLSby21h1/xDmySuAG9Ucn1LM801a0+5mK3IwWb8031AP3filKZZqTx5JJvOJYZd6/OWBJVA==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/floating-label": "15.0.0-canary.a246a4439.0", + "@material/line-ripple": "15.0.0-canary.a246a4439.0", + "@material/notched-outline": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/theme": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-HWxC5Nhz8JZKTLTVmAsNxIGB3Kzr53+YFMg327S8/XuEDmI0RFHFvtwM9rADmyrHFBmUaVhV4iELyxFdi67c9w==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tokens": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/tokens/-/tokens-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-+5iGfQ51YSb0Qau8uC6/jHXCSC3enKaQKDf/iPHfuXAe04UznW3tmm1/Ju227aZXNISTJcnQYa2rpm1M14MeUg==", + "dependencies": { + "@material/elevation": "15.0.0-canary.a246a4439.0" + } + }, + "node_modules/@material/tooltip": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/tooltip/-/tooltip-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-Ja2Z4aZQkYWD6InXA+MG4M9zdKR6dYsXXlYzQppYpfcQzXylZqh5Y7WBLulG5fA2o83pHVwILfwFZM7j7ht08Q==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/button": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/top-app-bar": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-twQchmCa1In/FFrALPYojgeM8vmV7KH96wRY9NmPSJ046ANgPCicLBgLuSzrLETCFqAwbztqzxSG4xMBL81rYg==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/touch-target": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-ubyD1TUjZnRPEdDnk6Lrcm2ZsjnU7CV5y7IX8pj9IPawiM6bx4FkjZBxUvclbv3WiTGk5UOnwPOySYAJYAMQ1w==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/typography": { + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-eXzBl9ROzWZ+41nan5pCrn1C/Zq3o/VsrLFaGv8fdRmhRR6/wHMeuvCCwGf5VtEmWdAE9FpJzRU/4ZPiJCJUyg==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "tslib": "^2.1.0" + } + }, "node_modules/@ngtools/webpack": { "version": "17.0.6", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.0.6.tgz", @@ -3050,6 +3886,16 @@ "node": ">=14" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@schematics/angular": { "version": "17.0.6", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.0.6.tgz", @@ -4092,6 +4938,39 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, + "node_modules/bootstrap": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz", + "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/bootstrap-icons": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.11.2.tgz", + "integrity": "sha512-TgdiPv+IM9tgDb+dsxrnGIyocsk85d2M7T0qIgkvPedZeoZfyeG/j+yiAE4uHCEayKef2RP05ahQ0/e9Sv75Wg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ] + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -9419,7 +10298,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, + "devOptional": true, "dependencies": { "entities": "^4.4.0" }, @@ -10417,6 +11296,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/safevalues": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/safevalues/-/safevalues-0.3.4.tgz", + "integrity": "sha512-LRneZZRXNgjzwG4bDQdOTSbze3fHm1EAKN/8bePxnlEZiBmkYEDggaHbuvHI9/hoqHbGfsEA7tWS9GhYHZBBsw==" + }, "node_modules/sass": { "version": "1.69.5", "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", diff --git a/package.json b/package.json index 89ccb50..3bafa2f 100644 --- a/package.json +++ b/package.json @@ -12,15 +12,19 @@ "private": true, "dependencies": { "@angular/animations": "^17.0.0", + "@angular/cdk": "^17.0.3", "@angular/common": "^17.0.0", "@angular/compiler": "^17.0.0", "@angular/core": "^17.0.0", "@angular/forms": "^17.0.0", + "@angular/material": "^17.0.3", "@angular/platform-browser": "^17.0.0", "@angular/platform-browser-dynamic": "^17.0.0", "@angular/platform-server": "^17.0.0", "@angular/router": "^17.0.0", "@angular/ssr": "^17.0.6", + "bootstrap": "^5.3.2", + "bootstrap-icons": "^1.11.2", "express": "^4.18.2", "rxjs": "~7.8.0", "tslib": "^2.3.0", diff --git a/src/app/app.component.html b/src/app/app.component.html index 1b7f2c3..a51c73b 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,336 +1,3 @@ -<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> -<!-- * * * * * * * * * * * The content below * * * * * * * * * * * --> -<!-- * * * * * * * * * * is only a placeholder * * * * * * * * * * --> -<!-- * * * * * * * * * * and can be replaced. * * * * * * * * * * --> -<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> -<!-- * * * * * * * * * Delete the template below * * * * * * * * * --> -<!-- * * * * * * * to get started with your project! * * * * * * * --> -<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> - -<style> - :host { - --bright-blue: oklch(51.01% 0.274 263.83); - --electric-violet: oklch(53.18% 0.28 296.97); - --french-violet: oklch(47.66% 0.246 305.88); - --vivid-pink: oklch(69.02% 0.277 332.77); - --hot-red: oklch(61.42% 0.238 15.34); - --orange-red: oklch(63.32% 0.24 31.68); - - --gray-900: oklch(19.37% 0.006 300.98); - --gray-700: oklch(36.98% 0.014 302.71); - --gray-400: oklch(70.9% 0.015 304.04); - - --red-to-pink-to-purple-vertical-gradient: linear-gradient( - 180deg, - var(--orange-red) 0%, - var(--vivid-pink) 50%, - var(--electric-violet) 100% - ); - - --red-to-pink-to-purple-horizontal-gradient: linear-gradient( - 90deg, - var(--orange-red) 0%, - var(--vivid-pink) 50%, - var(--electric-violet) 100% - ); - - --pill-accent: var(--bright-blue); - - font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, - Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", - "Segoe UI Symbol"; - box-sizing: border-box; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - } - - h1 { - font-size: 3.125rem; - color: var(--gray-900); - font-weight: 500; - line-height: 100%; - letter-spacing: -0.125rem; - margin: 0; - font-family: "Inter Tight", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, - Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", - "Segoe UI Symbol"; - } - - p { - margin: 0; - color: var(--gray-700); - } - - main { - width: 100%; - min-height: 100%; - display: flex; - justify-content: center; - align-items: center; - padding: 1rem; - box-sizing: inherit; - position: relative; - } - - .angular-logo { - max-width: 9.2rem; - } - - .content { - display: flex; - justify-content: space-around; - width: 100%; - max-width: 700px; - margin-bottom: 3rem; - } - - .content h1 { - margin-top: 1.75rem; - } - - .content p { - margin-top: 1.5rem; - } - - .divider { - width: 1px; - background: var(--red-to-pink-to-purple-vertical-gradient); - margin-inline: 0.5rem; - } - - .pill-group { - display: flex; - flex-direction: column; - align-items: start; - flex-wrap: wrap; - gap: 1.25rem; - } - - .pill { - display: flex; - align-items: center; - --pill-accent: var(--bright-blue); - background: color-mix(in srgb, var(--pill-accent) 5%, transparent); - color: var(--pill-accent); - padding-inline: 0.75rem; - padding-block: 0.375rem; - border-radius: 2.75rem; - border: 0; - transition: background 0.3s ease; - font-family: var(--inter-font); - font-size: 0.875rem; - font-style: normal; - font-weight: 500; - line-height: 1.4rem; - letter-spacing: -0.00875rem; - text-decoration: none; - } - - .pill:hover { - background: color-mix(in srgb, var(--pill-accent) 15%, transparent); - } - - .pill-group .pill:nth-child(6n + 1) { - --pill-accent: var(--bright-blue); - } - .pill-group .pill:nth-child(6n + 2) { - --pill-accent: var(--french-violet); - } - .pill-group .pill:nth-child(6n + 3), - .pill-group .pill:nth-child(6n + 4), - .pill-group .pill:nth-child(6n + 5) { - --pill-accent: var(--hot-red); - } - - .pill-group svg { - margin-inline-start: 0.25rem; - } - - .social-links { - display: flex; - align-items: center; - gap: 0.73rem; - margin-top: 1.5rem; - } - - .social-links path { - transition: fill 0.3s ease; - fill: var(--gray-400); - } - - .social-links a:hover svg path { - fill: var(--gray-900); - } - - @media screen and (max-width: 650px) { - .content { - flex-direction: column; - width: max-content; - } - - .divider { - height: 1px; - width: 100%; - background: var(--red-to-pink-to-purple-horizontal-gradient); - margin-block: 1.5rem; - } - } -</style> - -<main class="main"> - <div class="content"> - <div class="left-side"> - <svg - xmlns="http://www.w3.org/2000/svg" - viewBox="0 0 982 239" - fill="none" - class="angular-logo" - > - <g clip-path="url(#a)"> - <path - fill="url(#b)" - d="M388.676 191.625h30.849L363.31 31.828h-35.758l-56.215 159.797h30.848l13.174-39.356h60.061l13.256 39.356Zm-65.461-62.675 21.602-64.311h1.227l21.602 64.311h-44.431Zm126.831-7.527v70.202h-28.23V71.839h27.002v20.374h1.392c2.782-6.71 7.2-12.028 13.255-15.956 6.056-3.927 13.584-5.89 22.503-5.89 8.264 0 15.465 1.8 21.684 5.318 6.137 3.518 10.964 8.673 14.319 15.382 3.437 6.71 5.074 14.81 4.992 24.383v76.175h-28.23v-71.92c0-8.019-2.046-14.237-6.219-18.819-4.173-4.5-9.819-6.791-17.102-6.791-4.91 0-9.328 1.063-13.174 3.272-3.846 2.128-6.792 5.237-9.001 9.328-2.046 4.009-3.191 8.918-3.191 14.728ZM589.233 239c-10.147 0-18.82-1.391-26.103-4.091-7.282-2.7-13.092-6.382-17.511-10.964-4.418-4.582-7.528-9.655-9.164-15.219l25.448-6.136c1.145 2.372 2.782 4.663 4.991 6.954 2.209 2.291 5.155 4.255 8.837 5.81 3.683 1.554 8.428 2.291 14.074 2.291 8.019 0 14.647-1.964 19.884-5.81 5.237-3.845 7.856-10.227 7.856-19.064v-22.665h-1.391c-1.473 2.946-3.601 5.892-6.383 9.001-2.782 3.109-6.464 5.645-10.965 7.691-4.582 2.046-10.228 3.109-17.101 3.109-9.165 0-17.511-2.209-25.039-6.545-7.446-4.337-13.42-10.883-17.757-19.474-4.418-8.673-6.628-19.473-6.628-32.565 0-13.091 2.21-24.301 6.628-33.383 4.419-9.082 10.311-15.955 17.839-20.7 7.528-4.746 15.874-7.037 25.039-7.037 7.037 0 12.846 1.145 17.347 3.518 4.582 2.373 8.182 5.236 10.883 8.51 2.7 3.272 4.746 6.382 6.137 9.327h1.554v-19.8h27.821v121.749c0 10.228-2.454 18.737-7.364 25.447-4.91 6.709-11.538 11.7-20.048 15.055-8.509 3.355-18.165 4.991-28.884 4.991Zm.245-71.266c5.974 0 11.047-1.473 15.302-4.337 4.173-2.945 7.446-7.118 9.573-12.519 2.21-5.482 3.274-12.027 3.274-19.637 0-7.609-1.064-14.155-3.274-19.8-2.127-5.646-5.318-10.064-9.491-13.255-4.174-3.11-9.329-4.746-15.384-4.746s-11.537 1.636-15.792 4.91c-4.173 3.272-7.365 7.772-9.492 13.418-2.128 5.727-3.191 12.191-3.191 19.392 0 7.2 1.063 13.745 3.273 19.228 2.127 5.482 5.318 9.736 9.573 12.764 4.174 3.027 9.41 4.582 15.629 4.582Zm141.56-26.51V71.839h28.23v119.786h-27.412v-21.273h-1.227c-2.7 6.709-7.119 12.191-13.338 16.446-6.137 4.255-13.747 6.382-22.748 6.382-7.855 0-14.81-1.718-20.783-5.237-5.974-3.518-10.72-8.591-14.075-15.382-3.355-6.709-5.073-14.891-5.073-24.464V71.839h28.312v71.921c0 7.609 2.046 13.664 6.219 18.083 4.173 4.5 9.655 6.709 16.365 6.709 4.173 0 8.183-.982 12.111-3.028 3.927-2.045 7.118-5.072 9.655-9.082 2.537-4.091 3.764-9.164 3.764-15.218Zm65.707-109.395v159.796h-28.23V31.828h28.23Zm44.841 162.169c-7.61 0-14.402-1.391-20.457-4.091-6.055-2.7-10.883-6.791-14.32-12.109-3.518-5.319-5.237-11.946-5.237-19.801 0-6.791 1.228-12.355 3.765-16.773 2.536-4.419 5.891-7.937 10.228-10.637 4.337-2.618 9.164-4.664 14.647-6.055 5.4-1.391 11.046-2.373 16.856-3.027 7.037-.737 12.683-1.391 17.102-1.964 4.337-.573 7.528-1.555 9.574-2.782 1.963-1.309 3.027-3.273 3.027-5.973v-.491c0-5.891-1.718-10.391-5.237-13.664-3.518-3.191-8.51-4.828-15.056-4.828-6.955 0-12.356 1.473-16.447 4.5-4.009 3.028-6.71 6.546-8.183 10.719l-26.348-3.764c2.046-7.282 5.483-13.336 10.31-18.328 4.746-4.909 10.638-8.59 17.511-11.045 6.955-2.455 14.565-3.682 22.912-3.682 5.809 0 11.537.654 17.265 2.045s10.965 3.6 15.711 6.71c4.746 3.109 8.51 7.282 11.455 12.6 2.864 5.318 4.337 11.946 4.337 19.883v80.184h-27.166v-16.446h-.9c-1.719 3.355-4.092 6.464-7.201 9.328-3.109 2.864-6.955 5.237-11.619 6.955-4.828 1.718-10.229 2.536-16.529 2.536Zm7.364-20.701c5.646 0 10.556-1.145 14.729-3.354 4.173-2.291 7.364-5.237 9.655-9.001 2.292-3.763 3.355-7.854 3.355-12.273v-14.155c-.9.737-2.373 1.391-4.5 2.046-2.128.654-4.419 1.145-7.037 1.636-2.619.491-5.155.9-7.692 1.227-2.537.328-4.746.655-6.628.901-4.173.572-8.019 1.472-11.292 2.781-3.355 1.31-5.973 3.11-7.855 5.401-1.964 2.291-2.864 5.318-2.864 8.918 0 5.237 1.882 9.164 5.728 11.782 3.682 2.782 8.51 4.091 14.401 4.091Zm64.643 18.328V71.839h27.412v19.965h1.227c2.21-6.955 5.974-12.274 11.292-16.038 5.319-3.763 11.456-5.645 18.329-5.645 1.555 0 3.355.082 5.237.163 1.964.164 3.601.328 4.91.573v25.938c-1.227-.41-3.109-.819-5.646-1.146a58.814 58.814 0 0 0-7.446-.49c-5.155 0-9.738 1.145-13.829 3.354-4.091 2.209-7.282 5.236-9.655 9.164-2.373 3.927-3.519 8.427-3.519 13.5v70.448h-28.312ZM222.077 39.192l-8.019 125.923L137.387 0l84.69 39.192Zm-53.105 162.825-57.933 33.056-57.934-33.056 11.783-28.556h92.301l11.783 28.556ZM111.039 62.675l30.357 73.803H80.681l30.358-73.803ZM7.937 165.115 0 39.192 84.69 0 7.937 165.115Z" - /> - <path - fill="url(#c)" - d="M388.676 191.625h30.849L363.31 31.828h-35.758l-56.215 159.797h30.848l13.174-39.356h60.061l13.256 39.356Zm-65.461-62.675 21.602-64.311h1.227l21.602 64.311h-44.431Zm126.831-7.527v70.202h-28.23V71.839h27.002v20.374h1.392c2.782-6.71 7.2-12.028 13.255-15.956 6.056-3.927 13.584-5.89 22.503-5.89 8.264 0 15.465 1.8 21.684 5.318 6.137 3.518 10.964 8.673 14.319 15.382 3.437 6.71 5.074 14.81 4.992 24.383v76.175h-28.23v-71.92c0-8.019-2.046-14.237-6.219-18.819-4.173-4.5-9.819-6.791-17.102-6.791-4.91 0-9.328 1.063-13.174 3.272-3.846 2.128-6.792 5.237-9.001 9.328-2.046 4.009-3.191 8.918-3.191 14.728ZM589.233 239c-10.147 0-18.82-1.391-26.103-4.091-7.282-2.7-13.092-6.382-17.511-10.964-4.418-4.582-7.528-9.655-9.164-15.219l25.448-6.136c1.145 2.372 2.782 4.663 4.991 6.954 2.209 2.291 5.155 4.255 8.837 5.81 3.683 1.554 8.428 2.291 14.074 2.291 8.019 0 14.647-1.964 19.884-5.81 5.237-3.845 7.856-10.227 7.856-19.064v-22.665h-1.391c-1.473 2.946-3.601 5.892-6.383 9.001-2.782 3.109-6.464 5.645-10.965 7.691-4.582 2.046-10.228 3.109-17.101 3.109-9.165 0-17.511-2.209-25.039-6.545-7.446-4.337-13.42-10.883-17.757-19.474-4.418-8.673-6.628-19.473-6.628-32.565 0-13.091 2.21-24.301 6.628-33.383 4.419-9.082 10.311-15.955 17.839-20.7 7.528-4.746 15.874-7.037 25.039-7.037 7.037 0 12.846 1.145 17.347 3.518 4.582 2.373 8.182 5.236 10.883 8.51 2.7 3.272 4.746 6.382 6.137 9.327h1.554v-19.8h27.821v121.749c0 10.228-2.454 18.737-7.364 25.447-4.91 6.709-11.538 11.7-20.048 15.055-8.509 3.355-18.165 4.991-28.884 4.991Zm.245-71.266c5.974 0 11.047-1.473 15.302-4.337 4.173-2.945 7.446-7.118 9.573-12.519 2.21-5.482 3.274-12.027 3.274-19.637 0-7.609-1.064-14.155-3.274-19.8-2.127-5.646-5.318-10.064-9.491-13.255-4.174-3.11-9.329-4.746-15.384-4.746s-11.537 1.636-15.792 4.91c-4.173 3.272-7.365 7.772-9.492 13.418-2.128 5.727-3.191 12.191-3.191 19.392 0 7.2 1.063 13.745 3.273 19.228 2.127 5.482 5.318 9.736 9.573 12.764 4.174 3.027 9.41 4.582 15.629 4.582Zm141.56-26.51V71.839h28.23v119.786h-27.412v-21.273h-1.227c-2.7 6.709-7.119 12.191-13.338 16.446-6.137 4.255-13.747 6.382-22.748 6.382-7.855 0-14.81-1.718-20.783-5.237-5.974-3.518-10.72-8.591-14.075-15.382-3.355-6.709-5.073-14.891-5.073-24.464V71.839h28.312v71.921c0 7.609 2.046 13.664 6.219 18.083 4.173 4.5 9.655 6.709 16.365 6.709 4.173 0 8.183-.982 12.111-3.028 3.927-2.045 7.118-5.072 9.655-9.082 2.537-4.091 3.764-9.164 3.764-15.218Zm65.707-109.395v159.796h-28.23V31.828h28.23Zm44.841 162.169c-7.61 0-14.402-1.391-20.457-4.091-6.055-2.7-10.883-6.791-14.32-12.109-3.518-5.319-5.237-11.946-5.237-19.801 0-6.791 1.228-12.355 3.765-16.773 2.536-4.419 5.891-7.937 10.228-10.637 4.337-2.618 9.164-4.664 14.647-6.055 5.4-1.391 11.046-2.373 16.856-3.027 7.037-.737 12.683-1.391 17.102-1.964 4.337-.573 7.528-1.555 9.574-2.782 1.963-1.309 3.027-3.273 3.027-5.973v-.491c0-5.891-1.718-10.391-5.237-13.664-3.518-3.191-8.51-4.828-15.056-4.828-6.955 0-12.356 1.473-16.447 4.5-4.009 3.028-6.71 6.546-8.183 10.719l-26.348-3.764c2.046-7.282 5.483-13.336 10.31-18.328 4.746-4.909 10.638-8.59 17.511-11.045 6.955-2.455 14.565-3.682 22.912-3.682 5.809 0 11.537.654 17.265 2.045s10.965 3.6 15.711 6.71c4.746 3.109 8.51 7.282 11.455 12.6 2.864 5.318 4.337 11.946 4.337 19.883v80.184h-27.166v-16.446h-.9c-1.719 3.355-4.092 6.464-7.201 9.328-3.109 2.864-6.955 5.237-11.619 6.955-4.828 1.718-10.229 2.536-16.529 2.536Zm7.364-20.701c5.646 0 10.556-1.145 14.729-3.354 4.173-2.291 7.364-5.237 9.655-9.001 2.292-3.763 3.355-7.854 3.355-12.273v-14.155c-.9.737-2.373 1.391-4.5 2.046-2.128.654-4.419 1.145-7.037 1.636-2.619.491-5.155.9-7.692 1.227-2.537.328-4.746.655-6.628.901-4.173.572-8.019 1.472-11.292 2.781-3.355 1.31-5.973 3.11-7.855 5.401-1.964 2.291-2.864 5.318-2.864 8.918 0 5.237 1.882 9.164 5.728 11.782 3.682 2.782 8.51 4.091 14.401 4.091Zm64.643 18.328V71.839h27.412v19.965h1.227c2.21-6.955 5.974-12.274 11.292-16.038 5.319-3.763 11.456-5.645 18.329-5.645 1.555 0 3.355.082 5.237.163 1.964.164 3.601.328 4.91.573v25.938c-1.227-.41-3.109-.819-5.646-1.146a58.814 58.814 0 0 0-7.446-.49c-5.155 0-9.738 1.145-13.829 3.354-4.091 2.209-7.282 5.236-9.655 9.164-2.373 3.927-3.519 8.427-3.519 13.5v70.448h-28.312ZM222.077 39.192l-8.019 125.923L137.387 0l84.69 39.192Zm-53.105 162.825-57.933 33.056-57.934-33.056 11.783-28.556h92.301l11.783 28.556ZM111.039 62.675l30.357 73.803H80.681l30.358-73.803ZM7.937 165.115 0 39.192 84.69 0 7.937 165.115Z" - /> - </g> - <defs> - <radialGradient - id="c" - cx="0" - cy="0" - r="1" - gradientTransform="rotate(118.122 171.182 60.81) scale(205.794)" - gradientUnits="userSpaceOnUse" - > - <stop stop-color="#FF41F8" /> - <stop offset=".707" stop-color="#FF41F8" stop-opacity=".5" /> - <stop offset="1" stop-color="#FF41F8" stop-opacity="0" /> - </radialGradient> - <linearGradient - id="b" - x1="0" - x2="982" - y1="192" - y2="192" - gradientUnits="userSpaceOnUse" - > - <stop stop-color="#F0060B" /> - <stop offset="0" stop-color="#F0070C" /> - <stop offset=".526" stop-color="#CC26D5" /> - <stop offset="1" stop-color="#7702FF" /> - </linearGradient> - <clipPath id="a"><path fill="#fff" d="M0 0h982v239H0z" /></clipPath> - </defs> - </svg> - <h1>Hello, {{ title }}</h1> - <p>Congratulations! Your app is running. 🎉</p> - </div> - <div class="divider" role="separator" aria-label="Divider"></div> - <div class="right-side"> - <div class="pill-group"> - @for (item of [ - { title: 'Explore the Docs', link: 'https://angular.dev' }, - { title: 'Learn with Tutorials', link: 'https://angular.dev/tutorials' }, - { title: 'CLI Docs', link: 'https://angular.dev/tools/cli' }, - { title: 'Angular Language Service', link: 'https://angular.dev/tools/language-service' }, - { title: 'Angular DevTools', link: 'https://angular.dev/tools/devtools' }, - ]; track item.title) { - <a - class="pill" - [href]="item.link" - target="_blank" - rel="noopener" - > - <span>{{ item.title }}</span> - <svg - xmlns="http://www.w3.org/2000/svg" - height="14" - viewBox="0 -960 960 960" - width="14" - fill="currentColor" - > - <path - d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h280v80H200v560h560v-280h80v280q0 33-23.5 56.5T760-120H200Zm188-212-56-56 372-372H560v-80h280v280h-80v-144L388-332Z" - /> - </svg> - </a> - } - </div> - <div class="social-links"> - <a - href="https://github.com/angular/angular" - aria-label="Github" - target="_blank" - rel="noopener" - > - <svg - width="25" - height="24" - viewBox="0 0 25 24" - fill="none" - xmlns="http://www.w3.org/2000/svg" - alt="Github" - > - <path - d="M12.3047 0C5.50634 0 0 5.50942 0 12.3047C0 17.7423 3.52529 22.3535 8.41332 23.9787C9.02856 24.0946 9.25414 23.7142 9.25414 23.3871C9.25414 23.0949 9.24389 22.3207 9.23876 21.2953C5.81601 22.0377 5.09414 19.6444 5.09414 19.6444C4.53427 18.2243 3.72524 17.8449 3.72524 17.8449C2.61064 17.082 3.81137 17.0973 3.81137 17.0973C5.04697 17.1835 5.69604 18.3647 5.69604 18.3647C6.79321 20.2463 8.57636 19.7029 9.27978 19.3881C9.39052 18.5924 9.70736 18.0499 10.0591 17.7423C7.32641 17.4347 4.45429 16.3765 4.45429 11.6618C4.45429 10.3185 4.9311 9.22133 5.72065 8.36C5.58222 8.04931 5.16694 6.79833 5.82831 5.10337C5.82831 5.10337 6.85883 4.77319 9.2121 6.36459C10.1965 6.09082 11.2424 5.95546 12.2883 5.94931C13.3342 5.95546 14.3801 6.09082 15.3644 6.36459C17.7023 4.77319 18.7328 5.10337 18.7328 5.10337C19.3942 6.79833 18.9789 8.04931 18.8559 8.36C19.6403 9.22133 20.1171 10.3185 20.1171 11.6618C20.1171 16.3888 17.2409 17.4296 14.5031 17.7321C14.9338 18.1012 15.3337 18.8559 15.3337 20.0084C15.3337 21.6552 15.3183 22.978 15.3183 23.3779C15.3183 23.7009 15.5336 24.0854 16.1642 23.9623C21.0871 22.3484 24.6094 17.7341 24.6094 12.3047C24.6094 5.50942 19.0999 0 12.3047 0Z" - /> - </svg> - </a> - <a - href="https://twitter.com/angular" - aria-label="Twitter" - target="_blank" - rel="noopener" - > - <svg - width="25" - height="20" - viewBox="0 0 25 20" - fill="none" - xmlns="http://www.w3.org/2000/svg" - alt="Twitter" - > - <path - d="M8.04524 20C17.3335 20 22.4138 12.3047 22.4138 5.63144C22.4138 5.41287 22.4138 5.19529 22.399 4.97869C23.3874 4.26381 24.2405 3.37867 24.9185 2.3647C23.9969 2.77329 23.0192 3.04112 22.018 3.15923C23.0723 2.52818 23.8613 1.53552 24.2382 0.366057C23.2469 0.954335 22.1624 1.36889 21.0315 1.59182C20.2701 0.782212 19.2631 0.246107 18.1663 0.0664704C17.0695 -0.113166 15.9441 0.0736804 14.9642 0.598096C13.9843 1.12251 13.2046 1.95526 12.7457 2.96748C12.2868 3.9797 12.1742 5.11495 12.4255 6.19756C10.4178 6.09685 8.45366 5.57507 6.66064 4.66609C4.86763 3.75712 3.28579 2.48127 2.01781 0.921344C1.37203 2.03306 1.17424 3.34911 1.46472 4.60154C1.75519 5.85397 2.51208 6.9486 3.58128 7.66257C2.77759 7.63903 1.9914 7.42221 1.28924 7.03049V7.09449C1.28956 8.26041 1.69316 9.39034 2.4316 10.2926C3.17003 11.1949 4.19783 11.8139 5.34067 12.0448C4.59721 12.2476 3.81715 12.2772 3.06045 12.1315C3.38327 13.1348 4.01156 14.0122 4.85746 14.641C5.70337 15.2698 6.72461 15.6185 7.77842 15.6384C6.73139 16.4614 5.53237 17.0699 4.24995 17.4291C2.96753 17.7882 1.62687 17.891 0.304688 17.7316C2.61411 19.2136 5.30121 19.9997 8.04524 19.9961" - /> - </svg> - </a> - <a - href="https://www.youtube.com/channel/UCbn1OgGei-DV7aSRo_HaAiw" - aria-label="Youtube" - target="_blank" - rel="noopener" - > - <svg - width="29" - height="20" - viewBox="0 0 29 20" - fill="none" - xmlns="http://www.w3.org/2000/svg" - alt="Youtube" - > - <path - fill-rule="evenodd" - clip-rule="evenodd" - d="M27.4896 1.52422C27.9301 1.96749 28.2463 2.51866 28.4068 3.12258C29.0004 5.35161 29.0004 10 29.0004 10C29.0004 10 29.0004 14.6484 28.4068 16.8774C28.2463 17.4813 27.9301 18.0325 27.4896 18.4758C27.0492 18.9191 26.5 19.2389 25.8972 19.4032C23.6778 20 14.8068 20 14.8068 20C14.8068 20 5.93586 20 3.71651 19.4032C3.11363 19.2389 2.56449 18.9191 2.12405 18.4758C1.68361 18.0325 1.36732 17.4813 1.20683 16.8774C0.613281 14.6484 0.613281 10 0.613281 10C0.613281 10 0.613281 5.35161 1.20683 3.12258C1.36732 2.51866 1.68361 1.96749 2.12405 1.52422C2.56449 1.08095 3.11363 0.76113 3.71651 0.596774C5.93586 0 14.8068 0 14.8068 0C14.8068 0 23.6778 0 25.8972 0.596774C26.5 0.76113 27.0492 1.08095 27.4896 1.52422ZM19.3229 10L11.9036 5.77905V14.221L19.3229 10Z" - /> - </svg> - </a> - </div> - </div> - </div> -</main> - -<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> -<!-- * * * * * * * * * * * The content above * * * * * * * * * * * * --> -<!-- * * * * * * * * * * is only a placeholder * * * * * * * * * * * --> -<!-- * * * * * * * * * * and can be replaced. * * * * * * * * * * * --> -<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> -<!-- * * * * * * * * * * End of Placeholder * * * * * * * * * * * * --> -<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> - - +<app-navigation></app-navigation> <router-outlet></router-outlet> + diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 9ea3ec1..1572338 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,13 +1,18 @@ import { Component } from '@angular/core'; import { CommonModule } from '@angular/common'; import { RouterOutlet } from '@angular/router'; +import { NavigationComponent } from "./navigation/navigation.component"; +import { ShoppingListComponent } from './shopping-list/shopping-list.component'; +import { SidebarComponent } from './sidebar/sidebar.component'; +import { DisplayListComponent } from './display-list/display-list.component'; +import { BrowserModule } from '@angular/platform-browser'; @Component({ - selector: 'app-root', - standalone: true, - imports: [CommonModule, RouterOutlet], - templateUrl: './app.component.html', - styleUrl: './app.component.css' + selector: 'app-root', + standalone: true, + templateUrl: './app.component.html', + styleUrl: './app.component.css', + imports: [CommonModule, RouterOutlet, NavigationComponent, ShoppingListComponent, SidebarComponent, DisplayListComponent] }) export class AppComponent { title = 'angular-project'; diff --git a/src/app/app.config.ts b/src/app/app.config.ts index e5a3cf1..6813f1b 100644 --- a/src/app/app.config.ts +++ b/src/app/app.config.ts @@ -3,7 +3,8 @@ import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; import { provideClientHydration } from '@angular/platform-browser'; +import { provideNoopAnimations } from '@angular/platform-browser/animations'; export const appConfig: ApplicationConfig = { - providers: [provideRouter(routes), provideClientHydration()] + providers: [provideRouter(routes), provideClientHydration(), provideNoopAnimations()] }; diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index dc39edb..482fec3 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -1,3 +1,6 @@ import { Routes } from '@angular/router'; +import { ShoppingListComponent } from './shopping-list/shopping-list.component'; -export const routes: Routes = []; +export const routes: Routes = [ + {path: 'list', component: ShoppingListComponent} +]; diff --git a/src/app/display-list/display-list.component.css b/src/app/display-list/display-list.component.css new file mode 100644 index 0000000..5ff65c6 --- /dev/null +++ b/src/app/display-list/display-list.component.css @@ -0,0 +1,12 @@ +.center-box { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; /* Make the box full height of the viewport */ + } + + p { + padding: 20px; + border: 1px solid #ccc; + background-color: #f8f8f8; + } \ No newline at end of file diff --git a/src/app/display-list/display-list.component.html b/src/app/display-list/display-list.component.html new file mode 100644 index 0000000..6e5ae5d --- /dev/null +++ b/src/app/display-list/display-list.component.html @@ -0,0 +1,5 @@ +<div class="center-box"> + <p> + @for (item of data.items; track $index) { {{item.name}} {{item.amount}} <br>} + </p> +</div> diff --git a/src/app/display-list/display-list.component.spec.ts b/src/app/display-list/display-list.component.spec.ts new file mode 100644 index 0000000..5f6ea54 --- /dev/null +++ b/src/app/display-list/display-list.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DisplayListComponent } from './display-list.component'; + +describe('DisplayListComponent', () => { + let component: DisplayListComponent; + let fixture: ComponentFixture<DisplayListComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [DisplayListComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(DisplayListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/display-list/display-list.component.ts b/src/app/display-list/display-list.component.ts new file mode 100644 index 0000000..870581b --- /dev/null +++ b/src/app/display-list/display-list.component.ts @@ -0,0 +1,24 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { EventService } from '../../services/event-service.service'; +import { ShoppingList } from '../../entities/ShoppingList'; + +@Component({ + selector: 'app-display-list', + standalone: true, + imports: [], + templateUrl: './display-list.component.html', + styleUrl: './display-list.component.css' +}) +export class DisplayListComponent implements OnInit{ + data:ShoppingList = new ShoppingList; + constructor(private eventService: EventService){ + + } + + ngOnInit(): void { + this.eventService.SelectShoppingList.subscribe( (data:ShoppingList) => { + this.data = data; + }) + } + +} diff --git a/src/app/navigation/navigation.component.css b/src/app/navigation/navigation.component.css new file mode 100644 index 0000000..3cb0a24 --- /dev/null +++ b/src/app/navigation/navigation.component.css @@ -0,0 +1,3 @@ +.navbar navbar-expand-lg bg-body-tertiary{ + margin-bottom: 0; +} \ No newline at end of file diff --git a/src/app/navigation/navigation.component.html b/src/app/navigation/navigation.component.html new file mode 100644 index 0000000..ec19b9c --- /dev/null +++ b/src/app/navigation/navigation.component.html @@ -0,0 +1,24 @@ +<nav class="navbar navbar-expand-lg bg-body-tertiary"> + <div class="container-fluid"> + <a class="navbar-brand" href="#">Nákupné zoznamy</a> + <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> + <span class="navbar-toggler-icon"></span> + </button> + <div class="collapse navbar-collapse" id="navbarNav"> + <ul class="navbar-nav"> + <li class="nav-item"> + <a class="nav-link active" aria-current="page" href="#">Home</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="list" routerLinkActive="active">Zoznam</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="#">Pricing</a> + </li> + <li class="nav-item"> + <a class="nav-link disabled" aria-disabled="true">Disabled</a> + </li> + </ul> + </div> + </div> +</nav> \ No newline at end of file diff --git a/src/app/navigation/navigation.component.spec.ts b/src/app/navigation/navigation.component.spec.ts new file mode 100644 index 0000000..03c173c --- /dev/null +++ b/src/app/navigation/navigation.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { NavigationComponent } from './navigation.component'; + +describe('NavigationComponent', () => { + let component: NavigationComponent; + let fixture: ComponentFixture<NavigationComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NavigationComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(NavigationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/navigation/navigation.component.ts b/src/app/navigation/navigation.component.ts new file mode 100644 index 0000000..8c900ee --- /dev/null +++ b/src/app/navigation/navigation.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { EventService } from '../../services/event-service.service'; + +@Component({ + selector: 'app-navigation', + standalone: true, + imports: [], + templateUrl: './navigation.component.html', + styleUrl: './navigation.component.css' +}) +export class NavigationComponent { + +} diff --git a/src/app/shopping-list/shopping-list.component.css b/src/app/shopping-list/shopping-list.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/shopping-list/shopping-list.component.html b/src/app/shopping-list/shopping-list.component.html new file mode 100644 index 0000000..0f35be7 --- /dev/null +++ b/src/app/shopping-list/shopping-list.component.html @@ -0,0 +1,2 @@ +<app-sidebar></app-sidebar> +<app-display-list></app-display-list> \ No newline at end of file diff --git a/src/app/shopping-list/shopping-list.component.spec.ts b/src/app/shopping-list/shopping-list.component.spec.ts new file mode 100644 index 0000000..dffc8f1 --- /dev/null +++ b/src/app/shopping-list/shopping-list.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ShoppingListComponent } from './shopping-list.component'; + +describe('ShoppingListComponent', () => { + let component: ShoppingListComponent; + let fixture: ComponentFixture<ShoppingListComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ShoppingListComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ShoppingListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shopping-list/shopping-list.component.ts b/src/app/shopping-list/shopping-list.component.ts new file mode 100644 index 0000000..66bb501 --- /dev/null +++ b/src/app/shopping-list/shopping-list.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { SidebarComponent } from '../sidebar/sidebar.component'; +import { DisplayListComponent } from '../display-list/display-list.component'; +import { CommonModule } from '@angular/common'; + +@Component({ + selector: 'app-shopping-list', + standalone: true, + templateUrl: './shopping-list.component.html', + styleUrl: './shopping-list.component.css', + imports: [SidebarComponent, DisplayListComponent] +}) +export class ShoppingListComponent { + +} diff --git a/src/app/sidebar/sidebar.component.css b/src/app/sidebar/sidebar.component.css new file mode 100644 index 0000000..29980b8 --- /dev/null +++ b/src/app/sidebar/sidebar.component.css @@ -0,0 +1,28 @@ +/* Sidebar styles */ +.sidebar { + height: 100%; + width: 250px; + position: fixed; + top: 60px; /* Adjust this value based on the height of the top navbar */ + left: 0; + background-color: #333; + padding-top: 20px; + color: white; + z-index: 1000; + } + + /* Main content styles */ + .main-content { + margin-left: 250px; /* Adjust this margin to accommodate the width of the sidebar */ + padding: 20px; + } + + /* Adjust the top margin of the main content to leave space for the top navbar */ + .main-content { + margin-top: 60px; /* Assuming the top navbar is around 60px in height, adjust as needed */ + } + + /* Navbar styles */ + .navbar { + z-index: 1000; /* Increase the z-index value */ + } \ No newline at end of file diff --git a/src/app/sidebar/sidebar.component.html b/src/app/sidebar/sidebar.component.html new file mode 100644 index 0000000..9fae7a6 --- /dev/null +++ b/src/app/sidebar/sidebar.component.html @@ -0,0 +1,5 @@ +<div class="sidebar"> + <ul> + @for (text of sidebarText; track $index) {<li><button (click)="select($index)"> {{text}}</button></li>} + </ul> + </div> \ No newline at end of file diff --git a/src/app/sidebar/sidebar.component.spec.ts b/src/app/sidebar/sidebar.component.spec.ts new file mode 100644 index 0000000..85e49bd --- /dev/null +++ b/src/app/sidebar/sidebar.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SidebarComponent } from './sidebar.component'; + +describe('SidebarComponent', () => { + let component: SidebarComponent; + let fixture: ComponentFixture<SidebarComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SidebarComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(SidebarComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/sidebar/sidebar.component.ts b/src/app/sidebar/sidebar.component.ts new file mode 100644 index 0000000..6b3f492 --- /dev/null +++ b/src/app/sidebar/sidebar.component.ts @@ -0,0 +1,87 @@ +import { Component, NgModule, OnInit, Output } from '@angular/core'; +import { ListServiceService } from '../../services/list-service.service'; +import { CommonModule } from '@angular/common'; +import { EventEmitter } from 'stream'; +import { group } from 'console'; +import { EventService } from '../../services/event-service.service'; +import { ShoppingList } from '../../entities/ShoppingList'; +import { ShoppingItem } from '../../entities/shoppingItem'; + + +@Component({ + selector: 'app-sidebar', + standalone: true, + imports: [CommonModule], + templateUrl: './sidebar.component.html', + styleUrl: './sidebar.component.css' +}) + +export class SidebarComponent implements OnInit{ +shoppingLists: ShoppingList[] = []; + + // jsonData = [ + // { + // "items": [ + // {"name": "Banana", "amount": 1}, + // {"name": "Bread", "amount": 5}, + // {"name": "Pepsi", "amount": 3} + // ] + // }, + // { + // "items": [ + // {"name": "Juice", "amount": 3}, + // {"name": "Ham", "amount": 3}, + // {"name": "Jam", "amount": 2} + // ] + // }, + // { + // "items": [ + // {"name": "Wafer", "amount": 3}, + // {"name": "Sausage", "amount": 3}, + // {"name": "Jam", "amount": 2} + // ] + // } + // ]; + + listArray:ShoppingList[] = [] + + + + selectedGroup: string | null = null; + + sidebarText: string[] = []; + selectedItems: { name: string; amount: number }[] = []; + + constructor(private eventService: EventService){ + const list1 = new ShoppingList([ + new ShoppingItem('Item 1', 2), + new ShoppingItem('Item 2', 5), + ]); + const list2 = new ShoppingList([ + new ShoppingItem('Item 3', 1), + new ShoppingItem('Item 4', 3), + ]); + const list3 = new ShoppingList([ + new ShoppingItem('Item 5', 1), + new ShoppingItem('Item 6', 3), + ]); + this.shoppingLists = [list1, list2]; + } + + select(index:number){ + this.eventService.SelectShoppingList.emit(this.shoppingLists[index]); + } + + ngOnInit(): void { + this.generateSidebarText(); + } + + generateSidebarText(): void { + this.shoppingLists.forEach((group, index) => { + const groupName = `Group ${index + 1}`; + this.sidebarText.push(groupName); + }); + } + +} + diff --git a/src/entities/ShoppingList.ts b/src/entities/ShoppingList.ts new file mode 100644 index 0000000..c54d7c3 --- /dev/null +++ b/src/entities/ShoppingList.ts @@ -0,0 +1,8 @@ +import { ShoppingItem } from "./shoppingItem"; +export class ShoppingList { + + constructor( + public items: ShoppingItem[] = [] + ){} + +} \ No newline at end of file diff --git a/src/entities/shoppingItem.ts b/src/entities/shoppingItem.ts new file mode 100644 index 0000000..16ef9b7 --- /dev/null +++ b/src/entities/shoppingItem.ts @@ -0,0 +1,8 @@ +export class ShoppingItem { + + constructor( + public name: string, + public amount?: number + ){} + +} \ No newline at end of file diff --git a/src/index.html b/src/index.html index 2e7d4ea..7fba5e2 100644 --- a/src/index.html +++ b/src/index.html @@ -6,8 +6,10 @@ <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/x-icon" href="favicon.ico"> + <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet"> + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> </head> -<body> +<body class="mat-typography"> <app-root></app-root> </body> </html> diff --git a/src/services/event-service.service.ts b/src/services/event-service.service.ts new file mode 100644 index 0000000..3af6205 --- /dev/null +++ b/src/services/event-service.service.ts @@ -0,0 +1,9 @@ +import { EventEmitter, Injectable } from "@angular/core"; +import { ShoppingList } from "../entities/ShoppingList"; +@Injectable({ + providedIn: 'root' + }) +export class EventService{ + + public SelectShoppingList:EventEmitter<ShoppingList> = new EventEmitter; +} \ No newline at end of file diff --git a/src/services/list-service.service.spec.ts b/src/services/list-service.service.spec.ts new file mode 100644 index 0000000..b701fde --- /dev/null +++ b/src/services/list-service.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ListServiceService } from './list-service.service'; + +describe('ListServiceService', () => { + let service: ListServiceService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(ListServiceService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/services/list-service.service.ts b/src/services/list-service.service.ts new file mode 100644 index 0000000..a554734 --- /dev/null +++ b/src/services/list-service.service.ts @@ -0,0 +1,37 @@ +import { Injectable } from '@angular/core'; +import { Observable, of } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class ListServiceService { + private shoppingData =[ + { + "items": [ + {"name": "Banana", "amount": 1}, + {"name": "Bread", "amount": 5}, + {"name": "Pepsi", "amount": 3} + ] + }, + { + "items": [ + {"name": "Juice", "amount": 3}, + {"name": "Ham", "amount": 3}, + {"name": "Jam", "amount": 2} + ] + }, + { + "items": [ + {"name": "Wafer", "amount": 3}, + {"name": "Sausage", "amount": 3}, + {"name": "Jam", "amount": 2} + ] + } + ] + + getShoppingData(): Observable<any[]>{ + return of(this.shoppingData); + } + + constructor() { } +} diff --git a/src/styles.css b/src/styles.css index 90d4ee0..7e7239a 100644 --- a/src/styles.css +++ b/src/styles.css @@ -1 +1,4 @@ /* You can add global styles to this file, and also import other style files */ + +html, body { height: 100%; } +body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } -- GitLab From 223876a736e22abc84a24ec7f1686a832bb7d189 Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Sun, 14 Jan 2024 00:29:03 +0100 Subject: [PATCH 03/32] create login --- src/services/message.service.spec.ts | 16 ++++++ src/services/message.service.ts | 22 ++++++++ src/services/user.service.spec.ts | 16 ++++++ src/services/user.service.ts | 78 ++++++++++++++++++++++++++++ 4 files changed, 132 insertions(+) create mode 100644 src/services/message.service.spec.ts create mode 100644 src/services/message.service.ts create mode 100644 src/services/user.service.spec.ts create mode 100644 src/services/user.service.ts diff --git a/src/services/message.service.spec.ts b/src/services/message.service.spec.ts new file mode 100644 index 0000000..1db761b --- /dev/null +++ b/src/services/message.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { MessageService } from './message.service'; + +describe('MessageService', () => { + let service: MessageService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(MessageService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/services/message.service.ts b/src/services/message.service.ts new file mode 100644 index 0000000..9bf50e8 --- /dev/null +++ b/src/services/message.service.ts @@ -0,0 +1,22 @@ +import { Injectable } from '@angular/core'; +import { MatSnackBar } from '@angular/material/snack-bar'; + +@Injectable({ + providedIn: 'root' +}) +export class MessageService { + constructor(private snackBar: MatSnackBar) { } + + error(message:string){ + this.snackBar.open(message, 'ERROR', { + duration: 5000, + }); + } + + success(message:string){ + this.snackBar.open(message, 'SUCCESS', { + duration: 5000, + }); + } + +} diff --git a/src/services/user.service.spec.ts b/src/services/user.service.spec.ts new file mode 100644 index 0000000..3f804c9 --- /dev/null +++ b/src/services/user.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { UserService } from './user.service'; + +describe('UserService', () => { + let service: UserService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(UserService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/services/user.service.ts b/src/services/user.service.ts new file mode 100644 index 0000000..b55eedd --- /dev/null +++ b/src/services/user.service.ts @@ -0,0 +1,78 @@ +import { HttpClient, HttpErrorResponse } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Auth } from '../entities/auth'; +import { LoginResponse } from '../entities/loginResponse'; +import { EMPTY, Observable, catchError, defaultIfEmpty, map, tap } from 'rxjs'; +import { MessageService } from './message.service'; +import e from 'express'; + +@Injectable({ + providedIn: 'root' +}) +export class UserService { + private url = 'http://localhost:8080'; + + constructor(private http: HttpClient,private messageService:MessageService) { } + + // login(auth: Auth) { + // return this.http.post<LoginResponse>(this.url + '/login', auth).subscribe({ + // next: response => { + // console.log('Token:', response.token); + // console.log('UserID:', response.userID); + // localStorage.setItem('token', response.token); + // localStorage.setItem('userId', response.userID.toString()); + // }, + // error: error => { + // console.log('There was an error during the login process', error); + // } + // }); + // } + + login(auth: Auth):Observable<boolean>{ + return this.http.post<LoginResponse>(this.url + '/login', auth).pipe( + map(response => { + this.token = response.token; + // localStorage.setItem('token', response.token); + // localStorage.setItem('userId', response.userID.toString()); + this.messageService.success('Login successful'); + return true; + } + ), + catchError(error => this.processError(error)), + defaultIfEmpty(false) + ); + } + + + processError(error: any):Observable<never> { + if(error instanceof HttpErrorResponse){ + if(error.status ===0){ + this.messageService.error("server not reachable"); + } + if(error.status >400 && error.status <500){ + const message = error.error.errorMessage || JSON.parse(error.error).errorMessage; + this.messageService.error(message); + } + if(error.status >=500){ + console.log('server error', error); + this.messageService.error('server error,check console'); + } + } + return EMPTY; + } + + + set token(token: string){ + if(token){ + localStorage.setItem('token', token); + } + else{ + localStorage.removeItem('token'); + } + } + + get token(): string{ + return localStorage.getItem('token')||''; + } + +} -- GitLab From 113758c43090c07fb4b18247a04617685c8754bb Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Sun, 14 Jan 2024 17:53:56 +0100 Subject: [PATCH 04/32] create login --- angular.json | 4 +- package-lock.json | 511 +++++++++--------- package.json | 8 +- src/app/app.component.ts | 13 +- src/app/app.config.ts | 3 +- src/app/app.routes.ts | 3 + src/app/login/login.component.css | 25 + src/app/login/login.component.html | 35 ++ src/app/login/login.component.spec.ts | 23 + src/app/login/login.component.ts | 46 ++ src/app/navigation/navigation.component.css | 8 + src/app/navigation/navigation.component.html | 11 +- .../shopping-list.component.html | 4 +- src/assets/images/shoppingList.jpg | Bin 0 -> 255755 bytes src/entities/auth.ts | 10 + src/entities/loginResponse.ts | 4 + src/main.ts | 2 +- src/modules/material/material.module.ts | 32 ++ src/styles.css | 5 + 19 files changed, 485 insertions(+), 262 deletions(-) create mode 100644 src/app/login/login.component.css create mode 100644 src/app/login/login.component.html create mode 100644 src/app/login/login.component.spec.ts create mode 100644 src/app/login/login.component.ts create mode 100644 src/assets/images/shoppingList.jpg create mode 100644 src/entities/auth.ts create mode 100644 src/entities/loginResponse.ts create mode 100644 src/modules/material/material.module.ts diff --git a/angular.json b/angular.json index 63c2ac2..51f2bea 100644 --- a/angular.json +++ b/angular.json @@ -25,7 +25,7 @@ "src/assets" ], "styles": [ - "@angular/material/prebuilt-themes/indigo-pink.css", + "@angular/material/prebuilt-themes/deeppurple-amber.css", "node_modules/bootstrap/dist/css/bootstrap.min.css", "node_modules/bootstrap-icons/font/bootstrap-icons.css", "src/styles.css" @@ -94,7 +94,7 @@ "src/assets" ], "styles": [ - "@angular/material/prebuilt-themes/indigo-pink.css", + "@angular/material/prebuilt-themes/deeppurple-amber.css", "src/styles.css" ], "scripts": [] diff --git a/package-lock.json b/package-lock.json index 4d6fb2d..ab95dab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,13 +8,13 @@ "name": "angular-project", "version": "0.0.0", "dependencies": { - "@angular/animations": "^17.0.0", - "@angular/cdk": "^17.0.3", + "@angular/animations": "^17.0.9", + "@angular/cdk": "^17.0.5", "@angular/common": "^17.0.0", "@angular/compiler": "^17.0.0", "@angular/core": "^17.0.0", "@angular/forms": "^17.0.0", - "@angular/material": "^17.0.3", + "@angular/material": "^17.0.5", "@angular/platform-browser": "^17.0.0", "@angular/platform-browser-dynamic": "^17.0.0", "@angular/platform-server": "^17.0.0", @@ -24,7 +24,7 @@ "bootstrap-icons": "^1.11.2", "express": "^4.18.2", "rxjs": "~7.8.0", - "tslib": "^2.3.0", + "tslib": "^2.6.2", "zone.js": "~0.14.2" }, "devDependencies": { @@ -57,12 +57,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1700.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1700.6.tgz", - "integrity": "sha512-zVpz736cBZHXcv0v2bRLfJLcykanUyEMVQXkGwZp2eygjNK1Ls9s/74o1dXd6nGdvjh6AnkzOU/vouj2dqA41g==", + "version": "0.1700.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1700.10.tgz", + "integrity": "sha512-JD/3jkdN1jrFMIDEk9grKdbjutIoxUDMRazq1LZooWjTkzlYk09i/s6HwvIPao7zvxJfelD6asTPspgkjOMP5A==", "dev": true, "dependencies": { - "@angular-devkit/core": "17.0.6", + "@angular-devkit/core": "17.0.10", "rxjs": "7.8.1" }, "engines": { @@ -72,15 +72,15 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.0.6.tgz", - "integrity": "sha512-gYxmbvq5/nk7aVJ6JxIIW0//RM7859kMPJGPKekcCGSWkkObjqG6P5cDgJJNAjMl/IfCsG7B+xGYjr4zN8QV9g==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.0.10.tgz", + "integrity": "sha512-RWVu5Pdg6VdO3v1i0oI+HGr/NE4rhbNelM43w+9TqrzDtwmvckWsadSp0H88cPhQ4YGY5ldGKyQufO1UItR26w==", "dev": true, "dependencies": { "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1700.6", - "@angular-devkit/build-webpack": "0.1700.6", - "@angular-devkit/core": "17.0.6", + "@angular-devkit/architect": "0.1700.10", + "@angular-devkit/build-webpack": "0.1700.10", + "@angular-devkit/core": "17.0.10", "@babel/core": "7.23.2", "@babel/generator": "7.23.0", "@babel/helper-annotate-as-pure": "7.22.5", @@ -91,7 +91,7 @@ "@babel/preset-env": "7.23.2", "@babel/runtime": "7.23.2", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "17.0.6", + "@ngtools/webpack": "17.0.10", "@vitejs/plugin-basic-ssl": "1.0.1", "ansi-colors": "4.1.3", "autoprefixer": "10.4.16", @@ -195,12 +195,12 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1700.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1700.6.tgz", - "integrity": "sha512-xT5LL92rScVjvGZO7but/YbTQ12PNilosyjDouephl+HIf2V6rwDovTsEfpLYgcrqgodh+R0X0ZCOk95+MmSBA==", + "version": "0.1700.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1700.10.tgz", + "integrity": "sha512-jjcH5zGWre+adnVqjBdAr04Yto8oG6j7fFWuoiBVWEtK8AmesukGJQY8+QKX5UcrsyjP7COsfbz5WeJk3g1KOg==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1700.6", + "@angular-devkit/architect": "0.1700.10", "rxjs": "7.8.1" }, "engines": { @@ -214,9 +214,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.6.tgz", - "integrity": "sha512-+h9VnFHof7rKzBJ5FWrbPXWzbag31QKbUGJ/mV5BYgj39vjzPNUXBW8AaScZAlATi8+tElYXjRMvM49GnuyRLg==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.10.tgz", + "integrity": "sha512-93N6oHnmtRt0hL3AXxvnk47sN1rHndfj+pqI5haEY41AGWzIWv9cSBsqlM0PWltNpo6VivcExZESvbLJ71wqbQ==", "dev": true, "dependencies": { "ajv": "8.12.0", @@ -241,12 +241,12 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.0.6.tgz", - "integrity": "sha512-2g769MpazA1aOzJOm2MNGosra3kxw8CbdIQQOKkvycIzroRNgN06yHcRTDC03GADgP/CkDJ6kxwJQNG+wNFL2A==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.0.10.tgz", + "integrity": "sha512-hjf4gaMx2uB6ZhBstBSH0Q2hzfp6kxI4IiJ5i1QrxPNE1MdGnb2h+LgPTRCdO72a7PGeWcSxFRE7cxrXeQy19g==", "dev": true, "dependencies": { - "@angular-devkit/core": "17.0.6", + "@angular-devkit/core": "17.0.10", "jsonc-parser": "3.2.0", "magic-string": "0.30.5", "ora": "5.4.1", @@ -259,9 +259,9 @@ } }, "node_modules/@angular/animations": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.0.6.tgz", - "integrity": "sha512-fic61LjLHry79c5H9UGM8Ff311MJnf9an7EukLj2aLJ3J0uadL/H9de7dDp8PaIT10DX9g+aRTIKOmF3PmmXIQ==", + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.0.9.tgz", + "integrity": "sha512-TcAdBQyGqglgbxdiJcaHc7FcDNkzTXGRtZuPOcr4sYmBvryBu2q18edwzo6+QDYFaoGredFhE5RnOIw+M4A3Xw==", "dependencies": { "tslib": "^2.3.0" }, @@ -269,13 +269,13 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "17.0.6" + "@angular/core": "17.0.9" } }, "node_modules/@angular/cdk": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.0.3.tgz", - "integrity": "sha512-Qd5uvC09B3+uk2uX1JxmiWrD7wueMHSxNBoCbDEmnrsdDVUta0wN/jj/CtATljxUM8ZqvEvkqgxJCig1od9oyQ==", + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.0.5.tgz", + "integrity": "sha512-O3QQGPlRz0csQ+XWWzivvtsgVY+jbyZPSKa+N5cXRA5onC3vzajKzAwXQabwIAYR/OoLeI/WNEIDW7nLpFoGXQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -289,15 +289,15 @@ } }, "node_modules/@angular/cli": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.0.6.tgz", - "integrity": "sha512-BLA2wDeqZManC/7MI6WvRRV+VhrwjxxB7FawLyp4xYlo0CTSOFOfeKPVRMLEnA/Ou4R5d47B+BqJTlep62pHwg==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.0.10.tgz", + "integrity": "sha512-52rd8KmOMe3NJDp/wA+Mwj21qd4HR8fuLtfrErgVnZaJZKX2Bzi/z7FHQD3gdgMAdzUiG0OJWGM0h75Ls9X6Gw==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1700.6", - "@angular-devkit/core": "17.0.6", - "@angular-devkit/schematics": "17.0.6", - "@schematics/angular": "17.0.6", + "@angular-devkit/architect": "0.1700.10", + "@angular-devkit/core": "17.0.10", + "@angular-devkit/schematics": "17.0.10", + "@schematics/angular": "17.0.10", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "ini": "4.1.1", @@ -323,9 +323,9 @@ } }, "node_modules/@angular/common": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.0.6.tgz", - "integrity": "sha512-FZtf8ol8W2V21ZDgFtcxmJ6JJKUO97QZ+wr/bosyYEryWMmn6VGrbOARhfW7BlrEgn14NdFkLb72KKtqoqRjrg==", + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.0.9.tgz", + "integrity": "sha512-xNS7DDfvFqfLr6xeZNJ+jORuGXP6hhv2HsYD3jb6ZQ8+QuMg+3MDij4a0L5npn72gH/Zz4JRKZ3Bt4Cq6cUqUA==", "dependencies": { "tslib": "^2.3.0" }, @@ -333,14 +333,14 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "17.0.6", + "@angular/core": "17.0.9", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.0.6.tgz", - "integrity": "sha512-PaCNnlPcL0rvByKCBUUyLWkKJYXOrcfKlYYvcacjOzEUgZeEpekG81hMRb9u/Pz+A+M4HJSTmdgzwGP35zo8qw==", + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.0.9.tgz", + "integrity": "sha512-xf0JChGttVoYPh0PRV3KnbujtlNFavcYzElS6W8iW64O+2HaSxaquWnolcgL5QT1rNGp4s/TxsttloLhbqxNmw==", "dependencies": { "tslib": "^2.3.0" }, @@ -348,7 +348,7 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "17.0.6" + "@angular/core": "17.0.9" }, "peerDependenciesMeta": { "@angular/core": { @@ -357,9 +357,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.0.6.tgz", - "integrity": "sha512-C1Gfh9kbjYZezEMOwxnvUTHuPXa+6pk7mAfSj8e5oAO6E+wfo2dTxv1J5zxa3KYzxPYMNfF8OFvLuMKsw7lXjA==", + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.0.9.tgz", + "integrity": "sha512-fpbs8ZuHi2Z/uOIAxEICzQ1aYbc8Z2TOjB0PDP1RJ1kQmtlWNWxgMqV/uJ59sJO9AMYxc496msMtmOa3OByPYQ==", "dev": true, "dependencies": { "@babel/core": "7.23.2", @@ -380,14 +380,14 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/compiler": "17.0.6", + "@angular/compiler": "17.0.9", "typescript": ">=5.2 <5.3" } }, "node_modules/@angular/core": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.0.6.tgz", - "integrity": "sha512-QzfKRTDNgGOY9D5VxenUUz20cvPVC+uVw9xiqkDuHgGfLYVFlCAK9ymFYkdUCLTcVzJPxckP+spMpPX8nc4Aqw==", + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.0.9.tgz", + "integrity": "sha512-LtDWzyx19XNmAjXju9xjw//rDZPUFu2bllHqzS6NVO1bE4PwJHIs0zfvygh0j46ubKp1gUICNk3jvYK9FMVinA==", "dependencies": { "tslib": "^2.3.0" }, @@ -400,9 +400,9 @@ } }, "node_modules/@angular/forms": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.0.6.tgz", - "integrity": "sha512-n/trsMtQHUBGiWz5lFaggMcMOuw0gH+96TCtHxQiUYJOdrbOemkFdGrNh3B4fGHmogWuOYJVF5FAm97WRES2XA==", + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.0.9.tgz", + "integrity": "sha512-UCZhJH5FCRPGmYHfKCTGbOXqz4SEs9bVkAQGwhHzhM3Bwn3cZ/LKN2UfOglIcwkqKXxKnRx+VkJ2M1KfZJAvLQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -410,16 +410,16 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "17.0.6", - "@angular/core": "17.0.6", - "@angular/platform-browser": "17.0.6", + "@angular/common": "17.0.9", + "@angular/core": "17.0.9", + "@angular/platform-browser": "17.0.9", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/material": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-17.0.3.tgz", - "integrity": "sha512-a7l5hMMCMobULAjwPK8HVQmOsbd3pOwju1QdBVhec0XwNGj2pK4ooKWdUmQcwsUA9DaZaOwAgEISHEADXJfKpQ==", + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-17.0.5.tgz", + "integrity": "sha512-5weSqDb368p6G5Nji76fRWYUZ90h19jLMSKpNGCGTXfrQi+rBgdnJbHdYrIX8/wAH/OolPzY/tXoQDFl5r7YvQ==", "dependencies": { "@material/animation": "15.0.0-canary.a246a4439.0", "@material/auto-init": "15.0.0-canary.a246a4439.0", @@ -472,7 +472,7 @@ }, "peerDependencies": { "@angular/animations": "^17.0.0 || ^18.0.0", - "@angular/cdk": "17.0.3", + "@angular/cdk": "17.0.5", "@angular/common": "^17.0.0 || ^18.0.0", "@angular/core": "^17.0.0 || ^18.0.0", "@angular/forms": "^17.0.0 || ^18.0.0", @@ -481,9 +481,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.0.6.tgz", - "integrity": "sha512-nBhWH1MKT2WswgRNIoMnmNAt0n5/fG59BanJtodW71//Aj5aIE+BuVoFgK3wmO8IMoeP4i4GXRInBXs6lUMOJw==", + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.0.9.tgz", + "integrity": "sha512-Edz039lTJ9tHR6VEPHXUcQHqdCXAhJcdPoWSWsUBJ30eZFx0VlxQEb4ujlz8LBgIVvthp5WYhHMjd/ueWzEINw==", "dependencies": { "tslib": "^2.3.0" }, @@ -491,9 +491,9 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/animations": "17.0.6", - "@angular/common": "17.0.6", - "@angular/core": "17.0.6" + "@angular/animations": "17.0.9", + "@angular/common": "17.0.9", + "@angular/core": "17.0.9" }, "peerDependenciesMeta": { "@angular/animations": { @@ -502,9 +502,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.0.6.tgz", - "integrity": "sha512-5ZEmBtBkqamTaWjUXCls7G1f3xyK/ykXE7hnUV9CgGqXKrNkxblmbtOhoWdsbuIYjjdxQcAk1qtg/Rg21wcc4w==", + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.0.9.tgz", + "integrity": "sha512-44wIecNzxEUi3T/bggeJsgK+iD7Snu64sqQg00ewsuFCMpaWwyC80LnTIff/QnBVoggAjXvEql6vwr3AZNTcuQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -512,16 +512,16 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "17.0.6", - "@angular/compiler": "17.0.6", - "@angular/core": "17.0.6", - "@angular/platform-browser": "17.0.6" + "@angular/common": "17.0.9", + "@angular/compiler": "17.0.9", + "@angular/core": "17.0.9", + "@angular/platform-browser": "17.0.9" } }, "node_modules/@angular/platform-server": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-17.0.6.tgz", - "integrity": "sha512-HrSsrkPQC7t8Yw5+bs40S4Goxscr3hWFYe7ecDmFPzJ88a4JYG38CwsJ+vv8xDQEarR4ugJMEfMxsCFNoXKLXw==", + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-17.0.9.tgz", + "integrity": "sha512-d8mUwbGwOBvrUwUd1w1o4fcnzkVsajqCtAKx+b9HI4+VOrKsNzdPKxwzzEq7+zMMGQrgagC1El6Fkr+3VNRJ1g==", "dependencies": { "tslib": "^2.3.0", "xhr2": "^0.2.0" @@ -530,17 +530,17 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/animations": "17.0.6", - "@angular/common": "17.0.6", - "@angular/compiler": "17.0.6", - "@angular/core": "17.0.6", - "@angular/platform-browser": "17.0.6" + "@angular/animations": "17.0.9", + "@angular/common": "17.0.9", + "@angular/compiler": "17.0.9", + "@angular/core": "17.0.9", + "@angular/platform-browser": "17.0.9" } }, "node_modules/@angular/router": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.0.6.tgz", - "integrity": "sha512-xW6yDxREpBOB9MoODSfIw5HwkwLK+OgK34Q6sGYs0ft9UryMoFwft+pHGAaDz2nzhA72n+Ht9B2eai78UE9jGQ==", + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.0.9.tgz", + "integrity": "sha512-kQHtPVh06g1AWA0Ntn/1Z2PX79hLwRQsTMcbU4ej1oka50C8Y97cAOMtmX9v3kqSN5fL/MEpBb44zi/X8SfPeA==", "dependencies": { "tslib": "^2.3.0" }, @@ -548,16 +548,16 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "17.0.6", - "@angular/core": "17.0.6", - "@angular/platform-browser": "17.0.6", + "@angular/common": "17.0.9", + "@angular/core": "17.0.9", + "@angular/platform-browser": "17.0.9", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/ssr": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-17.0.6.tgz", - "integrity": "sha512-QFHBZWb/ZvSQbPQn917qvUWZuWC6YuQGzAAZMmXkEaHhF3CnWpSky+QQTm24HsHXi+EK8jwqpGyurAQil8O0eQ==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-17.0.10.tgz", + "integrity": "sha512-BjDyt5JM393ibLE7jlTWajCiddK2A588koeroHtIJOBCfRgjQBXumBxMfFSIVUC48AxUG7oHWK+ZxmiQCxZNAQ==", "dependencies": { "critters": "0.0.20", "tslib": "^2.3.0" @@ -705,9 +705,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz", - "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", + "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -988,13 +988,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", - "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", "dev": true, "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.6", + "@babel/traverse": "^7.23.7", "@babel/types": "^7.23.6" }, "engines": { @@ -1420,16 +1420,15 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", - "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", @@ -2258,9 +2257,9 @@ } }, "node_modules/@babel/traverse": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", - "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.23.5", @@ -2856,9 +2855,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", + "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -3636,9 +3635,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.0.6.tgz", - "integrity": "sha512-9Us20rqGhi8PmQBwQu6Qtww3WVV/gf2s2DbzcLclsiDtSBobzT64Z6F6E9OpAYD+c5PxlUaOghL6NXdnSNdByA==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.0.10.tgz", + "integrity": "sha512-UCiLrV2aLrtR7Wr/jJi0nH2Xzb7ETenrPWU/EcW9V3lnlDun5g1J0y01jRzvcipxNTOmFfI4lqv288nKSmSOAA==", "dev": true, "engines": { "node": "^18.13.0 || >=20.9.0", @@ -3724,9 +3723,9 @@ } }, "node_modules/@npmcli/git": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.3.tgz", - "integrity": "sha512-UZp9NwK+AynTrKvHn5k3KviW/hA5eENmFsu3iAPe7sWRt0lFUdsY/wXIYjpDFe7cdSNwOIzbObfwgt6eL5/2zw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.4.tgz", + "integrity": "sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ==", "dev": true, "dependencies": { "@npmcli/promise-spawn": "^7.0.0", @@ -3801,9 +3800,9 @@ } }, "node_modules/@npmcli/promise-spawn": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.0.tgz", - "integrity": "sha512-wBqcGsMELZna0jDblGd7UXgOby45TQaMWmbFwWX+SEotk4HV6zG2t6rT9siyLhPk4P6YYqgfL1UO8nMWDBVJXQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", + "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", "dev": true, "dependencies": { "which": "^4.0.0" @@ -3837,9 +3836,9 @@ } }, "node_modules/@npmcli/run-script": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.2.tgz", - "integrity": "sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.3.tgz", + "integrity": "sha512-ZMWGLHpzMq3rBGIwPyeaoaleaLMvrBrH8nugHxTi5ACkJZXTxXPtVuEH91ifgtss5hUwJQ2VDnzDBWPmz78rvg==", "dev": true, "dependencies": { "@npmcli/node-gyp": "^3.0.0", @@ -3897,13 +3896,13 @@ } }, "node_modules/@schematics/angular": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.0.6.tgz", - "integrity": "sha512-AyC7Bk3Omy6PfADThhq5ci+zzdTTi2N1oZI35gw4tMK5ZxVwIACx2Zyhaz399m5c2RCDi9Hz4A2BOFq9f0j/dg==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.0.10.tgz", + "integrity": "sha512-rRBlDMXfVPkW3CqVQxazFqkuJXd0BFnD1zjI9WtDiNt3o2pTHbLzuWJnXKuIt5rzv0x/bFwNqIt4CPW2DYGNMg==", "dev": true, "dependencies": { - "@angular-devkit/core": "17.0.6", - "@angular-devkit/schematics": "17.0.6", + "@angular-devkit/core": "17.0.10", + "@angular-devkit/schematics": "17.0.10", "jsonc-parser": "3.2.0" }, "engines": { @@ -3913,9 +3912,9 @@ } }, "node_modules/@sigstore/bundle": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.1.0.tgz", - "integrity": "sha512-89uOo6yh/oxaU8AeOUnVrTdVMcGk9Q1hJa7Hkvalc6G3Z3CupWk4Xe9djSgJm9fMkH69s0P0cVHUoKSOemLdng==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.1.1.tgz", + "integrity": "sha512-v3/iS+1nufZdKQ5iAlQKcCsoh0jffQyABvYIxKsZQFWc4ubuGjwZklFHpDgV6O6T7vvV78SW5NHI91HFKEcxKg==", "dev": true, "dependencies": { "@sigstore/protobuf-specs": "^0.2.1" @@ -3924,6 +3923,15 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@sigstore/core": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-0.2.0.tgz", + "integrity": "sha512-THobAPPZR9pDH2CAvDLpkrYedt7BlZnsyxDe+Isq4ZmGfPy5juOFZq487vCU2EgKD7aHSiTfE/i7sN7aEdzQnA==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/@sigstore/protobuf-specs": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", @@ -3934,12 +3942,13 @@ } }, "node_modules/@sigstore/sign": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.0.tgz", - "integrity": "sha512-AAbmnEHDQv6CSfrWA5wXslGtzLPtAtHZleKOgxdQYvx/s76Fk6T6ZVt7w2IGV9j1UrFeBocTTQxaXG2oRrDhYA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.1.tgz", + "integrity": "sha512-U5sKQEj+faE1MsnLou1f4DQQHeFZay+V9s9768lw48J4pKykPj34rWyI1lsMOGJ3Mae47Ye6q3HAJvgXO21rkQ==", "dev": true, "dependencies": { - "@sigstore/bundle": "^2.1.0", + "@sigstore/bundle": "^2.1.1", + "@sigstore/core": "^0.2.0", "@sigstore/protobuf-specs": "^0.2.1", "make-fetch-happen": "^13.0.0" }, @@ -3948,13 +3957,27 @@ } }, "node_modules/@sigstore/tuf": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.2.0.tgz", - "integrity": "sha512-KKATZ5orWfqd9ZG6MN8PtCIx4eevWSuGRKQvofnWXRpyMyUEpmrzg5M5BrCpjM+NfZ0RbNGOh5tCz/P2uoRqOA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.0.tgz", + "integrity": "sha512-S98jo9cpJwO1mtQ+2zY7bOdcYyfVYCUaofCG6wWRzk3pxKHVAkSfshkfecto2+LKsx7Ovtqbgb2LS8zTRhxJ9Q==", "dev": true, "dependencies": { "@sigstore/protobuf-specs": "^0.2.1", - "tuf-js": "^2.1.0" + "tuf-js": "^2.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-0.1.0.tgz", + "integrity": "sha512-2UzMNYAa/uaz11NhvgRnIQf4gpLTJ59bhb8ESXaoSS5sxedfS+eLak8bsdMc+qpNQfITUTFoSKFx5h8umlRRiA==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.1.1", + "@sigstore/core": "^0.2.0", + "@sigstore/protobuf-specs": "^0.2.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -4066,9 +4089,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.44.8", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.8.tgz", - "integrity": "sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw==", + "version": "8.56.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", + "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", "dev": true, "dependencies": { "@types/estree": "*", @@ -4149,27 +4172,27 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.19.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", - "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==", + "version": "18.19.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.6.tgz", + "integrity": "sha512-X36s5CXMrrJOs2lQCdDF68apW4Rfx9ixYMawlepwmE4Anezv/AV2LSpKD1Ub8DAc+urp5bk0BGZ6NtmBitfnsg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/node-forge": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", - "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/qs": { - "version": "6.9.10", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", - "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", "dev": true }, "node_modules/@types/range-parser": { @@ -4437,9 +4460,9 @@ } }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -4916,23 +4939,15 @@ } }, "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } }, - "node_modules/bonjour-service/node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -4957,9 +4972,9 @@ } }, "node_modules/bootstrap-icons": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.11.2.tgz", - "integrity": "sha512-TgdiPv+IM9tgDb+dsxrnGIyocsk85d2M7T0qIgkvPedZeoZfyeG/j+yiAE4uHCEayKef2RP05ahQ0/e9Sv75Wg==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.11.3.tgz", + "integrity": "sha512-+3lpHrCw/it2/7lBL15VR0HEumaBss0+f/Lb6ZvHISn1mlK83jjFpooTLsMWbIjJMDjDjOExMsTxnXSIT4k4ww==", "funding": [ { "type": "github", @@ -5291,9 +5306,9 @@ } }, "node_modules/cacache": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.1.tgz", - "integrity": "sha512-g4Uf2CFZPaxtJKre6qr4zqLDOOPU7bNVhWjlNhvzc51xaTOx2noMOLhfFkTAqwtrAZAKQUuDfyjitzilpA8WsQ==", + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", @@ -5400,9 +5415,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001568", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz", - "integrity": "sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A==", + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", "dev": true, "funding": [ { @@ -5838,9 +5853,9 @@ } }, "node_modules/core-js-compat": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", - "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz", + "integrity": "sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==", "dev": true, "dependencies": { "browserslist": "^4.22.2" @@ -6215,12 +6230,6 @@ "node": ">=8" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, "node_modules/dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", @@ -6402,9 +6411,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.610", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz", - "integrity": "sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg==", + "version": "1.4.630", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.630.tgz", + "integrity": "sha512-osHqhtjojpCsACVnuD11xO5g9xaCyw7Qqn/C2KParkMv42i8jrJJgx3g7mkHfpxwhy9MnOJr8+pKOdZ7qzgizg==", "dev": true }, "node_modules/emoji-regex": { @@ -6947,9 +6956,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -7106,9 +7115,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", "dev": true, "funding": [ { @@ -9668,9 +9677,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.1.tgz", - "integrity": "sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", "dev": true, "optional": true, "bin": { @@ -9852,9 +9861,9 @@ } }, "node_modules/npm-packlist": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.1.tgz", - "integrity": "sha512-MQpL27ZrsJQ2kiAuQPpZb5LtJwydNRnI15QWXsf3WHERu4rzjRj6Zju/My2fov7tLuu3Gle/uoIX/DDZ3u4O4Q==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", "dev": true, "dependencies": { "ignore-walk": "^6.0.4" @@ -10631,9 +10640,9 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.0.tgz", + "integrity": "sha512-SaIbK8XW+MZbd0xHPf7kdfA/3eOt7vxJ72IRecn3EzuZVLr1r0orzf0MX/pN8m+NMDoo6X/SQd8oeKqGZd8PXg==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.4" @@ -10661,9 +10670,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -10982,9 +10991,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true }, "node_modules/regenerator-transform": { @@ -10997,9 +11006,9 @@ } }, "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", "dev": true }, "node_modules/regexpu-core": { @@ -11551,9 +11560,9 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -11739,15 +11748,17 @@ "dev": true }, "node_modules/sigstore": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.1.0.tgz", - "integrity": "sha512-kPIj+ZLkyI3QaM0qX8V/nSsweYND3W448pwkDgS6CQ74MfhEkIR8ToK5Iyx46KJYRjseVcD3Rp9zAmUAj6ZjPw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.2.0.tgz", + "integrity": "sha512-fcU9clHwEss2/M/11FFM8Jwc4PjBgbhXoNskoK5guoK0qGQBSeUbQZRJ+B2fDFIvhyf0gqCaPrel9mszbhAxug==", "dev": true, "dependencies": { - "@sigstore/bundle": "^2.1.0", + "@sigstore/bundle": "^2.1.1", + "@sigstore/core": "^0.2.0", "@sigstore/protobuf-specs": "^0.2.1", - "@sigstore/sign": "^2.1.0", - "@sigstore/tuf": "^2.1.0" + "@sigstore/sign": "^2.2.1", + "@sigstore/tuf": "^2.3.0", + "@sigstore/verify": "^0.1.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -11776,9 +11787,9 @@ } }, "node_modules/socket.io": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", - "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.4.tgz", + "integrity": "sha512-DcotgfP1Zg9iP/dH9zvAQcWrE0TtbMVwXmlV4T4mqsvY+gw+LqUGPfx2AoVyRk0FLME+GQhufDMyacFmw7ksqw==", "dev": true, "dependencies": { "accepts": "~1.3.4", @@ -11803,9 +11814,9 @@ } }, "node_modules/socket.io-client": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", - "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.4.tgz", + "integrity": "sha512-wh+OkeF0rAVCrABWQBaEjLfb7DVPotMbu0cgWgyR0v6eA4EoVnAwcIeIbcdTE3GT/H3kbdLl7OoH2+asoDRIIg==", "dev": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", @@ -12280,16 +12291,16 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" @@ -12362,6 +12373,24 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/terser-webpack-plugin/node_modules/terser": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -12444,9 +12473,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tuf-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.1.0.tgz", - "integrity": "sha512-eD7YPPjVlMzdggrOeE8zwoegUaG/rt6Bt3jwoQPunRiNVzgcCE009UDFJKJjG+Gk9wFu6W/Vi+P5d/5QpdD9jA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.0.tgz", + "integrity": "sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==", "dev": true, "dependencies": { "@tufjs/models": "2.0.0", @@ -13374,9 +13403,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.0.tgz", - "integrity": "sha512-H/Z3H55mrcrgjFwI+5jKavgXvwQLtfPCUEp6pi35VhoB0pfcHnSoyuTzkBEZpzq49g1193CUEwIvmsjcotenYw==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -13725,9 +13754,9 @@ } }, "node_modules/zone.js": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.2.tgz", - "integrity": "sha512-X4U7J1isDhoOmHmFWiLhloWc2lzMkdnumtfQ1LXzf/IOZp5NQYuMUTaviVzG/q1ugMBIXzin2AqeVJUoSEkNyQ==", + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.3.tgz", + "integrity": "sha512-jYoNqF046Q+JfcZSItRSt+oXFcpXL88yq7XAZjb/NKTS7w2hHpKjRJ3VlFD1k75wMaRRXNUt5vrZVlygiMyHbA==", "dependencies": { "tslib": "^2.3.0" } diff --git a/package.json b/package.json index 3bafa2f..b73cbff 100644 --- a/package.json +++ b/package.json @@ -11,13 +11,13 @@ }, "private": true, "dependencies": { - "@angular/animations": "^17.0.0", - "@angular/cdk": "^17.0.3", + "@angular/animations": "^17.0.9", + "@angular/cdk": "^17.0.5", "@angular/common": "^17.0.0", "@angular/compiler": "^17.0.0", "@angular/core": "^17.0.0", "@angular/forms": "^17.0.0", - "@angular/material": "^17.0.3", + "@angular/material": "^17.0.5", "@angular/platform-browser": "^17.0.0", "@angular/platform-browser-dynamic": "^17.0.0", "@angular/platform-server": "^17.0.0", @@ -27,7 +27,7 @@ "bootstrap-icons": "^1.11.2", "express": "^4.18.2", "rxjs": "~7.8.0", - "tslib": "^2.3.0", + "tslib": "^2.6.2", "zone.js": "~0.14.2" }, "devDependencies": { diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 1572338..3463e37 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -6,13 +6,24 @@ import { ShoppingListComponent } from './shopping-list/shopping-list.component'; import { SidebarComponent } from './sidebar/sidebar.component'; import { DisplayListComponent } from './display-list/display-list.component'; import { BrowserModule } from '@angular/platform-browser'; +import { LoginComponent } from './login/login.component'; +import { FormsModule } from '@angular/forms'; +import { MaterialModule } from '../modules/material/material.module'; @Component({ selector: 'app-root', standalone: true, templateUrl: './app.component.html', styleUrl: './app.component.css', - imports: [CommonModule, RouterOutlet, NavigationComponent, ShoppingListComponent, SidebarComponent, DisplayListComponent] + imports: [CommonModule, + RouterOutlet, + NavigationComponent, + FormsModule, + ShoppingListComponent, + SidebarComponent, + DisplayListComponent, + LoginComponent, + ] }) export class AppComponent { title = 'angular-project'; diff --git a/src/app/app.config.ts b/src/app/app.config.ts index 6813f1b..d58d529 100644 --- a/src/app/app.config.ts +++ b/src/app/app.config.ts @@ -4,7 +4,8 @@ import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; import { provideClientHydration } from '@angular/platform-browser'; import { provideNoopAnimations } from '@angular/platform-browser/animations'; +import { provideHttpClient, withFetch } from '@angular/common/http'; export const appConfig: ApplicationConfig = { - providers: [provideRouter(routes), provideClientHydration(), provideNoopAnimations()] + providers: [provideRouter(routes), provideClientHydration(), provideNoopAnimations(),provideHttpClient()] }; diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index 482fec3..fa8e711 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -1,6 +1,9 @@ import { Routes } from '@angular/router'; import { ShoppingListComponent } from './shopping-list/shopping-list.component'; +import { LoginComponent } from './login/login.component'; export const routes: Routes = [ + {path:'',component:LoginComponent}, + {path:'login',component:LoginComponent}, {path: 'list', component: ShoppingListComponent} ]; diff --git a/src/app/login/login.component.css b/src/app/login/login.component.css new file mode 100644 index 0000000..34c3eb2 --- /dev/null +++ b/src/app/login/login.component.css @@ -0,0 +1,25 @@ +form{ + width: 400px; + margin: auto; + margin-top: 10%; +} + +.example-card{ + align-content: center; + align-items: center; + justify-content: center; + background-color: #2C3532; +} + +mat-card-header{ + color: #fff; + margin-bottom: 5%; +} + + +input,mat-form-field{ + width: 80%; + margin-left: 10%; +} + + diff --git a/src/app/login/login.component.html b/src/app/login/login.component.html new file mode 100644 index 0000000..7a02776 --- /dev/null +++ b/src/app/login/login.component.html @@ -0,0 +1,35 @@ +<!-- <form (ngSubmit)="login()"> + <label for="username">Username:</label> + <input id="username" [(ngModel)]="auth.username" name="username" type="text"> + + <label for="password">Password:</label> + <input id="password" [(ngModel)]="auth.password" name="password" type="password"> + + <button type="submit">Login</button> + </form> --> + + + +<form (ngSubmit)="login()"> + <mat-card class="example-card"> + <mat-card-header> + <mat-card-title>Login</mat-card-title> + </mat-card-header> + + <mat-card-content> + <mat-form-field> + <mat-label>Usename</mat-label> + <input matInput [(ngModel)]="auth.username" name="name"> + </mat-form-field> + + <mat-form-field> + <mat-label>Password</mat-label> + <input matInput [(ngModel)]="auth.password" name="pass"> + </mat-form-field> + + </mat-card-content> + <mat-card-actions> + <button mat-flat-button color="primary" type="submit">Login</button> + </mat-card-actions> + </mat-card> +</form> \ No newline at end of file diff --git a/src/app/login/login.component.spec.ts b/src/app/login/login.component.spec.ts new file mode 100644 index 0000000..1e19e5d --- /dev/null +++ b/src/app/login/login.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LoginComponent } from './login.component'; + +describe('LoginComponent', () => { + let component: LoginComponent; + let fixture: ComponentFixture<LoginComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [LoginComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LoginComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/login/login.component.ts b/src/app/login/login.component.ts new file mode 100644 index 0000000..0405fbb --- /dev/null +++ b/src/app/login/login.component.ts @@ -0,0 +1,46 @@ +import { Component } from '@angular/core'; +import { Auth } from '../../entities/auth'; +import { UserService } from '../../services/user.service'; +import { FormsModule } from '@angular/forms'; +import { MaterialModule } from '../../modules/material/material.module'; +import { CommonModule } from '@angular/common'; +import { Router } from '@angular/router'; +import e from 'express'; + +@Component({ + selector: 'app-login', + standalone: true, + imports: [ + CommonModule, + MaterialModule, + FormsModule + ], + templateUrl: './login.component.html', + styleUrl: './login.component.css' +}) +export class LoginComponent { + auth = new Auth("", ""); + + constructor(private userService: UserService,private router: Router) { } + + onSubmit() { + this.userService.login(this.auth).subscribe(success=> { + if(success){ + this.router.navigate(['/get-user-lists']); + } + }) + } + + login() { + this.userService.login(this.auth).subscribe(success=> {; + console.log(this.auth) + if(success){ + console.log('Login successful'); + this.router.navigate(['/list']); + } + else{ + console.log('Login failed'); + } + }); + } +} diff --git a/src/app/navigation/navigation.component.css b/src/app/navigation/navigation.component.css index 3cb0a24..c576efe 100644 --- a/src/app/navigation/navigation.component.css +++ b/src/app/navigation/navigation.component.css @@ -1,3 +1,11 @@ .navbar navbar-expand-lg bg-body-tertiary{ margin-bottom: 0; +} + +.navbar{ + background-color: #042940!important; +} + +.navbar a{ + color: white !important; } \ No newline at end of file diff --git a/src/app/navigation/navigation.component.html b/src/app/navigation/navigation.component.html index ec19b9c..cc37cb3 100644 --- a/src/app/navigation/navigation.component.html +++ b/src/app/navigation/navigation.component.html @@ -7,16 +7,7 @@ <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav"> <li class="nav-item"> - <a class="nav-link active" aria-current="page" href="#">Home</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="list" routerLinkActive="active">Zoznam</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="#">Pricing</a> - </li> - <li class="nav-item"> - <a class="nav-link disabled" aria-disabled="true">Disabled</a> + <a class="nav-link active" href="list" routerLinkActive="active">My Lists</a> </li> </ul> </div> diff --git a/src/app/shopping-list/shopping-list.component.html b/src/app/shopping-list/shopping-list.component.html index 0f35be7..8b52281 100644 --- a/src/app/shopping-list/shopping-list.component.html +++ b/src/app/shopping-list/shopping-list.component.html @@ -1,2 +1,2 @@ -<app-sidebar></app-sidebar> -<app-display-list></app-display-list> \ No newline at end of file + <app-sidebar></app-sidebar> + <app-display-list></app-display-list> diff --git a/src/assets/images/shoppingList.jpg b/src/assets/images/shoppingList.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab3e3cbedb4d2a5482e3f4a18cef1e2b306c9116 GIT binary patch literal 255755 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[k*Snl~BufznEh`gUh6(m%5d38>V3Il#Ux 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%0D!w2@n1`D=}E#<3sQcR9;9n|2MTU)0D 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%0Dc3 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 UHgla<ZOx6guXO!W<Y)i?1IF?%3jhEB literal 0 HcmV?d00001 diff --git a/src/entities/auth.ts b/src/entities/auth.ts new file mode 100644 index 0000000..88013de --- /dev/null +++ b/src/entities/auth.ts @@ -0,0 +1,10 @@ +export class Auth{ + constructor( + public username: string, + public password: string + ){} + + public toString(): string{ + return this.username + " " + this.password; + } +} \ No newline at end of file diff --git a/src/entities/loginResponse.ts b/src/entities/loginResponse.ts new file mode 100644 index 0000000..7ca5c6d --- /dev/null +++ b/src/entities/loginResponse.ts @@ -0,0 +1,4 @@ +export interface LoginResponse { + token: string; + userID: number; + } \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index 35b00f3..6442ac4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,4 +3,4 @@ import { appConfig } from './app/app.config'; import { AppComponent } from './app/app.component'; bootstrapApplication(AppComponent, appConfig) - .catch((err) => console.error(err)); + .catch((err: any) => console.error(err)); diff --git a/src/modules/material/material.module.ts b/src/modules/material/material.module.ts new file mode 100644 index 0000000..a672a7d --- /dev/null +++ b/src/modules/material/material.module.ts @@ -0,0 +1,32 @@ +import { NgModule } from '@angular/core'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatIconModule } from '@angular/material/icon'; +import { MatInputModule } from '@angular/material/input'; +import { MatCardModule } from '@angular/material/card'; +import{MatButtonModule} from '@angular/material/button'; +import {MatToolbarModule} from '@angular/material/toolbar'; +import {MatTableModule} from '@angular/material/table'; +import {MatSnackBarModule} from '@angular/material/snack-bar'; + + + +const modules = [ + MatFormFieldModule, + MatIconModule, + MatInputModule, + MatCardModule, + MatButtonModule, + MatToolbarModule, + MatTableModule, + MatSnackBarModule +] + +@NgModule({ + imports: [ + modules + ], + exports: [ + modules + ] +}) +export class MaterialModule { } diff --git a/src/styles.css b/src/styles.css index 7e7239a..897015b 100644 --- a/src/styles.css +++ b/src/styles.css @@ -2,3 +2,8 @@ html, body { height: 100%; } body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } + +html, body { height: 100%; } +body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; + background: url('/assets/images/shoppingList.jpg') no-repeat center center fixed; +} -- GitLab From e31393b45d939d80d55f2714f1cd20b024109a63 Mon Sep 17 00:00:00 2001 From: Daniel Prevuznak <daniel.prevuznak@kosickaakademia.com> Date: Sun, 14 Jan 2024 18:26:25 +0100 Subject: [PATCH 05/32] updated data retrieval from database --- .../display-list/display-list.component.html | 10 ++- .../display-list/display-list.component.ts | 14 ++-- src/app/sidebar/sidebar.component.html | 11 ++- src/app/sidebar/sidebar.component.ts | 69 +++++------------ src/entities/ShoppingList.ts | 10 +++ src/entities/shoppingItem.ts | 5 ++ src/services/list-service.service.ts | 74 ++++++++++++------- tsconfig.json | 1 + 8 files changed, 103 insertions(+), 91 deletions(-) diff --git a/src/app/display-list/display-list.component.html b/src/app/display-list/display-list.component.html index 6e5ae5d..ecd9299 100644 --- a/src/app/display-list/display-list.component.html +++ b/src/app/display-list/display-list.component.html @@ -1,5 +1,9 @@ <div class="center-box"> - <p> - @for (item of data.items; track $index) { {{item.name}} {{item.amount}} <br>} - </p> + <h2>{{ shoppingList.name }}</h2> + <ul *ngIf="shoppingList.items && shoppingList.items.length"> + <li *ngFor="let item of shoppingList.items"> + {{ item.name }} - Amount: {{ item.amount }} - Checked: {{ item.checked ? 'Yes' : 'No' }} + </li> + </ul> + <p *ngIf="!shoppingList.items || shoppingList.items.length === 0">No items in the shopping list.</p> </div> diff --git a/src/app/display-list/display-list.component.ts b/src/app/display-list/display-list.component.ts index 870581b..6f15938 100644 --- a/src/app/display-list/display-list.component.ts +++ b/src/app/display-list/display-list.component.ts @@ -1,24 +1,26 @@ import { Component, Input, OnInit } from '@angular/core'; import { EventService } from '../../services/event-service.service'; import { ShoppingList } from '../../entities/ShoppingList'; +import { ListServiceService } from '../../services/list-service.service'; +import { CommonModule } from '@angular/common'; @Component({ selector: 'app-display-list', standalone: true, - imports: [], + imports: [CommonModule], templateUrl: './display-list.component.html', styleUrl: './display-list.component.css' }) export class DisplayListComponent implements OnInit{ - data:ShoppingList = new ShoppingList; - constructor(private eventService: EventService){ + message: string = ''; + shoppingList: ShoppingList; + constructor(private eventService: EventService, + private listService: ListServiceService){ } ngOnInit(): void { - this.eventService.SelectShoppingList.subscribe( (data:ShoppingList) => { - this.data = data; - }) + this.listService.currentList.subscribe(shoppingList => this.shoppingList = shoppingList) } } diff --git a/src/app/sidebar/sidebar.component.html b/src/app/sidebar/sidebar.component.html index 9fae7a6..206c5fd 100644 --- a/src/app/sidebar/sidebar.component.html +++ b/src/app/sidebar/sidebar.component.html @@ -1,5 +1,10 @@ <div class="sidebar"> <ul> - @for (text of sidebarText; track $index) {<li><button (click)="select($index)"> {{text}}</button></li>} - </ul> - </div> \ No newline at end of file + {{shoppingList}} + <li *ngFor="let shoppingList of shoppingLists"> + <button type="button" class="list-button" (click)="select(shoppingList)" > + {{ shoppingList.name }} + </button> + </li> + </ul> +</div> \ No newline at end of file diff --git a/src/app/sidebar/sidebar.component.ts b/src/app/sidebar/sidebar.component.ts index 6b3f492..350e52f 100644 --- a/src/app/sidebar/sidebar.component.ts +++ b/src/app/sidebar/sidebar.component.ts @@ -1,11 +1,12 @@ -import { Component, NgModule, OnInit, Output } from '@angular/core'; -import { ListServiceService } from '../../services/list-service.service'; +import { Component, NgModule, OnInit, Output, inject } from '@angular/core'; import { CommonModule } from '@angular/common'; import { EventEmitter } from 'stream'; import { group } from 'console'; +import { ListServiceService } from '../../services/list-service.service'; import { EventService } from '../../services/event-service.service'; import { ShoppingList } from '../../entities/ShoppingList'; import { ShoppingItem } from '../../entities/shoppingItem'; +import { HttpClientModule } from '@angular/common/http'; @Component({ @@ -17,63 +18,29 @@ import { ShoppingItem } from '../../entities/shoppingItem'; }) export class SidebarComponent implements OnInit{ -shoppingLists: ShoppingList[] = []; - - // jsonData = [ - // { - // "items": [ - // {"name": "Banana", "amount": 1}, - // {"name": "Bread", "amount": 5}, - // {"name": "Pepsi", "amount": 3} - // ] - // }, - // { - // "items": [ - // {"name": "Juice", "amount": 3}, - // {"name": "Ham", "amount": 3}, - // {"name": "Jam", "amount": 2} - // ] - // }, - // { - // "items": [ - // {"name": "Wafer", "amount": 3}, - // {"name": "Sausage", "amount": 3}, - // {"name": "Jam", "amount": 2} - // ] - // } - // ]; - - listArray:ShoppingList[] = [] - - - + shoppingLists: ShoppingList[] = []; selectedGroup: string | null = null; - + shoppingList: ShoppingList; sidebarText: string[] = []; - selectedItems: { name: string; amount: number }[] = []; - constructor(private eventService: EventService){ - const list1 = new ShoppingList([ - new ShoppingItem('Item 1', 2), - new ShoppingItem('Item 2', 5), - ]); - const list2 = new ShoppingList([ - new ShoppingItem('Item 3', 1), - new ShoppingItem('Item 4', 3), - ]); - const list3 = new ShoppingList([ - new ShoppingItem('Item 5', 1), - new ShoppingItem('Item 6', 3), - ]); - this.shoppingLists = [list1, list2]; + constructor(private eventService: EventService, + private listService: ListServiceService){ + } - select(index:number){ - this.eventService.SelectShoppingList.emit(this.shoppingLists[index]); + select(selectedShoppingList: ShoppingList){ + this.listService.changeList(selectedShoppingList); } - ngOnInit(): void { + ngOnInit() { + this.listService.currentList.subscribe(shoppingList => this.shoppingList = shoppingList) this.generateSidebarText(); + this.listService.getShoppingData().subscribe( + (data) => { + this.shoppingLists = data; + console.log(data); + } + ) } generateSidebarText(): void { diff --git a/src/entities/ShoppingList.ts b/src/entities/ShoppingList.ts index c54d7c3..7d8f9cd 100644 --- a/src/entities/ShoppingList.ts +++ b/src/entities/ShoppingList.ts @@ -2,7 +2,17 @@ import { ShoppingItem } from "./shoppingItem"; export class ShoppingList { constructor( + public id: number, + public user_id: number, + public name: string, + public forUserId?: number, public items: ShoppingItem[] = [] ){} + + + public toString(): string { + const itemListString = this.items.map(item => item.toString()).join(', '); + return `ShoppingList(id: ${this.id}, user_id: ${this.user_id}, name: ${this.name}, forUserId: ${this.forUserId}, items: [${itemListString}])`; + } } \ No newline at end of file diff --git a/src/entities/shoppingItem.ts b/src/entities/shoppingItem.ts index 16ef9b7..c5a5955 100644 --- a/src/entities/shoppingItem.ts +++ b/src/entities/shoppingItem.ts @@ -1,8 +1,13 @@ export class ShoppingItem { constructor( + public id: number, public name: string, + public checked: boolean, public amount?: number ){} + public toString(): string { + return `ShoppingItem(id: ${this.id}, name: ${this.name}, checked: ${this.checked}, amount: ${this.amount})`; + } } \ No newline at end of file diff --git a/src/services/list-service.service.ts b/src/services/list-service.service.ts index a554734..e23d5de 100644 --- a/src/services/list-service.service.ts +++ b/src/services/list-service.service.ts @@ -1,37 +1,55 @@ +import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Observable, of } from 'rxjs'; +import { BehaviorSubject, Observable, map} from 'rxjs'; +import { ShoppingList } from '../entities/ShoppingList'; +import { ShoppingItem } from '../entities/shoppingItem'; @Injectable({ providedIn: 'root' }) export class ListServiceService { - private shoppingData =[ - { - "items": [ - {"name": "Banana", "amount": 1}, - {"name": "Bread", "amount": 5}, - {"name": "Pepsi", "amount": 3} - ] - }, - { - "items": [ - {"name": "Juice", "amount": 3}, - {"name": "Ham", "amount": 3}, - {"name": "Jam", "amount": 2} - ] - }, - { - "items": [ - {"name": "Wafer", "amount": 3}, - {"name": "Sausage", "amount": 3}, - {"name": "Jam", "amount": 2} - ] - } - ] + private displayedList: BehaviorSubject<ShoppingList> = new BehaviorSubject<ShoppingList>( + new ShoppingList( + 1, // id + 123, // user_id + 'Grocery List', // name + undefined, // forUserId (optional) + [ + new ShoppingItem(1, 'Bread', false, 2), + new ShoppingItem(2, 'Milk', false, 1), + new ShoppingItem(3, 'Eggs', false, 12) + ] // items + ) + ); + currentList = this.displayedList.asObservable(); - getShoppingData(): Observable<any[]>{ - return of(this.shoppingData); + constructor( + private http: HttpClient) + { } + + + + headers = new HttpHeaders() + .set('content-type', 'application/json') + .set('Authorization', 'Bearer ' + localStorage.getItem('token')); + + changeList(list: ShoppingList){ + this.displayedList.next(list); + } + + getShoppingData(): Observable<ShoppingList[]> { + return this.http.get('http://localhost:8080/get-user-lists', { headers: this.headers }) + .pipe( + map((jsonData: any) => { + return jsonData.map((listData: any) => { + const items: ShoppingItem[] = listData.Items.map((itemData: any) => { + return new ShoppingItem(itemData.ID, itemData.Name, itemData.Checked, itemData.Amount); + }); + + return new ShoppingList(listData.ID, listData.UserID, listData.Name, listData.ForUserID, items); + }); + }) + ); } - constructor() { } -} +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index f37b67f..84e6f4a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,6 +2,7 @@ { "compileOnSave": false, "compilerOptions": { + "strictPropertyInitialization": false, "outDir": "./dist/out-tsc", "forceConsistentCasingInFileNames": true, "strict": true, -- GitLab From 317eab5a4440eb4ccef1385e63a517d937a1d43b Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Sun, 14 Jan 2024 18:50:45 +0100 Subject: [PATCH 06/32] move set header to getshoppingData function --- src/app/navigation/navigation.component.html | 1 - src/services/list-service.service.ts | 16 +++++++++++----- src/services/user.service.ts | 1 - 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/app/navigation/navigation.component.html b/src/app/navigation/navigation.component.html index cc37cb3..0c31b44 100644 --- a/src/app/navigation/navigation.component.html +++ b/src/app/navigation/navigation.component.html @@ -1,6 +1,5 @@ <nav class="navbar navbar-expand-lg bg-body-tertiary"> <div class="container-fluid"> - <a class="navbar-brand" href="#">Nákupné zoznamy</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> diff --git a/src/services/list-service.service.ts b/src/services/list-service.service.ts index e23d5de..08f8b35 100644 --- a/src/services/list-service.service.ts +++ b/src/services/list-service.service.ts @@ -29,16 +29,20 @@ export class ListServiceService { - headers = new HttpHeaders() - .set('content-type', 'application/json') - .set('Authorization', 'Bearer ' + localStorage.getItem('token')); + + changeList(list: ShoppingList){ this.displayedList.next(list); } getShoppingData(): Observable<ShoppingList[]> { - return this.http.get('http://localhost:8080/get-user-lists', { headers: this.headers }) + const headers = new HttpHeaders() + .set('content-type', 'application/json') + .set('Authorization', 'Bearer ' + localStorage.getItem('token')); + + + return this.http.get('http://localhost:8080/get-user-lists', { headers: headers }) .pipe( map((jsonData: any) => { return jsonData.map((listData: any) => { @@ -52,4 +56,6 @@ export class ListServiceService { ); } -} \ No newline at end of file + +} + diff --git a/src/services/user.service.ts b/src/services/user.service.ts index b55eedd..be920be 100644 --- a/src/services/user.service.ts +++ b/src/services/user.service.ts @@ -32,7 +32,6 @@ export class UserService { return this.http.post<LoginResponse>(this.url + '/login', auth).pipe( map(response => { this.token = response.token; - // localStorage.setItem('token', response.token); // localStorage.setItem('userId', response.userID.toString()); this.messageService.success('Login successful'); return true; -- GitLab From 306b560a463e310ade995b117f42146f9a6fbfc2 Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Sun, 14 Jan 2024 19:00:06 +0100 Subject: [PATCH 07/32] create logout button --- src/app/navigation/navigation.component.html | 4 ++++ src/app/navigation/navigation.component.ts | 9 ++++++++- src/services/user.service.ts | 21 +++++++++++++++++++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/app/navigation/navigation.component.html b/src/app/navigation/navigation.component.html index 0c31b44..bdadcbc 100644 --- a/src/app/navigation/navigation.component.html +++ b/src/app/navigation/navigation.component.html @@ -8,6 +8,10 @@ <li class="nav-item"> <a class="nav-link active" href="list" routerLinkActive="active">My Lists</a> </li> + + <li> + <button class="btn btn-primary" (click)="logout()">Logout</button> + </li> </ul> </div> </div> diff --git a/src/app/navigation/navigation.component.ts b/src/app/navigation/navigation.component.ts index 8c900ee..c4ddf2e 100644 --- a/src/app/navigation/navigation.component.ts +++ b/src/app/navigation/navigation.component.ts @@ -1,5 +1,6 @@ import { Component } from '@angular/core'; -import { EventService } from '../../services/event-service.service'; +import { UserService } from '../../services/user.service'; +import { Router } from '@angular/router'; @Component({ selector: 'app-navigation', @@ -10,4 +11,10 @@ import { EventService } from '../../services/event-service.service'; }) export class NavigationComponent { + constructor(private userService:UserService,private router:Router) { } + + logout() { + this.userService.logout(); + this.router.navigate(['/login']); + } } diff --git a/src/services/user.service.ts b/src/services/user.service.ts index be920be..8488c76 100644 --- a/src/services/user.service.ts +++ b/src/services/user.service.ts @@ -32,7 +32,7 @@ export class UserService { return this.http.post<LoginResponse>(this.url + '/login', auth).pipe( map(response => { this.token = response.token; - // localStorage.setItem('userId', response.userID.toString()); + this.userId = response.userID; this.messageService.success('Login successful'); return true; } @@ -42,6 +42,12 @@ export class UserService { ); } + logout(){ + localStorage.removeItem('token'); + localStorage.removeItem('userId'); + this.messageService.success('Logout successful'); + } + processError(error: any):Observable<never> { if(error instanceof HttpErrorResponse){ @@ -74,4 +80,17 @@ export class UserService { return localStorage.getItem('token')||''; } + get userId(): number{ + return parseInt(localStorage.getItem('userId')||''); + } + + set userId(userId: number){ + if(userId){ + localStorage.setItem('userId', userId.toString()); + } + else{ + localStorage.removeItem('userId'); + } + } + } -- GitLab From e5a87a7663fee47213856a2721366c7779e28aa1 Mon Sep 17 00:00:00 2001 From: Daniel Prevuznak <daniel.prevuznak@kosickaakademia.com> Date: Sun, 14 Jan 2024 22:04:20 +0100 Subject: [PATCH 08/32] small changes to models --- src/app/add-form/add-form.component.css | 46 +++++++++++++++++++++ src/app/add-form/add-form.component.html | 28 +++++++++++++ src/app/add-form/add-form.component.spec.ts | 23 +++++++++++ src/app/add-form/add-form.component.ts | 32 ++++++++++++++ src/app/app.component.ts | 1 + src/app/app.routes.ts | 4 +- 6 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 src/app/add-form/add-form.component.css create mode 100644 src/app/add-form/add-form.component.html create mode 100644 src/app/add-form/add-form.component.spec.ts create mode 100644 src/app/add-form/add-form.component.ts diff --git a/src/app/add-form/add-form.component.css b/src/app/add-form/add-form.component.css new file mode 100644 index 0000000..a7496a9 --- /dev/null +++ b/src/app/add-form/add-form.component.css @@ -0,0 +1,46 @@ +:host { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + } + + form { + width: 400px; + padding: 20px; + border: 1px solid #ccc; + border-radius: 5px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + } + + .form-group { + margin-bottom: 10px; + } + + .item-row { + display: flex; + justify-content: space-between; + align-items: center; + margin-top: 10px; + width: calc(100% - 20px); /* Adjust as needed */ + } + + .item-input, + .amount-input { + flex: 1; + margin-right: 10px; /* Add spacing between item and amount inputs */ + } + + .remove-button { + align-self: flex-end; + } + + .buttons-container { + display: flex; + justify-content: space-between; + margin-top: 10px; + } + + button { + margin-top: 10px; + } \ No newline at end of file diff --git a/src/app/add-form/add-form.component.html b/src/app/add-form/add-form.component.html new file mode 100644 index 0000000..29c71af --- /dev/null +++ b/src/app/add-form/add-form.component.html @@ -0,0 +1,28 @@ +<div> + <h2>Create Shopping List</h2> + <form #form="ngForm" (ngSubmit)="saveShoppingList(form)"> + <div class="form-group"> + <label for="listName">List Name:</label> + <input type="text" id="listName" name="listName" [(ngModel)]="shoppingListName" required> + </div> + + <div *ngFor="let item of items; let i = index" class="item-row"> + <div class="form-group"> + <label for="itemName{{i}}">Item Name:</label> + <input type="text" id="itemName{{i}}" name="itemName{{i}}" [(ngModel)]="item.name" required> + </div> + + <div class="form-group"> + <label for="itemAmount{{i}}">Amount:</label> + <input type="text" id="itemAmount{{i}}" name="itemAmount{{i}}" [(ngModel)]="item.amount" required> + </div> + + <button type="button" (click)="removeItem(i)">X</button> + </div> + + <div class="buttons-container"> + <button type="button" (click)="addItem()">Add Item</button> + <button type="submit">Save Shopping List</button> + </div> + </form> + </div> \ No newline at end of file diff --git a/src/app/add-form/add-form.component.spec.ts b/src/app/add-form/add-form.component.spec.ts new file mode 100644 index 0000000..35fcf07 --- /dev/null +++ b/src/app/add-form/add-form.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddFormComponent } from './add-form.component'; + +describe('AddFormComponent', () => { + let component: AddFormComponent; + let fixture: ComponentFixture<AddFormComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AddFormComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(AddFormComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/add-form/add-form.component.ts b/src/app/add-form/add-form.component.ts new file mode 100644 index 0000000..451768d --- /dev/null +++ b/src/app/add-form/add-form.component.ts @@ -0,0 +1,32 @@ +import { CommonModule } from '@angular/common'; +import { Component } from '@angular/core'; +import { FormsModule, NgForm } from '@angular/forms'; + +@Component({ + selector: 'app-add-form', + standalone: true, + imports: [CommonModule, FormsModule], + templateUrl: './add-form.component.html', + styleUrl: './add-form.component.css' +}) +export class AddFormComponent { + shoppingListName: string = ''; + items: any[] = [{ name: '', amount: '' }]; + + addItem() { + this.items.push({ name: '', amount: '' }); + } + + removeItem(index: number) { + this.items.splice(index, 1); + } + + saveShoppingList(form: NgForm) { + // Access form values using form.value + console.log('Shopping List Name:', this.shoppingListName); + console.log('Items:', this.items); + + // Access all form values + console.log('All Form Values:', form.value); + } +} diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 3463e37..bfb950a 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -23,6 +23,7 @@ import { MaterialModule } from '../modules/material/material.module'; SidebarComponent, DisplayListComponent, LoginComponent, + FormsModule ] }) export class AppComponent { diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index fa8e711..89fe05f 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -1,9 +1,11 @@ import { Routes } from '@angular/router'; import { ShoppingListComponent } from './shopping-list/shopping-list.component'; import { LoginComponent } from './login/login.component'; +import { AddFormComponent } from './add-form/add-form.component' export const routes: Routes = [ {path:'',component:LoginComponent}, {path:'login',component:LoginComponent}, - {path: 'list', component: ShoppingListComponent} + {path: 'list', component: ShoppingListComponent}, + {path: 'add', component: AddFormComponent} ]; -- GitLab From 6af6a3883a974c3b321326e2c03511ddba0763e8 Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Mon, 15 Jan 2024 00:35:19 +0100 Subject: [PATCH 09/32] update to check token,navigation panel,lgout --- src/app/login/login.component.html | 5 +++- src/app/login/login.component.ts | 9 +------ src/app/navigation/navigation.component.css | 4 +++ src/app/navigation/navigation.component.html | 18 +++++++++++-- src/app/navigation/navigation.component.ts | 3 ++- src/services/user.service.ts | 28 ++++++++++++++++++-- 6 files changed, 53 insertions(+), 14 deletions(-) diff --git a/src/app/login/login.component.html b/src/app/login/login.component.html index 7a02776..c1cf81c 100644 --- a/src/app/login/login.component.html +++ b/src/app/login/login.component.html @@ -24,7 +24,10 @@ <mat-form-field> <mat-label>Password</mat-label> - <input matInput [(ngModel)]="auth.password" name="pass"> + <input matInput [type]="hide ? 'password' :'text'" [(ngModel)]="auth.password" name="pass"> + <button mat-icon-button matSuffix (click)="hide = !hide" [attr.aria-label]="'Hide password'" [attr.aria-pressed]="hide"> + <mat-icon>{{hide ? 'visibility_off' : 'visibility'}}</mat-icon> + </button> </mat-form-field> </mat-card-content> diff --git a/src/app/login/login.component.ts b/src/app/login/login.component.ts index 0405fbb..2841a8e 100644 --- a/src/app/login/login.component.ts +++ b/src/app/login/login.component.ts @@ -20,17 +20,10 @@ import e from 'express'; }) export class LoginComponent { auth = new Auth("", ""); + hide = true; constructor(private userService: UserService,private router: Router) { } - onSubmit() { - this.userService.login(this.auth).subscribe(success=> { - if(success){ - this.router.navigate(['/get-user-lists']); - } - }) - } - login() { this.userService.login(this.auth).subscribe(success=> {; console.log(this.auth) diff --git a/src/app/navigation/navigation.component.css b/src/app/navigation/navigation.component.css index c576efe..2bdcf18 100644 --- a/src/app/navigation/navigation.component.css +++ b/src/app/navigation/navigation.component.css @@ -8,4 +8,8 @@ .navbar a{ color: white !important; +} + +.spacer{ + flex: 1 1 auto; } \ No newline at end of file diff --git a/src/app/navigation/navigation.component.html b/src/app/navigation/navigation.component.html index bdadcbc..ec6e71b 100644 --- a/src/app/navigation/navigation.component.html +++ b/src/app/navigation/navigation.component.html @@ -1,4 +1,4 @@ -<nav class="navbar navbar-expand-lg bg-body-tertiary"> +<!-- <nav class="navbar navbar-expand-lg bg-body-tertiary"> <div class="container-fluid"> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> @@ -9,10 +9,24 @@ <a class="nav-link active" href="list" routerLinkActive="active">My Lists</a> </li> + <span class="spacer"></span> + <li> <button class="btn btn-primary" (click)="logout()">Logout</button> </li> </ul> </div> </div> -</nav> \ No newline at end of file +</nav> --> +<mat-toolbar color="primary"> + <mat-toolbar-row> + <a mat-button routerLink="/list"routerLinkActive="active"> + <mat-icon>list</mat-icon> + My Lists + </a> + <span class="spacer"></span> + <button mat-button (click)="logout()">Logout + <mat-icon>logout</mat-icon> + </button> + </mat-toolbar-row> +</mat-toolbar> \ No newline at end of file diff --git a/src/app/navigation/navigation.component.ts b/src/app/navigation/navigation.component.ts index c4ddf2e..a9db91f 100644 --- a/src/app/navigation/navigation.component.ts +++ b/src/app/navigation/navigation.component.ts @@ -1,11 +1,12 @@ import { Component } from '@angular/core'; import { UserService } from '../../services/user.service'; import { Router } from '@angular/router'; +import { MaterialModule } from '../../modules/material/material.module'; @Component({ selector: 'app-navigation', standalone: true, - imports: [], + imports: [MaterialModule], templateUrl: './navigation.component.html', styleUrl: './navigation.component.css' }) diff --git a/src/services/user.service.ts b/src/services/user.service.ts index 8488c76..e357e63 100644 --- a/src/services/user.service.ts +++ b/src/services/user.service.ts @@ -1,8 +1,8 @@ -import { HttpClient, HttpErrorResponse } from '@angular/common/http'; +import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Auth } from '../entities/auth'; import { LoginResponse } from '../entities/loginResponse'; -import { EMPTY, Observable, catchError, defaultIfEmpty, map, tap } from 'rxjs'; +import { EMPTY, Observable, catchError, defaultIfEmpty, map, of, tap } from 'rxjs'; import { MessageService } from './message.service'; import e from 'express'; @@ -93,4 +93,28 @@ export class UserService { } } + + public checkToken(): Observable<boolean> { + const headers = new HttpHeaders() + .set('content-type', 'application/json') + .set('Authorization', 'Bearer ' + localStorage.getItem('token')); + + if (!this.token) + return of(false); + return this.http.get(this.url + 'check-token',{headers: headers}) + .pipe( + map( () => true), + catchError(error => { + if (error instanceof HttpErrorResponse) { + if (error.status == 401) { + this.logout(); + return of(false); + } + } + return this.processError(error); + }) + ); + } + + } -- GitLab From ce32de08c6544e9708dd33c191398f9e4a893257 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Le=C5=A1=C4=8Dinsk=C3=BD?= <marek.lescinsky@kosickaakademia.sk> Date: Mon, 15 Jan 2024 08:21:45 +0100 Subject: [PATCH 10/32] add new items --- src/app/add-form/add-form.component.ts | 11 +++- src/app/navigation/navigation.component.html | 6 +- src/entities/ShoppingList.ts | 10 ++-- src/entities/shoppingItem.ts | 4 +- src/services/list-service.service.ts | 58 ++++++++++++++++---- 5 files changed, 68 insertions(+), 21 deletions(-) diff --git a/src/app/add-form/add-form.component.ts b/src/app/add-form/add-form.component.ts index 451768d..1c6be8e 100644 --- a/src/app/add-form/add-form.component.ts +++ b/src/app/add-form/add-form.component.ts @@ -1,6 +1,9 @@ import { CommonModule } from '@angular/common'; import { Component } from '@angular/core'; import { FormsModule, NgForm } from '@angular/forms'; +import { UserService } from '../../services/user.service'; +import { ListServiceService } from '../../services/list-service.service'; +import { ShoppingItem } from '../../entities/shoppingItem'; @Component({ selector: 'app-add-form', @@ -13,6 +16,10 @@ export class AddFormComponent { shoppingListName: string = ''; items: any[] = [{ name: '', amount: '' }]; + constructor(private listService : ListServiceService){ + + } + addItem() { this.items.push({ name: '', amount: '' }); } @@ -25,8 +32,10 @@ export class AddFormComponent { // Access form values using form.value console.log('Shopping List Name:', this.shoppingListName); console.log('Items:', this.items); - + const shoppingItems: ShoppingItem[] = this.items.map(item => new ShoppingItem(item.name, parseInt(item.amount), false)); + console.log('ShoppingItems Array:', shoppingItems); // Access all form values console.log('All Form Values:', form.value); + this.listService.postShoppingList(this.shoppingListName, shoppingItems); } } diff --git a/src/app/navigation/navigation.component.html b/src/app/navigation/navigation.component.html index bdadcbc..ad0cbd0 100644 --- a/src/app/navigation/navigation.component.html +++ b/src/app/navigation/navigation.component.html @@ -6,9 +6,11 @@ <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav"> <li class="nav-item"> - <a class="nav-link active" href="list" routerLinkActive="active">My Lists</a> + <a class="nav-link active" href="list" routerLinkActive="active">My lists</a> </li> - + <li class="nav-item"> + <a class="nav-link active" href="add" routerLinkActive="active">Add list</a> + </li> <li> <button class="btn btn-primary" (click)="logout()">Logout</button> </li> diff --git a/src/entities/ShoppingList.ts b/src/entities/ShoppingList.ts index 7d8f9cd..3381378 100644 --- a/src/entities/ShoppingList.ts +++ b/src/entities/ShoppingList.ts @@ -2,11 +2,11 @@ import { ShoppingItem } from "./shoppingItem"; export class ShoppingList { constructor( - public id: number, - public user_id: number, - public name: string, - public forUserId?: number, - public items: ShoppingItem[] = [] + public user_id: number, + public name: string, + public items: ShoppingItem[] = [], + public forUserId?: string, + public id?: string, ){} diff --git a/src/entities/shoppingItem.ts b/src/entities/shoppingItem.ts index c5a5955..9944aaa 100644 --- a/src/entities/shoppingItem.ts +++ b/src/entities/shoppingItem.ts @@ -1,10 +1,10 @@ export class ShoppingItem { constructor( - public id: number, public name: string, + public amount: number, public checked: boolean, - public amount?: number + public id?: string, ){} public toString(): string { diff --git a/src/services/list-service.service.ts b/src/services/list-service.service.ts index 08f8b35..9c46f66 100644 --- a/src/services/list-service.service.ts +++ b/src/services/list-service.service.ts @@ -3,6 +3,7 @@ import { Injectable } from '@angular/core'; import { BehaviorSubject, Observable, map} from 'rxjs'; import { ShoppingList } from '../entities/ShoppingList'; import { ShoppingItem } from '../entities/shoppingItem'; +import { error } from 'console'; @Injectable({ providedIn: 'root' @@ -10,15 +11,15 @@ import { ShoppingItem } from '../entities/shoppingItem'; export class ListServiceService { private displayedList: BehaviorSubject<ShoppingList> = new BehaviorSubject<ShoppingList>( new ShoppingList( - 1, // id - 123, // user_id - 'Grocery List', // name - undefined, // forUserId (optional) + 123, + 'Grocery List', [ - new ShoppingItem(1, 'Bread', false, 2), - new ShoppingItem(2, 'Milk', false, 1), - new ShoppingItem(3, 'Eggs', false, 12) - ] // items + new ShoppingItem('Bread', 2, false, '8'), + new ShoppingItem('Milk', 1, false, '1'), + new ShoppingItem('Eggs', 1, false, '7') + ] , + '3', + undefined, ) ); currentList = this.displayedList.asObservable(); @@ -47,15 +48,50 @@ export class ListServiceService { map((jsonData: any) => { return jsonData.map((listData: any) => { const items: ShoppingItem[] = listData.Items.map((itemData: any) => { - return new ShoppingItem(itemData.ID, itemData.Name, itemData.Checked, itemData.Amount); + console.log(itemData.Name, itemData.Checked, itemData.Amount, itemData.ID) + return new ShoppingItem(itemData.name, itemData.amount, itemData.checked, itemData.ID); }); - return new ShoppingList(listData.ID, listData.UserID, listData.Name, listData.ForUserID, items); + return new ShoppingList(listData.UserID, listData.Name,items, listData.ID, listData.ForUserID); }); }) ); - } + } + + postShoppingList(listName : string, shoppingItems: ShoppingItem[]): void { + + const data = { + name : listName + } + + const resultObject = { + items: shoppingItems.map(item => ({ + name: item.name, + amount: item.amount + })), + }; + const headers = new HttpHeaders() + .set('content-type', 'application/json') + .set('Authorization', 'Bearer ' + localStorage.getItem('token')); + this.http.post<listResponse>('http://localhost:8080/create-list', data, {headers : headers}) + .subscribe(response => { + console.log(response.list.id); + console.log(JSON.stringify(resultObject, null, 2)); + this.http.post('http://localhost:8080/add-item/' + response.list.id, resultObject, {headers : headers}) + .subscribe(response => { + console.log('Update successful', response); + }, error =>{ + console.error('Error during Update', error); + }) + console.log('POST request was successful', response); + }, error => { + console.error('Error during POST request', error); + }); + } } +interface listResponse{ + list: ShoppingList +} \ No newline at end of file -- GitLab From f1eddd8c4fa01c8fddb79b1646d72fd9d0c2551b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Le=C5=A1=C4=8Dinsk=C3=BD?= <marek.lescinsky@kosickaakademia.sk> Date: Sat, 20 Jan 2024 20:38:06 +0100 Subject: [PATCH 11/32] update to make render client side and update the login logout(with username) to switch acoordingly and realtime --- angular.json | 7 +-- src/app/app.config.ts | 7 +-- .../display-list/display-list.component.css | 4 +- .../display-list/display-list.component.html | 7 +-- .../display-list/display-list.component.ts | 6 +-- src/app/navigation/navigation.component.html | 22 ++++++++-- src/app/navigation/navigation.component.ts | 12 +++--- src/app/sidebar/sidebar.component.html | 1 - src/app/sidebar/sidebar.component.ts | 6 +-- src/entities/ShoppingList.ts | 2 +- src/entities/loginResponse.ts | 1 + src/services/event-service.service.ts | 9 ---- src/services/list-service.service.ts | 35 ++++++--------- src/services/user.service.ts | 43 +++++++++++++++---- 14 files changed, 93 insertions(+), 69 deletions(-) delete mode 100644 src/services/event-service.service.ts diff --git a/angular.json b/angular.json index 51f2bea..e3bcfc5 100644 --- a/angular.json +++ b/angular.json @@ -32,12 +32,7 @@ ], "scripts": [ "node_modules/bootstrap/dist/js/bootstrap.bundle.min.js" - ], - "server": "src/main.server.ts", - "prerender": true, - "ssr": { - "entry": "server.ts" - } + ] }, "configurations": { "production": { diff --git a/src/app/app.config.ts b/src/app/app.config.ts index d58d529..9533048 100644 --- a/src/app/app.config.ts +++ b/src/app/app.config.ts @@ -2,10 +2,11 @@ import { ApplicationConfig } from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; -import { provideClientHydration } from '@angular/platform-browser'; import { provideNoopAnimations } from '@angular/platform-browser/animations'; -import { provideHttpClient, withFetch } from '@angular/common/http'; +import { provideHttpClient} from '@angular/common/http'; export const appConfig: ApplicationConfig = { - providers: [provideRouter(routes), provideClientHydration(), provideNoopAnimations(),provideHttpClient()] + providers: [provideRouter(routes), + provideNoopAnimations(), + provideHttpClient()] }; diff --git a/src/app/display-list/display-list.component.css b/src/app/display-list/display-list.component.css index 5ff65c6..085cf6d 100644 --- a/src/app/display-list/display-list.component.css +++ b/src/app/display-list/display-list.component.css @@ -2,7 +2,9 @@ display: flex; justify-content: center; align-items: center; - height: 100vh; /* Make the box full height of the viewport */ + /* Make the box full height of the viewport */ + height: 75vh; + } p { diff --git a/src/app/display-list/display-list.component.html b/src/app/display-list/display-list.component.html index ecd9299..289d534 100644 --- a/src/app/display-list/display-list.component.html +++ b/src/app/display-list/display-list.component.html @@ -1,6 +1,7 @@ -<div class="center-box"> - <h2>{{ shoppingList.name }}</h2> - <ul *ngIf="shoppingList.items && shoppingList.items.length"> +<div class="center-box" *ngIf="shoppingList.items && shoppingList.items.length&& shoppingList.name != 'test'"> + + <ul> + <h2>{{ shoppingList.name }}</h2> <li *ngFor="let item of shoppingList.items"> {{ item.name }} - Amount: {{ item.amount }} - Checked: {{ item.checked ? 'Yes' : 'No' }} </li> diff --git a/src/app/display-list/display-list.component.ts b/src/app/display-list/display-list.component.ts index 6f15938..6baa049 100644 --- a/src/app/display-list/display-list.component.ts +++ b/src/app/display-list/display-list.component.ts @@ -1,6 +1,5 @@ import { Component, Input, OnInit } from '@angular/core'; -import { EventService } from '../../services/event-service.service'; -import { ShoppingList } from '../../entities/ShoppingList'; +import { ShoppingList } from '../../entities/shoppingList'; import { ListServiceService } from '../../services/list-service.service'; import { CommonModule } from '@angular/common'; @@ -14,8 +13,7 @@ import { CommonModule } from '@angular/common'; export class DisplayListComponent implements OnInit{ message: string = ''; shoppingList: ShoppingList; - constructor(private eventService: EventService, - private listService: ListServiceService){ + constructor(private listService: ListServiceService){ } diff --git a/src/app/navigation/navigation.component.html b/src/app/navigation/navigation.component.html index fc685bc..0ceff55 100644 --- a/src/app/navigation/navigation.component.html +++ b/src/app/navigation/navigation.component.html @@ -22,13 +22,29 @@ <mat-icon>list</mat-icon> My Lists </a> - <a mat-button routerLink="/list"routerLinkActive="active"> + <a mat-button routerLink="/add"routerLinkActive="active"> <mat-icon>list</mat-icon> Add List </a> <span class="spacer"></span> - <button mat-button (click)="logout()">Logout + @if (user()) { + {{user()}} + <button mat-button (click)="logout()"> + <mat-icon>logout</mat-icon> + Logout + </button> + } @else { + <a mat-button routerLink="/login" routerLinkActive="active"> + <mat-icon>login</mat-icon> + Login + </a> + <!-- <a mat-button routerLink="/register" routerLinkActive="active"> + <mat-icon>person_add</mat-icon> + Register + </a> --> + } + <!-- <button mat-button (click)="logout()">Logout <mat-icon>logout</mat-icon> - </button> + </button> --> </mat-toolbar-row> </mat-toolbar> \ No newline at end of file diff --git a/src/app/navigation/navigation.component.ts b/src/app/navigation/navigation.component.ts index a9db91f..a82f239 100644 --- a/src/app/navigation/navigation.component.ts +++ b/src/app/navigation/navigation.component.ts @@ -1,20 +1,22 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { UserService } from '../../services/user.service'; -import { Router } from '@angular/router'; +import { Router, RouterLink, RouterLinkActive, RouterModule } from '@angular/router'; import { MaterialModule } from '../../modules/material/material.module'; @Component({ selector: 'app-navigation', standalone: true, - imports: [MaterialModule], + imports: [MaterialModule,RouterLink,RouterLinkActive], templateUrl: './navigation.component.html', styleUrl: './navigation.component.css' }) -export class NavigationComponent { - +export class NavigationComponent{ + user = this.userService.loggedUser; + constructor(private userService:UserService,private router:Router) { } logout() { + // console.log(this.user); this.userService.logout(); this.router.navigate(['/login']); } diff --git a/src/app/sidebar/sidebar.component.html b/src/app/sidebar/sidebar.component.html index 206c5fd..9575694 100644 --- a/src/app/sidebar/sidebar.component.html +++ b/src/app/sidebar/sidebar.component.html @@ -1,6 +1,5 @@ <div class="sidebar"> <ul> - {{shoppingList}} <li *ngFor="let shoppingList of shoppingLists"> <button type="button" class="list-button" (click)="select(shoppingList)" > {{ shoppingList.name }} diff --git a/src/app/sidebar/sidebar.component.ts b/src/app/sidebar/sidebar.component.ts index 350e52f..5e7cdee 100644 --- a/src/app/sidebar/sidebar.component.ts +++ b/src/app/sidebar/sidebar.component.ts @@ -3,8 +3,7 @@ import { CommonModule } from '@angular/common'; import { EventEmitter } from 'stream'; import { group } from 'console'; import { ListServiceService } from '../../services/list-service.service'; -import { EventService } from '../../services/event-service.service'; -import { ShoppingList } from '../../entities/ShoppingList'; +import { ShoppingList } from '../../entities/shoppingList'; import { ShoppingItem } from '../../entities/shoppingItem'; import { HttpClientModule } from '@angular/common/http'; @@ -23,8 +22,7 @@ export class SidebarComponent implements OnInit{ shoppingList: ShoppingList; sidebarText: string[] = []; - constructor(private eventService: EventService, - private listService: ListServiceService){ + constructor(private listService: ListServiceService){ } diff --git a/src/entities/ShoppingList.ts b/src/entities/ShoppingList.ts index 3381378..0ed9907 100644 --- a/src/entities/ShoppingList.ts +++ b/src/entities/ShoppingList.ts @@ -4,7 +4,7 @@ export class ShoppingList { constructor( public user_id: number, public name: string, - public items: ShoppingItem[] = [], + public items: ShoppingItem[] = [], public forUserId?: string, public id?: string, ){} diff --git a/src/entities/loginResponse.ts b/src/entities/loginResponse.ts index 7ca5c6d..22204e4 100644 --- a/src/entities/loginResponse.ts +++ b/src/entities/loginResponse.ts @@ -1,4 +1,5 @@ export interface LoginResponse { token: string; userID: number; + username: string; } \ No newline at end of file diff --git a/src/services/event-service.service.ts b/src/services/event-service.service.ts deleted file mode 100644 index 3af6205..0000000 --- a/src/services/event-service.service.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { EventEmitter, Injectable } from "@angular/core"; -import { ShoppingList } from "../entities/ShoppingList"; -@Injectable({ - providedIn: 'root' - }) -export class EventService{ - - public SelectShoppingList:EventEmitter<ShoppingList> = new EventEmitter; -} \ No newline at end of file diff --git a/src/services/list-service.service.ts b/src/services/list-service.service.ts index 9c46f66..ccbd13b 100644 --- a/src/services/list-service.service.ts +++ b/src/services/list-service.service.ts @@ -1,7 +1,7 @@ import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { BehaviorSubject, Observable, map} from 'rxjs'; -import { ShoppingList } from '../entities/ShoppingList'; +import { ShoppingList } from '../entities/shoppingList'; import { ShoppingItem } from '../entities/shoppingItem'; import { error } from 'console'; @@ -10,18 +10,10 @@ import { error } from 'console'; }) export class ListServiceService { private displayedList: BehaviorSubject<ShoppingList> = new BehaviorSubject<ShoppingList>( - new ShoppingList( - 123, - 'Grocery List', - [ - new ShoppingItem('Bread', 2, false, '8'), - new ShoppingItem('Milk', 1, false, '1'), - new ShoppingItem('Eggs', 1, false, '7') - ] , - '3', - undefined, - ) + new ShoppingList(0, '', [], '', '') ); + + url = 'http://localhost:8080'; currentList = this.displayedList.asObservable(); constructor( @@ -43,16 +35,17 @@ export class ListServiceService { .set('Authorization', 'Bearer ' + localStorage.getItem('token')); - return this.http.get('http://localhost:8080/get-user-lists', { headers: headers }) + return this.http.get<ShoppingList[]>(this.url+'/get-user-lists', { headers: headers }) .pipe( - map((jsonData: any) => { - return jsonData.map((listData: any) => { - const items: ShoppingItem[] = listData.Items.map((itemData: any) => { - console.log(itemData.Name, itemData.Checked, itemData.Amount, itemData.ID) - return new ShoppingItem(itemData.name, itemData.amount, itemData.checked, itemData.ID); + map((jsonData: ShoppingList[]) => { + console.log(jsonData); + return jsonData.map((listData: ShoppingList) => { + const items: ShoppingItem[] = listData.items.map((itemData: ShoppingItem) => { + console.log(itemData.name, itemData.checked, itemData.amount, itemData.id) + return new ShoppingItem(itemData.name, itemData.amount, itemData.checked, itemData.id); }); - return new ShoppingList(listData.UserID, listData.Name,items, listData.ID, listData.ForUserID); + return new ShoppingList(listData.user_id, listData.name, items, listData.id, listData.forUserId); }); }) ); @@ -75,11 +68,11 @@ export class ListServiceService { .set('content-type', 'application/json') .set('Authorization', 'Bearer ' + localStorage.getItem('token')); - this.http.post<listResponse>('http://localhost:8080/create-list', data, {headers : headers}) + this.http.post<listResponse>(this.url+ "/create-list", data, {headers : headers}) .subscribe(response => { console.log(response.list.id); console.log(JSON.stringify(resultObject, null, 2)); - this.http.post('http://localhost:8080/add-item/' + response.list.id, resultObject, {headers : headers}) + this.http.post(this.url+'/add-item/' + response.list.id, resultObject, {headers : headers}) .subscribe(response => { console.log('Update successful', response); }, error =>{ diff --git a/src/services/user.service.ts b/src/services/user.service.ts index e357e63..54e2822 100644 --- a/src/services/user.service.ts +++ b/src/services/user.service.ts @@ -1,18 +1,22 @@ import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { Injectable, signal } from '@angular/core'; import { Auth } from '../entities/auth'; import { LoginResponse } from '../entities/loginResponse'; -import { EMPTY, Observable, catchError, defaultIfEmpty, map, of, tap } from 'rxjs'; +import { BehaviorSubject, EMPTY, Observable, catchError, defaultIfEmpty, map, of, tap } from 'rxjs'; import { MessageService } from './message.service'; import e from 'express'; +import { ListServiceService } from './list-service.service'; +import { ShoppingList } from '../entities/shoppingList'; @Injectable({ providedIn: 'root' }) export class UserService { private url = 'http://localhost:8080'; + constructor(private http: HttpClient,private messageService:MessageService,private listService: ListServiceService) { } + + loggedUser = signal(this.username) - constructor(private http: HttpClient,private messageService:MessageService) { } // login(auth: Auth) { // return this.http.post<LoginResponse>(this.url + '/login', auth).subscribe({ @@ -33,6 +37,7 @@ export class UserService { map(response => { this.token = response.token; this.userId = response.userID; + this.username = response.username; this.messageService.success('Login successful'); return true; } @@ -43,9 +48,11 @@ export class UserService { } logout(){ - localStorage.removeItem('token'); - localStorage.removeItem('userId'); + this.token = ''; + this.userId = 0; + this.username = ''; this.messageService.success('Logout successful'); + this.listService.changeList(new ShoppingList(0, '', [], '', '')); } @@ -67,6 +74,8 @@ export class UserService { } + + set token(token: string){ if(token){ localStorage.setItem('token', token); @@ -77,22 +86,40 @@ export class UserService { } get token(): string{ - return localStorage.getItem('token')||''; + if (typeof window !== 'undefined') { + return localStorage.getItem('token') || ''; + } else { + return ''; // or handle server-side case appropriately + } } - + get userId(): number{ return parseInt(localStorage.getItem('userId')||''); } set userId(userId: number){ if(userId){ - localStorage.setItem('userId', userId.toString()); + localStorage.setItem('username', this.username); } else{ localStorage.removeItem('userId'); } } + get username(): string{ + return localStorage.getItem('username') || ''; + } + + set username(username: string){ + if(username){ + localStorage.setItem('username', username); + } + else{ + localStorage.removeItem('username'); + } + this.loggedUser.set(username) + } + public checkToken(): Observable<boolean> { const headers = new HttpHeaders() -- GitLab From 98163691846e654f40c457cedfe093c654c80288 Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Mon, 22 Jan 2024 00:01:26 +0100 Subject: [PATCH 12/32] show the add-list form instead of display list .Create new list buttin in side bar to remove the for navigation button and make the proccess easier. --- .vscode/settings.json | 2 ++ src/app/add-form/add-form.component.css | 2 +- src/app/add-form/add-form.component.html | 2 +- src/app/add-form/add-form.component.ts | 9 ++++++++- .../display-list/display-list.component.html | 3 +-- .../display-list/display-list.component.ts | 1 + .../shopping-list/shopping-list.component.css | 3 +++ .../shopping-list.component.html | 5 +++-- .../shopping-list/shopping-list.component.ts | 18 ++++++++++++++++-- src/app/sidebar/sidebar.component.css | 5 +++++ src/app/sidebar/sidebar.component.html | 3 ++- src/app/sidebar/sidebar.component.ts | 19 ++++++++++++++++--- src/services/list-service.service.ts | 9 +++++++-- 13 files changed, 66 insertions(+), 15 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/src/app/add-form/add-form.component.css b/src/app/add-form/add-form.component.css index a7496a9..d2e3596 100644 --- a/src/app/add-form/add-form.component.css +++ b/src/app/add-form/add-form.component.css @@ -2,7 +2,7 @@ display: flex; justify-content: center; align-items: center; - height: 100vh; + min-height: 80vh; /* Change this line */ } form { diff --git a/src/app/add-form/add-form.component.html b/src/app/add-form/add-form.component.html index 29c71af..8d472e0 100644 --- a/src/app/add-form/add-form.component.html +++ b/src/app/add-form/add-form.component.html @@ -1,4 +1,4 @@ -<div> +<div *ngIf="isShown"> <h2>Create Shopping List</h2> <form #form="ngForm" (ngSubmit)="saveShoppingList(form)"> <div class="form-group"> diff --git a/src/app/add-form/add-form.component.ts b/src/app/add-form/add-form.component.ts index 1c6be8e..3114f6e 100644 --- a/src/app/add-form/add-form.component.ts +++ b/src/app/add-form/add-form.component.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; +import { Component, Input, SimpleChanges } from '@angular/core'; import { FormsModule, NgForm } from '@angular/forms'; import { UserService } from '../../services/user.service'; import { ListServiceService } from '../../services/list-service.service'; @@ -13,6 +13,7 @@ import { ShoppingItem } from '../../entities/shoppingItem'; styleUrl: './add-form.component.css' }) export class AddFormComponent { + @Input() isShown: boolean = false; shoppingListName: string = ''; items: any[] = [{ name: '', amount: '' }]; @@ -38,4 +39,10 @@ export class AddFormComponent { console.log('All Form Values:', form.value); this.listService.postShoppingList(this.shoppingListName, shoppingItems); } + + ngOnChanges(changes: SimpleChanges) { + if (changes['isShown']) { + console.log('isShown changed:', changes['isShown'].currentValue); + } + } } diff --git a/src/app/display-list/display-list.component.html b/src/app/display-list/display-list.component.html index 289d534..0aed293 100644 --- a/src/app/display-list/display-list.component.html +++ b/src/app/display-list/display-list.component.html @@ -1,4 +1,4 @@ -<div class="center-box" *ngIf="shoppingList.items && shoppingList.items.length&& shoppingList.name != 'test'"> +<div class="center-box" *ngIf="!showAddForm && shoppingList.items && shoppingList.items.length&& shoppingList.name != 'test'"> <ul> <h2>{{ shoppingList.name }}</h2> @@ -6,5 +6,4 @@ {{ item.name }} - Amount: {{ item.amount }} - Checked: {{ item.checked ? 'Yes' : 'No' }} </li> </ul> - <p *ngIf="!shoppingList.items || shoppingList.items.length === 0">No items in the shopping list.</p> </div> diff --git a/src/app/display-list/display-list.component.ts b/src/app/display-list/display-list.component.ts index 6baa049..aeefc0d 100644 --- a/src/app/display-list/display-list.component.ts +++ b/src/app/display-list/display-list.component.ts @@ -11,6 +11,7 @@ import { CommonModule } from '@angular/common'; styleUrl: './display-list.component.css' }) export class DisplayListComponent implements OnInit{ + @Input() showAddForm: boolean; message: string = ''; shoppingList: ShoppingList; constructor(private listService: ListServiceService){ diff --git a/src/app/shopping-list/shopping-list.component.css b/src/app/shopping-list/shopping-list.component.css index e69de29..67ad106 100644 --- a/src/app/shopping-list/shopping-list.component.css +++ b/src/app/shopping-list/shopping-list.component.css @@ -0,0 +1,3 @@ +.hidden { + display: none; + } \ No newline at end of file diff --git a/src/app/shopping-list/shopping-list.component.html b/src/app/shopping-list/shopping-list.component.html index 8b52281..e18e24d 100644 --- a/src/app/shopping-list/shopping-list.component.html +++ b/src/app/shopping-list/shopping-list.component.html @@ -1,2 +1,3 @@ - <app-sidebar></app-sidebar> - <app-display-list></app-display-list> + <app-sidebar (hideForm)="hideForm()" (showForm)="showForm()"></app-sidebar> + <app-display-list [showAddForm]="showAddForm"></app-display-list> + <app-add-form [isShown]="showAddForm" [ngStyle]="{'display': showAddForm ? 'flex' : 'none'}"></app-add-form> \ No newline at end of file diff --git a/src/app/shopping-list/shopping-list.component.ts b/src/app/shopping-list/shopping-list.component.ts index 66bb501..ead8609 100644 --- a/src/app/shopping-list/shopping-list.component.ts +++ b/src/app/shopping-list/shopping-list.component.ts @@ -2,14 +2,28 @@ import { Component } from '@angular/core'; import { SidebarComponent } from '../sidebar/sidebar.component'; import { DisplayListComponent } from '../display-list/display-list.component'; import { CommonModule } from '@angular/common'; +import { AddFormComponent } from '../add-form/add-form.component'; @Component({ selector: 'app-shopping-list', standalone: true, templateUrl: './shopping-list.component.html', styleUrl: './shopping-list.component.css', - imports: [SidebarComponent, DisplayListComponent] + imports: [SidebarComponent, DisplayListComponent,AddFormComponent,CommonModule] }) export class ShoppingListComponent { - + showAddForm: boolean = false; + showForm() { + console.log('showForm() called'); + console.log(this.showAddForm); + this.showAddForm = true; + console.log(this.showAddForm); + } + + hideForm() { + console.log('hideForm() called'); + console.log(this.showAddForm); + this.showAddForm = false; + console.log(this.showAddForm); + } } diff --git a/src/app/sidebar/sidebar.component.css b/src/app/sidebar/sidebar.component.css index 29980b8..56055c6 100644 --- a/src/app/sidebar/sidebar.component.css +++ b/src/app/sidebar/sidebar.component.css @@ -25,4 +25,9 @@ /* Navbar styles */ .navbar { z-index: 1000; /* Increase the z-index value */ + } + + #newList{ + margin-left: 25%; + background-color: chartreuse; } \ No newline at end of file diff --git a/src/app/sidebar/sidebar.component.html b/src/app/sidebar/sidebar.component.html index 9575694..a9e4b39 100644 --- a/src/app/sidebar/sidebar.component.html +++ b/src/app/sidebar/sidebar.component.html @@ -1,9 +1,10 @@ <div class="sidebar"> <ul> <li *ngFor="let shoppingList of shoppingLists"> - <button type="button" class="list-button" (click)="select(shoppingList)" > + <button type="button" class="list-button" (click)="select(shoppingList)" (click)="onListClick()" > {{ shoppingList.name }} </button> </li> </ul> + <button mat-raised-button id="newList" (click)="onNewListClick()">New List</button> </div> \ No newline at end of file diff --git a/src/app/sidebar/sidebar.component.ts b/src/app/sidebar/sidebar.component.ts index 5e7cdee..a2956cc 100644 --- a/src/app/sidebar/sidebar.component.ts +++ b/src/app/sidebar/sidebar.component.ts @@ -1,22 +1,26 @@ -import { Component, NgModule, OnInit, Output, inject } from '@angular/core'; +import { Component, EventEmitter, NgModule, OnInit, Output, inject } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { EventEmitter } from 'stream'; import { group } from 'console'; import { ListServiceService } from '../../services/list-service.service'; import { ShoppingList } from '../../entities/shoppingList'; import { ShoppingItem } from '../../entities/shoppingItem'; import { HttpClientModule } from '@angular/common/http'; +import { MaterialModule } from '../../modules/material/material.module'; @Component({ selector: 'app-sidebar', standalone: true, - imports: [CommonModule], + imports: [CommonModule,MaterialModule], templateUrl: './sidebar.component.html', styleUrl: './sidebar.component.css' }) export class SidebarComponent implements OnInit{ + @Output() showForm = new EventEmitter(); + @Output() hideForm = new EventEmitter(); + + shoppingLists: ShoppingList[] = []; selectedGroup: string | null = null; shoppingList: ShoppingList; @@ -48,5 +52,14 @@ export class SidebarComponent implements OnInit{ }); } + + onNewListClick() { + this.showForm.emit(); + } + + onListClick(){ + this.hideForm.emit(); + } + } diff --git a/src/services/list-service.service.ts b/src/services/list-service.service.ts index ccbd13b..c0e281a 100644 --- a/src/services/list-service.service.ts +++ b/src/services/list-service.service.ts @@ -1,9 +1,9 @@ import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { BehaviorSubject, Observable, map} from 'rxjs'; -import { ShoppingList } from '../entities/shoppingList'; +import { BehaviorSubject, Observable, Subject, map} from 'rxjs'; import { ShoppingItem } from '../entities/shoppingItem'; import { error } from 'console'; +import { ShoppingList } from '../entities/shoppingList'; @Injectable({ providedIn: 'root' @@ -13,6 +13,11 @@ export class ListServiceService { new ShoppingList(0, '', [], '', '') ); + // Update the sidebar after creating new list in form + // private listAddedSource = new Subject<void>(); + // listAdded$ = this.listAddedSource.asObservable(); + + url = 'http://localhost:8080'; currentList = this.displayedList.asObservable(); -- GitLab From ea0947c12143247f146a7cfa463b4fa95e2aa077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Le=C5=A1=C4=8Dinsk=C3=BD?= <marek.lescinsky@kosickaakademia.sk> Date: Mon, 22 Jan 2024 18:00:53 +0100 Subject: [PATCH 13/32] In progress.displaying new list right after it is created in the side bar --- src/services/list-service.service.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/list-service.service.ts b/src/services/list-service.service.ts index c0e281a..7e8d2f3 100644 --- a/src/services/list-service.service.ts +++ b/src/services/list-service.service.ts @@ -78,8 +78,9 @@ export class ListServiceService { console.log(response.list.id); console.log(JSON.stringify(resultObject, null, 2)); this.http.post(this.url+'/add-item/' + response.list.id, resultObject, {headers : headers}) - .subscribe(response => { + .subscribe((response:any)=> { console.log('Update successful', response); + this.changeList(response.list); }, error =>{ console.error('Error during Update', error); }) -- GitLab From d1a52211af65df3c76bbb910867bbab264931aaa Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Mon, 22 Jan 2024 21:51:01 +0100 Subject: [PATCH 14/32] Clear the form after submiting --- src/app/add-form/add-form.component.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/add-form/add-form.component.ts b/src/app/add-form/add-form.component.ts index 3114f6e..2ae7220 100644 --- a/src/app/add-form/add-form.component.ts +++ b/src/app/add-form/add-form.component.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { Component, Input, SimpleChanges } from '@angular/core'; +import { Component, Input, SimpleChanges, ViewChild } from '@angular/core'; import { FormsModule, NgForm } from '@angular/forms'; import { UserService } from '../../services/user.service'; import { ListServiceService } from '../../services/list-service.service'; @@ -14,6 +14,7 @@ import { ShoppingItem } from '../../entities/shoppingItem'; }) export class AddFormComponent { @Input() isShown: boolean = false; + @ViewChild('form') form: NgForm; shoppingListName: string = ''; items: any[] = [{ name: '', amount: '' }]; @@ -38,6 +39,7 @@ export class AddFormComponent { // Access all form values console.log('All Form Values:', form.value); this.listService.postShoppingList(this.shoppingListName, shoppingItems); + this.form.resetForm(); } ngOnChanges(changes: SimpleChanges) { -- GitLab From 2917ecae1ee7a1218ba356ecea63a60dacb6cdce Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Mon, 22 Jan 2024 21:52:14 +0100 Subject: [PATCH 15/32] create Subject to be observer and Observable emmited when add new list --- src/services/list-service.service.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/services/list-service.service.ts b/src/services/list-service.service.ts index 7e8d2f3..b3f1c63 100644 --- a/src/services/list-service.service.ts +++ b/src/services/list-service.service.ts @@ -14,8 +14,8 @@ export class ListServiceService { ); // Update the sidebar after creating new list in form - // private listAddedSource = new Subject<void>(); - // listAdded$ = this.listAddedSource.asObservable(); + private listAddedSource = new Subject<void>(); + listAdded$ = this.listAddedSource.asObservable(); url = 'http://localhost:8080'; @@ -81,6 +81,7 @@ export class ListServiceService { .subscribe((response:any)=> { console.log('Update successful', response); this.changeList(response.list); + this.listAddedSource.next(); // Emit the event }, error =>{ console.error('Error during Update', error); }) -- GitLab From 37f25ad875654867bd7c4c3c78355d40d867d840 Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Mon, 22 Jan 2024 21:53:09 +0100 Subject: [PATCH 16/32] update the list when new list is added --- src/app/sidebar/sidebar.component.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/app/sidebar/sidebar.component.ts b/src/app/sidebar/sidebar.component.ts index a2956cc..40d2592 100644 --- a/src/app/sidebar/sidebar.component.ts +++ b/src/app/sidebar/sidebar.component.ts @@ -43,6 +43,15 @@ export class SidebarComponent implements OnInit{ console.log(data); } ) + // Subscribe to the listAdded$ observable + this.listService.listAdded$.subscribe(() => { + this.listService.getShoppingData().subscribe( + (data) => { + this.shoppingLists = data; + console.log(data); + } + ) + }); } generateSidebarText(): void { -- GitLab From 98619a41d555ac1703fbf2b77ca92de4da9dcc2c Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Tue, 23 Jan 2024 23:32:33 +0100 Subject: [PATCH 17/32] create background for new list --- src/app/add-form/add-form.component.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/app/add-form/add-form.component.css b/src/app/add-form/add-form.component.css index d2e3596..accbe51 100644 --- a/src/app/add-form/add-form.component.css +++ b/src/app/add-form/add-form.component.css @@ -43,4 +43,12 @@ button { margin-top: 10px; + } + + + .form-box{ + background-image: url('/assets/images/sticky-note-removebg-preview.png'); + background-size: cover; + width: 600px; + height: 600px; } \ No newline at end of file -- GitLab From 6b10e33b44cc0965a16b607d42fd302f8708da43 Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Tue, 23 Jan 2024 23:32:56 +0100 Subject: [PATCH 18/32] create a div to hold the background picture --- src/app/add-form/add-form.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/add-form/add-form.component.html b/src/app/add-form/add-form.component.html index 8d472e0..3cb5dae 100644 --- a/src/app/add-form/add-form.component.html +++ b/src/app/add-form/add-form.component.html @@ -1,4 +1,4 @@ -<div *ngIf="isShown"> +<div *ngIf="isShown" class="form-box"> <h2>Create Shopping List</h2> <form #form="ngForm" (ngSubmit)="saveShoppingList(form)"> <div class="form-group"> -- GitLab From 76e5e8a4e3072e1d2ca0e6375d96dd32db65ce2e Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Tue, 23 Jan 2024 23:33:26 +0100 Subject: [PATCH 19/32] update design of lists buttons --- src/app/sidebar/sidebar.component.css | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/app/sidebar/sidebar.component.css b/src/app/sidebar/sidebar.component.css index 56055c6..dda4dd9 100644 --- a/src/app/sidebar/sidebar.component.css +++ b/src/app/sidebar/sidebar.component.css @@ -28,6 +28,16 @@ } #newList{ - margin-left: 25%; + display: block; + margin: 50px auto; background-color: chartreuse; + } + + + .list-button{ + background-color: #f7c59f; + display: block; + width: 70%; /* Set the width of the buttons */ + margin: 20px auto; /* Center the buttons */ + text-align: center; } \ No newline at end of file -- GitLab From 133e40d6d62dafac1f5a9ab88dcec6d6016b8faa Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Tue, 23 Jan 2024 23:34:25 +0100 Subject: [PATCH 20/32] change the lists from ul->li to just button --- src/app/sidebar/sidebar.component.html | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/app/sidebar/sidebar.component.html b/src/app/sidebar/sidebar.component.html index a9e4b39..95b8b2d 100644 --- a/src/app/sidebar/sidebar.component.html +++ b/src/app/sidebar/sidebar.component.html @@ -1,4 +1,4 @@ -<div class="sidebar"> +<!-- <div class="sidebar"> <ul> <li *ngFor="let shoppingList of shoppingLists"> <button type="button" class="list-button" (click)="select(shoppingList)" (click)="onListClick()" > @@ -7,4 +7,10 @@ </li> </ul> <button mat-raised-button id="newList" (click)="onNewListClick()">New List</button> +</div> --> +<div class="sidebar"> + <button mat-raised-button *ngFor="let shoppingList of shoppingLists" (click)="select(shoppingList); onListClick()" class="list-button"> + {{ shoppingList.name }} + </button> + <button mat-raised-button id="newList" (click)="onNewListClick()">New List</button> </div> \ No newline at end of file -- GitLab From 1b51d8e66df55c798382a3b4a66a9dfc7e49072f Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Tue, 23 Jan 2024 23:34:54 +0100 Subject: [PATCH 21/32] list background images --- .../images/sticky-note-removebg-preview.png | Bin 0 -> 10766 bytes src/assets/images/sticky-note.png | Bin 0 -> 33339 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/assets/images/sticky-note-removebg-preview.png create mode 100644 src/assets/images/sticky-note.png diff --git a/src/assets/images/sticky-note-removebg-preview.png b/src/assets/images/sticky-note-removebg-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..a655530189fd614ee2e651921ba098bd594e4708 GIT binary patch literal 10766 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 P5)zgcHdhGd_oM#@SyI#K literal 0 HcmV?d00001 diff --git a/src/assets/images/sticky-note.png b/src/assets/images/sticky-note.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7cfd6e782b892d99885be6d1f465ba0a9a4e3c GIT binary patch literal 33339 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 literal 0 HcmV?d00001 -- GitLab From abe12febc60dad80c15c804b504f09f8f699eff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Le=C5=A1=C4=8Dinsk=C3=BD?= <marek.lescinsky@kosickaakademia.sk> Date: Fri, 2 Feb 2024 17:24:32 +0100 Subject: [PATCH 22/32] Update dimensions of form-box in add-form.component.css --- src/app/add-form/add-form.component.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/add-form/add-form.component.css b/src/app/add-form/add-form.component.css index accbe51..cf86507 100644 --- a/src/app/add-form/add-form.component.css +++ b/src/app/add-form/add-form.component.css @@ -49,6 +49,6 @@ .form-box{ background-image: url('/assets/images/sticky-note-removebg-preview.png'); background-size: cover; - width: 600px; - height: 600px; + width: 40%; + height: 400px; } \ No newline at end of file -- GitLab From 1c03cf6ff3961ac36d763c96c3bb6fc2dcdef3c5 Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Sun, 4 Feb 2024 19:14:16 +0100 Subject: [PATCH 23/32] add guard and update the add list form --- src/app/add-form/add-form.component.css | 54 +++++++++++++++++------- src/app/add-form/add-form.component.html | 14 +++--- src/app/add-form/add-form.component.ts | 5 --- src/app/app.routes.ts | 5 ++- src/app/auth.guard.spec.ts | 17 ++++++++ src/app/auth.guard.ts | 18 ++++++++ src/services/user.service.ts | 48 +++++++++++---------- 7 files changed, 110 insertions(+), 51 deletions(-) create mode 100644 src/app/auth.guard.spec.ts create mode 100644 src/app/auth.guard.ts diff --git a/src/app/add-form/add-form.component.css b/src/app/add-form/add-form.component.css index cf86507..80a2ee4 100644 --- a/src/app/add-form/add-form.component.css +++ b/src/app/add-form/add-form.component.css @@ -4,19 +4,19 @@ align-items: center; min-height: 80vh; /* Change this line */ } - + form { width: 400px; padding: 20px; - border: 1px solid #ccc; - border-radius: 5px; - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + /*border: 1px solid #ccc;*/ + /*border-radius: 5px;*/ + /*box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);*/ } - + .form-group { margin-bottom: 10px; } - + .item-row { display: flex; justify-content: space-between; @@ -24,31 +24,53 @@ margin-top: 10px; width: calc(100% - 20px); /* Adjust as needed */ } - + .item-input, .amount-input { flex: 1; margin-right: 10px; /* Add spacing between item and amount inputs */ } - + .remove-button { align-self: flex-end; } - + .buttons-container { display: flex; justify-content: space-between; margin-top: 10px; } - + button { margin-top: 10px; } - .form-box{ - background-image: url('/assets/images/sticky-note-removebg-preview.png'); - background-size: cover; - width: 40%; - height: 400px; - } \ No newline at end of file +/*.form-box {*/ +/* background-image: url('/assets/images/sticky-note-removebg-preview.png');*/ +/* background-size: cover;*/ +/* width: 40%;*/ +/* height: 400px;*/ +/* overflow-y: auto; !* Enable vertical scrolling *!*/ +/* padding: 20px; !* Add padding inside the form box *!*/ +/* box-sizing: border-box; !* Ensure padding does not increase the box size *!*/ +/*}*/ + +.form-box { + display: flex; /* Use flexbox */ + flex-direction: column; /* Stack children vertically */ + align-items: center; /* Center children horizontally */ + justify-content: flex-start; /* This aligns items to the start, ensuring the top padding/margin is respected */ + background-image: url('/assets/images/sticky-note-removebg-preview.png'); + background-size: cover; + width: 40%; + height: 400px; + overflow-y: auto; /* Enable vertical scrolling */ + padding: 20px; /* Increase top padding */ + box-sizing: border-box; /* Ensure padding and border are included in the element's total dimensions */ +} + +.top-spacer { + height: 100px; /* Adjust the height as needed */ + width: 100%; +} diff --git a/src/app/add-form/add-form.component.html b/src/app/add-form/add-form.component.html index 3cb5dae..53a1b35 100644 --- a/src/app/add-form/add-form.component.html +++ b/src/app/add-form/add-form.component.html @@ -1,28 +1,30 @@ <div *ngIf="isShown" class="form-box"> - <h2>Create Shopping List</h2> + <div class="top-spacer"></div> + + <h2>Create Shopping List</h2> <form #form="ngForm" (ngSubmit)="saveShoppingList(form)"> <div class="form-group"> <label for="listName">List Name:</label> <input type="text" id="listName" name="listName" [(ngModel)]="shoppingListName" required> </div> - + <div *ngFor="let item of items; let i = index" class="item-row"> <div class="form-group"> <label for="itemName{{i}}">Item Name:</label> <input type="text" id="itemName{{i}}" name="itemName{{i}}" [(ngModel)]="item.name" required> </div> - + <div class="form-group"> <label for="itemAmount{{i}}">Amount:</label> <input type="text" id="itemAmount{{i}}" name="itemAmount{{i}}" [(ngModel)]="item.amount" required> </div> - + <button type="button" (click)="removeItem(i)">X</button> </div> - + <div class="buttons-container"> <button type="button" (click)="addItem()">Add Item</button> <button type="submit">Save Shopping List</button> </div> </form> - </div> \ No newline at end of file + </div> diff --git a/src/app/add-form/add-form.component.ts b/src/app/add-form/add-form.component.ts index 2ae7220..1953cfa 100644 --- a/src/app/add-form/add-form.component.ts +++ b/src/app/add-form/add-form.component.ts @@ -42,9 +42,4 @@ export class AddFormComponent { this.form.resetForm(); } - ngOnChanges(changes: SimpleChanges) { - if (changes['isShown']) { - console.log('isShown changed:', changes['isShown'].currentValue); - } - } } diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index 89fe05f..9e469ad 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -2,10 +2,11 @@ import { Routes } from '@angular/router'; import { ShoppingListComponent } from './shopping-list/shopping-list.component'; import { LoginComponent } from './login/login.component'; import { AddFormComponent } from './add-form/add-form.component' +import {authGuard} from "./auth.guard"; export const routes: Routes = [ {path:'',component:LoginComponent}, {path:'login',component:LoginComponent}, - {path: 'list', component: ShoppingListComponent}, - {path: 'add', component: AddFormComponent} + {path: 'list', component: ShoppingListComponent, canActivate: [authGuard]}, + {path: 'add', component: AddFormComponent, canActivate: [authGuard]} ]; diff --git a/src/app/auth.guard.spec.ts b/src/app/auth.guard.spec.ts new file mode 100644 index 0000000..4ae275e --- /dev/null +++ b/src/app/auth.guard.spec.ts @@ -0,0 +1,17 @@ +import { TestBed } from '@angular/core/testing'; +import { CanActivateFn } from '@angular/router'; + +import { authGuard } from './auth.guard'; + +describe('authGuard', () => { + const executeGuard: CanActivateFn = (...guardParameters) => + TestBed.runInInjectionContext(() => authGuard(...guardParameters)); + + beforeEach(() => { + TestBed.configureTestingModule({}); + }); + + it('should be created', () => { + expect(executeGuard).toBeTruthy(); + }); +}); diff --git a/src/app/auth.guard.ts b/src/app/auth.guard.ts new file mode 100644 index 0000000..9ee3c50 --- /dev/null +++ b/src/app/auth.guard.ts @@ -0,0 +1,18 @@ +import {CanActivateFn, Router} from '@angular/router'; +import {inject} from "@angular/core"; +import {UserService} from "../services/user.service"; + + +export const authGuard: CanActivateFn = (route, state) => { + const router = inject(Router); + const userservice = inject(UserService); + + if (userservice.isLoggedIn()) { + console.log('User is logged in'); + return true; + } + router.navigateByUrl('/login'); + console.log('User is not logged in'); + return false; + +}; diff --git a/src/services/user.service.ts b/src/services/user.service.ts index 54e2822..679e766 100644 --- a/src/services/user.service.ts +++ b/src/services/user.service.ts @@ -28,7 +28,7 @@ export class UserService { // }, // error: error => { // console.log('There was an error during the login process', error); - // } + // } // }); // } @@ -92,7 +92,7 @@ export class UserService { return ''; // or handle server-side case appropriately } } - + get userId(): number{ return parseInt(localStorage.getItem('userId')||''); } @@ -121,27 +121,31 @@ export class UserService { } - public checkToken(): Observable<boolean> { - const headers = new HttpHeaders() - .set('content-type', 'application/json') - .set('Authorization', 'Bearer ' + localStorage.getItem('token')); - - if (!this.token) - return of(false); - return this.http.get(this.url + 'check-token',{headers: headers}) - .pipe( - map( () => true), - catchError(error => { - if (error instanceof HttpErrorResponse) { - if (error.status == 401) { - this.logout(); - return of(false); - } - } - return this.processError(error); - }) - ); + // public checkToken(): Observable<boolean> { + // const headers = new HttpHeaders() + // .set('content-type', 'application/json') + // .set('Authorization', 'Bearer ' + localStorage.getItem('token')); + // // if (!this.token) + // if (localStorage.getItem('token') === null) + // return of(false); + // return this.http.get(this.url + '/check-token',{headers: headers}) + // .pipe( + // map( () => true), + // catchError(error => { + // if (error instanceof HttpErrorResponse) { + // if (error.status == 401) { + // this.logout(); + // return of(false); + // } + // } + // return this.processError(error); + // }) + // ); + // } + isLoggedIn() : boolean { + return !!this.token; } + } -- GitLab From a9801d9c767a8ba0a1d322fbc530a71f507edca4 Mon Sep 17 00:00:00 2001 From: Daniel Prevuznak <daniel.prevuznak@kosickaakademia.com> Date: Mon, 5 Feb 2024 08:00:14 +0100 Subject: [PATCH 24/32] update --- src/app/add-form/add-form.component.css | 132 +++++++++-------- src/app/add-form/add-form.component.ts | 27 ++-- .../display-list/display-list.component.css | 134 ++++++++++++++++-- .../display-list/display-list.component.html | 45 +++++- .../display-list/display-list.component.ts | 129 +++++++++++++++-- src/app/login/login.component.html | 12 -- src/app/navigation/navigation.component.html | 22 --- src/app/sidebar/sidebar.component.css | 21 ++- src/app/sidebar/sidebar.component.html | 10 -- src/app/sidebar/sidebar.component.ts | 38 +++-- src/services/list-service.service.ts | 69 ++++++++- src/services/user.service.ts | 1 - 12 files changed, 463 insertions(+), 177 deletions(-) diff --git a/src/app/add-form/add-form.component.css b/src/app/add-form/add-form.component.css index 80a2ee4..82ebde9 100644 --- a/src/app/add-form/add-form.component.css +++ b/src/app/add-form/add-form.component.css @@ -1,76 +1,82 @@ :host { - display: flex; - justify-content: center; - align-items: center; - min-height: 80vh; /* Change this line */ - } - - form { - width: 400px; - padding: 20px; - /*border: 1px solid #ccc;*/ - /*border-radius: 5px;*/ - /*box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);*/ - } + display: flex; + justify-content: center; + align-items: center; + min-height: 80vh; +} - .form-group { - margin-bottom: 10px; - } +.form-box { + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + width: 60%; + max-width: 500px; + background-color: #ffffff; + padding: 20px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + border-radius: 8px; + overflow-y: auto; + margin: 20px; + box-sizing: border-box; +} - .item-row { - display: flex; - justify-content: space-between; - align-items: center; - margin-top: 10px; - width: calc(100% - 20px); /* Adjust as needed */ - } +.form-group { + width: 100%; + margin-bottom: 15px; +} - .item-input, - .amount-input { - flex: 1; - margin-right: 10px; /* Add spacing between item and amount inputs */ - } +form { + width: 100%; + display: flex; + flex-direction: column; + align-items: stretch; +} - .remove-button { - align-self: flex-end; - } +.item-row { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 10px; +} - .buttons-container { - display: flex; - justify-content: space-between; - margin-top: 10px; - } +input[type="text"], input[type="number"] { + padding: 8px; + border: 1px solid #ccc; + border-radius: 4px; + flex-grow: 1; + margin-right: 10px; +} - button { - margin-top: 10px; - } +button { + padding: 8px 12px; + border: none; + border-radius: 4px; + background-color: #4d90fe; + color: white; + cursor: pointer; + transition: background-color 0.3s ease; +} +button:hover { + background-color: #3578e5; +} -/*.form-box {*/ -/* background-image: url('/assets/images/sticky-note-removebg-preview.png');*/ -/* background-size: cover;*/ -/* width: 40%;*/ -/* height: 400px;*/ -/* overflow-y: auto; !* Enable vertical scrolling *!*/ -/* padding: 20px; !* Add padding inside the form box *!*/ -/* box-sizing: border-box; !* Ensure padding does not increase the box size *!*/ -/*}*/ +.buttons-container { + display: flex; + justify-content: space-between; + margin-top: 20px; +} -.form-box { - display: flex; /* Use flexbox */ - flex-direction: column; /* Stack children vertically */ - align-items: center; /* Center children horizontally */ - justify-content: flex-start; /* This aligns items to the start, ensuring the top padding/margin is respected */ - background-image: url('/assets/images/sticky-note-removebg-preview.png'); - background-size: cover; - width: 40%; - height: 400px; - overflow-y: auto; /* Enable vertical scrolling */ - padding: 20px; /* Increase top padding */ - box-sizing: border-box; /* Ensure padding and border are included in the element's total dimensions */ +button[type="submit"] { + margin-left: auto; + } -.top-spacer { - height: 100px; /* Adjust the height as needed */ - width: 100%; +button[type="button"] { + background-color: #4d90fe; } + +.remove-button { + background-color: #dc3545; +} \ No newline at end of file diff --git a/src/app/add-form/add-form.component.ts b/src/app/add-form/add-form.component.ts index 1953cfa..97cca8c 100644 --- a/src/app/add-form/add-form.component.ts +++ b/src/app/add-form/add-form.component.ts @@ -18,9 +18,7 @@ export class AddFormComponent { shoppingListName: string = ''; items: any[] = [{ name: '', amount: '' }]; - constructor(private listService : ListServiceService){ - - } + constructor(private listService : ListServiceService) {} addItem() { this.items.push({ name: '', amount: '' }); @@ -30,16 +28,21 @@ export class AddFormComponent { this.items.splice(index, 1); } - saveShoppingList(form: NgForm) { - // Access form values using form.value - console.log('Shopping List Name:', this.shoppingListName); - console.log('Items:', this.items); + validateForm(): boolean { + if (!this.shoppingListName.trim() || this.items.some(item => !item.name.trim() || !item.amount.trim())) { + window.alert('Please fill in the list name, item names and amounts'); + return false; + } + return true; +} + +saveShoppingList(form: NgForm) { + if (!this.validateForm()) return; + const shoppingItems: ShoppingItem[] = this.items.map(item => new ShoppingItem(item.name, parseInt(item.amount), false)); - console.log('ShoppingItems Array:', shoppingItems); - // Access all form values - console.log('All Form Values:', form.value); + this.listService.postShoppingList(this.shoppingListName, shoppingItems); this.form.resetForm(); - } - + window.alert('Shopping list added successfully!'); +} } diff --git a/src/app/display-list/display-list.component.css b/src/app/display-list/display-list.component.css index 085cf6d..4d17e1b 100644 --- a/src/app/display-list/display-list.component.css +++ b/src/app/display-list/display-list.component.css @@ -1,14 +1,122 @@ .center-box { - display: flex; - justify-content: center; - align-items: center; - /* Make the box full height of the viewport */ - height: 75vh; - - } - - p { - padding: 20px; - border: 1px solid #ccc; - background-color: #f8f8f8; - } \ No newline at end of file + display: flex; + justify-content: center; + align-items: center; + height: 75vh; + padding: 20px; +} + +.list-container { + width: 100%; + max-width: 600px; + padding: 20px; + border-radius: 8px; + box-shadow: 0 4px 6px rgba(0,0,0,0.1); + background-color: #ffffff; +} + +.button { + padding: 8px 12px; + border: none; + border-radius: 4px; + cursor: pointer; + font-weight: bold; + margin: 2px; +} + +.delete-button { + background-color: #ff6b6b; + color: white; +} + +.edit-button { + background-color: #4d90fe; + color: #ffffff; +} + +.list-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20px; +} + +.list-name { + flex-grow: 1; + text-align: center; + margin: 0 10px; +} + +.list-display { + list-style: none; + padding: 0; + margin: 0; +} + +.list-display li { + display: flex; + justify-content: space-between; + padding: 10px; + border-radius: 4px; + margin-bottom: 5px; + background-color: #f2f2f2; + align-items: center; +} + +.item-name { + flex-grow: 2; + margin-right: 10px; +} + +.item-amount { + flex-basis: 100px; + text-align: right; +} + +.item-checked { + flex-basis: 50px; + display: flex; + justify-content: flex-end; +} + +.list-display li.checked { + background-color: #d4edda; +} + +.edit-form, .items-container { + margin-top: 20px; +} + +.form-control { + padding: 8px; + margin-bottom: 10px; + border: 1px solid #ccc; + border-radius: 4px; + width: 100%; +} + +.form-control.small { + max-width: 100px; +} + +.checkbox-label { + display: flex; + align-items: center; + margin-right: 15px; +} + +.item-edit-form { + display: flex; + align-items: center; + gap: 10px; +} + +.form-actions { + display: flex; + justify-content: space-between; + margin-top: 10px; +} + +.add-item, .save-changes { + flex-basis: 49%; +} \ No newline at end of file diff --git a/src/app/display-list/display-list.component.html b/src/app/display-list/display-list.component.html index 0aed293..5c18f5a 100644 --- a/src/app/display-list/display-list.component.html +++ b/src/app/display-list/display-list.component.html @@ -1,9 +1,40 @@ -<div class="center-box" *ngIf="!showAddForm && shoppingList.items && shoppingList.items.length&& shoppingList.name != 'test'"> - - <ul> - <h2>{{ shoppingList.name }}</h2> - <li *ngFor="let item of shoppingList.items"> - {{ item.name }} - Amount: {{ item.amount }} - Checked: {{ item.checked ? 'Yes' : 'No' }} +<div class="center-box" *ngIf="!showAddForm && shoppingList.items && shoppingList.items.length && shoppingList.name != 'test'"> + <div class="list-container"> + + <div class="list-header"> + <button (click)="deleteCurrentList()" class="button delete-button">Delete List</button> + <h2 class="list-name">{{ shoppingList.name }}</h2> + <button (click)="toggleEditForm()" class="button edit-button">Edit</button> + </div> + + <ul class="list-display" *ngIf="!isEditing"> + <li *ngFor="let item of shoppingList.items; let i = index" [class.checked]="item.checked"> + <span class="item-name">{{ item.name }}</span> + <span class="item-amount">Amount: {{ item.amount }}</span> + <span class="item-checked"> + <input type="checkbox" [checked]="item.checked" disabled /> + </span> </li> </ul> -</div> + + <form *ngIf="isEditing" (submit)="submitEditForm()" class="edit-form"> + <div class="form-group"> + <input type="text" [(ngModel)]="shoppingList.name" name="listName" placeholder="List Name" class="form-control"/> + </div> + <div class="items-container"> + <div *ngFor="let item of shoppingList.items; let i = index" class="item-edit-form"> + <input type="text" [(ngModel)]="item.name" name="itemName{{i}}" placeholder="Item Name" class="form-control"/> + <input type="number" [(ngModel)]="item.amount" name="itemAmount{{i}}" placeholder="Amount" class="form-control small"/> + <label class="checkbox-label"> + <input type="checkbox" [(ngModel)]="item.checked" name="itemChecked{{i}}"/> Checked + </label> + <button type="button" (click)="deleteItem(i)" class="button delete-item">Delete</button> + </div> + </div> + <div class="form-actions"> + <button type="button" (click)="addItem()" class="button add-item">Add Item</button> + <button type="submit" class="button save-changes">Save Changes</button> + </div> + </form> + </div> +</div> \ No newline at end of file diff --git a/src/app/display-list/display-list.component.ts b/src/app/display-list/display-list.component.ts index aeefc0d..c9b42c2 100644 --- a/src/app/display-list/display-list.component.ts +++ b/src/app/display-list/display-list.component.ts @@ -1,25 +1,138 @@ import { Component, Input, OnInit } from '@angular/core'; import { ShoppingList } from '../../entities/shoppingList'; +import { ShoppingItem } from '../../entities/shoppingItem'; import { ListServiceService } from '../../services/list-service.service'; import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; @Component({ selector: 'app-display-list', standalone: true, - imports: [CommonModule], + imports: [CommonModule, FormsModule], templateUrl: './display-list.component.html', - styleUrl: './display-list.component.css' + styleUrls: ['./display-list.component.css'] }) -export class DisplayListComponent implements OnInit{ +export class DisplayListComponent implements OnInit { @Input() showAddForm: boolean; - message: string = ''; - shoppingList: ShoppingList; - constructor(private listService: ListServiceService){ + shoppingList: ShoppingList; + isEditing: boolean = false; + deletedItemIds: string[] = []; + newItems: ShoppingItem[] = []; + originalItems: Map<string, ShoppingItem> = new Map(); + changedItems: Map<string, ShoppingItem> = new Map(); + originalListName: string; + + constructor(private listService: ListServiceService) { } + + ngOnInit(): void { + this.listService.currentList.subscribe(shoppingList => this.shoppingList = shoppingList); + } + + areItemsEqual(item1: ShoppingItem, item2: ShoppingItem): boolean { + if (!item1 || !item2) { + return false; + } + return item1.name === item2.name && + item1.amount === item2.amount && + item1.checked === item2.checked; + } + toggleEditForm() { + this.isEditing = !this.isEditing; + + if (this.isEditing) { + this.originalListName = this.shoppingList.name; + this.shoppingList.items.forEach(item => { + this.originalItems.set(item.id as string, JSON.parse(JSON.stringify(item))); + }); + } + } + + deleteCurrentList() { + if (!this.shoppingList || !this.shoppingList.id) { + alert('No list selected or list has no ID.'); + return; + } + if (confirm('Are you sure you want to delete this list?')) { + this.listService.deleteList(this.shoppingList.id).subscribe(() => { + this.listService.changeList(new ShoppingList(0, '', [], '', '')); + this.listService.deleteList(this.shoppingList.id as string).subscribe(() => { + + this.listService.notifyListDeletion(this.shoppingList.id as string); + }); + alert('List deleted successfully.'); + + }, error => { + console.error('Error deleting the list:', error); + alert('Failed to delete the list.'); + }); + } +} + + submitEditForm() { + let listNameUpdated = false; + if (this.shoppingList.name !== this.originalListName) { + listNameUpdated = true; + } + + this.deletedItemIds.forEach(id => { + this.listService.deleteItemById(id).subscribe({ + next: (response) => console.log(`Deleted item with ID: ${id}`), + error: (err) => console.error(`Error deleting item with ID: ${id}`, err), + }); + }); + + this.deletedItemIds = []; + if (this.newItems.length > 0) { + this.listService.addItemToList(this.shoppingList.id as string, this.newItems).subscribe({ + next: (response) => console.log('New items added successfully', response), + error: (err) => console.error('Error adding new items', err) + }); + } + + this.newItems = []; + + let updatedItems: ShoppingItem[] = []; + + this.shoppingList.items.forEach(item => { + const originalItem = this.originalItems.get(item.id as string); + if (!this.areItemsEqual(item, originalItem as ShoppingItem)) { + updatedItems.push(item); + } + }); + + if (updatedItems.length > 0 ){ + updatedItems.forEach(item => { + this.listService.updateItem(item).subscribe({ + next: (response) => console.log(`Updated item with ID: ${item.id}`), + error: (err) => console.error(`Error updating item with ID: ${item.id}`, err), + }); + }); + } + + if (listNameUpdated) { + this.listService.updateListName(this.shoppingList.id as string, this.shoppingList.name).subscribe({ + next: (response) => console.log(`List name updated successfully`), + error: (err) => console.error(`Error updating list name`, err) + }); + } + + updatedItems = []; + + this.toggleEditForm(); } - ngOnInit(): void { - this.listService.currentList.subscribe(shoppingList => this.shoppingList = shoppingList) + addItem() { + const newItem = new ShoppingItem('', 1, false); + this.newItems.push(newItem); + this.shoppingList.items.push(newItem); } + deleteItem(index: number) { + const item = this.shoppingList.items[index]; + if (item && item.id) { + this.deletedItemIds.push(item.id); + } + this.shoppingList.items.splice(index, 1); } +} \ No newline at end of file diff --git a/src/app/login/login.component.html b/src/app/login/login.component.html index c1cf81c..678530a 100644 --- a/src/app/login/login.component.html +++ b/src/app/login/login.component.html @@ -1,15 +1,3 @@ -<!-- <form (ngSubmit)="login()"> - <label for="username">Username:</label> - <input id="username" [(ngModel)]="auth.username" name="username" type="text"> - - <label for="password">Password:</label> - <input id="password" [(ngModel)]="auth.password" name="password" type="password"> - - <button type="submit">Login</button> - </form> --> - - - <form (ngSubmit)="login()"> <mat-card class="example-card"> <mat-card-header> diff --git a/src/app/navigation/navigation.component.html b/src/app/navigation/navigation.component.html index 0ceff55..37eb013 100644 --- a/src/app/navigation/navigation.component.html +++ b/src/app/navigation/navigation.component.html @@ -1,31 +1,9 @@ -<!-- <nav class="navbar navbar-expand-lg bg-body-tertiary"> - <div class="container-fluid"> - <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> - <span class="navbar-toggler-icon"></span> - </button> - <div class="collapse navbar-collapse" id="navbarNav"> - <ul class="navbar-nav"> - <li class="nav-item"> - <a class="nav-link active" href="list" routerLinkActive="active">My lists</a> - </li> - - <li> - <button class="btn btn-primary" (click)="logout()">Logout</button> - </li> - </ul> - </div> - </div> -</nav> --> <mat-toolbar color="primary"> <mat-toolbar-row> <a mat-button routerLink="/list"routerLinkActive="active"> <mat-icon>list</mat-icon> My Lists </a> - <a mat-button routerLink="/add"routerLinkActive="active"> - <mat-icon>list</mat-icon> - Add List - </a> <span class="spacer"></span> @if (user()) { {{user()}} diff --git a/src/app/sidebar/sidebar.component.css b/src/app/sidebar/sidebar.component.css index dda4dd9..23b120b 100644 --- a/src/app/sidebar/sidebar.component.css +++ b/src/app/sidebar/sidebar.component.css @@ -1,30 +1,29 @@ -/* Sidebar styles */ + .sidebar { height: 100%; width: 250px; position: fixed; - top: 60px; /* Adjust this value based on the height of the top navbar */ + top: 60px; left: 0; background-color: #333; padding-top: 20px; color: white; z-index: 1000; } - - /* Main content styles */ + .main-content { - margin-left: 250px; /* Adjust this margin to accommodate the width of the sidebar */ + margin-left: 250px; padding: 20px; } - /* Adjust the top margin of the main content to leave space for the top navbar */ + .main-content { - margin-top: 60px; /* Assuming the top navbar is around 60px in height, adjust as needed */ + margin-top: 60px; } - /* Navbar styles */ + .navbar { - z-index: 1000; /* Increase the z-index value */ + z-index: 1000; } #newList{ @@ -37,7 +36,7 @@ .list-button{ background-color: #f7c59f; display: block; - width: 70%; /* Set the width of the buttons */ - margin: 20px auto; /* Center the buttons */ + width: 70%; + margin: 20px auto; text-align: center; } \ No newline at end of file diff --git a/src/app/sidebar/sidebar.component.html b/src/app/sidebar/sidebar.component.html index 95b8b2d..e0da129 100644 --- a/src/app/sidebar/sidebar.component.html +++ b/src/app/sidebar/sidebar.component.html @@ -1,13 +1,3 @@ -<!-- <div class="sidebar"> - <ul> - <li *ngFor="let shoppingList of shoppingLists"> - <button type="button" class="list-button" (click)="select(shoppingList)" (click)="onListClick()" > - {{ shoppingList.name }} - </button> - </li> - </ul> - <button mat-raised-button id="newList" (click)="onNewListClick()">New List</button> -</div> --> <div class="sidebar"> <button mat-raised-button *ngFor="let shoppingList of shoppingLists" (click)="select(shoppingList); onListClick()" class="list-button"> {{ shoppingList.name }} diff --git a/src/app/sidebar/sidebar.component.ts b/src/app/sidebar/sidebar.component.ts index 40d2592..8f0a3b4 100644 --- a/src/app/sidebar/sidebar.component.ts +++ b/src/app/sidebar/sidebar.component.ts @@ -35,23 +35,21 @@ export class SidebarComponent implements OnInit{ } ngOnInit() { - this.listService.currentList.subscribe(shoppingList => this.shoppingList = shoppingList) + this.listService.currentList.subscribe(shoppingList => this.shoppingList = shoppingList); this.generateSidebarText(); this.listService.getShoppingData().subscribe( (data) => { this.shoppingLists = data; - console.log(data); } - ) - // Subscribe to the listAdded$ observable - this.listService.listAdded$.subscribe(() => { - this.listService.getShoppingData().subscribe( - (data) => { - this.shoppingLists = data; - console.log(data); - } - ) - }); + ); + + this.listService.listAdded$.subscribe(() => { + this.refreshShoppingLists(); + }); + + this.listService.listDeleted$.subscribe(deletedListId => { + this.shoppingLists = this.shoppingLists.filter(list => list.id !== deletedListId); + }); } generateSidebarText(): void { @@ -61,6 +59,19 @@ export class SidebarComponent implements OnInit{ }); } + refreshShoppingLists() { + this.listService.getShoppingData().subscribe( + (data) => { + this.shoppingLists = data; + console.log(data); + } + ); + } + + removeDeletedList(deletedListId: string) { + this.shoppingLists = this.shoppingLists.filter(list => list.id !== deletedListId); + } + onNewListClick() { this.showForm.emit(); @@ -70,5 +81,4 @@ export class SidebarComponent implements OnInit{ this.hideForm.emit(); } -} - +} \ No newline at end of file diff --git a/src/services/list-service.service.ts b/src/services/list-service.service.ts index b3f1c63..69c0559 100644 --- a/src/services/list-service.service.ts +++ b/src/services/list-service.service.ts @@ -1,10 +1,12 @@ import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { BehaviorSubject, Observable, Subject, map} from 'rxjs'; +import { BehaviorSubject, Observable, Subject, map, tap, throwError} from 'rxjs'; import { ShoppingItem } from '../entities/shoppingItem'; import { error } from 'console'; import { ShoppingList } from '../entities/shoppingList'; + + @Injectable({ providedIn: 'root' }) @@ -13,10 +15,11 @@ export class ListServiceService { new ShoppingList(0, '', [], '', '') ); - // Update the sidebar after creating new list in form private listAddedSource = new Subject<void>(); listAdded$ = this.listAddedSource.asObservable(); + private listDeletedSource = new Subject<string>(); // or new BehaviorSubject<string>(null); + listDeleted$ = this.listDeletedSource.asObservable(); url = 'http://localhost:8080'; currentList = this.displayedList.asObservable(); @@ -25,9 +28,62 @@ export class ListServiceService { private http: HttpClient) { } + notifyListDeletion(deletedListId: string) { + this.listDeletedSource.next(deletedListId); + } + + deleteList(listId: string) { + const headers = new HttpHeaders() + .set('content-type', 'application/json') + .set('Authorization', 'Bearer ' + localStorage.getItem('token')); + return this.http.delete(this.url + '/delete-list/' + listId, { headers }).pipe( + tap(() => { + this.listDeletedSource.next(listId); + }) + ); +} + + updateItem(item: ShoppingItem){ + const headers = new HttpHeaders() + .set('content-type', 'application/json') + .set('Authorization', 'Bearer ' + localStorage.getItem('token')); + const body = { + checked: item.checked, + name: item.name, + quantity: item.amount + } + return this.http.patch(this.url+'/update-item-checked-status/'+item.id,body, { headers }); + } + deleteItemById(itemId: string): Observable<any> { + const headers = new HttpHeaders() + .set('content-type', 'application/json') + .set('Authorization', 'Bearer ' + localStorage.getItem('token')); + return this.http.delete(this.url+'/delete-item/'+itemId, { headers: headers }); + } + addItemToList(listId: string, newItems: ShoppingItem[]): Observable<any> { + const headers = new HttpHeaders() + .set('content-type', 'application/json') + .set('Authorization', 'Bearer ' + localStorage.getItem('token')); + const body = { items: newItems }; + const jsonString = JSON.stringify(body); + console.log(jsonString); + console.log(jsonString); + console.log(jsonString); + + return this.http.post(this.url+'/add-item/'+listId, body, { headers }); + } + updateListName(id: string, name: string){ + const headers = new HttpHeaders() + .set('content-type', 'application/json') + .set('Authorization', 'Bearer ' + localStorage.getItem('token')); + const body = { + name: name + } + return this.http.patch(this.url+'/update-list/'+id, body, { headers }); + } changeList(list: ShoppingList){ @@ -49,8 +105,8 @@ export class ListServiceService { console.log(itemData.name, itemData.checked, itemData.amount, itemData.id) return new ShoppingItem(itemData.name, itemData.amount, itemData.checked, itemData.id); }); - - return new ShoppingList(listData.user_id, listData.name, items, listData.id, listData.forUserId); + + return new ShoppingList(listData.user_id, listData.name, items, listData.id, listData.id); }); }) ); @@ -90,6 +146,11 @@ export class ListServiceService { console.error('Error during POST request', error); }); } + + private handleError(message: string, error: any) { + window.alert(`${message}. Please try again.`); + return throwError(() => new Error(error)); + } } interface listResponse{ diff --git a/src/services/user.service.ts b/src/services/user.service.ts index 679e766..d6a4f06 100644 --- a/src/services/user.service.ts +++ b/src/services/user.service.ts @@ -17,7 +17,6 @@ export class UserService { loggedUser = signal(this.username) - // login(auth: Auth) { // return this.http.post<LoginResponse>(this.url + '/login', auth).subscribe({ // next: response => { -- GitLab From cbe177566334a960f3a13bb93f8ac7717211dde0 Mon Sep 17 00:00:00 2001 From: Daniel Prevuznak <daniel.prevuznak@kosickaakademia.com> Date: Mon, 5 Feb 2024 08:43:17 +0100 Subject: [PATCH 25/32] fixed items not updating after adding a new one --- .../display-list/display-list.component.ts | 86 +++++++++++-------- 1 file changed, 48 insertions(+), 38 deletions(-) diff --git a/src/app/display-list/display-list.component.ts b/src/app/display-list/display-list.component.ts index c9b42c2..f149494 100644 --- a/src/app/display-list/display-list.component.ts +++ b/src/app/display-list/display-list.component.ts @@ -68,60 +68,70 @@ export class DisplayListComponent implements OnInit { } } - submitEditForm() { - let listNameUpdated = false; - if (this.shoppingList.name !== this.originalListName) { - listNameUpdated = true; - } +submitEditForm() { - this.deletedItemIds.forEach(id => { - this.listService.deleteItemById(id).subscribe({ - next: (response) => console.log(`Deleted item with ID: ${id}`), - error: (err) => console.error(`Error deleting item with ID: ${id}`, err), - }); + if (this.shoppingList.name.trim() === '' || + this.shoppingList.items.some(item => item.name.trim() === '' || item.amount === null || item.amount < 1)) { + window.alert('Please make sure the list name and all item names and amounts are filled in.'); + return; + } + + let listNameUpdated = false; + if (this.shoppingList.name !== this.originalListName) { + listNameUpdated = true; + } + + this.deletedItemIds.forEach(id => { + this.listService.deleteItemById(id).subscribe({ + next: (response) => console.log(`Deleted item with ID: ${id}`), + error: (err) => console.error(`Error deleting item with ID: ${id}`, err), }); - - this.deletedItemIds = []; - if (this.newItems.length > 0) { - this.listService.addItemToList(this.shoppingList.id as string, this.newItems).subscribe({ + }); + + + this.deletedItemIds = []; + + if (this.newItems.length > 0) { + this.listService.addItemToList(this.shoppingList.id as string, this.newItems).subscribe({ next: (response) => console.log('New items added successfully', response), error: (err) => console.error('Error adding new items', err) - }); - } - + }); + this.listService.getShoppingData(); this.newItems = []; + } - let updatedItems: ShoppingItem[] = []; - - this.shoppingList.items.forEach(item => { - const originalItem = this.originalItems.get(item.id as string); - if (!this.areItemsEqual(item, originalItem as ShoppingItem)) { - updatedItems.push(item); - } - }); + let updatedItems: ShoppingItem[] = []; + + + this.shoppingList.items.forEach(item => { + const originalItem = this.originalItems.get(item.id as string); + if (!this.areItemsEqual(item, originalItem as ShoppingItem)) { + updatedItems.push(item); + } + }); - if (updatedItems.length > 0 ){ + + if (updatedItems.length > 0) { updatedItems.forEach(item => { this.listService.updateItem(item).subscribe({ next: (response) => console.log(`Updated item with ID: ${item.id}`), error: (err) => console.error(`Error updating item with ID: ${item.id}`, err), }); }); - - } - - if (listNameUpdated) { - this.listService.updateListName(this.shoppingList.id as string, this.shoppingList.name).subscribe({ - next: (response) => console.log(`List name updated successfully`), - error: (err) => console.error(`Error updating list name`, err) - }); - } + } - updatedItems = []; - - this.toggleEditForm(); + if (listNameUpdated) { + this.listService.updateListName(this.shoppingList.id as string, this.shoppingList.name).subscribe({ + next: (response) => console.log('List name updated successfully'), + error: (err) => console.error('Error updating list name', err) + }); } + updatedItems = []; + this.toggleEditForm(); + window.alert('Changes saved successfully!'); +} + addItem() { const newItem = new ShoppingItem('', 1, false); this.newItems.push(newItem); -- GitLab From f3aec99bf9f393b561e9bc9cbc309aa003cb743d Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Tue, 11 Jun 2024 21:24:43 +0200 Subject: [PATCH 26/32] Create template driven form validation --- src/app/add-form/add-form.component.css | 4 ++++ src/app/add-form/add-form.component.html | 15 ++++++++++++--- src/app/add-form/add-form.component.ts | 16 ++++++++++++++-- src/app/login/login.component.css | 5 +++++ src/app/login/login.component.html | 13 +++++++++---- 5 files changed, 44 insertions(+), 9 deletions(-) diff --git a/src/app/add-form/add-form.component.css b/src/app/add-form/add-form.component.css index 82ebde9..4494e90 100644 --- a/src/app/add-form/add-form.component.css +++ b/src/app/add-form/add-form.component.css @@ -79,4 +79,8 @@ button[type="button"] { .remove-button { background-color: #dc3545; +} + +.mat-error { + color: #dc3545; } \ No newline at end of file diff --git a/src/app/add-form/add-form.component.html b/src/app/add-form/add-form.component.html index 53a1b35..86a5860 100644 --- a/src/app/add-form/add-form.component.html +++ b/src/app/add-form/add-form.component.html @@ -5,18 +5,27 @@ <form #form="ngForm" (ngSubmit)="saveShoppingList(form)"> <div class="form-group"> <label for="listName">List Name:</label> - <input type="text" id="listName" name="listName" [(ngModel)]="shoppingListName" required> + <input type="text" id="listName" name="listName" [(ngModel)]="shoppingListName" required #listName="ngModel"> + <mat-error class="mat-error" *ngIf="listName.touched && listName.invalid"><br>Name of list must be filled</mat-error> + + </div> <div *ngFor="let item of items; let i = index" class="item-row"> <div class="form-group"> <label for="itemName{{i}}">Item Name:</label> - <input type="text" id="itemName{{i}}" name="itemName{{i}}" [(ngModel)]="item.name" required> + <input type="text" id="itemName{{i}}" name="itemName{{i}}" [(ngModel)]="item.name" required #itemNameRef="ngModel"> + <mat-error class="mat-error" *ngIf="itemNameRef.touched && itemNameRef.invalid"><br>Name of item must be filled</mat-error> </div> <div class="form-group"> <label for="itemAmount{{i}}">Amount:</label> - <input type="text" id="itemAmount{{i}}" name="itemAmount{{i}}" [(ngModel)]="item.amount" required> + <input type="text" id="itemAmount{{i}}" name="itemAmount{{i}}" [(ngModel)]="item.amount" required #itemAmountRef="ngModel" pattern="[0-9]+"> + <mat-error class="mat-error" *ngIf="itemAmountRef.invalid"> + <span *ngIf="itemAmountRef.errors?.['required']">Amount must be filled</span> + <span *ngIf="itemAmountRef.errors?.['pattern']">Amount must be a number</span> + <span *ngIf="itemAmountRef.errors?.['nonZeroAmount']">Amount cannot be zero</span> + </mat-error> </div> <button type="button" (click)="removeItem(i)">X</button> diff --git a/src/app/add-form/add-form.component.ts b/src/app/add-form/add-form.component.ts index 97cca8c..c0983c3 100644 --- a/src/app/add-form/add-form.component.ts +++ b/src/app/add-form/add-form.component.ts @@ -1,14 +1,15 @@ import { CommonModule } from '@angular/common'; import { Component, Input, SimpleChanges, ViewChild } from '@angular/core'; -import { FormsModule, NgForm } from '@angular/forms'; +import { AbstractControl, FormsModule, NgForm, ValidatorFn } from '@angular/forms'; import { UserService } from '../../services/user.service'; import { ListServiceService } from '../../services/list-service.service'; import { ShoppingItem } from '../../entities/shoppingItem'; +import { MaterialModule } from '../../modules/material/material.module'; @Component({ selector: 'app-add-form', standalone: true, - imports: [CommonModule, FormsModule], + imports: [CommonModule, FormsModule,MaterialModule], templateUrl: './add-form.component.html', styleUrl: './add-form.component.css' }) @@ -46,3 +47,14 @@ saveShoppingList(form: NgForm) { window.alert('Shopping list added successfully!'); } } + + +export function nonZeroAmountValidator(): ValidatorFn { + return (control: AbstractControl): { [key: string]: any } | null => { + const amount = control.value; + if (amount === 0 || isNaN(amount)) { + return { 'nonZeroAmount': { value: amount } }; + } + return null; + }; +} \ No newline at end of file diff --git a/src/app/login/login.component.css b/src/app/login/login.component.css index 34c3eb2..b4cdf73 100644 --- a/src/app/login/login.component.css +++ b/src/app/login/login.component.css @@ -22,4 +22,9 @@ input,mat-form-field{ margin-left: 10%; } +#loginFailed{ + color: red; + margin-left: 20%; +} + diff --git a/src/app/login/login.component.html b/src/app/login/login.component.html index 678530a..826c2bc 100644 --- a/src/app/login/login.component.html +++ b/src/app/login/login.component.html @@ -1,4 +1,4 @@ -<form (ngSubmit)="login()"> +<form (ngSubmit)="login(f)" #f="ngForm"> <mat-card class="example-card"> <mat-card-header> <mat-card-title>Login</mat-card-title> @@ -7,16 +7,21 @@ <mat-card-content> <mat-form-field> <mat-label>Usename</mat-label> - <input matInput [(ngModel)]="auth.username" name="name"> + <input matInput [(ngModel)]="auth.username" name="name" required #name="ngModel"> + <mat-error *ngIf="name.invalid">Username must be filled</mat-error> </mat-form-field> + <mat-form-field> <mat-label>Password</mat-label> - <input matInput [type]="hide ? 'password' :'text'" [(ngModel)]="auth.password" name="pass"> - <button mat-icon-button matSuffix (click)="hide = !hide" [attr.aria-label]="'Hide password'" [attr.aria-pressed]="hide"> + <input matInput [type]="hide ? 'password' :'text'" [(ngModel)]="auth.password" name="pass" required #pass="ngModel"> + <button mat-icon-button matSuffix type="button" (click)="hide = !hide" [attr.aria-label]="'Hide password'" [attr.aria-pressed]="hide"> <mat-icon>{{hide ? 'visibility_off' : 'visibility'}}</mat-icon> </button> + <mat-error *ngIf="pass.invalid">Password must be filled</mat-error> </mat-form-field> + <!-- Login error message --> + <mat-error id="loginFailed" *ngIf="loginFailed">Username or password is incorrect</mat-error> </mat-card-content> <mat-card-actions> -- GitLab From 358ae8cad9819e24151cf2c90a4e62a88bbe2ca5 Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Tue, 11 Jun 2024 21:26:19 +0200 Subject: [PATCH 27/32] login now inform user who used incorrect credenetials --- src/app/login/login.component.ts | 44 +++++++++++++++++++++++++++----- src/services/user.service.ts | 7 ++--- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/app/login/login.component.ts b/src/app/login/login.component.ts index 2841a8e..205b2b8 100644 --- a/src/app/login/login.component.ts +++ b/src/app/login/login.component.ts @@ -1,11 +1,10 @@ import { Component } from '@angular/core'; import { Auth } from '../../entities/auth'; import { UserService } from '../../services/user.service'; -import { FormsModule } from '@angular/forms'; +import { FormsModule, NgForm} from '@angular/forms'; import { MaterialModule } from '../../modules/material/material.module'; import { CommonModule } from '@angular/common'; import { Router } from '@angular/router'; -import e from 'express'; @Component({ selector: 'app-login', @@ -13,7 +12,7 @@ import e from 'express'; imports: [ CommonModule, MaterialModule, - FormsModule + FormsModule, ], templateUrl: './login.component.html', styleUrl: './login.component.css' @@ -21,12 +20,19 @@ import e from 'express'; export class LoginComponent { auth = new Auth("", ""); hide = true; + loginFailed = false; - constructor(private userService: UserService,private router: Router) { } - login() { + constructor( + private userService: UserService, + private router: Router + ) { } + + + +/* login() { this.userService.login(this.auth).subscribe(success=> {; - console.log(this.auth) +// console.log(this.auth) if(success){ console.log('Login successful'); this.router.navigate(['/list']); @@ -36,4 +42,30 @@ export class LoginComponent { } }); } + */ + + login(form : NgForm) { + if (form.invalid) { + form.controls['name'].markAsTouched(); + form.controls['pass'].markAsTouched(); + return; + } + this.userService.login(this.auth).subscribe({ + next: success => { + if (success) { + console.log('Login successful'); + this.loginFailed = false; + this.router.navigate(['/list']); + } else { + console.log('Login failed'); + this.loginFailed = true; + } + }, + error: err => { + console.error('Error during login:', err); + this.loginFailed = true; + } + }); + } + } diff --git a/src/services/user.service.ts b/src/services/user.service.ts index d6a4f06..d49d504 100644 --- a/src/services/user.service.ts +++ b/src/services/user.service.ts @@ -41,7 +41,9 @@ export class UserService { return true; } ), - catchError(error => this.processError(error)), + catchError(error => { + return this.processError(error) + }), defaultIfEmpty(false) ); } @@ -61,8 +63,7 @@ export class UserService { this.messageService.error("server not reachable"); } if(error.status >400 && error.status <500){ - const message = error.error.errorMessage || JSON.parse(error.error).errorMessage; - this.messageService.error(message); + this.messageService.error("invalid credentials"); } if(error.status >=500){ console.log('server error', error); -- GitLab From 2a2396c6cb5e9c4cdec2d866625f59e6d947dbbc Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Wed, 12 Jun 2024 16:03:39 +0200 Subject: [PATCH 28/32] Add reactive formular validation --- src/app/add-form/add-form.component.html | 48 ++++++------ src/app/add-form/add-form.component.ts | 97 ++++++++++++++++-------- 2 files changed, 91 insertions(+), 54 deletions(-) diff --git a/src/app/add-form/add-form.component.html b/src/app/add-form/add-form.component.html index 86a5860..c9ed5c4 100644 --- a/src/app/add-form/add-form.component.html +++ b/src/app/add-form/add-form.component.html @@ -2,38 +2,42 @@ <div class="top-spacer"></div> <h2>Create Shopping List</h2> - <form #form="ngForm" (ngSubmit)="saveShoppingList(form)"> - <div class="form-group"> - <label for="listName">List Name:</label> - <input type="text" id="listName" name="listName" [(ngModel)]="shoppingListName" required #listName="ngModel"> - <mat-error class="mat-error" *ngIf="listName.touched && listName.invalid"><br>Name of list must be filled</mat-error> + <form [formGroup]="formGroup" (ngSubmit)="saveShoppingList()"> + <div class="form-group"> + <label for="listName">List Name:</label> + <input type="text" id="listName" name="listName" formControlName="shoppingListName" required> + <mat-error class="mat-error" *ngIf="formGroup.get('shoppingListName')?.touched && formGroup.get('shoppingListName')?.invalid"> + <span *ngIf="formGroup.get('shoppingListName')?.errors?.['required']"><br>Name of list must be filled</span> + </mat-error> + </div> - - </div> - - <div *ngFor="let item of items; let i = index" class="item-row"> + <div formArrayName="items"> + <div *ngFor="let item of items.controls; let i = index" [formGroupName]="i" class="item-row"> <div class="form-group"> <label for="itemName{{i}}">Item Name:</label> - <input type="text" id="itemName{{i}}" name="itemName{{i}}" [(ngModel)]="item.name" required #itemNameRef="ngModel"> - <mat-error class="mat-error" *ngIf="itemNameRef.touched && itemNameRef.invalid"><br>Name of item must be filled</mat-error> + <input type="text" id="itemName{{i}}" name="itemName{{i}}" formControlName="name" required> + <mat-error class="mat-error" *ngIf="item.get('name')?.touched && item.get('name')?.invalid"> + <span *ngIf="item.get('name')?.errors?.['required']"><br>Name of item must be filled</span> + </mat-error> </div> <div class="form-group"> <label for="itemAmount{{i}}">Amount:</label> - <input type="text" id="itemAmount{{i}}" name="itemAmount{{i}}" [(ngModel)]="item.amount" required #itemAmountRef="ngModel" pattern="[0-9]+"> - <mat-error class="mat-error" *ngIf="itemAmountRef.invalid"> - <span *ngIf="itemAmountRef.errors?.['required']">Amount must be filled</span> - <span *ngIf="itemAmountRef.errors?.['pattern']">Amount must be a number</span> - <span *ngIf="itemAmountRef.errors?.['nonZeroAmount']">Amount cannot be zero</span> + <input type="text" id="itemAmount{{i}}" name="itemAmount{{i}}" formControlName="amount" required> + <mat-error class="mat-error" *ngIf="item.get('amount')?.touched && item.get('amount')?.invalid"> + <span *ngIf="item.get('amount')?.errors?.['required']"><br>Amount must be filled</span> + <span *ngIf="item.get('amount')?.errors?.['pattern']"><br>Amount must be a number</span> + <span *ngIf="item.get('amount')?.errors?.['nonZeroAmount']"><br>Amount cannot be zero</span> </mat-error> </div> <button type="button" (click)="removeItem(i)">X</button> </div> + </div> - <div class="buttons-container"> - <button type="button" (click)="addItem()">Add Item</button> - <button type="submit">Save Shopping List</button> - </div> - </form> - </div> + <div class="buttons-container"> + <button type="button" (click)="addItem()">Add Item</button> + <button type="submit">Save Shopping List</button> + </div> + </form> +</div> diff --git a/src/app/add-form/add-form.component.ts b/src/app/add-form/add-form.component.ts index c0983c3..f78c13a 100644 --- a/src/app/add-form/add-form.component.ts +++ b/src/app/add-form/add-form.component.ts @@ -1,60 +1,93 @@ import { CommonModule } from '@angular/common'; -import { Component, Input, SimpleChanges, ViewChild } from '@angular/core'; -import { AbstractControl, FormsModule, NgForm, ValidatorFn } from '@angular/forms'; -import { UserService } from '../../services/user.service'; +import { Component, Input, OnInit } from '@angular/core'; +import { AbstractControl, FormArray, FormBuilder, FormGroup, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms'; import { ListServiceService } from '../../services/list-service.service'; import { ShoppingItem } from '../../entities/shoppingItem'; import { MaterialModule } from '../../modules/material/material.module'; +export function nonZeroAmountValidator(): ValidatorFn { + return (control: AbstractControl): { [key: string]: any } | null => { + const amount = control.value; + if (amount === 0 || isNaN(amount)) { + return { 'nonZeroAmount': { value: amount } }; + } + return null; + }; +} + @Component({ selector: 'app-add-form', standalone: true, - imports: [CommonModule, FormsModule,MaterialModule], + imports: [CommonModule, ReactiveFormsModule, MaterialModule], templateUrl: './add-form.component.html', - styleUrl: './add-form.component.css' + styleUrls: ['./add-form.component.css'] }) -export class AddFormComponent { +export class AddFormComponent implements OnInit { @Input() isShown: boolean = false; - @ViewChild('form') form: NgForm; - shoppingListName: string = ''; - items: any[] = [{ name: '', amount: '' }]; + formGroup: FormGroup; + + constructor(private fb: FormBuilder, private listService: ListServiceService) {} + + ngOnInit(): void { + this.formGroup = this.fb.group({ + shoppingListName: ['', Validators.required], + items: this.fb.array([this.createItem()]) + }); + } - constructor(private listService : ListServiceService) {} + get items(): FormArray { + return this.formGroup.get('items') as FormArray; + } + + createItem(): FormGroup { + return this.fb.group({ + name: ['', Validators.required], + amount: ['', [Validators.required, nonZeroAmountValidator(), Validators.pattern('[0-9]+')]] + }); + } addItem() { - this.items.push({ name: '', amount: '' }); + this.items.push(this.createItem()); } removeItem(index: number) { - this.items.splice(index, 1); + this.items.removeAt(index); } validateForm(): boolean { - if (!this.shoppingListName.trim() || this.items.some(item => !item.name.trim() || !item.amount.trim())) { - window.alert('Please fill in the list name, item names and amounts'); + if (this.formGroup.invalid) { + this.markFormGroupTouched(this.formGroup); return false; } return true; -} - -saveShoppingList(form: NgForm) { - if (!this.validateForm()) return; + } + + markFormGroupTouched(formGroup: FormGroup | FormArray) { + Object.values(formGroup.controls).forEach(control => { + control.markAsTouched(); + + if (control instanceof FormGroup || control instanceof FormArray) { + this.markFormGroupTouched(control); + } + }); + } - const shoppingItems: ShoppingItem[] = this.items.map(item => new ShoppingItem(item.name, parseInt(item.amount), false)); - this.listService.postShoppingList(this.shoppingListName, shoppingItems); - this.form.resetForm(); - window.alert('Shopping list added successfully!'); -} -} + + saveShoppingList() { + if (!this.validateForm()) return; + const shoppingItems: ShoppingItem[] = this.items.controls.map((control: AbstractControl) => { + const item = control as FormGroup; + return new ShoppingItem( + item.get('name')?.value, + parseInt(item.get('amount')?.value, 10), + false + ); + }); -export function nonZeroAmountValidator(): ValidatorFn { - return (control: AbstractControl): { [key: string]: any } | null => { - const amount = control.value; - if (amount === 0 || isNaN(amount)) { - return { 'nonZeroAmount': { value: amount } }; - } - return null; - }; + this.listService.postShoppingList(this.formGroup.get('shoppingListName')?.value, shoppingItems); + this.formGroup.reset(); + window.alert('Shopping list added successfully!'); + } } \ No newline at end of file -- GitLab From 0ef598e6fbc00fb1ad9774bb008ddebb5d8f5435 Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Thu, 13 Jun 2024 16:43:05 +0200 Subject: [PATCH 29/32] Update login incoreect creadential mat error visibility. Display list now correctly shows mat errors with crrect colors. Snackbar now shows on top left position --- .../display-list/display-list.component.css | 21 +- .../display-list/display-list.component.html | 31 +- .../display-list/display-list.component.ts | 274 ++++++++++++------ src/app/login/login.component.ts | 18 +- src/services/message.service.ts | 19 +- src/services/user.service.ts | 7 +- 6 files changed, 245 insertions(+), 125 deletions(-) diff --git a/src/app/display-list/display-list.component.css b/src/app/display-list/display-list.component.css index 4d17e1b..e38ad72 100644 --- a/src/app/display-list/display-list.component.css +++ b/src/app/display-list/display-list.component.css @@ -119,4 +119,23 @@ .add-item, .save-changes { flex-basis: 49%; -} \ No newline at end of file +} + + + +.span-error { + color: red; +} + +.amount-error { + color: red; + padding-left: 10%; /* Default padding when mat-error is not shown */ +} + +.amount-error.with-name-error { + padding-left: 40%; /* Padding when mat-error for name is shown */ +} + +/* .mat-error { + color: red; +} */ diff --git a/src/app/display-list/display-list.component.html b/src/app/display-list/display-list.component.html index 5c18f5a..45e92fc 100644 --- a/src/app/display-list/display-list.component.html +++ b/src/app/display-list/display-list.component.html @@ -1,6 +1,5 @@ <div class="center-box" *ngIf="!showAddForm && shoppingList.items && shoppingList.items.length && shoppingList.name != 'test'"> <div class="list-container"> - <div class="list-header"> <button (click)="deleteCurrentList()" class="button delete-button">Delete List</button> <h2 class="list-name">{{ shoppingList.name }}</h2> @@ -17,18 +16,32 @@ </li> </ul> - <form *ngIf="isEditing" (submit)="submitEditForm()" class="edit-form"> + <form [formGroup]="editForm" *ngIf="isEditing" (ngSubmit)="submitEditForm()" class="edit-form"> <div class="form-group"> - <input type="text" [(ngModel)]="shoppingList.name" name="listName" placeholder="List Name" class="form-control"/> + <input type="text" formControlName="listName" placeholder="List Name" class="form-control"/> + <mat-error class="mat-error" *ngIf="editForm.get('listName')?.touched && editForm.get('listName')?.invalid" class="error"> + List name is required. + </mat-error> </div> - <div class="items-container"> - <div *ngFor="let item of shoppingList.items; let i = index" class="item-edit-form"> - <input type="text" [(ngModel)]="item.name" name="itemName{{i}}" placeholder="Item Name" class="form-control"/> - <input type="number" [(ngModel)]="item.amount" name="itemAmount{{i}}" placeholder="Amount" class="form-control small"/> + <div formArrayName="items" class="items-container"> + <div *ngFor="let item of items.controls; let i = index" [formGroupName]="i"> + <div class="item-edit-form"> + <input type="text" formControlName="name" placeholder="Item Name" class="form-control"/> + <input type="number" formControlName="amount" placeholder="Amount" class="form-control small"/> <label class="checkbox-label"> - <input type="checkbox" [(ngModel)]="item.checked" name="itemChecked{{i}}"/> Checked + <input type="checkbox" formControlName="checked"/> Checked </label> <button type="button" (click)="deleteItem(i)" class="button delete-item">Delete</button> + </div> + <mat-error *ngIf="item.get('name')?.touched && item.get('name')?.invalid" class="error"> + <span class="span-error">Item name is required.</span> + </mat-error> + <mat-error class="mat-error" *ngIf="item.get('amount')?.touched && item.get('amount')?.invalid" class="error" + [ngClass]="{'amount-error': true, 'with-name-error': !item.get('name')?.invalid}"> + <span class="amount-error" *ngIf="item.get('amount')?.errors?.['required']">Amount is required.</span> + <span class="amount-error" *ngIf="item.get('amount')?.errors?.['pattern']">Amount must be a number.</span> + <span class="amount-error" *ngIf="item.get('amount')?.errors?.['nonZeroAmount']">Amount must be greater than zero.</span> + </mat-error> </div> </div> <div class="form-actions"> @@ -37,4 +50,4 @@ </div> </form> </div> -</div> \ No newline at end of file +</div> diff --git a/src/app/display-list/display-list.component.ts b/src/app/display-list/display-list.component.ts index f149494..6d31858 100644 --- a/src/app/display-list/display-list.component.ts +++ b/src/app/display-list/display-list.component.ts @@ -2,13 +2,15 @@ import { Component, Input, OnInit } from '@angular/core'; import { ShoppingList } from '../../entities/shoppingList'; import { ShoppingItem } from '../../entities/shoppingItem'; import { ListServiceService } from '../../services/list-service.service'; +import { FormArray, FormBuilder, FormGroup, Validators, ReactiveFormsModule, FormsModule, AbstractControl, FormControl } from '@angular/forms'; import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; +import { MaterialModule } from '../../modules/material/material.module'; +import { MessageService } from '../../services/message.service'; @Component({ selector: 'app-display-list', standalone: true, - imports: [CommonModule, FormsModule], + imports: [CommonModule, ReactiveFormsModule, FormsModule,MaterialModule], templateUrl: './display-list.component.html', styleUrls: ['./display-list.component.css'] }) @@ -16,133 +18,223 @@ export class DisplayListComponent implements OnInit { @Input() showAddForm: boolean; shoppingList: ShoppingList; isEditing: boolean = false; + editForm: FormGroup; deletedItemIds: string[] = []; newItems: ShoppingItem[] = []; originalItems: Map<string, ShoppingItem> = new Map(); - changedItems: Map<string, ShoppingItem> = new Map(); originalListName: string; - constructor(private listService: ListServiceService) { } + + constructor(private fb: FormBuilder, private listService: ListServiceService,private messageService: MessageService) { } ngOnInit(): void { - this.listService.currentList.subscribe(shoppingList => this.shoppingList = shoppingList); + this.listService.currentList.subscribe(shoppingList => { + this.shoppingList = shoppingList; + console.log('Retrieved shopping list:', shoppingList); + this.createEditForm(); + }); } - areItemsEqual(item1: ShoppingItem, item2: ShoppingItem): boolean { - if (!item1 || !item2) { - return false; - } - return item1.name === item2.name && - item1.amount === item2.amount && - item1.checked === item2.checked; + + createEditForm() { + this.editForm = this.fb.group({ + listName: [this.shoppingList.name, Validators.required], + items: this.fb.array(this.shoppingList.items.map(item => this.createItem(item))) + }); } - toggleEditForm() { - this.isEditing = !this.isEditing; - if (this.isEditing) { - this.originalListName = this.shoppingList.name; - this.shoppingList.items.forEach(item => { - this.originalItems.set(item.id as string, JSON.parse(JSON.stringify(item))); - }); - } + get items(): FormArray { + return this.editForm.get('items') as FormArray; } - deleteCurrentList() { - if (!this.shoppingList || !this.shoppingList.id) { - alert('No list selected or list has no ID.'); - return; - } - if (confirm('Are you sure you want to delete this list?')) { - this.listService.deleteList(this.shoppingList.id).subscribe(() => { - this.listService.changeList(new ShoppingList(0, '', [], '', '')); - this.listService.deleteList(this.shoppingList.id as string).subscribe(() => { + createItem(item: ShoppingItem): FormGroup { + return this.fb.group({ + id: [item.id], + name: [item.name, Validators.required], + amount: [item.amount, [Validators.required, Validators.pattern('^[0-9]+$'), nonZeroAmountValidator()]], + checked: [item.checked] + }); + } - this.listService.notifyListDeletion(this.shoppingList.id as string); - }); - alert('List deleted successfully.'); + addItem() { + const newItem = new ShoppingItem('', 1, false); + this.newItems.push(newItem); + this.shoppingList.items.push(newItem); + const newFormItem = this.createItem(newItem); + this.items.push(newFormItem); + + // Subscribe to changes in the new form item + newFormItem.valueChanges.subscribe(value => { + // Update the corresponding new item in newItems array + const index = this.newItems.indexOf(newItem); + if (index !== -1) { + this.newItems[index].name = value.name; + this.newItems[index].amount = value.amount; + this.newItems[index].checked = value.checked; + } + }); + } - }, error => { - console.error('Error deleting the list:', error); - alert('Failed to delete the list.'); - }); + deleteItem(index: number) { + const item = this.shoppingList.items[index]; + if (item && item.id) { + this.deletedItemIds.push(item.id); } -} + this.shoppingList.items.splice(index, 1); + this.items.removeAt(index); + } -submitEditForm() { + validateForm(): boolean { + this.editForm.markAllAsTouched(); + if (this.editForm.invalid) { + return false; + } + return true; + } - if (this.shoppingList.name.trim() === '' || - this.shoppingList.items.some(item => item.name.trim() === '' || item.amount === null || item.amount < 1)) { - window.alert('Please make sure the list name and all item names and amounts are filled in.'); + submitEditForm() { + // Check if shoppingList is null or undefined + if (!this.shoppingList) { + console.error('Shopping list is null or undefined.'); return; } - let listNameUpdated = false; - if (this.shoppingList.name !== this.originalListName) { - listNameUpdated = true; - } + // Update the shoppingList with the form data + const listNameControl = this.editForm.get('listName'); + const itemsControl = this.editForm.get('items'); - this.deletedItemIds.forEach(id => { - this.listService.deleteItemById(id).subscribe({ - next: (response) => console.log(`Deleted item with ID: ${id}`), - error: (err) => console.error(`Error deleting item with ID: ${id}`, err), - }); - }); + // Perform null check for listNameControl and itemsControl + if (!listNameControl || !itemsControl) { + console.error('Form controls are null or undefined.'); + return; + } + this.shoppingList.name = listNameControl.value; + this.shoppingList.items = itemsControl.value; - this.deletedItemIds = []; - if (this.newItems.length > 0) { - this.listService.addItemToList(this.shoppingList.id as string, this.newItems).subscribe({ - next: (response) => console.log('New items added successfully', response), - error: (err) => console.error('Error adding new items', err) + // Check if the form is valid before proceeding + if (this.editForm.invalid) { + this.markFormGroupTouched(this.editForm); + return; + } + + // Update the list name if it has been changed + if (this.shoppingList.name !== this.originalListName) { + this.listService.updateListName(this.shoppingList.id as string, this.shoppingList.name).subscribe({ + next: () => console.log('List name updated successfully'), + error: (err) => console.error('Error updating list name', err) + }); + } + + // Delete items that have been marked for deletion + this.deletedItemIds.forEach(id => { + this.listService.deleteItemById(id).subscribe({ + next: () => console.log(`Deleted item with ID: ${id}`), + error: (err) => console.error(`Error deleting item with ID: ${id}`, err) + }); + }); + + // Clear the deleted item IDs array + this.deletedItemIds = []; + + // Add new items to the shopping list + if (this.newItems.length > 0) { + console.log('Adding new items:', this.newItems); + this.listService.addItemToList(this.shoppingList.id as string, this.newItems).subscribe({ + next: (response: ShoppingItem[]) => { + console.log('New items added successfully', response); + this.listService.getShoppingData(); // Refresh shopping data + this.newItems = []; // Clear new items array + }, + error: (err) => console.error('Error adding new items', err) + }); + } + + // Update items that have been modified + this.shoppingList.items.forEach(item => { + const originalItem = this.originalItems.get(item.id as string); + if (!this.areItemsEqual(item, originalItem as ShoppingItem)) { + this.listService.updateItem(item).subscribe({ + next: () => console.log(`Updated item with ID: ${item.id}`), + error: (err) => console.error(`Error updating item with ID: ${item.id}`, err) + }); + } }); - this.listService.getShoppingData(); - this.newItems = []; + + // Toggle off the edit mode + this.toggleEditForm(); + + // Display success message to the user + this.messageService.success('Changes saved successfully!'); } - let updatedItems: ShoppingItem[] = []; - - - this.shoppingList.items.forEach(item => { - const originalItem = this.originalItems.get(item.id as string); - if (!this.areItemsEqual(item, originalItem as ShoppingItem)) { - updatedItems.push(item); + +// Helper function to mark all form controls as touched +markFormGroupTouched(formGroup: FormGroup | FormArray) { + Object.values(formGroup.controls).forEach(control => { + if (control instanceof FormControl) { + control.markAsTouched(); + } else if (control instanceof FormGroup || control instanceof FormArray) { + this.markFormGroupTouched(control); } }); +} + + toggleEditForm() { + this.isEditing = !this.isEditing; - if (updatedItems.length > 0) { - updatedItems.forEach(item => { - this.listService.updateItem(item).subscribe({ - next: (response) => console.log(`Updated item with ID: ${item.id}`), - error: (err) => console.error(`Error updating item with ID: ${item.id}`, err), + if (this.isEditing) { + this.originalListName = this.shoppingList.name; + this.shoppingList.items.forEach(item => { + this.originalItems.set(item.id as string, JSON.parse(JSON.stringify(item))); }); - }); + this.createEditForm(); + } } - if (listNameUpdated) { - this.listService.updateListName(this.shoppingList.id as string, this.shoppingList.name).subscribe({ - next: (response) => console.log('List name updated successfully'), - error: (err) => console.error('Error updating list name', err) - }); + deleteCurrentList() { + if (!this.shoppingList || !this.shoppingList.id) { + alert('No list selected or list has no ID.'); + return; + } + + if (confirm('Are you sure you want to delete this list?')) { + this.listService.deleteList(this.shoppingList.id).subscribe(() => { + this.listService.changeList(new ShoppingList(0, '', [], '', '')); + alert('List deleted successfully.'); + }, error => { + console.error('Error deleting the list:', error); + alert('Failed to delete the list.'); + }); + } } - updatedItems = []; - this.toggleEditForm(); - window.alert('Changes saved successfully!'); -} +/* areItemsEqual(item1: ShoppingItem, item2: ShoppingItem): boolean { + if (!item1 || !item2) { + return false; + } + return item1.name === item2.name && + item1.amount === item2.amount && + item1.checked === item2.checked; + } */ - addItem() { - const newItem = new ShoppingItem('', 1, false); - this.newItems.push(newItem); - this.shoppingList.items.push(newItem); + areItemsEqual(item1: ShoppingItem, item2: ShoppingItem): boolean { + if (!item1 || !item2) { + return false; + } + + return JSON.stringify(item1) === JSON.stringify(item2); } +} - deleteItem(index: number) { - const item = this.shoppingList.items[index]; - if (item && item.id) { - this.deletedItemIds.push(item.id); - } - this.shoppingList.items.splice(index, 1); +export function nonZeroAmountValidator() { + return (control: AbstractControl): { [key: string]: any } | null => { + const amount = control.value; + if (amount === 0 || isNaN(amount)) { + return { 'nonZeroAmount': { value: amount } }; + } + return null; + }; } -} \ No newline at end of file diff --git a/src/app/login/login.component.ts b/src/app/login/login.component.ts index 205b2b8..e649807 100644 --- a/src/app/login/login.component.ts +++ b/src/app/login/login.component.ts @@ -30,20 +30,6 @@ export class LoginComponent { -/* login() { - this.userService.login(this.auth).subscribe(success=> {; -// console.log(this.auth) - if(success){ - console.log('Login successful'); - this.router.navigate(['/list']); - } - else{ - console.log('Login failed'); - } - }); - } - */ - login(form : NgForm) { if (form.invalid) { form.controls['name'].markAsTouched(); @@ -56,14 +42,14 @@ export class LoginComponent { console.log('Login successful'); this.loginFailed = false; this.router.navigate(['/list']); - } else { + } + else { console.log('Login failed'); this.loginFailed = true; } }, error: err => { console.error('Error during login:', err); - this.loginFailed = true; } }); } diff --git a/src/services/message.service.ts b/src/services/message.service.ts index 9bf50e8..d62c15c 100644 --- a/src/services/message.service.ts +++ b/src/services/message.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { MatSnackBar } from '@angular/material/snack-bar'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; @Injectable({ providedIn: 'root' @@ -8,15 +8,20 @@ export class MessageService { constructor(private snackBar: MatSnackBar) { } error(message:string){ - this.snackBar.open(message, 'ERROR', { - duration: 5000, - }); + const config = new MatSnackBarConfig(); + config.duration = 5000; + config.horizontalPosition = 'right'; // Set horizontal position here + config.verticalPosition = 'top'; // Set vertical position here + this.snackBar.open(message, 'OK', config); + } success(message:string){ - this.snackBar.open(message, 'SUCCESS', { - duration: 5000, - }); + const config = new MatSnackBarConfig(); + config.duration = 5000; + config.horizontalPosition = 'right'; // Set horizontal position here + config.verticalPosition = 'top'; // Set vertical position here + this.snackBar.open(message, 'OK', config); } } diff --git a/src/services/user.service.ts b/src/services/user.service.ts index d49d504..cfa728b 100644 --- a/src/services/user.service.ts +++ b/src/services/user.service.ts @@ -42,9 +42,14 @@ export class UserService { } ), catchError(error => { + if(error instanceof HttpErrorResponse){ + if(error.status === 401){ + this.messageService.error('invalid credentials'); + return of(false); + } + } return this.processError(error) }), - defaultIfEmpty(false) ); } -- GitLab From d36d2a5bec1e1db49aa36d05d5c4c436be17203f Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Thu, 13 Jun 2024 16:59:09 +0200 Subject: [PATCH 30/32] update the nonzeroamount validator to correctly disply mat error text --- src/app/add-form/add-form.component.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/app/add-form/add-form.component.ts b/src/app/add-form/add-form.component.ts index f78c13a..436c76c 100644 --- a/src/app/add-form/add-form.component.ts +++ b/src/app/add-form/add-form.component.ts @@ -4,11 +4,18 @@ import { AbstractControl, FormArray, FormBuilder, FormGroup, ReactiveFormsModule import { ListServiceService } from '../../services/list-service.service'; import { ShoppingItem } from '../../entities/shoppingItem'; import { MaterialModule } from '../../modules/material/material.module'; +import { MessageService } from '../../services/message.service'; export function nonZeroAmountValidator(): ValidatorFn { return (control: AbstractControl): { [key: string]: any } | null => { const amount = control.value; - if (amount === 0 || isNaN(amount)) { + if(isNaN(amount)){ + return null; + } + // Parse input value to number + const Namount = parseFloat(amount); + + if (Namount === 0) { return { 'nonZeroAmount': { value: amount } }; } return null; @@ -26,7 +33,7 @@ export class AddFormComponent implements OnInit { @Input() isShown: boolean = false; formGroup: FormGroup; - constructor(private fb: FormBuilder, private listService: ListServiceService) {} + constructor(private fb: FormBuilder, private listService: ListServiceService,private messageService: MessageService) {} ngOnInit(): void { this.formGroup = this.fb.group({ @@ -88,6 +95,6 @@ export class AddFormComponent implements OnInit { this.listService.postShoppingList(this.formGroup.get('shoppingListName')?.value, shoppingItems); this.formGroup.reset(); - window.alert('Shopping list added successfully!'); + this.messageService.success('Shopping list added successfully!'); } } \ No newline at end of file -- GitLab From 44876e47f3d27b2a9d9b3d3f553f74bd640bc473 Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Thu, 13 Jun 2024 17:27:16 +0200 Subject: [PATCH 31/32] update so delete list shows snack bar instead of alert when deleted --- src/app/display-list/display-list.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/display-list/display-list.component.ts b/src/app/display-list/display-list.component.ts index 6d31858..ada4303 100644 --- a/src/app/display-list/display-list.component.ts +++ b/src/app/display-list/display-list.component.ts @@ -203,10 +203,10 @@ markFormGroupTouched(formGroup: FormGroup | FormArray) { if (confirm('Are you sure you want to delete this list?')) { this.listService.deleteList(this.shoppingList.id).subscribe(() => { this.listService.changeList(new ShoppingList(0, '', [], '', '')); - alert('List deleted successfully.'); + this.messageService.success('List deleted successfully!'); }, error => { console.error('Error deleting the list:', error); - alert('Failed to delete the list.'); + this.messageService.error('Failed to delete the list!'); }); } } -- GitLab From eef815834ae2c659568e56c94fa8282aff3373fb Mon Sep 17 00:00:00 2001 From: Marek Lescinsky <marek.lescinsky@kosickaakademia.sk> Date: Wed, 19 Jun 2024 11:46:28 +0200 Subject: [PATCH 32/32] update error messages to show the error message the server responds with --- .../display-list/display-list.component.ts | 8 --- src/services/list-service.service.ts | 53 ++++++++++++++----- src/services/message.service.ts | 8 +-- src/services/user.service.ts | 37 +++++++++---- 4 files changed, 72 insertions(+), 34 deletions(-) diff --git a/src/app/display-list/display-list.component.ts b/src/app/display-list/display-list.component.ts index ada4303..e16a048 100644 --- a/src/app/display-list/display-list.component.ts +++ b/src/app/display-list/display-list.component.ts @@ -211,14 +211,6 @@ markFormGroupTouched(formGroup: FormGroup | FormArray) { } } -/* areItemsEqual(item1: ShoppingItem, item2: ShoppingItem): boolean { - if (!item1 || !item2) { - return false; - } - return item1.name === item2.name && - item1.amount === item2.amount && - item1.checked === item2.checked; - } */ areItemsEqual(item1: ShoppingItem, item2: ShoppingItem): boolean { if (!item1 || !item2) { diff --git a/src/services/list-service.service.ts b/src/services/list-service.service.ts index 69c0559..2e0b4b6 100644 --- a/src/services/list-service.service.ts +++ b/src/services/list-service.service.ts @@ -1,9 +1,10 @@ -import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { BehaviorSubject, Observable, Subject, map, tap, throwError} from 'rxjs'; +import { BehaviorSubject, EMPTY, Observable, Subject, catchError, map, tap, throwError} from 'rxjs'; import { ShoppingItem } from '../entities/shoppingItem'; import { error } from 'console'; import { ShoppingList } from '../entities/shoppingList'; +import { MessageService } from './message.service'; @@ -25,7 +26,7 @@ export class ListServiceService { currentList = this.displayedList.asObservable(); constructor( - private http: HttpClient) + private http: HttpClient,private messageService:MessageService) { } notifyListDeletion(deletedListId: string) { @@ -39,7 +40,8 @@ export class ListServiceService { return this.http.delete(this.url + '/delete-list/' + listId, { headers }).pipe( tap(() => { this.listDeletedSource.next(listId); - }) + }), + catchError(error => this.processError(error)) ); } @@ -52,14 +54,16 @@ export class ListServiceService { name: item.name, quantity: item.amount } - return this.http.patch(this.url+'/update-item-checked-status/'+item.id,body, { headers }); + return this.http.patch(this.url+'/update-item-checked-status/'+item.id,body, { headers }) + .pipe(catchError(error => this.processError(error))); } deleteItemById(itemId: string): Observable<any> { const headers = new HttpHeaders() .set('content-type', 'application/json') .set('Authorization', 'Bearer ' + localStorage.getItem('token')); - return this.http.delete(this.url+'/delete-item/'+itemId, { headers: headers }); + return this.http.delete(this.url+'/delete-item/'+itemId, { headers: headers }) + .pipe(catchError(error => this.processError(error))); } addItemToList(listId: string, newItems: ShoppingItem[]): Observable<any> { @@ -72,7 +76,9 @@ export class ListServiceService { console.log(jsonString); console.log(jsonString); - return this.http.post(this.url+'/add-item/'+listId, body, { headers }); + return this.http.post(this.url+'/add-item/'+listId, body, { headers }) + .pipe(catchError(error => this.processError(error))); + } updateListName(id: string, name: string){ @@ -82,7 +88,8 @@ export class ListServiceService { const body = { name: name } - return this.http.patch(this.url+'/update-list/'+id, body, { headers }); + return this.http.patch(this.url+'/update-list/'+id, body, { headers }) + .pipe(catchError(error => this.processError(error))); } @@ -108,7 +115,8 @@ export class ListServiceService { return new ShoppingList(listData.user_id, listData.name, items, listData.id, listData.id); }); - }) + }), + catchError(error => this.processError(error)) ); } @@ -134,6 +142,7 @@ export class ListServiceService { console.log(response.list.id); console.log(JSON.stringify(resultObject, null, 2)); this.http.post(this.url+'/add-item/' + response.list.id, resultObject, {headers : headers}) + .pipe(catchError(error => this.processError(error))) .subscribe((response:any)=> { console.log('Update successful', response); this.changeList(response.list); @@ -147,12 +156,32 @@ export class ListServiceService { }); } - private handleError(message: string, error: any) { - window.alert(`${message}. Please try again.`); - return throwError(() => new Error(error)); + // private handleError(message: string, error: any) { + // window.alert(`${message}. Please try again.`); + // return throwError(() => new Error(error)); + // } + + + private processError(error: any): Observable<never> { + if (error instanceof HttpErrorResponse) { + let errorMessage = 'An error occurred'; + + if (error.error && typeof error.error === 'string') { + errorMessage = error.error; + } + + if (error.status === 0) { + errorMessage = 'Server not reachable'; + } + + this.messageService.error(errorMessage); + } + return EMPTY; } } + + interface listResponse{ list: ShoppingList } \ No newline at end of file diff --git a/src/services/message.service.ts b/src/services/message.service.ts index d62c15c..73f41fa 100644 --- a/src/services/message.service.ts +++ b/src/services/message.service.ts @@ -10,8 +10,8 @@ export class MessageService { error(message:string){ const config = new MatSnackBarConfig(); config.duration = 5000; - config.horizontalPosition = 'right'; // Set horizontal position here - config.verticalPosition = 'top'; // Set vertical position here + // config.horizontalPosition = 'right'; // Set horizontal position here + // config.verticalPosition = 'top'; // Set vertical position here this.snackBar.open(message, 'OK', config); } @@ -19,8 +19,8 @@ export class MessageService { success(message:string){ const config = new MatSnackBarConfig(); config.duration = 5000; - config.horizontalPosition = 'right'; // Set horizontal position here - config.verticalPosition = 'top'; // Set vertical position here + // config.horizontalPosition = 'right'; // Set horizontal position here + // config.verticalPosition = 'top'; // Set vertical position here this.snackBar.open(message, 'OK', config); } diff --git a/src/services/user.service.ts b/src/services/user.service.ts index cfa728b..f3aadf3 100644 --- a/src/services/user.service.ts +++ b/src/services/user.service.ts @@ -62,25 +62,42 @@ export class UserService { } + // processError(error: any):Observable<never> { + // if(error instanceof HttpErrorResponse){ + // if(error.status ===0){ + // this.messageService.error("server not reachable"); + // } + // if(error.status >400 && error.status <500){ + // this.messageService.error("invalid credentials"); + // } + // if(error.status >=500){ + // console.log('server error', error); + // this.messageService.error('server error,check console'); + // } + // } + // return EMPTY; + // } + + processError(error: any):Observable<never> { if(error instanceof HttpErrorResponse){ - if(error.status ===0){ - this.messageService.error("server not reachable"); - } - if(error.status >400 && error.status <500){ - this.messageService.error("invalid credentials"); + let errorMessage = 'An error occurred'; + + if (error.error && typeof error.error === 'string') { + errorMessage = error.error; } - if(error.status >=500){ - console.log('server error', error); - this.messageService.error('server error,check console'); + + if(error.status ===0){ + errorMessage = "server not reachable"; } + + this.messageService.error(errorMessage); + } return EMPTY; } - - set token(token: string){ if(token){ localStorage.setItem('token', token); -- GitLab