├── .gitignore ├── .husky └── pre-commit ├── .npmignore ├── .prettierrc ├── .swcrc ├── README.md ├── jest.config.js ├── package-lock.json ├── package.json ├── pnpm-lock.yaml ├── src ├── api │ ├── action-api.ts │ ├── api-requester.ts │ ├── chat-api.ts │ ├── copilot-api.ts │ ├── flow-api.ts │ ├── index.ts │ └── knowledgebase-api.ts ├── index.ts └── models │ ├── action-model.ts │ ├── chat-message.ts │ ├── copilot-model.ts │ ├── flow-model.ts │ └── index.ts ├── test ├── action.test.ts ├── initChat.test.ts ├── integration.test.ts └── knowledgebase.test.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | coverage 3 | dist -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | pnpm test 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # Ignore development files 2 | __tests/ 3 | node_modules/ 4 | src/ 5 | 6 | # Ignore configuration files 7 | tsconfig.json 8 | jest.config.js 9 | pnpm-lock.yaml 10 | package-lock.json 11 | 12 | # Ignore specific files 13 | *.md -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "tabWidth": 2, 4 | "printWidth": 100 5 | } 6 | -------------------------------------------------------------------------------- /.swcrc: -------------------------------------------------------------------------------- 1 | { 2 | "jsc": { 3 | "parser": { 4 | "syntax": "typescript" 5 | } 6 | }, 7 | "module": { 8 | "type": "commonjs" 9 | }, 10 | "env": { 11 | "targets": { 12 | "node": "14" 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Installation 2 | 3 | ``` 4 | npm i opencopilot-sdk 5 | ``` 6 | 7 | ## Usage 8 | ### [Copilot APIs](test/integration.test.ts) 9 | 10 | To create a new copilot instance, follow these steps: 11 | 12 | 1. **Initialize the SDK**: 13 | ```javascript 14 | import {OpenCopilotSdk} from "opencopilot-sdk"; 15 | 16 | // Replace 127.0.0.1 with your own OpenCopilot instance URL 17 | const sdk = new OpenCopilotSdk('http://127.0.0.1:8888/backend'); 18 | ``` 19 | 20 | 2. **Create a Copilot**: 21 | ```javascript 22 | let copilot = await sdk.copilot.createCopilot({ 23 | name: 'My Copilot', 24 | }); 25 | ``` 26 | 27 | 3. **Update the Copilot**: 28 | After creation, you can update the copilot's details such as name, prompt message, status, and website. 29 | ```javascript 30 | await sdk.copilot.updateCopilot(copilot.id, { 31 | name: 'copilot 2.0', 32 | promptMessage: 'Hello, I am your friendly Copilot!', 33 | status: 'published', 34 | website: 'http://jarvisworld.com', 35 | }); 36 | ``` 37 | 38 | ### Managing Copilots 39 | You can perform various operations such as retrieving all copilots, listing conversations, and managing chat sessions. 40 | 41 | - **Get All Copilots**: 42 | ```javascript 43 | const copilots = await sdk.copilot.getAllCopilots(); 44 | ``` 45 | 46 | - **List Conversations and Sessions**: 47 | ```javascript 48 | const conversations = await sdk.chat.listConversations("abc123"); 49 | const uniqueSessions = await sdk.chat.getUniqueSessions(jarvis.id); 50 | const messages = await sdk.chat.getMessagesPerConversation("abc123"); 51 | ``` 52 | 53 | ### Sending and Receiving Messages 54 | To interact with a copilot through chat: 55 | 56 | - **Send a Chat Message**: 57 | ```javascript 58 | const chatMessageResult = await sdk.chat.sendChatMessage("abc123", copilot.token, { 59 | from: 'user', 60 | content: 'Greet me in less than 20 characters', 61 | id: copilot.id, 62 | headers: { 63 | 'X-Copilot': copilot.id, 64 | }, 65 | session_id: "abc123", 66 | }); 67 | ``` 68 | 69 | ### Cleanup 70 | After testing or when a copilot is no longer needed: 71 | 72 | - **Delete a Copilot**: 73 | ```javascript 74 | const result = await sdk.copilot.deleteCopilot(copilot.id); 75 | console.log('Test: Delete Copilot - Passed', result); 76 | ``` 77 | 78 | ----- 79 | 80 | 81 | ### [Actions APIs](test/action.test.ts) 82 | 1. **Create an Action**: 83 | ```javascript 84 | const action_ids = await sdk.action.addAction({ 85 | bot_id: copilot.id, 86 | api_endpoint: "http://127.0.0.1:8888", 87 | description: "This is a test action", 88 | name: "Test Action", 89 | payload: {}, 90 | request_type: "GET", 91 | status: "active" 92 | }); 93 | // Validate action creation 94 | ``` 95 | 96 | 2. **List Actions for the Copilot**: 97 | ```javascript 98 | const actions = await sdk.action.getActions({ 99 | chatbot_id: copilot.id 100 | }); 101 | ``` 102 | 103 | ---- 104 | 105 | ### [Chat APIs](test/initChat.test.ts) 106 | 107 | ### Initializing Chat 108 | To begin a chat session with a copilot, follow these steps: 109 | 110 | 1. **Initiate Chat Session (optional: to get some metadata)**: 111 | After creating a copilot, you can start a chat session using its token. 112 | ```javascript 113 | const result = await sdk.chat.initChat("abc1234", createdCopilot.token); 114 | ``` 115 | 116 | 2. **Send a Chat Message**: 117 | ```javascript 118 | const chatMessageResult = await sdk.chat.sendChatMessage("abc123", jarvis.token, { 119 | from: 'user', 120 | content: 'Greet me in less than 20 characters', 121 | id: copilot.id, 122 | headers: { 123 | 'X-Copilot': copilot.id, 124 | }, 125 | session_id: "abc123", 126 | }); 127 | ``` 128 | 129 | ---- 130 | 131 | - [Knowledgebase](test/knowledgebase.test.ts) 132 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | transform: { 3 | "^.+\\.(t|j)sx?$": "@swc/jest", 4 | }, 5 | }; 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": false, 3 | "name": "opencopilot-sdk", 4 | "engines": { 5 | "node": ">=14" 6 | }, 7 | "version": "1.0.3", 8 | "main": "dist/index.js", 9 | "types": "dist/index.d.ts", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/openchatai/copilot-sdk" 13 | }, 14 | "scripts": { 15 | "start": "tsc && node dist/index.js", 16 | "start:watch": "nodemon --ext ts --exec npm start", 17 | "test": "mocha --require ts-node/register test/**/*.test.ts", 18 | "build": "tsc", 19 | "test:watch": "jest --watch", 20 | "prepare": "husky install" 21 | }, 22 | "devDependencies": { 23 | "@types/chai": "^4.3.11", 24 | "@types/form-data": "^2.5.0", 25 | "@types/jest": "^26.0.24", 26 | "@types/mocha": "^10.0.6", 27 | "@types/node": "^20.10.5", 28 | "chai": "^4.3.10", 29 | "jest": "^27.0.6", 30 | "mocha": "^10.2.0", 31 | "nodemon": "^2.0.12", 32 | "prettier": "^2.3.2", 33 | "ts-jest": "^27.0.3", 34 | "ts-node": "^10.9.2", 35 | "typescript": "^4.9.5", 36 | "husky": "^8.0.0" 37 | }, 38 | "dependencies": { 39 | "axios": "^1.6.2" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | axios: 9 | specifier: ^1.6.2 10 | version: 1.6.2 11 | 12 | devDependencies: 13 | '@types/chai': 14 | specifier: ^4.3.11 15 | version: 4.3.11 16 | '@types/form-data': 17 | specifier: ^2.5.0 18 | version: 2.5.0 19 | '@types/jest': 20 | specifier: ^26.0.24 21 | version: 26.0.24 22 | '@types/mocha': 23 | specifier: ^10.0.6 24 | version: 10.0.6 25 | '@types/node': 26 | specifier: ^20.10.5 27 | version: 20.10.5 28 | chai: 29 | specifier: ^4.3.10 30 | version: 4.3.10 31 | husky: 32 | specifier: ^8.0.0 33 | version: 8.0.3 34 | jest: 35 | specifier: ^27.0.6 36 | version: 27.5.1(ts-node@10.9.2) 37 | mocha: 38 | specifier: ^10.2.0 39 | version: 10.2.0 40 | nodemon: 41 | specifier: ^2.0.12 42 | version: 2.0.22 43 | prettier: 44 | specifier: ^2.3.2 45 | version: 2.8.8 46 | ts-jest: 47 | specifier: ^27.0.3 48 | version: 27.1.5(@babel/core@7.23.6)(@types/jest@26.0.24)(jest@27.5.1)(typescript@4.9.5) 49 | ts-node: 50 | specifier: ^10.9.2 51 | version: 10.9.2(@types/node@20.10.5)(typescript@4.9.5) 52 | typescript: 53 | specifier: ^4.9.5 54 | version: 4.9.5 55 | 56 | packages: 57 | 58 | /@ampproject/remapping@2.2.1: 59 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} 60 | engines: {node: '>=6.0.0'} 61 | dependencies: 62 | '@jridgewell/gen-mapping': 0.3.3 63 | '@jridgewell/trace-mapping': 0.3.20 64 | dev: true 65 | 66 | /@babel/code-frame@7.23.5: 67 | resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} 68 | engines: {node: '>=6.9.0'} 69 | dependencies: 70 | '@babel/highlight': 7.23.4 71 | chalk: 2.4.2 72 | dev: true 73 | 74 | /@babel/compat-data@7.23.5: 75 | resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} 76 | engines: {node: '>=6.9.0'} 77 | dev: true 78 | 79 | /@babel/core@7.23.6: 80 | resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} 81 | engines: {node: '>=6.9.0'} 82 | dependencies: 83 | '@ampproject/remapping': 2.2.1 84 | '@babel/code-frame': 7.23.5 85 | '@babel/generator': 7.23.6 86 | '@babel/helper-compilation-targets': 7.23.6 87 | '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) 88 | '@babel/helpers': 7.23.6 89 | '@babel/parser': 7.23.6 90 | '@babel/template': 7.22.15 91 | '@babel/traverse': 7.23.6 92 | '@babel/types': 7.23.6 93 | convert-source-map: 2.0.0 94 | debug: 4.3.4(supports-color@8.1.1) 95 | gensync: 1.0.0-beta.2 96 | json5: 2.2.3 97 | semver: 6.3.1 98 | transitivePeerDependencies: 99 | - supports-color 100 | dev: true 101 | 102 | /@babel/generator@7.23.6: 103 | resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} 104 | engines: {node: '>=6.9.0'} 105 | dependencies: 106 | '@babel/types': 7.23.6 107 | '@jridgewell/gen-mapping': 0.3.3 108 | '@jridgewell/trace-mapping': 0.3.20 109 | jsesc: 2.5.2 110 | dev: true 111 | 112 | /@babel/helper-compilation-targets@7.23.6: 113 | resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} 114 | engines: {node: '>=6.9.0'} 115 | dependencies: 116 | '@babel/compat-data': 7.23.5 117 | '@babel/helper-validator-option': 7.23.5 118 | browserslist: 4.22.2 119 | lru-cache: 5.1.1 120 | semver: 6.3.1 121 | dev: true 122 | 123 | /@babel/helper-environment-visitor@7.22.20: 124 | resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} 125 | engines: {node: '>=6.9.0'} 126 | dev: true 127 | 128 | /@babel/helper-function-name@7.23.0: 129 | resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} 130 | engines: {node: '>=6.9.0'} 131 | dependencies: 132 | '@babel/template': 7.22.15 133 | '@babel/types': 7.23.6 134 | dev: true 135 | 136 | /@babel/helper-hoist-variables@7.22.5: 137 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} 138 | engines: {node: '>=6.9.0'} 139 | dependencies: 140 | '@babel/types': 7.23.6 141 | dev: true 142 | 143 | /@babel/helper-module-imports@7.22.15: 144 | resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} 145 | engines: {node: '>=6.9.0'} 146 | dependencies: 147 | '@babel/types': 7.23.6 148 | dev: true 149 | 150 | /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): 151 | resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} 152 | engines: {node: '>=6.9.0'} 153 | peerDependencies: 154 | '@babel/core': ^7.0.0 155 | dependencies: 156 | '@babel/core': 7.23.6 157 | '@babel/helper-environment-visitor': 7.22.20 158 | '@babel/helper-module-imports': 7.22.15 159 | '@babel/helper-simple-access': 7.22.5 160 | '@babel/helper-split-export-declaration': 7.22.6 161 | '@babel/helper-validator-identifier': 7.22.20 162 | dev: true 163 | 164 | /@babel/helper-plugin-utils@7.22.5: 165 | resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} 166 | engines: {node: '>=6.9.0'} 167 | dev: true 168 | 169 | /@babel/helper-simple-access@7.22.5: 170 | resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} 171 | engines: {node: '>=6.9.0'} 172 | dependencies: 173 | '@babel/types': 7.23.6 174 | dev: true 175 | 176 | /@babel/helper-split-export-declaration@7.22.6: 177 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} 178 | engines: {node: '>=6.9.0'} 179 | dependencies: 180 | '@babel/types': 7.23.6 181 | dev: true 182 | 183 | /@babel/helper-string-parser@7.23.4: 184 | resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} 185 | engines: {node: '>=6.9.0'} 186 | dev: true 187 | 188 | /@babel/helper-validator-identifier@7.22.20: 189 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 190 | engines: {node: '>=6.9.0'} 191 | dev: true 192 | 193 | /@babel/helper-validator-option@7.23.5: 194 | resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} 195 | engines: {node: '>=6.9.0'} 196 | dev: true 197 | 198 | /@babel/helpers@7.23.6: 199 | resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} 200 | engines: {node: '>=6.9.0'} 201 | dependencies: 202 | '@babel/template': 7.22.15 203 | '@babel/traverse': 7.23.6 204 | '@babel/types': 7.23.6 205 | transitivePeerDependencies: 206 | - supports-color 207 | dev: true 208 | 209 | /@babel/highlight@7.23.4: 210 | resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} 211 | engines: {node: '>=6.9.0'} 212 | dependencies: 213 | '@babel/helper-validator-identifier': 7.22.20 214 | chalk: 2.4.2 215 | js-tokens: 4.0.0 216 | dev: true 217 | 218 | /@babel/parser@7.23.6: 219 | resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} 220 | engines: {node: '>=6.0.0'} 221 | hasBin: true 222 | dependencies: 223 | '@babel/types': 7.23.6 224 | dev: true 225 | 226 | /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): 227 | resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} 228 | peerDependencies: 229 | '@babel/core': ^7.0.0-0 230 | dependencies: 231 | '@babel/core': 7.23.6 232 | '@babel/helper-plugin-utils': 7.22.5 233 | dev: true 234 | 235 | /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6): 236 | resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} 237 | peerDependencies: 238 | '@babel/core': ^7.0.0-0 239 | dependencies: 240 | '@babel/core': 7.23.6 241 | '@babel/helper-plugin-utils': 7.22.5 242 | dev: true 243 | 244 | /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6): 245 | resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} 246 | peerDependencies: 247 | '@babel/core': ^7.0.0-0 248 | dependencies: 249 | '@babel/core': 7.23.6 250 | '@babel/helper-plugin-utils': 7.22.5 251 | dev: true 252 | 253 | /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6): 254 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} 255 | peerDependencies: 256 | '@babel/core': ^7.0.0-0 257 | dependencies: 258 | '@babel/core': 7.23.6 259 | '@babel/helper-plugin-utils': 7.22.5 260 | dev: true 261 | 262 | /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6): 263 | resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} 264 | peerDependencies: 265 | '@babel/core': ^7.0.0-0 266 | dependencies: 267 | '@babel/core': 7.23.6 268 | '@babel/helper-plugin-utils': 7.22.5 269 | dev: true 270 | 271 | /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): 272 | resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} 273 | peerDependencies: 274 | '@babel/core': ^7.0.0-0 275 | dependencies: 276 | '@babel/core': 7.23.6 277 | '@babel/helper-plugin-utils': 7.22.5 278 | dev: true 279 | 280 | /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6): 281 | resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} 282 | peerDependencies: 283 | '@babel/core': ^7.0.0-0 284 | dependencies: 285 | '@babel/core': 7.23.6 286 | '@babel/helper-plugin-utils': 7.22.5 287 | dev: true 288 | 289 | /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6): 290 | resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} 291 | peerDependencies: 292 | '@babel/core': ^7.0.0-0 293 | dependencies: 294 | '@babel/core': 7.23.6 295 | '@babel/helper-plugin-utils': 7.22.5 296 | dev: true 297 | 298 | /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6): 299 | resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} 300 | peerDependencies: 301 | '@babel/core': ^7.0.0-0 302 | dependencies: 303 | '@babel/core': 7.23.6 304 | '@babel/helper-plugin-utils': 7.22.5 305 | dev: true 306 | 307 | /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6): 308 | resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} 309 | peerDependencies: 310 | '@babel/core': ^7.0.0-0 311 | dependencies: 312 | '@babel/core': 7.23.6 313 | '@babel/helper-plugin-utils': 7.22.5 314 | dev: true 315 | 316 | /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6): 317 | resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} 318 | peerDependencies: 319 | '@babel/core': ^7.0.0-0 320 | dependencies: 321 | '@babel/core': 7.23.6 322 | '@babel/helper-plugin-utils': 7.22.5 323 | dev: true 324 | 325 | /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6): 326 | resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} 327 | engines: {node: '>=6.9.0'} 328 | peerDependencies: 329 | '@babel/core': ^7.0.0-0 330 | dependencies: 331 | '@babel/core': 7.23.6 332 | '@babel/helper-plugin-utils': 7.22.5 333 | dev: true 334 | 335 | /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6): 336 | resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} 337 | engines: {node: '>=6.9.0'} 338 | peerDependencies: 339 | '@babel/core': ^7.0.0-0 340 | dependencies: 341 | '@babel/core': 7.23.6 342 | '@babel/helper-plugin-utils': 7.22.5 343 | dev: true 344 | 345 | /@babel/template@7.22.15: 346 | resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} 347 | engines: {node: '>=6.9.0'} 348 | dependencies: 349 | '@babel/code-frame': 7.23.5 350 | '@babel/parser': 7.23.6 351 | '@babel/types': 7.23.6 352 | dev: true 353 | 354 | /@babel/traverse@7.23.6: 355 | resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} 356 | engines: {node: '>=6.9.0'} 357 | dependencies: 358 | '@babel/code-frame': 7.23.5 359 | '@babel/generator': 7.23.6 360 | '@babel/helper-environment-visitor': 7.22.20 361 | '@babel/helper-function-name': 7.23.0 362 | '@babel/helper-hoist-variables': 7.22.5 363 | '@babel/helper-split-export-declaration': 7.22.6 364 | '@babel/parser': 7.23.6 365 | '@babel/types': 7.23.6 366 | debug: 4.3.4(supports-color@8.1.1) 367 | globals: 11.12.0 368 | transitivePeerDependencies: 369 | - supports-color 370 | dev: true 371 | 372 | /@babel/types@7.23.6: 373 | resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} 374 | engines: {node: '>=6.9.0'} 375 | dependencies: 376 | '@babel/helper-string-parser': 7.23.4 377 | '@babel/helper-validator-identifier': 7.22.20 378 | to-fast-properties: 2.0.0 379 | dev: true 380 | 381 | /@bcoe/v8-coverage@0.2.3: 382 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 383 | dev: true 384 | 385 | /@cspotcode/source-map-support@0.8.1: 386 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 387 | engines: {node: '>=12'} 388 | dependencies: 389 | '@jridgewell/trace-mapping': 0.3.9 390 | dev: true 391 | 392 | /@istanbuljs/load-nyc-config@1.1.0: 393 | resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} 394 | engines: {node: '>=8'} 395 | dependencies: 396 | camelcase: 5.3.1 397 | find-up: 4.1.0 398 | get-package-type: 0.1.0 399 | js-yaml: 3.14.1 400 | resolve-from: 5.0.0 401 | dev: true 402 | 403 | /@istanbuljs/schema@0.1.3: 404 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 405 | engines: {node: '>=8'} 406 | dev: true 407 | 408 | /@jest/console@27.5.1: 409 | resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} 410 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 411 | dependencies: 412 | '@jest/types': 27.5.1 413 | '@types/node': 20.10.5 414 | chalk: 4.1.2 415 | jest-message-util: 27.5.1 416 | jest-util: 27.5.1 417 | slash: 3.0.0 418 | dev: true 419 | 420 | /@jest/core@27.5.1(ts-node@10.9.2): 421 | resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} 422 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 423 | peerDependencies: 424 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 425 | peerDependenciesMeta: 426 | node-notifier: 427 | optional: true 428 | dependencies: 429 | '@jest/console': 27.5.1 430 | '@jest/reporters': 27.5.1 431 | '@jest/test-result': 27.5.1 432 | '@jest/transform': 27.5.1 433 | '@jest/types': 27.5.1 434 | '@types/node': 20.10.5 435 | ansi-escapes: 4.3.2 436 | chalk: 4.1.2 437 | emittery: 0.8.1 438 | exit: 0.1.2 439 | graceful-fs: 4.2.11 440 | jest-changed-files: 27.5.1 441 | jest-config: 27.5.1(ts-node@10.9.2) 442 | jest-haste-map: 27.5.1 443 | jest-message-util: 27.5.1 444 | jest-regex-util: 27.5.1 445 | jest-resolve: 27.5.1 446 | jest-resolve-dependencies: 27.5.1 447 | jest-runner: 27.5.1 448 | jest-runtime: 27.5.1 449 | jest-snapshot: 27.5.1 450 | jest-util: 27.5.1 451 | jest-validate: 27.5.1 452 | jest-watcher: 27.5.1 453 | micromatch: 4.0.5 454 | rimraf: 3.0.2 455 | slash: 3.0.0 456 | strip-ansi: 6.0.1 457 | transitivePeerDependencies: 458 | - bufferutil 459 | - canvas 460 | - supports-color 461 | - ts-node 462 | - utf-8-validate 463 | dev: true 464 | 465 | /@jest/environment@27.5.1: 466 | resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} 467 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 468 | dependencies: 469 | '@jest/fake-timers': 27.5.1 470 | '@jest/types': 27.5.1 471 | '@types/node': 20.10.5 472 | jest-mock: 27.5.1 473 | dev: true 474 | 475 | /@jest/fake-timers@27.5.1: 476 | resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} 477 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 478 | dependencies: 479 | '@jest/types': 27.5.1 480 | '@sinonjs/fake-timers': 8.1.0 481 | '@types/node': 20.10.5 482 | jest-message-util: 27.5.1 483 | jest-mock: 27.5.1 484 | jest-util: 27.5.1 485 | dev: true 486 | 487 | /@jest/globals@27.5.1: 488 | resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} 489 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 490 | dependencies: 491 | '@jest/environment': 27.5.1 492 | '@jest/types': 27.5.1 493 | expect: 27.5.1 494 | dev: true 495 | 496 | /@jest/reporters@27.5.1: 497 | resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} 498 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 499 | peerDependencies: 500 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 501 | peerDependenciesMeta: 502 | node-notifier: 503 | optional: true 504 | dependencies: 505 | '@bcoe/v8-coverage': 0.2.3 506 | '@jest/console': 27.5.1 507 | '@jest/test-result': 27.5.1 508 | '@jest/transform': 27.5.1 509 | '@jest/types': 27.5.1 510 | '@types/node': 20.10.5 511 | chalk: 4.1.2 512 | collect-v8-coverage: 1.0.2 513 | exit: 0.1.2 514 | glob: 7.2.3 515 | graceful-fs: 4.2.11 516 | istanbul-lib-coverage: 3.2.2 517 | istanbul-lib-instrument: 5.2.1 518 | istanbul-lib-report: 3.0.1 519 | istanbul-lib-source-maps: 4.0.1 520 | istanbul-reports: 3.1.6 521 | jest-haste-map: 27.5.1 522 | jest-resolve: 27.5.1 523 | jest-util: 27.5.1 524 | jest-worker: 27.5.1 525 | slash: 3.0.0 526 | source-map: 0.6.1 527 | string-length: 4.0.2 528 | terminal-link: 2.1.1 529 | v8-to-istanbul: 8.1.1 530 | transitivePeerDependencies: 531 | - supports-color 532 | dev: true 533 | 534 | /@jest/source-map@27.5.1: 535 | resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} 536 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 537 | dependencies: 538 | callsites: 3.1.0 539 | graceful-fs: 4.2.11 540 | source-map: 0.6.1 541 | dev: true 542 | 543 | /@jest/test-result@27.5.1: 544 | resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} 545 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 546 | dependencies: 547 | '@jest/console': 27.5.1 548 | '@jest/types': 27.5.1 549 | '@types/istanbul-lib-coverage': 2.0.6 550 | collect-v8-coverage: 1.0.2 551 | dev: true 552 | 553 | /@jest/test-sequencer@27.5.1: 554 | resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} 555 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 556 | dependencies: 557 | '@jest/test-result': 27.5.1 558 | graceful-fs: 4.2.11 559 | jest-haste-map: 27.5.1 560 | jest-runtime: 27.5.1 561 | transitivePeerDependencies: 562 | - supports-color 563 | dev: true 564 | 565 | /@jest/transform@27.5.1: 566 | resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} 567 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 568 | dependencies: 569 | '@babel/core': 7.23.6 570 | '@jest/types': 27.5.1 571 | babel-plugin-istanbul: 6.1.1 572 | chalk: 4.1.2 573 | convert-source-map: 1.9.0 574 | fast-json-stable-stringify: 2.1.0 575 | graceful-fs: 4.2.11 576 | jest-haste-map: 27.5.1 577 | jest-regex-util: 27.5.1 578 | jest-util: 27.5.1 579 | micromatch: 4.0.5 580 | pirates: 4.0.6 581 | slash: 3.0.0 582 | source-map: 0.6.1 583 | write-file-atomic: 3.0.3 584 | transitivePeerDependencies: 585 | - supports-color 586 | dev: true 587 | 588 | /@jest/types@26.6.2: 589 | resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} 590 | engines: {node: '>= 10.14.2'} 591 | dependencies: 592 | '@types/istanbul-lib-coverage': 2.0.6 593 | '@types/istanbul-reports': 3.0.4 594 | '@types/node': 20.10.5 595 | '@types/yargs': 15.0.19 596 | chalk: 4.1.2 597 | dev: true 598 | 599 | /@jest/types@27.5.1: 600 | resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} 601 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 602 | dependencies: 603 | '@types/istanbul-lib-coverage': 2.0.6 604 | '@types/istanbul-reports': 3.0.4 605 | '@types/node': 20.10.5 606 | '@types/yargs': 16.0.9 607 | chalk: 4.1.2 608 | dev: true 609 | 610 | /@jridgewell/gen-mapping@0.3.3: 611 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 612 | engines: {node: '>=6.0.0'} 613 | dependencies: 614 | '@jridgewell/set-array': 1.1.2 615 | '@jridgewell/sourcemap-codec': 1.4.15 616 | '@jridgewell/trace-mapping': 0.3.20 617 | dev: true 618 | 619 | /@jridgewell/resolve-uri@3.1.1: 620 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 621 | engines: {node: '>=6.0.0'} 622 | dev: true 623 | 624 | /@jridgewell/set-array@1.1.2: 625 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 626 | engines: {node: '>=6.0.0'} 627 | dev: true 628 | 629 | /@jridgewell/sourcemap-codec@1.4.15: 630 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 631 | dev: true 632 | 633 | /@jridgewell/trace-mapping@0.3.20: 634 | resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} 635 | dependencies: 636 | '@jridgewell/resolve-uri': 3.1.1 637 | '@jridgewell/sourcemap-codec': 1.4.15 638 | dev: true 639 | 640 | /@jridgewell/trace-mapping@0.3.9: 641 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 642 | dependencies: 643 | '@jridgewell/resolve-uri': 3.1.1 644 | '@jridgewell/sourcemap-codec': 1.4.15 645 | dev: true 646 | 647 | /@sinonjs/commons@1.8.6: 648 | resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} 649 | dependencies: 650 | type-detect: 4.0.8 651 | dev: true 652 | 653 | /@sinonjs/fake-timers@8.1.0: 654 | resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} 655 | dependencies: 656 | '@sinonjs/commons': 1.8.6 657 | dev: true 658 | 659 | /@tootallnate/once@1.1.2: 660 | resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} 661 | engines: {node: '>= 6'} 662 | dev: true 663 | 664 | /@tsconfig/node10@1.0.9: 665 | resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} 666 | dev: true 667 | 668 | /@tsconfig/node12@1.0.11: 669 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 670 | dev: true 671 | 672 | /@tsconfig/node14@1.0.3: 673 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 674 | dev: true 675 | 676 | /@tsconfig/node16@1.0.4: 677 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} 678 | dev: true 679 | 680 | /@types/babel__core@7.20.5: 681 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 682 | dependencies: 683 | '@babel/parser': 7.23.6 684 | '@babel/types': 7.23.6 685 | '@types/babel__generator': 7.6.8 686 | '@types/babel__template': 7.4.4 687 | '@types/babel__traverse': 7.20.4 688 | dev: true 689 | 690 | /@types/babel__generator@7.6.8: 691 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 692 | dependencies: 693 | '@babel/types': 7.23.6 694 | dev: true 695 | 696 | /@types/babel__template@7.4.4: 697 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 698 | dependencies: 699 | '@babel/parser': 7.23.6 700 | '@babel/types': 7.23.6 701 | dev: true 702 | 703 | /@types/babel__traverse@7.20.4: 704 | resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} 705 | dependencies: 706 | '@babel/types': 7.23.6 707 | dev: true 708 | 709 | /@types/chai@4.3.11: 710 | resolution: {integrity: sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==} 711 | dev: true 712 | 713 | /@types/form-data@2.5.0: 714 | resolution: {integrity: sha512-23/wYiuckYYtFpL+4RPWiWmRQH2BjFuqCUi2+N3amB1a1Drv+i/byTrGvlLwRVLFNAZbwpbQ7JvTK+VCAPMbcg==} 715 | deprecated: This is a stub types definition. form-data provides its own type definitions, so you do not need this installed. 716 | dependencies: 717 | form-data: 4.0.0 718 | dev: true 719 | 720 | /@types/graceful-fs@4.1.9: 721 | resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} 722 | dependencies: 723 | '@types/node': 20.10.5 724 | dev: true 725 | 726 | /@types/istanbul-lib-coverage@2.0.6: 727 | resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} 728 | dev: true 729 | 730 | /@types/istanbul-lib-report@3.0.3: 731 | resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} 732 | dependencies: 733 | '@types/istanbul-lib-coverage': 2.0.6 734 | dev: true 735 | 736 | /@types/istanbul-reports@3.0.4: 737 | resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} 738 | dependencies: 739 | '@types/istanbul-lib-report': 3.0.3 740 | dev: true 741 | 742 | /@types/jest@26.0.24: 743 | resolution: {integrity: sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==} 744 | dependencies: 745 | jest-diff: 26.6.2 746 | pretty-format: 26.6.2 747 | dev: true 748 | 749 | /@types/mocha@10.0.6: 750 | resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} 751 | dev: true 752 | 753 | /@types/node@20.10.5: 754 | resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} 755 | dependencies: 756 | undici-types: 5.26.5 757 | dev: true 758 | 759 | /@types/prettier@2.7.3: 760 | resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} 761 | dev: true 762 | 763 | /@types/stack-utils@2.0.3: 764 | resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} 765 | dev: true 766 | 767 | /@types/yargs-parser@21.0.3: 768 | resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} 769 | dev: true 770 | 771 | /@types/yargs@15.0.19: 772 | resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==} 773 | dependencies: 774 | '@types/yargs-parser': 21.0.3 775 | dev: true 776 | 777 | /@types/yargs@16.0.9: 778 | resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} 779 | dependencies: 780 | '@types/yargs-parser': 21.0.3 781 | dev: true 782 | 783 | /abab@2.0.6: 784 | resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} 785 | deprecated: Use your platform's native atob() and btoa() methods instead 786 | dev: true 787 | 788 | /abbrev@1.1.1: 789 | resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} 790 | dev: true 791 | 792 | /acorn-globals@6.0.0: 793 | resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} 794 | dependencies: 795 | acorn: 7.4.1 796 | acorn-walk: 7.2.0 797 | dev: true 798 | 799 | /acorn-walk@7.2.0: 800 | resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} 801 | engines: {node: '>=0.4.0'} 802 | dev: true 803 | 804 | /acorn-walk@8.3.1: 805 | resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} 806 | engines: {node: '>=0.4.0'} 807 | dev: true 808 | 809 | /acorn@7.4.1: 810 | resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} 811 | engines: {node: '>=0.4.0'} 812 | hasBin: true 813 | dev: true 814 | 815 | /acorn@8.11.2: 816 | resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} 817 | engines: {node: '>=0.4.0'} 818 | hasBin: true 819 | dev: true 820 | 821 | /agent-base@6.0.2: 822 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 823 | engines: {node: '>= 6.0.0'} 824 | dependencies: 825 | debug: 4.3.4(supports-color@8.1.1) 826 | transitivePeerDependencies: 827 | - supports-color 828 | dev: true 829 | 830 | /ansi-colors@4.1.1: 831 | resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} 832 | engines: {node: '>=6'} 833 | dev: true 834 | 835 | /ansi-escapes@4.3.2: 836 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 837 | engines: {node: '>=8'} 838 | dependencies: 839 | type-fest: 0.21.3 840 | dev: true 841 | 842 | /ansi-regex@5.0.1: 843 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 844 | engines: {node: '>=8'} 845 | dev: true 846 | 847 | /ansi-styles@3.2.1: 848 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 849 | engines: {node: '>=4'} 850 | dependencies: 851 | color-convert: 1.9.3 852 | dev: true 853 | 854 | /ansi-styles@4.3.0: 855 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 856 | engines: {node: '>=8'} 857 | dependencies: 858 | color-convert: 2.0.1 859 | dev: true 860 | 861 | /ansi-styles@5.2.0: 862 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 863 | engines: {node: '>=10'} 864 | dev: true 865 | 866 | /anymatch@3.1.3: 867 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 868 | engines: {node: '>= 8'} 869 | dependencies: 870 | normalize-path: 3.0.0 871 | picomatch: 2.3.1 872 | dev: true 873 | 874 | /arg@4.1.3: 875 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 876 | dev: true 877 | 878 | /argparse@1.0.10: 879 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 880 | dependencies: 881 | sprintf-js: 1.0.3 882 | dev: true 883 | 884 | /argparse@2.0.1: 885 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 886 | dev: true 887 | 888 | /assertion-error@1.1.0: 889 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 890 | dev: true 891 | 892 | /asynckit@0.4.0: 893 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 894 | 895 | /axios@1.6.2: 896 | resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} 897 | dependencies: 898 | follow-redirects: 1.15.3 899 | form-data: 4.0.0 900 | proxy-from-env: 1.1.0 901 | transitivePeerDependencies: 902 | - debug 903 | dev: false 904 | 905 | /babel-jest@27.5.1(@babel/core@7.23.6): 906 | resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} 907 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 908 | peerDependencies: 909 | '@babel/core': ^7.8.0 910 | dependencies: 911 | '@babel/core': 7.23.6 912 | '@jest/transform': 27.5.1 913 | '@jest/types': 27.5.1 914 | '@types/babel__core': 7.20.5 915 | babel-plugin-istanbul: 6.1.1 916 | babel-preset-jest: 27.5.1(@babel/core@7.23.6) 917 | chalk: 4.1.2 918 | graceful-fs: 4.2.11 919 | slash: 3.0.0 920 | transitivePeerDependencies: 921 | - supports-color 922 | dev: true 923 | 924 | /babel-plugin-istanbul@6.1.1: 925 | resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} 926 | engines: {node: '>=8'} 927 | dependencies: 928 | '@babel/helper-plugin-utils': 7.22.5 929 | '@istanbuljs/load-nyc-config': 1.1.0 930 | '@istanbuljs/schema': 0.1.3 931 | istanbul-lib-instrument: 5.2.1 932 | test-exclude: 6.0.0 933 | transitivePeerDependencies: 934 | - supports-color 935 | dev: true 936 | 937 | /babel-plugin-jest-hoist@27.5.1: 938 | resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} 939 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 940 | dependencies: 941 | '@babel/template': 7.22.15 942 | '@babel/types': 7.23.6 943 | '@types/babel__core': 7.20.5 944 | '@types/babel__traverse': 7.20.4 945 | dev: true 946 | 947 | /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): 948 | resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} 949 | peerDependencies: 950 | '@babel/core': ^7.0.0 951 | dependencies: 952 | '@babel/core': 7.23.6 953 | '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) 954 | '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6) 955 | '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) 956 | '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) 957 | '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) 958 | '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) 959 | '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) 960 | '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) 961 | '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) 962 | '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) 963 | '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) 964 | '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) 965 | dev: true 966 | 967 | /babel-preset-jest@27.5.1(@babel/core@7.23.6): 968 | resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} 969 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 970 | peerDependencies: 971 | '@babel/core': ^7.0.0 972 | dependencies: 973 | '@babel/core': 7.23.6 974 | babel-plugin-jest-hoist: 27.5.1 975 | babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) 976 | dev: true 977 | 978 | /balanced-match@1.0.2: 979 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 980 | dev: true 981 | 982 | /binary-extensions@2.2.0: 983 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 984 | engines: {node: '>=8'} 985 | dev: true 986 | 987 | /brace-expansion@1.1.11: 988 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 989 | dependencies: 990 | balanced-match: 1.0.2 991 | concat-map: 0.0.1 992 | dev: true 993 | 994 | /brace-expansion@2.0.1: 995 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 996 | dependencies: 997 | balanced-match: 1.0.2 998 | dev: true 999 | 1000 | /braces@3.0.2: 1001 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 1002 | engines: {node: '>=8'} 1003 | dependencies: 1004 | fill-range: 7.0.1 1005 | dev: true 1006 | 1007 | /browser-process-hrtime@1.0.0: 1008 | resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} 1009 | dev: true 1010 | 1011 | /browser-stdout@1.3.1: 1012 | resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} 1013 | dev: true 1014 | 1015 | /browserslist@4.22.2: 1016 | resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} 1017 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1018 | hasBin: true 1019 | dependencies: 1020 | caniuse-lite: 1.0.30001571 1021 | electron-to-chromium: 1.4.616 1022 | node-releases: 2.0.14 1023 | update-browserslist-db: 1.0.13(browserslist@4.22.2) 1024 | dev: true 1025 | 1026 | /bs-logger@0.2.6: 1027 | resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} 1028 | engines: {node: '>= 6'} 1029 | dependencies: 1030 | fast-json-stable-stringify: 2.1.0 1031 | dev: true 1032 | 1033 | /bser@2.1.1: 1034 | resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} 1035 | dependencies: 1036 | node-int64: 0.4.0 1037 | dev: true 1038 | 1039 | /buffer-from@1.1.2: 1040 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 1041 | dev: true 1042 | 1043 | /callsites@3.1.0: 1044 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1045 | engines: {node: '>=6'} 1046 | dev: true 1047 | 1048 | /camelcase@5.3.1: 1049 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 1050 | engines: {node: '>=6'} 1051 | dev: true 1052 | 1053 | /camelcase@6.3.0: 1054 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 1055 | engines: {node: '>=10'} 1056 | dev: true 1057 | 1058 | /caniuse-lite@1.0.30001571: 1059 | resolution: {integrity: sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==} 1060 | dev: true 1061 | 1062 | /chai@4.3.10: 1063 | resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} 1064 | engines: {node: '>=4'} 1065 | dependencies: 1066 | assertion-error: 1.1.0 1067 | check-error: 1.0.3 1068 | deep-eql: 4.1.3 1069 | get-func-name: 2.0.2 1070 | loupe: 2.3.7 1071 | pathval: 1.1.1 1072 | type-detect: 4.0.8 1073 | dev: true 1074 | 1075 | /chalk@2.4.2: 1076 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 1077 | engines: {node: '>=4'} 1078 | dependencies: 1079 | ansi-styles: 3.2.1 1080 | escape-string-regexp: 1.0.5 1081 | supports-color: 5.5.0 1082 | dev: true 1083 | 1084 | /chalk@4.1.2: 1085 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1086 | engines: {node: '>=10'} 1087 | dependencies: 1088 | ansi-styles: 4.3.0 1089 | supports-color: 7.2.0 1090 | dev: true 1091 | 1092 | /char-regex@1.0.2: 1093 | resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} 1094 | engines: {node: '>=10'} 1095 | dev: true 1096 | 1097 | /check-error@1.0.3: 1098 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 1099 | dependencies: 1100 | get-func-name: 2.0.2 1101 | dev: true 1102 | 1103 | /chokidar@3.5.3: 1104 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 1105 | engines: {node: '>= 8.10.0'} 1106 | dependencies: 1107 | anymatch: 3.1.3 1108 | braces: 3.0.2 1109 | glob-parent: 5.1.2 1110 | is-binary-path: 2.1.0 1111 | is-glob: 4.0.3 1112 | normalize-path: 3.0.0 1113 | readdirp: 3.6.0 1114 | optionalDependencies: 1115 | fsevents: 2.3.3 1116 | dev: true 1117 | 1118 | /ci-info@3.9.0: 1119 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 1120 | engines: {node: '>=8'} 1121 | dev: true 1122 | 1123 | /cjs-module-lexer@1.2.3: 1124 | resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} 1125 | dev: true 1126 | 1127 | /cliui@7.0.4: 1128 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 1129 | dependencies: 1130 | string-width: 4.2.3 1131 | strip-ansi: 6.0.1 1132 | wrap-ansi: 7.0.0 1133 | dev: true 1134 | 1135 | /co@4.6.0: 1136 | resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} 1137 | engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} 1138 | dev: true 1139 | 1140 | /collect-v8-coverage@1.0.2: 1141 | resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} 1142 | dev: true 1143 | 1144 | /color-convert@1.9.3: 1145 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 1146 | dependencies: 1147 | color-name: 1.1.3 1148 | dev: true 1149 | 1150 | /color-convert@2.0.1: 1151 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1152 | engines: {node: '>=7.0.0'} 1153 | dependencies: 1154 | color-name: 1.1.4 1155 | dev: true 1156 | 1157 | /color-name@1.1.3: 1158 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 1159 | dev: true 1160 | 1161 | /color-name@1.1.4: 1162 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1163 | dev: true 1164 | 1165 | /combined-stream@1.0.8: 1166 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 1167 | engines: {node: '>= 0.8'} 1168 | dependencies: 1169 | delayed-stream: 1.0.0 1170 | 1171 | /concat-map@0.0.1: 1172 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1173 | dev: true 1174 | 1175 | /convert-source-map@1.9.0: 1176 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 1177 | dev: true 1178 | 1179 | /convert-source-map@2.0.0: 1180 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 1181 | dev: true 1182 | 1183 | /create-require@1.1.1: 1184 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 1185 | dev: true 1186 | 1187 | /cross-spawn@7.0.3: 1188 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1189 | engines: {node: '>= 8'} 1190 | dependencies: 1191 | path-key: 3.1.1 1192 | shebang-command: 2.0.0 1193 | which: 2.0.2 1194 | dev: true 1195 | 1196 | /cssom@0.3.8: 1197 | resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} 1198 | dev: true 1199 | 1200 | /cssom@0.4.4: 1201 | resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} 1202 | dev: true 1203 | 1204 | /cssstyle@2.3.0: 1205 | resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} 1206 | engines: {node: '>=8'} 1207 | dependencies: 1208 | cssom: 0.3.8 1209 | dev: true 1210 | 1211 | /data-urls@2.0.0: 1212 | resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} 1213 | engines: {node: '>=10'} 1214 | dependencies: 1215 | abab: 2.0.6 1216 | whatwg-mimetype: 2.3.0 1217 | whatwg-url: 8.7.0 1218 | dev: true 1219 | 1220 | /debug@3.2.7(supports-color@5.5.0): 1221 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 1222 | peerDependencies: 1223 | supports-color: '*' 1224 | peerDependenciesMeta: 1225 | supports-color: 1226 | optional: true 1227 | dependencies: 1228 | ms: 2.1.3 1229 | supports-color: 5.5.0 1230 | dev: true 1231 | 1232 | /debug@4.3.4(supports-color@8.1.1): 1233 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1234 | engines: {node: '>=6.0'} 1235 | peerDependencies: 1236 | supports-color: '*' 1237 | peerDependenciesMeta: 1238 | supports-color: 1239 | optional: true 1240 | dependencies: 1241 | ms: 2.1.2 1242 | supports-color: 8.1.1 1243 | dev: true 1244 | 1245 | /decamelize@4.0.0: 1246 | resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} 1247 | engines: {node: '>=10'} 1248 | dev: true 1249 | 1250 | /decimal.js@10.4.3: 1251 | resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} 1252 | dev: true 1253 | 1254 | /dedent@0.7.0: 1255 | resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} 1256 | dev: true 1257 | 1258 | /deep-eql@4.1.3: 1259 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 1260 | engines: {node: '>=6'} 1261 | dependencies: 1262 | type-detect: 4.0.8 1263 | dev: true 1264 | 1265 | /deepmerge@4.3.1: 1266 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 1267 | engines: {node: '>=0.10.0'} 1268 | dev: true 1269 | 1270 | /delayed-stream@1.0.0: 1271 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 1272 | engines: {node: '>=0.4.0'} 1273 | 1274 | /detect-newline@3.1.0: 1275 | resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} 1276 | engines: {node: '>=8'} 1277 | dev: true 1278 | 1279 | /diff-sequences@26.6.2: 1280 | resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==} 1281 | engines: {node: '>= 10.14.2'} 1282 | dev: true 1283 | 1284 | /diff-sequences@27.5.1: 1285 | resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} 1286 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1287 | dev: true 1288 | 1289 | /diff@4.0.2: 1290 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 1291 | engines: {node: '>=0.3.1'} 1292 | dev: true 1293 | 1294 | /diff@5.0.0: 1295 | resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} 1296 | engines: {node: '>=0.3.1'} 1297 | dev: true 1298 | 1299 | /domexception@2.0.1: 1300 | resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} 1301 | engines: {node: '>=8'} 1302 | deprecated: Use your platform's native DOMException instead 1303 | dependencies: 1304 | webidl-conversions: 5.0.0 1305 | dev: true 1306 | 1307 | /electron-to-chromium@1.4.616: 1308 | resolution: {integrity: sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==} 1309 | dev: true 1310 | 1311 | /emittery@0.8.1: 1312 | resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} 1313 | engines: {node: '>=10'} 1314 | dev: true 1315 | 1316 | /emoji-regex@8.0.0: 1317 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1318 | dev: true 1319 | 1320 | /error-ex@1.3.2: 1321 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1322 | dependencies: 1323 | is-arrayish: 0.2.1 1324 | dev: true 1325 | 1326 | /escalade@3.1.1: 1327 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1328 | engines: {node: '>=6'} 1329 | dev: true 1330 | 1331 | /escape-string-regexp@1.0.5: 1332 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1333 | engines: {node: '>=0.8.0'} 1334 | dev: true 1335 | 1336 | /escape-string-regexp@2.0.0: 1337 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 1338 | engines: {node: '>=8'} 1339 | dev: true 1340 | 1341 | /escape-string-regexp@4.0.0: 1342 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1343 | engines: {node: '>=10'} 1344 | dev: true 1345 | 1346 | /escodegen@2.1.0: 1347 | resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} 1348 | engines: {node: '>=6.0'} 1349 | hasBin: true 1350 | dependencies: 1351 | esprima: 4.0.1 1352 | estraverse: 5.3.0 1353 | esutils: 2.0.3 1354 | optionalDependencies: 1355 | source-map: 0.6.1 1356 | dev: true 1357 | 1358 | /esprima@4.0.1: 1359 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1360 | engines: {node: '>=4'} 1361 | hasBin: true 1362 | dev: true 1363 | 1364 | /estraverse@5.3.0: 1365 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1366 | engines: {node: '>=4.0'} 1367 | dev: true 1368 | 1369 | /esutils@2.0.3: 1370 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1371 | engines: {node: '>=0.10.0'} 1372 | dev: true 1373 | 1374 | /execa@5.1.1: 1375 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1376 | engines: {node: '>=10'} 1377 | dependencies: 1378 | cross-spawn: 7.0.3 1379 | get-stream: 6.0.1 1380 | human-signals: 2.1.0 1381 | is-stream: 2.0.1 1382 | merge-stream: 2.0.0 1383 | npm-run-path: 4.0.1 1384 | onetime: 5.1.2 1385 | signal-exit: 3.0.7 1386 | strip-final-newline: 2.0.0 1387 | dev: true 1388 | 1389 | /exit@0.1.2: 1390 | resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} 1391 | engines: {node: '>= 0.8.0'} 1392 | dev: true 1393 | 1394 | /expect@27.5.1: 1395 | resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} 1396 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1397 | dependencies: 1398 | '@jest/types': 27.5.1 1399 | jest-get-type: 27.5.1 1400 | jest-matcher-utils: 27.5.1 1401 | jest-message-util: 27.5.1 1402 | dev: true 1403 | 1404 | /fast-json-stable-stringify@2.1.0: 1405 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1406 | dev: true 1407 | 1408 | /fb-watchman@2.0.2: 1409 | resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} 1410 | dependencies: 1411 | bser: 2.1.1 1412 | dev: true 1413 | 1414 | /fill-range@7.0.1: 1415 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1416 | engines: {node: '>=8'} 1417 | dependencies: 1418 | to-regex-range: 5.0.1 1419 | dev: true 1420 | 1421 | /find-up@4.1.0: 1422 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1423 | engines: {node: '>=8'} 1424 | dependencies: 1425 | locate-path: 5.0.0 1426 | path-exists: 4.0.0 1427 | dev: true 1428 | 1429 | /find-up@5.0.0: 1430 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1431 | engines: {node: '>=10'} 1432 | dependencies: 1433 | locate-path: 6.0.0 1434 | path-exists: 4.0.0 1435 | dev: true 1436 | 1437 | /flat@5.0.2: 1438 | resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} 1439 | hasBin: true 1440 | dev: true 1441 | 1442 | /follow-redirects@1.15.3: 1443 | resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} 1444 | engines: {node: '>=4.0'} 1445 | peerDependencies: 1446 | debug: '*' 1447 | peerDependenciesMeta: 1448 | debug: 1449 | optional: true 1450 | dev: false 1451 | 1452 | /form-data@3.0.1: 1453 | resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} 1454 | engines: {node: '>= 6'} 1455 | dependencies: 1456 | asynckit: 0.4.0 1457 | combined-stream: 1.0.8 1458 | mime-types: 2.1.35 1459 | dev: true 1460 | 1461 | /form-data@4.0.0: 1462 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 1463 | engines: {node: '>= 6'} 1464 | dependencies: 1465 | asynckit: 0.4.0 1466 | combined-stream: 1.0.8 1467 | mime-types: 2.1.35 1468 | 1469 | /fs.realpath@1.0.0: 1470 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1471 | dev: true 1472 | 1473 | /fsevents@2.3.3: 1474 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1475 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1476 | os: [darwin] 1477 | requiresBuild: true 1478 | dev: true 1479 | optional: true 1480 | 1481 | /function-bind@1.1.2: 1482 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1483 | dev: true 1484 | 1485 | /gensync@1.0.0-beta.2: 1486 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1487 | engines: {node: '>=6.9.0'} 1488 | dev: true 1489 | 1490 | /get-caller-file@2.0.5: 1491 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1492 | engines: {node: 6.* || 8.* || >= 10.*} 1493 | dev: true 1494 | 1495 | /get-func-name@2.0.2: 1496 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 1497 | dev: true 1498 | 1499 | /get-package-type@0.1.0: 1500 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 1501 | engines: {node: '>=8.0.0'} 1502 | dev: true 1503 | 1504 | /get-stream@6.0.1: 1505 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1506 | engines: {node: '>=10'} 1507 | dev: true 1508 | 1509 | /glob-parent@5.1.2: 1510 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1511 | engines: {node: '>= 6'} 1512 | dependencies: 1513 | is-glob: 4.0.3 1514 | dev: true 1515 | 1516 | /glob@7.2.0: 1517 | resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} 1518 | dependencies: 1519 | fs.realpath: 1.0.0 1520 | inflight: 1.0.6 1521 | inherits: 2.0.4 1522 | minimatch: 3.1.2 1523 | once: 1.4.0 1524 | path-is-absolute: 1.0.1 1525 | dev: true 1526 | 1527 | /glob@7.2.3: 1528 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1529 | dependencies: 1530 | fs.realpath: 1.0.0 1531 | inflight: 1.0.6 1532 | inherits: 2.0.4 1533 | minimatch: 3.1.2 1534 | once: 1.4.0 1535 | path-is-absolute: 1.0.1 1536 | dev: true 1537 | 1538 | /globals@11.12.0: 1539 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1540 | engines: {node: '>=4'} 1541 | dev: true 1542 | 1543 | /graceful-fs@4.2.11: 1544 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1545 | dev: true 1546 | 1547 | /has-flag@3.0.0: 1548 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1549 | engines: {node: '>=4'} 1550 | dev: true 1551 | 1552 | /has-flag@4.0.0: 1553 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1554 | engines: {node: '>=8'} 1555 | dev: true 1556 | 1557 | /hasown@2.0.0: 1558 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 1559 | engines: {node: '>= 0.4'} 1560 | dependencies: 1561 | function-bind: 1.1.2 1562 | dev: true 1563 | 1564 | /he@1.2.0: 1565 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 1566 | hasBin: true 1567 | dev: true 1568 | 1569 | /html-encoding-sniffer@2.0.1: 1570 | resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} 1571 | engines: {node: '>=10'} 1572 | dependencies: 1573 | whatwg-encoding: 1.0.5 1574 | dev: true 1575 | 1576 | /html-escaper@2.0.2: 1577 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 1578 | dev: true 1579 | 1580 | /http-proxy-agent@4.0.1: 1581 | resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} 1582 | engines: {node: '>= 6'} 1583 | dependencies: 1584 | '@tootallnate/once': 1.1.2 1585 | agent-base: 6.0.2 1586 | debug: 4.3.4(supports-color@8.1.1) 1587 | transitivePeerDependencies: 1588 | - supports-color 1589 | dev: true 1590 | 1591 | /https-proxy-agent@5.0.1: 1592 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} 1593 | engines: {node: '>= 6'} 1594 | dependencies: 1595 | agent-base: 6.0.2 1596 | debug: 4.3.4(supports-color@8.1.1) 1597 | transitivePeerDependencies: 1598 | - supports-color 1599 | dev: true 1600 | 1601 | /human-signals@2.1.0: 1602 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1603 | engines: {node: '>=10.17.0'} 1604 | dev: true 1605 | 1606 | /husky@8.0.3: 1607 | resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} 1608 | engines: {node: '>=14'} 1609 | hasBin: true 1610 | dev: true 1611 | 1612 | /iconv-lite@0.4.24: 1613 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 1614 | engines: {node: '>=0.10.0'} 1615 | dependencies: 1616 | safer-buffer: 2.1.2 1617 | dev: true 1618 | 1619 | /ignore-by-default@1.0.1: 1620 | resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} 1621 | dev: true 1622 | 1623 | /import-local@3.1.0: 1624 | resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} 1625 | engines: {node: '>=8'} 1626 | hasBin: true 1627 | dependencies: 1628 | pkg-dir: 4.2.0 1629 | resolve-cwd: 3.0.0 1630 | dev: true 1631 | 1632 | /imurmurhash@0.1.4: 1633 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1634 | engines: {node: '>=0.8.19'} 1635 | dev: true 1636 | 1637 | /inflight@1.0.6: 1638 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1639 | dependencies: 1640 | once: 1.4.0 1641 | wrappy: 1.0.2 1642 | dev: true 1643 | 1644 | /inherits@2.0.4: 1645 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1646 | dev: true 1647 | 1648 | /is-arrayish@0.2.1: 1649 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1650 | dev: true 1651 | 1652 | /is-binary-path@2.1.0: 1653 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1654 | engines: {node: '>=8'} 1655 | dependencies: 1656 | binary-extensions: 2.2.0 1657 | dev: true 1658 | 1659 | /is-core-module@2.13.1: 1660 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1661 | dependencies: 1662 | hasown: 2.0.0 1663 | dev: true 1664 | 1665 | /is-extglob@2.1.1: 1666 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1667 | engines: {node: '>=0.10.0'} 1668 | dev: true 1669 | 1670 | /is-fullwidth-code-point@3.0.0: 1671 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1672 | engines: {node: '>=8'} 1673 | dev: true 1674 | 1675 | /is-generator-fn@2.1.0: 1676 | resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} 1677 | engines: {node: '>=6'} 1678 | dev: true 1679 | 1680 | /is-glob@4.0.3: 1681 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1682 | engines: {node: '>=0.10.0'} 1683 | dependencies: 1684 | is-extglob: 2.1.1 1685 | dev: true 1686 | 1687 | /is-number@7.0.0: 1688 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1689 | engines: {node: '>=0.12.0'} 1690 | dev: true 1691 | 1692 | /is-plain-obj@2.1.0: 1693 | resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} 1694 | engines: {node: '>=8'} 1695 | dev: true 1696 | 1697 | /is-potential-custom-element-name@1.0.1: 1698 | resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} 1699 | dev: true 1700 | 1701 | /is-stream@2.0.1: 1702 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1703 | engines: {node: '>=8'} 1704 | dev: true 1705 | 1706 | /is-typedarray@1.0.0: 1707 | resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} 1708 | dev: true 1709 | 1710 | /is-unicode-supported@0.1.0: 1711 | resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} 1712 | engines: {node: '>=10'} 1713 | dev: true 1714 | 1715 | /isexe@2.0.0: 1716 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1717 | dev: true 1718 | 1719 | /istanbul-lib-coverage@3.2.2: 1720 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 1721 | engines: {node: '>=8'} 1722 | dev: true 1723 | 1724 | /istanbul-lib-instrument@5.2.1: 1725 | resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} 1726 | engines: {node: '>=8'} 1727 | dependencies: 1728 | '@babel/core': 7.23.6 1729 | '@babel/parser': 7.23.6 1730 | '@istanbuljs/schema': 0.1.3 1731 | istanbul-lib-coverage: 3.2.2 1732 | semver: 6.3.1 1733 | transitivePeerDependencies: 1734 | - supports-color 1735 | dev: true 1736 | 1737 | /istanbul-lib-report@3.0.1: 1738 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 1739 | engines: {node: '>=10'} 1740 | dependencies: 1741 | istanbul-lib-coverage: 3.2.2 1742 | make-dir: 4.0.0 1743 | supports-color: 7.2.0 1744 | dev: true 1745 | 1746 | /istanbul-lib-source-maps@4.0.1: 1747 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} 1748 | engines: {node: '>=10'} 1749 | dependencies: 1750 | debug: 4.3.4(supports-color@8.1.1) 1751 | istanbul-lib-coverage: 3.2.2 1752 | source-map: 0.6.1 1753 | transitivePeerDependencies: 1754 | - supports-color 1755 | dev: true 1756 | 1757 | /istanbul-reports@3.1.6: 1758 | resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} 1759 | engines: {node: '>=8'} 1760 | dependencies: 1761 | html-escaper: 2.0.2 1762 | istanbul-lib-report: 3.0.1 1763 | dev: true 1764 | 1765 | /jest-changed-files@27.5.1: 1766 | resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} 1767 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1768 | dependencies: 1769 | '@jest/types': 27.5.1 1770 | execa: 5.1.1 1771 | throat: 6.0.2 1772 | dev: true 1773 | 1774 | /jest-circus@27.5.1: 1775 | resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} 1776 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1777 | dependencies: 1778 | '@jest/environment': 27.5.1 1779 | '@jest/test-result': 27.5.1 1780 | '@jest/types': 27.5.1 1781 | '@types/node': 20.10.5 1782 | chalk: 4.1.2 1783 | co: 4.6.0 1784 | dedent: 0.7.0 1785 | expect: 27.5.1 1786 | is-generator-fn: 2.1.0 1787 | jest-each: 27.5.1 1788 | jest-matcher-utils: 27.5.1 1789 | jest-message-util: 27.5.1 1790 | jest-runtime: 27.5.1 1791 | jest-snapshot: 27.5.1 1792 | jest-util: 27.5.1 1793 | pretty-format: 27.5.1 1794 | slash: 3.0.0 1795 | stack-utils: 2.0.6 1796 | throat: 6.0.2 1797 | transitivePeerDependencies: 1798 | - supports-color 1799 | dev: true 1800 | 1801 | /jest-cli@27.5.1(ts-node@10.9.2): 1802 | resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} 1803 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1804 | hasBin: true 1805 | peerDependencies: 1806 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1807 | peerDependenciesMeta: 1808 | node-notifier: 1809 | optional: true 1810 | dependencies: 1811 | '@jest/core': 27.5.1(ts-node@10.9.2) 1812 | '@jest/test-result': 27.5.1 1813 | '@jest/types': 27.5.1 1814 | chalk: 4.1.2 1815 | exit: 0.1.2 1816 | graceful-fs: 4.2.11 1817 | import-local: 3.1.0 1818 | jest-config: 27.5.1(ts-node@10.9.2) 1819 | jest-util: 27.5.1 1820 | jest-validate: 27.5.1 1821 | prompts: 2.4.2 1822 | yargs: 16.2.0 1823 | transitivePeerDependencies: 1824 | - bufferutil 1825 | - canvas 1826 | - supports-color 1827 | - ts-node 1828 | - utf-8-validate 1829 | dev: true 1830 | 1831 | /jest-config@27.5.1(ts-node@10.9.2): 1832 | resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} 1833 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1834 | peerDependencies: 1835 | ts-node: '>=9.0.0' 1836 | peerDependenciesMeta: 1837 | ts-node: 1838 | optional: true 1839 | dependencies: 1840 | '@babel/core': 7.23.6 1841 | '@jest/test-sequencer': 27.5.1 1842 | '@jest/types': 27.5.1 1843 | babel-jest: 27.5.1(@babel/core@7.23.6) 1844 | chalk: 4.1.2 1845 | ci-info: 3.9.0 1846 | deepmerge: 4.3.1 1847 | glob: 7.2.3 1848 | graceful-fs: 4.2.11 1849 | jest-circus: 27.5.1 1850 | jest-environment-jsdom: 27.5.1 1851 | jest-environment-node: 27.5.1 1852 | jest-get-type: 27.5.1 1853 | jest-jasmine2: 27.5.1 1854 | jest-regex-util: 27.5.1 1855 | jest-resolve: 27.5.1 1856 | jest-runner: 27.5.1 1857 | jest-util: 27.5.1 1858 | jest-validate: 27.5.1 1859 | micromatch: 4.0.5 1860 | parse-json: 5.2.0 1861 | pretty-format: 27.5.1 1862 | slash: 3.0.0 1863 | strip-json-comments: 3.1.1 1864 | ts-node: 10.9.2(@types/node@20.10.5)(typescript@4.9.5) 1865 | transitivePeerDependencies: 1866 | - bufferutil 1867 | - canvas 1868 | - supports-color 1869 | - utf-8-validate 1870 | dev: true 1871 | 1872 | /jest-diff@26.6.2: 1873 | resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} 1874 | engines: {node: '>= 10.14.2'} 1875 | dependencies: 1876 | chalk: 4.1.2 1877 | diff-sequences: 26.6.2 1878 | jest-get-type: 26.3.0 1879 | pretty-format: 26.6.2 1880 | dev: true 1881 | 1882 | /jest-diff@27.5.1: 1883 | resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} 1884 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1885 | dependencies: 1886 | chalk: 4.1.2 1887 | diff-sequences: 27.5.1 1888 | jest-get-type: 27.5.1 1889 | pretty-format: 27.5.1 1890 | dev: true 1891 | 1892 | /jest-docblock@27.5.1: 1893 | resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} 1894 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1895 | dependencies: 1896 | detect-newline: 3.1.0 1897 | dev: true 1898 | 1899 | /jest-each@27.5.1: 1900 | resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} 1901 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1902 | dependencies: 1903 | '@jest/types': 27.5.1 1904 | chalk: 4.1.2 1905 | jest-get-type: 27.5.1 1906 | jest-util: 27.5.1 1907 | pretty-format: 27.5.1 1908 | dev: true 1909 | 1910 | /jest-environment-jsdom@27.5.1: 1911 | resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} 1912 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1913 | dependencies: 1914 | '@jest/environment': 27.5.1 1915 | '@jest/fake-timers': 27.5.1 1916 | '@jest/types': 27.5.1 1917 | '@types/node': 20.10.5 1918 | jest-mock: 27.5.1 1919 | jest-util: 27.5.1 1920 | jsdom: 16.7.0 1921 | transitivePeerDependencies: 1922 | - bufferutil 1923 | - canvas 1924 | - supports-color 1925 | - utf-8-validate 1926 | dev: true 1927 | 1928 | /jest-environment-node@27.5.1: 1929 | resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} 1930 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1931 | dependencies: 1932 | '@jest/environment': 27.5.1 1933 | '@jest/fake-timers': 27.5.1 1934 | '@jest/types': 27.5.1 1935 | '@types/node': 20.10.5 1936 | jest-mock: 27.5.1 1937 | jest-util: 27.5.1 1938 | dev: true 1939 | 1940 | /jest-get-type@26.3.0: 1941 | resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==} 1942 | engines: {node: '>= 10.14.2'} 1943 | dev: true 1944 | 1945 | /jest-get-type@27.5.1: 1946 | resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} 1947 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1948 | dev: true 1949 | 1950 | /jest-haste-map@27.5.1: 1951 | resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} 1952 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1953 | dependencies: 1954 | '@jest/types': 27.5.1 1955 | '@types/graceful-fs': 4.1.9 1956 | '@types/node': 20.10.5 1957 | anymatch: 3.1.3 1958 | fb-watchman: 2.0.2 1959 | graceful-fs: 4.2.11 1960 | jest-regex-util: 27.5.1 1961 | jest-serializer: 27.5.1 1962 | jest-util: 27.5.1 1963 | jest-worker: 27.5.1 1964 | micromatch: 4.0.5 1965 | walker: 1.0.8 1966 | optionalDependencies: 1967 | fsevents: 2.3.3 1968 | dev: true 1969 | 1970 | /jest-jasmine2@27.5.1: 1971 | resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} 1972 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1973 | dependencies: 1974 | '@jest/environment': 27.5.1 1975 | '@jest/source-map': 27.5.1 1976 | '@jest/test-result': 27.5.1 1977 | '@jest/types': 27.5.1 1978 | '@types/node': 20.10.5 1979 | chalk: 4.1.2 1980 | co: 4.6.0 1981 | expect: 27.5.1 1982 | is-generator-fn: 2.1.0 1983 | jest-each: 27.5.1 1984 | jest-matcher-utils: 27.5.1 1985 | jest-message-util: 27.5.1 1986 | jest-runtime: 27.5.1 1987 | jest-snapshot: 27.5.1 1988 | jest-util: 27.5.1 1989 | pretty-format: 27.5.1 1990 | throat: 6.0.2 1991 | transitivePeerDependencies: 1992 | - supports-color 1993 | dev: true 1994 | 1995 | /jest-leak-detector@27.5.1: 1996 | resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} 1997 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1998 | dependencies: 1999 | jest-get-type: 27.5.1 2000 | pretty-format: 27.5.1 2001 | dev: true 2002 | 2003 | /jest-matcher-utils@27.5.1: 2004 | resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} 2005 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2006 | dependencies: 2007 | chalk: 4.1.2 2008 | jest-diff: 27.5.1 2009 | jest-get-type: 27.5.1 2010 | pretty-format: 27.5.1 2011 | dev: true 2012 | 2013 | /jest-message-util@27.5.1: 2014 | resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} 2015 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2016 | dependencies: 2017 | '@babel/code-frame': 7.23.5 2018 | '@jest/types': 27.5.1 2019 | '@types/stack-utils': 2.0.3 2020 | chalk: 4.1.2 2021 | graceful-fs: 4.2.11 2022 | micromatch: 4.0.5 2023 | pretty-format: 27.5.1 2024 | slash: 3.0.0 2025 | stack-utils: 2.0.6 2026 | dev: true 2027 | 2028 | /jest-mock@27.5.1: 2029 | resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} 2030 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2031 | dependencies: 2032 | '@jest/types': 27.5.1 2033 | '@types/node': 20.10.5 2034 | dev: true 2035 | 2036 | /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): 2037 | resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} 2038 | engines: {node: '>=6'} 2039 | peerDependencies: 2040 | jest-resolve: '*' 2041 | peerDependenciesMeta: 2042 | jest-resolve: 2043 | optional: true 2044 | dependencies: 2045 | jest-resolve: 27.5.1 2046 | dev: true 2047 | 2048 | /jest-regex-util@27.5.1: 2049 | resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} 2050 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2051 | dev: true 2052 | 2053 | /jest-resolve-dependencies@27.5.1: 2054 | resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} 2055 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2056 | dependencies: 2057 | '@jest/types': 27.5.1 2058 | jest-regex-util: 27.5.1 2059 | jest-snapshot: 27.5.1 2060 | transitivePeerDependencies: 2061 | - supports-color 2062 | dev: true 2063 | 2064 | /jest-resolve@27.5.1: 2065 | resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} 2066 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2067 | dependencies: 2068 | '@jest/types': 27.5.1 2069 | chalk: 4.1.2 2070 | graceful-fs: 4.2.11 2071 | jest-haste-map: 27.5.1 2072 | jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) 2073 | jest-util: 27.5.1 2074 | jest-validate: 27.5.1 2075 | resolve: 1.22.8 2076 | resolve.exports: 1.1.1 2077 | slash: 3.0.0 2078 | dev: true 2079 | 2080 | /jest-runner@27.5.1: 2081 | resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} 2082 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2083 | dependencies: 2084 | '@jest/console': 27.5.1 2085 | '@jest/environment': 27.5.1 2086 | '@jest/test-result': 27.5.1 2087 | '@jest/transform': 27.5.1 2088 | '@jest/types': 27.5.1 2089 | '@types/node': 20.10.5 2090 | chalk: 4.1.2 2091 | emittery: 0.8.1 2092 | graceful-fs: 4.2.11 2093 | jest-docblock: 27.5.1 2094 | jest-environment-jsdom: 27.5.1 2095 | jest-environment-node: 27.5.1 2096 | jest-haste-map: 27.5.1 2097 | jest-leak-detector: 27.5.1 2098 | jest-message-util: 27.5.1 2099 | jest-resolve: 27.5.1 2100 | jest-runtime: 27.5.1 2101 | jest-util: 27.5.1 2102 | jest-worker: 27.5.1 2103 | source-map-support: 0.5.21 2104 | throat: 6.0.2 2105 | transitivePeerDependencies: 2106 | - bufferutil 2107 | - canvas 2108 | - supports-color 2109 | - utf-8-validate 2110 | dev: true 2111 | 2112 | /jest-runtime@27.5.1: 2113 | resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} 2114 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2115 | dependencies: 2116 | '@jest/environment': 27.5.1 2117 | '@jest/fake-timers': 27.5.1 2118 | '@jest/globals': 27.5.1 2119 | '@jest/source-map': 27.5.1 2120 | '@jest/test-result': 27.5.1 2121 | '@jest/transform': 27.5.1 2122 | '@jest/types': 27.5.1 2123 | chalk: 4.1.2 2124 | cjs-module-lexer: 1.2.3 2125 | collect-v8-coverage: 1.0.2 2126 | execa: 5.1.1 2127 | glob: 7.2.3 2128 | graceful-fs: 4.2.11 2129 | jest-haste-map: 27.5.1 2130 | jest-message-util: 27.5.1 2131 | jest-mock: 27.5.1 2132 | jest-regex-util: 27.5.1 2133 | jest-resolve: 27.5.1 2134 | jest-snapshot: 27.5.1 2135 | jest-util: 27.5.1 2136 | slash: 3.0.0 2137 | strip-bom: 4.0.0 2138 | transitivePeerDependencies: 2139 | - supports-color 2140 | dev: true 2141 | 2142 | /jest-serializer@27.5.1: 2143 | resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} 2144 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2145 | dependencies: 2146 | '@types/node': 20.10.5 2147 | graceful-fs: 4.2.11 2148 | dev: true 2149 | 2150 | /jest-snapshot@27.5.1: 2151 | resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} 2152 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2153 | dependencies: 2154 | '@babel/core': 7.23.6 2155 | '@babel/generator': 7.23.6 2156 | '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) 2157 | '@babel/traverse': 7.23.6 2158 | '@babel/types': 7.23.6 2159 | '@jest/transform': 27.5.1 2160 | '@jest/types': 27.5.1 2161 | '@types/babel__traverse': 7.20.4 2162 | '@types/prettier': 2.7.3 2163 | babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) 2164 | chalk: 4.1.2 2165 | expect: 27.5.1 2166 | graceful-fs: 4.2.11 2167 | jest-diff: 27.5.1 2168 | jest-get-type: 27.5.1 2169 | jest-haste-map: 27.5.1 2170 | jest-matcher-utils: 27.5.1 2171 | jest-message-util: 27.5.1 2172 | jest-util: 27.5.1 2173 | natural-compare: 1.4.0 2174 | pretty-format: 27.5.1 2175 | semver: 7.5.4 2176 | transitivePeerDependencies: 2177 | - supports-color 2178 | dev: true 2179 | 2180 | /jest-util@27.5.1: 2181 | resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} 2182 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2183 | dependencies: 2184 | '@jest/types': 27.5.1 2185 | '@types/node': 20.10.5 2186 | chalk: 4.1.2 2187 | ci-info: 3.9.0 2188 | graceful-fs: 4.2.11 2189 | picomatch: 2.3.1 2190 | dev: true 2191 | 2192 | /jest-validate@27.5.1: 2193 | resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} 2194 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2195 | dependencies: 2196 | '@jest/types': 27.5.1 2197 | camelcase: 6.3.0 2198 | chalk: 4.1.2 2199 | jest-get-type: 27.5.1 2200 | leven: 3.1.0 2201 | pretty-format: 27.5.1 2202 | dev: true 2203 | 2204 | /jest-watcher@27.5.1: 2205 | resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} 2206 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2207 | dependencies: 2208 | '@jest/test-result': 27.5.1 2209 | '@jest/types': 27.5.1 2210 | '@types/node': 20.10.5 2211 | ansi-escapes: 4.3.2 2212 | chalk: 4.1.2 2213 | jest-util: 27.5.1 2214 | string-length: 4.0.2 2215 | dev: true 2216 | 2217 | /jest-worker@27.5.1: 2218 | resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} 2219 | engines: {node: '>= 10.13.0'} 2220 | dependencies: 2221 | '@types/node': 20.10.5 2222 | merge-stream: 2.0.0 2223 | supports-color: 8.1.1 2224 | dev: true 2225 | 2226 | /jest@27.5.1(ts-node@10.9.2): 2227 | resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} 2228 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2229 | hasBin: true 2230 | peerDependencies: 2231 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 2232 | peerDependenciesMeta: 2233 | node-notifier: 2234 | optional: true 2235 | dependencies: 2236 | '@jest/core': 27.5.1(ts-node@10.9.2) 2237 | import-local: 3.1.0 2238 | jest-cli: 27.5.1(ts-node@10.9.2) 2239 | transitivePeerDependencies: 2240 | - bufferutil 2241 | - canvas 2242 | - supports-color 2243 | - ts-node 2244 | - utf-8-validate 2245 | dev: true 2246 | 2247 | /js-tokens@4.0.0: 2248 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 2249 | dev: true 2250 | 2251 | /js-yaml@3.14.1: 2252 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 2253 | hasBin: true 2254 | dependencies: 2255 | argparse: 1.0.10 2256 | esprima: 4.0.1 2257 | dev: true 2258 | 2259 | /js-yaml@4.1.0: 2260 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 2261 | hasBin: true 2262 | dependencies: 2263 | argparse: 2.0.1 2264 | dev: true 2265 | 2266 | /jsdom@16.7.0: 2267 | resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} 2268 | engines: {node: '>=10'} 2269 | peerDependencies: 2270 | canvas: ^2.5.0 2271 | peerDependenciesMeta: 2272 | canvas: 2273 | optional: true 2274 | dependencies: 2275 | abab: 2.0.6 2276 | acorn: 8.11.2 2277 | acorn-globals: 6.0.0 2278 | cssom: 0.4.4 2279 | cssstyle: 2.3.0 2280 | data-urls: 2.0.0 2281 | decimal.js: 10.4.3 2282 | domexception: 2.0.1 2283 | escodegen: 2.1.0 2284 | form-data: 3.0.1 2285 | html-encoding-sniffer: 2.0.1 2286 | http-proxy-agent: 4.0.1 2287 | https-proxy-agent: 5.0.1 2288 | is-potential-custom-element-name: 1.0.1 2289 | nwsapi: 2.2.7 2290 | parse5: 6.0.1 2291 | saxes: 5.0.1 2292 | symbol-tree: 3.2.4 2293 | tough-cookie: 4.1.3 2294 | w3c-hr-time: 1.0.2 2295 | w3c-xmlserializer: 2.0.0 2296 | webidl-conversions: 6.1.0 2297 | whatwg-encoding: 1.0.5 2298 | whatwg-mimetype: 2.3.0 2299 | whatwg-url: 8.7.0 2300 | ws: 7.5.9 2301 | xml-name-validator: 3.0.0 2302 | transitivePeerDependencies: 2303 | - bufferutil 2304 | - supports-color 2305 | - utf-8-validate 2306 | dev: true 2307 | 2308 | /jsesc@2.5.2: 2309 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 2310 | engines: {node: '>=4'} 2311 | hasBin: true 2312 | dev: true 2313 | 2314 | /json-parse-even-better-errors@2.3.1: 2315 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 2316 | dev: true 2317 | 2318 | /json5@2.2.3: 2319 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 2320 | engines: {node: '>=6'} 2321 | hasBin: true 2322 | dev: true 2323 | 2324 | /kleur@3.0.3: 2325 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 2326 | engines: {node: '>=6'} 2327 | dev: true 2328 | 2329 | /leven@3.1.0: 2330 | resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} 2331 | engines: {node: '>=6'} 2332 | dev: true 2333 | 2334 | /lines-and-columns@1.2.4: 2335 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 2336 | dev: true 2337 | 2338 | /locate-path@5.0.0: 2339 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 2340 | engines: {node: '>=8'} 2341 | dependencies: 2342 | p-locate: 4.1.0 2343 | dev: true 2344 | 2345 | /locate-path@6.0.0: 2346 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 2347 | engines: {node: '>=10'} 2348 | dependencies: 2349 | p-locate: 5.0.0 2350 | dev: true 2351 | 2352 | /lodash.memoize@4.1.2: 2353 | resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} 2354 | dev: true 2355 | 2356 | /lodash@4.17.21: 2357 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 2358 | dev: true 2359 | 2360 | /log-symbols@4.1.0: 2361 | resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} 2362 | engines: {node: '>=10'} 2363 | dependencies: 2364 | chalk: 4.1.2 2365 | is-unicode-supported: 0.1.0 2366 | dev: true 2367 | 2368 | /loupe@2.3.7: 2369 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 2370 | dependencies: 2371 | get-func-name: 2.0.2 2372 | dev: true 2373 | 2374 | /lru-cache@5.1.1: 2375 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 2376 | dependencies: 2377 | yallist: 3.1.1 2378 | dev: true 2379 | 2380 | /lru-cache@6.0.0: 2381 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 2382 | engines: {node: '>=10'} 2383 | dependencies: 2384 | yallist: 4.0.0 2385 | dev: true 2386 | 2387 | /make-dir@4.0.0: 2388 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 2389 | engines: {node: '>=10'} 2390 | dependencies: 2391 | semver: 7.5.4 2392 | dev: true 2393 | 2394 | /make-error@1.3.6: 2395 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 2396 | dev: true 2397 | 2398 | /makeerror@1.0.12: 2399 | resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} 2400 | dependencies: 2401 | tmpl: 1.0.5 2402 | dev: true 2403 | 2404 | /merge-stream@2.0.0: 2405 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 2406 | dev: true 2407 | 2408 | /micromatch@4.0.5: 2409 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 2410 | engines: {node: '>=8.6'} 2411 | dependencies: 2412 | braces: 3.0.2 2413 | picomatch: 2.3.1 2414 | dev: true 2415 | 2416 | /mime-db@1.52.0: 2417 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 2418 | engines: {node: '>= 0.6'} 2419 | 2420 | /mime-types@2.1.35: 2421 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 2422 | engines: {node: '>= 0.6'} 2423 | dependencies: 2424 | mime-db: 1.52.0 2425 | 2426 | /mimic-fn@2.1.0: 2427 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 2428 | engines: {node: '>=6'} 2429 | dev: true 2430 | 2431 | /minimatch@3.1.2: 2432 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2433 | dependencies: 2434 | brace-expansion: 1.1.11 2435 | dev: true 2436 | 2437 | /minimatch@5.0.1: 2438 | resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} 2439 | engines: {node: '>=10'} 2440 | dependencies: 2441 | brace-expansion: 2.0.1 2442 | dev: true 2443 | 2444 | /mocha@10.2.0: 2445 | resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} 2446 | engines: {node: '>= 14.0.0'} 2447 | hasBin: true 2448 | dependencies: 2449 | ansi-colors: 4.1.1 2450 | browser-stdout: 1.3.1 2451 | chokidar: 3.5.3 2452 | debug: 4.3.4(supports-color@8.1.1) 2453 | diff: 5.0.0 2454 | escape-string-regexp: 4.0.0 2455 | find-up: 5.0.0 2456 | glob: 7.2.0 2457 | he: 1.2.0 2458 | js-yaml: 4.1.0 2459 | log-symbols: 4.1.0 2460 | minimatch: 5.0.1 2461 | ms: 2.1.3 2462 | nanoid: 3.3.3 2463 | serialize-javascript: 6.0.0 2464 | strip-json-comments: 3.1.1 2465 | supports-color: 8.1.1 2466 | workerpool: 6.2.1 2467 | yargs: 16.2.0 2468 | yargs-parser: 20.2.4 2469 | yargs-unparser: 2.0.0 2470 | dev: true 2471 | 2472 | /ms@2.1.2: 2473 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2474 | dev: true 2475 | 2476 | /ms@2.1.3: 2477 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 2478 | dev: true 2479 | 2480 | /nanoid@3.3.3: 2481 | resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} 2482 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2483 | hasBin: true 2484 | dev: true 2485 | 2486 | /natural-compare@1.4.0: 2487 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 2488 | dev: true 2489 | 2490 | /node-int64@0.4.0: 2491 | resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} 2492 | dev: true 2493 | 2494 | /node-releases@2.0.14: 2495 | resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 2496 | dev: true 2497 | 2498 | /nodemon@2.0.22: 2499 | resolution: {integrity: sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==} 2500 | engines: {node: '>=8.10.0'} 2501 | hasBin: true 2502 | dependencies: 2503 | chokidar: 3.5.3 2504 | debug: 3.2.7(supports-color@5.5.0) 2505 | ignore-by-default: 1.0.1 2506 | minimatch: 3.1.2 2507 | pstree.remy: 1.1.8 2508 | semver: 5.7.2 2509 | simple-update-notifier: 1.1.0 2510 | supports-color: 5.5.0 2511 | touch: 3.1.0 2512 | undefsafe: 2.0.5 2513 | dev: true 2514 | 2515 | /nopt@1.0.10: 2516 | resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} 2517 | hasBin: true 2518 | dependencies: 2519 | abbrev: 1.1.1 2520 | dev: true 2521 | 2522 | /normalize-path@3.0.0: 2523 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2524 | engines: {node: '>=0.10.0'} 2525 | dev: true 2526 | 2527 | /npm-run-path@4.0.1: 2528 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 2529 | engines: {node: '>=8'} 2530 | dependencies: 2531 | path-key: 3.1.1 2532 | dev: true 2533 | 2534 | /nwsapi@2.2.7: 2535 | resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} 2536 | dev: true 2537 | 2538 | /once@1.4.0: 2539 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2540 | dependencies: 2541 | wrappy: 1.0.2 2542 | dev: true 2543 | 2544 | /onetime@5.1.2: 2545 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 2546 | engines: {node: '>=6'} 2547 | dependencies: 2548 | mimic-fn: 2.1.0 2549 | dev: true 2550 | 2551 | /p-limit@2.3.0: 2552 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 2553 | engines: {node: '>=6'} 2554 | dependencies: 2555 | p-try: 2.2.0 2556 | dev: true 2557 | 2558 | /p-limit@3.1.0: 2559 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2560 | engines: {node: '>=10'} 2561 | dependencies: 2562 | yocto-queue: 0.1.0 2563 | dev: true 2564 | 2565 | /p-locate@4.1.0: 2566 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 2567 | engines: {node: '>=8'} 2568 | dependencies: 2569 | p-limit: 2.3.0 2570 | dev: true 2571 | 2572 | /p-locate@5.0.0: 2573 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2574 | engines: {node: '>=10'} 2575 | dependencies: 2576 | p-limit: 3.1.0 2577 | dev: true 2578 | 2579 | /p-try@2.2.0: 2580 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 2581 | engines: {node: '>=6'} 2582 | dev: true 2583 | 2584 | /parse-json@5.2.0: 2585 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 2586 | engines: {node: '>=8'} 2587 | dependencies: 2588 | '@babel/code-frame': 7.23.5 2589 | error-ex: 1.3.2 2590 | json-parse-even-better-errors: 2.3.1 2591 | lines-and-columns: 1.2.4 2592 | dev: true 2593 | 2594 | /parse5@6.0.1: 2595 | resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} 2596 | dev: true 2597 | 2598 | /path-exists@4.0.0: 2599 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2600 | engines: {node: '>=8'} 2601 | dev: true 2602 | 2603 | /path-is-absolute@1.0.1: 2604 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2605 | engines: {node: '>=0.10.0'} 2606 | dev: true 2607 | 2608 | /path-key@3.1.1: 2609 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2610 | engines: {node: '>=8'} 2611 | dev: true 2612 | 2613 | /path-parse@1.0.7: 2614 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2615 | dev: true 2616 | 2617 | /pathval@1.1.1: 2618 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 2619 | dev: true 2620 | 2621 | /picocolors@1.0.0: 2622 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2623 | dev: true 2624 | 2625 | /picomatch@2.3.1: 2626 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2627 | engines: {node: '>=8.6'} 2628 | dev: true 2629 | 2630 | /pirates@4.0.6: 2631 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 2632 | engines: {node: '>= 6'} 2633 | dev: true 2634 | 2635 | /pkg-dir@4.2.0: 2636 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 2637 | engines: {node: '>=8'} 2638 | dependencies: 2639 | find-up: 4.1.0 2640 | dev: true 2641 | 2642 | /prettier@2.8.8: 2643 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 2644 | engines: {node: '>=10.13.0'} 2645 | hasBin: true 2646 | dev: true 2647 | 2648 | /pretty-format@26.6.2: 2649 | resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} 2650 | engines: {node: '>= 10'} 2651 | dependencies: 2652 | '@jest/types': 26.6.2 2653 | ansi-regex: 5.0.1 2654 | ansi-styles: 4.3.0 2655 | react-is: 17.0.2 2656 | dev: true 2657 | 2658 | /pretty-format@27.5.1: 2659 | resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} 2660 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2661 | dependencies: 2662 | ansi-regex: 5.0.1 2663 | ansi-styles: 5.2.0 2664 | react-is: 17.0.2 2665 | dev: true 2666 | 2667 | /prompts@2.4.2: 2668 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 2669 | engines: {node: '>= 6'} 2670 | dependencies: 2671 | kleur: 3.0.3 2672 | sisteransi: 1.0.5 2673 | dev: true 2674 | 2675 | /proxy-from-env@1.1.0: 2676 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 2677 | dev: false 2678 | 2679 | /psl@1.9.0: 2680 | resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} 2681 | dev: true 2682 | 2683 | /pstree.remy@1.1.8: 2684 | resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} 2685 | dev: true 2686 | 2687 | /punycode@2.3.1: 2688 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 2689 | engines: {node: '>=6'} 2690 | dev: true 2691 | 2692 | /querystringify@2.2.0: 2693 | resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} 2694 | dev: true 2695 | 2696 | /randombytes@2.1.0: 2697 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} 2698 | dependencies: 2699 | safe-buffer: 5.2.1 2700 | dev: true 2701 | 2702 | /react-is@17.0.2: 2703 | resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} 2704 | dev: true 2705 | 2706 | /readdirp@3.6.0: 2707 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2708 | engines: {node: '>=8.10.0'} 2709 | dependencies: 2710 | picomatch: 2.3.1 2711 | dev: true 2712 | 2713 | /require-directory@2.1.1: 2714 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 2715 | engines: {node: '>=0.10.0'} 2716 | dev: true 2717 | 2718 | /requires-port@1.0.0: 2719 | resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} 2720 | dev: true 2721 | 2722 | /resolve-cwd@3.0.0: 2723 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 2724 | engines: {node: '>=8'} 2725 | dependencies: 2726 | resolve-from: 5.0.0 2727 | dev: true 2728 | 2729 | /resolve-from@5.0.0: 2730 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 2731 | engines: {node: '>=8'} 2732 | dev: true 2733 | 2734 | /resolve.exports@1.1.1: 2735 | resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} 2736 | engines: {node: '>=10'} 2737 | dev: true 2738 | 2739 | /resolve@1.22.8: 2740 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 2741 | hasBin: true 2742 | dependencies: 2743 | is-core-module: 2.13.1 2744 | path-parse: 1.0.7 2745 | supports-preserve-symlinks-flag: 1.0.0 2746 | dev: true 2747 | 2748 | /rimraf@3.0.2: 2749 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2750 | hasBin: true 2751 | dependencies: 2752 | glob: 7.2.3 2753 | dev: true 2754 | 2755 | /safe-buffer@5.2.1: 2756 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 2757 | dev: true 2758 | 2759 | /safer-buffer@2.1.2: 2760 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 2761 | dev: true 2762 | 2763 | /saxes@5.0.1: 2764 | resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} 2765 | engines: {node: '>=10'} 2766 | dependencies: 2767 | xmlchars: 2.2.0 2768 | dev: true 2769 | 2770 | /semver@5.7.2: 2771 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 2772 | hasBin: true 2773 | dev: true 2774 | 2775 | /semver@6.3.1: 2776 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 2777 | hasBin: true 2778 | dev: true 2779 | 2780 | /semver@7.0.0: 2781 | resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} 2782 | hasBin: true 2783 | dev: true 2784 | 2785 | /semver@7.5.4: 2786 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 2787 | engines: {node: '>=10'} 2788 | hasBin: true 2789 | dependencies: 2790 | lru-cache: 6.0.0 2791 | dev: true 2792 | 2793 | /serialize-javascript@6.0.0: 2794 | resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} 2795 | dependencies: 2796 | randombytes: 2.1.0 2797 | dev: true 2798 | 2799 | /shebang-command@2.0.0: 2800 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2801 | engines: {node: '>=8'} 2802 | dependencies: 2803 | shebang-regex: 3.0.0 2804 | dev: true 2805 | 2806 | /shebang-regex@3.0.0: 2807 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2808 | engines: {node: '>=8'} 2809 | dev: true 2810 | 2811 | /signal-exit@3.0.7: 2812 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2813 | dev: true 2814 | 2815 | /simple-update-notifier@1.1.0: 2816 | resolution: {integrity: sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==} 2817 | engines: {node: '>=8.10.0'} 2818 | dependencies: 2819 | semver: 7.0.0 2820 | dev: true 2821 | 2822 | /sisteransi@1.0.5: 2823 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 2824 | dev: true 2825 | 2826 | /slash@3.0.0: 2827 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2828 | engines: {node: '>=8'} 2829 | dev: true 2830 | 2831 | /source-map-support@0.5.21: 2832 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 2833 | dependencies: 2834 | buffer-from: 1.1.2 2835 | source-map: 0.6.1 2836 | dev: true 2837 | 2838 | /source-map@0.6.1: 2839 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2840 | engines: {node: '>=0.10.0'} 2841 | dev: true 2842 | 2843 | /source-map@0.7.4: 2844 | resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} 2845 | engines: {node: '>= 8'} 2846 | dev: true 2847 | 2848 | /sprintf-js@1.0.3: 2849 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 2850 | dev: true 2851 | 2852 | /stack-utils@2.0.6: 2853 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} 2854 | engines: {node: '>=10'} 2855 | dependencies: 2856 | escape-string-regexp: 2.0.0 2857 | dev: true 2858 | 2859 | /string-length@4.0.2: 2860 | resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} 2861 | engines: {node: '>=10'} 2862 | dependencies: 2863 | char-regex: 1.0.2 2864 | strip-ansi: 6.0.1 2865 | dev: true 2866 | 2867 | /string-width@4.2.3: 2868 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2869 | engines: {node: '>=8'} 2870 | dependencies: 2871 | emoji-regex: 8.0.0 2872 | is-fullwidth-code-point: 3.0.0 2873 | strip-ansi: 6.0.1 2874 | dev: true 2875 | 2876 | /strip-ansi@6.0.1: 2877 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2878 | engines: {node: '>=8'} 2879 | dependencies: 2880 | ansi-regex: 5.0.1 2881 | dev: true 2882 | 2883 | /strip-bom@4.0.0: 2884 | resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} 2885 | engines: {node: '>=8'} 2886 | dev: true 2887 | 2888 | /strip-final-newline@2.0.0: 2889 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 2890 | engines: {node: '>=6'} 2891 | dev: true 2892 | 2893 | /strip-json-comments@3.1.1: 2894 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2895 | engines: {node: '>=8'} 2896 | dev: true 2897 | 2898 | /supports-color@5.5.0: 2899 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2900 | engines: {node: '>=4'} 2901 | dependencies: 2902 | has-flag: 3.0.0 2903 | dev: true 2904 | 2905 | /supports-color@7.2.0: 2906 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2907 | engines: {node: '>=8'} 2908 | dependencies: 2909 | has-flag: 4.0.0 2910 | dev: true 2911 | 2912 | /supports-color@8.1.1: 2913 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 2914 | engines: {node: '>=10'} 2915 | dependencies: 2916 | has-flag: 4.0.0 2917 | dev: true 2918 | 2919 | /supports-hyperlinks@2.3.0: 2920 | resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} 2921 | engines: {node: '>=8'} 2922 | dependencies: 2923 | has-flag: 4.0.0 2924 | supports-color: 7.2.0 2925 | dev: true 2926 | 2927 | /supports-preserve-symlinks-flag@1.0.0: 2928 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2929 | engines: {node: '>= 0.4'} 2930 | dev: true 2931 | 2932 | /symbol-tree@3.2.4: 2933 | resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} 2934 | dev: true 2935 | 2936 | /terminal-link@2.1.1: 2937 | resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} 2938 | engines: {node: '>=8'} 2939 | dependencies: 2940 | ansi-escapes: 4.3.2 2941 | supports-hyperlinks: 2.3.0 2942 | dev: true 2943 | 2944 | /test-exclude@6.0.0: 2945 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 2946 | engines: {node: '>=8'} 2947 | dependencies: 2948 | '@istanbuljs/schema': 0.1.3 2949 | glob: 7.2.3 2950 | minimatch: 3.1.2 2951 | dev: true 2952 | 2953 | /throat@6.0.2: 2954 | resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} 2955 | dev: true 2956 | 2957 | /tmpl@1.0.5: 2958 | resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} 2959 | dev: true 2960 | 2961 | /to-fast-properties@2.0.0: 2962 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 2963 | engines: {node: '>=4'} 2964 | dev: true 2965 | 2966 | /to-regex-range@5.0.1: 2967 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2968 | engines: {node: '>=8.0'} 2969 | dependencies: 2970 | is-number: 7.0.0 2971 | dev: true 2972 | 2973 | /touch@3.1.0: 2974 | resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} 2975 | hasBin: true 2976 | dependencies: 2977 | nopt: 1.0.10 2978 | dev: true 2979 | 2980 | /tough-cookie@4.1.3: 2981 | resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} 2982 | engines: {node: '>=6'} 2983 | dependencies: 2984 | psl: 1.9.0 2985 | punycode: 2.3.1 2986 | universalify: 0.2.0 2987 | url-parse: 1.5.10 2988 | dev: true 2989 | 2990 | /tr46@2.1.0: 2991 | resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} 2992 | engines: {node: '>=8'} 2993 | dependencies: 2994 | punycode: 2.3.1 2995 | dev: true 2996 | 2997 | /ts-jest@27.1.5(@babel/core@7.23.6)(@types/jest@26.0.24)(jest@27.5.1)(typescript@4.9.5): 2998 | resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} 2999 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 3000 | hasBin: true 3001 | peerDependencies: 3002 | '@babel/core': '>=7.0.0-beta.0 <8' 3003 | '@types/jest': ^27.0.0 3004 | babel-jest: '>=27.0.0 <28' 3005 | esbuild: '*' 3006 | jest: ^27.0.0 3007 | typescript: '>=3.8 <5.0' 3008 | peerDependenciesMeta: 3009 | '@babel/core': 3010 | optional: true 3011 | '@types/jest': 3012 | optional: true 3013 | babel-jest: 3014 | optional: true 3015 | esbuild: 3016 | optional: true 3017 | dependencies: 3018 | '@babel/core': 7.23.6 3019 | '@types/jest': 26.0.24 3020 | bs-logger: 0.2.6 3021 | fast-json-stable-stringify: 2.1.0 3022 | jest: 27.5.1(ts-node@10.9.2) 3023 | jest-util: 27.5.1 3024 | json5: 2.2.3 3025 | lodash.memoize: 4.1.2 3026 | make-error: 1.3.6 3027 | semver: 7.5.4 3028 | typescript: 4.9.5 3029 | yargs-parser: 20.2.9 3030 | dev: true 3031 | 3032 | /ts-node@10.9.2(@types/node@20.10.5)(typescript@4.9.5): 3033 | resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} 3034 | hasBin: true 3035 | peerDependencies: 3036 | '@swc/core': '>=1.2.50' 3037 | '@swc/wasm': '>=1.2.50' 3038 | '@types/node': '*' 3039 | typescript: '>=2.7' 3040 | peerDependenciesMeta: 3041 | '@swc/core': 3042 | optional: true 3043 | '@swc/wasm': 3044 | optional: true 3045 | dependencies: 3046 | '@cspotcode/source-map-support': 0.8.1 3047 | '@tsconfig/node10': 1.0.9 3048 | '@tsconfig/node12': 1.0.11 3049 | '@tsconfig/node14': 1.0.3 3050 | '@tsconfig/node16': 1.0.4 3051 | '@types/node': 20.10.5 3052 | acorn: 8.11.2 3053 | acorn-walk: 8.3.1 3054 | arg: 4.1.3 3055 | create-require: 1.1.1 3056 | diff: 4.0.2 3057 | make-error: 1.3.6 3058 | typescript: 4.9.5 3059 | v8-compile-cache-lib: 3.0.1 3060 | yn: 3.1.1 3061 | dev: true 3062 | 3063 | /type-detect@4.0.8: 3064 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 3065 | engines: {node: '>=4'} 3066 | dev: true 3067 | 3068 | /type-fest@0.21.3: 3069 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 3070 | engines: {node: '>=10'} 3071 | dev: true 3072 | 3073 | /typedarray-to-buffer@3.1.5: 3074 | resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} 3075 | dependencies: 3076 | is-typedarray: 1.0.0 3077 | dev: true 3078 | 3079 | /typescript@4.9.5: 3080 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 3081 | engines: {node: '>=4.2.0'} 3082 | hasBin: true 3083 | dev: true 3084 | 3085 | /undefsafe@2.0.5: 3086 | resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} 3087 | dev: true 3088 | 3089 | /undici-types@5.26.5: 3090 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 3091 | dev: true 3092 | 3093 | /universalify@0.2.0: 3094 | resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} 3095 | engines: {node: '>= 4.0.0'} 3096 | dev: true 3097 | 3098 | /update-browserslist-db@1.0.13(browserslist@4.22.2): 3099 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 3100 | hasBin: true 3101 | peerDependencies: 3102 | browserslist: '>= 4.21.0' 3103 | dependencies: 3104 | browserslist: 4.22.2 3105 | escalade: 3.1.1 3106 | picocolors: 1.0.0 3107 | dev: true 3108 | 3109 | /url-parse@1.5.10: 3110 | resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} 3111 | dependencies: 3112 | querystringify: 2.2.0 3113 | requires-port: 1.0.0 3114 | dev: true 3115 | 3116 | /v8-compile-cache-lib@3.0.1: 3117 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 3118 | dev: true 3119 | 3120 | /v8-to-istanbul@8.1.1: 3121 | resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} 3122 | engines: {node: '>=10.12.0'} 3123 | dependencies: 3124 | '@types/istanbul-lib-coverage': 2.0.6 3125 | convert-source-map: 1.9.0 3126 | source-map: 0.7.4 3127 | dev: true 3128 | 3129 | /w3c-hr-time@1.0.2: 3130 | resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} 3131 | deprecated: Use your platform's native performance.now() and performance.timeOrigin. 3132 | dependencies: 3133 | browser-process-hrtime: 1.0.0 3134 | dev: true 3135 | 3136 | /w3c-xmlserializer@2.0.0: 3137 | resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} 3138 | engines: {node: '>=10'} 3139 | dependencies: 3140 | xml-name-validator: 3.0.0 3141 | dev: true 3142 | 3143 | /walker@1.0.8: 3144 | resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} 3145 | dependencies: 3146 | makeerror: 1.0.12 3147 | dev: true 3148 | 3149 | /webidl-conversions@5.0.0: 3150 | resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} 3151 | engines: {node: '>=8'} 3152 | dev: true 3153 | 3154 | /webidl-conversions@6.1.0: 3155 | resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} 3156 | engines: {node: '>=10.4'} 3157 | dev: true 3158 | 3159 | /whatwg-encoding@1.0.5: 3160 | resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} 3161 | dependencies: 3162 | iconv-lite: 0.4.24 3163 | dev: true 3164 | 3165 | /whatwg-mimetype@2.3.0: 3166 | resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} 3167 | dev: true 3168 | 3169 | /whatwg-url@8.7.0: 3170 | resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} 3171 | engines: {node: '>=10'} 3172 | dependencies: 3173 | lodash: 4.17.21 3174 | tr46: 2.1.0 3175 | webidl-conversions: 6.1.0 3176 | dev: true 3177 | 3178 | /which@2.0.2: 3179 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 3180 | engines: {node: '>= 8'} 3181 | hasBin: true 3182 | dependencies: 3183 | isexe: 2.0.0 3184 | dev: true 3185 | 3186 | /workerpool@6.2.1: 3187 | resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} 3188 | dev: true 3189 | 3190 | /wrap-ansi@7.0.0: 3191 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 3192 | engines: {node: '>=10'} 3193 | dependencies: 3194 | ansi-styles: 4.3.0 3195 | string-width: 4.2.3 3196 | strip-ansi: 6.0.1 3197 | dev: true 3198 | 3199 | /wrappy@1.0.2: 3200 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3201 | dev: true 3202 | 3203 | /write-file-atomic@3.0.3: 3204 | resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} 3205 | dependencies: 3206 | imurmurhash: 0.1.4 3207 | is-typedarray: 1.0.0 3208 | signal-exit: 3.0.7 3209 | typedarray-to-buffer: 3.1.5 3210 | dev: true 3211 | 3212 | /ws@7.5.9: 3213 | resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} 3214 | engines: {node: '>=8.3.0'} 3215 | peerDependencies: 3216 | bufferutil: ^4.0.1 3217 | utf-8-validate: ^5.0.2 3218 | peerDependenciesMeta: 3219 | bufferutil: 3220 | optional: true 3221 | utf-8-validate: 3222 | optional: true 3223 | dev: true 3224 | 3225 | /xml-name-validator@3.0.0: 3226 | resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} 3227 | dev: true 3228 | 3229 | /xmlchars@2.2.0: 3230 | resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} 3231 | dev: true 3232 | 3233 | /y18n@5.0.8: 3234 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 3235 | engines: {node: '>=10'} 3236 | dev: true 3237 | 3238 | /yallist@3.1.1: 3239 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 3240 | dev: true 3241 | 3242 | /yallist@4.0.0: 3243 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3244 | dev: true 3245 | 3246 | /yargs-parser@20.2.4: 3247 | resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} 3248 | engines: {node: '>=10'} 3249 | dev: true 3250 | 3251 | /yargs-parser@20.2.9: 3252 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 3253 | engines: {node: '>=10'} 3254 | dev: true 3255 | 3256 | /yargs-unparser@2.0.0: 3257 | resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} 3258 | engines: {node: '>=10'} 3259 | dependencies: 3260 | camelcase: 6.3.0 3261 | decamelize: 4.0.0 3262 | flat: 5.0.2 3263 | is-plain-obj: 2.1.0 3264 | dev: true 3265 | 3266 | /yargs@16.2.0: 3267 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 3268 | engines: {node: '>=10'} 3269 | dependencies: 3270 | cliui: 7.0.4 3271 | escalade: 3.1.1 3272 | get-caller-file: 2.0.5 3273 | require-directory: 2.1.1 3274 | string-width: 4.2.3 3275 | y18n: 5.0.8 3276 | yargs-parser: 20.2.9 3277 | dev: true 3278 | 3279 | /yn@3.1.1: 3280 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 3281 | engines: {node: '>=6'} 3282 | dev: true 3283 | 3284 | /yocto-queue@0.1.0: 3285 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3286 | engines: {node: '>=10'} 3287 | dev: true 3288 | -------------------------------------------------------------------------------- /src/api/action-api.ts: -------------------------------------------------------------------------------- 1 | import { GetActionsRequest, GetActionRequest, GetActionResponse, AddActionRequest, Action } from '../models'; 2 | import { ApiRequester } from './api-requester'; 3 | 4 | export class ActionApi extends ApiRequester { 5 | private backendBase: string; 6 | 7 | constructor(baseUrl: string) { 8 | super(baseUrl); 9 | this.backendBase = baseUrl; 10 | } 11 | 12 | public async getActions(request: GetActionsRequest) { 13 | const url = `${this.backendBase}/actions/bot/${request.chatbot_id}`; 14 | return (await this.i.get(url)).data; 15 | } 16 | 17 | public async getAction(request: GetActionRequest) { 18 | const url = `${this.backendBase}/actions/p/${request.action_id}`; 19 | return (await this.i.get(url)).data; 20 | } 21 | 22 | public async addAction(request: AddActionRequest) { 23 | const { bot_id, ...rest } = request; 24 | const url = `${this.backendBase}/actions/bot/${bot_id}`; 25 | return (await this.i.post(url, rest)).data; 26 | } 27 | } 28 | 29 | // // Example usage: 30 | // const backendBase = 'YOUR_BACKEND_BASE_URL'; 31 | // const actions = new Actions(backendBase); 32 | 33 | // // Now you can call the methods on the actions instance 34 | // const actionsResponse = await actions.getActions({ chatbot_id: '123' }); 35 | // const actionResponse = await actions.getAction({ action_id: '456' }); 36 | // const addActionResponse = await actions.addAction({ bot_id: '789', /* other properties */ }); 37 | 38 | -------------------------------------------------------------------------------- /src/api/api-requester.ts: -------------------------------------------------------------------------------- 1 | import axios, { AxiosInstance } from "axios"; 2 | 3 | export abstract class ApiRequester { 4 | apiUrl: string; 5 | protected i: AxiosInstance; 6 | constructor(baseUrl: string) { 7 | this.apiUrl = `${baseUrl}/copilot`; 8 | this.i = this.getAxiosInstance() 9 | } 10 | private getAxiosInstance(): AxiosInstance { 11 | if (!this.i) { 12 | this.i = axios.create({ 13 | baseURL: this.apiUrl, 14 | timeout: 10000, 15 | headers: { 16 | 'Content-Type': 'application/json', 17 | }, 18 | }); 19 | } 20 | return this.i; 21 | } 22 | } -------------------------------------------------------------------------------- /src/api/chat-api.ts: -------------------------------------------------------------------------------- 1 | // api/ChatApi.ts 2 | import axios, { AxiosResponse } from 'axios'; 3 | import { ChatMessage, ChatSession, SendChatRequest, UniqueSession, SendChatResponse } from '../models/chat-message'; 4 | import { ApiRequester } from './api-requester'; 5 | 6 | export class ChatApi extends ApiRequester { 7 | private backendBase: string; 8 | 9 | constructor(backendBase: string) { 10 | super(backendBase); 11 | this.backendBase = backendBase; 12 | } 13 | 14 | async listConversations(sessionId: string) { 15 | const url = `${this.backendBase}/chat/sessions/${sessionId}/chats/`; 16 | try { 17 | const response = await this.i.get(url); 18 | return response.data 19 | } catch (error: any) { 20 | throw new Error(`Failed to list conversations: ${error.message}`); 21 | } 22 | } 23 | 24 | async getUniqueSessions(botId: string): Promise { 25 | const url = `${this.backendBase}/chat/b/${botId}/chat_sessions`; 26 | try { 27 | const response = await this.i.get(url); 28 | return response.data 29 | } catch (error: any) { 30 | throw new Error(`Failed to get unique sessions: ${error.message}`); 31 | } 32 | } 33 | 34 | async blockSession(sessionId: string): Promise { 35 | const url = `${this.backendBase}/chat/sessions/${sessionId}/chats/`; 36 | try { 37 | const response: AxiosResponse = await this.i.get(url); 38 | // Process the response as needed 39 | } catch (error: any) { 40 | throw new Error(`Failed to block session: ${error.message}`); 41 | } 42 | } 43 | 44 | async getMessagesPerConversation(sessionId: string): Promise { 45 | const url = `${this.backendBase}/chat/sessions/${sessionId}/chats`; 46 | try { 47 | const response: AxiosResponse = await this.i.get(url); 48 | return response.data; 49 | } catch (error: any) { 50 | throw new Error(`Failed to get messages per conversation: ${error.message}`); 51 | } 52 | } 53 | 54 | async deleteConversation(sessionId: string): Promise { 55 | const url = `${this.backendBase}/chat/sessions/${sessionId}/chats`; 56 | try { 57 | const response: AxiosResponse = await this.i.get(url); 58 | // Process the response as needed 59 | } catch (error: any) { 60 | throw new Error(`Failed to delete conversation: ${error.message}`); 61 | } 62 | } 63 | 64 | async sendChatMessage(sessionId: string, botToken: string, body: SendChatRequest): Promise { 65 | const url = `${this.backendBase}/chat/send`; 66 | const headers = { 67 | 'X-Session-Id': sessionId, 68 | 'X-Bot-Token': botToken, 69 | }; 70 | 71 | try { 72 | const response = await axios.post(url, body, { headers }); 73 | return response.data 74 | } catch (error: any) { 75 | throw new Error(`Failed to send chat message: ${error.message}`); 76 | } 77 | } 78 | 79 | async initChat(sessionId: string, botToken: string): Promise { 80 | const url = `${this.backendBase}/chat/init?session_id=${sessionId}`; 81 | const headers = { 82 | 'X-Session-Id': sessionId, 83 | 'X-Bot-Token': botToken, 84 | }; 85 | 86 | try { 87 | const response: AxiosResponse = await this.i.get(url, { headers }); 88 | return response.data; 89 | } catch (error: any) { 90 | throw new Error(`Failed to initialize chat: ${error.message}`); 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /src/api/copilot-api.ts: -------------------------------------------------------------------------------- 1 | import axios, { AxiosInstance } from 'axios'; 2 | import { Copilot } from "../models"; 3 | import { ApiRequester } from './api-requester'; 4 | 5 | export class CopilotApi extends ApiRequester { 6 | 7 | constructor(baseUrl: string) { 8 | super(baseUrl); 9 | this.apiUrl = `${baseUrl}/copilot`; 10 | } 11 | 12 | // @todo: this return type is incorrect, needs to be fixed 13 | public async getCopilot(id: string): Promise<{ chatbot: Copilot }> { 14 | const response = await this.i.get(`/${id}`); 15 | return response.data; 16 | } 17 | 18 | public async getAllCopilots(): Promise { 19 | const response = await this.i.get('/'); 20 | return response.data.map((d: Copilot) => new Copilot(d)); 21 | } 22 | 23 | // @todo: This request should be put but it's post! 24 | public async updateCopilot(id: string, copilot: Pick): Promise { 25 | try { 26 | const response = await this.i.post(`/${id}`, copilot); 27 | return response.data 28 | } catch (error) { 29 | // Handle error 30 | console.error('Error updating copilot:', error); 31 | throw error; 32 | } 33 | } 34 | 35 | // @todo: This should not be form data 36 | public async createCopilot(copilot: Pick): Promise { 37 | const formData = new FormData(); 38 | formData.append('name', copilot.name); 39 | try { 40 | const response = await axios.post(`${this.apiUrl}`, formData); 41 | return new Copilot(response.data); 42 | } catch (error) { 43 | // Handle error 44 | console.error('Error creating copilot:', error); 45 | throw error; 46 | } 47 | } 48 | 49 | public async deleteCopilot(id: string): Promise { 50 | await this.i.delete(`${this.apiUrl}/${id}`); 51 | } 52 | 53 | public async validateCopilot(id: string): Promise { 54 | const response = await this.i.get(`${this.apiUrl}/${id}/validate`); 55 | return response.data; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/api/flow-api.ts: -------------------------------------------------------------------------------- 1 | import { Flow } from '../models/flow-model'; 2 | import { ApiRequester } from './api-requester'; 3 | 4 | export class FlowApi extends ApiRequester { 5 | private backendBase: string; 6 | 7 | constructor(baseUrl: string) { 8 | super(baseUrl); 9 | this.backendBase = baseUrl; 10 | } 11 | 12 | public async getAllFlowsByBotId(botId: string) { 13 | const url = `${this.backendBase}/flows/bot/${botId}`; 14 | const result = await this.i.get(url); 15 | 16 | return result.data 17 | } 18 | 19 | public async createNewFlow(botId: string, flow: Flow) { 20 | const url = `${this.backendBase}/flows/bot/${botId}`; 21 | const result = await this.i.post(url, flow); 22 | 23 | return result.data 24 | } 25 | 26 | public async syncFlow(flowId: string, flow: Flow) { 27 | const url = `${this.backendBase}/flows/${flowId}`; 28 | return this.i.put(url, flow); 29 | } 30 | 31 | public async getFlow(flowId: string) { 32 | const url = `${this.backendBase}/flows/${flowId}`; 33 | return this.i.get(url); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './copilot-api'; 2 | export * from './chat-api' 3 | export * from './flow-api' 4 | export * from './action-api' -------------------------------------------------------------------------------- /src/api/knowledgebase-api.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | 4 | interface QdrantResponse { 5 | result: { 6 | points: Point[]; 7 | next_page_offset: string; 8 | }; 9 | status: string; 10 | time: number; 11 | } 12 | 13 | interface Point { 14 | id: string; 15 | payload: { 16 | metadata: { 17 | bot_id: string; 18 | }; 19 | page_content: string; 20 | }; 21 | vector: any; // Replace 'any' with the actual type of the 'vector' property if you have more information about it 22 | } 23 | 24 | 25 | export class KnowledgebaseApi { 26 | private backendBase: string; 27 | 28 | constructor(baseUrl: string) { 29 | this.backendBase = baseUrl; 30 | } 31 | 32 | public async ingestWebsites(bot_id: string, urls: string[]): Promise { 33 | const result = await axios.post(`${this.backendBase}/uploads/file/ingest`, { 34 | "filenames": urls, "bot_id": bot_id 35 | }); 36 | 37 | return result.data 38 | } 39 | 40 | 41 | // This test will not pass for remote deployments 42 | public async hasDocuments(bot_id: string) { 43 | const apiUrl = 'http://localhost:6333/collections/knowledgebase/points/scroll'; 44 | const requestData = { 45 | filter: { 46 | must: [ 47 | { 48 | key: 'metadata.bot_id', 49 | match: { 50 | value: bot_id, 51 | }, 52 | }, 53 | ], 54 | }, 55 | limit: 1, 56 | with_payload: true, 57 | with_vector: false, 58 | }; 59 | 60 | // Make the HTTP request using Axios 61 | const result = await axios.post(apiUrl, requestData) 62 | return result.data 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { CopilotApi, ChatApi, FlowApi, ActionApi } from "./api"; 2 | import { KnowledgebaseApi } from "./api/knowledgebase-api"; 3 | 4 | 5 | 6 | export class OpenCopilotSdk { 7 | public copilot: CopilotApi; 8 | public chat: ChatApi; 9 | public flow: FlowApi; 10 | public action: ActionApi; 11 | public knowledgebase: KnowledgebaseApi 12 | 13 | constructor(baseUrl: string) { 14 | this.copilot = new CopilotApi(baseUrl); 15 | this.chat = new ChatApi(baseUrl); 16 | this.flow = new FlowApi(baseUrl); 17 | this.action = new ActionApi(baseUrl); 18 | this.knowledgebase = new KnowledgebaseApi(baseUrl) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/models/action-model.ts: -------------------------------------------------------------------------------- 1 | // models/Action.ts 2 | 3 | export interface Action { 4 | id: string; 5 | payload: { 6 | metadata: { 7 | action: { 8 | base_uri: string; 9 | chatbot_id: string; 10 | description: string; 11 | name: string; 12 | payload: {}; 13 | status: string; 14 | }; 15 | }; 16 | page_content: string; 17 | }; 18 | vector: string | null; 19 | } 20 | 21 | 22 | 23 | // src/api/actions/types.ts 24 | 25 | export interface GetActionsRequest { 26 | chatbot_id: string; 27 | } 28 | 29 | export interface GetActionsResponse { 30 | success: Action[]; 31 | } 32 | 33 | export interface GetActionRequest { 34 | action_id: string; 35 | } 36 | 37 | export interface GetActionResponse { 38 | success?: Action; 39 | error?: { message: string }; 40 | } 41 | 42 | export interface AddActionRequest { 43 | bot_id: string; 44 | name: string; 45 | description: string; 46 | api_endpoint: string; 47 | payload: {}; 48 | status: string; 49 | request_type: string; 50 | } -------------------------------------------------------------------------------- /src/models/chat-message.ts: -------------------------------------------------------------------------------- 1 | // models/chatModels.ts 2 | export interface ChatMessage { 3 | chatbot_id: string; 4 | created_at: string; 5 | from_user: boolean; 6 | id: number; 7 | message: string; 8 | session_id: string; 9 | updated_at: string; 10 | } 11 | 12 | export interface ChatSession { 13 | bot_name: string; 14 | faq: any[]; // Update the type accordingly 15 | history: ChatMessage[]; 16 | initial_questions: any[]; // Update the type accordingly 17 | logo: string; 18 | } 19 | 20 | export interface UniqueSession { 21 | first_message: { 22 | chatbot_id: string; 23 | created_at: string; 24 | from_user: boolean; 25 | id: number; 26 | message: string; 27 | session_id: string; 28 | updated_at: string; 29 | }; 30 | session_id: string; 31 | } 32 | 33 | export interface SendChatRequest { 34 | id: string; 35 | from: string; 36 | content: string; 37 | headers: { 38 | 'X-Copilot': string; 39 | }; 40 | session_id: string; 41 | } 42 | 43 | 44 | export interface SendChatResponse { 45 | response: { 46 | text: string; 47 | }; 48 | type: string; 49 | } 50 | -------------------------------------------------------------------------------- /src/models/copilot-model.ts: -------------------------------------------------------------------------------- 1 | export class Copilot { 2 | 3 | id: string; 4 | name: string; 5 | token: string; 6 | website: string; 7 | status: 'draft' | 'published'; 8 | promptMessage: string; 9 | swaggerUrl: string; 10 | 11 | constructor(data: Copilot) { 12 | this.id = data.id; 13 | this.name = data.name; 14 | this.token = data.token; 15 | this.website = data.website; 16 | this.status = data.status; 17 | this.promptMessage = data.promptMessage; 18 | this.swaggerUrl = data.swaggerUrl; 19 | } 20 | } -------------------------------------------------------------------------------- /src/models/flow-model.ts: -------------------------------------------------------------------------------- 1 | interface ActionInternal { 2 | name: string; 3 | description: string; 4 | api_endpoint: string; 5 | request_type: string; 6 | operation_id: string; 7 | payload: { 8 | parameters: { 9 | name: string; 10 | in: string; 11 | description: string; 12 | required: boolean; 13 | schema: { 14 | type: string; 15 | format: string; 16 | }; 17 | }[]; 18 | requestBody: { 19 | content: { 20 | 'application/octet-stream': { 21 | schema: { 22 | type: string; 23 | format: string; 24 | }; 25 | }; 26 | }; 27 | }; 28 | }; 29 | } 30 | 31 | 32 | export interface Flow { 33 | name: string; 34 | description: string; 35 | blocks: { 36 | name: string; 37 | actions: ActionInternal[]; 38 | next_on_fail: string | null; 39 | next_on_success: string | null; 40 | order: number; 41 | }[]; 42 | } 43 | -------------------------------------------------------------------------------- /src/models/index.ts: -------------------------------------------------------------------------------- 1 | export * from './copilot-model'; 2 | export * from './chat-message'; 3 | export * from './action-model'; 4 | export * from './flow-model'; -------------------------------------------------------------------------------- /test/action.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import { describe, it, before } from 'mocha'; 3 | import { OpenCopilotSdk } from '../src'; 4 | import { Action, Copilot, Flow } from '../src/models'; 5 | 6 | describe('Copilot Integration Tests', function () { 7 | this.timeout(20000); 8 | let sdk: OpenCopilotSdk; 9 | let createdCopilot: Copilot; 10 | let action_ids: string[]; 11 | let actions: Action[]; 12 | 13 | before(function () { 14 | sdk = new OpenCopilotSdk("http://127.0.0.1:8888/backend"); 15 | }); 16 | 17 | it('should create a copilot to add actions', async function () { 18 | try { 19 | createdCopilot = await sdk.copilot.createCopilot({ 20 | name: "ActionsCopilot" 21 | }); 22 | expect(createdCopilot.name).to.equal("ActionsCopilot"); 23 | } catch (error: any) { 24 | console.error("Error in Copilot integration tests:", error.message); 25 | expect.fail(error.message); 26 | } 27 | }); 28 | 29 | it('should create an action from created copilot', async function () { 30 | try { 31 | action_ids = await sdk.action.addAction({ 32 | bot_id: createdCopilot.id, 33 | api_endpoint: "http://127.0.0.1:8888", 34 | description: "This is a test action", 35 | name: "Test Action", 36 | payload: {}, 37 | request_type: "GET", 38 | status: "active" 39 | }) 40 | 41 | // assert action_ids is an array with one string 42 | } catch (error: any) { 43 | expect.fail(error.message); 44 | } 45 | }); 46 | 47 | 48 | it('should get a list of actions for this copilot', async function () { 49 | const actions = await sdk.action.getActions({ 50 | chatbot_id: createdCopilot.id 51 | }); 52 | 53 | expect(actions).to.be.an('array'); 54 | 55 | actions.forEach((action: any) => { 56 | expect(action).to.have.keys('api_endpoint', 'bot_id', 'name', 'operation_id', 'status', 'payload', 'request_type', 'updated_at', 'created_at', 'deleted_at', 'description', 'id'); 57 | }); 58 | }) 59 | 60 | 61 | it('should create a flow', async function() { 62 | const flow: Flow = { 63 | blocks: [{ 64 | actions: [], 65 | name: "Block 1", 66 | next_on_fail: null, 67 | next_on_success: null, 68 | order: 1 69 | }], 70 | description: "", 71 | name: "Example flow" 72 | }; 73 | 74 | const _flow = await sdk.flow.createNewFlow(createdCopilot.id, flow) 75 | expect(_flow).to.have.keys('blocks', 'description', 'flow_id', 'last_saved_at', 'name'); 76 | }) 77 | 78 | 79 | it('should fetch all flows for the bot by bot id', async function() { 80 | const flows = await sdk.flow.getAllFlowsByBotId(createdCopilot.id) 81 | expect(flows).to.be.an('array') 82 | }) 83 | 84 | 85 | after(async function () { 86 | try { 87 | if (createdCopilot) { 88 | const deletionResult = await sdk.copilot.deleteCopilot(createdCopilot.id); 89 | console.log("Test: Delete Copilot - Passed", deletionResult); 90 | } 91 | } catch (error: any) { 92 | console.error("Error in cleanup:", error.message); 93 | expect.fail(error.message); 94 | } 95 | }); 96 | }); 97 | -------------------------------------------------------------------------------- /test/initChat.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import { describe, it, before } from 'mocha'; 3 | import { OpenCopilotSdk } from '../src'; 4 | import { Copilot } from '../src/models'; 5 | 6 | describe('Copilot Integration Tests', function () { 7 | this.timeout(20000); 8 | let sdk: OpenCopilotSdk; 9 | let createdCopilot: Copilot; 10 | 11 | before(function () { 12 | sdk = new OpenCopilotSdk("http://127.0.0.1:8888/backend"); 13 | }); 14 | 15 | it('should create a Copilot and update it', async function () { 16 | try { 17 | createdCopilot = await sdk.copilot.createCopilot({ 18 | name: "TestCopilot" 19 | }); 20 | expect(createdCopilot.name).to.equal("TestCopilot"); 21 | } catch (error: any) { 22 | console.error("Error in Copilot integration tests:", error.message); 23 | expect.fail(error.message); 24 | } 25 | }); 26 | 27 | it('should use the created Copilot to init chat', async function () { 28 | try { 29 | const result = await sdk.chat.initChat("abc1234", createdCopilot.token) 30 | expect(result).to.have.keys('bot_name', 'faq', 'history', 'initial_questions', 'logo'); 31 | expect(result.bot_name).to.be.a('string'); 32 | expect(result.faq).to.be.an('array'); 33 | expect(result.history).to.be.an('array'); 34 | expect(result.initial_questions).to.be.an('array'); 35 | expect(result.logo).to.be.a('string'); 36 | } catch (error: any) { 37 | console.error("Error in another operation:", error.message); 38 | expect.fail(error.message); 39 | } 40 | }); 41 | 42 | after(async function () { 43 | try { 44 | if (createdCopilot) { 45 | const deletionResult = await sdk.copilot.deleteCopilot(createdCopilot.id); 46 | console.log("Test: Delete Copilot - Passed", deletionResult); 47 | } 48 | } catch (error: any) { 49 | console.error("Error in cleanup:", error.message); 50 | expect.fail(error.message); 51 | } 52 | }); 53 | }); 54 | -------------------------------------------------------------------------------- /test/integration.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import { describe, it, before, after } from 'mocha'; 3 | import { OpenCopilotSdk } from '../src'; 4 | import * as chai from 'chai'; 5 | 6 | const assert = chai.assert; 7 | import { Copilot } from '../src/models'; 8 | 9 | const sdk = new OpenCopilotSdk('http://127.0.0.1:8888/backend'); 10 | describe('Integration Tests', function () { 11 | let jarvis: Copilot; 12 | 13 | this.timeout(20000); 14 | 15 | before(async function () { 16 | try { 17 | jarvis = await sdk.copilot.createCopilot({ 18 | name: 'Jarvis', 19 | }); 20 | 21 | assert.strictEqual(jarvis.name, 'Jarvis', 'Create Copilot failed'); 22 | 23 | await sdk.copilot.updateCopilot(jarvis.id, { 24 | name: 'Jarvis 2.0', 25 | promptMessage: 'Hello, I am your friendly AI assistant!', 26 | status: 'published', 27 | website: 'http://jarvisworld.com', 28 | }); 29 | 30 | // Test: Get Copilot 31 | jarvis = (await sdk.copilot.getCopilot(jarvis.id)).chatbot; 32 | assert.strictEqual(jarvis.name, 'Jarvis 2.0', 'Update Copilot failed'); 33 | } catch (error: any) { 34 | console.error('Error in the Jarvis saga:', error.message); 35 | throw error; 36 | } 37 | }); 38 | 39 | it('should pass integration tests for Copilot and Chat', async function () { 40 | try { 41 | it('should get all Copilots and assert they are an array', async function () { 42 | try { 43 | const copilots = await sdk.copilot.getAllCopilots(); 44 | expect(copilots).to.be.an('array'); 45 | } catch (error: any) { 46 | console.error("Error in Copilot integration tests:", error.message); 47 | expect.fail(error.message); 48 | } 49 | }); 50 | } catch (error: any) { 51 | console.error('Error in the integration tests:', error.message); 52 | expect.fail(error.message); 53 | } 54 | }); 55 | 56 | 57 | it('should list conversations and get unique sessions', async function () { 58 | try { 59 | // Test: List Conversations 60 | const conversations = await sdk.chat.listConversations("abc123"); 61 | // Assert conversations is an array 62 | expect(conversations).to.be.an('array'); 63 | 64 | // Test: Get Unique Sessions 65 | const uniqueSessions = await sdk.chat.getUniqueSessions(jarvis.id); 66 | // Assert uniqueSessions is an array 67 | expect(uniqueSessions).to.be.an('array'); 68 | 69 | // Test: Get Messages Per Conversation 70 | const messages = await sdk.chat.getMessagesPerConversation("abc123"); 71 | expect(messages).to.be.an('array'); 72 | 73 | } catch (error: any) { 74 | console.error("Error in Chat integration tests:", error.message); 75 | expect.fail(error.message); 76 | } 77 | }); 78 | 79 | describe('', async function() { 80 | const chatMessageResult = await sdk.chat.sendChatMessage("abc123", jarvis.token, { 81 | from: 'user', 82 | content: 'Greet me in less than 20 characters', 83 | id: jarvis.id, 84 | headers: { 85 | 'X-Copilot': jarvis.id, 86 | }, 87 | session_id: "abc123", 88 | }); 89 | 90 | it('should have a response text less than 50 characters', function () { 91 | assert.ok(chatMessageResult.response.text.length < 50, 'Chat message response text is not less than 50 characters'); 92 | }); 93 | }) 94 | 95 | 96 | 97 | after(async function () { 98 | const result = await sdk.copilot.deleteCopilot(jarvis.id); 99 | console.log('Test: Delete Copilot - Passed', result); 100 | }); 101 | }); 102 | 103 | -------------------------------------------------------------------------------- /test/knowledgebase.test.ts: -------------------------------------------------------------------------------- 1 | import axios, { AxiosResponse } from 'axios'; 2 | import { expect } from 'chai'; 3 | import { OpenCopilotSdk } from '../src'; 4 | import { Action, Copilot } from '../src/models'; 5 | 6 | function sleep(ms: number): Promise { 7 | return new Promise(resolve => setTimeout(resolve, ms)); 8 | } 9 | 10 | describe('Your Test Suite Description', function () { 11 | this.timeout(70000); 12 | let sdk: OpenCopilotSdk; 13 | let createdCopilot: Copilot; 14 | 15 | before(function () { 16 | sdk = new OpenCopilotSdk("http://127.0.0.1:8888/backend"); 17 | }); 18 | 19 | it('should create a copilot to add websites', async function () { 20 | try { 21 | createdCopilot = await sdk.copilot.createCopilot({ 22 | name: "WebsitesCopilot" 23 | }); 24 | expect(createdCopilot.name).to.equal("WebsitesCopilot"); 25 | } catch (error: any) { 26 | console.error("Error in Copilot integration tests:", error.message); 27 | expect.fail(error.message); 28 | } 29 | }); 30 | 31 | it('should ingest website', async () => { 32 | // @todo add optional limit parameter to website ingestion, for test we don't want to ingest everything, just one page 33 | const response = await sdk.knowledgebase.ingestWebsites(createdCopilot.id, ["http://qdrant.tech/"]) 34 | expect(response).to.have.deep.equal("Datasource ingestion started successfully"); 35 | 36 | console.log("Ingestion in progress, wait for 30 seconds, this takes time ...") 37 | await sleep(30000); 38 | }); 39 | 40 | 41 | it('should make sure that the datasource was ingested successfully', async function () { 42 | const documents = await sdk.knowledgebase.hasDocuments(createdCopilot.id) 43 | expect(documents.result.points[0]?.payload.page_content).to.be.a('string'); 44 | expect(documents.result.points[0]?.payload.page_content.length).to.be.greaterThan(5) 45 | }) 46 | 47 | after(async function () { 48 | try { 49 | if (createdCopilot) { 50 | const deletionResult = await sdk.copilot.deleteCopilot(createdCopilot.id); 51 | console.log("Test: Delete Copilot - Passed", deletionResult); 52 | } 53 | } catch (error: any) { 54 | console.error("Error in cleanup:", error.message); 55 | expect.fail(error.message); 56 | } 57 | }); 58 | }); 59 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "types": ["node"], 5 | "module": "commonjs", 6 | "strict": true, 7 | "esModuleInterop": true, 8 | "skipLibCheck": true, 9 | "forceConsistentCasingInFileNames": true, 10 | "outDir": "./dist", 11 | "rootDir": "./src", 12 | "resolveJsonModule": true, 13 | "lib": [ 14 | "ES2020", 15 | "DOM" 16 | ], 17 | "moduleResolution": "node", 18 | "isolatedModules": true, 19 | "declaration": true 20 | }, 21 | "include": [ 22 | "src/**/*.ts" 23 | ], 24 | "exclude": [ 25 | "node_modules" 26 | ] 27 | } --------------------------------------------------------------------------------