From 6015fa604803744bb660a2cc5621c80dd4082215 Mon Sep 17 00:00:00 2001 From: Caleb Braaten Date: Thu, 13 Jun 2024 13:22:17 -0700 Subject: [PATCH] Archive Commit --- .gitignore | 1 + README.md | 35 + demo/.env.example | 7 + demo/.gitignore | 3 + demo/.vscode/settings.json | 5 + demo/app.js | 207 ++ demo/frontend/.gitignore | 24 + demo/frontend/index.html | 13 + demo/frontend/package-lock.json | 3459 +++++++++++++++++++ demo/frontend/package.json | 24 + demo/frontend/postcss.config.cjs | 6 + demo/frontend/src/App.jsx | 40 + demo/frontend/src/TransactionController.jsx | 40 + demo/frontend/src/TransactionsList.jsx | 31 + demo/frontend/src/index.css | 3 + demo/frontend/src/main.jsx | 10 + demo/frontend/tailwind.config.cjs | 12 + demo/frontend/vite.config.js | 16 + demo/openai.js | 40 + demo/package-lock.json | 2765 +++++++++++++++ demo/package.json | 24 + demo/sortTransactions.js | 28 + homepage.png | Bin 0 -> 47622 bytes instructions/README.md | 72 + instructions/README2.md | 121 + instructions/README3.md | 84 + instructions/README4.md | 91 + instructions/README5.md | 301 ++ sortedtransactions.png | Bin 0 -> 111090 bytes 29 files changed, 7462 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 demo/.env.example create mode 100644 demo/.gitignore create mode 100644 demo/.vscode/settings.json create mode 100644 demo/app.js create mode 100644 demo/frontend/.gitignore create mode 100644 demo/frontend/index.html create mode 100644 demo/frontend/package-lock.json create mode 100644 demo/frontend/package.json create mode 100644 demo/frontend/postcss.config.cjs create mode 100644 demo/frontend/src/App.jsx create mode 100644 demo/frontend/src/TransactionController.jsx create mode 100644 demo/frontend/src/TransactionsList.jsx create mode 100644 demo/frontend/src/index.css create mode 100644 demo/frontend/src/main.jsx create mode 100644 demo/frontend/tailwind.config.cjs create mode 100644 demo/frontend/vite.config.js create mode 100644 demo/openai.js create mode 100644 demo/package-lock.json create mode 100644 demo/package.json create mode 100644 demo/sortTransactions.js create mode 100644 homepage.png create mode 100644 instructions/README.md create mode 100644 instructions/README2.md create mode 100644 instructions/README3.md create mode 100644 instructions/README4.md create mode 100644 instructions/README5.md create mode 100644 sortedtransactions.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..496ee2c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..99a8d9d --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# Ai Quikstart + +## Overview + +> This project is not supported and is really just for reference... (there was some cool pagination of requests to handle context windows of LLMs) + +This repo contains content related to the 'capstone' of an accelerated tutoring series for some CEOs that were interested in learning to code and exploring AI. + +The instructions folder contain the Readmes I put together to help guide them along with building out a simple web app that they were interested in. It also has a mix of things that are done already and some things that aren't. This is because it was worked on in a live instruction setting for them to flex their creativity. As such, follow the instructions at your own risk. + +The demo folder contains some somewhat working code. The OpenAI model that was initially used is no longer supported so I have moved the model declaration to an environment variable. Because my trial has expired and this isn't a production app, I haven't tested that newer models work in the same manner. + +## Screenshots + +![Homepage](homepage.png) +![Sorted Transactions](./sortedtransactions.png) + +## Getting started +1. Git clone repo +2. cd into /demo +3. `npm install` +4. Rename .env.example to .env +5. Add OpenAI secrets and remove DEMO=true if you want dynamic functionality +6. `npm run dev` to kick of the demo + +> Node Version 20 and above required + +## Limitations + +Lots... This was a demo project 😂 + +Some notable call outs though are below. +1. Categories are hardcoded +2. You're relying on the guessing of an LLM +3. Once transactions are sorted, you must refresh to go again \ No newline at end of file diff --git a/demo/.env.example b/demo/.env.example new file mode 100644 index 0000000..d0edfaa --- /dev/null +++ b/demo/.env.example @@ -0,0 +1,7 @@ +# Required if not in demo mode +OPENAI_ORG_ID=<> +OPENAI_API_KEY=<> +OPENAI_MODEL="gpt-3.5-turbo" + +# Include to skip asking OpenAI and return harcoded values +DEMO=true \ No newline at end of file diff --git a/demo/.gitignore b/demo/.gitignore new file mode 100644 index 0000000..38657be --- /dev/null +++ b/demo/.gitignore @@ -0,0 +1,3 @@ +.DS_Store +node_modules +.env diff --git a/demo/.vscode/settings.json b/demo/.vscode/settings.json new file mode 100644 index 0000000..3dc3ccd --- /dev/null +++ b/demo/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.ignoreWords": [ + "openai" + ] +} \ No newline at end of file diff --git a/demo/app.js b/demo/app.js new file mode 100644 index 0000000..0abcb65 --- /dev/null +++ b/demo/app.js @@ -0,0 +1,207 @@ +import express from 'express'; +import logger from 'morgan'; +import multer from 'multer'; +import neatCsv from 'neat-csv' +import sortTransactions from './sortTransactions.js' +import path from 'path'; +import {fileURLToPath} from 'node:url'; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const app = express() +const port = 3000 + +app.use(express.json()) +app.use(logger('dev')) + +const storage = multer.memoryStorage() +const upload = multer({ storage: storage }) + +app.get('/api/hello', (req, res) => { + res.send( + `

Hello Big World

