From ab94726258bec2444180fae90d29105581aaa81f Mon Sep 17 00:00:00 2001 From: Luca Mannella Date: Wed, 29 May 2024 12:18:04 +0200 Subject: [PATCH] Adding a proposed solution for lab 9 --- README.md | 2 +- lab09-client-server-I/README.md | 12 + .../solution/client/.eslintrc.cjs | 21 + .../solution/client/index.html | 13 + .../solution/client/package-lock.json | 4584 +++++++++++++++++ .../solution/client/package.json | 38 + .../solution/client/public/GitHub404.png | Bin 0 -> 156773 bytes .../solution/client/public/favicon.ico | Bin 0 -> 3109 bytes .../solution/client/src/API.js | 28 + .../solution/client/src/App.css | 87 + .../solution/client/src/App.jsx | 159 + .../client/src/components/FilmForm.jsx | 134 + .../client/src/components/FilmList.jsx | 89 + .../client/src/components/Filters.jsx | 34 + .../solution/client/src/components/Header.jsx | 42 + .../client/src/components/PageLayout.jsx | 67 + .../client/src/contexts/FeedbackContext.js | 8 + .../solution/client/src/main.jsx | 11 + .../solution/client/src/models/Film.js | 30 + .../solution/client/vite.config.js | 7 + .../solution/server/Film.mjs | 24 + .../solution/server/dao-films.mjs | 130 + .../solution/server/dao-users.mjs | 27 + lab09-client-server-I/solution/server/db.mjs | 11 + .../solution/server/films.db | Bin 0 -> 24576 bytes .../solution/server/package-lock.json | 2155 ++++++++ .../solution/server/package.json | 29 + .../solution/server/server.mjs | 224 + .../solution/server/test-api.http | 151 + 29 files changed, 8116 insertions(+), 1 deletion(-) create mode 100644 lab09-client-server-I/README.md create mode 100644 lab09-client-server-I/solution/client/.eslintrc.cjs create mode 100644 lab09-client-server-I/solution/client/index.html create mode 100644 lab09-client-server-I/solution/client/package-lock.json create mode 100644 lab09-client-server-I/solution/client/package.json create mode 100644 lab09-client-server-I/solution/client/public/GitHub404.png create mode 100644 lab09-client-server-I/solution/client/public/favicon.ico create mode 100644 lab09-client-server-I/solution/client/src/API.js create mode 100644 lab09-client-server-I/solution/client/src/App.css create mode 100644 lab09-client-server-I/solution/client/src/App.jsx create mode 100644 lab09-client-server-I/solution/client/src/components/FilmForm.jsx create mode 100644 lab09-client-server-I/solution/client/src/components/FilmList.jsx create mode 100644 lab09-client-server-I/solution/client/src/components/Filters.jsx create mode 100644 lab09-client-server-I/solution/client/src/components/Header.jsx create mode 100644 lab09-client-server-I/solution/client/src/components/PageLayout.jsx create mode 100644 lab09-client-server-I/solution/client/src/contexts/FeedbackContext.js create mode 100644 lab09-client-server-I/solution/client/src/main.jsx create mode 100644 lab09-client-server-I/solution/client/src/models/Film.js create mode 100644 lab09-client-server-I/solution/client/vite.config.js create mode 100644 lab09-client-server-I/solution/server/Film.mjs create mode 100644 lab09-client-server-I/solution/server/dao-films.mjs create mode 100644 lab09-client-server-I/solution/server/dao-users.mjs create mode 100644 lab09-client-server-I/solution/server/db.mjs create mode 100644 lab09-client-server-I/solution/server/films.db create mode 100644 lab09-client-server-I/solution/server/package-lock.json create mode 100644 lab09-client-server-I/solution/server/package.json create mode 100644 lab09-client-server-I/solution/server/server.mjs create mode 100644 lab09-client-server-I/solution/server/test-api.http diff --git a/README.md b/README.md index d1b70dd..811d748 100644 --- a/README.md +++ b/README.md @@ -13,5 +13,5 @@ Laboratories solutions (under development) for the course of _Web Applications I - Lab 07: [React Forms](https://github.com/polito-webapp1/lab-2024/tree/main/lab07-forms) - Lab 08: [Multiple Pages in React](https://github.com/polito-webapp1/lab-2024/tree/main/lab08-routes) - Lab 09: [API Integration (part 1)](https://github.com/polito-webapp1/lab-2024/tree/main/lab09-client-server-I) -- Lab 10: API Integration (part 2) +- Lab 10: [API Integration (part 2)](https://github.com/polito-webapp1/lab-2024/tree/main/lab09-client-server-II) - Lab 11: Authentication diff --git a/lab09-client-server-I/README.md b/lab09-client-server-I/README.md new file mode 100644 index 0000000..d61940f --- /dev/null +++ b/lab09-client-server-I/README.md @@ -0,0 +1,12 @@ +# Lab 09: APIs Integration (part I) + +The files in this folder are structured as follows: + +- server: contains the server-side code, based on the solution of lab 3; +- client: contains the updated client-side code for this lab, based on the solution of lab 8. + +In this version of the application: + +- The cors package is added to the server to allow requests from the client. +- The full list of movies is retrieved from the server when the page is loaded. +- Every time a filter is applied (including "All"), the filtered list of movies is retrieved from the server. diff --git a/lab09-client-server-I/solution/client/.eslintrc.cjs b/lab09-client-server-I/solution/client/.eslintrc.cjs new file mode 100644 index 0000000..3e212e1 --- /dev/null +++ b/lab09-client-server-I/solution/client/.eslintrc.cjs @@ -0,0 +1,21 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:react/recommended', + 'plugin:react/jsx-runtime', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, + settings: { react: { version: '18.2' } }, + plugins: ['react-refresh'], + rules: { + 'react/jsx-no-target-blank': 'off', + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/lab09-client-server-I/solution/client/index.html b/lab09-client-server-I/solution/client/index.html new file mode 100644 index 0000000..7c535e2 --- /dev/null +++ b/lab09-client-server-I/solution/client/index.html @@ -0,0 +1,13 @@ + + + + + + + Film Library + + +
+ + + diff --git a/lab09-client-server-I/solution/client/package-lock.json b/lab09-client-server-I/solution/client/package-lock.json new file mode 100644 index 0000000..3f0ed94 --- /dev/null +++ b/lab09-client-server-I/solution/client/package-lock.json @@ -0,0 +1,4584 @@ +{ + "name": "lab09-client-server-i", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "lab09-client-server-i", + "version": "0.0.0", + "license": "ISC", + "dependencies": { + "bootstrap": "^5.3.3", + "bootstrap-icons": "^1.11.3", + "dayjs": "^1.11.10", + "prop-types": "^15.8.1", + "react": "^18.2.0", + "react-bootstrap": "^2.10.2", + "react-dom": "^18.2.0", + "react-router-dom": "^6.23.1" + }, + "devDependencies": { + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@vitejs/plugin-react": "^4.2.1", + "eslint": "^8.57.0", + "eslint-plugin-react": "^7.34.1", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.6", + "vite": "^5.2.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", + "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.4", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.4", + "@babel/parser": "^7.24.4", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.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/generator": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "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-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-module-imports": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0" + }, + "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-plugin-utils": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "dev": true, + "engines": { + "node": ">=6.9.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-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.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "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/helpers": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", + "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz", + "integrity": "sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", + "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", + "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@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.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "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/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "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.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "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/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.2.tgz", + "integrity": "sha512-0gKkgDYdnq1w+ey8KzG9l+H5Z821qh9vVjztk55rUg71vTk/Eaebeir+WtzcLLwTjw3m/asIjx8Y59y1lJZhBw==", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@remix-run/router": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz", + "integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@restart/hooks": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", + "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==", + "dependencies": { + "dequal": "^2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@restart/ui": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.6.8.tgz", + "integrity": "sha512-6ndCv3oZ7r9vuP1Ok9KH55TM1/UkdBnP/fSraW0DFDMbPMzWKhVKeFAIEUCRCSdzayjZDcFYK6xbMlipN9dmMA==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@popperjs/core": "^2.11.6", + "@react-aria/ssr": "^3.5.0", + "@restart/hooks": "^0.4.9", + "@types/warning": "^3.0.0", + "dequal": "^2.0.3", + "dom-helpers": "^5.2.0", + "uncontrollable": "^8.0.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + } + }, + "node_modules/@restart/ui/node_modules/uncontrollable": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", + "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", + "peerDependencies": { + "react": ">=16.14.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.16.3.tgz", + "integrity": "sha512-1ACInKIT0pXmTYuPoJAL8sOT0lV3PEACFSVxnD03hGIojJ1CmbzZmLJyk2xew+yxqTlmx7xydkiJcBzdp0V+AQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.16.3.tgz", + "integrity": "sha512-vGl+Bny8cawCM7ExugzqEB8ke3t7Pm9/mo+ciA9kJh6pMuNyM+31qhewMwHwseDZ/LtdW0SCocW1CsMxcq1Lsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.16.3.tgz", + "integrity": "sha512-Lj8J9WzQRvfWO4GfI+bBkIThUFV1PtI+es/YH/3cwUQ+edXu8Mre0JRJfRrAeRjPiHDPFFZaX51zfgHHEhgRAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.16.3.tgz", + "integrity": "sha512-NPPOXMTIWJk50lgZmRReEYJFvLG5rgMDzaVauWNB2MgFQYm9HuNXQdVVg3iEZ3A5StIzxhMlPjVyS5fsv4PJmg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.16.3.tgz", + "integrity": "sha512-ij4tv1XtWcDScaTgoMnvDEYZ2Wjl2ZhDFEyftjBKu6sNNLHIkKuXBol/bVSh+md5zSJ6em9hUXyPO3cVPCsl4Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.16.3.tgz", + "integrity": "sha512-MTMAl30dzcfYB+smHe1sJuS2P1/hB8pqylkCe0/8/Lo8CADjy/eM8x43nBoR5eqcYgpOtCh7IgHpvqSMAE38xw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.16.3.tgz", + "integrity": "sha512-vY3fAg6JLDoNh781HHHMPvt8K6RWG3OmEj3xI9BOFSQTD5PNaGKvCB815MyGlDnFYUw7lH+WvvQqoBwLtRDR1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.16.3.tgz", + "integrity": "sha512-61SpQGBSb8QkfV/hUYWezlEig4ro55t8NcE5wWmy1bqRsRVHCEDkF534d+Lln/YeLUoSWtJHvvG3bx9lH/S6uA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.16.3.tgz", + "integrity": "sha512-4XGexJthsNhEEgv/zK4/NnAOjYKoeCsIoT+GkqTY2u3rse0lbJ8ft1bpDCdlkvifsLDL2uwe4fn8PLR4IMTKQQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.16.3.tgz", + "integrity": "sha512-/pArXjqnEdhbQ1qe4CTTlJ6/GjWGdWNRucKAp4fqKnKf7QC0BES3QEV34ACumHHQ4uEGt4GctF2ISCMRhkli0A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.16.3.tgz", + "integrity": "sha512-vu4f3Y8iwjtRfSZdmtP8nC1jmRx1IrRVo2cLQlQfpFZ0e2AE9YbPgfIzpuK+i3C4zFETaLLNGezbBns2NuS/uA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.16.3.tgz", + "integrity": "sha512-n4HEgIJulNSmAKT3SYF/1wuzf9od14woSBseNkzur7a+KJIbh2Jb+J9KIsdGt3jJnsLW0BT1Sj6MiwL4Zzku6Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.16.3.tgz", + "integrity": "sha512-guO/4N1884ig2AzTKPc6qA7OTnFMUEg/X2wiesywRO1eRD7FzHiaiTQQOLFmnUXWj2pgQXIT1g5g3e2RpezXcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.16.3.tgz", + "integrity": "sha512-+rxD3memdkhGz0NhNqbYHXBoA33MoHBK4uubZjF1IeQv1Psi6tqgsCcC6vwQjxBM1qoCqOQQBy0cgNbbZKnGUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.16.3.tgz", + "integrity": "sha512-0NxVbLhBXmwANWWbgZY/RdSkeuHEgF+u8Dc0qBowUVBYsR2y2vwVGjKgUcj1wtu3jpjs057io5g9HAPr3Icqjg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.16.3.tgz", + "integrity": "sha512-hutnZavtOx/G4uVdgoZz5279By9NVbgmxOmGGgnzUjZYuwp2+NzGq6KXQmHXBWz7W/vottXn38QmKYAdQLa/vQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@swc/helpers": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.10.tgz", + "integrity": "sha512-CU+RF9FySljn7HVSkkjiB84hWkvTaI3rtLvF433+jRSBL2hMu3zX5bGhHS8C80SM++h4xy8hBSnUHFQHmRXSBw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "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/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" + }, + "node_modules/@types/react": { + "version": "18.2.79", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.79.tgz", + "integrity": "sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.25", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.25.tgz", + "integrity": "sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/warning": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", + "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/acorn": { + "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" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "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/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/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/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/bootstrap": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", + "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.3", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.11.3.tgz", + "integrity": "sha512-+3lpHrCw/it2/7lBL15VR0HEumaBss0+f/Lb6ZvHISn1mlK83jjFpooTLsMWbIjJMDjDjOExMsTxnXSIT4k4ww==", + "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", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "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.30001587", + "electron-to-chromium": "^1.4.668", + "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/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "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/caniuse-lite": { + "version": "1.0.30001612", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz", + "integrity": "sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==", + "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/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, + "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/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/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/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/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "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/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.746", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.746.tgz", + "integrity": "sha512-jeWaIta2rIG2FzHaYIhSuVWqC6KJYo7oSBX4Jv7g+aVujKztfvdpf+n6MGwZdC5hQXbax4nntykLH2juIQrfPg==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", + "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.17", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.10" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.6.tgz", + "integrity": "sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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/eslint/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/eslint/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/eslint/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/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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/eslint/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/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "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/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/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/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-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/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "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==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "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-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": "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/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/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "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/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/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==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "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/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "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==" + }, + "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/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-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "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/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "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/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "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/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/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/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "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/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==", + "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==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/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/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "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.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types-extra": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", + "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", + "dependencies": { + "react-is": "^16.3.2", + "warning": "^4.0.0" + }, + "peerDependencies": { + "react": ">=0.14.0" + } + }, + "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/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/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-bootstrap": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.2.tgz", + "integrity": "sha512-UvB7mRqQjivdZNxJNEA2yOQRB7L9N43nBnKc33K47+cH90/ujmnMwatTCwQLu83gLhrzAl8fsa6Lqig/KLghaA==", + "dependencies": { + "@babel/runtime": "^7.22.5", + "@restart/hooks": "^0.4.9", + "@restart/ui": "^1.6.8", + "@types/react-transition-group": "^4.4.6", + "classnames": "^2.3.2", + "dom-helpers": "^5.2.1", + "invariant": "^2.2.4", + "prop-types": "^15.8.1", + "prop-types-extra": "^1.1.0", + "react-transition-group": "^4.4.5", + "uncontrollable": "^7.2.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "@types/react": ">=16.14.8", + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.23.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz", + "integrity": "sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==", + "dependencies": { + "@remix-run/router": "1.16.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.23.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz", + "integrity": "sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==", + "dependencies": { + "@remix-run/router": "1.16.1", + "react-router": "6.23.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "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": "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/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/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": "4.16.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.16.3.tgz", + "integrity": "sha512-Ygm4fFO4usWcAG3Ud36Lmif5nudoi0X6QPLC+kRgrRjulAbmFkaTawP7fTIkRDnCNSf/4IAQzXM1T8e691kRtw==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.16.3", + "@rollup/rollup-android-arm64": "4.16.3", + "@rollup/rollup-darwin-arm64": "4.16.3", + "@rollup/rollup-darwin-x64": "4.16.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.16.3", + "@rollup/rollup-linux-arm-musleabihf": "4.16.3", + "@rollup/rollup-linux-arm64-gnu": "4.16.3", + "@rollup/rollup-linux-arm64-musl": "4.16.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.16.3", + "@rollup/rollup-linux-riscv64-gnu": "4.16.3", + "@rollup/rollup-linux-s390x-gnu": "4.16.3", + "@rollup/rollup-linux-x64-gnu": "4.16.3", + "@rollup/rollup-linux-x64-musl": "4.16.3", + "@rollup/rollup-win32-arm64-msvc": "4.16.3", + "@rollup/rollup-win32-ia32-msvc": "4.16.3", + "@rollup/rollup-win32-x64-msvc": "4.16.3", + "fsevents": "~2.3.2" + } + }, + "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/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "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/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/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/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/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uncontrollable": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", + "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", + "dependencies": { + "@babel/runtime": "^7.6.3", + "@types/react": ">=16.9.11", + "invariant": "^2.2.4", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": ">=15.0.0" + } + }, + "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/vite": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz", + "integrity": "sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==", + "dev": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "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/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "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/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/lab09-client-server-I/solution/client/package.json b/lab09-client-server-I/solution/client/package.json new file mode 100644 index 0000000..44f97ca --- /dev/null +++ b/lab09-client-server-I/solution/client/package.json @@ -0,0 +1,38 @@ +{ + "name": "lab09-client-server-i", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "author": "Luca Mannella, Luca Pezzolla, Juan Pablo Saenz Moreno", + "license": "ISC", + "bugs": { + "url": "https://github.com/polito-webapp1/lab-2024/issues" + }, + "homepage": "https://github.com/polito-webapp1/lab-2024", + "dependencies": { + "bootstrap": "^5.3.3", + "bootstrap-icons": "^1.11.3", + "dayjs": "^1.11.10", + "prop-types": "^15.8.1", + "react": "^18.2.0", + "react-bootstrap": "^2.10.2", + "react-dom": "^18.2.0", + "react-router-dom": "^6.23.1" + }, + "devDependencies": { + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@vitejs/plugin-react": "^4.2.1", + "eslint": "^8.57.0", + "eslint-plugin-react": "^7.34.1", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.6", + "vite": "^5.2.0" + } +} diff --git a/lab09-client-server-I/solution/client/public/GitHub404.png b/lab09-client-server-I/solution/client/public/GitHub404.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf7ddb7e57278823352e9f44a9072161059891d GIT binary patch literal 156773 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
QfeMrDw0-?lS$@7a?- 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 literal 0 HcmV?d00001 diff --git a/lab09-client-server-I/solution/client/src/API.js b/lab09-client-server-I/solution/client/src/API.js new file mode 100644 index 0000000..8c47e4d --- /dev/null +++ b/lab09-client-server-I/solution/client/src/API.js @@ -0,0 +1,28 @@ +import Film from "./models/Film.js"; + +const SERVER_URL = 'http://localhost:3001/api'; + +async function getFilms(filter) { + const films = await fetch(SERVER_URL + '/films' + (filter ? `?filter=${filter}` : '')) + .then(handleInvalidResponse) + .then(response => response.json()) + .then(mapApiFilmsToFilms); + +return films; +} + +function handleInvalidResponse(response) { + if (!response.ok) { throw Error(response.statusText) } + let type = response.headers.get('Content-Type'); + if (type.indexOf('application/json') === -1){ + throw new TypeError(`Expected JSON, got ${type}`) + } + return response; +} + +function mapApiFilmsToFilms(apiFilms) { + return apiFilms.map(film => new Film(film.id, film.title, film.favorite, film.watchDate, film.rating, film.userId)); +} + +const API = {getFilms}; +export default API; \ No newline at end of file diff --git a/lab09-client-server-I/solution/client/src/App.css b/lab09-client-server-I/solution/client/src/App.css new file mode 100644 index 0000000..dcffdc7 --- /dev/null +++ b/lab09-client-server-I/solution/client/src/App.css @@ -0,0 +1,87 @@ +/* increase default icon size */ +i.bi { + font-size: 25px; +} + +/* desktop sidebar */ +#films-filters .nav .nav-link { + transition: background-color 0.3s, color 0.3s; +} + +#films-filters .nav .nav-item:hover .nav-link { + background-color: #055c9d; + color: white !important; +} + +/* films list */ +#films-list .list-group-item { + padding: 1rem; +} + +/* reduced size for icons in list */ +#films-list i.bi { + font-size: 18px; +} + +/* custom style for actions column */ +#films-list .list-group-item .actions-container { + display: flex; + justify-content: flex-end; + gap: 2rem; +} + +#films-list .list-group-item .actions { + display: flex; + gap: .5rem; +} + +#films-list .list-group-item .actions i { + color: #555555; +} + +#films-list a.bi-pencil { + color: initial; +} + +#films-list a.bi-pencil:hover { + color: #f0ad4e; +} + +#films-list i.bi-trash:hover { + color: red; +} + +.error-message { + color: red; +} + +.wrong-field { + border-color: red; + border-width: 2px; +} + +.custom-control-input { + margin-right: 5px; +} + +/* custom star style */ +#films-list i.bi { + cursor: pointer; +} + +#films-list i.bi.bi-star-fill, #films-list i.bi.bi-star:hover { + color: #f0ad4e; +} + +#films-list i.bi.bi-star-fill:hover { + color: initial; +} + + +/* Add film button */ +.fixed-right-bottom { + position: fixed; + right: 1.5rem; + bottom: 1.5rem; + z-index: 1; +} diff --git a/lab09-client-server-I/solution/client/src/App.jsx b/lab09-client-server-I/solution/client/src/App.jsx new file mode 100644 index 0000000..0107c70 --- /dev/null +++ b/lab09-client-server-I/solution/client/src/App.jsx @@ -0,0 +1,159 @@ +/* + * 01UDFOV Applicazioni Web I / 01TXYOV Web Applications I + * Lab 9 - 2024 + */ +import 'bootstrap/dist/css/bootstrap.min.css'; +import 'bootstrap-icons/font/bootstrap-icons.css'; +import './App.css'; + +import {useEffect, useState} from 'react'; +import {Container} from 'react-bootstrap/'; +import {Route, Routes, useLocation} from 'react-router-dom'; + +import Header from "./components/Header.jsx"; +import FilmForm from './components/FilmForm.jsx'; +import {EditLayout, FilmLibraryLayout, FilmListLayout, NotFoundLayout} from './components/PageLayout.jsx'; +import FeedbackContext from "./contexts/FeedbackContext.js"; +import {Toast, ToastBody} from "react-bootstrap"; +import API from "./API.js"; + +function App() { + /** + * Defining a structure for Filters + * Each filter is identified by a unique name and is composed by the following fields: + * - A label to be shown in the GUI + * - An ID (equal to the unique name), used as key during the table generation + */ + const filters = { + 'filter-all': {label: 'All', url: ''}, + 'filter-favorite': {label: 'Favorites', url: '/filters/filter-favorite'}, + 'filter-best': {label: 'Best Rated', url: '/filters/filter-best'}, + 'filter-lastmonth': {label: 'Seen Last Month', url: '/filters/filter-lastmonth'}, + 'filter-unseen': {label: 'Unseen', url: '/filters/filter-unseen'} + }; + + // This state controls the expansion of the sidebar (on small breakpoints only) + const [isSidebarExpanded, setIsSidebarExpanded] = useState(false); + + // This state is used to store the feedback message to be shown in the toast + const [feedback, setFeedback] = useState(''); + + const setFeedbackFromError = (err) => { + let message = ''; + if (err.message) message = err.message; + else message = "Unknown Error"; + setFeedback(message); // Assuming only one error message at a time + }; + + // This state contains the list of movie. It will be updated when a movie is modified or a new movie is added. + const [films, setFilms] = useState([]); + + // Workaround to avoid refetching data when creating or updating a film + const [lastFilter, setLastFilter] = useState(undefined); + + const {pathname} = useLocation(); + + useEffect(() => { + console.log('pathname:', pathname); + console.log('lastFilter:', lastFilter) + if (pathname.startsWith('/filters')) { + setLastFilter(pathname.split('/').pop()); + } else if (pathname === '/') { + setLastFilter(''); + } + // else: lastFilter is kept when creating or updating a film + }, [pathname]); + + + useEffect(() => { + if (lastFilter === undefined) return; + API.getFilms(lastFilter) + .then(films => { + setFilms(films); + }) + .catch(e => { + setFeedbackFromError(e); + }); + }, [lastFilter]); + + // This function add the new film into the FilmLibrary array + const saveNewFilm = (newFilm) => { + const newFilmId = Math.max(...films.map(film => film.id)) + 1; + newFilm.id = newFilmId; + setFilms((films) => [...films, newFilm]); + }; + + // This function updates a film already stored into the FilmLibrary array + const updateFilm = (film) => { + setFilms(oldFilms => { + return oldFilms.map(f => { + if (film.id === f.id) + return { + "id": film.id, + "title": film.title, + "favorite": film.favorite, + "watchDate": film.watchDate, + "rating": film.rating + }; + else + return f; + }); + }); + }; + + const deleteFilm = (filmId) => { + setFilms((oldFilms) => oldFilms.filter((f) => f.id !== filmId)); + }; + + return ( + /* We forward the setFeedback function via a context as it will be used in add/edit routes for next lab */ + +
+
+ + + + }> + }/> + + }/> + + }/> + + }/> + }/> + + setFeedback('')} + delay={4000} + position="top-end" + className="position-fixed end-0 m-3" + > + + {feedback} + + + +
+
+ ); +} + +export default App; diff --git a/lab09-client-server-I/solution/client/src/components/FilmForm.jsx b/lab09-client-server-I/solution/client/src/components/FilmForm.jsx new file mode 100644 index 0000000..7d431f7 --- /dev/null +++ b/lab09-client-server-I/solution/client/src/components/FilmForm.jsx @@ -0,0 +1,134 @@ +import dayjs from 'dayjs'; + +import PropTypes from 'prop-types'; +import { useState } from 'react'; +import { Form, Button } from 'react-bootstrap'; +import { Link, useNavigate, useLocation } from 'react-router-dom'; + +import Film from '../models/Film'; + +const FilmForm = (props) => { + /* + * Creating a state for each parameter of the film. + * There are two possible cases: + * - if we are creating a new film, the form is initialized with the default values. + * - if we are editing a film, the form is pre-filled with the previous values. + */ + const [title, setTitle] = useState(props.film ? props.film.title : ''); + const [favorite, setFavorite] = useState(props.film ? props.film.favorite : false); + const [watchDate, setWatchDate] = useState((props.film && props.film.watchDate) ? props.film.watchDate.format('YYYY-MM-DD') : ""); + const [rating, setRating] = useState(props.film && props.film.rating ? props.film.rating : 0); + + // useNavigate hook is necessary to change page + const navigate = useNavigate(); + const location = useLocation(); + + // if the film is saved (eventually modified) we return to the list of all films, + // otherwise, if cancel is pressed, we go back to the previous location (given by the location state) + const nextpage = location.state?.nextpage || '/'; + + // This state is used to handle error messages + const [errors, setErrors] = useState([]); + + const validateForm = () => { + const validationErrors = {}; + + // Title validation: title should not be empty + if (title.trim() === '') { + validationErrors.title = 'Title can not be empty!'; + } + + // Watch date validation: watch date should not be in the future + if (dayjs(watchDate).isAfter(dayjs())) { + validationErrors.date='Watch date cannot be in the future!'; + } + + // Rating validation: rating should be between 0 and 5 + if (rating < 0 || rating > 5) { + validationErrors.rating='Rating should be between 0 and 5!'; + } + + return validationErrors; + }; + + const handleSubmit = (event) => { + event.preventDefault(); + + const validationErrors = validateForm(); + // console.log(validationErrors); + if (Object.keys(validationErrors).length > 0) { + setErrors(validationErrors); + return; // The form is not submitted. I.e., the film is not added. + } + + setErrors([]); // cleaning error array + setTitle(title.trim()); // trim() is used for removing leading and ending whitespaces + if(!rating) + setRating(null); + if(!watchDate) + setWatchDate(null); + const film = new Film(undefined, title.trim(), favorite, watchDate, rating); + + if(props.film) { + film.id = props.film.id; + props.editFilm(film); + } + else + props.addFilm(film); + + // To be sure that the user can see the added film, we navigate to the root. + navigate('/'); + } + + return ( +
+ + Title + {/* If there is an error related to the tile, the Form.Control becomes red */} + setTitle(event.target.value)}/> + + + + setFavorite(event.target.checked)} /> + + + + Watch Date + { /* watchDate is an optional parameter. It have to be properly rendered only if available. */ } + {event.target.value ? setWatchDate(dayjs(event.target.value).format('YYYY-MM-DD')) : setWatchDate('')}}/> + + + + Rating + {/* If there is an error related to the rating, the Form.Control becomes red */} + setRating(event.target.value === '' ? 0 : parseInt(event.target.value))} + // You can also use directly "event.target.value" even when it is an empty string but you will see a warning in console. + /> + + + { Object.keys(errors).length > 0 ? +
+ { /* errors.map((error, index) => (

{error}

)) } */ + Object.keys(errors).map((err, index) => (

{"Error "+(index+1)+": "}{errors[err]}

)) } +
+ : "" + } + + { props.film ? + : + } + Cancel +
+ ) + +} + +FilmForm.propTypes = { + addFilm: PropTypes.func, + editFilm: PropTypes.func, + cancel: PropTypes.func, + film: PropTypes.object +}; + +export default FilmForm; diff --git a/lab09-client-server-I/solution/client/src/components/FilmList.jsx b/lab09-client-server-I/solution/client/src/components/FilmList.jsx new file mode 100644 index 0000000..84992b4 --- /dev/null +++ b/lab09-client-server-I/solution/client/src/components/FilmList.jsx @@ -0,0 +1,89 @@ +import dayjs from 'dayjs'; + +import PropTypes from 'prop-types'; +import {Col, Row, ListGroup, ListGroupItem} from 'react-bootstrap/'; +import { Link, useLocation } from "react-router-dom"; + + +export default function FilmList(props) { + + return ( + + {props.films.map((film) => )} + + ); +} + +FilmList.propTypes = { + films: PropTypes.array.isRequired, + updateFilm: PropTypes.func.isRequired, + deleteFilm: PropTypes.func.isRequired +}; + +export function FilmInList(props) { + + return ( + + + {props.filmData.title} +
+ +
+ + + + + {/* Disabling the checkbox to suppress a warning. It is necessary to implement also the onChange function to properly manage the checkbox. */} + props.updateFilm({ ...props.filmData, "favorite": event.target.checked })} /> + + + + + + + {props.filmData.watchDate ? dayjs(props.filmData.watchDate).format('MMMM D, YYYY') : ''} + + +
+ props.updateFilm({ ...props.filmData, rating: newRating })}/> +
+
+ +
+ +
+
); +} + +FilmInList.propTypes = { + filmData: PropTypes.object.isRequired, + updateFilm: PropTypes.func.isRequired, + deleteFilm: PropTypes.func.isRequired +}; + +function FilmIcons(props) { + const location = useLocation(); + + return(<> + + props.deleteFilm(props.filmData.id)} /> + ); +} + +FilmIcons.propTypes = { + filmData: PropTypes.object.isRequired, + deleteFilm: PropTypes.func.isRequired +}; + +function Rating({maxStars, rating, updateRating}) { + return [...Array(maxStars)].map( + (el, index) => + updateRating(index+1)} />); +} + +Rating.propTypes = { + maxStars: PropTypes.number.isRequired, + updateRating: PropTypes.func.isRequired +}; diff --git a/lab09-client-server-I/solution/client/src/components/Filters.jsx b/lab09-client-server-I/solution/client/src/components/Filters.jsx new file mode 100644 index 0000000..368f3b8 --- /dev/null +++ b/lab09-client-server-I/solution/client/src/components/Filters.jsx @@ -0,0 +1,34 @@ +import PropTypes from 'prop-types'; +import { ListGroup, NavItem } from "react-bootstrap"; +import { NavLink } from "react-router-dom"; + +function Filters(props) { + const { items } = props; + + // Converting the object into an array to use map method + const filterArray = Object.entries(items); + + return ( + + { + filterArray.map(([filterName, {label, url}]) => { + return ( + + `nav-link ${isActive ? 'active' : 'link-dark'}`} + to={url} + > + {label} + + ); + }) + } + + ); +} + +Filters.propTypes = { + items: PropTypes.object, // This item object was modified containing URLs +}; + +export default Filters; diff --git a/lab09-client-server-I/solution/client/src/components/Header.jsx b/lab09-client-server-I/solution/client/src/components/Header.jsx new file mode 100644 index 0000000..cde038e --- /dev/null +++ b/lab09-client-server-I/solution/client/src/components/Header.jsx @@ -0,0 +1,42 @@ +import {Button, Col, Container, Row} from "react-bootstrap/"; +import PropTypes from "prop-types"; + +function Header({isSidebarExpanded, setIsSidebarExpanded}) { + return
+ + + + + + + + + Film Library + + + +
+ +
+ + + + + + +
; +} + +Header.propTypes = { + isSidebarExpanded: PropTypes.bool, + setIsSidebarExpanded: PropTypes.func +} + +export default Header; diff --git a/lab09-client-server-I/solution/client/src/components/PageLayout.jsx b/lab09-client-server-I/solution/client/src/components/PageLayout.jsx new file mode 100644 index 0000000..c59af36 --- /dev/null +++ b/lab09-client-server-I/solution/client/src/components/PageLayout.jsx @@ -0,0 +1,67 @@ +/* eslint-disable react/prop-types */ +import { Row, Col, Collapse } from "react-bootstrap"; +import { Outlet, Link, useParams, useLocation } from "react-router-dom"; + +import Filters from "./Filters.jsx"; +import FilmForm from "./FilmForm.jsx"; +import FilmList from "./FilmList.jsx"; + +export function FilmLibraryLayout(props) { + return ( + + +
+
Filters
+ +
+
+ + + +
+ ); +} + +export function FilmListLayout(props) { + const { filterLabel } = useParams(); + const filterName = props.filters[filterLabel] ? props.filters[filterLabel].label : 'All'; + + const location = useLocation(); + + return ( + <> +

{filterName} films

+ + + + + + + + ); +} + +export function EditLayout(props) { + const { filmId } = useParams(); + const editableFilm = props.films && props.films.find( f => f.id === Number(filmId) ); + + return(!editableFilm ? + + +

Error: film not found!

+ Go Home! + +
+ : + ); +} + +export function NotFoundLayout() { + return( + <> +

Error: page not found!

+ page not found + Go Home! + + ); +} diff --git a/lab09-client-server-I/solution/client/src/contexts/FeedbackContext.js b/lab09-client-server-I/solution/client/src/contexts/FeedbackContext.js new file mode 100644 index 0000000..51f0f92 --- /dev/null +++ b/lab09-client-server-I/solution/client/src/contexts/FeedbackContext.js @@ -0,0 +1,8 @@ +import React from "react"; + +const FeedbackContext = React.createContext({ + setFeedback: (message) => {}, + setFeedbackFromError: (error) => {} +}); + +export default FeedbackContext; \ No newline at end of file diff --git a/lab09-client-server-I/solution/client/src/main.jsx b/lab09-client-server-I/solution/client/src/main.jsx new file mode 100644 index 0000000..74edcfd --- /dev/null +++ b/lab09-client-server-I/solution/client/src/main.jsx @@ -0,0 +1,11 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import { createBrowserRouter, RouterProvider } from "react-router-dom"; +import App from './App.jsx' + +const router = createBrowserRouter([{path: "/*", element:}]); +ReactDOM.createRoot(document.getElementById('root')).render( + + + , +) diff --git a/lab09-client-server-I/solution/client/src/models/Film.js b/lab09-client-server-I/solution/client/src/models/Film.js new file mode 100644 index 0000000..e67b83a --- /dev/null +++ b/lab09-client-server-I/solution/client/src/models/Film.js @@ -0,0 +1,30 @@ +/* + * 01UDFOV Applicazioni Web I / 01TXYOV Web Applications I + * 2024 - Lab 9 + */ + +import dayjs from "dayjs"; + +// This is the same model developed for lab 1. +export default function Film(id, title, isFavorite = false, watchDate = null, rating = null, userId = 1) { + this.id = id; + this.title = title; + this.favorite = isFavorite; + this.rating = rating; + // saved as dayjs object only if watchDate is truthy + this.watchDate = watchDate && dayjs(watchDate); + this.userId = userId + + this.toString = () => { + const watchDate = this.watchDate ? this.watchDate.format('DD/MM/YYYY') : null + + return `Id: ${this.id}, ` + + `Title: ${this.title}, Favorite: ${this.favorite}, ` + + `Watch date: ${watchDate}, Score: ${this.rating}, ` + + `User: ${this.userId}`; + } + + this.formatWatchDate = (format = 'MMMM D, YYYY') => { + return this.watchDate ? this.watchDate.format(format) : undefined; + }; +} diff --git a/lab09-client-server-I/solution/client/vite.config.js b/lab09-client-server-I/solution/client/vite.config.js new file mode 100644 index 0000000..5a33944 --- /dev/null +++ b/lab09-client-server-I/solution/client/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], +}) diff --git a/lab09-client-server-I/solution/server/Film.mjs b/lab09-client-server-I/solution/server/Film.mjs new file mode 100644 index 0000000..485f713 --- /dev/null +++ b/lab09-client-server-I/solution/server/Film.mjs @@ -0,0 +1,24 @@ +/* + * 01UDFOV Applicazioni Web I / 01TXYOV Web Applications I + * Model from lab 1 - 2024 + */ + +import dayjs from "dayjs"; + +export default function Film(id, title, isFavorite = false, watchDate = null, rating = null, userId = 1) { + this.id = id; + this.title = title; + this.favorite = isFavorite; + this.rating = rating; + // saved as dayjs object only if watchDate is truthy + this.watchDate = watchDate && dayjs(watchDate); + this.userId = userId; + + // customize toJSON method to return the object with date only, no time + this.toJSON = () => { + return { + ...this, + watchDate: this.watchDate ? this.watchDate.format("YYYY-MM-DD") : null, + }; + }; +} \ No newline at end of file diff --git a/lab09-client-server-I/solution/server/dao-films.mjs b/lab09-client-server-I/solution/server/dao-films.mjs new file mode 100644 index 0000000..1aedf52 --- /dev/null +++ b/lab09-client-server-I/solution/server/dao-films.mjs @@ -0,0 +1,130 @@ +/* Data Access Object (DAO) module for accessing films data */ + +import dayjs from "dayjs"; +import db from "./db.mjs"; +import Film from "./Film.mjs"; + + +const filters = { + 'filter-favorite': {label: 'Favorites', filterFunction: film => film.favorite}, + 'filter-best': {label: 'Best Rated', filterFunction: film => film.rating >= 5}, + 'filter-lastmonth': {label: 'Seen Last Month', filterFunction: film => isSeenLastMonth(film)}, + 'filter-unseen': {label: 'Unseen', filterFunction: film => !film.watchDate} +}; + +const isSeenLastMonth = (film) => { + if ('watchDate' in film && film.watchDate) { // Accessing watchDate only if defined + const diff = film.watchDate.diff(dayjs(), 'month'); + const isLastMonth = diff <= 0 && diff > -1; // last month + return isLastMonth; + } +}; + +function mapRowsToFilms(rows) { + // Note: the parameters must follow the same order specified in the constructor. + return rows.map(row => new Film(row.id, row.title, row.isFavorite === 1, row.watchDate, row.rating, row.userId)); +} + + +// NOTE: all functions return error messages as json object { error: } +export default function FilmDao() { + + // This function retrieves the whole list of films from the database. + this.getFilms = (filter) => { + return new Promise((resolve, reject) => { + const query = 'SELECT * FROM films'; + db.all(query, (err, rows) => { + if (err) { + reject(err); + } else { + const films = mapRowsToFilms(rows); + + if (filters.hasOwnProperty(filter)) + resolve(films.filter(filters[filter].filterFunction)); + else // if an invalid filter is specified, all the films are returned. + resolve(films); + } + }); + }); + }; + + // This function retrieves a film given its id and the associated user id. + this.getFilm = (id) => { + return new Promise((resolve, reject) => { + const query = 'SELECT * FROM films WHERE id=?'; + db.get(query, [id], (err, row) => { + if (err) { + reject(err); + } + if (row === undefined) { + resolve({error: 'Film not found.'}); + } else { + resolve(mapRowsToFilms([row])[0]); + } + }); + }); + }; + + + /** + * This function adds a new film in the database. + * The film id is added automatically by the DB, and it is returned as this.lastID. + */ + this.addFilm = (film) => { + return new Promise((resolve, reject) => { + const query = 'INSERT INTO films (title, isFavorite, rating, watchDate, userId) VALUES(?, ?, ?, ?, ?)'; + const watchDate = film.watchDate ? film.watchDate.format("YYYY-MM-DD") : null; + let rating; + if (!film.rating || film.rating < 1 || film.rating > 5) + rating = null; + else + rating = film.rating; + + db.run(query, [film.title, film.favorite, rating, watchDate, film.userId], function (err) { + if (err) { + reject(err); + } + film.id = this.lastID; + resolve(film); + }); + }); + }; + + // This function updates an existing film given its id and the new properties. + this.updateFilm = (id, film) => { + return new Promise((resolve, reject) => { + const query = 'UPDATE films SET title = ?, isFavorite = ?, rating = ?, watchDate = ? WHERE id = ?'; + const watchDate = film.watchDate ? film.watchDate.format("YYYY-MM-DD") : null; + let rating; + if (!film.rating || film.rating < 1 || film.rating > 5) + rating = null; + else + rating = film.rating; + + db.run(query, [film.title, film.favorite, rating, watchDate, id], function (err) { + if (err) { + reject(err); + } + if (this.changes !== 1) { + resolve({error: 'Film not found.'}); + } else { + resolve(film); + } + }); + }); + }; + + // This function deletes an existing film given its id. + this.deleteFilm = (id) => { + return new Promise((resolve, reject) => { + const query = 'DELETE FROM films WHERE id = ?'; + db.run(query, [id], function (err) { + if (err) { + reject(err); + } else + resolve(this.changes); + }); + }); + }; + +} diff --git a/lab09-client-server-I/solution/server/dao-users.mjs b/lab09-client-server-I/solution/server/dao-users.mjs new file mode 100644 index 0000000..09784c4 --- /dev/null +++ b/lab09-client-server-I/solution/server/dao-users.mjs @@ -0,0 +1,27 @@ +/* Data Access Object (DAO) module for accessing users data */ + +import db from "./db.mjs"; + + +// NOTE: all functions return error messages as json object { error: } +export default function UserDao() { + + // This function retrieves one user by id + this.getUser = (id) => { + return new Promise((resolve, reject) => { + const query = 'SELECT * FROM users WHERE id=?'; + db.get(query, [id], (err, row) => { + if (err) { + reject(err); + } + if (row === undefined) { + resolve({error: 'User not found.'}); + } else { + resolve(row); + } + }); + }); + }; + + +} diff --git a/lab09-client-server-I/solution/server/db.mjs b/lab09-client-server-I/solution/server/db.mjs new file mode 100644 index 0000000..6d1dd38 --- /dev/null +++ b/lab09-client-server-I/solution/server/db.mjs @@ -0,0 +1,11 @@ +/** DB access module **/ + +import sqlite3 from "sqlite3"; + +// Opening the database +// NOTE: if you are running the solution from the root folder this path should be: `./lab03-express/solution/films.db` +const db = new sqlite3.Database('films.db', (err) => { + if (err) throw err; +}); + +export default db; diff --git a/lab09-client-server-I/solution/server/films.db b/lab09-client-server-I/solution/server/films.db new file mode 100644 index 0000000000000000000000000000000000000000..403289e2cb94cd569efd78a38ededf4a986b9c82 GIT binary patch literal 24576 zcmeI4PjA~c6u>1bvEy`(0&I=f0qxih8Dccf^v{xfD9~ngiWW`KHU_$#42q%}Ew-FU za@Y2@Ex@`R2JEu)fE@?)utR};f!ziSJq_ETw;g)!2iOy3Cvnp?C=j6S@EAxkAIV3) zpY%vaCb@q7YM62o^y3~)i7CxWvMik^M3SUcIEru-;E>^X8;%J$Mj?|O7FMOD+uu|w z52T4>*QLtCnZGJu9lJg?b67DIy2_OL^fCP?!z)rhVs?N{L_cv4Ob$JkWdr4aPr%W$Q69}Q7oka+vl;7g< zC<@o8pOR?M?TVb4ob{t5jVa_D>e|}eP0P}^;;={KyJVB!C3KMX!-&Pa$D?#nWJ|-e z%d>ohv|FFFb77dQ(A)hu`)+f2t=+oRx$UxyBb9bSs3F(7PLj8*J}TvCI|Gah9S1)R{LhFwMKMu zVeKMm)TV2d2Z~m$R^|KWMvql55zk0r?6El`WM|&|CuZl|&}oFdJ0C&pdDf3R&Hu*w z%(c*8hTT{0b}#8KwTWW&Tve9B$me&G?Jo3LoxGcact`XH9bH@|XQrg7Y&5u5C|1v& zl|K~@HY}3x?Sbe*at))XGUjy8MI2+^2DqY>*xy}2mWdAV_l_h{G^LrFGR9Iky3g>XkZqS$Wdn-$Fya;M8~ zU_L&LDP1HRG}*{28`ZQ(5(>j#Hb(B&p51p5)F~7D@s)slNA)GYdTLX7eOepO%^I3R%U*d)bG_(aKV5CkN^@u0!RP}AOR$R1dsp{ zKmthMRTJ2TAGY3D|-3hJB5n+r!=YF zlhhy7d+KlML-ilkgTE`Uld0GiB!C2v01`j~NB{{S0VIF~kN^@u0{mWpB`VU zpQoF3U7LYD0J1Fs=10" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "optional": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, + "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/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "optional": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "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==", + "optional": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "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/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "optional": 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==", + "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/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/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==" + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "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.2", + "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/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/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/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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/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": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "optional": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "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==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "optional": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": 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/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "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/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, + "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-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "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/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==", + "optional": true + }, + "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==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "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==", + "optional": 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==", + "optional": true + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "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/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/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.1.tgz", + "integrity": "sha512-K4w1/Bp7y8iSiVObmCrtq8Cs79XjJc/RU2YYkZQ7wpUu5ZyZ7MtPHkqoMz4pf+mgXfNvo2qft8D9OnrH2ABk9w==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.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-validator": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-7.0.1.tgz", + "integrity": "sha512-oB+z9QOzQIE8FnlINqyIFA8eIckahC6qc8KtqLdLJcU3/phVyuhXH3bA4qzcrhme+1RYaCSwrq+TlZ/kAKIARA==", + "dependencies": { + "lodash": "^4.17.21", + "validator": "^13.9.0" + }, + "engines": { + "node": ">= 8.0.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/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "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/finalhandler/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/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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/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-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "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==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "optional": true + }, + "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/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": 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/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==", + "optional": true + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "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/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "optional": 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-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "optional": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "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==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.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==", + "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/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "optional": 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==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "optional": true + }, + "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==", + "optional": 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": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "optional": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "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-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==", + "optional": 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==", + "optional": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "optional": true + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "optional": true + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "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/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/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/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/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-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "optional": 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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "optional": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "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==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/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/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/morgan/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==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "optional": true + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "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/node-abi": { + "version": "3.56.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.56.0.tgz", + "integrity": "sha512-fZjdhDOeRcaS+rcpve7XuwHBmktS1nS1gzgghwKUQQ8nTy2FdSDr6ZT8k6YhvlJeHmmQMYiT/IH9hfco5zeW2Q==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", + "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==", + "engines": { + "node": "^16 || ^18 || >= 20" + } + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "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/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==", + "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==", + "dependencies": { + "wrappy": "1" + } + }, + "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==", + "optional": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "optional": 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==", + "optional": 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/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "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/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==", + "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/raw-body/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/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "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==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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/send/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/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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/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/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "optional": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "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/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "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==", + "optional": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "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/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "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": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "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==", + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", + "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==", + "optional": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "optional": true + }, + "node_modules/sqlite3": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1", + "tar": "^6.1.11" + }, + "optionalDependencies": { + "node-gyp": "8.x" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "optional": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "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/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==", + "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==", + "optional": 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==", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "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-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "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/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "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/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "optional": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "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/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "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/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "engines": { + "node": ">= 0.10" + } + }, + "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/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "optional": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "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==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/lab09-client-server-I/solution/server/package.json b/lab09-client-server-I/solution/server/package.json new file mode 100644 index 0000000..e349c4c --- /dev/null +++ b/lab09-client-server-I/solution/server/package.json @@ -0,0 +1,29 @@ +{ + "name": "lab03-express", + "version": "1.0.0", + "description": "2024 - PoliTo - Web App I - Lab 3", + "author": "Luca Mannella, Luca Pezzolla, Juan Pablo Saenz Moreno", + "main": "server.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "node server.mjs" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/polito-webapp1/lab-2024.git" + }, + "keywords": [], + "license": "ISC", + "bugs": { + "url": "https://github.com/polito-webapp1/lab-2024/issues" + }, + "homepage": "https://github.com/polito-webapp1/lab-2024", + "dependencies": { + "cors": "^2.8.5", + "dayjs": "^1.11.10", + "express": "^4.19.1", + "express-validator": "^7.0.1", + "morgan": "^1.10.0", + "sqlite3": "^5.1.7" + } +} diff --git a/lab09-client-server-I/solution/server/server.mjs b/lab09-client-server-I/solution/server/server.mjs new file mode 100644 index 0000000..86cac0c --- /dev/null +++ b/lab09-client-server-I/solution/server/server.mjs @@ -0,0 +1,224 @@ +/*** Importing modules ***/ +import express from 'express'; +import morgan from 'morgan'; // logging middleware +import cors from 'cors'; // CORS middleware +import {check, validationResult} from 'express-validator'; // validation middleware +import FilmDao from "./dao-films.mjs"; // module for accessing the films table in the DB +import Film from "./Film.mjs"; +import UserDao from "./dao-users.mjs"; + +const filmDao = new FilmDao(); +const userDao = new UserDao(); + +/*** init express and set up the middlewares ***/ +const app = express(); +app.use(morgan('dev')); +app.use(express.json()); + + +/** Set up and enable Cross-Origin Resource Sharing (CORS) **/ +const corsOptions = { + origin: 'http://localhost:5173' +}; +app.use(cors(corsOptions)); + + +/*** Utility Functions ***/ + +// This function is used to handle validation errors +const onValidationErrors = (validationResult, res) => { + const errors = validationResult.formatWith(errorFormatter); + return res.status(422).json({validationErrors: errors.mapped()}); +}; + +// Only keep the error message in the response +const errorFormatter = ({msg}) => { + return msg; +}; + +// Custom validation function to check if the user exists +async function validateUserId(req, res, next) { + const {userId} = req.body; + + try { + const result = await userDao.getUser(userId); + if (result.error) { + res.status(404).json(result).end(); + } else { + next(); + } + } catch (err) { + res.status(503).json({error: err.message}).end(); + } +} + + +const filmValidation = [ + check('title').isString().notEmpty(), + check('favorite').isBoolean().optional(), + check('watchDate').optional({nullable: true}).isISO8601({strict: true}).toDate(), // valid ISO date, without time + check('rating').optional({nullable: true}).isInt({min: 1, max: 5}), + validateUserId +]; + +/*** Films APIs ***/ +// 1. Retrieve the list of all the available films. +// GET /api/films +// This route returns the FilmLibrary. It handles also "filter=?" query parameter +app.get('/api/films', + (req, res) => { + // get films that match optional filter in the query + filmDao.getFilms(req.query.filter) + // NOTE: "invalid dates" (i.e., missing dates) are set to null during JSON serialization + .then(films => res.json(films)) + .catch((err) => res.status(500).json(err)); // always return a json and an error message + } +); + +// 2. Retrieve a film, given its "id". +// GET /api/films/ +// Given a film id, this route returns the associated film from the library. +app.get('/api/films/:id', + async (req, res) => { + try { + const result = await filmDao.getFilm(req.params.id); + if (result.error) + res.status(404).json(result); + else + // NOTE: "invalid dates" (i.e., missing dates) are set to null during JSON serialization + res.json(result); + } catch (err) { + res.status(500).end(); + } + } +); + + +// 3. Create a new film, by providing all relevant information. +// POST /api/films +// This route adds a new film to film library. The film can be created even specifying only its "title". +app.post('/api/films', + filmValidation, + async (req, res) => { + const invalidFields = validationResult(req); + + if (!invalidFields.isEmpty()) { + return onValidationErrors(invalidFields, res); + } + + const favorite = req.body.favorite ? req.body.favorite : false; + const watchDate = req.body.watchDate ? req.body.watchDate : null; + const rating = req.body.rating ? req.body.rating : null; + const film = new Film(undefined, req.body.title, favorite, watchDate, rating, req.body.userId); + + try { + const result = await filmDao.addFilm(film); // NOTE: addFilm returns the new created object + res.json(result); + } catch (err) { + res.status(503).json({error: `Database error during the creation of new film: ${err}`}); + } + } +) +; + +// 4. Update an existing film, by providing all the relevant information +// PUT /api/films/ +// This route allows to modify a film, specifying its id and the necessary data. +app.put('/api/films/:id', + filmValidation, + async (req, res) => { + const invalidFields = validationResult(req); + + if (!invalidFields.isEmpty()) { + return onValidationErrors(invalidFields, res); + } + + const film = new Film(Number(req.params.id), req.body.title, req.body.favorite, req.body.watchDate, req.body.rating, req.body.userId); + + try { + const result = await filmDao.updateFilm(film.id, film); + if (result.error) + res.status(404).json(result); + else + res.json(result); + } catch (err) { + res.status(503).json({error: `Database error during the update of film ${req.params.id}: ${err}`}); + } + } +); + +// 5. Mark an existing film as favorite/unfavorite +// PUT /api/films//favorite +// This route changes only the favorite value. It could also be a PATCH. +app.put('/api/films/:id/favorite', + [ + check('favorite').isBoolean(), + ], + async (req, res) => { + const invalidFields = validationResult(req); + + if (!invalidFields.isEmpty()) { + return onValidationErrors(invalidFields, res); + } + + try { + const film = await filmDao.getFilm(req.params.id); + if (film.error) + return res.status(404).json(film); + film.favorite = req.body.favorite; // update favorite property + const result = await filmDao.updateFilm(film.id, film); + return res.json(result); + } catch (err) { + res.status(503).json({error: `Database error during the favorite update of film ${req.params.id}`}); + } + } +); + +// 6. Update the rating of a specific film +// PUT /api/films//rating +// This route changes only the rating value. It could also be a PATCH. +app.put('/api/films/:id/rating', + [ + check('rating').optional({nullable: true}).isInt({min: 1, max: 5}), + ], + async (req, res) => { + const invalidFields = validationResult(req); + + if (!invalidFields.isEmpty()) { + return onValidationErrors(invalidFields, res); + } + + try { + const film = await filmDao.getFilm(req.params.id); + if (film.error) + return res.status(404).json(film); + // update favorite property + film.rating = req.body.rating || null; // if req.body.rating is falsy, null is assigned + const result = await filmDao.updateFilm(film.id, film); + return res.json(result); + } catch (err) { + res.status(503).json({error: `Database error during the rating update of film ${req.params.id}`}); + } + } +); + + +// 7. Delete an existing film, given its “id” +// DELETE /api/films/ +// Given a film id, this route deletes the associated film from the library. +app.delete('/api/films/:id', + async (req, res) => { + try { + // NOTE: if there is no film with the specified id, the delete operation is considered successful. + await filmDao.deleteFilm(req.params.id); + res.status(200).end(); + } catch (err) { + res.status(503).json({error: `Database error during the deletion of film ${req.params.id}: ${err} `}); + } + } +); + + +// Activating the server +const PORT = 3001; +app.listen(PORT, () => console.log(`Server running on http://localhost:${PORT}/`)); diff --git a/lab09-client-server-I/solution/server/test-api.http b/lab09-client-server-I/solution/server/test-api.http new file mode 100644 index 0000000..3880cdf --- /dev/null +++ b/lab09-client-server-I/solution/server/test-api.http @@ -0,0 +1,151 @@ +# This file can be used for thesting the API with a dedicated Visual Studio Code extension. + +## Retrieving all the films. +GET http://localhost:3001/api/films HTTP/1.1 +### + +## Retrieving a specific film specifing its ID. +GET http://localhost:3001/api/films/{{$randomInt 1 6}} HTTP/1.1 +### + + +## Retrieving all the films with a specified filter (in this example "unseen"). +GET http://localhost:3001/api/films?filter=filter-unseen HTTP/1.1 +### + +## Create new film (with all the fields except ID) +POST http://localhost:3001/api/films HTTP/1.1 +content-type: application/json + +{ + "title": "Guardians of the Galaxy Vol.3", + "favorite": true, + "watchDate": "{{$datetime 'YYYY-MM-DD' -15 d }}", + "rating": 4, + "userId": 1 +} +### + +## Create new film (without only title) +POST http://localhost:3001/api/films HTTP/1.1 +content-type: application/json + +{ + "title": "Inception" +} +### + +## Retrieving all the films with a specified filter. +GET http://localhost:3001/api/films?filter=filter-lastmonth HTTP/1.1 +### + + + +## Updates the first film. +PUT http://localhost:3001/api/films/1 HTTP/1.1 +content-type: application/json + +{ + "title": "The Hangover", + "favorite": false, + "watchDate": null, + "rating": null, + "userId": 1 +} +### + + +## Updates film favorite property. +PUT http://localhost:3001/api/films/1/favorite HTTP/1.1 +content-type: application/json + +{ + "favorite": true +} +### + +## Updates film rating property. +PUT http://localhost:3001/api/films/1/rating HTTP/1.1 +content-type: application/json + +{ + "rating": {{$randomInt 1 6}} +} +### + + +## Deletes film. +DELETE http://localhost:3001/api/films/1 HTTP/1.1 +### + + +## Retrieving all the films. +GET http://localhost:3001/api/films HTTP/1.1 +### + + + +# Wrong Requests + +## Trying to retrieve a film with an ID that does not exist. +GET http://localhost:3001/api/films/1000 HTTP/1.1 +### + +## Trying to retrieve a film with a wrong ID. +GET http://localhost:3001/api/films/ThisIsAStringId HTTP/1.1 +### + +## Trying to create a wrong film. +POST http://localhost:3001/api/films HTTP/1.1 +content-type: application/json + +{ + "wrong_title_field": "Guardians of the Galaxy Vol.3", + "favorite": "I really liked it!", + "watchDate": "May the 15th, 2023", + "rating": 35 +} +### + +## Trying to update a film with wrong values. +PUT http://localhost:3001/api/films/1 HTTP/1.1 +content-type: application/json + +{ + "title": "The Hangover", + "favorite": 7, + "watchDate": "", + "rating": 7 +} +### + +## Trying to updates film favorite property with a wrong value. +PUT http://localhost:3001/api/films/1/favorite HTTP/1.1 +content-type: application/json + +{ + "favorite": "Really like it!" +} +### + +## Trying to update film rating property with a wrong value. +PUT http://localhost:3001/api/films/1/rating HTTP/1.1 +content-type: application/json + +{ + "rating": 50 +} +### + +## Updates film with and id that does not exists +PUT http://localhost:3001/api/films/999 HTTP/1.1 +content-type: application/json + +{ + "title": "The Hangover", + "favorite": false, + "watchDate": "", + "rating": null, + "userId": 1 +} +###