` + ) +}) + +app.post('/api/upload/', upload.single('file'), async (req, res) => { + console.log() + if(process.env.DEMO == "true"){ + res.send(tempTransactions) + console.log("Hit") + return + } + + if(!req.file) { + res.send('No file uploaded.') + return + } + + const csvString = req.file.buffer.toString('utf8') + + let results = await sortTransactions(csvString, + ['Bills', 'Groceries', 'Restaurants', 'Entertainment', 'Shopping', 'Travel'] + ) + + let transactions = await neatCsv(results) + // res.send(transactions) +}) + +app.use('/', express.static(path.join(__dirname, 'public'))) + +app.listen(port, () => { + console.log(`Example app listening on port ${port}`) +}) + + +var tempTransactions = [ + { + "Status": "Cleared", + "Date": "02/03/2023", + "Description": "CRUNCHYROLL", + "Debit": "11.03", + "Credit": "", + "Category": "Entertainment" + }, + { + "Status": "Cleared", + "Date": "02/01/2023", + "Description": "GOOGLE CLOUD", + "Debit": "0.03", + "Credit": "", + "Category": "Bills" + }, + { + "Status": "Cleared", + "Date": "01/30/2023", + "Description": "FAMILY CH", + "Debit": "50.00", + "Credit": "", + "Category": "Bills" + }, + { + "Status": "Cleared", + "Date": "01/30/2023", + "Description": "PUD", + "Debit": "89.05", + "Credit": "", + "Category": "Bills" + }, + { + "Status": "Cleared", + "Date": "01/24/2023", + "Description": "TARGET.COM", + "Debit": "5.00", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/24/2023", + "Description": "TARGET.COM", + "Debit": "25.57", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/24/2023", + "Description": "Amazon.com", + "Debit": "5.62", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/24/2023", + "Description": "TARGET", + "Debit": "8.43", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/22/2023", + "Description": "GOOGLE YouTubePremium", + "Debit": "16.57", + "Credit": "", + "Category": "Entertainment" + }, + { + "Status": "Cleared", + "Date": "01/20/2023", + "Description": "PEROT MUSEUM CAFE QPS DALLAS TX", + "Debit": "25.82", + "Credit": "", + "Category": "Restaurants" + }, + { + "Status": "Cleared", + "Date": "01/20/2023", + "Description": "THE HOME DEPOT", + "Debit": "19.14", + "Credit": "", + "Category": "Groceries" + }, + { + "Status": "Cleared", + "Date": "01/20/2023", + "Description": "Amazon.com", + "Debit": "13.12", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/20/2023", + "Description": "AMZN Mktp", + "Debit": "6.55", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/19/2023", + "Description": "STARBUCKS STORE", + "Debit": "10.28", + "Credit": "", + "Category": "Restaurants" + }, + { + "Status": "Cleared", + "Date": "01/19/2023", + "Description": "TARGET.COM", + "Debit": "52.74", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/19/2023", + "Description": "ZIPLY FIBER", + "Debit": "50.94", + "Credit": "", + "Category": "Bills" + }, + { + "Status": "Cleared", + "Date": "01/18/2023", + "Description": "7-ELEVEN 39782 DFW AIRPORT TX", + "Debit": "1.72", + "Credit": "", + "Category": "Travel" + }, + { + "Status": "Cleared", + "Date": "01/18/2023", + "Description": "BUC-EE'S #36 TERRELL TX", + "Debit": "21.53", + "Credit": "", + "Category": "Travel" + }, + { + "Status": "Cleared", + "Date": "01/17/2023", + "Description": "DALLAS ZOO MANAGEMENT DALLAS TX", + "Debit": "40.00", + "Credit": "", + "Category": "Entertainment" + } +] diff --git a/demo/frontend/.gitignore b/demo/frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/demo/frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/demo/frontend/index.html b/demo/frontend/index.html new file mode 100644 index 0000000..79c4701 --- /dev/null +++ b/demo/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + + +
+ + + diff --git a/demo/frontend/package-lock.json b/demo/frontend/package-lock.json new file mode 100644 index 0000000..51b1725 --- /dev/null +++ b/demo/frontend/package-lock.json @@ -0,0 +1,3459 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.0.27", + "@types/react-dom": "^18.0.10", + "@vitejs/plugin-react": "^3.1.0", + "autoprefixer": "^10.4.13", + "postcss": "^8.4.21", + "tailwindcss": "^3.2.6", + "vite": "^4.1.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", + "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", + "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", + "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.13", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.20.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", + "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", + "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", + "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.13", + "@babel/types": "^7.20.7", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", + "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", + "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", + "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", + "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", + "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", + "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", + "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", + "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", + "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", + "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", + "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", + "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", + "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", + "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", + "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", + "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", + "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", + "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", + "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "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/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.10", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", + "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz", + "integrity": "sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==", + "dev": true, + "dependencies": { + "@babel/core": "^7.20.12", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.19.6", + "magic-string": "^0.27.0", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.1.0-beta.0" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001451", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz", + "integrity": "sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "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/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "dev": true + }, + "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/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.295", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz", + "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", + "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.16.17", + "@esbuild/android-arm64": "0.16.17", + "@esbuild/android-x64": "0.16.17", + "@esbuild/darwin-arm64": "0.16.17", + "@esbuild/darwin-x64": "0.16.17", + "@esbuild/freebsd-arm64": "0.16.17", + "@esbuild/freebsd-x64": "0.16.17", + "@esbuild/linux-arm": "0.16.17", + "@esbuild/linux-arm64": "0.16.17", + "@esbuild/linux-ia32": "0.16.17", + "@esbuild/linux-loong64": "0.16.17", + "@esbuild/linux-mips64el": "0.16.17", + "@esbuild/linux-ppc64": "0.16.17", + "@esbuild/linux-riscv64": "0.16.17", + "@esbuild/linux-s390x": "0.16.17", + "@esbuild/linux-x64": "0.16.17", + "@esbuild/netbsd-x64": "0.16.17", + "@esbuild/openbsd-x64": "0.16.17", + "@esbuild/sunos-x64": "0.16.17", + "@esbuild/win32-arm64": "0.16.17", + "@esbuild/win32-ia32": "0.16.17", + "@esbuild/win32-x64": "0.16.17" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-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/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "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/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/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "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/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "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-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-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/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/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/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/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "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/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/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/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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-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-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/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.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/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/rollup": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.15.0.tgz", + "integrity": "sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "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/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.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/tailwindcss": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.6.tgz", + "integrity": "sha512-BfgQWZrtqowOQMC2bwaSNe7xcIjdDEgixWGYOd6AL0CbKHJlvhfdbINeAW76l1sO+1ov/MJ93ODJ9yluRituIw==", + "dev": true, + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.0.9", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/tailwindcss/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/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.1.tgz", + "integrity": "sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==", + "dev": true, + "dependencies": { + "esbuild": "^0.16.14", + "postcss": "^8.4.21", + "resolve": "^1.22.1", + "rollup": "^3.10.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", + "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", + "dev": true + }, + "@babel/core": { + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", + "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", + "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "dev": true, + "requires": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.13", + "@babel/types": "^7.20.7" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.20.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", + "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", + "dev": true + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", + "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + }, + "@babel/traverse": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", + "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.13", + "@babel/types": "^7.20.7", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@esbuild/android-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", + "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", + "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", + "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", + "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", + "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", + "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", + "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", + "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", + "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", + "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", + "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", + "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", + "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", + "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", + "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", + "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", + "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", + "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", + "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "dev": true, + "optional": true + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@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, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@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 + }, + "@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, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "@types/react": { + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.0.10", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", + "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@vitejs/plugin-react": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz", + "integrity": "sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==", + "dev": true, + "requires": { + "@babel/core": "^7.20.12", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.19.6", + "magic-string": "^0.27.0", + "react-refresh": "^0.14.0" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "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, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + } + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001451", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz", + "integrity": "sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==", + "dev": true + }, + "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, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "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, + "requires": { + "color-name": "1.1.3" + } + }, + "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 + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "dev": true + }, + "detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.295", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz", + "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==", + "dev": true + }, + "esbuild": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", + "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.16.17", + "@esbuild/android-arm64": "0.16.17", + "@esbuild/android-x64": "0.16.17", + "@esbuild/darwin-arm64": "0.16.17", + "@esbuild/darwin-x64": "0.16.17", + "@esbuild/freebsd-arm64": "0.16.17", + "@esbuild/freebsd-x64": "0.16.17", + "@esbuild/linux-arm": "0.16.17", + "@esbuild/linux-arm64": "0.16.17", + "@esbuild/linux-ia32": "0.16.17", + "@esbuild/linux-loong64": "0.16.17", + "@esbuild/linux-mips64el": "0.16.17", + "@esbuild/linux-ppc64": "0.16.17", + "@esbuild/linux-riscv64": "0.16.17", + "@esbuild/linux-s390x": "0.16.17", + "@esbuild/linux-x64": "0.16.17", + "@esbuild/netbsd-x64": "0.16.17", + "@esbuild/openbsd-x64": "0.16.17", + "@esbuild/sunos-x64": "0.16.17", + "@esbuild/win32-arm64": "0.16.17", + "@esbuild/win32-ia32": "0.16.17", + "@esbuild/win32-x64": "0.16.17" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "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 + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "is-glob": "^4.0.3" + } + }, + "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 + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "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 + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "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, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true + }, + "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==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "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, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "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 + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true + }, + "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 + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, + "postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "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 + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "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==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "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 + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rollup": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.15.0.tgz", + "integrity": "sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "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, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "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, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tailwindcss": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.6.tgz", + "integrity": "sha512-BfgQWZrtqowOQMC2bwaSNe7xcIjdDEgixWGYOd6AL0CbKHJlvhfdbINeAW76l1sO+1ov/MJ93ODJ9yluRituIw==", + "dev": true, + "requires": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.0.9", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "vite": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.1.tgz", + "integrity": "sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==", + "dev": true, + "requires": { + "esbuild": "^0.16.14", + "fsevents": "~2.3.2", + "postcss": "^8.4.21", + "resolve": "^1.22.1", + "rollup": "^3.10.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } + } +} diff --git a/demo/frontend/package.json b/demo/frontend/package.json new file mode 100644 index 0000000..fe28a98 --- /dev/null +++ b/demo/frontend/package.json @@ -0,0 +1,24 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.0.27", + "@types/react-dom": "^18.0.10", + "@vitejs/plugin-react": "^3.1.0", + "autoprefixer": "^10.4.13", + "postcss": "^8.4.21", + "tailwindcss": "^3.2.6", + "vite": "^4.1.0" + } +} diff --git a/demo/frontend/postcss.config.cjs b/demo/frontend/postcss.config.cjs new file mode 100644 index 0000000..88a3558 --- /dev/null +++ b/demo/frontend/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, + } \ No newline at end of file diff --git a/demo/frontend/src/App.jsx b/demo/frontend/src/App.jsx new file mode 100644 index 0000000..e94bafb --- /dev/null +++ b/demo/frontend/src/App.jsx @@ -0,0 +1,40 @@ +import {useState} from 'react'; +import {TransactionController} from './TransactionController'; + +function App() { + + const [file, setFile] = useState(null); + const [transactions, setTransactions] = useState([]); + + function handleUpload() { + const formData = new FormData(); + formData.append('file', file); + fetch('/api/upload/', { + method: 'POST', + body: formData, + }) + .then((response) => response.json()) + .then((data) => { + setTransactions(data); + }) + } + + return ( +
+
+

Welcome to the Budget App

+

This is a simple app that will help you categorize your expenses.

+

Upload a CSV file and we will do the rest.

+
+ setFile(e.target.files[0])} /> + +
+
+ +
+ ) +} + +export default App \ No newline at end of file diff --git a/demo/frontend/src/TransactionController.jsx b/demo/frontend/src/TransactionController.jsx new file mode 100644 index 0000000..8a70599 --- /dev/null +++ b/demo/frontend/src/TransactionController.jsx @@ -0,0 +1,40 @@ +import React from 'react'; +import {TransactionsList} from './TransactionsList'; + +function TransactionController({transactions}) { + if(transactions.length === 0) { + return ( +
+

Transactions

+

No transactions to display.

+
+ ) + } + + for(let i = 0; i < transactions.length; i++) { + transactions[i].id = i; + } + + // Sort transactions by category and render a transactions list for each category + let sortedTransactions = {}; + + transactions.map((transaction) => { + if(sortedTransactions[transaction.Category] === undefined) { + sortedTransactions[transaction.Category] = []; + sortedTransactions[transaction.Category].push(transaction); + } else { + sortedTransactions[transaction.Category].push(transaction); + } + }) + + return ( +
+

Transactions

+ {Object.keys(sortedTransactions).map((category) => ( + + ))} +
+ ) +} + +export { TransactionController } diff --git a/demo/frontend/src/TransactionsList.jsx b/demo/frontend/src/TransactionsList.jsx new file mode 100644 index 0000000..1c9406a --- /dev/null +++ b/demo/frontend/src/TransactionsList.jsx @@ -0,0 +1,31 @@ +import React from 'react'; + +function TransactionsList({category, transactions}) { + return ( +
+

{category}

+ + + + + + + + + + + {transactions.map((transaction) => ( + + + + + + + ))} + +
DateDescriptionCreditDebit
{transaction.Date}{transaction.Description}{transaction.Credit}{transaction.Debit}
+
+ ) +} + +export { TransactionsList } diff --git a/demo/frontend/src/index.css b/demo/frontend/src/index.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/demo/frontend/src/index.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/demo/frontend/src/main.jsx b/demo/frontend/src/main.jsx new file mode 100644 index 0000000..b8a4fad --- /dev/null +++ b/demo/frontend/src/main.jsx @@ -0,0 +1,10 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App' +import './index.css' + +ReactDOM.createRoot(document.getElementById('root')).render( + + + , +) \ No newline at end of file diff --git a/demo/frontend/tailwind.config.cjs b/demo/frontend/tailwind.config.cjs new file mode 100644 index 0000000..9e5ddd8 --- /dev/null +++ b/demo/frontend/tailwind.config.cjs @@ -0,0 +1,12 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + purge: ['./src/**/*.{js,jsx,ts,tsx}', './public/index.html'], + darkMode: false, // or 'media' or 'class' + theme: { + extend: {}, + }, + variants: { + extend: {}, + }, + plugins: [], + } \ No newline at end of file diff --git a/demo/frontend/vite.config.js b/demo/frontend/vite.config.js new file mode 100644 index 0000000..2853d42 --- /dev/null +++ b/demo/frontend/vite.config.js @@ -0,0 +1,16 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + server:{ + proxy:{ + "/api" : { + target: 'http://localhost:3000/api/', + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api/, ''), + } + } + } +}) \ No newline at end of file diff --git a/demo/openai.js b/demo/openai.js new file mode 100644 index 0000000..c5b93e2 --- /dev/null +++ b/demo/openai.js @@ -0,0 +1,40 @@ +import { Configuration, OpenAIApi } from "openai"; + +const configuration = new Configuration({ + organization: process.env.OPENAI_ORG_ID, + apiKey: process.env.OPENAI_API_KEY, +}); +const openai = new OpenAIApi(configuration); + +export default async function (transactions, categories) { + if (!configuration.organization) { + return "OpenAI Organization Not Set"; + } + if (!configuration.apiKey) { + return "OpenAI API key not configured"; + } + + try { + const completion = await openai.createCompletion({ + model: process.env.OPENAI_MODEL, + prompt: generatePrompt(transactions, categories), + temperature: 0.0, + max_tokens: 2000, + }); + return completion.data.choices[0].text; + } catch (error) { + // Consider adjusting the error handling logic for your use case + if (error.response) { + console.error(error.response.status, error.response.data); + } else { + console.error(`Error with OpenAI API request: ${error.message}`); + } + return "Failed to sort transactions" + } +} + +function generatePrompt(transactions, categories) { + return `Add one of the following categories to each transaction: ${categories} + +${transactions}`; +} \ No newline at end of file diff --git a/demo/package-lock.json b/demo/package-lock.json new file mode 100644 index 0000000..dda39ad --- /dev/null +++ b/demo/package-lock.json @@ -0,0 +1,2765 @@ +{ + "name": "demo", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "demo", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "express": "^4.18.2", + "morgan": "^1.10.0", + "multer": "^1.4.5-lts.1", + "neat-csv": "^7.0.0", + "openai": "^3.1.0" + }, + "devDependencies": { + "concurrently": "^7.6.0", + "nodemon": "^2.0.20" + } + }, + "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==", + "dev": 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/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": "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/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "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/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", + "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "dependencies": { + "follow-redirects": "^1.14.8" + } + }, + "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/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/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/chalk/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/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concurrently": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", + "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.29.1", + "lodash": "^4.17.21", + "rxjs": "^7.0.0", + "shell-quote": "^1.7.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^17.3.1" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "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.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/csv-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/csv-parser/-/csv-parser-3.0.0.tgz", + "integrity": "sha512-s6OYSXAK3IdKqYO33y09jhypG/bSDHPuyCme/IdEHfWpLf/jKcpitVFyOC6UemgGk8v7Q5u2XE0vvwmanxhGlQ==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "csv-parser": "bin/csv-parser" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", + "dev": true, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "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/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "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/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==", + "dev": 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/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/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/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.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/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "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/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "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/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/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/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/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "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/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-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/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/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "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/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.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/multer": { + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/neat-csv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/neat-csv/-/neat-csv-7.0.0.tgz", + "integrity": "sha512-ZmiKZNkdqb6hrBU3lDHm52vWXs6CuFPfw6ZoJZNnY7IIpfA1fxM0UPPi+iQpqQo82qcLbsZPwLkQ1cdrMDtwwA==", + "dependencies": { + "csv-parser": "^3.0.0", + "get-stream": "^6.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/nodemon": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", + "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/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/nodemon/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==", + "dev": true + }, + "node_modules/nodemon/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/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "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/openai": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-3.1.0.tgz", + "integrity": "sha512-v5kKFH5o+8ld+t0arudj833Mgm3GcgBnbyN9946bj6u7bvel4Yg6YFz2A4HLIYDzmMjIo0s6vSG9x73kOwvdCg==", + "dependencies": { + "axios": "^0.26.0", + "form-data": "^4.0.0" + } + }, + "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-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/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "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/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "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.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/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/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "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/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/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shell-quote": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", + "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "dev": true + }, + "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/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/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/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, + "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/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "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/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/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + } + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "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==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "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 + }, + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", + "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "requires": { + "follow-redirects": "^1.14.8" + } + }, + "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 + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "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==" + } + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "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, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "requires": { + "streamsearch": "^1.1.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "concurrently": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", + "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "date-fns": "^2.29.1", + "lodash": "^4.17.21", + "rxjs": "^7.0.0", + "shell-quote": "^1.7.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^17.3.1" + } + }, + "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==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "csv-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/csv-parser/-/csv-parser-3.0.0.tgz", + "integrity": "sha512-s6OYSXAK3IdKqYO33y09jhypG/bSDHPuyCme/IdEHfWpLf/jKcpitVFyOC6UemgGk8v7Q5u2XE0vvwmanxhGlQ==", + "requires": { + "minimist": "^1.2.0" + } + }, + "date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "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==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "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==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "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" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "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 + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "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==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "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==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "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, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "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==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "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==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "dependencies": { + "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==", + "requires": { + "ee-first": "1.1.1" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "multer": { + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, + "neat-csv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/neat-csv/-/neat-csv-7.0.0.tgz", + "integrity": "sha512-ZmiKZNkdqb6hrBU3lDHm52vWXs6CuFPfw6ZoJZNnY7IIpfA1fxM0UPPi+iQpqQo82qcLbsZPwLkQ1cdrMDtwwA==", + "requires": { + "csv-parser": "^3.0.0", + "get-stream": "^6.0.1" + } + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "nodemon": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", + "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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 + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "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, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "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==" + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + }, + "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==", + "requires": { + "ee-first": "1.1.1" + } + }, + "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==" + }, + "openai": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-3.1.0.tgz", + "integrity": "sha512-v5kKFH5o+8ld+t0arudj833Mgm3GcgBnbyN9946bj6u7bvel4Yg6YFz2A4HLIYDzmMjIo0s6vSG9x73kOwvdCg==", + "requires": { + "axios": "^0.26.0", + "form-data": "^4.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "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==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "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==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "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==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "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==" + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "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" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "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==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "shell-quote": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", + "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "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==" + } + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "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, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "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==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } +} diff --git a/demo/package.json b/demo/package.json new file mode 100644 index 0000000..b99ac1f --- /dev/null +++ b/demo/package.json @@ -0,0 +1,24 @@ +{ + "name": "demo", + "version": "1.0.0", + "description": "", + "main": "index.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "concurrently \"nodemon --env-file=.env app.js\" \"cd frontend && npm run dev\"" + }, + "author": "", + "license": "ISC", + "dependencies": { + "express": "^4.18.2", + "morgan": "^1.10.0", + "multer": "^1.4.5-lts.1", + "neat-csv": "^7.0.0", + "openai": "^3.1.0" + }, + "devDependencies": { + "concurrently": "^7.6.0", + "nodemon": "^2.0.20" + } +} diff --git a/demo/sortTransactions.js b/demo/sortTransactions.js new file mode 100644 index 0000000..3274607 --- /dev/null +++ b/demo/sortTransactions.js @@ -0,0 +1,28 @@ +import returnCategoriesCSV from './openai.js'; + +export default async function (transactions, categories) { + + // Split the transactions into array elements and pull out headers + transactions = transactions.split('\n'); + const headers = transactions.shift(); + + // Group the transactions into strings containing chunks of 10 transactions each + const chunks = []; + for (let i = 0; i < transactions.length; i += 10) { + chunks.push(transactions.slice(i, i + 10).join('\n')); + } + + let categorizedTransactions = [] + for(let i = 0; i < chunks.length; i++) { + const returnedCSVText = await returnCategoriesCSV(headers+',Category\n'+chunks[i], categories); + const returnedTransactions = returnedCSVText.split('\n').slice(3); // Remove blank lines and headers return array + categorizedTransactions = categorizedTransactions.concat(returnedTransactions); + } + + // Add headers back to the transactions + categorizedTransactions.unshift(headers+',Category'); + + const finalCSV = categorizedTransactions.join('\n').toString() + + return finalCSV +} diff --git a/homepage.png b/homepage.png new file mode 100644 index 0000000000000000000000000000000000000000..238591ec0a97772d8c8cc7cfb62e2bc4691c515c GIT binary patch literal 47622 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 path.replace(/^\/api/, ''), + } + } + } +}) +``` +6. Add the following script to the root package.json file. +```json +"dev": "concurrently \"nodemon app.js\" \"cd frontend && npm run dev\"" +``` +7. Make an `app.js` in the root directory and make a boilerplate express app that will work with our frontend. +```js +const path = require('path') +const express = require('express') +const logger = require('morgan') +const app = express() +const port = 3000 + +app.use(express.json()) +app.use(logger('dev')) + +app.get('/api/hello', (req, res) => { + res.send( + `

Hello World

` + ) +}) + +app.use('/', express.static(path.join(__dirname, 'public'))) + +app.listen(port, () => { + console.log(`Example app listening on port ${port}`) +}) +``` +8. You can now start the backend and frontend server with the same command `npm run dev` from the root of your project. + +9. Open the url that Vite reports (should be something along the lines of `http://127.0.0.1:`) and the default Vite app should render. Add `/api/hello` to the url and you should see the header from our express server route. This means we have successfully bootstrapped our project. + diff --git a/instructions/README2.md b/instructions/README2.md new file mode 100644 index 0000000..c6bb280 --- /dev/null +++ b/instructions/README2.md @@ -0,0 +1,121 @@ +# Building Out The Frontend +## Clearing the Vite Boilerplate +1. Delete the `src` folder and the `public` folder. +2. Create a new `src` folder and a new `public` folder. +3. Create a new `main.jsx` file in the `src` folder and add the following boilerplate code. +```jsx +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App' + +ReactDOM.createRoot(document.getElementById('root')).render( + + + , +) +``` +4. Create a new `App.jsx` file in the `src` folder and add the following boilerplate code. +```jsx +function App() { + + return ( +
Hello
+ ) +} + +export default App +``` + +## Integrating TailwindCSS +1. Install TailwindCSS and PostCSS in your `frontend` directory. +```bash +npm install -D tailwindcss postcss autoprefixer +``` +2. Create a new `postcss.config.cjs` file in the root of the project and add the following code. +```js +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} +``` +3. Create a new `tailwind.config.cjs` file in the root of the project and add the following code. +```js +module.exports = { + purge: ['./src/**/*.{js,jsx,ts,tsx}', './public/index.html'], + darkMode: false, // or 'media' or 'class' + theme: { + extend: {}, + }, + variants: { + extend: {}, + }, + plugins: [], +} +``` +4. Create a new `index.css` file in the `src` folder and add the following code. +```css +@tailwind base; +@tailwind components; +@tailwind utilities; +``` +5. Update the `App.jsx` file to be as follows. +```jsx +function App() { + + return ( +
+
+

Welcome to the Budget App

+

This is a simple app that will help you categorize your expenses.

+

Upload a CSV file and we will do the rest.

+
+ +
+
+
+ ) +} +``` +6. You should now see a basic app with a button that says "Upload CSV". We can now start building out the functionality of the app and any styling can continu to be done with TailwindCSS. + +## Adding File Upload Functionality +1. Import useState into `App.jsx` and add a state variable called `file` that will hold the file that is uploaded. +```jsx +import { useState } from 'react' +``` +2. Add the following code to the `App` function. +```jsx +const [file, setFile] = useState(null) +``` +3. Add a file selector input just above the `UploadCSV` button. +```jsx + setFile(e.target.files[0])} /> +``` +4. Add an onClick attribute to the `UploadCSV` button and add a callback function to handle the upload. +5. Next, define the callback function that will handle the upload in between your useState and return statements. For now, we will just console log the file name. +```jsx +console.log(file.name) +``` +4. You should now be able to select a file and see the file name in the console. We can now start building out the backend to handle the file upload to the server. +5. Next we will make a form to handle the request to the backend server. Replace the console.log statement with the following code. +```jsx +const formData = new FormData() +formData.append('file', file) +``` +6. Next, we will make a POST request to the backend server. Make the following fetch request. +```jsx +fetch('/api/upload', { + method: 'POST', + body: formData, +}) +``` +7. fetch is a network request that returns a promise. We can use the promise to handle the response from the server. Add the following code to handle the response. +```jsx +.then((res) => res.json()) +.then((data) => console.log(data)) +``` +8. You should now be able to upload a file and see the response in the console. We can now start building out the backend to handle the file upload to the server. \ No newline at end of file diff --git a/instructions/README3.md b/instructions/README3.md new file mode 100644 index 0000000..8837e16 --- /dev/null +++ b/instructions/README3.md @@ -0,0 +1,84 @@ +# Building Out The Backend +## Handling the File Upload +1. In the `app.js` file, add multer as a dependency and configure it to store files in a memory buffer. +```js +const multer = require('multer') + +const storage = multer.memoryStorage() +const upload = multer({ storage: storage }) +``` +2. Add a new route to the app that will handle the file upload. (This should match the path from the frontend) +```js +app.post('/api/upload', (req, res) => { + console.log(req.file) + res.send("File Uploaded") +}) +``` +3. The above route will log the file object to the terminal. We can use this to make sure the file is being uploaded correctly. We then close the connection with the client by sending a response of "File Uploaded". The challenge is however that `req.file` is undefined. This is because we haven't added the `upload.single('file')` middleware to the route. We will do this in the next step. +4. Add the `upload.single('file')` middleware to the route. This will parse the file from the request body and store it in `req.file` for us anytime a file is included in a request to that route. This is why middleware is so great, it allows for simplistic extensibility. +```js +app.post('/api/upload', upload.single('file'), (req, res) => { ...}) +``` +4. You can now test the route by selecting a file in the frontend and clicking the "Upload CSV" button. You should see the file object logged in the terminal of your server. + +## Making Sense of the CSV File +1. When we upload a file, we get a file object back. This object contains a lot of information about the file, including the file name, the file type, and the file size. It also contains a buffer that contains the actual contents of the file. We can use the buffer to read the contents of the file. +2. Read the buffer and convert it to a string. We can do this by using the `toString()` method on the buffer. The 'utf8' argument tells the method to convert the buffer to a string using the utf8 encoding. (as opposed to ascii, base64, etc.) +```js +const csvString = req.file.buffer.toString('utf8') +``` +3. We can now log csvString to the terminal to see the contents of the file. You should see a string that contains the contents of the file (all our transactions represented as a string). + +## Adding a Little Error Handling +1. You may end up accidentally not selecting a file when you click the "Upload CSV" button. This will cause the server to crash because `req.file` will be undefined. We can add a little error handling to prevent this from happening. +2. Add an if statement to the route that checks if `req.file` is undefined. If it is, send a message to the client. +```js +if (!req.file) { + res.status(400).send("No file uploaded") +} +``` + +## Setting up Our Sorting Magic +1. Because we will have a lot of logic for sorting the transactions, we will create a new file to handle this. Create a new file called `sortTransactions.js` in the root directory next to app.js +2. In the `sortTransactions.js` file, export a default function that takes a string and an array as an argument. This string will be the contents of the csv file and the array will be the list of categories. +```js +export default function (transactions, categories) { + // logic to sort transactions +} +``` +3. For now just return a string that says "Hello World". We will add the logic later. +4. Import the `sortTransactions` function into the `app.js` file. +```js +import sortTransactions from './sortTransactions.js' +``` +6. You may notice this import looks a little different than the ones we have been using. This is because we are using ESM imports. This is the new standard for importing modules in JavaScript. You can read more about it [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import). It is also what we have been using in the frontend but it's a recent addition to Node which used to only support CommonJS imports. You can read more about that [here](https://nodejs.org/api/modules.html#modules_modules_commonjs_modules). +7. Refactor your imports to use ESM imports. +```js +import express from 'express' +import multer from 'multer' +import sortTransactions from './sortTransactions.js' +``` +8. Call the `sortTransactions` function in the route and pass in the csvString and the categories array. Go ahead and hardcode the categories array for now. +```js +const sortedTransactions = sortTransactions(csvString, ['Bills', 'Groceries', 'Restaurants', 'Entertainment', 'Shopping', 'Travel']) +``` +9. Return the sortedTransactions to the client. +```js +res.send(sortedTransactions) +``` + + +// Not shared below this line +Notes: +- Migrate to app.js to use ESM Imports +- Add "type": "module" to package.json +- Use neat-csv to parse csv to json onject +- Need to make a [__dirname](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#what-do-i-use-instead-of-__dirname-and-__filename) variable to get the path to the static folder + +Add to frontend/src/App.jsx to see the return response. +```js +.then((response) => response.json()) + .then((data) => { + console.log(data); + }) +``` \ No newline at end of file diff --git a/instructions/README4.md b/instructions/README4.md new file mode 100644 index 0000000..5aa33f0 --- /dev/null +++ b/instructions/README4.md @@ -0,0 +1,91 @@ +# Challenge Starter +This week we will be integrating with OpenAI. Some code will be given to you because the focus of today will be around researching how to authenticate to OpenAI's API and how the API responds based on a given input. We want the response to be as deterministic as possible and you will need to write a prompt that can satify this requirement. + +## OpenAI +1. Make a new file called openai.js in the root directory with the following contents: +```js +import { Configuration, OpenAIApi } from "openai"; + +const configuration = new Configuration({ + organization: "<>", + apiKey: "<>", +}); +const openai = new OpenAIApi(configuration); + +export default async function (transactions, categories) { + if (!configuration.apiKey) { + return "OpenAI API key not configured"; + } + + try { + const completion = await openai.createCompletion({ + model: "text-davinci-003", + prompt: generatePrompt(transactions, categories), + temperature: 0.0, + max_tokens: 2000, + }); + return completion.data.choices[0].text; + } catch (error) { + // Consider adjusting the error handling logic for your use case + if (error.response) { + console.error(error.response.status, error.response.data); + } else { + console.error(`Error with OpenAI API request: ${error.message}`); + } + return "Failed to sort transactions" + } +} + +function generatePrompt(transactions, categories) { + return ``; +} +``` +2. Spend some time understanding how the code works and refactor it to meet your purposes. Again, you will need a prompt that is deterministic and can be used to sort transactions. Because the API can be tough to test, OpenAI has given us a [playground](https://platform.openai.com/playground) to experiment within. +3. Inside your sortTransactions.js file, import the openai.js file and call the function with the transactions and categories. You will need to await the response and then return it. + +## Route Endpoint +1. In your app.js file, we will import `neat-csv` to parse the csv text we receive from `sortTransactions` to transform it into a json object and return that to the client. Your complete endpoint should look something like this: +```js +app.post('/api/upload/', upload.single('file'), async (req, res) => { + if(!req.file) { + res.send('No file uploaded.') + return + } + + const csvString = req.file.buffer.toString('utf8') + + let results = await sortTransactions(csvString, + ['Bills', 'Groceries', 'Restaurants', 'Entertainment', 'Shopping', 'Travel'] + ) + + let transactions = await neatCsv(results) + + res.send(transactions) +}) +``` + +## sortTransactions.js Starting Point +```js +import returnCategoriesCSV from './openai.js'; + +export default async function (transactions, categories) { + returnedCSVText = await returnCategoriesCSV(transactions, categories); + + return returnedCSVText +} +``` + +## Getting it working through the entire stack +You may be asking yourself what is the point of `sortTransactions.js`. You are handling the request and response in `app.js` and you are handling the sorting in `openai.js`. But in between you have the `sortTransactions.js` file. This is where you will be doing the work of parsing the inputs and outputs from the client and openAI in a structured manner taking into account the considerations below. Pseudo code and remembering your advanced array methods like .split() and .join() will be *incredibly* helpful here. + +There is no "right solution" to this challenge. The goal is to get you thinking about how to structure your code and how to think about the problem. I've solved it in one manner but there are many ways to do it. Be prepared to spend a lot of your effort on thinking about the conceptual steps you will need to take. + +### Considerations +- What is async/await and how does it work? +- How many transactions can you sort at once? +- How many requests to the API can you make every minute? + +### Warning +- The API will be slow, it has to do a lot of work as a Large Language Model. + + diff --git a/instructions/README5.md b/instructions/README5.md new file mode 100644 index 0000000..232f5dc --- /dev/null +++ b/instructions/README5.md @@ -0,0 +1,301 @@ +# Frontend Rendering +The goal is to now render the transactions in the browser. There are many ways to render this to the user, the first is to list out all the transactions at once the other is to segment them by category. The first is easier to implement but the second is more useful. + +Below are some code snippets to help you get started. You'll have to compose them yourself and add additional logic. + +## A Generic Component +```jsx +import React from 'react'; + +function ComponentName({pro1, prop2}) { + return ( +

ComponentName

+ ) +} + +export { ComponentName } +``` + +## Using a Generic Component +```jsx +import React from 'react'; +import {TransactionsList} from './TransactionsList'; + +function HigherOrderComponent() { + return ( +
+ + +
+ ); +} +``` + +## Rendering a Card +```jsx +
+

Transactions

+

No transactions to display.

+
+``` + +## Rendering a Table +```jsx +
+

Title

+ + + + + + + + + {transactions.map((array) => ( + + + + + ))} + +
Heading 1Heading 2
{datavalue1}{datavalue2}
+
+``` + + + +# Helpful Tips +## Capturing State from the Backend +```jsx +const [transactions, setTransactions] = useState([]); + +function handleUpload() { + const formData = new FormData(); + formData.append('file', file); + fetch('/api/upload/', { + method: 'POST', + body: formData, + }) + .then((response) => response.json()) + .then((data) => { + setTransactions(data); + }) + } +``` + +## Faster Backend Testing +Instead of using OpenAI to process transactions for testing, just return the following json in app.js. This will allow you to test your frontend rendering without having to wait for the OpenAI API to respond and not incur extra charges for API use. + +```js +var tempTransactions = [ + { + "Status": "Cleared", + "Date": "02/03/2023", + "Description": "CRUNCHYROLL *MEMBERSHI 415-503-9235 CA", + "Debit": "11.03", + "Credit": "", + "Category": "Entertainment" + }, + { + "Status": "Cleared", + "Date": "02/02/2023", + "Description": "CITY OF MARYSVILLE, WA MARYSVILLE WA", + "Debit": "240.50", + "Credit": "", + "Category": "Bills" + }, + { + "Status": "Cleared", + "Date": "02/01/2023", + "Description": "GOOGLE CLOUD XW9DZ4 650-253-0000 CA", + "Debit": "0.03", + "Credit": "", + "Category": "Bills" + }, + { + "Status": "Cleared", + "Date": "01/30/2023", + "Description": "STATE STREET FAMILY CH MARYSVILLE WA", + "Debit": "50.00", + "Credit": "", + "Category": "Bills" + }, + { + "Status": "Cleared", + "Date": "01/30/2023", + "Description": "SNOHOMISH COUNTY PUD 425-783-1000 WA", + "Debit": "89.05", + "Credit": "", + "Category": "Bills" + }, + { + "Status": "Cleared", + "Date": "01/28/2023", + "Description": "HAGGEN 3604 MARYSVILLE WA", + "Debit": "9.77", + "Credit": "", + "Category": "Groceries" + }, + { + "Status": "Cleared", + "Date": "01/28/2023", + "Description": "SP HIYA HEALTH BOCA RATON FL", + "Debit": "32.82", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/24/2023", + "Description": "TARGET.COM * 800-591-3869 MN", + "Debit": "5.00", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/24/2023", + "Description": "TARGET.COM * 800-591-3869 MN", + "Debit": "25.57", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/24/2023", + "Description": "PINEWOOD FAMILY DENTAL MARYSVILLE WA", + "Debit": "485.00", + "Credit": "", + "Category": "Bills" + }, + { + "Status": "Cleared", + "Date": "01/24/2023", + "Description": "Amazon.com2I8ZG7YJ3 Amzn.com/bill WA null XXXXXXXXXXXX9998", + "Debit": "5.62", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/24/2023", + "Description": "TARGET 00021923 MARYSVILLE WA null XXXXXXXXXXXX8138", + "Debit": "8.43", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/24/2023", + "Description": "ONLINE PAYMENT, THANK YOU", + "Debit": "", + "Credit": "-4182.23", + "Category": "", + "_6": "" + }, + { + "Status": "Cleared", + "Date": "01/23/2023", + "Description": "STATE STREET FAMILY CH MARYSVILLE WA", + "Debit": "50.00", + "Credit": "", + "Category": "Bills" + }, + { + "Status": "Cleared", + "Date": "01/22/2023", + "Description": "GOOGLE YouTubePremium 650-253-0000 CA", + "Debit": "16.57", + "Credit": "", + "Category": "Entertainment" + }, + { + "Status": "Cleared", + "Date": "01/20/2023", + "Description": "PEROT MUSEUM CAFE QPS DALLAS TX", + "Debit": "25.82", + "Credit": "", + "Category": "Restaurants" + }, + { + "Status": "Cleared", + "Date": "01/20/2023", + "Description": "THE HOME DEPOT #4726 MARYSVILLE WA", + "Debit": "19.14", + "Credit": "", + "Category": "Groceries" + }, + { + "Status": "Cleared", + "Date": "01/20/2023", + "Description": "Amazon.com4L04G50H3 Amzn.com/bill WA null XXXXXXXXXXXX9998", + "Debit": "13.12", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/20/2023", + "Description": "AMZN Mktp US*622L107Y3 Amzn.com/bill WA null XXXXXXXXXXXX9998", + "Debit": "6.55", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/19/2023", + "Description": "STARBUCKS STORE 03321 MARYSVILLE WA", + "Debit": "10.28", + "Credit": "", + "Category": "Restaurants" + }, + { + "Status": "Cleared", + "Date": "01/19/2023", + "Description": "STATE STREET FAMILY CH MARYSVILLE WA", + "Debit": "50.00", + "Credit": "", + "Category": "Bills" + }, + { + "Status": "Cleared", + "Date": "01/19/2023", + "Description": "TARGET.COM * 800-591-3869 MN", + "Debit": "52.74", + "Credit": "", + "Category": "Shopping" + }, + { + "Status": "Cleared", + "Date": "01/19/2023", + "Description": "ZIPLY FIBER * INTERNET 866-699-4759 WA", + "Debit": "50.94", + "Credit": "", + "Category": "Bills" + }, + { + "Status": "Cleared", + "Date": "01/18/2023", + "Description": "7-ELEVEN 39782 DFW AIRPORT TX", + "Debit": "1.72", + "Credit": "", + "Category": "Travel" + }, + { + "Status": "Cleared", + "Date": "01/18/2023", + "Description": "BUC-EE'S #36 TERRELL TX", + "Debit": "21.53", + "Credit": "", + "Category": "Travel" + }, + { + "Status": "Cleared", + "Date": "01/17/2023", + "Description": "DALLAS ZOO MANAGEMENT DALLAS TX", + "Debit": "40.00", + "Credit": "", + "Category": "Entertainment" + } +] +``` \ No newline at end of file diff --git a/sortedtransactions.png b/sortedtransactions.png new file mode 100644 index 0000000000000000000000000000000000000000..5721d00c88eb15110614be8feaf55f1b6aa59ab0 GIT binary patch literal 111090 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 V9a*wW2PoiATvS@5SV-IRzW~XUrTqW^ literal 0 HcmV?d00001